Split+data hints_menu

This commit is contained in:
Kermalis 2023-09-20 23:11:41 -04:00
parent c6bc80e6d8
commit b888afb5d9
11 changed files with 335 additions and 332 deletions

View File

@ -99,59 +99,4 @@ gWindowBGRedString: @ 80DC08C
.global gWindowBGGreenString
gWindowBGGreenString: @ 80DC090
.string "Green\0"
@ hints_menu #1
.align 2,0
.string "pksdir0\0"
.align 2,0
.global gUnknown_80DC0A0
gUnknown_80DC0A0: @ 80DC0A0
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global Data_80DC0B8
Data_80DC0B8:
.byte 0x01, 0x00, 0x08, 0x00
.global gUnknown_80DC0BC
gUnknown_80DC0BC: @ 80DC0BC
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x06, 0x00, 0x00, 0x00
.byte 0x02, 0x00, 0x02, 0x00
.byte 0x18, 0x00, 0x0E, 0x00
.byte 0x0E, 0x00, 0x00, 0x00
.4byte Data_80DC0B8
.global gUnknown_80DC0D4
gUnknown_80DC0D4: @ 80DC0D4
.string "Hints\0"
@ hints_menu #2
.align 2,0
.string "pksdir0\0"
.align 2,0
.global gUnknown_80DC0E4
gUnknown_80DC0E4: @ 80DC0E4
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global gUnknown_80DC0FC
gUnknown_80DC0FC: @ 80DC0FC
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x06, 0x00, 0x00, 0x00
.byte 0x02, 0x00, 0x02, 0x00
.byte 0x1a, 0x00, 0x10, 0x00
.byte 0x10, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.string "Green\0"

23
include/hints_menu1.h Normal file
View File

@ -0,0 +1,23 @@
#ifndef GUARD_HINTS_MENU1_H
#define GUARD_HINTS_MENU1_H
#include "input.h"
#include "structs/str_text.h"
// size: 0x9C
struct unkStruct_203B264
{
MenuInputStruct input;
u32 unk34;
UnkTextStruct2 *unk38;
UnkTextStruct2 unk3C[4];
};
void CreateHintSelectionScreen(bool8 cursorSprite);
s32 GetChosenHintIndex(void);
bool8 sub_801E3F0(u32);
u32 sub_801E474(bool8);
void sub_801E54C(void);
#endif // GUARD_HINTS_MENU1_H

21
include/hints_menu2.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef GUARD_HINTS_MENU2_H
#define GUARD_HINTS_MENU2_H
#include "input.h"
#include "structs/str_text.h"
// size: 0xA0
struct unkStruct_203B268
{
MenuInputStruct input;
u32 unk34;
UnkTextStruct2 *unk38;
UnkTextStruct2 unk3C[4];
u8 unk9C[4];
};
bool8 CreateHintDisplayScreen(u32 index);
void DestroyHintDisplayScreen(void);
u32 HandleHintDisplayScreenInput(void);
#endif // GUARD_HINTS_MENU2_H

View File

