sub_815C0D4 finished
This commit is contained in:
+28
-197
@@ -472,7 +472,7 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId)
|
|||||||
if (++data[2] > 63)
|
if (++data[2] > 63)
|
||||||
{
|
{
|
||||||
CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_203F450->buffer4, 0, 0, 0x20, 0x20, 0x11);
|
CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_203F450->buffer4, 0, 0, 0x20, 0x20, 0x11);
|
||||||
TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7);
|
TeachyTvSetSpriteCoordsAndSwitchFrame(((u8 *)data)[2], 8, 0x38, 7);
|
||||||
schedule_bg_copy_tilemap_to_vram(2);
|
schedule_bg_copy_tilemap_to_vram(2);
|
||||||
data[2] = 0;
|
data[2] = 0;
|
||||||
++data[3];
|
++data[3];
|
||||||
@@ -513,7 +513,7 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId)
|
|||||||
|
|
||||||
void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId)
|
void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId)
|
||||||
{
|
{
|
||||||
s16* data = gTasks[taskId].data;
|
s16 *data = gTasks[taskId].data;
|
||||||
if (!sub_80BF518(0))
|
if (!sub_80BF518(0))
|
||||||
++data[3];
|
++data[3];
|
||||||
}
|
}
|
||||||
@@ -560,7 +560,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId)
|
|||||||
|
|
||||||
void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId)
|
void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId)
|
||||||
{
|
{
|
||||||
s16* data = (u16 *)gTasks[taskId].data;
|
s16 *data = (u16 *)gTasks[taskId].data;
|
||||||
if (!sub_80BF518(0))
|
if (!sub_80BF518(0))
|
||||||
++data[3];
|
++data[3];
|
||||||
}
|
}
|
||||||
@@ -732,7 +732,7 @@ void TeachyTvPostBattleFadeControl(u8 taskId)
|
|||||||
s16 *data = gTasks[taskId].data;
|
s16 *data = gTasks[taskId].data;
|
||||||
if (!(gPaletteFade.active))
|
if (!(gPaletteFade.active))
|
||||||
{
|
{
|
||||||
const u8* funcIdx = gUnknown_8479390;
|
const u8 *funcIdx = gUnknown_8479390;
|
||||||
int arg = funcIdx[gTeachyTV_StaticResources.optionChosen];
|
int arg = funcIdx[gTeachyTV_StaticResources.optionChosen];
|
||||||
data[3] = arg;
|
data[3] = arg;
|
||||||
gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs;
|
gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs;
|
||||||
@@ -751,7 +751,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m
|
|||||||
if (gUnknown_203F450->var_4006 != 1)
|
if (gUnknown_203F450->var_4006 != 1)
|
||||||
{
|
{
|
||||||
res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y);
|
res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y);
|
||||||
if (res << 24)
|
if (res)
|
||||||
{
|
{
|
||||||
objTemAddr = gUnknown_83A0010;
|
objTemAddr = gUnknown_83A0010;
|
||||||
objId = CreateSprite(*(objTemAddr+4), 0, 0, subprio);
|
objId = CreateSprite(*(objTemAddr+4), 0, 0, subprio);
|
||||||
@@ -777,8 +777,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m
|
|||||||
|
|
||||||
void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite)
|
void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite)
|
||||||
{
|
{
|
||||||
u32 diff1, diff2;
|
s16 diff1, diff2, *data = gTasks[sprite->data[0]].data;
|
||||||
s16 *data = gTasks[sprite->data[0]].data;
|
|
||||||
struct Sprite *objAddr = &gSprites[data[1]];
|
struct Sprite *objAddr = &gSprites[data[1]];
|
||||||
if (gUnknown_203F450->var_4006 == 1)
|
if (gUnknown_203F450->var_4006 == 1)
|
||||||
DestroySprite(sprite);
|
DestroySprite(sprite);
|
||||||
@@ -794,12 +793,12 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite)
|
|||||||
sprite->subpriority = 0;
|
sprite->subpriority = 0;
|
||||||
diff1 = (u16)(sprite->pos2.x - objAddr->pos2.x);
|
diff1 = (u16)(sprite->pos2.x - objAddr->pos2.x);
|
||||||
diff2 = (u16)(sprite->pos2.y - objAddr->pos2.y);
|
diff2 = (u16)(sprite->pos2.y - objAddr->pos2.y);
|
||||||
diff1 = ((diff1 << 0x10) + 0xF0000) >> 0x10;
|
diff1 += 0xF;
|
||||||
if (diff1 <= 0x1E)
|
if ((u16)diff1 <= 0x1E)
|
||||||
{
|
{
|
||||||
if ((s16)diff2 > -0x10)
|
if (diff2 > -0x10)
|
||||||
{
|
{
|
||||||
if ((s16)diff2 <= 0x17)
|
if (diff2 <= 0x17)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -850,7 +849,7 @@ void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId)
|
|||||||
++data[7];
|
++data[7];
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (sub_80D08F8() << 24)
|
if (sub_80D08F8())
|
||||||
{
|
{
|
||||||
SetMainCallback2(sub_800FD9C);
|
SetMainCallback2(sub_800FD9C);
|
||||||
DestroyTask(taskId);
|
DestroyTask(taskId);
|
||||||
@@ -1317,205 +1316,40 @@ void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blo
|
|||||||
TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[7] & 0x3FF)], (metaTilesArray[7] >> 10) & 3);
|
TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[7] & 0x3FF)], (metaTilesArray[7] >> 10) & 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NONMATCHING
|
|
||||||
void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile)
|
void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile)
|
||||||
{
|
{
|
||||||
u32 i;
|
u8 i, j, * src, *buffer = (u8 *)AllocZeroed(0x20);
|
||||||
u32 j;
|
src = AllocZeroed(0x20);
|
||||||
vu32 src;
|
|
||||||
u8* buffer = (u8 *)AllocZeroed(0x20);
|
|
||||||
src = ((u32)AllocZeroed(0x20));
|
|
||||||
CpuFastSet(tileset, buffer, 8);
|
CpuFastSet(tileset, buffer, 8);
|
||||||
if (metaTile & 1)
|
if (metaTile & 1)
|
||||||
{
|
{
|
||||||
for (i=0; i<8; ++i)
|
for (i = 0; i < 8; ++i)
|
||||||
{
|
{
|
||||||
for (j=0; j<4; ++j)
|
for (j = 0; j < 4; ++j)
|
||||||
{
|
{
|
||||||
u32 offset1 = i << 2;
|
|
||||||
u32 offset2 = j - 3;
|
u32 offset2 = j - 3;
|
||||||
u32 offset = offset1 - offset2;
|
u8 value = buffer[(i << 2) - offset2];
|
||||||
u32 value = buffer[offset];
|
src[(i << 2) + j] = ((value & 0xF) << 4) + ((value & 0xF0) >> 4);
|
||||||
u32 dstOffset = offset1 + j;
|
|
||||||
*(u8*)(src + dstOffset) = ((value & 0xF) << 4) + ((value & 0xF0) >> 4);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CpuFastSet((u8*)src, buffer, 8);
|
CpuFastSet(src, buffer, 8);
|
||||||
}
|
}
|
||||||
if (metaTile & 2)
|
if (metaTile & 2)
|
||||||
{
|
{
|
||||||
j = 0;
|
for (i = 0; i < 8; ++i)
|
||||||
do
|
memcpy(&src[4 * i], &buffer[4 * (7 - i)], 4);
|
||||||
{
|
CpuFastSet(src, buffer, 8);
|
||||||
memcpy(&((u8*)src)[4 * j], &buffer[4 * (7 - j)], 4);
|
|
||||||
j = (u8)(j + 1);
|
|
||||||
}
|
|
||||||
while (j <= 7);
|
|
||||||
CpuFastSet((u8*)src, buffer, 8);
|
|
||||||
}
|
}
|
||||||
j = 0;
|
for (i = 0; i < 32; ++i)
|
||||||
do
|
|
||||||
{
|
{
|
||||||
if (buffer[j] & 0xF0)
|
if (buffer[i] & 0xF0)
|
||||||
blockBuf[j] = (blockBuf[j] & 0xF) + (buffer[j] & 0xF0);
|
blockBuf[i] = (blockBuf[i] & 0xF) + (buffer[i] & 0xF0);
|
||||||
if (buffer[j] & 0xF)
|
if (buffer[i] & 0xF)
|
||||||
blockBuf[j] = (blockBuf[j] & 0xF0) + (buffer[j] & 0xF);
|
blockBuf[i] = (blockBuf[i] & 0xF0) + (buffer[i] & 0xF);
|
||||||
j = (u8)(j + 1);
|
|
||||||
}
|
}
|
||||||
while (j <= 0x1F);
|
Free(src);
|
||||||
Free((u8*)src);
|
|
||||||
Free(buffer);
|
Free(buffer);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
NAKED
|
|
||||||
void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile)
|
|
||||||
{
|
|
||||||
asm_unified("\n\
|
|
||||||
push {r4-r7,lr}\n\
|
|
||||||
mov r7, r10\n\
|
|
||||||
mov r6, r9\n\
|
|
||||||
mov r5, r8\n\
|
|
||||||
push {r5-r7}\n\
|
|
||||||
sub sp, 0x4\n\
|
|
||||||
mov r9, r0\n\
|
|
||||||
adds r4, r1, 0\n\
|
|
||||||
lsls r2, 24\n\
|
|
||||||
lsrs r2, 24\n\
|
|
||||||
mov r10, r2\n\
|
|
||||||
movs r0, 0x20\n\
|
|
||||||
bl AllocZeroed\n\
|
|
||||||
adds r6, r0, 0\n\
|
|
||||||
movs r0, 0x20\n\
|
|
||||||
bl AllocZeroed\n\
|
|
||||||
str r0, [sp]\n\
|
|
||||||
adds r0, r4, 0\n\
|
|
||||||
adds r1, r6, 0\n\
|
|
||||||
movs r2, 0x8\n\
|
|
||||||
bl CpuFastSet\n\
|
|
||||||
movs r0, 0x1\n\
|
|
||||||
mov r1, r10\n\
|
|
||||||
ands r0, r1\n\
|
|
||||||
cmp r0, 0\n\
|
|
||||||
beq _0815C15A\n\
|
|
||||||
movs r5, 0\n\
|
|
||||||
movs r7, 0xF\n\
|
|
||||||
mov r12, r7\n\
|
|
||||||
movs r0, 0xF0\n\
|
|
||||||
mov r8, r0\n\
|
|
||||||
_0815C118:\n\
|
|
||||||
movs r3, 0\n\
|
|
||||||
lsls r4, r5, 2\n\
|
|
||||||
_0815C11C:\n\
|
|
||||||
subs r0, r3, 0x3\n\
|
|
||||||
subs r0, r4, r0\n\
|
|
||||||
adds r0, r6, r0\n\
|
|
||||||
ldrb r1, [r0]\n\
|
|
||||||
adds r2, r4, r3\n\
|
|
||||||
ldr r7, [sp]\n\
|
|
||||||
adds r2, r7, r2\n\
|
|
||||||
adds r0, r1, 0\n\
|
|
||||||
mov r7, r12\n\
|
|
||||||
ands r0, r7\n\
|
|
||||||
lsls r0, 4\n\
|
|
||||||
mov r7, r8\n\
|
|
||||||
ands r1, r7\n\
|
|
||||||
lsrs r1, 4\n\
|
|
||||||
adds r0, r1\n\
|
|
||||||
strb r0, [r2]\n\
|
|
||||||
adds r0, r3, 0x1\n\
|
|
||||||
lsls r0, 24\n\
|
|
||||||
lsrs r3, r0, 24\n\
|
|
||||||
cmp r3, 0x3\n\
|
|
||||||
bls _0815C11C\n\
|
|
||||||
adds r0, r5, 0x1\n\
|
|
||||||
lsls r0, 24\n\
|
|
||||||
lsrs r5, r0, 24\n\
|
|
||||||
cmp r5, 0x7\n\
|
|
||||||
bls _0815C118\n\
|
|
||||||
ldr r0, [sp]\n\
|
|
||||||
adds r1, r6, 0\n\
|
|
||||||
movs r2, 0x8\n\
|
|
||||||
bl CpuFastSet\n\
|
|
||||||
_0815C15A:\n\
|
|
||||||
movs r0, 0x2\n\
|
|
||||||
mov r1, r10\n\
|
|
||||||
ands r0, r1\n\
|
|
||||||
cmp r0, 0\n\
|
|
||||||
beq _0815C18E\n\
|
|
||||||
movs r5, 0\n\
|
|
||||||
_0815C166:\n\
|
|
||||||
lsls r0, r5, 2\n\
|
|
||||||
ldr r7, [sp]\n\
|
|
||||||
adds r0, r7\n\
|
|
||||||
movs r1, 0x7\n\
|
|
||||||
subs r1, r5\n\
|
|
||||||
lsls r1, 2\n\
|
|
||||||
adds r1, r6\n\
|
|
||||||
movs r2, 0x4\n\
|
|
||||||
bl memcpy\n\
|
|
||||||
adds r0, r5, 0x1\n\
|
|
||||||
lsls r0, 24\n\
|
|
||||||
lsrs r5, r0, 24\n\
|
|
||||||
cmp r5, 0x7\n\
|
|
||||||
bls _0815C166\n\
|
|
||||||
ldr r0, [sp]\n\
|
|
||||||
adds r1, r6, 0\n\
|
|
||||||
movs r2, 0x8\n\
|
|
||||||
bl CpuFastSet\n\
|
|
||||||
_0815C18E:\n\
|
|
||||||
movs r5, 0\n\
|
|
||||||
movs r0, 0xF0\n\
|
|
||||||
mov r8, r0\n\
|
|
||||||
movs r1, 0xF\n\
|
|
||||||
mov r12, r1\n\
|
|
||||||
_0815C198:\n\
|
|
||||||
adds r4, r6, r5\n\
|
|
||||||
ldrb r0, [r4]\n\
|
|
||||||
mov r3, r8\n\
|
|
||||||
ands r3, r0\n\
|
|
||||||
cmp r3, 0\n\
|
|
||||||
beq _0815C1B2\n\
|
|
||||||
mov r7, r9\n\
|
|
||||||
adds r2, r7, r5\n\
|
|
||||||
ldrb r1, [r2]\n\
|
|
||||||
mov r0, r12\n\
|
|
||||||
ands r0, r1\n\
|
|
||||||
adds r0, r3\n\
|
|
||||||
strb r0, [r2]\n\
|
|
||||||
_0815C1B2:\n\
|
|
||||||
ldrb r0, [r4]\n\
|
|
||||||
mov r3, r12\n\
|
|
||||||
ands r3, r0\n\
|
|
||||||
cmp r3, 0\n\
|
|
||||||
beq _0815C1CA\n\
|
|
||||||
mov r0, r9\n\
|
|
||||||
adds r2, r0, r5\n\
|
|
||||||
ldrb r1, [r2]\n\
|
|
||||||
mov r0, r8\n\
|
|
||||||
ands r0, r1\n\
|
|
||||||
adds r0, r3\n\
|
|
||||||
strb r0, [r2]\n\
|
|
||||||
_0815C1CA:\n\
|
|
||||||
adds r0, r5, 0x1\n\
|
|
||||||
lsls r0, 24\n\
|
|
||||||
lsrs r5, r0, 24\n\
|
|
||||||
cmp r5, 0x1F\n\
|
|
||||||
bls _0815C198\n\
|
|
||||||
ldr r0, [sp]\n\
|
|
||||||
bl Free\n\
|
|
||||||
adds r0, r6, 0\n\
|
|
||||||
bl Free\n\
|
|
||||||
add sp, 0x4\n\
|
|
||||||
pop {r3-r5}\n\
|
|
||||||
mov r8, r3\n\
|
|
||||||
mov r9, r4\n\
|
|
||||||
mov r10, r5\n\
|
|
||||||
pop {r4-r7}\n\
|
|
||||||
pop {r0}\n\
|
|
||||||
bx r0\n\
|
|
||||||
");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile)
|
u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile)
|
||||||
{
|
{
|
||||||
@@ -1533,11 +1367,8 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while (1)
|
while (++i < 16)
|
||||||
{
|
{
|
||||||
++i;
|
|
||||||
if (i > 0xF)
|
|
||||||
break;
|
|
||||||
temp = palIndexArrayBuf[i];
|
temp = palIndexArrayBuf[i];
|
||||||
if (temp == pal)
|
if (temp == pal)
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user