sub_815AEE8

This commit is contained in:
jiangzhengwenjz
2019-06-02 07:01:19 +08:00
parent 55406f92fd
commit f7a81f2aa7
3 changed files with 55 additions and 85 deletions
+4 -60
View File
@@ -5,62 +5,6 @@
.text .text
thumb_func_start sub_815AEE8
sub_815AEE8: @ 815AEE8
push {r4,r5,lr}
ldr r4, _0815AF48 @ =gMultiuseListMenuTemplate
adds r1, r4, 0
ldr r0, _0815AF4C @ =gUnknown_8479368
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
movs r0, 0x1
strb r0, [r4, 0x10]
ldr r0, _0815AF50 @ =sub_815AFD8
str r0, [r4, 0x4]
movs r0, 0xB6
lsls r0, 1
movs r1, 0x1
bl CheckBagHasItem
lsls r0, 24
cmp r0, 0
bne _0815AF30
ldr r0, _0815AF54 @ =gUnknown_8479340
str r0, [r4]
movs r0, 0x5
strh r0, [r4, 0xC]
strh r0, [r4, 0xE]
ldrb r2, [r4, 0x14]
lsls r1, r2, 28
lsrs r1, 28
adds r1, 0x8
movs r0, 0xF
ands r1, r0
movs r0, 0x10
negs r0, r0
ands r0, r2
orrs r0, r1
strb r0, [r4, 0x14]
_0815AF30:
ldr r0, _0815AF58 @ =gTeachyTV_StaticResources
ldrh r1, [r0, 0x6]
ldrh r2, [r0, 0x8]
adds r0, r4, 0
bl ListMenuInit
lsls r0, 24
lsrs r0, 24
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_0815AF48: .4byte gMultiuseListMenuTemplate
_0815AF4C: .4byte gUnknown_8479368
_0815AF50: .4byte sub_815AFD8
_0815AF54: .4byte gUnknown_8479340
_0815AF58: .4byte gTeachyTV_StaticResources
thumb_func_end sub_815AEE8
thumb_func_start sub_815AF5C thumb_func_start sub_815AF5C
sub_815AF5C: @ 815AF5C sub_815AF5C: @ 815AF5C
push {lr} push {lr}
@@ -125,8 +69,8 @@ _0815AFD0: .4byte gUnknown_203F450
_0815AFD4: .4byte 0x00004007 _0815AFD4: .4byte 0x00004007
thumb_func_end sub_815AFAC thumb_func_end sub_815AFAC
thumb_func_start sub_815AFD8 thumb_func_start TeachyTvAudioByInput
sub_815AFD8: @ 815AFD8 TeachyTvAudioByInput: @ 815AFD8
push {lr} push {lr}
lsls r1, 24 lsls r1, 24
lsrs r1, 24 lsrs r1, 24
@@ -137,7 +81,7 @@ sub_815AFD8: @ 815AFD8
_0815AFE8: _0815AFE8:
pop {r0} pop {r0}
bx r0 bx r0
thumb_func_end sub_815AFD8 thumb_func_end TeachyTvAudioByInput
thumb_func_start TeachyTvInitIo thumb_func_start TeachyTvInitIo
TeachyTvInitIo: @ 815AFEC TeachyTvInitIo: @ 815AFEC
@@ -1365,7 +1309,7 @@ _0815B94C:
movs r4, 0 movs r4, 0
strh r4, [r5, 0x4] strh r4, [r5, 0x4]
strh r4, [r5, 0x6] strh r4, [r5, 0x6]
bl sub_815AEE8 bl TeachyTvSetupWindow
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
strh r0, [r5] strh r0, [r5]
+32 -7
View File
@@ -22,8 +22,8 @@ typedef struct {
void (*callback)(); void (*callback)();
u8 mode; u8 mode;
u8 param1; u8 param1;
u16 param2; u16 scrollOffset;
u16 param3; u16 selectedRow;
u8 param4; u8 param4;
u8 filler; u8 filler;
} TeachyTv_s; } TeachyTv_s;
@@ -40,7 +40,7 @@ void TeachyTvCreateAndRenderRbox();
extern void TeachyTvInitIo(); extern void TeachyTvInitIo();
extern u8 TeachyTvSetupObj(); extern u8 TeachyTvSetupObj();
extern void TeachyTvConfigRboxAndObj(u8); extern void TeachyTvConfigRboxAndObj(u8);
extern u8 sub_815AEE8(); u8 TeachyTvSetupWindow();
extern void sub_815AF5C(); extern void sub_815AF5C();
extern void sub_815B094(); extern void sub_815B094();
void TeachyTvSetupBg(); void TeachyTvSetupBg();
@@ -79,14 +79,13 @@ void VblankHandlerTeachyTv()
void sub_815ABC4(u8 mode, void (*cb)()) 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; TeachyTv_s *v3 = &gTeachyTV_StaticResources;
u16 v4 = 0; u16 v4 = 0;
v3->mode = mode; v3->mode = mode;
v3->callback = cb; v3->callback = cb;
if(!mode) { if(!mode) {
v3->param2 = v4; v3->scrollOffset = v4;
v3->param3 = v4; v3->selectedRow = v4;
v3->param1 = 0; v3->param1 = 0;
} }
if(mode == 1) if(mode == 1)
@@ -117,6 +116,7 @@ void C2TeachyTvMainCallback()
u32 x; u32 x;
state = gMain.state; state = gMain.state;
// tried several ways to reproduce the control flow, but all failed. Now using goto
if ( state == 0 ) if ( state == 0 )
goto section_0; goto section_0;
else if ( state == 1 ) else if ( state == 1 )
@@ -154,7 +154,7 @@ void C2TeachyTvMainCallback()
else else
{ {
taskId = CreateTask(sub_815B2C0, 0); taskId = CreateTask(sub_815B2C0, 0);
x = (u32)sub_815AEE8(); x = (u32)TeachyTvSetupWindow();
gTasks[taskId].data[0] = (x << 24) >> 24; gTasks[taskId].data[0] = (x << 24) >> 24;
gTasks[taskId].data[1] = TeachyTvSetupObj(); gTasks[taskId].data[1] = TeachyTvSetupObj();
sub_815AF5C(); sub_815AF5C();
@@ -215,3 +215,28 @@ void TeachyTvCreateAndRenderRbox()
PutWindowTilemap(1u); PutWindowTilemap(1u);
CopyWindowToVram(0, 2u); 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);
}
+19 -18
View File
@@ -24,6 +24,8 @@
#include "unk_810c3a4.h" #include "unk_810c3a4.h"
#include "constants/movement_commands.h" #include "constants/movement_commands.h"
#include "vs_seeker.h" #include "vs_seeker.h"
#include "item.h"
#include "constants/items.h"
typedef enum typedef enum
{ {
@@ -635,6 +637,7 @@ void sub_810C444(void)
#ifdef NONMATCHING #ifdef NONMATCHING
bool8 sub_810C4EC(void) bool8 sub_810C4EC(void)
{ {
s8 mask;
if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE) if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE)
{ {
if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100) if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100)
@@ -643,25 +646,23 @@ bool8 sub_810C4EC(void)
if (FlagGet(0x801) == TRUE) if (FlagGet(0x801) == TRUE)
{ {
u16 x; register u8 x,y;
do { x = gSaveBlock1Ptr->trainerRematchStepCounter >> 8;
x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; if (x > 99) {
} while (0); mask = -1;
if (x < 100) goto section_1;
{
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;
} }
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; return FALSE;