@ -113,7 +113,8 @@ SECTIONS {
src/code_801D014.o(.text);
src/code_801D9E4.o(.text);
src/options_menu.o(.text);
src/hints_menu.o(.text);
src/hints_menu1.o(.text);
src/hints_menu2.o(.text);
src/gulpin_shop.o(.text);
src/code_801EE10.o(.text);
asm/code_801EE10.o(.text);
@ -431,6 +432,8 @@ SECTIONS {
src/code_801D014.o(.rodata);
src/code_801D9E4.o(.rodata);
data/data_80DBD98.o(.rodata);
src/hints_menu1.o(.rodata);
src/hints_menu2.o(.rodata);
src/gulpin_shop.o(.rodata);
data/data_80DC240.o(.rodata);
src/gulpin_shop_801FB50.o(.rodata);

22
src/data/hints_menu1.h Normal file
View File

@ -0,0 +1,22 @@
ALIGNED(4) static const u8 sFill[] = _("pksdir0");
static const UnkTextStruct2 sUnknown_80DC0A0 = {
0, 0, 0, 0,
3,
0, 0,
0, 0,
0, 0,
NULL
};
static const u8 sUnknown_80DC0B8[] = {1, 0, 8, 0};
static const UnkTextStruct2 sUnknown_80DC0BC = {
0, 0, 0, 0,
6,
2, 2,
24, 14,
14, 0,
sUnknown_80DC0B8
};
ALIGNED(4) static const u8 sHints[] = _("Hints");

19
src/data/hints_menu2.h Normal file
View File

@ -0,0 +1,19 @@
ALIGNED(4) static const u8 sFill[] = _("pksdir0");
static const UnkTextStruct2 sUnknown_80DC0E4 = {
0, 0, 0, 0,
3,
0, 0,
0, 0,
0, 0,
NULL
};
static const UnkTextStruct2 sUnknown_80DC0FC = {
0, 0, 0, 0,
6,
2, 2,
26, 16,
16, 0,
NULL
};

View File

@ -1,259 +0,0 @@
#include "global.h"
#include "code_80118A4.h"
#include "common_strings.h"
#include "memory.h"
#include "menu_input.h"
#include "text1.h"
#include "text2.h"
#include "input.h"
struct unkStruct_203B268
{
// size: 0xA0
MenuInputStruct input;
u32 unk34;
UnkTextStruct2 *unk38;
UnkTextStruct2 unk3C[4];
u8 unk9C[4];
};
struct unkStruct_203B264
{
// size: 0x9C
MenuInputStruct input;
u32 unk34;
UnkTextStruct2 *unk38;
UnkTextStruct2 unk3C[4];
};
extern struct unkStruct_203B264 *gUnknown_203B264;
extern struct unkStruct_203B268 *gUnknown_203B268;
extern UnkTextStruct2 gUnknown_80DC0A0;
extern UnkTextStruct2 gUnknown_80DC0BC;
extern UnkTextStruct2 gUnknown_80DC0E4;
extern UnkTextStruct2 gUnknown_80DC0FC;
extern u8 gUnknown_80DC0D4[MAX_HINTS];
extern void sub_801E714(void);
extern void sub_801E714(void);
extern void sub_801E76C(void);
extern void DisplayChosenHint(void);
void DrawHintSelectionMenu(void);
void sub_801E594(void);
u32 sub_801E3F0(u32 r0)
{
if(gUnknown_203B264 == NULL)
gUnknown_203B264 = MemoryAlloc(sizeof(struct unkStruct_203B264), 8);
gUnknown_203B264->unk34 = r0;
gUnknown_203B264->unk38 = &gUnknown_203B264->unk3C[r0];
sub_8006518(gUnknown_203B264->unk3C);
gUnknown_203B264->unk3C[gUnknown_203B264->unk34] = gUnknown_80DC0BC;
sub_8012D08(gUnknown_203B264->unk38, 0xA);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B264->unk3C, TRUE, TRUE);
sub_8013818(&gUnknown_203B264->input, 0x5, 0xA, r0);
sub_801E594();
DrawHintSelectionMenu();
return 1;
}
u32 sub_801E474(u8 r0)
{
if(r0 == 0)
{
sub_8013660(&gUnknown_203B264->input);
return 0;
}
switch(GetKeyPress(&gUnknown_203B264->input))
{
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
PlayMenuSoundEffect(0);
return 3;
case 4:
PlayMenuSoundEffect(4);
return 4;
default:
if(sub_80138B8(&gUnknown_203B264->input, 1))
{
sub_801E594();
DrawHintSelectionMenu();
return 1;
}
else
return 0;
}
}
s32 GetChosenHintIndex(void)
{
return (gUnknown_203B264->input.unk1E * gUnknown_203B264->input.unk1C) + gUnknown_203B264->input.menuIndex;
}
void CreateHintSelectionScreen(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B264->unk3C, FALSE, FALSE);
sub_8013984(&gUnknown_203B264->input);
sub_801E594();
DrawHintSelectionMenu();
if(r0)
AddMenuCursorSprite(&gUnknown_203B264->input);
}
void sub_801E54C(void)
{
if(gUnknown_203B264 != NULL)
{
gUnknown_203B264->unk3C[gUnknown_203B264->unk34] = gUnknown_80DC0A0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B264->unk3C, TRUE, TRUE);
MemoryFree(gUnknown_203B264);
gUnknown_203B264 = NULL;
}
}
NAKED // sub_80095E4 memes
void sub_801E594(void)
{
asm_unified(
"\tpush {r4,lr}\n"
"\tldr r4, _0801E5E4\n"
"\tldr r0, [r4]\n"
"\tmovs r1, 0x1A\n"
"\tldrsh r0, [r0, r1]\n"
"\tmovs r1, 0xC\n"
"\tbl sub_80095E4\n"
"\tadds r0, 0x2\n"
"\tlsls r0, 16\n"
"\tldr r2, [r4]\n"
"\tldr r3, [r2, 0x34]\n"
"\tlsls r1, r3, 1\n"
"\tadds r1, r3\n"
"\tlsls r1, 3\n"
"\tadds r1, r2, r1\n"
"\tadds r1, 0x4A\n"
"\tasrs r3, r0, 16\n"
"\tlsrs r0, 16\n"
"\tstrh r0, [r1]\n"
"\tldr r1, [r2, 0x34]\n"
"\tlsls r0, r1, 1\n"
"\tadds r0, r1\n"
"\tlsls r0, 3\n"
"\tadds r2, r0\n"
"\tadds r3, 0x2\n"
"\tadds r2, 0x4C\n"
"\tstrh r3, [r2]\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x3C\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl sub_800641C\n"
"\tpop {r4}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_0801E5E4: .4byte gUnknown_203B264");
}
void DrawHintSelectionMenu(void)
{
s32 hintIndex;
s32 y;
sub_8008C54(gUnknown_203B264->unk34);
sub_80073B8(gUnknown_203B264->unk34);
xxx_call_draw_string(16, 0, gUnknown_80DC0D4, gUnknown_203B264->unk34, 0);
for(hintIndex = 0; hintIndex < MAX_HINTS; hintIndex++)
{
y = sub_8013800(&gUnknown_203B264->input, hintIndex);
xxx_call_draw_string(10, y, gCommonHints[hintIndex].heading, gUnknown_203B264->unk34, 0);
}
sub_80073E0(gUnknown_203B264->unk34);
}
// THIS IS A NEW FILE
u32 CreateHintDisplayScreen(u32 index)
{
gUnknown_203B268 = MemoryAlloc(sizeof(struct unkStruct_203B268), 8);
gUnknown_203B268->unk34 = 0;
gUnknown_203B268->unk38 = gUnknown_203B268->unk3C;
sub_8006518(gUnknown_203B268->unk3C);
gUnknown_203B268->unk3C[gUnknown_203B268->unk34] = gUnknown_80DC0FC;
gUnknown_203B268->unk38->unk14 = gUnknown_203B268->unk9C;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B268->unk3C, TRUE, TRUE);
sub_8013818(&gUnknown_203B268->input, 5, 1, gUnknown_203B268->unk34);
gUnknown_203B268->input.unk1E = index;
sub_801E714();
return 1;
}
u32 HandleHintDisplayScreenInput(void)
{
switch(GetKeyPress(&gUnknown_203B268->input))
{
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
PlayMenuSoundEffect(0);
return 3;
default:
if(sub_8013938(&gUnknown_203B268->input)){
sub_801E714();
return 1;
}
else
return 0;
}
}
void sub_801E714(void)
{
sub_801E76C();
DisplayChosenHint();
}
void DestroyHintDisplayScreen(void)
{
if(gUnknown_203B268 != NULL)
{
gUnknown_203B268->unk3C[gUnknown_203B268->unk34] = gUnknown_80DC0E4;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B268->unk3C, TRUE, TRUE);
MemoryFree(gUnknown_203B268);
gUnknown_203B268 = NULL;
}
}
void sub_801E76C(void)
{
gUnknown_203B268->unk9C[0] = gUnknown_203B268->input.unk20;
gUnknown_203B268->unk9C[1] = gUnknown_203B268->input.unk1E;
gUnknown_203B268->unk9C[2] = 0xF;
gUnknown_203B268->unk9C[3] = 0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B268->unk3C, TRUE, TRUE);
}
void DisplayChosenHint(void)
{
sub_80073B8(gUnknown_203B268->unk34);
xxx_call_draw_string((gUnknown_203B268->input.unk1E << 3) + 0x10, 0, gCommonHints[gUnknown_203B268->input.unk1E].heading, gUnknown_203B268->unk34, 0);
xxx_call_draw_string(0xA, 0x14, gCommonHints[gUnknown_203B268->input.unk1E].body, gUnknown_203B268->unk34, 0);
sub_80073E0(gUnknown_203B268->unk34);
}

