sub_809B474

This commit is contained in:
DizzyEggg 2025-02-13 09:31:49 +01:00
parent f2da3f2acc
commit 6e68321507
3 changed files with 103 additions and 188 deletions

View File

@ -6,188 +6,6 @@
.text
thumb_func_start sub_809B428
sub_809B428:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r2, 0
ldrb r0, [r5, 0x2]
cmp r0, 0x4F
beq _0809B44C
cmp r0, 0x4F
bgt _0809B43E
cmp r0, 0x49
beq _0809B444
b _0809B46A
_0809B43E:
cmp r0, 0x57
beq _0809B454
b _0809B46A
_0809B444:
movs r0, 0x1E
bl sub_8099A34
b _0809B462
_0809B44C:
movs r0, 0x1E
bl sub_8099A48
b _0809B462
_0809B454:
bl sub_8099B94
lsls r0, 24
cmp r0, 0
beq _0809B462
adds r0, r5, 0
b _0809B46C
_0809B462:
adds r1, r4, 0
adds r1, 0x21
movs r0, 0x1
strb r0, [r1]
_0809B46A:
movs r0, 0
_0809B46C:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_809B428
thumb_func_start sub_809B474
sub_809B474:
push {r4-r6,lr}
ldr r0, _0809B498
ldr r1, [r0]
ldr r2, [r1]
adds r6, r0, 0
cmp r2, 0x3
bls _0809B56E
cmp r2, 0x4
bne _0809B56E
movs r5, 0x84
lsls r5, 3
adds r0, r1, r5
ldr r0, [r0]
cmp r0, 0x1
beq _0809B49C
cmp r0, 0x2
beq _0809B508
b _0809B56E
.align 2, 0
_0809B498: .4byte gUnknown_3001B64
_0809B49C:
bl sub_809B648
lsls r0, 24
cmp r0, 0
bne _0809B4B0
ldr r0, [r6]
adds r0, r5
movs r1, 0x3
str r1, [r0]
b _0809B4E8
_0809B4B0:
ldr r0, [r6]
movs r1, 0x83
lsls r1, 3
adds r0, r1
ldr r4, [r0]
cmp r4, 0
beq _0809B4F8
ldr r0, [r4, 0x4]
cmp r0, 0
beq _0809B4F2
bl ResetTextbox_809B294
ldr r0, [r4, 0x4]
bl _call_via_r0
lsls r0, 24
cmp r0, 0
bne _0809B4F2
ldr r1, [r6]
movs r3, 0x86
lsls r3, 3
adds r2, r1, r3
movs r0, 0x1
negs r0, r0
str r0, [r2]
adds r1, r5
movs r0, 0x3
str r0, [r1]
_0809B4E8:
movs r0, 0
movs r1, 0x1
bl xxx_script_textboxes_809A680
b _0809B56E
_0809B4F2:
ldrh r0, [r4]
bl sub_809A6E4
_0809B4F8:
ldr r0, _0809B534
ldr r1, [r0]
movs r2, 0x84
lsls r2, 3
adds r1, r2
movs r2, 0x2
str r2, [r1]
adds r6, r0, 0
_0809B508:
ldr r0, [r6]
movs r3, 0x83
lsls r3, 3
adds r0, r3
ldr r4, [r0]
cmp r4, 0
beq _0809B54E
ldr r0, [r4, 0xC]
bl _call_via_r0
adds r2, r0, 0
cmp r2, 0x1
bls _0809B56E
ldr r0, [r6]
movs r3, 0x86
lsls r3, 3
adds r1, r0, r3
cmp r2, 0x2
bne _0809B538
movs r0, 0x1
negs r0, r0
b _0809B53A
.align 2, 0
_0809B534: .4byte gUnknown_3001B64
_0809B538:
movs r0, 0
_0809B53A:
str r0, [r1]
ldr r0, [r4, 0x8]
cmp r0, 0
beq _0809B546
bl _call_via_r0
_0809B546:
ldrh r0, [r4]
bl sub_809A6F8
b _0809B558
_0809B54E:
bl sub_809B648
lsls r0, 24
cmp r0, 0
bne _0809B56E
_0809B558:
ldr r0, _0809B578
ldr r0, [r0]
movs r1, 0x84
lsls r1, 3
adds r0, r1
movs r1, 0x3
str r1, [r0]
movs r0, 0
movs r1, 0x1
bl xxx_script_textboxes_809A680
_0809B56E:
bl sub_809B57C
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0809B578: .4byte gUnknown_3001B64
thumb_func_end sub_809B474
thumb_func_start sub_809B57C
sub_809B57C:
push {r4,r5,lr}

View File

