diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/teachy_tv.c | 39 | ||||
-rw-r--r-- | src/vs_seeker.c | 37 |
2 files changed, 51 insertions, 25 deletions
diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 2c34b731b..c20e7b419 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -22,8 +22,8 @@ typedef struct { void (*callback)(); u8 mode; u8 param1; - u16 param2; - u16 param3; + u16 scrollOffset; + u16 selectedRow; u8 param4; u8 filler; } TeachyTv_s; @@ -40,7 +40,7 @@ void TeachyTvCreateAndRenderRbox(); extern void TeachyTvInitIo(); extern u8 TeachyTvSetupObj(); extern void TeachyTvConfigRboxAndObj(u8); -extern u8 sub_815AEE8(); +u8 TeachyTvSetupWindow(); extern void sub_815AF5C(); extern void sub_815B094(); void TeachyTvSetupBg(); @@ -79,14 +79,13 @@ void VblankHandlerTeachyTv() void sub_815ABC4(u8 mode, void (*cb)()) { - // JZW: I'm sorry, but otherwise I can't make it match baserom TeachyTv_s *v3 = &gTeachyTV_StaticResources; u16 v4 = 0; v3->mode = mode; v3->callback = cb; if(!mode) { - v3->param2 = v4; - v3->param3 = v4; + v3->scrollOffset = v4; + v3->selectedRow = v4; v3->param1 = 0; } if(mode == 1) @@ -117,6 +116,7 @@ void C2TeachyTvMainCallback() u32 x; state = gMain.state; + // tried several ways to reproduce the control flow, but all failed. Now using goto if ( state == 0 ) goto section_0; else if ( state == 1 ) @@ -154,7 +154,7 @@ void C2TeachyTvMainCallback() else { taskId = CreateTask(sub_815B2C0, 0); - x = (u32)sub_815AEE8(); + x = (u32)TeachyTvSetupWindow(); gTasks[taskId].data[0] = (x << 24) >> 24; gTasks[taskId].data[1] = TeachyTvSetupObj(); sub_815AF5C(); @@ -214,4 +214,29 @@ void TeachyTvCreateAndRenderRbox() PutWindowTilemap(0); PutWindowTilemap(1u); CopyWindowToVram(0, 2u); +} + +extern struct ListMenuTemplate gUnknown_8479368; +extern struct ListMenuItem gUnknown_8479340; +extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); +extern void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); + +u8 TeachyTvSetupWindow() +{ + int hasItem; + gMultiuseListMenuTemplate = gUnknown_8479368; + gMultiuseListMenuTemplate.windowId = 1; + gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + if ( !(v0 << 24) ) + { + gMultiuseListMenuTemplate.items = &gUnknown_8479340; + gMultiuseListMenuTemplate.totalItems = 5; + gMultiuseListMenuTemplate.maxShowed = 5; + gMultiuseListMenuTemplate.upText_Y = (gMultiuseListMenuTemplate.upText_Y + 8) & 0xF; + } + return ListMenuInit( + &gMultiuseListMenuTemplate, + gTeachyTV_StaticResources.scrollOffset, + gTeachyTV_StaticResources.selectedRow); }
\ No newline at end of file diff --git a/src/vs_seeker.c b/src/vs_seeker.c index bd5b9c7ea..bd19d96ff 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -24,6 +24,8 @@ #include "unk_810c3a4.h" #include "constants/movement_commands.h" #include "vs_seeker.h" +#include "item.h" +#include "constants/items.h" typedef enum { @@ -635,6 +637,7 @@ void sub_810C444(void) #ifdef NONMATCHING bool8 sub_810C4EC(void) { + s8 mask; if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE) { if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100) @@ -643,25 +646,23 @@ bool8 sub_810C4EC(void) if (FlagGet(0x801) == TRUE) { - u16 x; - do { - x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; - } while (0); - if (x < 100) - { - x++; - gSaveBlock1Ptr->trainerRematchStepCounter = ((u16)(x << 8)) | (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF); - } - do { - x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; - } while (0); - if (x == 100) - { - FlagClear(0x801); - sub_810C640(); - sub_810D0D0(); - return TRUE; + register u8 x,y; + x = gSaveBlock1Ptr->trainerRematchStepCounter >> 8; + if (x > 99) { + mask = -1; + goto section_1; } + y = ((u8)x + 1); + gSaveBlock1Ptr->trainerRematchStepCounter = (((gSaveBlock1Ptr->trainerRematchStepCounter) & (u8)0xFFFFFFFF) | (y << 8)); + section_1: + x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & mask; + if (x == 100) + { + FlagClear(0x801); + sub_810C640(); + sub_810D0D0(); + return TRUE; + } } return FALSE; |