153
src/hints_menu1.c Normal file
View File

@ -0,0 +1,153 @@
#include "global.h"
#include "code_80118A4.h"
#include "common_strings.h"
#include "hints_menu1.h"
#include "memory.h"
#include "menu_input.h"
#include "text1.h"
#include "text2.h"
static EWRAM_DATA_2 struct unkStruct_203B264 *sUnknown_203B264 = {0};
#include "data/hints_menu1.h"
static void DrawHintSelectionMenu(void);
static void sub_801E594(void);
bool8 sub_801E3F0(u32 a0)
{
if (sUnknown_203B264 == NULL)
sUnknown_203B264 = MemoryAlloc(sizeof(struct unkStruct_203B264), 8);
sUnknown_203B264->unk34 = a0;
sUnknown_203B264->unk38 = &sUnknown_203B264->unk3C[a0];
sub_8006518(sUnknown_203B264->unk3C);
sUnknown_203B264->unk3C[sUnknown_203B264->unk34] = sUnknown_80DC0BC;
sub_8012D08(sUnknown_203B264->unk38, 10);
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B264->unk3C, TRUE, TRUE);
sub_8013818(&sUnknown_203B264->input, 5, 10, a0);
sub_801E594();
DrawHintSelectionMenu();
return TRUE;
}
u32 sub_801E474(bool8 a0)
{
if (a0 == 0) {
sub_8013660(&sUnknown_203B264->input);
return 0;
}
switch(GetKeyPress(&sUnknown_203B264->input))
{
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
PlayMenuSoundEffect(0);
return 3;
case 4:
PlayMenuSoundEffect(4);
return 4;
default:
if(sub_80138B8(&sUnknown_203B264->input, 1))
{
sub_801E594();
DrawHintSelectionMenu();
return 1;
}
else
return 0;
}
}
s32 GetChosenHintIndex(void)
{
return (sUnknown_203B264->input.unk1E * sUnknown_203B264->input.unk1C) + sUnknown_203B264->input.menuIndex;
}
void CreateHintSelectionScreen(bool8 cursorSprite)
{
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B264->unk3C, FALSE, FALSE);
sub_8013984(&sUnknown_203B264->input);
sub_801E594();
DrawHintSelectionMenu();
if (cursorSprite)
AddMenuCursorSprite(&sUnknown_203B264->input);
}
void sub_801E54C(void)
{
if (sUnknown_203B264 != NULL) {
sUnknown_203B264->unk3C[sUnknown_203B264->unk34] = sUnknown_80DC0A0;
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B264->unk3C, TRUE, TRUE);
MemoryFree(sUnknown_203B264);
sUnknown_203B264 = NULL;
}
}
NAKED // sub_80095E4 memes
static void sub_801E594(void)
{
asm_unified(
"\tpush {r4,lr}\n"
"\tldr r4, _0801E5E4\n"
"\tldr r0, [r4]\n"
"\tmovs r1, 0x1A\n"
"\tldrsh r0, [r0, r1]\n"
"\tmovs r1, 0xC\n"
"\tbl sub_80095E4\n"
"\tadds r0, 0x2\n"
"\tlsls r0, 16\n"
"\tldr r2, [r4]\n"
"\tldr r3, [r2, 0x34]\n"
"\tlsls r1, r3, 1\n"
"\tadds r1, r3\n"
"\tlsls r1, 3\n"
"\tadds r1, r2, r1\n"
"\tadds r1, 0x4A\n"
"\tasrs r3, r0, 16\n"
"\tlsrs r0, 16\n"
"\tstrh r0, [r1]\n"
"\tldr r1, [r2, 0x34]\n"
"\tlsls r0, r1, 1\n"
"\tadds r0, r1\n"
"\tlsls r0, 3\n"
"\tadds r2, r0\n"
"\tadds r3, 0x2\n"
"\tadds r2, 0x4C\n"
"\tstrh r3, [r2]\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x3C\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl sub_800641C\n"
"\tpop {r4}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_0801E5E4: .4byte sUnknown_203B264");
}
static void DrawHintSelectionMenu(void)
{
s32 hintIndex;
s32 y;
sub_8008C54(sUnknown_203B264->unk34);
sub_80073B8(sUnknown_203B264->unk34);
xxx_call_draw_string(16, 0, sHints, sUnknown_203B264->unk34, 0);
for (hintIndex = 0; hintIndex < MAX_HINTS; hintIndex++) {
y = sub_8013800(&sUnknown_203B264->input, hintIndex);
xxx_call_draw_string(10, y, gCommonHints[hintIndex].heading, sUnknown_203B264->unk34, 0);
}
sub_80073E0(sUnknown_203B264->unk34);
}

