diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2021-04-03 20:44:48 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-03 20:44:48 -0500 |
commit | 22fec43f1812cb863ad699b357bd593222ae140c (patch) | |
tree | 4efa162869946a9bfdbde1be498857fac3db3b39 /src/adventure_log.c | |
parent | a2d206665c6fffbd962375f262b7fbb05c7b7478 (diff) |
More menu work (#33)
* split adventure log menu out and decompile
* add most adventure log matchings w/ 2 nonmatchings and move some relevant data
* more work on other menus
* fully decomp debug stuff around 203B3F0
* more debug menu work
* fix CreatePartnerSelectionMenu nonmatch
* move more data and clean some data up
Diffstat (limited to 'src/adventure_log.c')
-rw-r--r-- | src/adventure_log.c | 425 |
1 files changed, 425 insertions, 0 deletions
diff --git a/src/adventure_log.c b/src/adventure_log.c new file mode 100644 index 0000000..2a02840 --- /dev/null +++ b/src/adventure_log.c @@ -0,0 +1,425 @@ +#include "global.h" +#include "input.h" +#include "gba/io_reg.h" + +struct unkData +{ + u8 unk0[14]; + u16 unkD; + u16 unk10; + u16 unk12; + u8 *unk14; +}; + +struct AdventureLog +{ + // size: 0xA0 + u8 fill0[0x1A]; + /* 0x1A */ s16 unk1A; + /* 0x1C */ s16 unk1C; + /* 0x1E */ s16 currPage; + u16 unk20; + u8 fill22[0x34 - 0x22]; + u32 unk34; + struct unkData *unk38; + struct unkData unk3C[3]; + u8 fill84[0x9C - 0x84]; + u8 unk9C; + /* 0x9D */ u8 currPage_u8; + u8 unk9E; + u8 unk9F; +}; + +extern struct AdventureLog *gAdventureLog; +extern struct unkData gUnknown_80E2008; +extern struct unkData gUnknown_80E1FF0; + +// Adventure Log Text +const u8 gAdventureLogHeaderText[] = "Adventure Log"; +const u8 gUnknown_80E2030[] = "~95~95~95~95~95~95~95~95~95~95~95~95~95~95~95 "; // string of ??????? +const u8 fill_adven[] = "pksdir0"; + +extern void *MemoryAlloc(u32, u32); +extern void MemoryFree(void *); +extern void sub_8006518(struct unkData *); +extern void sub_800641C(void *, u32, u32); +extern void sub_8032084(); +extern void DisplayAdventureLog(); +extern void sub_8013818(void *, u32, u32, u32); +extern u8 sub_8013938(void *); +extern void sub_8013660(void *); +extern void PlayMenuSoundEffect(u32); +extern u32 GetKeyPress(void *); +extern u8 sub_8097710(u8); + +extern s16 sub_80978B8(); +extern s16 sub_8097880(); +extern s16 sub_8097838(); +extern s16 sub_8097870(); +extern s32 sub_80977B8(); +extern s32 sub_80977F8(); +extern void xxx_call_draw_string(s32, u32, u32 *, u32, u32); +extern u32 gUnknown_202DE30; + +u32 CreateAdventureLogScreen(u32 param_1) +{ + gAdventureLog = MemoryAlloc(0xa0,8); + gAdventureLog->unk34 = param_1; + gAdventureLog->unk38 = &gAdventureLog->unk3C[param_1]; + sub_8006518(gAdventureLog->unk3C); + gAdventureLog->unk3C[gAdventureLog->unk34] = gUnknown_80E2008; + gAdventureLog->unk38->unk14 = &gAdventureLog->unk9C; + + ResetUnusedInputStruct(); + sub_800641C(gAdventureLog->unk3C,1,1); + sub_8013818(gAdventureLog,0x20,8,param_1); + sub_8032084(); + DisplayAdventureLog(); + return 1; +} + +u32 HandleAdventureLogInput(u8 param_1) +{ + if (param_1 == 0) { + sub_8013660(gAdventureLog); + return 0; + } + else { + switch(GetKeyPress(gAdventureLog)) + { + case B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case A_BUTTON: + PlayMenuSoundEffect(0); + return 3; + default: + if (sub_8013938(gAdventureLog) != '\0') { + sub_8032084(); + DisplayAdventureLog(); + return 1; + } + else { + return 0; + } + } + } +} + +void CleanAdventureLogScreen(void) +{ + if (gAdventureLog != NULL) { + gAdventureLog->unk3C[gAdventureLog->unk34] = gUnknown_80E1FF0; + ResetUnusedInputStruct(); + sub_800641C(gAdventureLog->unk3C,1,1); + MemoryFree(gAdventureLog); + gAdventureLog = 0; + } +} + + +#ifdef NONMATCHING +void sub_8032084(void) +{ + u32 sVar2; + + gAdventureLog->unk9C = gAdventureLog->unk20; + gAdventureLog->currPage_u8 = gAdventureLog->currPage; + gAdventureLog->unk9E = 0xb; + gAdventureLog->unk9F = 0; + // So a sign extend.. + sVar2 = sub_80095E4(gAdventureLog->unk1A,0xc) + 2 << 0x10; + // TODO needs asr r3, r0, r16 + // and lsr r0, r0, r16 + gAdventureLog->unk3C[gAdventureLog->unk34].unkD = sVar2; + // Good past here except regs for this store + gAdventureLog->unk3C[gAdventureLog->unk34].unk10 = sVar2 + 2; + ResetUnusedInputStruct(); + sub_800641C(gAdventureLog->unk3C,1,1); +} +#else +NAKED +void sub_8032084(void) +{ + asm_unified("\tpush {r4,lr}\n" + "\tldr r4, _080320F4\n" + "\tldr r0, [r4]\n" + "\tldrh r1, [r0, 0x20]\n" + "\tadds r0, 0x9C\n" + "\tmovs r2, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldrh r1, [r0, 0x1E]\n" + "\tadds r0, 0x9D\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x9E\n" + "\tmovs r1, 0xB\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x9F\n" + "\tstrb r2, [r0]\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" +"_080320F4: .4byte gAdventureLog"); +} +#endif + +// Uses 1 too many regs +#ifdef NONMATCHING +void DisplayAdventureLog(void) +{ + s32 counter; + s32 iVar5; + u32 uVar6; + u8 temp; + + sub_8008C54(gAdventureLog->unk34); + sub_80073B8(gAdventureLog->unk34); + iVar5 = gAdventureLog->currPage * 8; + iVar5 += 10; + // Draw Header + xxx_call_draw_string(iVar5, 0, &gAdventureLogHeaderText, gAdventureLog->unk34, 0); + iVar5 += 4; + iVar5 += gAdventureLog->unk9E * 8; + // Draw Page # + sub_8012BC4(iVar5, 0, gAdventureLog->currPage + 1, 1, 7, gAdventureLog->unk34); + counter = 0; + do { + uVar6 = gAdventureLog->currPage * gAdventureLog->unk1C + counter; + temp = uVar6; // Having another var in middle gets close (does a u8 cast) + if(sub_8097710(temp) != 0){ + switch(temp) { + case 0xc: + gUnknown_202DE30 = sub_80978B8(); + break; + case 7: + gUnknown_202DE30 = sub_8097880(); + break; + case 0xb: + gUnknown_202DE30 = sub_8097838(); + break; + case 8: + gUnknown_202DE30 = sub_80977B8(); + break; + case 9: + gUnknown_202DE30 = sub_80977F8(); + break; + case 10: + gUnknown_202DE30 = sub_8097870(); + break; + default: + break; + } + sub_8014FF0(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(uVar6), gAdventureLog->unk34, 0); + } + else + { + // Draw the ?????????? across the row + xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), &gUnknown_80E2030, gAdventureLog->unk34, 0); + } + counter++; + } while(counter < gAdventureLog->unk1A); + sub_80073E0(gAdventureLog->unk34); +} +#else +NAKED +void DisplayAdventureLog(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tsub sp, 0x8\n" + "\tldr r5, _08032158\n" + "\tldr r0, [r5]\n" + "\tldr r0, [r0, 0x34]\n" + "\tbl sub_8008C54\n" + "\tldr r0, [r5]\n" + "\tldr r0, [r0, 0x34]\n" + "\tbl sub_80073B8\n" + "\tldr r0, [r5]\n" + "\tmovs r1, 0x1E\n" + "\tldrsh r4, [r0, r1]\n" + "\tlsls r4, 3\n" + "\tadds r6, r4, 0\n" + "\tadds r6, 0xA\n" + "\tldr r2, _0803215C\n" + "\tldr r3, [r0, 0x34]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp]\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tbl xxx_call_draw_string\n" + "\tadds r4, 0x4\n" + "\tldr r1, [r5]\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0x9E\n" + "\tldrb r0, [r0]\n" + "\tlsls r0, 3\n" + "\tadds r6, r4, r0\n" + "\tmovs r0, 0x1E\n" + "\tldrsh r2, [r1, r0]\n" + "\tadds r2, 0x1\n" + "\tmovs r0, 0x7\n" + "\tstr r0, [sp]\n" + "\tldr r0, [r1, 0x34]\n" + "\tstr r0, [sp, 0x4]\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0x1\n" + "\tbl sub_8012BC4\n" + "\tmovs r7, 0\n" + "\tldr r0, [r5]\n" + "\tb _0803223A\n" + "\t.align 2, 0\n" +"_08032158: .4byte gAdventureLog\n" +"_0803215C: .4byte gAdventureLogHeaderText\n" +"_08032160:\n" + "\tldr r5, _08032194\n" + "\tldr r0, [r5]\n" + "\tmovs r2, 0x1E\n" + "\tldrsh r1, [r0, r2]\n" + "\tmovs r2, 0x1C\n" + "\tldrsh r0, [r0, r2]\n" + "\tmuls r0, r1\n" + "\tadds r0, r7\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tadds r0, r6, 0\n" + "\tbl sub_8097710\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tcmp r4, 0\n" + "\tbeq _0803221C\n" + "\tsubs r0, r6, 0x7\n" + "\tcmp r0, 0x5\n" + "\tbhi _080321EC\n" + "\tlsls r0, 2\n" + "\tldr r1, _08032198\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" +"_08032194: .4byte gAdventureLog\n" +"_08032198: .4byte _0803219C\n" + "\t.align 2, 0\n" +"_0803219C:\n" + "\t.4byte _080321BA\n" + "\t.4byte _080321C6\n" + "\t.4byte _080321D4\n" + "\t.4byte _080321E0\n" + "\t.4byte _080321C0\n" + "\t.4byte _080321B4\n" +"_080321B4:\n" + "\tbl sub_80978B8\n" + "\tb _080321E4\n" +"_080321BA:\n" + "\tbl sub_8097880\n" + "\tb _080321E4\n" +"_080321C0:\n" + "\tbl sub_8097838\n" + "\tb _080321E4\n" +"_080321C6:\n" + "\tbl sub_80977B8\n" + "\tldr r1, _080321D0\n" + "\tb _080321EA\n" + "\t.align 2, 0\n" +"_080321D0: .4byte gUnknown_202DE30\n" +"_080321D4:\n" + "\tbl sub_80977F8\n" + "\tldr r1, _080321DC\n" + "\tb _080321EA\n" + "\t.align 2, 0\n" +"_080321DC: .4byte gUnknown_202DE30\n" +"_080321E0:\n" + "\tbl sub_8097870\n" +"_080321E4:\n" + "\tldr r1, _08032214\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" +"_080321EA:\n" + "\tstr r0, [r1]\n" +"_080321EC:\n" + "\tldr r4, _08032218\n" + "\tldr r0, [r4]\n" + "\tadds r1, r7, 0\n" + "\tbl sub_8013800\n" + "\tadds r5, r0, 0\n" + "\tadds r0, r6, 0\n" + "\tbl GetAdventureLogLine\n" + "\tadds r2, r0, 0\n" + "\tldr r0, [r4]\n" + "\tldr r3, [r0, 0x34]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp]\n" + "\tmovs r0, 0x8\n" + "\tadds r1, r5, 0\n" + "\tbl sub_8014FF0\n" + "\tb _08032234\n" + "\t.align 2, 0\n" +"_08032214: .4byte gUnknown_202DE30\n" +"_08032218: .4byte gAdventureLog\n" +"_0803221C:\n" + "\tldr r0, [r5]\n" + "\tadds r1, r7, 0\n" + "\tbl sub_8013800\n" + "\tadds r1, r0, 0\n" + "\tldr r2, _08032254\n" + "\tldr r0, [r5]\n" + "\tldr r3, [r0, 0x34]\n" + "\tstr r4, [sp]\n" + "\tmovs r0, 0x8\n" + "\tbl xxx_call_draw_string\n" +"_08032234:\n" + "\tadds r7, 0x1\n" + "\tldr r0, _08032258\n" + "\tldr r0, [r0]\n" +"_0803223A:\n" + "\tmovs r1, 0x1A\n" + "\tldrsh r0, [r0, r1]\n" + "\tcmp r7, r0\n" + "\tblt _08032160\n" + "\tldr r0, _08032258\n" + "\tldr r0, [r0]\n" + "\tldr r0, [r0, 0x34]\n" + "\tbl sub_80073E0\n" + "\tadd sp, 0x8\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08032254: .4byte gUnknown_80E2030\n" +"_08032258: .4byte gAdventureLog"); +} +#endif |