summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/code_2.c8
-rw-r--r--src/code_801D760.c3
-rw-r--r--src/credits.c33
-rw-r--r--src/main_menu.c47
-rw-r--r--src/music_pre.c14
-rw-r--r--src/personality_test.c39
-rw-r--r--src/personality_test_pre.c299
-rw-r--r--src/pokemon_1.c11
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)