87
src/hints_menu2.c Normal file
View File

@ -0,0 +1,87 @@
#include "global.h"
#include "code_80118A4.h"
#include "common_strings.h"
#include "hints_menu2.h"
#include "memory.h"
#include "menu_input.h"
#include "text1.h"
#include "text2.h"
static EWRAM_DATA_2 struct unkStruct_203B268 *sUnknown_203B268 = {0};
#include "data/hints_menu2.h"
static void DisplayChosenHint(void);
static void sub_801E714(void);
static void sub_801E76C(void);
bool8 CreateHintDisplayScreen(u32 index)
{
sUnknown_203B268 = MemoryAlloc(sizeof(struct unkStruct_203B268), 8);
sUnknown_203B268->unk34 = 0;
sUnknown_203B268->unk38 = sUnknown_203B268->unk3C;
sub_8006518(sUnknown_203B268->unk3C);
sUnknown_203B268->unk3C[sUnknown_203B268->unk34] = sUnknown_80DC0FC;
sUnknown_203B268->unk38->unk14 = sUnknown_203B268->unk9C;
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B268->unk3C, TRUE, TRUE);
sub_8013818(&sUnknown_203B268->input, 5, 1, sUnknown_203B268->unk34);
sUnknown_203B268->input.unk1E = index;
sub_801E714();
return TRUE;
}
u32 HandleHintDisplayScreenInput(void)
{
switch (GetKeyPress(&sUnknown_203B268->input)) {
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
PlayMenuSoundEffect(0);
return 3;
default:
if (sub_8013938(&sUnknown_203B268->input)) {
sub_801E714();
return 1;
}
return 0;
}
}
static void sub_801E714(void)
{
sub_801E76C();
DisplayChosenHint();
}
void DestroyHintDisplayScreen(void)
{
if (sUnknown_203B268 != NULL) {
sUnknown_203B268->unk3C[sUnknown_203B268->unk34] = sUnknown_80DC0E4;
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B268->unk3C, TRUE, TRUE);
MemoryFree(sUnknown_203B268);
sUnknown_203B268 = NULL;
}
}
static void sub_801E76C(void)
{
sUnknown_203B268->unk9C[0] = sUnknown_203B268->input.unk20;
sUnknown_203B268->unk9C[1] = sUnknown_203B268->input.unk1E;
sUnknown_203B268->unk9C[2] = 15;
sUnknown_203B268->unk9C[3] = 0;
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B268->unk3C, TRUE, TRUE);
}
static void DisplayChosenHint(void)
{
sub_80073B8(sUnknown_203B268->unk34);
xxx_call_draw_string((sUnknown_203B268->input.unk1E * 8) + 16, 0, gCommonHints[sUnknown_203B268->input.unk1E].heading, sUnknown_203B268->unk34, 0);
xxx_call_draw_string(10, 20, gCommonHints[sUnknown_203B268->input.unk1E].body, sUnknown_203B268->unk34, 0);
sub_80073E0(sUnknown_203B268->unk34);
}

