now using struct decl

This commit is contained in:
jiangzhengwenjz
2019-06-10 03:55:42 +08:00
parent d0315c2f67
commit 0faa768a09
+56 -48
View File
@@ -40,8 +40,21 @@ struct TeachyTvCtrlBlk
u16 filler; u16 filler;
}; };
struct TeachyTvBuf
{
u32 state;
u8 buffer1[0x1000];
u8 buffer2[0x1000];
u8 buffer3[0x1000];
u8 buffer4[0x1000];
u8 var_4004;
u8 var_4005;
u8 var_4006;
u8 var_4007;
};
extern struct TeachyTvCtrlBlk gTeachyTV_StaticResources; extern struct TeachyTvCtrlBlk gTeachyTV_StaticResources;
extern void * gUnknown_203F450; extern struct TeachyTvBuf * gUnknown_203F450;
extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380;
extern const char gUnknown_841B83D; extern const char gUnknown_841B83D;
extern const struct BgTemplate gUnknown_84792E0; extern const struct BgTemplate gUnknown_84792E0;
@@ -157,18 +170,18 @@ void TeachyTvMainCallback()
int state; int state;
int taskId; int taskId;
struct Task *taskAddr; struct Task *taskAddr;
u8 **memBuf; struct TeachyTvBuf **memBuf;
u32 x; u32 x;
state = gMain.state; state = gMain.state;
switch (state) switch (state)
{ {
case 0: case 0:
memBuf = (u8 **)&gUnknown_203F450; memBuf = &gUnknown_203F450;
(*memBuf) = (u8*)AllocZeroed(0x4008); (*memBuf) = (struct TeachyTvBuf *)AllocZeroed(0x4008);
*(u32*)gUnknown_203F450 = (u32)state; gUnknown_203F450->state = (u32)state;
*((u8*)gUnknown_203F450 + 0x4006) = state; gUnknown_203F450->var_4006 = state;
*((u8*)gUnknown_203F450 + 0x4007) = 0xFF; gUnknown_203F450->var_4007 = 0xFF;
VblankHblankHandlerSetZero(); VblankHblankHandlerSetZero();
clear_scheduled_bg_copies_to_vram(); clear_scheduled_bg_copies_to_vram();
ScanlineEffect_Stop(); ScanlineEffect_Stop();
@@ -219,9 +232,9 @@ void TeachyTvSetupBg()
InitBgReg(); InitBgReg();
ResetBgsAndClearDma3BusyFlags(0); ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, &gUnknown_84792E0, 4); InitBgsFromTemplates(0, &gUnknown_84792E0, 4);
SetBgTilemapBuffer(1, (u8 *)gUnknown_203F450 + 4); SetBgTilemapBuffer(1, gUnknown_203F450->buffer1);
SetBgTilemapBuffer(2, (u8 *)gUnknown_203F450 + 0x1004); SetBgTilemapBuffer(2, gUnknown_203F450->buffer2);
SetBgTilemapBuffer(3, (u8 *)gUnknown_203F450 + 0x2004); SetBgTilemapBuffer(3, gUnknown_203F450->buffer3);
SetGpuReg(REG_OFFSET_DISPCNT, 0x3040); SetGpuReg(REG_OFFSET_DISPCNT, 0x3040);
ShowBg(0); ShowBg(0);
ShowBg(1); ShowBg(1);
@@ -229,8 +242,8 @@ void TeachyTvSetupBg()
ShowBg(3); ShowBg(3);
ChangeBgX(3, 0x1000, 2); ChangeBgX(3, 0x1000, 2);
ChangeBgY(3, 0x2800, 1); ChangeBgY(3, 0x2800, 1);
*((u8 *)gUnknown_203F450 + 0x4004) = 0; gUnknown_203F450->var_4004 = 0;
*((u8 *)gUnknown_203F450 + 0x4005) = 3; gUnknown_203F450->var_4005 = 3;
SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0);
} }
@@ -240,12 +253,12 @@ void TeachyTvLoadGraphic()
src = 0; src = 0;
reset_temp_tile_data_buffers(); reset_temp_tile_data_buffers();
decompress_and_copy_tile_data_to_vram(1, &gUnknown_8E86240, 0, 0, 0); decompress_and_copy_tile_data_to_vram(1, &gUnknown_8E86240, 0, 0, 0);
LZDecompressWram(&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 0x4); LZDecompressWram(&gUnknown_8E86BE8, gUnknown_203F450->buffer1);
LZDecompressWram(&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); LZDecompressWram(&gUnknown_8E86D6C, gUnknown_203F450->buffer4);
LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80); LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80);
LoadPalette(&src, 0, 2); LoadPalette(&src, 0, 2);
LoadSpritePalette(&gUnknown_83A5348); LoadSpritePalette(&gUnknown_83A5348);
TeachyTvLoadBg3Map((u8 *)gUnknown_203F450 + 0x2004); TeachyTvLoadBg3Map(gUnknown_203F450->buffer3);
} }
void TeachyTvCreateAndRenderRbox() void TeachyTvCreateAndRenderRbox()
@@ -284,27 +297,26 @@ void TeachyTvSetupScrollIndicatorArrowPair()
hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1);
if ( ! hasItem << 24 ) if ( ! hasItem << 24 )
{ {
u8 * temp = (u8 *)gUnknown_203F450; struct TeachyTvBuf * temp = gUnknown_203F450;
*((u8 *)temp + 0x4007) = 0xFF; temp->var_4007 = 0xFF;
} }
else { else {
u8 *temp, res; struct TeachyTvBuf *temp;
res = AddScrollIndicatorArrowPair( u8 res;
&gUnknown_8479380, res = AddScrollIndicatorArrowPair(&gUnknown_8479380, &(gTeachyTV_StaticResources.scrollOffset));
&(gTeachyTV_StaticResources.scrollOffset)); temp = gUnknown_203F450;
temp = (u8 *)gUnknown_203F450; temp->var_4007 = res;
*((u8 *)temp + 0x4007) = res;
} }
} }
void TeachyTvRemoveScrollIndicatorArrowPair() void TeachyTvRemoveScrollIndicatorArrowPair()
{ {
u8 *temp = ((u8*)gUnknown_203F450 + 0x4007); u8 *temp = &(gUnknown_203F450->var_4007);
if ( *temp != 0xFF ) if ( *temp != 0xFF )
{ {
RemoveScrollIndicatorArrowPair(*temp); RemoveScrollIndicatorArrowPair(*temp);
*((u8*)gUnknown_203F450 + 0x4007) = 0xFF; gUnknown_203F450->var_4007 = 0xFF;
} }
} }
@@ -392,8 +404,8 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId)
TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0);
ChangeBgX(3, 0x3000, 1); ChangeBgX(3, 0x3000, 1);
ChangeBgY(3, 0x3000, 2); ChangeBgY(3, 0x3000, 2);
*((u8 *)gUnknown_203F450 + 0x4004) += 3; gUnknown_203F450->var_4004 += 3;
*((u8 *)gUnknown_203F450 + 0x4005) -= 3; gUnknown_203F450->var_4005 -= 3;
} }
else if ( op <= 5 ) else if ( op <= 5 )
TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0);
@@ -429,7 +441,7 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId)
{ {
if ( !(gPaletteFade.active) ) if ( !(gPaletteFade.active) )
{ {
if ( *(u32 *)gUnknown_203F450 ) if ( gUnknown_203F450->state )
{ {
SetMainCallback2(*(void (**)())gUnknown_203F450); SetMainCallback2(*(void (**)())gUnknown_203F450);
} }
@@ -580,7 +592,7 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId)
TeachyTvBg2AnimController(); TeachyTvBg2AnimController();
if ( ++data[2] > 63 ) if ( ++data[2] > 63 )
{ {
CopyToBgTilemapBufferRect_ChangePalette(2, (u8 *)gUnknown_203F450 + 0x3004, 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;
@@ -636,15 +648,15 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId)
data = gTasks[taskId].data; data = gTasks[taskId].data;
if ( gMain.newKeys & 2 ) if ( gMain.newKeys & 2 )
{ {
char *offset = ((char *)gUnknown_203F450 + 0x4006); u8 *offset = &(gUnknown_203F450->var_4006);
u32 v4 = 0; u32 zero = 0;
offset[0] = 1; offset[0] = 1;
TeachyTvSetSpriteCoordsAndSwitchFrame(*((char *)data + 2), 0, 0, 0); TeachyTvSetSpriteCoordsAndSwitchFrame(*((char *)data + 2), 0, 0, 0);
FillWindowPixelBuffer(0, 0xCC); FillWindowPixelBuffer(0, 0xCC);
CopyWindowToVram(0, 2); CopyWindowToVram(0, 2);
TeachyTvClearBg1EndGraphicText(); TeachyTvClearBg1EndGraphicText();
data[2] = v4; data[2] = zero;
data[3] = v4; data[3] = zero;
gTasks[taskId].func = TeachyTvBackToOptionList; gTasks[taskId].func = TeachyTvBackToOptionList;
} }
else else
@@ -707,17 +719,13 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId)
{ {
s16 *data; s16 *data;
struct Sprite *obj; struct Sprite *obj;
int temp;
int counter;
data = gTasks[taskId].data; data = gTasks[taskId].data;
obj = &gSprites[data[1]]; obj = &gSprites[data[1]];
ChangeBgY(3, 0x100, 2); ChangeBgY(3, 0x100, 2);
counter = (u16)data[2] + 1; if ( !( ++data[2] & 0xF ) )
((u16*)data)[2] = counter;
if ( !( counter % 16 ) )
{ {
--((u8*)gUnknown_203F450)[0x4005]; --gUnknown_203F450->var_4005;
TeachyTvGrassAnimationMain(taskId, obj->pos2.x, obj->pos2.y, 0, 0); TeachyTvGrassAnimationMain(taskId, obj->pos2.x, obj->pos2.y, 0, 0);
} }
if ( data[2] == 48 ) if ( data[2] == 48 )
@@ -739,7 +747,7 @@ void TeachyTvClusFuncDudeMoveRight(u8 taskId)
obj = &gSprites[(s16)data[1]]; obj = &gSprites[(s16)data[1]];
ChangeBgX(3, 0x100, 1); ChangeBgX(3, 0x100, 1);
if ( !(++data[2] & 0xF) ) if ( !(++data[2] & 0xF) )
++((u8*)gUnknown_203F450)[0x4004]; ++gUnknown_203F450->var_4004;
if ( !((((s16*)data)[2] + 8) & 0xF) ) if ( !((((s16*)data)[2] + 8) & 0xF) )
TeachyTvGrassAnimationMain(taskId, obj->pos2.x + 8, obj->pos2.y, 0, 0); TeachyTvGrassAnimationMain(taskId, obj->pos2.x + 8, obj->pos2.y, 0, 0);
if ( data[2] == 0x30 ) if ( data[2] == 0x30 )
@@ -834,9 +842,9 @@ void TeachyTvBackToOptionList(u8 taskId)
ChangeBgY(3, 0x0, 0); ChangeBgY(3, 0x0, 0);
ChangeBgX(3, 0x1000, 2); ChangeBgX(3, 0x1000, 2);
ChangeBgY(3, 0x2800, 1); ChangeBgY(3, 0x2800, 1);
((u8*)gUnknown_203F450)[0x4004] = 0; gUnknown_203F450->var_4004 = 0;
((u8*)gUnknown_203F450)[0x4005] = 3; gUnknown_203F450->var_4005 = 3;
((u8*)gUnknown_203F450)[0x4006] = 0; gUnknown_203F450->var_4006 = 0;
} }
} }
@@ -886,7 +894,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m
const struct SpriteTemplate *const *objTemAddr; const struct SpriteTemplate *const *objTemAddr;
subprio = subpriority; subprio = subpriority;
if ( ((u8*)gUnknown_203F450)[0x4006] != 1 ) if ( gUnknown_203F450->var_4006 != 1 )
{ {
res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj( res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(
(u32)((x << 16) - 0x100000) >> 16, (u32)((x << 16) - 0x100000) >> 16,
@@ -920,7 +928,7 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite)
u32 diff1, diff2; u32 diff1, diff2;
s16 *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 (((u8*)gUnknown_203F450)[0x4006] == 1) if (gUnknown_203F450->var_4006 == 1)
DestroySprite(sprite); DestroySprite(sprite);
else { else {
if (!sprite->animCmdIndex) if (!sprite->animCmdIndex)
@@ -950,14 +958,14 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite)
u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y)
{ {
const u8 * arr; const u8 * arr;
u8 *ptr; struct TeachyTvBuf *ptr;
int high, low; int high, low;
if ( (x < 0) || (y < 0) ) if ( (x < 0) || (y < 0) )
return 0; return 0;
arr = &gUnknown_84795C8; arr = &gUnknown_84795C8;
ptr = gUnknown_203F450; ptr = gUnknown_203F450;
high = ((y >> 4) + ptr[0x4005]) << 4; high = ((y >> 4) + ptr->var_4005) << 4;
low = ((x >> 4) + ptr[0x4004]); low = ((x >> 4) + ptr->var_4004);
return arr[high+low]; return arr[high+low];
} }