This commit is contained in:
jiangzhengwenjz
2019-06-10 05:32:23 +08:00
parent 4dc1fc8c66
commit f194f18f4c
+56 -68
View File
@@ -171,7 +171,6 @@ void TeachyTvMainCallback()
int taskId; int taskId;
struct Task *taskAddr; struct Task *taskAddr;
struct TeachyTvBuf **memBuf; struct TeachyTvBuf **memBuf;
u32 x;
state = gMain.state; state = gMain.state;
switch (state) switch (state)
@@ -207,8 +206,7 @@ void TeachyTvMainCallback()
else else
{ {
taskId = CreateTask(TeachyTvOptionListController, 0); taskId = CreateTask(TeachyTvOptionListController, 0);
x = (u32)TeachyTvSetupWindow(); gTasks[taskId].data[0] = TeachyTvSetupWindow();
gTasks[taskId].data[0] = (x << 24) >> 24;
gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam();
TeachyTvSetupScrollIndicatorArrowPair(); TeachyTvSetupScrollIndicatorArrowPair();
PlayNewMapMusic(BGM_FRLG_TEACHY_TV); PlayNewMapMusic(BGM_FRLG_TEACHY_TV);
@@ -277,8 +275,7 @@ u8 TeachyTvSetupWindow()
gMultiuseListMenuTemplate = gUnknown_8479368; gMultiuseListMenuTemplate = gUnknown_8479368;
gMultiuseListMenuTemplate.windowId = 1; gMultiuseListMenuTemplate.windowId = 1;
gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput;
hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); if (!CheckBagHasItem(ITEM_TM_CASE, 1))
if ( !(hasItem << 24) )
{ {
gMultiuseListMenuTemplate.items = &gUnknown_8479340; gMultiuseListMenuTemplate.items = &gUnknown_8479340;
gMultiuseListMenuTemplate.totalItems = 5; gMultiuseListMenuTemplate.totalItems = 5;
@@ -294,8 +291,7 @@ u8 TeachyTvSetupWindow()
void TeachyTvSetupScrollIndicatorArrowPair() void TeachyTvSetupScrollIndicatorArrowPair()
{ {
int hasItem; int hasItem;
hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); if (!CheckBagHasItem(ITEM_TM_CASE, 1))
if ( ! hasItem << 24 )
{ {
struct TeachyTvBuf * temp = gUnknown_203F450; struct TeachyTvBuf * temp = gUnknown_203F450;
temp->var_4007 = 0xFF; temp->var_4007 = 0xFF;
@@ -312,17 +308,16 @@ void TeachyTvSetupScrollIndicatorArrowPair()
void TeachyTvRemoveScrollIndicatorArrowPair() void TeachyTvRemoveScrollIndicatorArrowPair()
{ {
u8 *temp = &(gUnknown_203F450->var_4007); if ( gUnknown_203F450->var_4007 != 0xFF )
if ( *temp != 0xFF )
{ {
RemoveScrollIndicatorArrowPair(*temp); RemoveScrollIndicatorArrowPair(gUnknown_203F450->var_4007);
gUnknown_203F450->var_4007 = 0xFF; gUnknown_203F450->var_4007 = 0xFF;
} }
} }
void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt)
{ {
if ( play != 1 ) if ( play != TRUE )
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
} }
@@ -365,8 +360,8 @@ void TeachyTvClearWindowRegs()
void TeachyTvBg2AnimController() void TeachyTvBg2AnimController()
{ {
u16 *tilemapBuffer; u16 *tilemapBuffer;
u8 i; u8 i, offset2;
u32 offset, offset2, j; u32 j, offset;
tilemapBuffer = (u16 *)GetBgTilemapBuffer(2); tilemapBuffer = (u16 *)GetBgTilemapBuffer(2);
i = 1; i = 1;
@@ -378,19 +373,19 @@ void TeachyTvBg2AnimController()
do do
{ {
tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F;
offset2 = (offset2 + 1) << 0x18 >> 0x18; offset2 = (offset2 + 1);
} }
while ( offset2 <= 0x1B ); while ( offset2 <= 0x1B );
i = j; i = j;
} }
while ( j << 0x18 >> 0x18 <= 0xC ); while ( (u8)j <= 0xC );
schedule_bg_copy_tilemap_to_vram(2); schedule_bg_copy_tilemap_to_vram(2);
} }
void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) void TeachyTvSetupPostBattleWindowAndObj(u8 taskId)
{ {
u16 *v2 = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
int v1 = ((s16 *)v2)[1]; int v1 = (data)[1];
struct Sprite *v3 = &gSprites[v1]; struct Sprite *v3 = &gSprites[v1];
int op; int op;
@@ -401,18 +396,18 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId)
{ {
if ( op <= 3 ) if ( op <= 3 )
{ {
TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)data)[2], 0x78, 0x38, 0);
ChangeBgX(3, 0x3000, 1); ChangeBgX(3, 0x3000, 1);
ChangeBgY(3, 0x3000, 2); ChangeBgY(3, 0x3000, 2);
gUnknown_203F450->var_4004 += 3; gUnknown_203F450->var_4004 += 3;
gUnknown_203F450->var_4005 -= 3; gUnknown_203F450->var_4005 -= 3;
} }
else if ( op <= 5 ) else if ( op <= 5 )
TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)data)[2], 0x78, 0x38, 0);
} }
v2[4] = 0; data[4] = 0;
v2[5] = 0; data[5] = 0;
TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1); TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1);
} }
@@ -458,32 +453,32 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId)
#ifdef NONMATCHING #ifdef NONMATCHING
void TeachyTvOptionListController(u8 taskId) void TeachyTvOptionListController(u8 taskId)
{ {
char *v2; s16 *data;
s32 v3; s32 res;
v2 = (char *)gTasks[taskId].data; data = gTasks[taskId].data;
TeachyTvBg2AnimController(); TeachyTvBg2AnimController();
if ( !(gPaletteFade.active) ) if ( !(gPaletteFade.active) )
{ {
v3 = ListMenuHandleInput(*v2); res = ListMenuHandleInput(*data);
ListMenuGetScrollAndRow(*v2, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); ListMenuGetScrollAndRow(*data, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow);
if ( ((gMain.newKeys) & 4 && (gTeachyTV_StaticResources.callback != UseFameCheckerFromMenu)) if ( ((gMain.newKeys) & 4 && (gTeachyTV_StaticResources.callback != UseFameCheckerFromMenu))
|| (v3 == -2) ) || (res == -2) )
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
TeachyTvQuitBeginFade(taskId); TeachyTvQuitBeginFade(taskId);
} }
else if ( v3 != -1 ) else if ( res != -1 )
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
gTeachyTV_StaticResources.optionChosen = v3; gTeachyTV_StaticResources.optionChosen = res;
DestroyListMenu(*v2, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); DestroyListMenu(*data, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow);
TeachyTvClearWindowRegs(); TeachyTvClearWindowRegs();
ClearWindowTilemap(1); ClearWindowTilemap(1);
schedule_bg_copy_tilemap_to_vram(0); schedule_bg_copy_tilemap_to_vram(0);
TeachyTvRemoveScrollIndicatorArrowPair(); TeachyTvRemoveScrollIndicatorArrowPair();
*((u16 *)v2 + 3) = 0; data[3] = 0;
*((u16 *)v2 + 2) = 0; data[2] = 0;
gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs;
} }
} }
@@ -637,14 +632,14 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId)
void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId)
{ {
u16* data = (u16 *)gTasks[taskId].data; s16* data = (u16 *)gTasks[taskId].data;
if ( !(sub_80BF518(0) << 16) ) if ( !sub_80BF518(0) )
++data[3]; ++data[3];
} }
void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId)
{ {
u16 *data; s16 *data;
data = gTasks[taskId].data; data = gTasks[taskId].data;
if ( gMain.newKeys & 2 ) if ( gMain.newKeys & 2 )
{ {
@@ -663,15 +658,13 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId)
{ {
void (***array)(u8) = &gUnknown_8479548; void (***array)(u8) = &gUnknown_8479548;
void (**cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen]; void (**cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen];
_call_via_r1( cluster[data[3]](taskId);
taskId,
cluster[(s16)data[3]]);
} }
} }
void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId)
{ {
u16 *data = (u16 *)gTasks[taskId].data; s16 *data = (u16 *)gTasks[taskId].data;
const char * const* texts = &gUnknown_8479560; const char * const* texts = &gUnknown_8479560;
TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]);
++data[3]; ++data[3];
@@ -679,7 +672,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId)
void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId)
{ {
u16 *data = (u16 *)gTasks[taskId].data; s16 *data = (u16 *)gTasks[taskId].data;
const char * const* texts = &gUnknown_8479578; const char * const* texts = &gUnknown_8479578;
TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]);
++data[3]; ++data[3];
@@ -687,16 +680,16 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId)
void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId)
{ {
u16* data = (u16 *)gTasks[taskId].data; s16* data = (u16 *)gTasks[taskId].data;
if ( !(sub_80BF518(0) << 16) ) if ( !sub_80BF518(0) )
++data[3]; ++data[3];
} }
void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId)
{ {
u16 *data; s16 *data;
data = (u16 *)gTasks[taskId].data; data = (u16 *)gTasks[taskId].data;
if ( gMain.newKeys & 3 ) if (JOY_NEW(A_BUTTON | B_BUTTON))
{ {
FillWindowPixelBuffer(0, 0xCC); FillWindowPixelBuffer(0, 0xCC);
CopyWindowToVram(0, 2); CopyWindowToVram(0, 2);
@@ -706,7 +699,7 @@ void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId)
void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId)
{ {
u16 *data; s16 *data;
data = (u16 *)gTasks[taskId].data; data = (u16 *)gTasks[taskId].data;
StartSpriteAnim(&gSprites[(s16)data[1]], 5); StartSpriteAnim(&gSprites[(s16)data[1]], 5);
data[2] = 0; data[2] = 0;
@@ -748,7 +741,7 @@ void TeachyTvClusFuncDudeMoveRight(u8 taskId)
ChangeBgX(3, 0x100, 1); ChangeBgX(3, 0x100, 1);
if ( !(++data[2] & 0xF) ) if ( !(++data[2] & 0xF) )
++gUnknown_203F450->var_4004; ++gUnknown_203F450->var_4004;
if ( !((((s16*)data)[2] + 8) & 0xF) ) if ( !((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 )
{ {
@@ -768,7 +761,7 @@ void TeachyTvClusFuncDudeTurnLeft(u8 taskId)
data = gTasks[taskId].data; data = gTasks[taskId].data;
v3 = &gSprites[data[1]]; v3 = &gSprites[data[1]];
StartSpriteAnim(v3, 6); StartSpriteAnim(v3, 6);
++(u16)data[3]; ++data[3];
data[4] = 0; data[4] = 0;
data[5] = 0; data[5] = 0;
TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 0); TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 0);
@@ -785,7 +778,7 @@ void TeachyTvClusFuncDudeMoveLeft(u8 taskId)
if ( !(v2->pos2.x & 0xF) ) if ( !(v2->pos2.x & 0xF) )
TeachyTvGrassAnimationMain(taskId, v2->pos2.x - 8, v2->pos2.y, 0, 0); TeachyTvGrassAnimationMain(taskId, v2->pos2.x - 8, v2->pos2.y, 0, 0);
if ( v2->pos2.x == 8 ) if ( v2->pos2.x == 8 )
++(u16)data[3]; ++data[3];
else else
--v2->pos2.x; --v2->pos2.x;
} }
@@ -793,7 +786,6 @@ void TeachyTvClusFuncDudeMoveLeft(u8 taskId)
void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId)
{ {
s16 *data; s16 *data;
int temp;
data = gTasks[taskId].data; data = gTasks[taskId].data;
if ( !data[2] ) if ( !data[2] )
@@ -801,13 +793,11 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId)
CopyToBgTilemapBufferRect_ChangePalette(1, &gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); CopyToBgTilemapBufferRect_ChangePalette(1, &gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11);
schedule_bg_copy_tilemap_to_vram(1); schedule_bg_copy_tilemap_to_vram(1);
} }
temp = (u16)data[2] + 1; if ( ++data[2] > 126 )
data[2] = temp;
if ( (s16)temp > 126 )
{ {
TeachyTvClearBg1EndGraphicText(); TeachyTvClearBg1EndGraphicText();
(u16)data[2] = 0; data[2] = 0;
++(u16)data[3]; ++data[3];
} }
} }
@@ -820,15 +810,12 @@ void TeachyTvClearBg1EndGraphicText()
void TeachyTvBackToOptionList(u8 taskId) void TeachyTvBackToOptionList(u8 taskId)
{ {
s16 *data; s16 *data;
s32 temp;
data = gTasks[taskId].data; data = gTasks[taskId].data;
if ( !data[2] ) if ( !data[2] )
PlayNewMapMusic(BGM_FRLG_TEACHY_TV); PlayNewMapMusic(BGM_FRLG_TEACHY_TV);
TeachyTvBg2AnimController(); TeachyTvBg2AnimController();
temp = (u16)data[2] + 1; if ( ++data[2] > 63 )
data[2] = temp;
if ( (s16)temp > 0x3F )
{ {
data[2] = 0; data[2] = 0;
data[3] = 0; data[3] = 0;
@@ -851,17 +838,18 @@ void TeachyTvBackToOptionList(u8 taskId)
void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId)
{ {
int op = gTeachyTV_StaticResources.optionChosen; int op = gTeachyTV_StaticResources.optionChosen;
if ( op < 0 ) if ( op >= 0 )
return;
if ( op <= 3 )
{ {
TeachyTvPrepBattle(taskId); if ( op <= 3 )
{
TeachyTvPrepBattle(taskId);
} }
else if ( op <= 5 ) else if ( op <= 5 )
{ {
*((void(**)())gUnknown_203F450) = TeachyTvSetupBagItemsByOptionChosen; *((void(**)())gUnknown_203F450) = TeachyTvSetupBagItemsByOptionChosen;
TeachyTvQuitBeginFade(taskId); TeachyTvQuitBeginFade(taskId);
}
} }
} }
@@ -897,7 +885,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( res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(
(u32)((x << 16) - 0x100000) >> 16, x - 0x10,
y); y);
if ( res << 24 ) if ( res << 24 )
{ {