View File

@ -6,6 +6,8 @@
#include "constants/colors.h"
#include "constants/input.h"
#include "game_options.h"
#include "hints_menu1.h"
#include "hints_menu2.h"
#include "memory.h"
#include "menu_input.h"
#include "options_menu.h"
@ -66,15 +68,7 @@ extern void HandleChangeSettingsMenu();
extern void sub_801DD84();
extern void sub_801DED0();
extern bool8 sub_801E198(GameOptions *);
extern void CreateHintDisplayScreen(u32);
extern void sub_801E3F0(u32);
extern void CreateHintSelectionScreen(u32);
extern void CreateChangeSettingsConfirmMenu(void);
extern u32 sub_801E474(u32);
extern u32 GetChosenHintIndex(void);
extern void sub_801E54C(void);
extern u32 HandleHintDisplayScreenInput(void);
extern void DestroyHintDisplayScreen(void);
extern u32 sub_801E218(void);
extern void sub_801E2C4(void);
@ -285,8 +279,7 @@ void HandleOthersMenu(void)
void sub_801E088(void)
{
switch(sub_801E474(1))
switch(sub_801E474(TRUE))
{
case 3:
case 4:

View File

@ -159,12 +159,8 @@ gUnknown_203B25C: /* 203B25C (sub_801DCC4 - HandleChangeSettingsMenu) */
gUnknown_203B260: /* 203B260 (sub_801E198 - CreateOptionsMenu) */
.space 0x4
gUnknown_203B264: /* 203B264 (sub_801E3F0 - DrawHintSelectionMenu) */
.space 0x4
gUnknown_203B268: /* 203B268 (CreateHintDisplayScreen - DisplayChosenHint) */
.space 0x4
.include "src/hints_menu1.o"
.include "src/hints_menu2.o"
.include "src/gulpin_shop.o"
gUnknown_203B270: /* 203B270 */