diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2021-02-07 19:10:12 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-07 21:10:12 -0600 |
commit | 8dfd044ef3a6ea8da204265b4560716aa67391d1 (patch) | |
tree | 15274fab1fd9b1d4e477bbfddbfb855ade1eabeb /src | |
parent | 74daf03fd70e7c71b92390c9133c9dd543bcb28d (diff) |
Some Personality and data (#26)
* decomp few personality funcs and clean up some pointers in the dungeon data
* de-pointer-ify friend area dialogue
* clean pointers on a personality test question
* decomp a few more main menu funcs and dump some more data
* label some funcs
Diffstat (limited to 'src')
-rw-r--r-- | src/code_2.c | 8 | ||||
-rw-r--r-- | src/code_801D760.c | 3 | ||||
-rw-r--r-- | src/credits.c | 33 | ||||
-rw-r--r-- | src/main_menu.c | 47 | ||||
-rw-r--r-- | src/music_pre.c | 14 | ||||
-rw-r--r-- | src/personality_test.c | 39 | ||||
-rw-r--r-- | src/personality_test_pre.c | 299 | ||||
-rw-r--r-- | src/pokemon_1.c | 11 |
8 files changed, 425 insertions, 29 deletions
diff --git a/src/code_2.c b/src/code_2.c index 1830188..a9b8925 100644 --- a/src/code_2.c +++ b/src/code_2.c @@ -50,7 +50,7 @@ extern u8 sub_80363E0(void); extern void SetUpMenu(void); extern u32 UpdateMenu(void); extern void CleanUpMenu(void); -extern void sub_80357D0(void); +extern void DeleteMainMenu(void); extern s32 sub_80953D4(u32); extern void sub_8095240(u8); extern void sub_80122A8(void); @@ -78,7 +78,7 @@ extern struct OpenedFile *gTitlePaletteFile; extern struct Inputs gRealInputs; extern u8 *gUnknown_203B46C; -extern char gUnknown_80B69BC[]; +extern char gPMDBuildVersion[]; void xxx_update_stuff(u32); @@ -109,7 +109,7 @@ void GameLoop(void) sub_800CD64(0x8000, 0); sub_8012284(); sub_8094998(1); - SetWindowTitle(gUnknown_80B69BC); + SetWindowTitle(gPMDBuildVersion); sub_800DAAC(); SetSavingIconCoords(0); tmp = 0; @@ -175,7 +175,7 @@ void GameLoop(void) if (tmp4 == 4) break; if (tmp4 == 3) break; } - sub_80357D0(); + DeleteMainMenu(); while (gUnknown_2000A80 > 0) { s32 i; gUnknown_2000A80--; diff --git a/src/code_801D760.c b/src/code_801D760.c index c2266ec..79c5a4c 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -28,6 +28,9 @@ struct unk_203B250 u16 unk4; u8 unk6; u8 unk7; + u32 padding[3]; + u32 unk14; + u32 unk18; }; struct unk_203B250 *gUnknown_203B250; diff --git a/src/credits.c b/src/credits.c new file mode 100644 index 0000000..2f499fb --- /dev/null +++ b/src/credits.c @@ -0,0 +1,33 @@ +#include "global.h" + +extern s32 sub_80144A4(s32 *); +extern void sub_80338C4(u32); +extern void sub_80338C4(u32); + +void sub_8035404(u32 param_1) +{ + s32 iVar1; + + if(sub_80144A4(&iVar1) == 0){ + sub_80338C4(param_1); + } +} + +void sub_8035424(void) +{ + sub_80338C4(6); +} + +void sub_8035430(void) +{ + sub_80338C4(0x4F); +} + +void nullsub_50(void) +{ +} + +void nullsub_51(void) +{ +} + diff --git a/src/main_menu.c b/src/main_menu.c index 714ae61..765039f 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -1,18 +1,22 @@ #include "global.h" -struct MainMenu +struct MainMenuSub { - u32 unk0; - s32 unk4; - u32 unk8; - u8 padding[0x20]; u8 unk2C; u8 unk2D; u8 unk2E; - u8 padding2[0x30 - 0x2F]; +}; + +struct MainMenu +{ + s32 unk0; + s32 unk4; + s32 unk8; + u8 padding[0x20]; + /* 0x2C */ struct MainMenuSub sub; u32 unk30; u32 unk34; - u16 unk38; + s16 unk38; u8 unk3A; u8 unk3B; s32 unk3C; @@ -75,16 +79,16 @@ void InitMainMenu(void) gUnknown_203B348->unk0 = 0xffdc; gUnknown_203B348->unk4 = 1; gUnknown_203B348->unk8 = 1; - gUnknown_203B348->unk38 = 0xffdc + 0x23; + gUnknown_203B348->unk38 = -1; gUnknown_203B348->unk3C = -1; - gUnknown_203B348->unk2E = 0; - gUnknown_203B348->unk2C = 1; - gUnknown_203B348->unk2D = 0; + gUnknown_203B348->sub.unk2E = 0; + gUnknown_203B348->sub.unk2C = 1; + gUnknown_203B348->sub.unk2D = 0; sub_8035DA0(); gUnknown_203B348->unk3A = 0; } -void sub_80357D0(void) +void DeleteMainMenu(void) { if(gUnknown_203B348){ MemoryFree(gUnknown_203B348); @@ -294,3 +298,22 @@ void CleanUpMenu(void) gUnknown_203B348->unk8 = gUnknown_203B348->unk4; } } + +// Unused +void sub_8035C00(struct MainMenuSub *param) +{ + gUnknown_203B348->sub = *param; +} + +// Unused +struct MainMenuSub *sub_8035C10(void) +{ + return &gUnknown_203B348->sub; +} + +void sub_8035C1C(void) +{ + gUnknown_203B348->sub.unk2E = 0; + gUnknown_203B348->sub.unk2C = 1; + gUnknown_203B348->sub.unk2D = 0; +} diff --git a/src/music_pre.c b/src/music_pre.c index 5c0589a..bd87aac 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -454,6 +454,7 @@ u16 GetCurrentBGSong(void) } #ifdef NONMATCHING +// TODO fix reg allocation.. using one too many regs void sub_800C074(u16 SongIndex,u16 param_2) { bool8 interrupt_flag; @@ -548,10 +549,15 @@ void sub_800C074(u16 SongIndex,u16 param_2) m4aSongNumStart(SongIndex); preload->unk0 = 1; preload->songIndex = SongIndex; - // TODO fix this comparison - // Generates eor/neg/lsr - preload->unk6 = param_2 != 0x100; - preload->unk4 = param_2; + if(msVar == param_2) + { + preload->unk6 = 1; + } + else + { + preload->unk6 = 0; + } + preload->unk4 = msVar; if (interrupt_flag) EnableInterrupts(); } diff --git a/src/personality_test.c b/src/personality_test.c index c0562e4..9aef10a 100644 --- a/src/personality_test.c +++ b/src/personality_test.c @@ -1,5 +1,8 @@ #include "global.h" #include "constants/species.h" +#include "pokemon.h" + +#define NUM_PARTNERS 10 // TODO convert this... maybe a script? const u8 gUnknown_80F4244[32] = @@ -14,7 +17,7 @@ const u8 gUnknown_80F4244[32] = 'p', 'k', 's', 'd', 'i', 'r', '0', 0 }; -const u16 gPartners[10] = +const s16 gPartners[NUM_PARTNERS] = { SPECIES_CHARMANDER, SPECIES_BULBASAUR, @@ -32,6 +35,40 @@ extern u8 gUnknown_80F42D0[]; extern u8 gUnknown_80F42F0[]; extern u8 gUnknown_203B408; +struct unkStruct_203B404 +{ + // Size: 0xB8 + /* 0x0 */ s16 StarterID; + /* 0x2 */ s16 PartnerArray[NUM_PARTNERS]; +}; + +extern struct unkStruct_203B404 *gUnknown_203B404; + +s32 GetValidPartners(void) +{ + u8 PlayerType[2]; + u8 currentPartnerTypes[2]; + s32 counter; + s32 ValidPartnerCounter; + s32 CurrentPartnerID; + + ValidPartnerCounter = 0; + PlayerType[0] = GetPokemonType(gUnknown_203B404->StarterID,0); + PlayerType[1] = GetPokemonType(gUnknown_203B404->StarterID,1); + for(counter = 0; counter < NUM_PARTNERS; counter++){ + CurrentPartnerID = gPartners[counter]; + currentPartnerTypes[0] = GetPokemonType(CurrentPartnerID,0); + currentPartnerTypes[1] = GetPokemonType(CurrentPartnerID,1); + if (((currentPartnerTypes[0] == '\0') || ((currentPartnerTypes[0] != PlayerType[0] && (currentPartnerTypes[0] != PlayerType[1])))) + && ((currentPartnerTypes[1] == '\0' || ((currentPartnerTypes[1] != PlayerType[0] && (currentPartnerTypes[1] != PlayerType[1]))) + ))) { + gUnknown_203B404->PartnerArray[ValidPartnerCounter] = CurrentPartnerID; + ValidPartnerCounter++; + } + } + return ValidPartnerCounter; +} + u8 sub_803D0D8() { return gUnknown_203B408; diff --git a/src/personality_test_pre.c b/src/personality_test_pre.c new file mode 100644 index 0000000..9603b0e --- /dev/null +++ b/src/personality_test_pre.c @@ -0,0 +1,299 @@ +#include "global.h" + +#define NUM_PERSONALITIES 13 +#define NUM_QUIZ_QUESTIONS 55 + +struct PersonalityStruct_203B400 +{ + u32 unk0; + u32 unk4; + u8 padding[0x34 - 8]; + /* 0x34 */ u32 TestState; + /* 0x38 */ u32 QuestionCounter; + /* 0x3C */ u32 currQuestionIndex; + u8 unk40; + u8 padding2[3]; + /* 0x44 */ u32 NatureTotals[13]; + /* 0x78 */ u8 QuestionTracker[NUM_QUIZ_QUESTIONS]; + u32 unkb0; + u32 unkb4; + u32 unkb8; + u32 unkbc; +}; + +extern struct PersonalityStruct_203B400 *gUnknown_203B400; +extern void* MemoryAlloc(u32, u32); +extern void MemoryFree(void *); +extern void sub_801317C(u32 *); +extern void sub_8099690(u32); +extern void sub_8001024(u32 *); +extern s32 Random(void); +extern s32 sub_8094E4C(void); +extern void sub_8011C40(s32); +extern void sub_8094D28(s32); +extern void sub_8001044(u32 *); + +extern void sub_803C870(void); +extern void sub_803C908(void); +extern void sub_803C920(void); +extern void sub_803C98C(void); +extern void sub_803C9D8(void); +extern void sub_803CA54(void); +extern void sub_803CA8C(void); +extern void sub_803CAAC(void); +extern void sub_803CAD4(void); +extern void sub_803CAF4(void); +extern void sub_803CB14(void); +extern void sub_803CB5C(void); +extern void sub_803CB7C(void); +extern void sub_803CBB0(void); +extern void sub_803CBE4(void); +void InitializeTestStats(void); + +u8 CreateTestTracker(void) +{ + gUnknown_203B400 = MemoryAlloc(sizeof(struct PersonalityStruct_203B400),8); + sub_801317C(&gUnknown_203B400->unkb4); + InitializeTestStats(); + sub_8099690(1); + return 1; +} + +void InitializeTestStats(void) +{ + s32 counter; + + sub_8001024(&gUnknown_203B400->unk4); + gUnknown_203B400->unk0 = 0; + gUnknown_203B400->TestState = 0; + gUnknown_203B400->QuestionCounter = 0; + for(counter = 0; counter < NUM_PERSONALITIES; counter++){ + gUnknown_203B400->NatureTotals[counter] = 0; + } + gUnknown_203B400->currQuestionIndex = 0; + for(counter = 0; counter < NUM_QUIZ_QUESTIONS; counter++){ + gUnknown_203B400->QuestionTracker[counter] = 0; + } + gUnknown_203B400->unk40 = 0; + gUnknown_203B400->unkb0 = 0; +} + +#ifdef NONMATCHING +u8 HandleTestTrackerState(void) +{ + s32 counter; + + s32 iVar1; + + gUnknown_203B400->unk0++; + switch(gUnknown_203B400->TestState) + { + case 0: + sub_803C870(); + break; + case 1: + sub_803C908(); + break; + case 2: + sub_803C920(); + break; + case 3: + sub_803C98C(); + break; + case 4: + sub_803C9D8(); + break; + case 5: + sub_803CA54(); + break; + case 6: + sub_803CA8C(); + break; + case 7: + sub_803CAAC(); + break; + case 8: + sub_803CAD4(); + break; + case 9: + sub_803CAF4(); + break; + case 10: + sub_803CB14(); + break; + case 11: + sub_803CB5C(); + break; + case 12: + sub_803CB7C(); + break; + case 13: + sub_803CBB0(); + break; + case 14: + sub_803CBE4(); + break; + case 15: + iVar1 = Random() * gUnknown_203B400->unk0; + sub_8094D28(Random()); + + // TODO fix this math.. + for(counter = 0; counter < 13; counter++){ + iVar1 *= (gUnknown_203B400->NatureTotals[counter] + 3); + } + + iVar1 += sub_8094E4C(); + while (iVar1 == -1) { + iVar1 += sub_8094E4C(); + } + sub_8011C40(iVar1); + return 3; + default: + break; + } + return 0; +} + +#else +NAKED +u8 HandleTestTrackerState(void) +{ + asm_unified( + "\tpush {r4,r5,lr}\n" + "\tldr r0, _0803C750\n" + "\tldr r1, [r0]\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstr r0, [r1]\n" + "\tldr r0, [r1, 0x34]\n" + "\tcmp r0, 0xF\n" + "\tbls _0803C744\n" + "\tb _0803C848\n" + "_0803C744:\n" + "\tlsls r0, 2\n" + "\tldr r1, _0803C754\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_0803C750: .4byte gUnknown_203B400\n" + "_0803C754: .4byte _0803C758\n" + "\t.align 2, 0\n" + "_0803C758:\n" + "\t.4byte _0803C798\n" + "\t.4byte _0803C79E\n" + "\t.4byte _0803C7A4\n" + "\t.4byte _0803C7AA\n" + "\t.4byte _0803C7B0\n" + "\t.4byte _0803C7B6\n" + "\t.4byte _0803C7BC\n" + "\t.4byte _0803C7C2\n" + "\t.4byte _0803C7C8\n" + "\t.4byte _0803C7CE\n" + "\t.4byte _0803C7D4\n" + "\t.4byte _0803C7DA\n" + "\t.4byte _0803C7E0\n" + "\t.4byte _0803C7E6\n" + "\t.4byte _0803C7EC\n" + "\t.4byte _0803C7F2\n" + "_0803C798:\n" + "\tbl sub_803C870\n" + "\tb _0803C848\n" + "_0803C79E:\n" + "\tbl sub_803C908\n" + "\tb _0803C848\n" + "_0803C7A4:\n" + "\tbl sub_803C920\n" + "\tb _0803C848\n" + "_0803C7AA:\n" + "\tbl sub_803C98C\n" + "\tb _0803C848\n" + "_0803C7B0:\n" + "\tbl sub_803C9D8\n" + "\tb _0803C848\n" + "_0803C7B6:\n" + "\tbl sub_803CA54\n" + "\tb _0803C848\n" + "_0803C7BC:\n" + "\tbl sub_803CA8C\n" + "\tb _0803C848\n" + "_0803C7C2:\n" + "\tbl sub_803CAAC\n" + "\tb _0803C848\n" + "_0803C7C8:\n" + "\tbl sub_803CAD4\n" + "\tb _0803C848\n" + "_0803C7CE:\n" + "\tbl sub_803CAF4\n" + "\tb _0803C848\n" + "_0803C7D4:\n" + "\tbl sub_803CB14\n" + "\tb _0803C848\n" + "_0803C7DA:\n" + "\tbl sub_803CB5C\n" + "\tb _0803C848\n" + "_0803C7E0:\n" + "\tbl sub_803CB7C\n" + "\tb _0803C848\n" + "_0803C7E6:\n" + "\tbl sub_803CBB0\n" + "\tb _0803C848\n" + "_0803C7EC:\n" + "\tbl sub_803CBE4\n" + "\tb _0803C848\n" + "_0803C7F2:\n" + "\tbl Random\n" + "\tldr r4, _0803C844\n" + "\tldr r1, [r4]\n" + "\tldr r1, [r1]\n" + "\tadds r5, r0, 0\n" + "\tmuls r5, r1\n" + "\tbl Random\n" + "\tbl sub_8094D28\n" + "\tmovs r1, 0\n" + "\tldr r0, [r4]\n" + "\tadds r2, r0, 0\n" + "\tadds r2, 0x44\n" + "_0803C810:\n" + "\tldm r2!, {r0}\n" + "\tadds r0, r1\n" + "\tadds r0, 0x3\n" + "\tmuls r5, r0\n" + "\tadds r1, 0x1\n" + "\tcmp r1, 0xC\n" + "\tble _0803C810\n" + "\tbl sub_8094E4C\n" + "\tadds r5, r0\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tcmp r5, r0\n" + "\tbne _0803C838\n" + "\tadds r4, r5, 0\n" + "_0803C82E:\n" + "\tbl sub_8094E4C\n" + "\tadds r5, r0\n" + "\tcmp r5, r4\n" + "\tbeq _0803C82E\n" + "_0803C838:\n" + "\tadds r0, r5, 0\n" + "\tbl sub_8011C40\n" + "\tmovs r0, 0x3\n" + "\tb _0803C84A\n" + "\t.align 2, 0\n" +"_0803C844: .4byte gUnknown_203B400\n" +"_0803C848:\n" + "\tmovs r0, 0\n" +"_0803C84A:\n" + "\tpop {r4,r5}\n" + "\tpop {r1}\n" + "\tbx r1"); +#endif + +} + +void DeleteTestTracker(void) +{ + sub_8001044(&gUnknown_203B400->unk4); + MemoryFree(gUnknown_203B400); + gUnknown_203B400 = NULL; +} diff --git a/src/pokemon_1.c b/src/pokemon_1.c index e76f970..440265b 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -8,12 +8,6 @@ extern struct gPokemon *gMonsterParameters; extern struct FileArchive gMonsterFileArchive; extern const char gUnknown_8107684[]; -struct unkEvolve -{ - /* 0x0 */ struct EvolveStruct1 conditions; - /* 0x4 */ struct EvolveNeeds needs; -}; - u8 *GetCategoryString(s16 index) { return gMonsterParameters[index].category; @@ -99,9 +93,10 @@ u16 GetPokemonDefSpdef(s16 index, u32 r1) return gMonsterParameters[index].base_def_spdef[r1]; } -u8 GetPokemonType(s16 index, u32 typeIndex) +u8 GetPokemonType(s32 index, u32 typeIndex) { - return gMonsterParameters[index].types[typeIndex]; + s16 newIndex = index; + return gMonsterParameters[newIndex].types[typeIndex]; } u8 GetPokemonAbility(s16 index, u32 abilityIndex) |