summaryrefslogtreecommitdiff
path: root/src/personality_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/personality_test.c')
-rw-r--r--src/personality_test.c313
1 files changed, 232 insertions, 81 deletions
diff --git a/src/personality_test.c b/src/personality_test.c
index 2a623b6..9a54744 100644
--- a/src/personality_test.c
+++ b/src/personality_test.c
@@ -11,6 +11,10 @@
#include "text.h"
#include "menu.h"
+EWRAM_DATA struct PersonalityStruct_203B400 *gUnknown_203B400;
+EWRAM_DATA struct PersonalityStruct_203B404 *gUnknown_203B404;
+
+
extern void sub_801317C(u32 *);
extern void sub_8001024(u32 *);
extern s32 sub_8094E4C(void);
@@ -18,7 +22,7 @@ extern void sub_8094D28(s32);
extern void sub_8001044(u32 *);
extern void sub_80141B4(const char *text, u32 r1, u32 r2, u16 r3);
-extern void sub_8014248(const char *text, u32, u32, struct MenuItem *r0, u32, u32, u32, u32, u32);
+extern void sub_8014248(const char *text, u32, u32, const struct MenuItem *r0, u32, u32, u32, u32, u32);
extern u32 sub_80144A4(s32 *);
@@ -49,15 +53,10 @@ extern void AddMenuCursorSprite(struct UnkInputStruct **r0);
extern void xxx_call_draw_string(u32 x, u32 y, const char *text, u32, u32);
extern u32 sub_80095E4(s16, u32);
-extern struct PersonalityQuestion *gPersonalityQuestionPointerTable[NUM_QUIZ_QUESTIONS];
-
extern struct UnkSaveStruct1 *gUnknown_203B46C;
extern const char gStarterReveal[];
-extern const char gGenderText[];
-extern struct MenuItem gGenderMenu[];
-extern u8 gNatureQuestionTable[NUM_QUIZ_QUESTIONS];
extern u8 gAvailablePokemonNames[0x50];
extern const char gHardyDescription[];
@@ -73,6 +72,226 @@ extern const char gCalmDescription[];
extern const char gRelaxedDescription[];
extern const char gLonelyDescription[];
extern const char gQuirkyDescription[];
+extern const u8 GirlText[];
+extern const u8 BoyText[];
+
+extern const struct PersonalityQuestion HardyQuest1;
+extern const struct PersonalityQuestion HardyQuest2;
+extern const struct PersonalityQuestion HardyQuest3;
+extern const struct PersonalityQuestion HardyQuest4;
+extern const struct PersonalityQuestion DocileQuest1;
+extern const struct PersonalityQuestion DocileQuest2;
+extern const struct PersonalityQuestion DocileQuest3;
+extern const struct PersonalityQuestion DocileQuest4;
+extern const struct PersonalityQuestion BraveQuest1;
+extern const struct PersonalityQuestion BraveQuest2A;
+extern const struct PersonalityQuestion BraveQuest3;
+extern const struct PersonalityQuestion BraveQuest4;
+extern const struct PersonalityQuestion JollyQuest1;
+extern const struct PersonalityQuestion JollyQuest2;
+extern const struct PersonalityQuestion JollyQuest3;
+extern const struct PersonalityQuestion JollyQuest4;
+extern const struct PersonalityQuestion ImpishQuest1;
+extern const struct PersonalityQuestion ImpishQuest2;
+extern const struct PersonalityQuestion ImpishQuest3;
+extern const struct PersonalityQuestion ImpishQuest4;
+extern const struct PersonalityQuestion NaiveQuest1;
+extern const struct PersonalityQuestion NaiveQuest2;
+extern const struct PersonalityQuestion NaiveQuest3;
+extern const struct PersonalityQuestion NaiveQuest4;
+extern const struct PersonalityQuestion TimidQuest1;
+extern const struct PersonalityQuestion TimidQuest2;
+extern const struct PersonalityQuestion TimidQuest3;
+extern const struct PersonalityQuestion TimidQuest4;
+extern const struct PersonalityQuestion HastyQuest1;
+extern const struct PersonalityQuestion HastyQuest2;
+extern const struct PersonalityQuestion HastyQuest3;
+extern const struct PersonalityQuestion HastyQuest4;
+extern const struct PersonalityQuestion SassyQuest1;
+extern const struct PersonalityQuestion SassyQuest2;
+extern const struct PersonalityQuestion SassyQuest3;
+extern const struct PersonalityQuestion SassyQuest4;
+extern const struct PersonalityQuestion CalmQuest1;
+extern const struct PersonalityQuestion CalmQuest2;
+extern const struct PersonalityQuestion CalmQuest3;
+extern const struct PersonalityQuestion CalmQuest4;
+extern const struct PersonalityQuestion RelaxedQuest1;
+extern const struct PersonalityQuestion RelaxedQuest2;
+extern const struct PersonalityQuestion RelaxedQuest3;
+extern const struct PersonalityQuestion RelaxedQuest4;
+extern const struct PersonalityQuestion LonelyQuest1;
+extern const struct PersonalityQuestion LonelyQuest2;
+extern const struct PersonalityQuestion LonelyQuest3;
+extern const struct PersonalityQuestion LonelyQuest4;
+extern const struct PersonalityQuestion QuirkyQuest1;
+extern const struct PersonalityQuestion QuirkyQuest2;
+extern const struct PersonalityQuestion QuirkyQuest3;
+extern const struct PersonalityQuestion QuirkyQuest4;
+extern const struct PersonalityQuestion MiscQuest1;
+extern const struct PersonalityQuestion MiscQuest2;
+extern const struct PersonalityQuestion MiscQuest3;
+extern const struct PersonalityQuestion BraveQuest2B;
+
+
+const struct PersonalityQuestion * const gPersonalityQuestionPointerTable[NUM_QUIZ_QUESTIONS + 1] =
+{
+ &HardyQuest1,
+ &HardyQuest2,
+ &HardyQuest3,
+ &HardyQuest4,
+ &DocileQuest1,
+ &DocileQuest2,
+ &DocileQuest3,
+ &DocileQuest4,
+ &BraveQuest1,
+ &BraveQuest2A,
+ &BraveQuest3,
+ &BraveQuest4,
+ &JollyQuest1,
+ &JollyQuest2,
+ &JollyQuest3,
+ &JollyQuest4,
+ &ImpishQuest1,
+ &ImpishQuest2,
+ &ImpishQuest3,
+ &ImpishQuest4,
+ &NaiveQuest1,
+ &NaiveQuest2,
+ &NaiveQuest3,
+ &NaiveQuest4,
+ &TimidQuest1,
+ &TimidQuest2,
+ &TimidQuest3,
+ &TimidQuest4,
+ &HastyQuest1,
+ &HastyQuest2,
+ &HastyQuest3,
+ &HastyQuest4,
+ &SassyQuest1,
+ &SassyQuest2,
+ &SassyQuest3,
+ &SassyQuest4,
+ &CalmQuest1,
+ &CalmQuest2,
+ &CalmQuest3,
+ &CalmQuest4,
+ &RelaxedQuest1,
+ &RelaxedQuest2,
+ &RelaxedQuest3,
+ &RelaxedQuest4,
+ &LonelyQuest1,
+ &LonelyQuest2,
+ &LonelyQuest3,
+ &LonelyQuest4,
+ &QuirkyQuest1,
+ &QuirkyQuest2,
+ &QuirkyQuest3,
+ &QuirkyQuest4,
+ &MiscQuest1,
+ &MiscQuest2,
+ &MiscQuest3,
+ &BraveQuest2B
+};
+
+
+// NOTE: 2nd Part of Brave is included at the end so it isn't actually chosen
+const u8 gNatureQuestionTable[NUM_QUIZ_QUESTIONS + 1] =
+{
+ HARDY,
+ HARDY,
+ HARDY,
+ HARDY,
+ DOCILE,
+ DOCILE,
+ DOCILE,
+ DOCILE,
+ BRAVE,
+ BRAVE,
+ BRAVE,
+ BRAVE,
+ JOLLY,
+ JOLLY,
+ JOLLY,
+ JOLLY,
+ IMPISH,
+ IMPISH,
+ IMPISH,
+ IMPISH,
+ NAIVE,
+ NAIVE,
+ NAIVE,
+ NAIVE,
+ TIMID,
+ TIMID,
+ TIMID,
+ TIMID,
+ HASTY,
+ HASTY,
+ HASTY,
+ HASTY,
+ SASSY,
+ SASSY,
+ SASSY,
+ SASSY,
+ CALM,
+ CALM,
+ CALM,
+ CALM,
+ RELAXED,
+ RELAXED,
+ RELAXED,
+ RELAXED,
+ LONELY,
+ LONELY,
+ LONELY,
+ LONELY,
+ QUIRKY,
+ QUIRKY,
+ QUIRKY,
+ QUIRKY,
+ MISC,
+ MISC,
+ MISC,
+ BRAVE
+};
+
+ALIGNED(4) const u8 gGenderText[] = "Are you a boy or a girl?";
+const char * const gGenderTextPtr = gGenderText;
+
+
+const struct MenuItem gGenderMenu[] =
+{
+ {BoyText, 0},
+ {GirlText, 1},
+ {NULL, -1},
+};
+
+ALIGNED(4) const u8 GirlText[] = "Girl.";
+ALIGNED(4) const u8 BoyText[] = "Boy.";
+
+const u8 unknownPersonality[] =
+{
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA, 0xB, 0xC, 0xD
+};
+
+const s16 gStarters[NUM_PERSONALITIES][2] =
+{
+ // MALE / FEMALE
+ [HARDY] = {SPECIES_CHARMANDER, SPECIES_PIKACHU},
+ [DOCILE] = {SPECIES_BULBASAUR, SPECIES_CHIKORITA},
+ [BRAVE] = {SPECIES_MACHOP, SPECIES_CHARMANDER},
+ [JOLLY] = {SPECIES_SQUIRTLE, SPECIES_TOTODILE},
+ [IMPISH] = {SPECIES_PIKACHU, SPECIES_CUBONE},
+ [NAIVE] = {SPECIES_TOTODILE, SPECIES_EEVEE},
+ [TIMID] = {SPECIES_CYNDAQUIL, SPECIES_MUDKIP},
+ [HASTY] = {SPECIES_TORCHIC, SPECIES_SKITTY},
+ [SASSY] = {SPECIES_TREECKO, SPECIES_TORCHIC},
+ [CALM] = {SPECIES_MUDKIP, SPECIES_BULBASAUR},
+ [RELAXED] = {SPECIES_PSYDUCK, SPECIES_SQUIRTLE},
+ [LONELY] = {SPECIES_CUBONE, SPECIES_PSYDUCK},
+ [QUIRKY] = {SPECIES_MEOWTH, SPECIES_TREECKO}
+};
+
ALIGNED(4) const char gStarterReveal[] = _("\n{CENTER_ALIGN}The Pokémon {ARG_POKEMON_0}!");
const char * const gStarterRevealPtr = gStarterReveal;
@@ -327,8 +546,10 @@ void UpdateNatureTotals()
if (!sub_80144A4(&answerIndex))
{
- if (answerIndex == 99)
+ // This is for the second part of Brave 2 Question if you fight..
+ if (answerIndex == BRAVE_2B_TRIGGER)
{
+ // Set question to BRAVE_2B and ask the question..
gUnknown_203B400->currQuestionIndex = NUM_QUIZ_QUESTIONS;
gUnknown_203B400->TestState = 1;
}
@@ -367,7 +588,6 @@ void SetPlayerGender(void)
}
}
-#ifdef NONMATCHING
void RevealPersonality(void)
{
s32 currentNature;
@@ -376,14 +596,12 @@ void RevealPersonality(void)
gUnknown_203B400->playerNature = RandomCapped(NUM_PERSONALITIES);
currentNature = gUnknown_203B400->playerNature;
- // 2 Statements flip-flop but is functionaly equivalent
- // Struct saving into register and intialize of the counter
- for(counter = NUM_PERSONALITIES - 2; counter >= 0; counter--){
- currentNature = currentNature++;
+ for(counter = 0; counter < NUM_PERSONALITIES - 1; counter++){
+ currentNature++;
// Wraparound check
- if (currentNature > NUM_PERSONALITIES - 1) {
- currentNature = 0;
+ if (currentNature > QUIRKY) {
+ currentNature = HARDY;
}
if (gUnknown_203B400->NatureTotals[currentNature] > gUnknown_203B400->NatureTotals[gUnknown_203B400->playerNature]) {
@@ -394,73 +612,6 @@ void RevealPersonality(void)
PrintPersonalityTypeDescription();
gUnknown_203B400->TestState = 5;
}
-#else
-NAKED
-void RevealPersonality(void)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmovs r0, 0xD\n"
- "\tbl RandomCapped\n"
- "\tldr r2, _0803CA4C\n"
- "\tldr r1, [r2]\n"
- "\tadds r1, 0x40\n"
- "\tstrb r0, [r1]\n"
- "\tldr r0, [r2]\n"
- "\tadds r0, 0x40\n"
- "\tldrb r3, [r0]\n"
- "\tadds r7, r2, 0\n"
- "\tmovs r5, 0xB\n"
-"_0803C9F2:\n"
- "\tadds r3, 0x1\n"
- "\tcmp r3, 0xC\n"
- "\tble _0803C9FA\n"
- "\tmovs r3, 0\n"
-"_0803C9FA:\n"
- "\tldr r0, [r7]\n"
- "\tlsls r2, r3, 2\n"
- "\tadds r1, r0, 0\n"
- "\tadds r1, 0x44\n"
- "\tadds r2, r1, r2\n"
- "\tadds r4, r0, 0\n"
- "\tadds r4, 0x40\n"
- "\tldrb r0, [r4]\n"
- "\tlsls r0, 2\n"
- "\tadds r1, r0\n"
- "\tldr r2, [r2]\n"
- "\tldr r0, [r1]\n"
- "\tldr r6, _0803CA4C\n"
- "\tcmp r2, r0\n"
- "\tble _0803CA1A\n"
- "\tstrb r3, [r4]\n"
-"_0803CA1A:\n"
- "\tsubs r5, 0x1\n"
- "\tcmp r5, 0\n"
- "\tbge _0803C9F2\n"
- "\tldr r3, [r6]\n"
- "\tldr r2, _0803CA50\n"
- "\tadds r0, r3, 0\n"
- "\tadds r0, 0xB0\n"
- "\tldr r1, [r0]\n"
- "\tlsls r1, 1\n"
- "\tsubs r0, 0x70\n"
- "\tldrb r0, [r0]\n"
- "\tlsls r0, 2\n"
- "\tadds r1, r0\n"
- "\tadds r1, r2\n"
- "\tldrh r0, [r1]\n"
- "\tstrh r0, [r3, 0x8]\n"
- "\tbl PrintPersonalityTypeDescription\n"
- "\tldr r1, [r6]\n"
- "\tmovs r0, 0x5\n"
- "\tstr r0, [r1, 0x34]\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
-"_0803CA4C: .4byte gUnknown_203B400\n"
-"_0803CA50: .4byte gStarters");
-}
-#endif
void RevealStarter(void)
{