mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-25 15:46:18 -05:00
sub_809B474
This commit is contained in:
parent
f2da3f2acc
commit
6e68321507
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user