@ -33,6 +33,14 @@ struct unkStruct_3001B64_unkC
u8 buffer[0x400];
};
struct unkStruct_3001B64_unk418
{
u16 unk0;
u8 (*unk4)(void);
u8 (*unk8)(void);
s32 (*unkC)(void);
};
struct unkStruct_3001B64
{
// size: 0x5A8
@ -41,13 +49,13 @@ struct unkStruct_3001B64
u32 unk8;
struct unkStruct_3001B64_unkC unkC;
u32 unk414;
u32 unk418;
struct unkStruct_3001B64_unk418 *unk418;
const MenuItem *unk41C;
u32 unk420;
u32 unk424;
u32 unk428;
u32 unk42C;
u32 unk430;
s32 unk430;
u32 unk434;
u32 fill438;
struct unkStruct_3001B64_sub unk43C[10];

View File

@ -2,6 +2,7 @@
#include "text.h"
#include "memory.h"
#include "pokemon.h"
#include "code_8099360.h"
#include "code_800D090.h"
#include "pokemon_mid.h"
#include "string_format.h"
@ -45,7 +46,7 @@ void sub_809A560(void)
sub_8009408(0,0x14);
ResetTextbox_809B294();
gUnknown_3001B64->unk414 = 0;
gUnknown_3001B64->unk418 = 0;
gUnknown_3001B64->unk418 = NULL;
gUnknown_3001B64->unk41C = 0;
gUnknown_3001B64->unk420 = 0;
gUnknown_3001B64->unk424 = 0;
@ -640,7 +641,7 @@ extern const char gUnknown_8116188[];
extern const char gUnknown_8116190[];
extern const char gFormattedSpeechBubble[];
bool8 sub_809B428(u8 *a0, s32 a1, u8 *a2);
u8 *sub_809B428(u8 *a0, s32 a1, u8 *a2);
void sub_809B028(const MenuItem * menuItems, s32 a1_, s32 a2, s32 a3, s32 a4_, const char *text)
{
@ -649,7 +650,7 @@ void sub_809B028(const MenuItem * menuItems, s32 a1_, s32 a2, s32 a3, s32 a4_, c
xxx_script_textboxes_809A680(gUnknown_8116134[a3], 0);
gUnknown_3001B64->unk414 = 1;
gUnknown_3001B64->unk418 = 0;
gUnknown_3001B64->unk418 = NULL;
gUnknown_3001B64->unk41C = menuItems;
gUnknown_3001B64->unk420 = 2;
gUnknown_3001B64->unk424 = (a1 != 0) ? 2 : 0;
@ -705,7 +706,7 @@ bool8 sub_809B1D4(s32 a0, u32 kind, s32 a2, s32 a3)
xxx_script_textboxes_809A680(4, 0);
gUnknown_3001B64->unk414 = a0;
gUnknown_3001B64->unk418 = 0;
gUnknown_3001B64->unk418 = NULL;
gUnknown_3001B64->unk41C = NULL;
gUnknown_3001B64->unk420 = 1;
gUnknown_3001B64->unk424 = kind;
@ -790,3 +791,91 @@ bool8 IsTextboxOpen_809B40C(struct unkStruct_3001B64_unkC *a0)
}
return TRUE;
}
extern void sub_8099A34(s32 a0);
extern void sub_8099A48(s32 a0);
// It seems this function is effectively unused. It could be different in Blue however. The u8 * arguments most likely are pointers to some text drawing structures.
u8 *sub_809B428(u8 *a0, s32 a1, u8 *a2)
{
switch (a0[2]) {
case 0x49:
sub_8099A34(0x1E);
a2[0x21] = 1;
return NULL;
case 0x4F:
sub_8099A48(0x1E);
a2[0x21] = 1;
return NULL;
case 0x57:
if (sub_8099B94()) {
return a0;
}
a2[0x21] = 1;
return NULL;
default:
return NULL;
}
}
bool8 sub_809B648(void);
void sub_809B57C(void);
void sub_809B474(void)
{
struct unkStruct_3001B64_unk418 *unkStructPtr;
switch (gUnknown_3001B64->unk0) {
case 0:
case 1:
case 2:
case 3:
default:
break;
case 4:
switch (gUnknown_3001B64->unk420) {
case 1:
if (!sub_809B648()) {
gUnknown_3001B64->unk420 = 3;
xxx_script_textboxes_809A680(0, 1);
break;
}
unkStructPtr = gUnknown_3001B64->unk418;
if (unkStructPtr != NULL) {
if (unkStructPtr->unk4 != NULL) {
ResetTextbox_809B294();
if (!unkStructPtr->unk4()) {
gUnknown_3001B64->unk430 = -1;
gUnknown_3001B64->unk420 = 3;
xxx_script_textboxes_809A680(0, 1);
break;
}
}
sub_809A6E4(unkStructPtr->unk0);
}
gUnknown_3001B64->unk420 = 2;
// Fallthrough
case 2:
unkStructPtr = gUnknown_3001B64->unk418;
if (unkStructPtr != NULL) {
s32 retVal = unkStructPtr->unkC();
if (retVal == 0 || retVal == 1)
break;
gUnknown_3001B64->unk430 = (retVal == 2) ? -1 : 0;
if (unkStructPtr->unk8 != NULL) {
unkStructPtr->unk8();
}
sub_809A6F8(unkStructPtr->unk0);
}
else if (sub_809B648()) {
break;
}
gUnknown_3001B64->unk420 = 3;
xxx_script_textboxes_809A680(0, 1);
break;
}
break;
}
sub_809B57C();
}