sub_815C0D4 finished

This commit is contained in:
jiangzhengwenjz
2019-06-10 12:44:12 +08:00
parent b9dd482ec9
commit 35c1491147
+28 -197
View File
@@ -472,7 +472,7 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId)
if (++data[2] > 63)
{
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);
data[2] = 0;
++data[3];
@@ -513,7 +513,7 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId)
void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId)
{
s16* data = gTasks[taskId].data;
s16 *data = gTasks[taskId].data;
if (!sub_80BF518(0))
++data[3];
}
@@ -560,7 +560,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId)
void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId)
{
s16* data = (u16 *)gTasks[taskId].data;
s16 *data = (u16 *)gTasks[taskId].data;
if (!sub_80BF518(0))
++data[3];
}
@@ -732,7 +732,7 @@ void TeachyTvPostBattleFadeControl(u8 taskId)
s16 *data = gTasks[taskId].data;
if (!(gPaletteFade.active))
{
const u8* funcIdx = gUnknown_8479390;
const u8 *funcIdx = gUnknown_8479390;
int arg = funcIdx[gTeachyTV_StaticResources.optionChosen];
data[3] = arg;
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)
{
res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y);
if (res << 24)
if (res)
{
objTemAddr = gUnknown_83A0010;
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)
{
u32 diff1, diff2;
s16 *data = gTasks[sprite->data[0]].data;
s16 diff1, diff2, *data = gTasks[sprite->data[0]].data;
struct Sprite *objAddr = &gSprites[data[1]];
if (gUnknown_203F450->var_4006 == 1)
DestroySprite(sprite);
@@ -794,12 +793,12 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite)
sprite->subpriority = 0;
diff1 = (u16)(sprite->pos2.x - objAddr->pos2.x);
diff2 = (u16)(sprite->pos2.y - objAddr->pos2.y);
diff1 = ((diff1 << 0x10) + 0xF0000) >> 0x10;
if (diff1 <= 0x1E)
diff1 += 0xF;
if ((u16)diff1 <= 0x1E)
{
if ((s16)diff2 > -0x10)
if (diff2 > -0x10)
{
if ((s16)diff2 <= 0x17)
if (diff2 <= 0x17)
return;
}
}
@@ -850,7 +849,7 @@ void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId)
++data[7];
break;
case 1:
if (sub_80D08F8() << 24)
if (sub_80D08F8())
{
SetMainCallback2(sub_800FD9C);
DestroyTask(taskId);
@@ -1317,205 +1316,40 @@ void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blo
TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[7] & 0x3FF)], (metaTilesArray[7] >> 10) & 3);
}
#ifdef NONMATCHING
void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile)
{
u32 i;
u32 j;
vu32 src;
u8* buffer = (u8 *)AllocZeroed(0x20);
src = ((u32)AllocZeroed(0x20));
u8 i, j, * src, *buffer = (u8 *)AllocZeroed(0x20);
src = AllocZeroed(0x20);
CpuFastSet(tileset, buffer, 8);
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 offset = offset1 - offset2;
u32 value = buffer[offset];
u32 dstOffset = offset1 + j;
*(u8*)(src + dstOffset) = ((value & 0xF) << 4) + ((value & 0xF0) >> 4);
u8 value = buffer[(i << 2) - offset2];
src[(i << 2) + j] = ((value & 0xF) << 4) + ((value & 0xF0) >> 4);
}
}
CpuFastSet((u8*)src, buffer, 8);
CpuFastSet(src, buffer, 8);
}
if (metaTile & 2)
{
j = 0;
do
{
memcpy(&((u8*)src)[4 * j], &buffer[4 * (7 - j)], 4);
j = (u8)(j + 1);
}
while (j <= 7);
CpuFastSet((u8*)src, buffer, 8);
for (i = 0; i < 8; ++i)
memcpy(&src[4 * i], &buffer[4 * (7 - i)], 4);
CpuFastSet(src, buffer, 8);
}
j = 0;
do
for (i = 0; i < 32; ++i)
{
if (buffer[j] & 0xF0)
blockBuf[j] = (blockBuf[j] & 0xF) + (buffer[j] & 0xF0);
if (buffer[j] & 0xF)
blockBuf[j] = (blockBuf[j] & 0xF0) + (buffer[j] & 0xF);
j = (u8)(j + 1);
if (buffer[i] & 0xF0)
blockBuf[i] = (blockBuf[i] & 0xF) + (buffer[i] & 0xF0);
if (buffer[i] & 0xF)
blockBuf[i] = (blockBuf[i] & 0xF0) + (buffer[i] & 0xF);
}
while (j <= 0x1F);
Free((u8*)src);
Free(src);
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)
{
@@ -1533,11 +1367,8 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi
}
else
{
while (1)
while (++i < 16)
{
++i;
if (i > 0xF)
break;
temp = palIndexArrayBuf[i];
if (temp == pal)
break;