mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-24 09:44:17 -05:00
finish decomp of options menu
This commit is contained in:
@@ -1,311 +0,0 @@
|
||||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_801E198
|
||||
sub_801E198:
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
ldr r4, _0801E210
|
||||
movs r0, 0xAC
|
||||
movs r1, 0x8
|
||||
bl MemoryAlloc
|
||||
str r0, [r4]
|
||||
stm r0!, {r5}
|
||||
bl sub_801317C
|
||||
ldr r1, [r4]
|
||||
movs r0, 0
|
||||
str r0, [r1, 0x44]
|
||||
adds r0, r1, 0
|
||||
adds r0, 0x4C
|
||||
str r0, [r1, 0x48]
|
||||
bl sub_8006518
|
||||
ldr r1, [r4]
|
||||
ldr r2, [r1, 0x44]
|
||||
lsls r0, r2, 1
|
||||
adds r0, r2
|
||||
lsls r0, 3
|
||||
adds r1, r0
|
||||
adds r1, 0x4C
|
||||
ldr r0, _0801E214
|
||||
ldm r0!, {r2,r3,r5}
|
||||
stm r1!, {r2,r3,r5}
|
||||
ldm r0!, {r2,r3,r5}
|
||||
stm r1!, {r2,r3,r5}
|
||||
ldr r0, [r4]
|
||||
ldr r0, [r0, 0x48]
|
||||
movs r1, 0x1
|
||||
bl sub_8012D08
|
||||
bl ResetUnusedInputStruct
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x4C
|
||||
movs r1, 0x1
|
||||
movs r2, 0x1
|
||||
bl sub_800641C
|
||||
ldr r1, [r4]
|
||||
adds r0, r1, 0
|
||||
adds r0, 0x10
|
||||
ldr r3, [r1, 0x44]
|
||||
movs r1, 0x1
|
||||
movs r2, 0x1
|
||||
bl sub_8013818
|
||||
bl nullsub_38
|
||||
bl CreateOptionsMenu
|
||||
movs r0, 0x1
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0801E210: .4byte gUnknown_203B260
|
||||
_0801E214: .4byte gUnknown_80DC03C
|
||||
thumb_func_end sub_801E198
|
||||
|
||||
thumb_func_start sub_801E218
|
||||
sub_801E218:
|
||||
push {r4,lr}
|
||||
movs r4, 0
|
||||
bl sub_8012AE8
|
||||
cmp r0, 0x2
|
||||
beq _0801E238
|
||||
cmp r0, 0x2
|
||||
bgt _0801E22E
|
||||
cmp r0, 0x1
|
||||
beq _0801E242
|
||||
b _0801E294
|
||||
_0801E22E:
|
||||
cmp r0, 0x9
|
||||
beq _0801E24C
|
||||
cmp r0, 0xA
|
||||
beq _0801E26C
|
||||
b _0801E294
|
||||
_0801E238:
|
||||
movs r0, 0x1
|
||||
bl PlayMenuSoundEffect
|
||||
movs r0, 0x2
|
||||
b _0801E2BE
|
||||
_0801E242:
|
||||
movs r0, 0
|
||||
bl PlayMenuSoundEffect
|
||||
movs r0, 0x3
|
||||
b _0801E2BE
|
||||
_0801E24C:
|
||||
ldr r0, _0801E264
|
||||
ldr r1, [r0]
|
||||
movs r2, 0x28
|
||||
ldrsh r0, [r1, r2]
|
||||
cmp r0, 0
|
||||
bne _0801E294
|
||||
ldr r1, [r1]
|
||||
ldrb r0, [r1, 0x8]
|
||||
cmp r0, 0
|
||||
bne _0801E268
|
||||
movs r0, 0x2
|
||||
b _0801E28A
|
||||
.align 2, 0
|
||||
_0801E264: .4byte gUnknown_203B260
|
||||
_0801E268:
|
||||
subs r0, 0x1
|
||||
b _0801E28A
|
||||
_0801E26C:
|
||||
ldr r0, _0801E284
|
||||
ldr r1, [r0]
|
||||
movs r2, 0x28
|
||||
ldrsh r0, [r1, r2]
|
||||
cmp r0, 0
|
||||
bne _0801E294
|
||||
ldr r1, [r1]
|
||||
ldrb r0, [r1, 0x8]
|
||||
cmp r0, 0x1
|
||||
bls _0801E288
|
||||
strb r4, [r1, 0x8]
|
||||
b _0801E28C
|
||||
.align 2, 0
|
||||
_0801E284: .4byte gUnknown_203B260
|
||||
_0801E288:
|
||||
adds r0, 0x1
|
||||
_0801E28A:
|
||||
strb r0, [r1, 0x8]
|
||||
_0801E28C:
|
||||
movs r0, 0x3
|
||||
bl PlayMenuSoundEffect
|
||||
movs r4, 0x1
|
||||
_0801E294:
|
||||
ldr r0, _0801E2B8
|
||||
ldr r0, [r0]
|
||||
adds r0, 0x10
|
||||
movs r1, 0x1
|
||||
bl sub_80138B8
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0801E2AA
|
||||
cmp r4, 0x1
|
||||
bne _0801E2BC
|
||||
_0801E2AA:
|
||||
bl nullsub_38
|
||||
bl CreateOptionsMenu
|
||||
movs r0, 0x1
|
||||
b _0801E2BE
|
||||
.align 2, 0
|
||||
_0801E2B8: .4byte gUnknown_203B260
|
||||
_0801E2BC:
|
||||
movs r0, 0
|
||||
_0801E2BE:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_801E218
|
||||
|
||||
thumb_func_start sub_801E2C4
|
||||
sub_801E2C4:
|
||||
push {r4,r5,lr}
|
||||
ldr r4, _0801E304
|
||||
ldr r2, [r4]
|
||||
cmp r2, 0
|
||||
beq _0801E2FE
|
||||
ldr r0, [r2, 0x44]
|
||||
lsls r1, r0, 1
|
||||
adds r1, r0
|
||||
lsls r1, 3
|
||||
adds r1, r2, r1
|
||||
adds r1, 0x4C
|
||||
ldr r0, _0801E308
|
||||
ldm r0!, {r2,r3,r5}
|
||||
stm r1!, {r2,r3,r5}
|
||||
ldm r0!, {r2,r3,r5}
|
||||
stm r1!, {r2,r3,r5}
|
||||
bl ResetUnusedInputStruct
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x4C
|
||||
movs r1, 0x1
|
||||
movs r2, 0x1
|
||||
bl sub_800641C
|
||||
ldr r0, [r4]
|
||||
bl MemoryFree
|
||||
movs r0, 0
|
||||
str r0, [r4]
|
||||
_0801E2FE:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0801E304: .4byte gUnknown_203B260
|
||||
_0801E308: .4byte gUnknown_80DC020
|
||||
thumb_func_end sub_801E2C4
|
||||
|
||||
thumb_func_start nullsub_38
|
||||
nullsub_38:
|
||||
bx lr
|
||||
thumb_func_end nullsub_38
|
||||
|
||||
thumb_func_start CreateOptionsMenu
|
||||
CreateOptionsMenu:
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0x4
|
||||
ldr r5, _0801E368
|
||||
ldr r0, [r5]
|
||||
ldr r0, [r0, 0x44]
|
||||
bl sub_8008C54
|
||||
ldr r0, [r5]
|
||||
ldr r0, [r0, 0x44]
|
||||
bl sub_80073B8
|
||||
ldr r2, _0801E36C
|
||||
ldr r0, [r5]
|
||||
ldr r3, [r0, 0x44]
|
||||
movs r4, 0
|
||||
str r4, [sp]
|
||||
movs r0, 0x10
|
||||
movs r1, 0
|
||||
bl xxx_call_draw_string
|
||||
ldr r0, [r5]
|
||||
adds r0, 0x10
|
||||
movs r1, 0
|
||||
bl sub_8013800
|
||||
adds r6, r0, 0
|
||||
ldr r2, _0801E370
|
||||
ldr r0, [r5]
|
||||
ldr r3, [r0, 0x44]
|
||||
str r4, [sp]
|
||||
movs r0, 0x8
|
||||
adds r1, r6, 0
|
||||
bl xxx_call_draw_string
|
||||
ldr r0, [r5]
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, 0x8]
|
||||
cmp r0, 0x1
|
||||
beq _0801E384
|
||||
cmp r0, 0x1
|
||||
bgt _0801E374
|
||||
cmp r0, 0
|
||||
beq _0801E37A
|
||||
b _0801E3D6
|
||||
.align 2, 0
|
||||
_0801E368: .4byte gUnknown_203B260
|
||||
_0801E36C: .4byte gWindowBGTitle
|
||||
_0801E370: .4byte gUnknown_80DC064
|
||||
_0801E374:
|
||||
cmp r0, 0x2
|
||||
beq _0801E3B0
|
||||
b _0801E3D6
|
||||
_0801E37A:
|
||||
ldr r0, _0801E380
|
||||
b _0801E386
|
||||
.align 2, 0
|
||||
_0801E380: .4byte gWindowBGBlueString
|
||||
_0801E384:
|
||||
ldr r0, _0801E3AC
|
||||
_0801E386:
|
||||
bl sub_8008ED0
|
||||
adds r4, r0, 0
|
||||
ldr r1, [r5]
|
||||
ldr r0, [r1, 0x44]
|
||||
ldr r1, [r1]
|
||||
ldrb r2, [r1, 0x8]
|
||||
lsls r1, r2, 2
|
||||
adds r1, r2
|
||||
lsls r1, 3
|
||||
adds r1, 0x50
|
||||
adds r2, r6, 0
|
||||
adds r2, 0xA
|
||||
movs r3, 0x7
|
||||
str r3, [sp]
|
||||
adds r3, r4, 0
|
||||
bl sub_80078A4
|
||||
b _0801E3D6
|
||||
.align 2, 0
|
||||
_0801E3AC: .4byte gWindowBGRedString
|
||||
_0801E3B0:
|
||||
ldr r0, _0801E3E8
|
||||
bl sub_8008ED0
|
||||
adds r4, r0, 0
|
||||
ldr r1, [r5]
|
||||
ldr r0, [r1, 0x44]
|
||||
ldr r1, [r1]
|
||||
ldrb r2, [r1, 0x8]
|
||||
lsls r1, r2, 2
|
||||
adds r1, r2
|
||||
lsls r1, 3
|
||||
adds r1, 0x50
|
||||
adds r2, r6, 0
|
||||
adds r2, 0xA
|
||||
movs r3, 0x7
|
||||
str r3, [sp]
|
||||
adds r3, r4, 0
|
||||
bl sub_80078A4
|
||||
_0801E3D6:
|
||||
ldr r0, _0801E3EC
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, 0x44]
|
||||
bl sub_80073E0
|
||||
add sp, 0x4
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0801E3E8: .4byte gWindowBGGreenString
|
||||
_0801E3EC: .4byte gUnknown_203B260
|
||||
thumb_func_end CreateOptionsMenu
|
||||
|
||||
.align 2,0
|
||||
@@ -112,8 +112,7 @@ SECTIONS {
|
||||
asm/code_801C620.o(.text);
|
||||
src/code_801D760.o(.text);
|
||||
asm/code_801D760.o(.text);
|
||||
src/code_801DCC4.o(.text);
|
||||
asm/code_801DCC4.o(.text);
|
||||
src/options_menu.o(.text);
|
||||
src/hints_menu.o(.text);
|
||||
src/gulpin_shop.o(.text);
|
||||
asm/gulpin_shop.o(.text);
|
||||
|
||||
@@ -1,10 +1,51 @@
|
||||
#include "global.h"
|
||||
#include "constants/input.h"
|
||||
#include "input.h"
|
||||
#include "memory.h"
|
||||
#include "menu.h"
|
||||
#include "game_options.h"
|
||||
#include "text.h"
|
||||
#include "game_options.h"
|
||||
#include "menu_input.h"
|
||||
|
||||
struct unkStruct_203B260
|
||||
{
|
||||
struct GameOptions *optionsMenu;
|
||||
u32 unk4;
|
||||
u8 unk8;
|
||||
u8 fill9[0x10 - 0x9];
|
||||
u32 unk10;
|
||||
u8 fill14[0x28 - 0x14];
|
||||
s16 unk28;
|
||||
u8 fill2A[0x44 - 0x2A];
|
||||
u32 unk44;
|
||||
struct UnkTextStruct2 * unk48;
|
||||
struct UnkTextStruct2 unk4C[4];
|
||||
};
|
||||
struct unkStruct_203B260 *gUnknown_203B260;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC020;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC03C;
|
||||
|
||||
extern u8 gWindowBGTitle[];
|
||||
extern u8 gUnknown_80DC064[];
|
||||
extern u8 gWindowBGGreenString[];
|
||||
extern u8 gWindowBGRedString[];
|
||||
extern u8 gWindowBGBlueString[];
|
||||
|
||||
extern void sub_8008C54(u32);
|
||||
extern void sub_80073B8(u32);
|
||||
extern void sub_80073E0(u32);
|
||||
extern void xxx_call_draw_string(u32, u32, u8 *, u32, u32);
|
||||
extern s32 sub_8008ED0(u8 *);
|
||||
extern s32 sub_8013800(u32 *, u32);
|
||||
extern void sub_80078A4(u32, u32, u32, u32, u32);
|
||||
extern u8 sub_80138B8(u32 *, u32);
|
||||
void PlayMenuSoundEffect(u32);
|
||||
s32 sub_8012AE8(void);
|
||||
void sub_801317C(u32 *);
|
||||
extern void sub_8013818(void *, u32, u32, u32);
|
||||
|
||||
void CreateOptionsMenu(void);
|
||||
void nullsub_38(void);
|
||||
|
||||
struct unkStruct_203B25C
|
||||
{
|
||||
// size: 0x11C
|
||||
@@ -28,7 +69,7 @@ extern void sub_801E0FC();
|
||||
extern void HandleChangeSettingsMenu();
|
||||
extern void sub_801DD84();
|
||||
extern void sub_801DED0();
|
||||
extern u32 sub_801E198(struct GameOptions *);
|
||||
extern bool8 sub_801E198(struct GameOptions *);
|
||||
extern void sub_8014248(const char *, u32, u32, struct MenuItem *, u32, u32, u32, u32, u32);
|
||||
extern void CreateHintDisplayScreen(u32);
|
||||
extern void sub_801E3F0(u32);
|
||||
@@ -515,3 +556,123 @@ void HandleChangeSettingsMenu(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_801E198(struct GameOptions *optionsMenu)
|
||||
{
|
||||
gUnknown_203B260 = MemoryAlloc(sizeof(struct unkStruct_203B260), 8);
|
||||
gUnknown_203B260->optionsMenu = optionsMenu;
|
||||
sub_801317C(&gUnknown_203B260->unk4);
|
||||
gUnknown_203B260->unk44 = 0;
|
||||
gUnknown_203B260->unk48 = &gUnknown_203B260->unk4C[0];
|
||||
sub_8006518(gUnknown_203B260->unk4C);
|
||||
gUnknown_203B260->unk4C[gUnknown_203B260->unk44] = gUnknown_80DC03C;
|
||||
sub_8012D08(gUnknown_203B260->unk48,1);
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B260->unk4C,1,1);
|
||||
sub_8013818(&gUnknown_203B260->unk10,1,1,gUnknown_203B260->unk44);
|
||||
nullsub_38();
|
||||
CreateOptionsMenu();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u32 sub_801E218(void)
|
||||
{
|
||||
bool32 flag;
|
||||
|
||||
flag = FALSE;
|
||||
|
||||
switch(sub_8012AE8())
|
||||
{
|
||||
case INPUT_B_BUTTON:
|
||||
PlayMenuSoundEffect(1);
|
||||
return 2;
|
||||
case INPUT_A_BUTTON:
|
||||
PlayMenuSoundEffect(0);
|
||||
return 3;
|
||||
case INPUT_DPAD_LEFT:
|
||||
if (gUnknown_203B260->unk28 == 0)
|
||||
{
|
||||
if (gUnknown_203B260->optionsMenu->windowColor == WINDOW_COLOR_BLUE) {
|
||||
gUnknown_203B260->optionsMenu->windowColor = WINDOW_COLOR_GREEN;
|
||||
}
|
||||
else {
|
||||
gUnknown_203B260->optionsMenu->windowColor--;
|
||||
}
|
||||
PlayMenuSoundEffect(3);
|
||||
flag = TRUE;
|
||||
}
|
||||
break;
|
||||
case INPUT_DPAD_RIGHT:
|
||||
if(gUnknown_203B260->unk28 == 0)
|
||||
{
|
||||
if (gUnknown_203B260->optionsMenu->windowColor > WINDOW_COLOR_RED) {
|
||||
gUnknown_203B260->optionsMenu->windowColor = WINDOW_COLOR_BLUE;
|
||||
}
|
||||
else
|
||||
gUnknown_203B260->optionsMenu->windowColor++;
|
||||
PlayMenuSoundEffect(3);
|
||||
flag = TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// == 1 is needed for matching
|
||||
if ((sub_80138B8(&gUnknown_203B260->unk10,1) != 0) || (flag == TRUE)) {
|
||||
nullsub_38();
|
||||
CreateOptionsMenu();
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_801E2C4(void)
|
||||
{
|
||||
if(gUnknown_203B260 != NULL)
|
||||
{
|
||||
gUnknown_203B260->unk4C[gUnknown_203B260->unk44] = gUnknown_80DC020;
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B260->unk4C, 1, 1);
|
||||
MemoryFree(gUnknown_203B260);
|
||||
gUnknown_203B260 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void nullsub_38(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CreateOptionsMenu(void)
|
||||
{
|
||||
u32 uVar2;
|
||||
u32 y;
|
||||
|
||||
sub_8008C54(gUnknown_203B260->unk44);
|
||||
sub_80073B8(gUnknown_203B260->unk44);
|
||||
xxx_call_draw_string(0x10,0,gWindowBGTitle,gUnknown_203B260->unk44,0);
|
||||
y = sub_8013800(&gUnknown_203B260->unk10,0);
|
||||
xxx_call_draw_string(8,y,gUnknown_80DC064,gUnknown_203B260->unk44,0);
|
||||
|
||||
switch(gUnknown_203B260->optionsMenu->windowColor)
|
||||
{
|
||||
case WINDOW_COLOR_BLUE:
|
||||
uVar2 = sub_8008ED0(gWindowBGBlueString);
|
||||
sub_80078A4(gUnknown_203B260->unk44,gUnknown_203B260->optionsMenu->windowColor * '(' + 0x50,
|
||||
y + 0xA,uVar2,7);
|
||||
break;
|
||||
case WINDOW_COLOR_RED:
|
||||
uVar2 = sub_8008ED0(gWindowBGRedString);
|
||||
sub_80078A4(gUnknown_203B260->unk44,gUnknown_203B260->optionsMenu->windowColor * '(' + 0x50,
|
||||
y + 0xA,uVar2,7);
|
||||
break;
|
||||
case WINDOW_COLOR_GREEN:
|
||||
uVar2 = sub_8008ED0(gWindowBGGreenString);
|
||||
sub_80078A4(gUnknown_203B260->unk44,gUnknown_203B260->optionsMenu->windowColor * '(' + 0x50,
|
||||
y + 0xA,uVar2,7);
|
||||
break;
|
||||
}
|
||||
sub_80073E0(gUnknown_203B260->unk44);
|
||||
}
|
||||
Reference in New Issue
Block a user