summaryrefslogtreecommitdiff
path: root/src/field
diff options
context:
space:
mode:
Diffstat (limited to 'src/field')
-rw-r--r--src/field/battle_tower.c2
-rw-r--r--src/field/berry.c521
-rw-r--r--src/field/berry_tag_screen.c2
-rw-r--r--src/field/bike.c20
-rw-r--r--src/field/choose_party.c101
-rw-r--r--src/field/decoration_inventory.c11
-rw-r--r--src/field/evobjmv.c518
-rw-r--r--src/field/field_control_avatar.c65
-rw-r--r--src/field/field_effect_helpers.c2
-rw-r--r--src/field/field_fadetransition.c16
-rw-r--r--src/field/field_player_avatar.c195
-rw-r--r--src/field/field_weather.c186
-rw-r--r--src/field/fldeff_cut.c109
-rw-r--r--src/field/fldeff_flash.c30
-rw-r--r--src/field/fldeff_secretpower.c96
-rw-r--r--src/field/fldeff_strength.c23
-rw-r--r--src/field/item_menu.c516
-rw-r--r--src/field/mauville_man.c83
-rw-r--r--src/field/overworld.c95
-rw-r--r--src/field/party_menu.c523
-rw-r--r--src/field/pokeblock.c68
-rw-r--r--src/field/region_map.c22
-rw-r--r--src/field/roamer.c19
-rw-r--r--src/field/safari_zone.c2
-rw-r--r--src/field/secret_base.c173
-rw-r--r--src/field/shop.c21
-rw-r--r--src/field/slot_machine.c2452
-rw-r--r--src/field/start_menu.c303
-rw-r--r--src/field/trader.c2
-rw-r--r--src/field/wild_encounter.c41
30 files changed, 6147 insertions, 70 deletions
diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c
index ab2a818a7..41d5ae9d1 100644
--- a/src/field/battle_tower.c
+++ b/src/field/battle_tower.c
@@ -259,7 +259,7 @@ static void SaveCurrentWinStreak(void);
static void sub_8135CFC(void);
static void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *);
static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *);
-static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer);
+void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer);
static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *);
static void ClearBattleTowerRecord(struct BattleTowerRecord *);
diff --git a/src/field/berry.c b/src/field/berry.c
index 7d22b50b1..cdfeb57af 100644
--- a/src/field/berry.c
+++ b/src/field/berry.c
@@ -999,6 +999,66 @@ extern u16 gSpecialVar_0x8006;
static u8 CalcBerryYield(struct BerryTree *tree);
static u16 GetStageDurationByBerryType(u8 berry);
+#if DEBUG
+__attribute__((naked))
+void debug_sub_80C2B04()
+{
+ asm(
+ " push {lr}\n"
+ " mov r0, #0x0\n"
+ " bl sub_80B47D8\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " ldr r2, ._1 @ gTasks\n"
+ " lsl r1, r0, #0x2\n"
+ " add r1, r1, r0\n"
+ " lsl r1, r1, #0x3\n"
+ " add r1, r1, r2\n"
+ " ldrh r0, [r1, #0x10]\n"
+ " sub r0, r0, #0x1\n"
+ " strh r0, [r1, #0x10]\n"
+ " bl CloseMenu\n"
+ " mov r0, #0x1\n"
+ " pop {r1}\n"
+ " bx r1\n"
+ "._2:\n"
+ " .align 2, 0\n"
+ "._1:\n"
+ " .word gTasks\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_80C2B30()
+{
+ asm(
+ " push {lr}\n"
+ " mov r0, #0x1\n"
+ " bl sub_80B47D8\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " ldr r2, ._3 @ gTasks\n"
+ " lsl r1, r0, #0x2\n"
+ " add r1, r1, r0\n"
+ " lsl r1, r1, #0x3\n"
+ " add r1, r1, r2\n"
+ " ldrh r0, [r1, #0x10]\n"
+ " sub r0, r0, #0x1\n"
+ " strh r0, [r1, #0x10]\n"
+ " bl CloseMenu\n"
+ " mov r0, #0x1\n"
+ " pop {r1}\n"
+ " bx r1\n"
+ "._4:\n"
+ " .align 2, 0\n"
+ "._3:\n"
+ " .word gTasks\n"
+ "\n"
+ );
+}
+#endif
+
// unused
// this could be static, but making it so causes a compile-time warning.
void ClearEnigmaBerries(void)
@@ -1022,6 +1082,180 @@ void SetEnigmaBerry(u8 *src)
gSaveBlock1.enigmaBerry.berry.description2 = gSaveBlock1.enigmaBerry.description2;
}
+#if DEBUG
+__attribute__((naked))
+void debug_sub_80C2BD0()
+{
+ asm(
+ " push {r4, r5, r6, r7, lr}\n"
+ " ldr r3, ._11 @ gSaveBlock1\n"
+ " ldr r1, ._11 + 4 @ 0x316c\n"
+ " add r4, r3, r1\n"
+ " ldr r6, [r4]\n"
+ " add r1, r1, #0x4\n"
+ " add r2, r3, r1\n"
+ " ldr r7, [r2]\n"
+ " mov r1, #0x0\n"
+ " str r1, [r4]\n"
+ " str r1, [r2]\n"
+ " add r4, r0, #0\n"
+ " mov r2, #0x0\n"
+ " ldr r5, ._11 + 8 @ 0x52b\n"
+ "._10:\n"
+ " add r0, r4, r1\n"
+ " ldrb r0, [r0]\n"
+ " add r2, r2, r0\n"
+ " add r1, r1, #0x1\n"
+ " cmp r1, r5\n"
+ " bls ._10 @cond_branch\n"
+ " ldr r1, ._11 + 4 @ 0x316c\n"
+ " add r0, r3, r1\n"
+ " str r6, [r0]\n"
+ " add r1, r1, #0x4\n"
+ " add r0, r3, r1\n"
+ " str r7, [r0]\n"
+ " add r0, r2, #0\n"
+ " pop {r4, r5, r6, r7}\n"
+ " pop {r1}\n"
+ " bx r1\n"
+ "._12:\n"
+ " .align 2, 0\n"
+ "._11:\n"
+ " .word gSaveBlock1\n"
+ " .word 0x316c\n"
+ " .word 0x52b\n"
+ "\n"
+ );
+}
+#endif
+
+#if DEBUG
+__attribute__((naked))
+u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
+{
+ asm(
+ " push {r4, r5, r6, r7, lr}\n"
+ " mov r7, r9\n"
+ " mov r6, r8\n"
+ " push {r6, r7}\n"
+ " add r3, r0, #0\n"
+ " lsl r1, r1, #0x18\n"
+ " lsr r1, r1, #0x18\n"
+ " mov r9, r1\n"
+ " lsl r2, r2, #0x18\n"
+ " lsr r2, r2, #0x18\n"
+ " mov r8, r2\n"
+ " ldr r4, ._16 @ gSaveBlock1\n"
+ " ldr r1, ._16 + 4 @ 0x3160\n"
+ " add r0, r4, r1\n"
+ " add r2, r0, #0\n"
+ " ldr r1, ._16 + 8 @ gBerries\n"
+ " ldmia r1!, {r5, r6, r7}\n"
+ " stmia r2!, {r5, r6, r7}\n"
+ " ldmia r1!, {r5, r6, r7}\n"
+ " stmia r2!, {r5, r6, r7}\n"
+ " ldr r1, [r1]\n"
+ " str r1, [r2]\n"
+ " add r1, r3, #0\n"
+ " bl StringCopy\n"
+ " ldr r0, ._16 + 12 @ 0x361c\n"
+ " add r6, r4, r0\n"
+ " ldr r1, ._16 + 16 @ gUnknown_Debug_083F7F84\n"
+ " add r0, r6, #0\n"
+ " bl StringCopy\n"
+ " ldr r1, ._16 + 20 @ 0x3649\n"
+ " add r5, r4, r1\n"
+ " ldr r1, ._16 + 24 @ gUnknown_Debug_083F7F90\n"
+ " add r0, r5, #0\n"
+ " bl StringCopy\n"
+ " ldr r2, ._16 + 28 @ 0x316c\n"
+ " add r0, r4, r2\n"
+ " str r6, [r0]\n"
+ " ldr r6, ._16 + 32 @ 0x3170\n"
+ " add r0, r4, r6\n"
+ " str r5, [r0]\n"
+ " mov r2, #0x0\n"
+ " ldr r6, ._16 + 36 @ 0x47f\n"
+ " ldr r7, ._16 + 40 @ 0x317c\n"
+ " add r5, r4, r7\n"
+ " ldr r3, ._16 + 44 @ gSpriteImage_UnusedCherry\n"
+ "._13:\n"
+ " add r0, r2, r5\n"
+ " add r1, r2, r3\n"
+ " ldrb r1, [r1]\n"
+ " strb r1, [r0]\n"
+ " add r2, r2, #0x1\n"
+ " cmp r2, r6\n"
+ " ble ._13 @cond_branch\n"
+ " ldr r0, ._16 @ gSaveBlock1\n"
+ " ldr r3, ._16 + 48 @ gSpritePalette_UnusedCherry\n"
+ " ldr r2, ._16 + 52 @ 0x35fc\n"
+ " add r1, r0, r2\n"
+ " mov r2, #0xf\n"
+ "._14:\n"
+ " ldrh r0, [r3]\n"
+ " strh r0, [r1]\n"
+ " add r3, r3, #0x2\n"
+ " add r1, r1, #0x2\n"
+ " sub r2, r2, #0x1\n"
+ " cmp r2, #0\n"
+ " bge ._14 @cond_branch\n"
+ " mov r2, #0x0\n"
+ " ldr r5, ._16 + 56 @ gSaveBlock1\n"
+ " ldr r3, ._16 + 60 @ gUnknown_Debug_839B6CE\n"
+ "._15:\n"
+ " add r0, r2, r5\n"
+ " add r1, r2, r3\n"
+ " ldrb r1, [r1]\n"
+ " strb r1, [r0]\n"
+ " add r2, r2, #0x1\n"
+ " cmp r2, #0x11\n"
+ " ble ._15 @cond_branch\n"
+ " ldr r5, ._16 + 64 @ 0x3688\n"
+ " add r0, r4, r5\n"
+ " mov r6, r9\n"
+ " strb r6, [r0]\n"
+ " ldr r7, ._16 + 68 @ 0x3689\n"
+ " add r0, r4, r7\n"
+ " mov r1, r8\n"
+ " strb r1, [r0]\n"
+ " ldr r2, ._16 + 4 @ 0x3160\n"
+ " add r0, r4, r2\n"
+ " bl debug_sub_80C2BD0\n"
+ " add r5, r5, #0x4\n"
+ " add r1, r4, r5\n"
+ " str r0, [r1]\n"
+ " pop {r3, r4}\n"
+ " mov r8, r3\n"
+ " mov r9, r4\n"
+ " pop {r4, r5, r6, r7}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "._17:\n"
+ " .align 2, 0\n"
+ "._16:\n"
+ " .word gSaveBlock1\n"
+ " .word 0x3160\n"
+ " .word gBerries\n"
+ " .word 0x361c\n"
+ " .word gUnknown_Debug_083F7F84\n"
+ " .word 0x3649\n"
+ " .word gUnknown_Debug_083F7F90\n"
+ " .word 0x316c\n"
+ " .word 0x3170\n"
+ " .word 0x47f\n"
+ " .word 0x317c\n"
+ " .word gSpriteImage_UnusedCherry\n"
+ " .word gSpritePalette_UnusedCherry\n"
+ " .word 0x35fc\n"
+ " .word gSaveBlock1+0x3676\n"
+ " .word gUnknown_Debug_839B6CE\n"
+ " .word 0x3688\n"
+ " .word 0x3689\n"
+ "\n"
+ );
+}
+#else
static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
{
const u8 *description1;
@@ -1051,9 +1285,110 @@ static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
return checksum;
}
+#endif
+
+#if DEBUG
+__attribute__((naked))
+void debug_sub_80C2D24()
+{
+ asm(
+ " push {r4, r5, r6, r7, lr}\n"
+ " mov r7, r8\n"
+ " push {r7}\n"
+ " ldr r6, [sp, #0x18]\n"
+ " ldr r4, [sp, #0x1c]\n"
+ " mov r8, r4\n"
+ " ldr r5, ._18 @ gSaveBlock1\n"
+ " ldr r7, ._18 + 4 @ 0x3175\n"
+ " add r4, r5, r7\n"
+ " strb r0, [r4]\n"
+ " ldr r4, ._18 + 8 @ 0x3176\n"
+ " add r0, r5, r4\n"
+ " strb r1, [r0]\n"
+ " add r7, r7, #0x2\n"
+ " add r0, r5, r7\n"
+ " strb r2, [r0]\n"
+ " ldr r1, ._18 + 12 @ 0x3178\n"
+ " add r0, r5, r1\n"
+ " strb r3, [r0]\n"
+ " add r4, r4, #0x3\n"
+ " add r0, r5, r4\n"
+ " strb r6, [r0]\n"
+ " add r7, r7, #0x3\n"
+ " add r0, r5, r7\n"
+ " mov r1, r8\n"
+ " strb r1, [r0]\n"
+ " sub r4, r4, #0x19\n"
+ " add r0, r5, r4\n"
+ " bl debug_sub_80C2BD0\n"
+ " ldr r7, ._18 + 16 @ 0x368c\n"
+ " add r5, r5, r7\n"
+ " str r0, [r5]\n"
+ " pop {r3}\n"
+ " mov r8, r3\n"
+ " pop {r4, r5, r6, r7}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "._19:\n"
+ " .align 2, 0\n"
+ "._18:\n"
+ " .word gSaveBlock1\n"
+ " .word 0x3175\n"
+ " .word 0x3176\n"
+ " .word 0x3178\n"
+ " .word 0x368c\n"
+ "\n"
+ );
+}
+#endif
// due to e-reader scans being particularly volatile to failure, it is a requirement to check for
// their integrity here due to scans possibly failing to produce the correct result.
+#if DEBUG
+__attribute__((naked))
+bool32 IsEnigmaBerryValid()
+{
+ asm(
+ " push {r4, lr}\n"
+ " ldr r4, ._24 @ gSaveBlock1\n"
+ " ldr r1, ._24 + 4 @ 0x3174\n"
+ " add r0, r4, r1\n"
+ " ldrb r0, [r0]\n"
+ " cmp r0, #0\n"
+ " beq ._22 @cond_branch\n"
+ " ldr r2, ._24 + 8 @ 0x316a\n"
+ " add r0, r4, r2\n"
+ " ldrb r0, [r0]\n"
+ " cmp r0, #0\n"
+ " beq ._22 @cond_branch\n"
+ " ldr r1, ._24 + 12 @ 0x3160\n"
+ " add r0, r4, r1\n"
+ " bl debug_sub_80C2BD0\n"
+ " ldr r2, ._24 + 16 @ 0x368c\n"
+ " add r1, r4, r2\n"
+ " ldr r1, [r1]\n"
+ " cmp r0, r1\n"
+ " bne ._22 @cond_branch\n"
+ " mov r0, #0x1\n"
+ " b ._23\n"
+ "._25:\n"
+ " .align 2, 0\n"
+ "._24:\n"
+ " .word gSaveBlock1\n"
+ " .word 0x3174\n"
+ " .word 0x316a\n"
+ " .word 0x3160\n"
+ " .word 0x368c\n"
+ "._22:\n"
+ " mov r0, #0x0\n"
+ "._23:\n"
+ " pop {r4}\n"
+ " pop {r1}\n"
+ " bx r1\n"
+ "\n"
+ );
+}
+#else
bool32 IsEnigmaBerryValid(void)
{
if (gSaveBlock1.enigmaBerry.berry.stageDuration == 0)
@@ -1064,6 +1399,7 @@ bool32 IsEnigmaBerryValid(void)
return FALSE;
return TRUE;
}
+#endif
const struct Berry *GetBerryInfo(u8 berry)
{
@@ -1417,6 +1753,177 @@ bool8 PlayerHasBerries(void)
return IsBagPocketNonEmpty(BAG_BERRIES);
}
+#if DEBUG
+void debug_sub_80C33FC(u8 *buffer, s32 value, u8 n)
+{
+ StringAppend(gStringVar4, buffer);
+ ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEADING_ZEROS, n);
+ StringAppend(gStringVar4, gStringVar1);
+}
+
+extern const u8 gUnknown_Debug_083F7F9D[];
+extern const u8 gUnknown_Debug_083F7FA2[];
+extern const u8 gUnknown_Debug_083F7FA9[];
+extern const u8 gUnknown_Debug_083F7FB0[];
+extern const u8 gUnknown_Debug_083F7FB7[];
+extern const u8 gUnknown_Debug_083F7FBE[];
+extern const u8 gUnknown_Debug_083F7FC5[];
+extern const u8 gUnknown_Debug_083F7FCC[];
+extern const u8 gUnknown_Debug_083F7FD3[];
+extern const u8 gUnknown_Debug_083F7FD3[];
+extern const u8 gUnknown_Debug_083F7FD3[];
+
+#ifdef NONMATCHING
+u8* DebugOpenBerryInfo(void)
+{
+ s32 i;
+ u8 berryTreeId;
+ struct BerryTree *berryTree;
+
+ if (GetFieldObjectScriptPointerPlayerFacing() != &S_BerryTree)
+ return NULL;
+
+ berryTreeId = FieldObjectGetBerryTreeId(gSelectedMapObject);
+ berryTree = GetBerryTreeInfo(berryTreeId);
+
+ for (i = 0; i < 500; i++)
+ gStringVar4[i] |= 0xFF;
+
+ debug_sub_80C33FC(gUnknown_Debug_083F7F9D, berryTreeId, 3);
+ debug_sub_80C33FC(gUnknown_Debug_083F7FA2, berryTree->berry, 2);
+ debug_sub_80C33FC(gUnknown_Debug_083F7FA9, berryTree->stage, 2);
+ debug_sub_80C33FC(gUnknown_Debug_083F7FB0, berryTree->secondsUntilNextStage, 5);
+ debug_sub_80C33FC(gUnknown_Debug_083F7FB7, berryTree->berryYield, 2);
+ debug_sub_80C33FC(gUnknown_Debug_083F7FBE, berryTree->regrowthCount, 3);
+ debug_sub_80C33FC(gUnknown_Debug_083F7FC5, berryTree->growthSparkle, 1);
+ debug_sub_80C33FC(gUnknown_Debug_083F7FCC, berryTree->watered1, 1);
+ debug_sub_80C33FC(gUnknown_Debug_083F7FD3, berryTree->watered2, 1);
+ debug_sub_80C33FC(gUnknown_Debug_083F7FD3, berryTree->watered3, 1);
+ debug_sub_80C33FC(gUnknown_Debug_083F7FD3, berryTree->watered4, 1);
+
+ return gStringVar4;
+}
+#else
+__attribute__((naked))
+void DebugOpenBerryInfo()
+{
+ asm(
+ " push {r4, r5, r6, r7, lr}\n"
+ " bl GetFieldObjectScriptPointerPlayerFacing\n"
+ " ldr r1, ._138 @ S_BerryTree\n"
+ " cmp r0, r1\n"
+ " beq ._136 @cond_branch\n"
+ " mov r0, #0x0\n"
+ " b ._137\n"
+ "._139:\n"
+ " .align 2, 0\n"
+ "._138:\n"
+ " .word S_BerryTree\n"
+ "._136:\n"
+ " ldr r0, ._141 @ gSelectedMapObject\n"
+ " ldrb r0, [r0]\n"
+ " bl FieldObjectGetBerryTreeId\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r6, r0, #0x18\n"
+ " add r0, r6, #0\n"
+ " bl GetBerryTreeInfo\n"
+ " add r5, r0, #0\n"
+ " mov r2, #0x0\n"
+ " ldr r7, ._141 + 4 @ 0x1f3\n"
+ " ldr r4, ._141 + 8 @ gStringVar4\n"
+ " mov r3, #0xff\n"
+ "._140:\n"
+ " add r1, r2, r4\n"
+ " ldrb r0, [r1]\n"
+ " orr r0, r0, r3\n"
+ " strb r0, [r1]\n"
+ " add r2, r2, #0x1\n"
+ " cmp r2, r7\n"
+ " ble ._140 @cond_branch\n"
+ " ldr r0, ._141 + 12 @ gUnknown_Debug_083F7F9D\n"
+ " add r1, r6, #0\n"
+ " mov r2, #0x3\n"
+ " bl debug_sub_80C33FC\n"
+ " ldr r0, ._141 + 16 @ gUnknown_Debug_083F7FA2\n"
+ " ldrb r1, [r5]\n"
+ " mov r2, #0x2\n"
+ " bl debug_sub_80C33FC\n"
+ " ldr r0, ._141 + 20 @ gUnknown_Debug_083F7FA9\n"
+ " ldrb r1, [r5, #0x1]\n"
+ " lsl r1, r1, #0x19\n"
+ " lsr r1, r1, #0x19\n"
+ " mov r2, #0x2\n"
+ " bl debug_sub_80C33FC\n"
+ " ldr r0, ._141 + 24 @ gUnknown_Debug_083F7FB0\n"
+ " ldrh r1, [r5, #0x2]\n"
+ " mov r2, #0x5\n"
+ " bl debug_sub_80C33FC\n"
+ " ldr r0, ._141 + 28 @ gUnknown_Debug_083F7FB7\n"
+ " ldrb r1, [r5, #0x4]\n"
+ " mov r2, #0x2\n"
+ " bl debug_sub_80C33FC\n"
+ " ldr r0, ._141 + 32 @ gUnknown_Debug_083F7FBE\n"
+ " ldrb r1, [r5, #0x5]\n"
+ " lsl r1, r1, #0x1c\n"
+ " lsr r1, r1, #0x1c\n"
+ " mov r2, #0x3\n"
+ " bl debug_sub_80C33FC\n"
+ " ldr r0, ._141 + 36 @ gUnknown_Debug_083F7FC5\n"
+ " ldrb r1, [r5, #0x1]\n"
+ " lsr r1, r1, #0x7\n"
+ " mov r2, #0x1\n"
+ " bl debug_sub_80C33FC\n"
+ " ldr r0, ._141 + 40 @ gUnknown_Debug_083F7FCC\n"
+ " ldrb r1, [r5, #0x5]\n"
+ " lsl r1, r1, #0x1b\n"
+ " lsr r1, r1, #0x1f\n"
+ " mov r2, #0x1\n"
+ " bl debug_sub_80C33FC\n"
+ " ldr r4, ._141 + 44 @ gUnknown_Debug_083F7FD3\n"
+ " ldrb r1, [r5, #0x5]\n"
+ " lsl r1, r1, #0x1a\n"
+ " lsr r1, r1, #0x1f\n"
+ " add r0, r4, #0\n"
+ " mov r2, #0x1\n"
+ " bl debug_sub_80C33FC\n"
+ " ldrb r1, [r5, #0x5]\n"
+ " lsl r1, r1, #0x19\n"
+ " lsr r1, r1, #0x1f\n"
+ " add r0, r4, #0\n"
+ " mov r2, #0x1\n"
+ " bl debug_sub_80C33FC\n"
+ " ldrb r1, [r5, #0x5]\n"
+ " lsr r1, r1, #0x7\n"
+ " add r0, r4, #0\n"
+ " mov r2, #0x1\n"
+ " bl debug_sub_80C33FC\n"
+ " ldr r0, ._141 + 8 @ gStringVar4\n"
+ "._137:\n"
+ " pop {r4, r5, r6, r7}\n"
+ " pop {r1}\n"
+ " bx r1\n"
+ "._142:\n"
+ " .align 2, 0\n"
+ "._141:\n"
+ " .word gSelectedMapObject\n"
+ " .word 0x1f3\n"
+ " .word gStringVar4\n"
+ " .word gUnknown_Debug_083F7F9D\n"
+ " .word gUnknown_Debug_083F7FA2\n"
+ " .word gUnknown_Debug_083F7FA9\n"
+ " .word gUnknown_Debug_083F7FB0\n"
+ " .word gUnknown_Debug_083F7FB7\n"
+ " .word gUnknown_Debug_083F7FBE\n"
+ " .word gUnknown_Debug_083F7FC5\n"
+ " .word gUnknown_Debug_083F7FCC\n"
+ " .word gUnknown_Debug_083F7FD3\n"
+ "\n"
+ );
+}
+#endif
+
+#endif
+
// whenever the player is not within view of the berry tree during its sparkle state, the
// sparkle state will be reset.
void ResetBerryTreeSparkleFlags(void)
@@ -1445,3 +1952,17 @@ void ResetBerryTreeSparkleFlags(void)
}
}
}
+
+#if DEBUG
+static const u8 gUnknown_Debug_083F7F84[] = _("そとから きた きのみ");
+static const u8 gUnknown_Debug_083F7F90[] = _("ただいま かいはつちゅう");
+static const u8 gUnknown_Debug_083F7F9D[] = _("POS:");
+static const u8 gUnknown_Debug_083F7FA2[] = _("\nTYPE:");
+static const u8 gUnknown_Debug_083F7FA9[] = _("\nGROW:");
+static const u8 gUnknown_Debug_083F7FB0[] = _("\nTIME:");
+static const u8 gUnknown_Debug_083F7FB7[] = _("\nFCNT:");
+static const u8 gUnknown_Debug_083F7FBE[] = _("\nSCNT:");
+static const u8 gUnknown_Debug_083F7FC5[] = _("\nHOOK:");
+static const u8 gUnknown_Debug_083F7FCC[] = _("\nWBIT:");
+static const u8 gUnknown_Debug_083F7FD3[] = _("");
+#endif
diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c
index 9e518c06a..ea4a3df05 100644
--- a/src/field/berry_tag_screen.c
+++ b/src/field/berry_tag_screen.c
@@ -42,7 +42,7 @@ extern u8 gBerryCheck_Pal[];
extern u8 gUnknown_08E788E4[];
extern u8 gUnknown_08E78A84[];
-static const u8 *const gUnknown_0841192C[] =
+const u8 *const gUnknown_0841192C[] =
{
ContestStatsText_VerySoft,
ContestStatsText_Soft,
diff --git a/src/field/bike.c b/src/field/bike.c
index 2d763cb14..a81aa395b 100644
--- a/src/field/bike.c
+++ b/src/field/bike.c
@@ -14,6 +14,11 @@ extern bool8 gBikeCyclingChallenge;
extern u8 gBikeCollisions;
extern u8 gUnusedBikeCameraAheadPanback;
+#if DEBUG
+extern u8 gUnknown_020297ED;
+u8 debug_sub_805F2B0(u8);
+#endif
+
static void MovePlayerOnMachBike(u8, u16, u16);
static u8 GetMachBikeTransition(u8 *);
static void MachBikeTransition_FaceDirection(u8);
@@ -134,6 +139,13 @@ void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys)
static void MovePlayerOnMachBike(u8 direction, u16 newKeys, u16 heldKeys)
{
+#if DEBUG
+ if (gUnknown_020297ED && debug_sub_805F2B0(direction))
+ {
+ Bike_SetBikeStill();
+ return;
+ }
+#endif
sMachBikeTransitions[GetMachBikeTransition(&direction)](direction);
}
@@ -271,6 +283,14 @@ static void MachBikeTransition_TrySlowDown(u8 var)
// the acro bike requires the input handler to be executed before the transition can.
static void MovePlayerOnAcroBike(u8 newDirection, u16 newKeys, u16 heldKeys)
{
+#if DEBUG
+ if (gUnknown_020297ED && debug_sub_805F2B0(newDirection))
+ {
+ Bike_SetBikeStill();
+ return;
+ }
+#endif
+
sAcroBikeTransitions[CheckMovementInputAcroBike(&newDirection, newKeys, heldKeys)](newDirection);
}
diff --git a/src/field/choose_party.c b/src/field/choose_party.c
index 73470d3d2..7529c4271 100644
--- a/src/field/choose_party.c
+++ b/src/field/choose_party.c
@@ -528,6 +528,107 @@ static void BattleTowerEntryMenuCallback_Exit(u8 taskId)
sub_81227FC(taskId);
}
+#if DEBUG
+__attribute__((naked))
+void debug_sub_81381B4()
+{
+ asm(
+ " push {r4, r5, r6, r7, lr}\n"
+ " mov r7, r9\n"
+ " mov r6, r8\n"
+ " push {r6, r7}\n"
+ " ldr r4, ._189 @ gUnknown_02023A00\n"
+ " add r0, r4, #0\n"
+ " mov r1, #0x0\n"
+ " mov r2, #0x60\n"
+ " bl memset\n"
+ " mov r7, #0x0\n"
+ " mov r8, r4\n"
+ " mov r0, #0x4\n"
+ " add r0, r0, r8\n"
+ " mov r9, r0\n"
+ "._188:\n"
+ " mov r0, #0x64\n"
+ " add r1, r7, #0\n"
+ " mul r1, r1, r0\n"
+ " ldr r0, ._189 + 4 @ gPlayerParty\n"
+ " add r5, r1, r0\n"
+ " add r0, r5, #0\n"
+ " mov r1, #0x41\n"
+ " bl GetMonData\n"
+ " lsl r4, r7, #0x5\n"
+ " mov r1, r8\n"
+ " add r6, r4, r1\n"
+ " strh r0, [r6]\n"
+ " lsl r0, r0, #0x10\n"
+ " cmp r0, #0\n"
+ " beq ._187 @cond_branch\n"
+ " add r0, r5, #0\n"
+ " mov r1, #0x38\n"
+ " bl GetMonData\n"
+ " strb r0, [r6, #0xf]\n"
+ " add r0, r5, #0\n"
+ " mov r1, #0x39\n"
+ " bl GetMonData\n"
+ " strh r0, [r6, #0x10]\n"
+ " add r0, r5, #0\n"
+ " mov r1, #0x3a\n"
+ " bl GetMonData\n"
+ " strh r0, [r6, #0x12]\n"
+ " add r0, r5, #0\n"
+ " mov r1, #0x37\n"
+ " bl GetMonData\n"
+ " mov r1, r8\n"
+ " add r1, r1, #0x14\n"
+ " add r1, r4, r1\n"
+ " str r0, [r1]\n"
+ " add r0, r5, #0\n"
+ " mov r1, #0xc\n"
+ " bl GetMonData\n"
+ " strh r0, [r6, #0x2]\n"
+ " add r0, r5, #0\n"
+ " mov r1, #0x0\n"
+ " bl GetMonData\n"
+ " mov r1, r8\n"
+ " add r1, r1, #0x18\n"
+ " add r1, r4, r1\n"
+ " str r0, [r1]\n"
+ " add r0, r5, #0\n"
+ " bl GetMonGender\n"
+ " strb r0, [r6, #0x1c]\n"
+ " add r4, r4, r9\n"
+ " add r0, r5, #0\n"
+ " mov r1, #0x2\n"
+ " add r2, r4, #0\n"
+ " bl GetMonData\n"
+ " add r0, r4, #0\n"
+ " bl Text_StripExtCtrlCodes\n"
+ " add r0, r5, #0\n"
+ " mov r1, #0x3\n"
+ " bl GetMonData\n"
+ " strb r0, [r6, #0x1d]\n"
+ "._187:\n"
+ " add r0, r7, #1\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r7, r0, #0x18\n"
+ " cmp r7, #0x2\n"
+ " bls ._188 @cond_branch\n"
+ " pop {r3, r4}\n"
+ " mov r8, r3\n"
+ " mov r9, r4\n"
+ " pop {r4, r5, r6, r7}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "._190:\n"
+ " .align 2, 0\n"
+ "._189:\n"
+ " .word gUnknown_02023A00\n"
+ " .word gPlayerParty+0x12c\n"
+ "\n"
+ );
+}
+#endif
+
bool8 SetupLinkMultiBattlePartyMenu(void)
{
switch (ewram1B000_alt.setupState)
diff --git a/src/field/decoration_inventory.c b/src/field/decoration_inventory.c
index dd0e972aa..8f7f5eb92 100644
--- a/src/field/decoration_inventory.c
+++ b/src/field/decoration_inventory.c
@@ -164,3 +164,14 @@ u8 sub_81341D4(void)
}
return count;
}
+
+
+#if DEBUG
+void debug_sub_814A3A8(void)
+{
+ u8 decor;
+
+ for (decor = 0; decor < DECOR_COUNT; decor++)
+ IsThereStorageSpaceForDecoration(decor);
+}
+#endif
diff --git a/src/field/evobjmv.c b/src/field/evobjmv.c
index 9c282e266..6b38df2ad 100644
--- a/src/field/evobjmv.c
+++ b/src/field/evobjmv.c
@@ -1905,6 +1905,9 @@ static u8 gUnknown_030005A4;
static u16 gUnknown_030005A6;
struct MapObject gMapObjects[16];
+#if DEBUG
+u8 gUnknown_Debug_03004BC0[4]; // unknown type
+#endif
void npc_clear_ids_and_state(struct MapObject *mapObj)
{
@@ -1915,6 +1918,40 @@ void npc_clear_ids_and_state(struct MapObject *mapObj)
mapObj->mapobj_unk_1C = 0xFF;
}
+#if DEBUG
+__attribute__((naked))
+void npcs_clear_ids_and_state()
+{
+ asm(
+ " push {r4, r5, lr}\n"
+ " mov r4, #0x0\n"
+ " ldr r5, ._2 @ gMapObjects\n"
+ "._1:\n"
+ " lsl r0, r4, #0x3\n"
+ " add r0, r0, r4\n"
+ " lsl r0, r0, #0x2\n"
+ " add r0, r0, r5\n"
+ " bl npc_clear_ids_and_state\n"
+ " add r0, r4, #1\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r4, r0, #0x18\n"
+ " cmp r4, #0xf\n"
+ " bls ._1 @cond_branch\n"
+ " ldr r1, ._2 + 4 @ gUnknown_Debug_03004BC0\n"
+ " mov r0, #0x0\n"
+ " strb r0, [r1]\n"
+ " pop {r4, r5}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "._3:\n"
+ " .align 2, 0\n"
+ "._2:\n"
+ " .word gMapObjects\n"
+ " .word gUnknown_Debug_03004BC0\n"
+ "\n"
+ );
+}
+#else
void npcs_clear_ids_and_state(void)
{
u8 i;
@@ -1922,6 +1959,7 @@ void npcs_clear_ids_and_state(void)
for (i = 0; i < 16; i++)
npc_clear_ids_and_state(&gMapObjects[i]);
}
+#endif
void sub_805AA98(void)
{
@@ -2015,6 +2053,176 @@ u8 GetFieldObjectIdByLocalId(u8 localId)
return 16;
}
+#if DEBUG
+__attribute__((naked))
+u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c)
+{
+ asm(
+ " push {r4, r5, r6, r7, lr}\n"
+ " mov r7, r9\n"
+ " mov r6, r8\n"
+ " push {r6, r7}\n"
+ " add sp, sp, #0xfffffffc\n"
+ " add r5, r0, #0\n"
+ " lsl r1, r1, #0x18\n"
+ " lsr r6, r1, #0x18\n"
+ " lsl r2, r2, #0x18\n"
+ " lsr r7, r2, #0x18\n"
+ " ldrb r0, [r5]\n"
+ " add r1, r6, #0\n"
+ " add r2, r7, #0\n"
+ " mov r3, sp\n"
+ " bl GetAvailableFieldObjectSlot\n"
+ " lsl r0, r0, #0x18\n"
+ " cmp r0, #0\n"
+ " beq ._35 @cond_branch\n"
+ " mov r0, #0x10\n"
+ " b ._36\n"
+ "._35:\n"
+ " mov r0, sp\n"
+ " ldrb r1, [r0]\n"
+ " lsl r0, r1, #0x3\n"
+ " add r0, r0, r1\n"
+ " lsl r0, r0, #0x2\n"
+ " ldr r1, ._40 @ gMapObjects\n"
+ " add r4, r0, r1\n"
+ " add r0, r4, #0\n"
+ " bl npc_clear_ids_and_state\n"
+ " ldrh r3, [r5, #0x4]\n"
+ " add r3, r3, #0x7\n"
+ " lsl r3, r3, #0x10\n"
+ " lsr r3, r3, #0x10\n"
+ " ldrh r2, [r5, #0x6]\n"
+ " add r2, r2, #0x7\n"
+ " lsl r2, r2, #0x10\n"
+ " lsr r2, r2, #0x10\n"
+ " ldrb r0, [r4]\n"
+ " mov r1, #0x1\n"
+ " orr r0, r0, r1\n"
+ " mov r1, #0x4\n"
+ " orr r0, r0, r1\n"
+ " strb r0, [r4]\n"
+ " ldrb r0, [r5, #0x1]\n"
+ " strb r0, [r4, #0x5]\n"
+ " ldrb r0, [r5, #0x9]\n"
+ " strb r0, [r4, #0x6]\n"
+ " ldrb r0, [r5]\n"
+ " strb r0, [r4, #0x8]\n"
+ " strb r6, [r4, #0x9]\n"
+ " strb r7, [r4, #0xa]\n"
+ " strh r3, [r4, #0xc]\n"
+ " strh r2, [r4, #0xe]\n"
+ " strh r3, [r4, #0x10]\n"
+ " strh r2, [r4, #0x12]\n"
+ " strh r3, [r4, #0x14]\n"
+ " strh r2, [r4, #0x16]\n"
+ " ldrb r0, [r5, #0x8]\n"
+ " mov r7, #0xf\n"
+ " add r1, r7, #0\n"
+ " and r1, r1, r0\n"
+ " ldrb r2, [r4, #0xb]\n"
+ " mov r0, #0x10\n"
+ " neg r0, r0\n"
+ " mov r8, r0\n"
+ " and r0, r0, r2\n"
+ " orr r0, r0, r1\n"
+ " strb r0, [r4, #0xb]\n"
+ " ldrb r1, [r5, #0x8]\n"
+ " lsl r1, r1, #0x4\n"
+ " and r0, r0, r7\n"
+ " orr r0, r0, r1\n"
+ " strb r0, [r4, #0xb]\n"
+ " ldrb r1, [r5, #0xa]\n"
+ " lsl r1, r1, #0x1c\n"
+ " mov r0, #0xf\n"
+ " mov r9, r0\n"
+ " lsr r1, r1, #0x1c\n"
+ " ldrb r2, [r4, #0x19]\n"
+ " mov r0, r8\n"
+ " and r0, r0, r2\n"
+ " orr r0, r0, r1\n"
+ " strb r0, [r4, #0x19]\n"
+ " ldrb r1, [r5, #0xa]\n"
+ " lsr r1, r1, #0x4\n"
+ " lsl r1, r1, #0x4\n"
+ " and r0, r0, r7\n"
+ " orr r0, r0, r1\n"
+ " strb r0, [r4, #0x19]\n"
+ " ldrh r0, [r5, #0xc]\n"
+ " strb r0, [r4, #0x7]\n"
+ " ldrh r0, [r5, #0xe]\n"
+ " strb r0, [r4, #0x1d]\n"
+ " ldr r1, ._40 + 4 @ gUnknown_0836DC09\n"
+ " ldrb r0, [r5, #0x9]\n"
+ " add r0, r0, r1\n"
+ " ldrb r1, [r0]\n"
+ " add r0, r4, #0\n"
+ " add r0, r0, #0x20\n"
+ " strb r1, [r0]\n"
+ " ldrb r1, [r0]\n"
+ " add r0, r4, #0\n"
+ " bl FieldObjectSetDirection\n"
+ " add r0, r4, #0\n"
+ " bl FieldObjectHandleDynamicGraphicsId\n"
+ " ldr r1, ._40 + 8 @ gUnknown_0836DBBC\n"
+ " ldrb r0, [r4, #0x6]\n"
+ " add r0, r0, r1\n"
+ " ldrb r0, [r0]\n"
+ " cmp r0, #0\n"
+ " beq ._39 @cond_branch\n"
+ " ldrb r2, [r4, #0x19]\n"
+ " add r0, r7, #0\n"
+ " and r0, r0, r2\n"
+ " cmp r0, #0\n"
+ " bne ._38 @cond_branch\n"
+ " lsl r0, r2, #0x1c\n"
+ " lsr r0, r0, #0x1c\n"
+ " add r0, r0, #0x1\n"
+ " mov r1, r9\n"
+ " and r0, r0, r1\n"
+ " mov r1, r8\n"
+ " and r1, r1, r2\n"
+ " orr r1, r1, r0\n"
+ " strb r1, [r4, #0x19]\n"
+ "._38:\n"
+ " ldrb r2, [r4, #0x19]\n"
+ " mov r0, #0xf0\n"
+ " and r0, r0, r2\n"
+ " cmp r0, #0\n"
+ " bne ._39 @cond_branch\n"
+ " lsr r1, r2, #0x4\n"
+ " add r1, r1, #0x1\n"
+ " lsl r1, r1, #0x4\n"
+ " add r0, r7, #0\n"
+ " and r0, r0, r2\n"
+ " orr r0, r0, r1\n"
+ " strb r0, [r4, #0x19]\n"
+ "._39:\n"
+ " ldr r1, ._40 + 12 @ gUnknown_Debug_03004BC0\n"
+ " ldrb r0, [r1]\n"
+ " add r0, r0, #0x1\n"
+ " strb r0, [r1]\n"
+ " mov r0, sp\n"
+ " ldrb r0, [r0]\n"
+ "._36:\n"
+ " add sp, sp, #0x4\n"
+ " pop {r3, r4}\n"
+ " mov r8, r3\n"
+ " mov r9, r4\n"
+ " pop {r4, r5, r6, r7}\n"
+ " pop {r1}\n"
+ " bx r1\n"
+ "._41:\n"
+ " .align 2, 0\n"
+ "._40:\n"
+ " .word gMapObjects\n"
+ " .word gUnknown_0836DC09\n"
+ " .word gUnknown_0836DBBC\n"
+ " .word gUnknown_Debug_03004BC0\n"
+ "\n"
+ );
+}
+#else
#ifdef NONMATCHING
u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c)
{
@@ -2225,6 +2433,7 @@ _0805ADD8: .4byte gUnknown_0836DBBC\n\
.syntax divided\n");
}
#endif
+#endif
u8 sub_805ADDC(u8 localId)
{
@@ -2264,11 +2473,38 @@ u8 GetAvailableFieldObjectSlot(u16 a, u8 b, u8 c, u8 *d)
return 0;
}
+#if DEBUG
+__attribute__((naked))
+void RemoveFieldObject(struct MapObject *mapObject)
+{
+ asm(
+ " push {lr}\n"
+ " ldrb r2, [r0]\n"
+ " mov r1, #0x2\n"
+ " neg r1, r1\n"
+ " and r1, r1, r2\n"
+ " strb r1, [r0]\n"
+ " bl RemoveFieldObjectInternal\n"
+ " ldr r1, ._72 @ gUnknown_Debug_03004BC0\n"
+ " ldrb r0, [r1]\n"
+ " sub r0, r0, #0x1\n"
+ " strb r0, [r1]\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "._73:\n"
+ " .align 2, 0\n"
+ "._72:\n"
+ " .word gUnknown_Debug_03004BC0\n"
+ "\n"
+ );
+}
+#else
void RemoveFieldObject(struct MapObject *mapObject)
{
mapObject->active = FALSE;
RemoveFieldObjectInternal(mapObject);
}
+#endif
void RemoveFieldObjectByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
{
@@ -2301,6 +2537,226 @@ void npc_hide_all_but_player(void)
}
}
+#if DEBUG
+__attribute__((naked))
+u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, u8 c, u8 d, s16 e, s16 f)
+{
+ asm(
+ " push {r4, r5, r6, r7, lr}\n"
+ " mov r7, sl\n"
+ " mov r6, r9\n"
+ " mov r5, r8\n"
+ " push {r5, r6, r7}\n"
+ " add r7, r1, #0\n"
+ " add r1, r2, #0\n"
+ " add r2, r3, #0\n"
+ " ldr r3, [sp, #0x20]\n"
+ " ldr r4, [sp, #0x24]\n"
+ " lsl r1, r1, #0x18\n"
+ " lsr r1, r1, #0x18\n"
+ " lsl r2, r2, #0x18\n"
+ " lsr r2, r2, #0x18\n"
+ " lsl r3, r3, #0x10\n"
+ " lsr r3, r3, #0x10\n"
+ " mov r9, r3\n"
+ " lsl r4, r4, #0x10\n"
+ " lsr r4, r4, #0x10\n"
+ " mov sl, r4\n"
+ " bl InitFieldObjectStateFromTemplate\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " mov r8, r0\n"
+ " cmp r0, #0x10\n"
+ " bne ._83 @cond_branch\n"
+ " mov r0, #0x10\n"
+ " b ._92\n"
+ "._83:\n"
+ " mov r0, r8\n"
+ " lsl r4, r0, #0x3\n"
+ " add r0, r4, r0\n"
+ " lsl r0, r0, #0x2\n"
+ " ldr r1, ._87 @ gMapObjects\n"
+ " add r5, r0, r1\n"
+ " ldrb r0, [r5, #0x5]\n"
+ " bl GetFieldObjectGraphicsInfo\n"
+ " add r6, r0, #0\n"
+ " ldrb r1, [r6, #0xc]\n"
+ " mov r0, #0xf\n"
+ " and r0, r0, r1\n"
+ " cmp r0, #0\n"
+ " bne ._85 @cond_branch\n"
+ " ldrh r0, [r6, #0x2]\n"
+ " lsl r1, r1, #0x1c\n"
+ " lsr r1, r1, #0x1c\n"
+ " bl npc_load_two_palettes__no_record\n"
+ " b ._89\n"
+ "._88:\n"
+ " .align 2, 0\n"
+ "._87:\n"
+ " .word gMapObjects\n"
+ "._85:\n"
+ " cmp r0, #0xa\n"
+ " bne ._89 @cond_branch\n"
+ " ldrh r0, [r6, #0x2]\n"
+ " lsl r1, r1, #0x1c\n"
+ " lsr r1, r1, #0x1c\n"
+ " bl npc_load_two_palettes__and_record\n"
+ "._89:\n"
+ " ldrb r0, [r5, #0x6]\n"
+ " cmp r0, #0x4c\n"
+ " bne ._90 @cond_branch\n"
+ " ldrb r0, [r5, #0x1]\n"
+ " mov r1, #0x20\n"
+ " orr r0, r0, r1\n"
+ " strb r0, [r5, #0x1]\n"
+ "._90:\n"
+ " ldr r1, ._93 @ 0xffff\n"
+ " add r0, r1, #0\n"
+ " strh r0, [r7, #0x2]\n"
+ " add r0, r7, #0\n"
+ " mov r1, #0x0\n"
+ " mov r2, #0x0\n"
+ " mov r3, #0x0\n"
+ " bl CreateSprite\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r7, r0, #0x18\n"
+ " cmp r7, #0x40\n"
+ " bne ._91 @cond_branch\n"
+ " ldr r1, ._93 + 4 @ gUnknown_Debug_03004BC0\n"
+ " ldrb r0, [r1]\n"
+ " sub r0, r0, #0x1\n"
+ " strb r0, [r1]\n"
+ " ldr r0, ._93 + 8 @ gMapObjects\n"
+ " mov r2, r8\n"
+ " add r1, r4, r2\n"
+ " lsl r1, r1, #0x2\n"
+ " add r1, r1, r0\n"
+ " ldrb r2, [r1]\n"
+ " mov r0, #0x2\n"
+ " neg r0, r0\n"
+ " and r0, r0, r2\n"
+ " strb r0, [r1]\n"
+ " mov r0, #0x10\n"
+ " b ._92\n"
+ "._94:\n"
+ " .align 2, 0\n"
+ "._93:\n"
+ " .word 0xffff\n"
+ " .word gUnknown_Debug_03004BC0\n"
+ " .word gMapObjects\n"
+ "._91:\n"
+ " lsl r0, r7, #0x4\n"
+ " add r0, r0, r7\n"
+ " lsl r0, r0, #0x2\n"
+ " ldr r1, ._96 @ gSprites\n"
+ " add r4, r0, r1\n"
+ " mov r1, r9\n"
+ " lsl r0, r1, #0x10\n"
+ " asr r0, r0, #0x10\n"
+ " ldrh r2, [r5, #0x10]\n"
+ " add r0, r0, r2\n"
+ " lsl r0, r0, #0x10\n"
+ " asr r0, r0, #0x10\n"
+ " mov r2, sl\n"
+ " lsl r1, r2, #0x10\n"
+ " asr r1, r1, #0x10\n"
+ " ldrh r2, [r5, #0x12]\n"
+ " add r1, r1, r2\n"
+ " lsl r1, r1, #0x10\n"
+ " asr r1, r1, #0x10\n"
+ " add r2, r4, #0\n"
+ " add r2, r2, #0x20\n"
+ " add r3, r4, #0\n"
+ " add r3, r3, #0x22\n"
+ " bl sub_8060388\n"
+ " ldrh r0, [r6, #0x8]\n"
+ " lsl r0, r0, #0x10\n"
+ " asr r0, r0, #0x11\n"
+ " neg r0, r0\n"
+ " add r1, r4, #0\n"
+ " add r1, r1, #0x28\n"
+ " strb r0, [r1]\n"
+ " ldrh r0, [r6, #0xa]\n"
+ " lsl r0, r0, #0x10\n"
+ " asr r0, r0, #0x11\n"
+ " neg r0, r0\n"
+ " add r2, r4, #0\n"
+ " add r2, r2, #0x29\n"
+ " strb r0, [r2]\n"
+ " ldrh r0, [r4, #0x20]\n"
+ " add r0, r0, #0x8\n"
+ " strh r0, [r4, #0x20]\n"
+ " ldrh r1, [r4, #0x22]\n"
+ " add r1, r1, #0x10\n"
+ " mov r0, #0x0\n"
+ " ldsb r0, [r2, r0]\n"
+ " add r0, r0, r1\n"
+ " strh r0, [r4, #0x22]\n"
+ " ldrb r1, [r6, #0xc]\n"
+ " lsl r1, r1, #0x1c\n"
+ " lsr r1, r1, #0x18\n"
+ " ldrb r2, [r4, #0x5]\n"
+ " mov r0, #0xf\n"
+ " and r0, r0, r2\n"
+ " orr r0, r0, r1\n"
+ " strb r0, [r4, #0x5]\n"
+ " add r2, r4, #0\n"
+ " add r2, r2, #0x3e\n"
+ " ldrb r0, [r2]\n"
+ " mov r1, #0x2\n"
+ " orr r0, r0, r1\n"
+ " strb r0, [r2]\n"
+ " mov r0, r8\n"
+ " strh r0, [r4, #0x2e]\n"
+ " strb r7, [r5, #0x4]\n"
+ " ldrb r1, [r6, #0xc]\n"
+ " lsl r1, r1, #0x19\n"
+ " lsr r1, r1, #0x1f\n"
+ " lsl r1, r1, #0x4\n"
+ " ldrb r2, [r5, #0x1]\n"
+ " mov r0, #0x11\n"
+ " neg r0, r0\n"
+ " and r0, r0, r2\n"
+ " orr r0, r0, r1\n"
+ " strb r0, [r5, #0x1]\n"
+ " lsl r0, r0, #0x1b\n"
+ " cmp r0, #0\n"
+ " blt ._95 @cond_branch\n"
+ " ldrb r0, [r5, #0x18]\n"
+ " lsl r0, r0, #0x1c\n"
+ " lsr r0, r0, #0x1c\n"
+ " bl FieldObjectDirectionToImageAnimId\n"
+ " add r1, r0, #0\n"
+ " lsl r1, r1, #0x18\n"
+ " lsr r1, r1, #0x18\n"
+ " add r0, r4, #0\n"
+ " bl StartSpriteAnim\n"
+ "._95:\n"
+ " ldrb r0, [r5, #0xb]\n"
+ " lsr r0, r0, #0x4\n"
+ " add r1, r4, #0\n"
+ " mov r2, #0x1\n"
+ " bl SetObjectSubpriorityByZCoord\n"
+ " add r0, r5, #0\n"
+ " add r1, r4, #0\n"
+ " bl sub_80634D0\n"
+ " mov r0, r8\n"
+ "._92:\n"
+ " pop {r3, r4, r5}\n"
+ " mov r8, r3\n"
+ " mov r9, r4\n"
+ " mov sl, r5\n"
+ " pop {r4, r5, r6, r7}\n"
+ " pop {r1}\n"
+ " bx r1\n"
+ "._97:\n"
+ " .align 2, 0\n"
+ "._96:\n"
+ " .word gSprites\n"
+ "\n"
+ );
+}
+#else
u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, u8 c, u8 d, s16 e, s16 f)
{
u8 mapObjectId;
@@ -2350,6 +2806,7 @@ u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *
sub_80634D0(mapObject, sprite);
return mapObjectId;
}
+#endif
u8 SpawnFieldObject(struct MapObjectTemplate *mapObjTemplate, u8 b, u8 c, s16 d, s16 e)
{
@@ -2572,6 +3029,66 @@ void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject)
void sub_805B75C(u8, s16, s16);
+#if DEBUG
+__attribute__((naked))
+void sub_805B710(u16 u161, u16 u162)
+{
+ asm(
+ " push {r4, r5, r6, r7, lr}\n"
+ " mov r7, r8\n"
+ " push {r7}\n"
+ " add r4, r0, #0\n"
+ " add r5, r1, #0\n"
+ " lsl r4, r4, #0x10\n"
+ " lsr r4, r4, #0x10\n"
+ " lsl r5, r5, #0x10\n"
+ " lsr r5, r5, #0x10\n"
+ " ldr r6, ._153 @ gUnknown_Debug_03004BC0\n"
+ " mov r0, #0x0\n"
+ " strb r0, [r6]\n"
+ " bl ClearPlayerAvatarInfo\n"
+ " mov r7, #0x0\n"
+ " ldr r0, ._153 + 4 @ gMapObjects\n"
+ " mov r8, r0\n"
+ " lsl r4, r4, #0x10\n"
+ " lsl r5, r5, #0x10\n"
+ "._152:\n"
+ " lsl r0, r7, #0x3\n"
+ " add r0, r0, r7\n"
+ " lsl r0, r0, #0x2\n"
+ " add r0, r0, r8\n"
+ " ldrb r0, [r0]\n"
+ " lsl r0, r0, #0x1f\n"
+ " cmp r0, #0\n"
+ " beq ._151 @cond_branch\n"
+ " add r0, r7, #0\n"
+ " asr r1, r4, #0x10\n"
+ " asr r2, r5, #0x10\n"
+ " bl sub_805B75C\n"
+ " ldrb r0, [r6]\n"
+ " add r0, r0, #0x1\n"
+ " strb r0, [r6]\n"
+ "._151:\n"
+ " add r0, r7, #1\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r7, r0, #0x18\n"
+ " cmp r7, #0xf\n"
+ " bls ._152 @cond_branch\n"
+ " bl sub_805AAB0\n"
+ " pop {r3}\n"
+ " mov r8, r3\n"
+ " pop {r4, r5, r6, r7}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "._154:\n"
+ " .align 2, 0\n"
+ "._153:\n"
+ " .word gUnknown_Debug_03004BC0\n"
+ " .word gMapObjects\n"
+ "\n"
+ );
+}
+#else
void sub_805B710(u16 a, u16 b)
{
u8 i;
@@ -2584,6 +3101,7 @@ void sub_805B710(u16 a, u16 b)
}
sub_805AAB0();
}
+#endif
extern void SetPlayerAvatarFieldObjectIdAndObjectId(u8, u8);
extern void sub_805B914(struct MapObject *);
diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c
index 83924b384..3ae422512 100644
--- a/src/field/field_control_avatar.c
+++ b/src/field/field_control_avatar.c
@@ -4,6 +4,7 @@
#include "bike.h"
#include "coord_event_weather.h"
#include "daycare.h"
+#include "debug.h"
#include "event_data.h"
#include "field_fadetransition.h"
#include "field_player_avatar.h"
@@ -35,6 +36,7 @@ extern u16 gSpecialVar_Facing;
extern struct LinkPlayerMapObject gLinkPlayerMapObjects[];
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
+extern u8 gUnknown_020297ED;
static EWRAM_DATA u8 gUnknown_0202E8C0 = 0;
static EWRAM_DATA u16 gUnknown_0202E8C2 = 0;
@@ -103,7 +105,7 @@ static void sub_8068C30(struct MapHeader *, s8, struct MapPosition *);
static bool8 map_warp_consider_2_to_inside(struct MapPosition *, u16, u8);
static s8 map_warp_check(struct MapHeader *, u16, u16, u8);
static u8 *mapheader_trigger_activate_at(struct MapHeader *, u16, u16, u8);
-static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *, u16, u16, u8);
+static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *, u16, u16, u8);;
void FieldClearPlayerInput(struct FieldInput *input)
{
@@ -162,6 +164,31 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys)
input->dpadDirection = DIR_WEST;
else if (heldKeys & DPAD_RIGHT)
input->dpadDirection = DIR_EAST;
+#if DEBUG
+ if ((heldKeys & R_BUTTON) && input->pressedStartButton)
+ {
+ input->input_field_1_2 = TRUE;
+ input->pressedStartButton = FALSE;
+ }
+ if (gUnknown_020297ED)
+ {
+ if (heldKeys & R_BUTTON)
+ {
+ input->input_field_1_1 = TRUE;
+ input->input_field_0_6 = FALSE;
+ input->input_field_0_1 = FALSE;
+ input->input_field_0_4 = FALSE;
+ input->input_field_0_5 = FALSE;
+ if (newKeys & SELECT_BUTTON)
+ {
+ input->input_field_1_0 = TRUE;
+ input->pressedSelectButton = FALSE;
+ }
+ }
+ if (heldKeys & L_BUTTON)
+ input->input_field_1_3 = TRUE;
+ }
+#endif
}
int sub_8068024(struct FieldInput *input)
@@ -173,10 +200,25 @@ int sub_8068024(struct FieldInput *input)
r6 = player_get_direction_lower_nybble();
player_get_pos_to_and_height(&position);
r4 = MapGridGetMetatileBehaviorAt(position.x, position.y);
- if (CheckTrainers() == TRUE)
+#if DEBUG
+ if (input->input_field_1_3 && dive_warp(&position, r4) == TRUE)
+ return TRUE;
+#endif
+
+ if (
+#if DEBUG
+ !input->input_field_1_1 &&
+#endif
+ CheckTrainers() == TRUE)
return TRUE;
- if (mapheader_run_first_tag2_script_list_match() == 1)
+
+ if (
+#if DEBUG
+ !input->input_field_1_1 &&
+#endif
+ mapheader_run_first_tag2_script_list_match() == 1)
return TRUE;
+
if (input->pressedBButton && sub_80687A4() == 1)
return TRUE;
if (input->input_field_0_6)
@@ -211,6 +253,21 @@ int sub_8068024(struct FieldInput *input)
}
if (input->pressedSelectButton && sub_80A6D1C() == TRUE)
return TRUE;
+
+#if DEBUG
+ if (input->input_field_1_0)
+ {
+ debug_sub_80888D8();
+ return TRUE;
+ }
+ if (input->input_field_1_2)
+ {
+ PlaySE(SE_WIN_OPEN);
+ DebugMenu_8077048();
+ return TRUE;
+ }
+#endif
+
return FALSE;
}
@@ -810,7 +867,7 @@ static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *mapHea
return NULL;
}
-int dive_warp(struct MapPosition *position, u16 b)
+bool8 dive_warp(struct MapPosition *position, u16 b)
{
if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && sub_805750C(b) == 0)
{
diff --git a/src/field/field_effect_helpers.c b/src/field/field_effect_helpers.c
index 2889ee954..c760d9aae 100644
--- a/src/field/field_effect_helpers.c
+++ b/src/field/field_effect_helpers.c
@@ -27,8 +27,6 @@ static void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *);
static void sub_8128174(struct Sprite *);
static u32 ShowDisguiseFieldEffect(u8, u8, u8);
-const u8 UnusedEggString_8401E28[] = _("タマゴ");
-
void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 flag)
{
struct Sprite *newSprite;
diff --git a/src/field/field_fadetransition.c b/src/field/field_fadetransition.c
index f0e7517e5..492c96fdd 100644
--- a/src/field/field_fadetransition.c
+++ b/src/field/field_fadetransition.c
@@ -510,6 +510,22 @@ void sub_80810DC(void)
CreateTask(sub_8081050, 10);
}
+#if DEBUG
+
+__attribute__((naked))
+void debug_sub_80888D8()
+{
+ asm("\
+ PUSH {LR}\n\
+ BL debug_sub_8052E04\n\
+ BL sub_8080E88\n\
+ BL ScriptContext2_Enable\n\
+ POP {R0}\n\
+ BX R0");
+}
+
+#endif
+
void task0A_fade_n_map_maybe(u8 taskId)
{
struct Task *task = &gTasks[taskId];
diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c
index 573395766..41e999719 100644
--- a/src/field/field_player_avatar.c
+++ b/src/field/field_player_avatar.c
@@ -30,9 +30,9 @@ static void npc_clear_strange_bits(struct MapObject *a);
static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c);
static void PlayerAllowForcedMovementIfMovingSameDirection(void);
static bool8 TryDoMetatileBehaviorForcedMovement(void);
-static u8 GetForcedMovementByMetatileBehavior(void);
+/*static*/ u8 GetForcedMovementByMetatileBehavior(void);
static void MovePlayerNotOnBike(u8 a, u16 b);
-static u8 CheckMovementInputNotOnBike(u8 a);
+/*static*/ u8 CheckMovementInputNotOnBike(u8 a);
static u8 CheckForPlayerAvatarCollision(u8 a);
static u8 sub_8058EF0(s16 a, s16 b, u8 c);
static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c);
@@ -258,12 +258,59 @@ static void PlayerAllowForcedMovementIfMovingSameDirection(void)
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5;
}
+#if DEBUG
+__attribute__((naked))
+u8 TryDoMetatileBehaviorForcedMovement()
+{
+ asm(
+ " push {r4, lr}\n"
+ " ldr r0, ._27 @ gUnknown_020297ED\n"
+ " ldrb r0, [r0]\n"
+ " cmp r0, #0\n"
+ " beq ._25 @cond_branch\n"
+ " ldr r0, ._27 + 4 @ gMain\n"
+ " ldrh r1, [r0, #0x2c]\n"
+ " mov r0, #0x80\n"
+ " lsl r0, r0, #0x1\n"
+ " and r0, r0, r1\n"
+ " cmp r0, #0\n"
+ " beq ._25 @cond_branch\n"
+ " mov r0, #0x0\n"
+ " b ._26\n"
+ "._28:\n"
+ " .align 2, 0\n"
+ "._27:\n"
+ " .word gUnknown_020297ED\n"
+ " .word gMain\n"
+ "._25:\n"
+ " ldr r4, ._29 @ gUnknown_0830FBA0\n"
+ " bl GetForcedMovementByMetatileBehavior\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x16\n"
+ " add r0, r0, r4\n"
+ " ldr r0, [r0]\n"
+ " bl _call_via_r0\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ "._26:\n"
+ " pop {r4}\n"
+ " pop {r1}\n"
+ " bx r1\n"
+ "._30:\n"
+ " .align 2, 0\n"
+ "._29:\n"
+ " .word gUnknown_0830FBA0\n"
+ "\n"
+ );
+}
+#else
static bool8 TryDoMetatileBehaviorForcedMovement(void)
{
return gUnknown_0830FBA0[GetForcedMovementByMetatileBehavior()]();
}
+#endif
-static u8 GetForcedMovementByMetatileBehavior(void)
+/*static*/ u8 GetForcedMovementByMetatileBehavior(void)
{
u8 i;
@@ -434,12 +481,57 @@ bool8 ForcedMovement_MuddySlope(void)
}
}
+#if DEBUG
+__attribute__((naked))
+void MovePlayerNotOnBike(u8 u81, u16 u161)
+{
+ asm(
+ " push {r4, r5, r6, lr}\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r2, r0, #0x18\n"
+ " add r5, r2, #0\n"
+ " lsl r1, r1, #0x10\n"
+ " lsr r6, r1, #0x10\n"
+ " ldr r0, ._84 @ gUnknown_020297ED\n"
+ " ldrb r0, [r0]\n"
+ " cmp r0, #0\n"
+ " beq ._82 @cond_branch\n"
+ " add r0, r2, #0\n"
+ " bl debug_sub_805F2B0\n"
+ " lsl r0, r0, #0x18\n"
+ " cmp r0, #0\n"
+ " bne ._83 @cond_branch\n"
+ "._82:\n"
+ " ldr r4, ._84 + 4 @ gUnknown_0830FBEC\n"
+ " add r0, r5, #0\n"
+ " bl CheckMovementInputNotOnBike\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x16\n"
+ " add r0, r0, r4\n"
+ " ldr r2, [r0]\n"
+ " add r0, r5, #0\n"
+ " add r1, r6, #0\n"
+ " bl _call_via_r2\n"
+ "._83:\n"
+ " pop {r4, r5, r6}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "._85:\n"
+ " .align 2, 0\n"
+ "._84:\n"
+ " .word gUnknown_020297ED\n"
+ " .word gUnknown_0830FBEC\n"
+ "\n"
+ );
+}
+#else
static void MovePlayerNotOnBike(u8 direction, u16 heldKeys)
{
gUnknown_0830FBEC[CheckMovementInputNotOnBike(direction)](direction, heldKeys);
}
+#endif
-static u8 CheckMovementInputNotOnBike(u8 direction)
+/*static*/ u8 CheckMovementInputNotOnBike(u8 direction)
{
if (direction == DIR_NONE)
{
@@ -1761,3 +1853,98 @@ static void sub_805A954(void)
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 1, playerSprite->pos2.y);
}
+
+#if DEBUG
+__attribute__((naked))
+void debug_sub_805F2B0()
+{
+ asm(
+ " push {lr}\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r2, r0, #0x18\n"
+ " ldr r0, ._422 @ gMain\n"
+ " ldrh r1, [r0, #0x2c]\n"
+ " mov r0, #0x80\n"
+ " lsl r0, r0, #0x1\n"
+ " and r0, r0, r1\n"
+ " cmp r0, #0\n"
+ " bne ._420 @cond_branch\n"
+ " mov r0, #0x0\n"
+ " b ._421\n"
+ "._423:\n"
+ " .align 2, 0\n"
+ "._422:\n"
+ " .word gMain\n"
+ "._420:\n"
+ " add r0, r2, #0\n"
+ " bl debug_sub_805F2DC\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ "._421:\n"
+ " pop {r1}\n"
+ " bx r1\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_805F2DC()
+{
+ asm(
+ " push {r4, lr}\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r4, r0, #0x18\n"
+ " cmp r4, #0\n"
+ " bne ._424 @cond_branch\n"
+ " ldr r2, ._426 @ gMapObjects\n"
+ " ldr r0, ._426 + 4 @ gPlayerAvatar\n"
+ " ldrb r1, [r0, #0x5]\n"
+ " lsl r0, r1, #0x3\n"
+ " add r0, r0, r1\n"
+ " lsl r0, r0, #0x2\n"
+ " add r0, r0, r2\n"
+ " ldrb r0, [r0, #0x18]\n"
+ " lsr r0, r0, #0x4\n"
+ " bl PlayerFaceDirection\n"
+ " b ._430\n"
+ "._427:\n"
+ " .align 2, 0\n"
+ "._426:\n"
+ " .word gMapObjects\n"
+ " .word gPlayerAvatar\n"
+ "._424:\n"
+ " ldr r2, ._431 @ gMapObjects\n"
+ " ldr r0, ._431 + 4 @ gPlayerAvatar\n"
+ " ldrb r1, [r0, #0x5]\n"
+ " lsl r0, r1, #0x3\n"
+ " add r0, r0, r1\n"
+ " lsl r0, r0, #0x2\n"
+ " add r0, r0, r2\n"
+ " ldrb r0, [r0, #0x1]\n"
+ " lsr r0, r0, #0x7\n"
+ " cmp r0, #0\n"
+ " beq ._429 @cond_branch\n"
+ " add r0, r4, #0\n"
+ " bl CanCameraMoveInDirection\n"
+ " cmp r0, #0\n"
+ " bne ._429 @cond_branch\n"
+ " add r0, r4, #0\n"
+ " bl PlayerOnBikeCollide\n"
+ " b ._430\n"
+ "._432:\n"
+ " .align 2, 0\n"
+ "._431:\n"
+ " .word gMapObjects\n"
+ " .word gPlayerAvatar\n"
+ "._429:\n"
+ " add r0, r4, #0\n"
+ " bl PlayerGoSpeed4\n"
+ "._430:\n"
+ " mov r0, #0x1\n"
+ " pop {r4}\n"
+ " pop {r1}\n"
+ " bx r1\n"
+ "\n"
+ );
+}
+#endif
diff --git a/src/field/field_weather.c b/src/field/field_weather.c
index ceb23b629..838df6508 100644
--- a/src/field/field_weather.c
+++ b/src/field/field_weather.c
@@ -43,7 +43,10 @@ struct WeatherCallbacks
EWRAM_DATA struct Weather gWeather = {0};
EWRAM_DATA u8 gFieldEffectPaletteGammaTypes[32] = {0};
-EWRAM_DATA u16 gUnknown_0202FF58 = {0};
+EWRAM_DATA u16 gUnknown_0202FF58 = 0;
+#if DEBUG
+EWRAM_DATA u16 gUnknown_Debug_20301FE = 0;
+#endif
static const u8 *sPaletteGammaTypes;
@@ -210,6 +213,45 @@ static const u8 sBasePaletteGammaTypes[32] =
GAMMA_NORMAL,
};
+#if DEBUG
+
+const u8 gDebugText_Weather_0[] = _("なし   ");
+const u8 gDebugText_Weather_1[] = _("はれ   ");
+const u8 gDebugText_Weather_2[] = _("はれ2  ");
+const u8 gDebugText_Weather_3[] = _("あめ   ");
+const u8 gDebugText_Weather_4[] = _("ゆき   ");
+const u8 gDebugText_Weather_5[] = _("かみなり ");
+const u8 gDebugText_Weather_6[] = _("きり   ");
+const u8 gDebugText_Weather_7[] = _("かざんばい");
+const u8 gDebugText_Weather_8[] = _("すなあらし");
+const u8 gDebugText_Weather_9[] = _("きり2  ");
+const u8 gDebugText_Weather_10[] = _("かいてい ");
+const u8 gDebugText_Weather_11[] = _("くもり  ");
+const u8 gDebugText_Weather_12[] = _("はれ3  ");
+const u8 gDebugText_Weather_13[] = _("おおあめ");
+const u8 gDebugText_Weather_14[] = _("かいてい2");
+
+const u8 *const gDebugText_Weather[] =
+{
+ gDebugText_Weather_0,
+ gDebugText_Weather_1,
+ gDebugText_Weather_2,
+ gDebugText_Weather_3,
+ gDebugText_Weather_4,
+ gDebugText_Weather_5,
+ gDebugText_Weather_6,
+ gDebugText_Weather_7,
+ gDebugText_Weather_8,
+ gDebugText_Weather_9,
+ gDebugText_Weather_10,
+ gDebugText_Weather_11,
+ gDebugText_Weather_12,
+ gDebugText_Weather_13,
+ gDebugText_Weather_14,
+};
+
+#endif
+
const u16 gUnknown_083970E8[] = INCBIN_U16("graphics/weather/0.gbapal");
void StartWeather(void)
@@ -1213,3 +1255,145 @@ void ResetPreservedPalettesInWeather(void)
{
sPaletteGammaTypes = sBasePaletteGammaTypes;
}
+
+#if DEBUG
+
+__attribute__((naked))
+u8 debug_sub_8085564(void)
+{
+ asm("\
+ push {lr}\n\
+ mov r2, #0x0\n\
+ ldr r0, ._375 @ gMain\n\
+ ldrh r1, [r0, #0x2e]\n\
+ mov r0, #0x80\n\
+ lsl r0, r0, #0x1\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._370 @cond_branch\n\
+ ldr r1, ._375 + 4 @ gUnknown_Debug_20301FE\n\
+ ldrb r0, [r1]\n\
+ add r0, r0, #0x1\n\
+ strb r0, [r1]\n\
+ lsl r0, r0, #0x18\n\
+ lsr r0, r0, #0x18\n\
+ cmp r0, #0xf\n\
+ bne ._371 @cond_branch\n\
+ strb r2, [r1]\n\
+._371:\n\
+ mov r2, #0x1\n\
+._370:\n\
+ ldr r0, ._375 @ gMain\n\
+ ldrh r1, [r0, #0x2e]\n\
+ mov r0, #0x80\n\
+ lsl r0, r0, #0x2\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._372 @cond_branch\n\
+ ldr r1, ._375 + 4 @ gUnknown_Debug_20301FE\n\
+ ldrb r0, [r1]\n\
+ cmp r0, #0\n\
+ beq ._373 @cond_branch\n\
+ sub r0, r0, #0x1\n\
+ b ._374\n\
+._376:\n\
+ .align 2, 0\n\
+._375:\n\
+ .word gMain\n\
+ .word gUnknown_Debug_20301FE\n\
+._373:\n\
+ mov r0, #0xe\n\
+._374:\n\
+ strb r0, [r1]\n\
+ mov r2, #0x1\n\
+._372:\n\
+ cmp r2, #0\n\
+ beq ._377 @cond_branch\n\
+ mov r0, #0x16\n\
+ mov r1, #0x1\n\
+ mov r2, #0x1c\n\
+ mov r3, #0x2\n\
+ bl Menu_BlankWindowRect\n\
+ ldr r1, ._380 @ gDebugText_Weather\n\
+ ldr r0, ._380 + 4 @ gUnknown_Debug_20301FE\n\
+ ldrb r0, [r0]\n\
+ lsl r0, r0, #0x2\n\
+ add r0, r0, r1\n\
+ ldr r0, [r0]\n\
+ mov r1, #0x17\n\
+ mov r2, #0x1\n\
+ bl Menu_PrintText\n\
+._377:\n\
+ ldr r0, ._380 + 8 @ gMain\n\
+ ldrh r1, [r0, #0x2e]\n\
+ mov r0, #0x1\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ bne ._378 @cond_branch\n\
+ mov r0, #0x0\n\
+ b ._379\n\
+._381:\n\
+ .align 2, 0\n\
+._380:\n\
+ .word gDebugText_Weather\n\
+ .word gUnknown_Debug_20301FE\n\
+ .word gMain\n\
+._378:\n\
+ ldr r0, ._382 @ gUnknown_Debug_20301FE\n\
+ ldrb r0, [r0]\n\
+ bl ChangeWeather\n\
+ bl CloseMenu\n\
+ mov r0, #0x1\n\
+._379:\n\
+ pop {r1}\n\
+ bx r1\n\
+._383:\n\
+ .align 2, 0\n\
+._382:\n\
+ .word gUnknown_Debug_20301FE");
+}
+
+__attribute__((naked))
+u8 debug_sub_808560C(void)
+{
+ asm("\
+ push {r4, lr}\n\
+ ldr r4, ._384 @ gUnknown_Debug_20301FE\n\
+ ldr r0, ._384 + 4 @ gWeather\n\
+ mov r1, #0xda\n\
+ lsl r1, r1, #0x3\n\
+ add r0, r0, r1\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r4]\n\
+ bl Menu_EraseScreen\n\
+ mov r0, #0x16\n\
+ mov r1, #0x1\n\
+ mov r2, #0x1c\n\
+ mov r3, #0x2\n\
+ bl Menu_BlankWindowRect\n\
+ ldr r1, ._384 + 8 @ gDebugText_Weather\n\
+ ldrb r0, [r4]\n\
+ lsl r0, r0, #0x2\n\
+ add r0, r0, r1\n\
+ ldr r0, [r0]\n\
+ mov r1, #0x17\n\
+ mov r2, #0x1\n\
+ bl Menu_PrintText\n\
+ ldr r1, ._384 + 12 @ gMenuCallback\n\
+ ldr r0, ._384 + 16 @ debug_sub_8085564\n\
+ str r0, [r1]\n\
+ mov r0, #0x0\n\
+ pop {r4}\n\
+ pop {r1}\n\
+ bx r1\n\
+._385:\n\
+ .align 2, 0\n\
+._384:\n\
+ .word gUnknown_Debug_20301FE\n\
+ .word gWeather\n\
+ .word gDebugText_Weather\n\
+ .word gMenuCallback\n\
+ .word debug_sub_8085564+1");
+}
+
+#endif
diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c
index 32ed3c6a4..2043c5688 100644
--- a/src/field/fldeff_cut.c
+++ b/src/field/fldeff_cut.c
@@ -72,6 +72,115 @@ static const struct SpriteTemplate gSpriteTemplate_CutGrass =
.callback = sub_80A2A48,
};
+#if DEBUG
+__attribute__((naked))
+void debug_sub_80AFEE4()
+{
+ asm(
+ " push {r4, r5, r6, r7, lr}\n"
+ " mov r7, r8\n"
+ " push {r7}\n"
+ " mov r0, #0x52\n"
+ " bl npc_before_player_of_type\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " cmp r0, #0x1\n"
+ " bne ._1 @cond_branch\n"
+ " ldr r1, ._3 @ gLastFieldPokeMenuOpened\n"
+ " mov r0, #0x0\n"
+ " strb r0, [r1]\n"
+ " bl sub_80A2634\n"
+ " b ._8\n"
+ "._4:\n"
+ " .align 2, 0\n"
+ "._3:\n"
+ " .word gLastFieldPokeMenuOpened\n"
+ "._1:\n"
+ " ldr r4, ._9 @ gUnknown_0203923C\n"
+ " add r1, r4, #2\n"
+ " add r0, r4, #0\n"
+ " bl PlayerGetDestCoords\n"
+ " mov r7, #0x0\n"
+ " mov r8, r4\n"
+ "._12:\n"
+ " ldr r1, ._9 + 4 @ 0xffff\n"
+ " add r0, r7, r1\n"
+ " mov r2, r8\n"
+ " ldrh r2, [r2, #0x2]\n"
+ " add r0, r0, r2\n"
+ " mov r6, #0x0\n"
+ " lsl r0, r0, #0x10\n"
+ " asr r5, r0, #0x10\n"
+ "._11:\n"
+ " ldr r1, ._9 + 4 @ 0xffff\n"
+ " add r0, r6, r1\n"
+ " mov r2, r8\n"
+ " ldrh r2, [r2]\n"
+ " add r0, r0, r2\n"
+ " lsl r0, r0, #0x10\n"
+ " asr r4, r0, #0x10\n"
+ " add r0, r4, #0\n"
+ " add r1, r5, #0\n"
+ " bl MapGridGetZCoordAt\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " mov r2, r8\n"
+ " mov r1, #0x4\n"
+ " ldsb r1, [r2, r1]\n"
+ " cmp r0, r1\n"
+ " bne ._7 @cond_branch\n"
+ " add r0, r4, #0\n"
+ " add r1, r5, #0\n"
+ " bl MapGridGetMetatileBehaviorAt\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r4, r0, #0x18\n"
+ " add r0, r4, #0\n"
+ " bl MetatileBehavior_IsPokeGrass\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " cmp r0, #0x1\n"
+ " beq ._6 @cond_branch\n"
+ " add r0, r4, #0\n"
+ " bl MetatileBehavior_IsAshGrass\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " cmp r0, #0x1\n"
+ " bne ._7 @cond_branch\n"
+ "._6:\n"
+ " ldr r1, ._9 + 8 @ gLastFieldPokeMenuOpened\n"
+ " mov r0, #0x0\n"
+ " strb r0, [r1]\n"
+ " bl sub_80A25E8\n"
+ " b ._8\n"
+ "._10:\n"
+ " .align 2, 0\n"
+ "._9:\n"
+ " .word gUnknown_0203923C\n"
+ " .word 0xffff\n"
+ " .word gLastFieldPokeMenuOpened\n"
+ "._7:\n"
+ " add r0, r6, #1\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r6, r0, #0x18\n"
+ " cmp r6, #0x2\n"
+ " bls ._11 @cond_branch\n"
+ " add r0, r7, #1\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r7, r0, #0x18\n"
+ " cmp r7, #0x2\n"
+ " bls ._12 @cond_branch\n"
+ " bl ScriptContext2_Disable\n"
+ "._8:\n"
+ " pop {r3}\n"
+ " mov r8, r3\n"
+ " pop {r4, r5, r6, r7}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "\n"
+ );
+}
+#endif
+
bool8 SetUpFieldMove_Cut(void)
{
s16 x, y;
diff --git a/src/field/fldeff_flash.c b/src/field/fldeff_flash.c
index 22f170184..8c0f09bd9 100644
--- a/src/field/fldeff_flash.c
+++ b/src/field/fldeff_flash.c
@@ -71,6 +71,36 @@ static const u16 gUnknown_083F809C[] = INCBIN_U16("graphics/misc/83F809C.gbapal"
static const u16 gCaveTransitionTilemap[] = INCBIN_U16("graphics/misc/cave_transition_map.bin.lz");
static const u8 gCaveTransitionTiles[] = INCBIN_U8("graphics/misc/cave_transition.4bpp.lz");
+#if DEBUG
+__attribute__((naked))
+void debug_sub_8122080(void)
+{
+ asm("\
+ push {lr}\n\
+ ldr r0, ._4 @ gMapHeader\n\
+ ldrb r0, [r0, #0x15]\n\
+ cmp r0, #0x1\n\
+ bne ._2 @cond_branch\n\
+ ldr r0, ._4 + 4 @ 0x828\n\
+ bl FlagGet\n\
+ lsl r0, r0, #0x18\n\
+ cmp r0, #0\n\
+ bne ._2 @cond_branch\n\
+ bl sub_810CBFC\n\
+ b ._3\n\
+._5:\n\
+ .align 2, 0\n\
+._4:\n\
+ .word gMapHeader\n\
+ .word 0x828\n\
+._2:\n\
+ bl ScriptContext2_Disable\n\
+._3:\n\
+ pop {r0}\n\
+ bx r0");
+}
+#endif
+
bool8 SetUpFieldMove_Flash(void)
{
if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH))
diff --git a/src/field/fldeff_secretpower.c b/src/field/fldeff_secretpower.c
index bf8e98403..0e91bb55c 100644
--- a/src/field/fldeff_secretpower.c
+++ b/src/field/fldeff_secretpower.c
@@ -243,6 +243,102 @@ void sub_80C6280(void)
}
}
+#if DEBUG
+
+__attribute__((naked))
+void debug_sub_80D93F4()
+{
+ asm("\
+ push {r4, lr}\n\
+ bl sub_80BB63C\n\
+ ldr r0, ._98 @ gSpecialVar_Result\n\
+ ldrh r0, [r0]\n\
+ cmp r0, #0x1\n\
+ beq ._95 @cond_branch\n\
+ bl player_get_direction_lower_nybble\n\
+ lsl r0, r0, #0x18\n\
+ lsr r0, r0, #0x18\n\
+ cmp r0, #0x2\n\
+ beq ._96 @cond_branch\n\
+._95:\n\
+ bl ScriptContext2_Disable\n\
+ b ._109\n\
+._99:\n\
+ .align 2, 0\n\
+._98:\n\
+ .word gSpecialVar_Result\n\
+._96:\n\
+ ldr r4, ._102 @ gUnknown_0203923C\n\
+ add r1, r4, #2\n\
+ add r0, r4, #0\n\
+ bl GetXYCoordsOneStepInFrontOfPlayer\n\
+ mov r1, #0x0\n\
+ ldsh r0, [r4, r1]\n\
+ mov r2, #0x2\n\
+ ldsh r1, [r4, r2]\n\
+ bl MapGridGetMetatileBehaviorAt\n\
+ lsl r0, r0, #0x18\n\
+ lsr r4, r0, #0x18\n\
+ add r0, r4, #0\n\
+ bl MetatileBehavior_IsSecretBaseCave\n\
+ lsl r0, r0, #0x18\n\
+ lsr r0, r0, #0x18\n\
+ cmp r0, #0x1\n\
+ bne ._100 @cond_branch\n\
+ bl sub_80C6264\n\
+ ldr r1, ._102 + 4 @ gLastFieldPokeMenuOpened\n\
+ mov r0, #0x0\n\
+ strb r0, [r1]\n\
+ bl sub_80C639C\n\
+ b ._109\n\
+._103:\n\
+ .align 2, 0\n\
+._102:\n\
+ .word gUnknown_0203923C\n\
+ .word gLastFieldPokeMenuOpened\n\
+._100:\n\
+ add r0, r4, #0\n\
+ bl MetatileBehavior_IsSecretBaseTree\n\
+ lsl r0, r0, #0x18\n\
+ lsr r0, r0, #0x18\n\
+ cmp r0, #0x1\n\
+ bne ._104 @cond_branch\n\
+ bl sub_80C6264\n\
+ ldr r1, ._106 @ gLastFieldPokeMenuOpened\n\
+ mov r0, #0x0\n\
+ strb r0, [r1]\n\
+ bl sub_80C64A8\n\
+ b ._109\n\
+._107:\n\
+ .align 2, 0\n\
+._106:\n\
+ .word gLastFieldPokeMenuOpened\n\
+._104:\n\
+ add r0, r4, #0\n\
+ bl MetatileBehavior_IsSecretBaseShrub\n\
+ lsl r0, r0, #0x18\n\
+ lsr r0, r0, #0x18\n\
+ cmp r0, #0x1\n\
+ bne ._108 @cond_branch\n\
+ bl sub_80C6264\n\
+ ldr r1, ._110 @ gLastFieldPokeMenuOpened\n\
+ mov r0, #0x0\n\
+ strb r0, [r1]\n\
+ bl sub_80C660C\n\
+ b ._109\n\
+._111:\n\
+ .align 2, 0\n\
+._110:\n\
+ .word gLastFieldPokeMenuOpened\n\
+._108:\n\
+ bl ScriptContext2_Disable\n\
+._109:\n\
+ pop {r4}\n\
+ pop {r0}\n\
+ bx r0");
+}
+#endif
+
bool8 SetUpFieldMove_SecretPower(void)
{
u8 behavior;
diff --git a/src/field/fldeff_strength.c b/src/field/fldeff_strength.c
index 565ac1651..9f9cd4013 100644
--- a/src/field/fldeff_strength.c
+++ b/src/field/fldeff_strength.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "constants/map_objects.h"
#include "braille_puzzles.h"
#include "field_effect.h"
#include "party_menu.h"
@@ -20,6 +21,28 @@ extern void (*gUnknown_03005CE4)(void);
extern u8 S_UseStrength[];
+#if DEBUG
+void debug_sub_8130318(void)
+{
+ if (ShouldDoBrailleStrengthEffect())
+ {
+ gLastFieldPokeMenuOpened = 0;
+ gSpecialVar_Result = 0;
+ sub_811AA38();
+ }
+ else if (npc_before_player_of_type(MAP_OBJ_GFX_PUSHABLE_BOULDER) == TRUE)
+ {
+ gLastFieldPokeMenuOpened = 0;
+ gSpecialVar_Result = 0;
+ sub_811AA18();
+ }
+ else
+ {
+ ScriptContext2_Disable();
+ }
+}
+#endif
+
bool8 SetUpFieldMove_Strength(void)
{
if (ShouldDoBrailleStrengthEffect())
diff --git a/src/field/item_menu.c b/src/field/item_menu.c
index d0c3f598b..7aaf650b2 100644
--- a/src/field/item_menu.c
+++ b/src/field/item_menu.c
@@ -158,6 +158,9 @@ extern struct PocketScrollState gBagPocketScrollStates[];
extern struct ItemSlot *gCurrentBagPocketItemSlots; // selected pocket item slots
extern const u8 Event_NoRegisteredItem[];
+// TODO: decompile the debug code so we can use static in this file
+#define static
+
extern const struct CompressedSpriteSheet sMaleBagSpriteSheet;
extern const struct CompressedSpriteSheet sFemaleBagSpriteSheet;
extern const struct CompressedSpritePalette sBagSpritePalette;
@@ -286,6 +289,24 @@ static void sub_80A6618(u8);
const struct YesNoFuncTable gUnknown_083C16FC = {sub_80A65AC, sub_80A6618};
+#if DEBUG
+const struct {u16 item; u8 unk;} gUnknown_Debug_083EBC68[12+48] =
+{
+ {ITEM_POKE_BALL, 10},
+ {ITEM_ULTRA_BALL, 15},
+ {ITEM_GREAT_BALL, 20},
+ {ITEM_MASTER_BALL, 25},
+ {ITEM_ACRO_BIKE, 1 },
+ {ITEM_OLD_ROD, 1 },
+ {ITEM_GOOD_ROD, 1 },
+ {ITEM_SUPER_ROD, 1 },
+ {ITEM_POKEBLOCK_CASE, 1 },
+ {ITEM_WAILMER_PAIL, 1 },
+ {ITEM_ITEMFINDER, 1 },
+ {ITEM_NONE, 1 },
+};
+#endif
+
void sub_80A34E8(void);
static bool8 LoadBagGraphicsMultistep(void);
static void sub_80A362C(void);
@@ -372,6 +393,390 @@ static void sub_80A3134(void)
DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0x6000), 0x800);
}
+#if DEBUG
+__attribute__((naked))
+static bool8 SetupBagMultistep(void)
+{
+ asm("\
+ push {r4, r5, lr}\n\
+ add sp, sp, #0xfffffffc\n\
+ ldr r0, ._5 @ gMain\n\
+ ldr r1, ._5 + 4 @ 0x43c\n\
+ add r0, r0, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0x10\n\
+ bls ._3 @cond_branch\n\
+ b ._66\n\
+._3:\n\
+ lsl r0, r0, #0x2\n\
+ ldr r1, ._5 + 8 @ \n\
+ add r0, r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+._6:\n\
+ .align 2, 0\n\
+._5:\n\
+ .word gMain\n\
+ .word 0x43c\n\
+ .word ._7\n\
+._7:\n\
+ .word ._8\n\
+ .word ._9\n\
+ .word ._10\n\
+ .word ._11\n\
+ .word ._12\n\
+ .word ._13\n\
+ .word ._14\n\
+ .word ._15\n\
+ .word ._16\n\
+ .word ._17\n\
+ .word ._18\n\
+ .word ._19\n\
+ .word ._20\n\
+ .word ._21\n\
+ .word ._22\n\
+ .word ._23\n\
+ .word ._24\n\
+._8:\n\
+ bl ClearVideoCallbacks\n\
+ bl sub_80A34E8\n\
+ b ._61\n\
+._9:\n\
+ bl ScanlineEffect_Stop\n\
+ ldr r1, ._27 @ gMain\n\
+ ldr r0, ._27 + 4 @ 0x43c\n\
+ add r1, r1, r0\n\
+ b ._62\n\
+._28:\n\
+ .align 2, 0\n\
+._27:\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._10:\n\
+ bl gpu_pal_allocator_reset__manage_upper_four\n\
+ b ._61\n\
+._11:\n\
+ bl ClearBGTilemapBuffers\n\
+ ldr r0, ._31 @ \n\
+ ldr r1, ._31 + 4 @ \n\
+ add r0, r0, r1\n\
+ mov r1, #0x0\n\
+ strb r1, [r0]\n\
+ b ._61\n\
+._32:\n\
+ .align 2, 0\n\
+._31:\n\
+ .word +0x2000000\n\
+ .word 0x1ffff\n\
+._12:\n\
+ bl ResetPaletteFade\n\
+ ldr r2, ._34 @ gPaletteFade\n\
+ ldrb r0, [r2, #0x8]\n\
+ mov r1, #0x80\n\
+ orr r0, r0, r1\n\
+ strb r0, [r2, #0x8]\n\
+ ldr r1, ._34 + 4 @ gMain\n\
+ ldr r0, ._34 + 8 @ 0x43c\n\
+ add r1, r1, r0\n\
+ b ._62\n\
+._35:\n\
+ .align 2, 0\n\
+._34:\n\
+ .word gPaletteFade\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._13:\n\
+ bl ResetSpriteData\n\
+ b ._61\n\
+._14:\n\
+ bl LoadBagGraphicsMultistep\n\
+ lsl r0, r0, #0x18\n\
+ cmp r0, #0\n\
+ bne ._37 @cond_branch\n\
+ b ._66\n\
+._37:\n\
+ ldr r1, ._40 @ gMain\n\
+ ldr r0, ._40 + 4 @ 0x43c\n\
+ add r1, r1, r0\n\
+ b ._62\n\
+._41:\n\
+ .align 2, 0\n\
+._40:\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._15:\n\
+ ldr r0, ._43 @ gWindowTemplate_81E6DFC\n\
+ bl Text_LoadWindowTemplate\n\
+ b ._61\n\
+._44:\n\
+ .align 2, 0\n\
+._43:\n\
+ .word gWindowTemplate_81E6DFC\n\
+._16:\n\
+ ldr r0, ._46 @ gWindowTemplate_81E6DFC\n\
+ bl MultistepInitMenuWindowBegin\n\
+ ldr r1, ._46 + 4 @ gMain\n\
+ ldr r0, ._46 + 8 @ 0x43c\n\
+ add r1, r1, r0\n\
+ b ._62\n\
+._47:\n\
+ .align 2, 0\n\
+._46:\n\
+ .word gWindowTemplate_81E6DFC\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._17:\n\
+ bl MultistepInitMenuWindowContinue\n\
+ cmp r0, #0\n\
+ bne ._48 @cond_branch\n\
+ b ._66\n\
+._48:\n\
+ b ._61\n\
+._18:\n\
+ bl ClearVerticalScrollIndicatorPalettes\n\
+ bl LoadScrollIndicatorPalette\n\
+ mov r0, #0x0\n\
+ mov r1, #0xac\n\
+ mov r2, #0xc\n\
+ bl CreateVerticalScrollIndicators\n\
+ mov r0, #0x1\n\
+ mov r1, #0xac\n\
+ mov r2, #0x94\n\
+ bl CreateVerticalScrollIndicators\n\
+ mov r0, #0x2\n\
+ mov r1, #0x1c\n\
+ mov r2, #0x58\n\
+ bl CreateVerticalScrollIndicators\n\
+ mov r0, #0x3\n\
+ mov r1, #0x64\n\
+ mov r2, #0x58\n\
+ bl CreateVerticalScrollIndicators\n\
+ mov r0, #0x0\n\
+ mov r1, #0x2\n\
+ bl SetVerticalScrollIndicatorPriority\n\
+ mov r0, #0x1\n\
+ mov r1, #0x2\n\
+ bl SetVerticalScrollIndicatorPriority\n\
+ mov r0, #0x2\n\
+ mov r1, #0x2\n\
+ bl SetVerticalScrollIndicatorPriority\n\
+ mov r0, #0x3\n\
+ mov r1, #0x2\n\
+ bl SetVerticalScrollIndicatorPriority\n\
+ ldr r0, ._53 @ sReturnLocation\n\
+ ldrb r0, [r0]\n\
+ sub r0, r0, #0x4\n\
+ lsl r0, r0, #0x18\n\
+ lsr r0, r0, #0x18\n\
+ cmp r0, #0x1\n\
+ bhi ._51 @cond_branch\n\
+ mov r0, #0x2\n\
+ mov r1, #0x1\n\
+ bl SetVerticalScrollIndicators\n\
+ mov r0, #0x3\n\
+ mov r1, #0x1\n\
+ bl SetVerticalScrollIndicators\n\
+._51:\n\
+ ldr r1, ._53 + 4 @ gMain\n\
+ ldr r0, ._53 + 8 @ 0x43c\n\
+ add r1, r1, r0\n\
+ b ._62\n\
+._54:\n\
+ .align 2, 0\n\
+._53:\n\
+ .word sReturnLocation\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._19:\n\
+ ldr r1, ._56 @ gUnknown_0203855A\n\
+ mov r0, #0x10\n\
+ strb r0, [r1]\n\
+ ldr r4, ._56 + 4 @ gBGTilemapBuffers\n\
+ ldr r5, ._56 + 8 @ sCurrentBagPocket\n\
+ ldrb r1, [r5]\n\
+ add r1, r1, #0x1\n\
+ lsl r1, r1, #0x18\n\
+ lsr r1, r1, #0x18\n\
+ add r0, r4, #0\n\
+ bl sub_80A39B8\n\
+ ldrb r1, [r5]\n\
+ add r0, r4, #0\n\
+ bl DrawPocketIndicatorDots\n\
+ bl UpdateAllBagPockets\n\
+ ldr r4, ._56 + 12 @ gBagPockets\n\
+ ldr r0, [r4, #0x10]\n\
+ ldr r1, [r4, #0x14]\n\
+ bl SortItemSlots\n\
+ ldr r0, [r4, #0x18]\n\
+ ldr r1, [r4, #0x1c]\n\
+ bl SortItemSlots\n\
+ bl sub_80A3D40\n\
+ ldr r1, ._56 + 16 @ gCurrentBagPocketItemSlots\n\
+ mov r0, #0x0\n\
+ ldsb r0, [r5, r0]\n\
+ lsl r0, r0, #0x3\n\
+ add r0, r0, r4\n\
+ ldr r0, [r0]\n\
+ str r0, [r1]\n\
+ bl sub_80A362C\n\
+ b ._61\n\
+._57:\n\
+ .align 2, 0\n\
+._56:\n\
+ .word gUnknown_0203855A\n\
+ .word gBGTilemapBuffers+0x1000\n\
+ .word sCurrentBagPocket\n\
+ .word gBagPockets\n\
+ .word gCurrentBagPocketItemSlots\n\
+._20:\n\
+ ldr r0, ._59 @ 0xffff\n\
+ mov r1, #0x0\n\
+ mov r2, #0x7\n\
+ bl sub_80A48E8\n\
+ ldr r1, ._59 + 4 @ gBagPocketScrollStates\n\
+ ldr r4, ._59 + 8 @ sCurrentBagPocket\n\
+ mov r0, #0x0\n\
+ ldsb r0, [r4, r0]\n\
+ lsl r0, r0, #0x2\n\
+ add r0, r0, r1\n\
+ ldrb r1, [r0, #0x1]\n\
+ ldrb r0, [r0]\n\
+ add r1, r1, r0\n\
+ ldr r0, ._59 + 12 @ gCurrentBagPocketItemSlots\n\
+ ldr r0, [r0]\n\
+ lsl r1, r1, #0x2\n\
+ add r1, r1, r0\n\
+ mov r2, #0x0\n\
+ ldsh r0, [r1, r2]\n\
+ bl ItemListMenu_InitDescription\n\
+ bl ItemListMenu_InitMenu\n\
+ ldr r1, ._59 + 16 @ gUnknown_0203855B\n\
+ ldrb r0, [r4]\n\
+ add r0, r0, #0x1\n\
+ strb r0, [r1]\n\
+ ldr r1, ._59 + 20 @ gUnknown_0203855C\n\
+ mov r0, #0x0\n\
+ strb r0, [r1]\n\
+ ldr r1, ._59 + 24 @ gMain\n\
+ ldr r0, ._59 + 28 @ 0x43c\n\
+ add r1, r1, r0\n\
+ b ._62\n\
+._60:\n\
+ .align 2, 0\n\
+._59:\n\
+ .word 0xffff\n\
+ .word gBagPocketScrollStates\n\
+ .word sCurrentBagPocket\n\
+ .word gCurrentBagPocketItemSlots\n\
+ .word gUnknown_0203855B\n\
+ .word gUnknown_0203855C\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._21:\n\
+ bl CreateBagSprite\n\
+ mov r0, #0x0\n\
+ bl CreateBagPokeballSprite\n\
+ bl sub_80A3740\n\
+ b ._61\n\
+._22:\n\
+ ldr r3, ._63 @ 0x4000208\n\
+ ldrh r2, [r3]\n\
+ mov r0, #0x0\n\
+ strh r0, [r3]\n\
+ ldr r4, ._63 + 4 @ 0x4000200\n\
+ ldrh r0, [r4]\n\
+ mov r1, #0x1\n\
+ orr r0, r0, r1\n\
+ strh r0, [r4]\n\
+ strh r2, [r3]\n\
+ ldr r2, ._63 + 8 @ 0x4000004\n\
+ ldrh r0, [r2]\n\
+ mov r1, #0x8\n\
+ orr r0, r0, r1\n\
+ strh r0, [r2]\n\
+ mov r0, #0x1\n\
+ neg r0, r0\n\
+ mov r1, #0x0\n\
+ str r1, [sp]\n\
+ mov r2, #0x10\n\
+ mov r3, #0x0\n\
+ bl BeginNormalPaletteFade\n\
+ ldr r2, ._63 + 12 @ gPaletteFade\n\
+ ldrb r1, [r2, #0x8]\n\
+ mov r0, #0x7f\n\
+ and r0, r0, r1\n\
+ strb r0, [r2, #0x8]\n\
+ ldr r1, ._63 + 16 @ gMain\n\
+ ldr r0, ._63 + 20 @ 0x43c\n\
+ add r1, r1, r0\n\
+ b ._62\n\
+._64:\n\
+ .align 2, 0\n\
+._63:\n\
+ .word 0x4000208\n\
+ .word 0x4000200\n\
+ .word 0x4000004\n\
+ .word gPaletteFade\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._23:\n\
+ bl sub_8055870\n\
+ cmp r0, #0x1\n\
+ beq ._66 @cond_branch\n\
+._61:\n\
+ ldr r1, ._67 @ gMain\n\
+ ldr r2, ._67 + 4 @ 0x43c\n\
+ add r1, r1, r2\n\
+._62:\n\
+ ldrb r0, [r1]\n\
+ add r0, r0, #0x1\n\
+ strb r0, [r1]\n\
+ b ._66\n\
+._68:\n\
+ .align 2, 0\n\
+._67:\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._24:\n\
+ ldr r0, ._71 @ sub_80A3134\n\
+ bl SetVBlankCallback\n\
+ ldr r0, ._71 + 4 @ sub_80A3118\n\
+ bl SetMainCallback2\n\
+ bl sub_80A751C\n\
+ bl sub_80A7630\n\
+ bl sub_80A770C\n\
+ bl sub_80A7828\n\
+ bl sub_80A78B8\n\
+ ldr r0, ._71 + 8 @ gLinkOpen\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0x1\n\
+ bne ._69 @cond_branch\n\
+ ldr r0, ._71 + 12 @ 0x600f5e0\n\
+ mov r1, #0x80\n\
+ lsl r1, r1, #0x8\n\
+ ldr r2, ._71 + 16 @ 0x600f800\n\
+ mov r3, #0x0\n\
+ bl debug_sub_8008218\n\
+._69:\n\
+ mov r0, #0x1\n\
+ b ._70\n\
+._72:\n\
+ .align 2, 0\n\
+._71:\n\
+ .word sub_80A3134+1\n\
+ .word sub_80A3118+1\n\
+ .word gLinkOpen\n\
+ .word 0x600f5e0\n\
+ .word 0x600f800\n\
+._66:\n\
+ mov r0, #0x0\n\
+._70:\n\
+ add sp, sp, #0x4\n\
+ pop {r4, r5}\n\
+ pop {r1}\n\
+ bx r1");
+}
+#else
static bool8 SetupBagMultistep(void)
{
u32 index;
@@ -496,6 +901,7 @@ static bool8 SetupBagMultistep(void)
}
return FALSE;
}
+#endif
static bool8 sub_80A34B4(void)
{
@@ -622,6 +1028,79 @@ void ClearBag(void)
ResetBagScrollPositions();
}
+#if DEBUG
+__attribute__((naked))
+void debug_sub_80A3714()
+{
+ asm("\
+ push {r4, r5, r6, lr}\n\
+ add sp, sp, #0xfffffff4\n\
+ mov r5, #0x0\n\
+ ldr r2, ._138 @ gUnknown_Debug_083EBC68\n\
+ mov r1, #0x0\n\
+._134:\n\
+ lsl r0, r5, #0x1\n\
+ add r0, r0, sp\n\
+ strh r1, [r0]\n\
+ add r0, r5, #1\n\
+ lsl r0, r0, #0x10\n\
+ lsr r5, r0, #0x10\n\
+ cmp r5, #0x4\n\
+ bls ._134 @cond_branch\n\
+ mov r5, #0x0\n\
+ ldrh r0, [r2]\n\
+ cmp r0, #0\n\
+ beq ._136 @cond_branch\n\
+ add r6, r2, #0\n\
+._137:\n\
+ lsl r4, r5, #0x2\n\
+ add r4, r4, r6\n\
+ ldrh r0, [r4]\n\
+ bl ItemId_GetPocket\n\
+ lsl r0, r0, #0x18\n\
+ lsr r0, r0, #0x8\n\
+ ldr r1, ._138 + 4 @ 0xffff0000\n\
+ add r0, r0, r1\n\
+ lsr r0, r0, #0x10\n\
+ ldr r1, ._138 + 8 @ gBagPockets\n\
+ lsl r2, r0, #0x3\n\
+ add r2, r2, r1\n\
+ lsl r0, r0, #0x1\n\
+ mov r1, sp\n\
+ add r3, r1, r0\n\
+ ldrh r1, [r3]\n\
+ ldr r0, [r2]\n\
+ lsl r1, r1, #0x2\n\
+ add r1, r1, r0\n\
+ ldr r0, [r4]\n\
+ str r0, [r1]\n\
+ ldrh r0, [r3]\n\
+ add r0, r0, #0x1\n\
+ strh r0, [r3]\n\
+ add r0, r5, #1\n\
+ lsl r0, r0, #0x10\n\
+ lsr r5, r0, #0x10\n\
+ cmp r5, #0x3b\n\
+ bhi ._136 @cond_branch\n\
+ lsl r0, r5, #0x2\n\
+ add r0, r0, r6\n\
+ ldrh r0, [r0]\n\
+ cmp r0, #0\n\
+ bne ._137 @cond_branch\n\
+._136:\n\
+ add sp, sp, #0xc\n\
+ pop {r4, r5, r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+._139:\n\
+ .align 2, 0\n\
+._138:\n\
+ .word gUnknown_Debug_083EBC68\n\
+ .word 0xffff0000\n\
+ .word gBagPockets");
+}
+#endif
+
static void sub_80A3740(void)
{
const u16 colors[2] = {RGB(14, 15, 16), RGB_WHITE};
@@ -3561,12 +4040,49 @@ static void sub_80A73FC(void)
MenuCursor_Destroy814AD44();
}
+#if DEBUG
+__attribute__((naked))
+static void sub_80A740C(void)
+{
+ asm("\
+ push {lr}\n\
+ add sp, sp, #0xfffffffc\n\
+ bl sub_80A75E4\n\
+ bl sub_80A7768\n\
+ bl sub_80A7420\n\
+ ldr r0, ._931 @ gLinkOpen\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0x1\n\
+ bne ._930 @cond_branch\n\
+ ldr r0, ._931 + 4 @ gLink\n\
+ ldr r1, ._931 + 8 @ 0xfbd\n\
+ add r0, r0, r1\n\
+ ldrb r0, [r0]\n\
+ mov r1, #0x0\n\
+ str r1, [sp]\n\
+ mov r1, #0x1\n\
+ mov r2, #0x1\n\
+ mov r3, #0x2\n\
+ bl debug_sub_8008264\n\
+._930:\n\
+ add sp, sp, #0x4\n\
+ pop {r0}\n\
+ bx r0\n\
+._932:\n\
+ .align 2, 0\n\
+._931:\n\
+ .word gLinkOpen\n\
+ .word gLink\n\
+ .word 0xfbd");
+}
+#else
static void sub_80A740C(void)
{
sub_80A75E4();
sub_80A7768();
sub_80A7420();
}
+#endif
static void sub_80A7420(void)
{
diff --git a/src/field/mauville_man.c b/src/field/mauville_man.c
index 0a841eed1..b42c50513 100644
--- a/src/field/mauville_man.c
+++ b/src/field/mauville_man.c
@@ -250,7 +250,88 @@ void SetupMauvilleOldMan(void)
sub_80F83D0();
}
-static u8 GetCurrentMauvilleOldMan(void)
+#if DEBUG
+__attribute__((naked))
+void debug_sub_810B32C()
+{
+ asm(
+ " push {r4, lr}\n"
+ " add sp, sp, #0xfffffff8\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " cmp r0, #0x4\n"
+ " bhi ._37 @cond_branch\n"
+ " lsl r0, r0, #0x2\n"
+ " ldr r1, ._23 @ \n"
+ " add r0, r0, r1\n"
+ " ldr r0, [r0]\n"
+ " mov pc, r0\n"
+ "._24:\n"
+ " .align 2, 0\n"
+ "._23:\n"
+ " .word ._22\n"
+ "._22:\n"
+ " .word ._25\n"
+ " .word ._26\n"
+ " .word ._27\n"
+ " .word ._28\n"
+ " .word ._29\n"
+ "._25:\n"
+ " bl SetupBard\n"
+ " b ._37\n"
+ "._26:\n"
+ " mov r2, #0x0\n"
+ " ldr r3, ._34 @ gSaveBlock1\n"
+ "._31:\n"
+ " mov r0, sp\n"
+ " add r1, r0, r2\n"
+ " add r0, r2, r3\n"
+ " ldrb r0, [r0]\n"
+ " strb r0, [r1]\n"
+ " add r0, r2, #1\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r2, r0, #0x18\n"
+ " cmp r2, #0x7\n"
+ " bls ._31 @cond_branch\n"
+ " bl SetupHipster\n"
+ " mov r2, #0x0\n"
+ " ldr r3, ._34 @ gSaveBlock1\n"
+ "._32:\n"
+ " add r1, r2, r3\n"
+ " mov r4, sp\n"
+ " add r0, r4, r2\n"
+ " ldrb r0, [r0]\n"
+ " strb r0, [r1]\n"
+ " add r0, r2, #1\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r2, r0, #0x18\n"
+ " cmp r2, #0x7\n"
+ " bls ._32 @cond_branch\n"
+ " b ._37\n"
+ "._35:\n"
+ " .align 2, 0\n"
+ "._34:\n"
+ " .word gSaveBlock1+0x2d8c\n"
+ "._27:\n"
+ " bl SetupTrader\n"
+ " b ._37\n"
+ "._28:\n"
+ " bl SetupStoryteller\n"
+ " b ._37\n"
+ "._29:\n"
+ " bl SetupGiddy\n"
+ "._37:\n"
+ " bl sub_80F83D0\n"
+ " add sp, sp, #0x8\n"
+ " pop {r4}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "\n"
+ );
+}
+#endif
+
+u8 GetCurrentMauvilleOldMan(void)
{
struct MauvilleManCommon *common = &gSaveBlock1.mauvilleMan.common;
diff --git a/src/field/overworld.c b/src/field/overworld.c
index dcfa72cbb..397a28436 100644
--- a/src/field/overworld.c
+++ b/src/field/overworld.c
@@ -23,6 +23,7 @@
#include "link.h"
#include "load_save.h"
#include "main.h"
+#include "m4a.h"
#include "constants/maps.h"
#include "map_name_popup.h"
#include "menu.h"
@@ -60,6 +61,7 @@ struct UnkTVStruct
u32 tv_field_4;
};
+extern u8 gUnknown_020297ED;
extern u16 gUnknown_03004898;
extern u16 gUnknown_0300489C;
@@ -1104,6 +1106,68 @@ u8 sav1_map_get_battletype(void)
return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->battleType;
}
+#if DEBUG
+
+void debug_sub_8076B68(void);
+
+void debug_sub_80589D8(void);
+
+void debug_sub_8058A50(void);
+
+void CB2_InitTestMenu(void)
+{
+ m4aSoundVSyncOff();
+ SetVBlankCallback(NULL);
+ DmaFill32(3, 0, (void *) VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *) PLTT, PLTT_SIZE);
+ ResetPaletteFade();
+ ResetSpriteData();
+ ResetTasks();
+ ScanlineEffect_Stop();
+ Text_LoadWindowTemplate(&gWindowTemplate_81E6CE4);
+ InitMenuWindow(&gWindowTemplate_81E6CE4);
+ debug_sub_8076B68();
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ REG_IE |= 1;
+ REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP;
+ m4aSoundVSyncOn();
+ SetVBlankCallback(debug_sub_8058A50);
+ m4aSongNumStart(0x19D);
+ SetMainCallback2(debug_sub_80589D8);
+}
+
+void debug_sub_80589D8(void)
+{
+ if (UpdatePaletteFade())
+ return;
+
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+}
+
+void debug_sub_80589F4(void)
+{
+ if (UpdatePaletteFade())
+ return;
+
+ SetVBlankCallback(NULL);
+
+ DmaFill32(3, 0, (void *) VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *) PLTT, PLTT_SIZE);
+
+ SetMainCallback2(gMain.savedCallback);
+}
+
+void debug_sub_8058A50(void)
+{
+ ProcessSpriteCopyRequests();
+ LoadOam();
+ TransferPlttBuffer();
+}
+
+#endif
+
void ResetSafariZoneFlag_(void)
{
ResetSafariZoneFlag();
@@ -1208,6 +1272,33 @@ void CB2_NewGame(void)
SetMainCallback2(c2_overworld);
}
+#if DEBUG
+
+extern void (*gFieldCallback)(void);
+
+void debug_sub_8058C00(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ ResetSafariZoneFlag_();
+ player_avatar_init_params_reset();
+ PlayTimeCounter_Start();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+
+ if (gMain.heldKeys & R_BUTTON)
+ gFieldCallback = ExecuteTruckSequence;
+ else
+ gFieldCallback = sub_8080B60;
+
+ do_load_map_stuff_loop(&gMain.state);
+ SetFieldVBlankCallback();
+ set_callback1(c1_overworld);
+ SetMainCallback2(c2_overworld);
+}
+
+#endif
+
void CB2_WhiteOut(void)
{
u8 val;
@@ -1363,6 +1454,10 @@ void CB2_ContinueSavedGame(void)
{
FieldClearVBlankHBlankCallbacks();
StopMapMusic();
+#if DEBUG
+ if (gMain.heldKeys & R_BUTTON)
+ gUnknown_020297ED = TRUE;
+#endif
ResetSafariZoneFlag_();
LoadSaveblockMapHeader();
LoadSaveblockMapObjScripts();
diff --git a/src/field/party_menu.c b/src/field/party_menu.c
index f55ed669d..66e7e2319 100644
--- a/src/field/party_menu.c
+++ b/src/field/party_menu.c
@@ -94,9 +94,9 @@ static void SpriteCB_UpdateHeldItemIconPosition(struct Sprite *sprite);
static void ItemUseMoveMenu_HandleMoveSelection(u8 taskId);
static void ItemUseMoveMenu_HandleCancel(u8 taskId);
static bool8 SetupDefaultPartyMenu(void);
-static void sub_806B4A8(void);
-static void VBlankCB_PartyMenu(void);
-static bool8 LoadPartyMenuGraphics(u8 a);
+/*static*/ void sub_806B4A8(void);
+/*static*/ void VBlankCB_PartyMenu(void);
+/*static*/ bool8 LoadPartyMenuGraphics(u8 a);
static void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d);
static void sub_806BB9C(u8 a);
static void sub_806BBEC(u8 a);
@@ -493,6 +493,71 @@ extern const u8 gStatusPal_Icons[];
#define WINDOW_RIGHT (29)
#endif
+#if DEBUG
+__attribute__((naked))
+void CB2_PartyMenuMain(void)
+{
+ asm("\
+ push {r4, r5, r6, lr}\n\
+ add sp, sp, #0xfffffffc\n\
+ bl AnimateSprites\n\
+ bl BuildOamBuffer\n\
+ ldr r0, ._3 @ gPartyMenuType\n\
+ ldrb r1, [r0]\n\
+ lsl r0, r1, #0x1\n\
+ add r0, r0, r1\n\
+ lsl r0, r0, #0x4\n\
+ ldr r1, ._3 + 4 @ PartyMonTextSettings\n\
+ add r5, r0, r1\n\
+ mov r6, #0x0\n\
+._1:\n\
+ ldrb r0, [r5]\n\
+ lsl r0, r0, #0x3\n\
+ ldrb r1, [r5, #0x1]\n\
+ lsl r1, r1, #0x3\n\
+ ldr r2, [r5, #0x4]\n\
+ lsl r3, r6, #0x5\n\
+ mov r4, #0x80\n\
+ lsl r4, r4, #0x2\n\
+ orr r3, r3, r4\n\
+ str r3, [sp]\n\
+ mov r3, #0x0\n\
+ bl DrawPartyMenuMonText\n\
+ add r5, r5, #0x8\n\
+ add r6, r6, #0x1\n\
+ cmp r6, #0x5\n\
+ ble ._1 @cond_branch\n\
+ bl RunTasks\n\
+ bl UpdatePaletteFade\n\
+ ldr r0, ._3 + 8 @ gLinkOpen\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0x1\n\
+ bne ._2 @cond_branch\n\
+ ldr r0, ._3 + 12 @ gLink\n\
+ ldr r1, ._3 + 16 @ 0xfbd\n\
+ add r0, r0, r1\n\
+ ldrb r0, [r0]\n\
+ mov r1, #0x2\n\
+ str r1, [sp]\n\
+ mov r1, #0x1\n\
+ mov r2, #0x1\n\
+ mov r3, #0x2\n\
+ bl debug_sub_8008264\n\
+._2:\n\
+ add sp, sp, #0x4\n\
+ pop {r4, r5, r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+._4:\n\
+ .align 2, 0\n\
+._3:\n\
+ .word gPartyMenuType\n\
+ .word PartyMonTextSettings\n\
+ .word gLinkOpen\n\
+ .word gLink\n\
+ .word 0xfbd");
+}
+#else
void CB2_PartyMenuMain(void)
{
const struct PartyMonTextSettingsStruct *textSettings;
@@ -517,6 +582,7 @@ void CB2_PartyMenuMain(void)
RunTasks();
UpdatePaletteFade();
}
+#endif
void VBlankCB_PartyMenu(void)
{
@@ -621,6 +687,425 @@ bool8 SetupDefaultPartyMenu(void)
return FALSE;
}
+#if DEBUG
+__attribute__((naked))
+bool8 InitPartyMenu(void)
+{
+ asm("\
+ push {r4, r5, r6, r7, lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ add sp, sp, #0xfffffff4\n\
+ ldr r0, ._55 @ gMain\n\
+ ldr r1, ._55 + 4 @ 0x43c\n\
+ add r0, r0, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0x11\n\
+ bls ._53 @cond_branch\n\
+ b ._125\n\
+._53:\n\
+ lsl r0, r0, #0x2\n\
+ ldr r1, ._55 + 8 @ \n\
+ add r0, r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+._56:\n\
+ .align 2, 0\n\
+._55:\n\
+ .word gMain\n\
+ .word 0x43c\n\
+ .word ._57\n\
+._57:\n\
+ .word ._58\n\
+ .word ._59\n\
+ .word ._60\n\
+ .word ._61\n\
+ .word ._62\n\
+ .word ._63\n\
+ .word ._64\n\
+ .word ._65\n\
+ .word ._66\n\
+ .word ._67\n\
+ .word ._68\n\
+ .word ._69\n\
+ .word ._70\n\
+ .word ._71\n\
+ .word ._72\n\
+ .word ._73\n\
+ .word ._74\n\
+ .word ._75\n\
+._58:\n\
+ mov r0, #0x0\n\
+ bl SetVBlankCallback\n\
+ mov r3, #0xc0\n\
+ lsl r3, r3, #0x13\n\
+ mov r4, #0xc0\n\
+ lsl r4, r4, #0x9\n\
+ add r2, sp, #0x8\n\
+ mov r8, r2\n\
+ add r2, sp, #0x4\n\
+ mov r6, #0x0\n\
+ ldr r1, ._78 @ 0x40000d4\n\
+ mov r5, #0x80\n\
+ lsl r5, r5, #0x5\n\
+ ldr r7, ._78 + 4 @ 0x81000800\n\
+ mov r0, #0x81\n\
+ lsl r0, r0, #0x18\n\
+ mov ip, r0\n\
+._76:\n\
+ strh r6, [r2]\n\
+ add r0, sp, #0x4\n\
+ str r0, [r1]\n\
+ str r3, [r1, #0x4]\n\
+ str r7, [r1, #0x8]\n\
+ ldr r0, [r1, #0x8]\n\
+ add r3, r3, r5\n\
+ sub r4, r4, r5\n\
+ cmp r4, r5\n\
+ bhi ._76 @cond_branch\n\
+ strh r6, [r2]\n\
+ add r2, sp, #0x4\n\
+ str r2, [r1]\n\
+ str r3, [r1, #0x4]\n\
+ lsr r0, r4, #0x1\n\
+ mov r3, ip\n\
+ orr r0, r0, r3\n\
+ str r0, [r1, #0x8]\n\
+ ldr r0, [r1, #0x8]\n\
+ mov r0, #0xe0\n\
+ lsl r0, r0, #0x13\n\
+ mov r3, #0x80\n\
+ lsl r3, r3, #0x3\n\
+ mov r4, #0x0\n\
+ str r4, [sp, #0x8]\n\
+ ldr r2, ._78 @ 0x40000d4\n\
+ mov r1, r8\n\
+ str r1, [r2]\n\
+ str r0, [r2, #0x4]\n\
+ lsr r0, r3, #0x2\n\
+ mov r1, #0x85\n\
+ lsl r1, r1, #0x18\n\
+ orr r0, r0, r1\n\
+ str r0, [r2, #0x8]\n\
+ ldr r0, [r2, #0x8]\n\
+ mov r1, #0xa0\n\
+ lsl r1, r1, #0x13\n\
+ add r0, sp, #0x4\n\
+ strh r4, [r0]\n\
+ str r0, [r2]\n\
+ str r1, [r2, #0x4]\n\
+ lsr r3, r3, #0x1\n\
+ mov r0, #0x81\n\
+ lsl r0, r0, #0x18\n\
+ orr r3, r3, r0\n\
+ str r3, [r2, #0x8]\n\
+ ldr r0, [r2, #0x8]\n\
+ ldr r2, ._78 + 8 @ gPaletteFade\n\
+ ldrb r0, [r2, #0x8]\n\
+ mov r1, #0x80\n\
+ orr r0, r0, r1\n\
+ strb r0, [r2, #0x8]\n\
+ ldr r1, ._78 + 12 @ gMain\n\
+ ldr r2, ._78 + 16 @ 0x43c\n\
+ add r1, r1, r2\n\
+ b ._122\n\
+._79:\n\
+ .align 2, 0\n\
+._78:\n\
+ .word 0x40000d4\n\
+ .word 0x81000800\n\
+ .word gPaletteFade\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._59:\n\
+ bl ScanlineEffect_Stop\n\
+ b ._115\n\
+._60:\n\
+ bl sub_806B4A8\n\
+ ldr r1, ._82 @ \n\
+ mov r2, #0x99\n\
+ lsl r2, r2, #0x2\n\
+ add r0, r1, r2\n\
+ mov r2, #0x0\n\
+ strh r2, [r0]\n\
+ ldr r3, ._82 + 4 @ \n\
+ add r0, r1, r3\n\
+ strh r2, [r0]\n\
+ mov r0, #0x9a\n\
+ lsl r0, r0, #0x2\n\
+ add r1, r1, r0\n\
+ strh r2, [r1]\n\
+ ldr r1, ._82 + 8 @ \n\
+ ldr r2, ._82 + 12 @ \n\
+ add r1, r1, r2\n\
+ b ._122\n\
+._83:\n\
+ .align 2, 0\n\
+._82:\n\
+ .word +0x201b000\n\
+ .word 0x266\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._61:\n\
+ bl ResetSpriteData\n\
+ b ._115\n\
+._62:\n\
+ ldr r0, ._88 @ \n\
+ mov r1, #0x96\n\
+ lsl r1, r1, #0x2\n\
+ add r0, r0, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0x1\n\
+ beq ._86 @cond_branch\n\
+ cmp r0, #0x5\n\
+ beq ._86 @cond_branch\n\
+ bl ResetTasks\n\
+._86:\n\
+ ldr r1, ._88 + 4 @ \n\
+ ldr r2, ._88 + 8 @ \n\
+ add r1, r1, r2\n\
+ b ._122\n\
+._89:\n\
+ .align 2, 0\n\
+._88:\n\
+ .word +0x201b000\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._63:\n\
+ bl FreeAllSpritePalettes\n\
+ b ._115\n\
+._64:\n\
+ ldr r4, ._92 @ \n\
+ mov r1, #0x97\n\
+ lsl r1, r1, #0x2\n\
+ add r0, r4, r1\n\
+ ldr r0, [r0]\n\
+ mov r1, #0x0\n\
+ bl CreateTask\n\
+ mov r2, #0x98\n\
+ lsl r2, r2, #0x2\n\
+ add r1, r4, r2\n\
+ strb r0, [r1]\n\
+ b ._115\n\
+._93:\n\
+ .align 2, 0\n\
+._92:\n\
+ .word +0x201b000\n\
+._65:\n\
+ ldr r0, ._95 @ gWindowTemplate_81E6C90\n\
+ bl Text_LoadWindowTemplate\n\
+ ldr r1, ._95 + 4 @ gMain\n\
+ ldr r0, ._95 + 8 @ 0x43c\n\
+ add r1, r1, r0\n\
+ b ._122\n\
+._96:\n\
+ .align 2, 0\n\
+._95:\n\
+ .word gWindowTemplate_81E6C90\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._66:\n\
+ ldr r4, ._98 @ gUnknown_03004210\n\
+ ldr r1, ._98 + 4 @ gWindowTemplate_81E6C90\n\
+ add r0, r4, #0\n\
+ bl Text_InitWindowWithTemplate\n\
+ add r0, r4, #0\n\
+ mov r1, #0x1\n\
+ bl MultistepInitWindowTileData\n\
+ ldr r1, ._98 + 8 @ gMain\n\
+ ldr r2, ._98 + 12 @ 0x43c\n\
+ add r1, r1, r2\n\
+ b ._122\n\
+._99:\n\
+ .align 2, 0\n\
+._98:\n\
+ .word gUnknown_03004210\n\
+ .word gWindowTemplate_81E6C90\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._67:\n\
+ bl MultistepLoadFont\n\
+ cmp r0, #0\n\
+ bne ._100 @cond_branch\n\
+ b ._125\n\
+._100:\n\
+ ldr r0, ._103 @ \n\
+ mov r3, #0x99\n\
+ lsl r3, r3, #0x2\n\
+ add r0, r0, r3\n\
+ mov r1, #0x1\n\
+ strh r1, [r0]\n\
+ ldr r1, ._103 + 4 @ \n\
+ ldr r0, ._103 + 8 @ \n\
+ add r1, r1, r0\n\
+ b ._122\n\
+._104:\n\
+ .align 2, 0\n\
+._103:\n\
+ .word +0x201b000\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._68:\n\
+ ldr r0, ._107 @ \n\
+ mov r1, #0x99\n\
+ lsl r1, r1, #0x2\n\
+ add r4, r0, r1\n\
+ ldrb r0, [r4]\n\
+ bl LoadPartyMenuGraphics\n\
+ lsl r0, r0, #0x18\n\
+ lsr r0, r0, #0x18\n\
+ cmp r0, #0x1\n\
+ bne ._105 @cond_branch\n\
+ mov r0, #0x0\n\
+ strh r0, [r4]\n\
+ ldr r1, ._107 + 4 @ \n\
+ ldr r2, ._107 + 8 @ \n\
+ add r1, r1, r2\n\
+ b ._122\n\
+._108:\n\
+ .align 2, 0\n\
+._107:\n\
+ .word +0x201b000\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._105:\n\
+ ldrh r0, [r4]\n\
+ add r0, r0, #0x1\n\
+ strh r0, [r4]\n\
+ b ._125\n\
+._69:\n\
+ bl sub_809D51C\n\
+ b ._115\n\
+._70:\n\
+ ldr r2, ._113 @ PartyMenuHandlers\n\
+ ldr r0, ._113 + 4 @ \n\
+ mov r1, #0x96\n\
+ lsl r1, r1, #0x2\n\
+ add r0, r0, r1\n\
+ ldrb r1, [r0]\n\
+ lsl r0, r1, #0x1\n\
+ add r0, r0, r1\n\
+ lsl r0, r0, #0x2\n\
+ add r2, r2, #0x4\n\
+ add r0, r0, r2\n\
+ ldr r0, [r0]\n\
+ bl _call_via_r0\n\
+ lsl r0, r0, #0x18\n\
+ lsr r0, r0, #0x18\n\
+ cmp r0, #0x1\n\
+ bne ._125 @cond_branch\n\
+ ldr r1, ._113 + 8 @ \n\
+ ldr r2, ._113 + 12 @ \n\
+ add r1, r1, r2\n\
+ b ._122\n\
+._114:\n\
+ .align 2, 0\n\
+._113:\n\
+ .word PartyMenuHandlers\n\
+ .word +0x201b000\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._71:\n\
+ ldr r0, ._116 @ gWindowTemplate_81E6CC8\n\
+ bl MultistepInitMenuWindowBegin\n\
+ b ._115\n\
+._117:\n\
+ .align 2, 0\n\
+._116:\n\
+ .word gWindowTemplate_81E6CC8\n\
+._72:\n\
+ bl MultistepInitMenuWindowContinue\n\
+ cmp r0, #0\n\
+ beq ._125 @cond_branch\n\
+ ldr r1, ._120 @ gMain\n\
+ ldr r0, ._120 + 4 @ 0x43c\n\
+ add r1, r1, r0\n\
+ b ._122\n\
+._121:\n\
+ .align 2, 0\n\
+._120:\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._73:\n\
+ ldr r0, ._123 @ \n\
+ ldr r1, ._123 + 4 @ \n\
+ add r0, r0, r1\n\
+ ldrb r0, [r0]\n\
+ mov r1, #0x0\n\
+ bl PrintPartyMenuPromptText\n\
+ ldr r1, ._123 + 8 @ \n\
+ ldr r2, ._123 + 12 @ \n\
+ add r1, r1, r2\n\
+ b ._122\n\
+._124:\n\
+ .align 2, 0\n\
+._123:\n\
+ .word +0x201b000\n\
+ .word 0x259\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._74:\n\
+ mov r0, #0x1\n\
+ neg r0, r0\n\
+ mov r1, #0x0\n\
+ str r1, [sp]\n\
+ mov r2, #0x10\n\
+ mov r3, #0x0\n\
+ bl BeginNormalPaletteFade\n\
+ ldr r2, ._126 @ gPaletteFade\n\
+ ldrb r1, [r2, #0x8]\n\
+ mov r0, #0x7f\n\
+ and r0, r0, r1\n\
+ strb r0, [r2, #0x8]\n\
+._115:\n\
+ ldr r1, ._126 + 4 @ gMain\n\
+ ldr r3, ._126 + 8 @ 0x43c\n\
+ add r1, r1, r3\n\
+._122:\n\
+ ldrb r0, [r1]\n\
+ add r0, r0, #0x1\n\
+ strb r0, [r1]\n\
+ b ._125\n\
+._127:\n\
+ .align 2, 0\n\
+._126:\n\
+ .word gPaletteFade\n\
+ .word gMain\n\
+ .word 0x43c\n\
+._75:\n\
+ ldr r0, ._130 @ VBlankCB_PartyMenu\n\
+ bl SetVBlankCallback\n\
+ ldr r0, ._130 + 4 @ gLinkOpen\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0x1\n\
+ bne ._128 @cond_branch\n\
+ ldr r0, ._130 + 8 @ 0x600e5e0\n\
+ mov r1, #0x80\n\
+ lsl r1, r1, #0x8\n\
+ ldr r2, ._130 + 12 @ 0x6007800\n\
+ mov r3, #0x2\n\
+ bl debug_sub_8008218\n\
+._128:\n\
+ mov r0, #0x1\n\
+ b ._129\n\
+._131:\n\
+ .align 2, 0\n\
+._130:\n\
+ .word VBlankCB_PartyMenu+1\n\
+ .word gLinkOpen\n\
+ .word 0x600e5e0\n\
+ .word 0x6007800\n\
+._125:\n\
+ mov r0, #0x0\n\
+._129:\n\
+ add sp, sp, #0xc\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4, r5, r6, r7}\n\
+ pop {r1}\n\
+ bx r1");
+}
+#else
bool8 InitPartyMenu(void)
{
switch (gMain.state)
@@ -728,6 +1213,7 @@ bool8 InitPartyMenu(void)
return FALSE;
}
+#endif
void CB2_InitPartyMenu(void)
{
@@ -4007,6 +4493,10 @@ void TeachMonTMMove(u8 taskId, u16 move, TaskFunc func)
CreateTask(Task_TeamMonTMMove, 5);
}
+#if DEBUG
+extern u8 gUnknown_020297ED;
+#endif
+
void Task_TeamMonTMMove(u8 taskId)
{
GetMonNickname(ewram1C000.pokemon, gStringVar1);
@@ -4021,7 +4511,11 @@ void Task_TeamMonTMMove(u8 taskId)
}
else
{
- if (!CanMonLearnTMHM(ewram1C000.pokemon, ewram1C000.unk6 - 33))
+ if (
+#if DEBUG
+ !gUnknown_020297ED &&
+#endif
+ !CanMonLearnTMHM(ewram1C000.pokemon, ewram1C000.unk6 - 33))
{
StringExpandPlaceholders(gStringVar4, gOtherText_NotCompatible);
sub_806E834(gStringVar4, 1);
@@ -4751,7 +5245,8 @@ void DoPPUpItemEffect(u8 taskId, u16 b, TaskFunc c)
gMain.newKeys = 0;
}
-static const u8 *const StatNames[] = {
+static const u8 *const StatNames[] =
+{
gOtherText_HP,
gOtherText_Attack,
gOtherText_Defense,
@@ -4760,7 +5255,8 @@ static const u8 *const StatNames[] = {
gOtherText_Speed,
};
-static const u8 StatDataTypes[] = {
+static const u8 StatDataTypes[] =
+{
MON_DATA_MAX_HP,
MON_DATA_ATK,
MON_DATA_DEF,
@@ -4768,6 +5264,17 @@ static const u8 StatDataTypes[] = {
MON_DATA_SPDEF,
MON_DATA_SPEED,
};
+
+#if DEBUG
+
+const u8 gUnknown_Debug_839B6CE[] = {0x40, 0, 0, 0, 0x44, 0, 0xFF, 0, 0, 0};
+
+const u8 gUnknown_Debug_839B6D8[] = _(
+ "{STR_VAR_1}かい じっこう\n"
+ "{STR_VAR_2}たんいじかん しょうひ");
+
+#endif
+
void DoRareCandyItemEffect(u8 taskId, u16 b, TaskFunc c)
{
u8 i;
@@ -5499,9 +6006,13 @@ _08070F8A:\n\
}
#endif // NONMATCHING
+
+// Maybe this goes in start_menu.c
+#if !DEBUG
void unref_sub_8070F90(void)
{
FlagSet(FLAG_SYS_POKEDEX_GET);
FlagSet(FLAG_SYS_POKEMON_GET);
FlagSet(FLAG_SYS_POKENAV_GET);
}
+#endif
diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c
index e08a65f49..b4be44aa2 100644
--- a/src/field/pokeblock.c
+++ b/src/field/pokeblock.c
@@ -91,7 +91,8 @@ static const u8 *gUnknown_03000758;
#define GFX_TAG_POKEBLOCK_CASE 14800
-const s8 gPokeblockFlavorCompatibilityTable[] = {
+const s8 gPokeblockFlavorCompatibilityTable[] =
+{
// Cool, Beauty, Cute, Smart, Tough
0, 0, 0, 0, 0, // Hardy
1, 0, 0, 0, -1, // Lonely
@@ -120,14 +121,16 @@ const s8 gPokeblockFlavorCompatibilityTable[] = {
0, 0, 0, 0, 0 // Quirky
};
-void (*const gUnknown_083F7EA8[])(void) = {
+void (*const gUnknown_083F7EA8[])(void) =
+{
sub_80A5B40,
c2_exit_to_overworld_2_switch,
sub_802E424,
c2_exit_to_overworld_2_switch
};
-const u8 *const gPokeblockNames[] = {
+const u8 *const gPokeblockNames[] =
+{
NULL,
ContestStatsText_RedPokeBlock,
ContestStatsText_BluePokeBlock,
@@ -145,7 +148,8 @@ const u8 *const gPokeblockNames[] = {
ContestStatsText_GoldPokeBlock
};
-const struct MenuAction2 gUnknown_083F7EF4[] = {
+const struct MenuAction2 gUnknown_083F7EF4[] =
+{
{OtherText_Use, sub_810C508},
{OtherText_Toss, sub_810C5C0},
{gOtherText_CancelNoTerminator, sub_810C748},
@@ -161,21 +165,25 @@ const struct YesNoFuncTable gUnknown_083F7F24 = {sub_810C610, sub_810C668};
const u8 UnreferencedData_083F7F2C[] = {0x16, 0x17, 0x18, 0x21, 0x2f};
-const struct OamData gOamData_83F7F34 = {
+const struct OamData gOamData_83F7F34 =
+{
.size = 3,
.priority = 2
};
-const union AnimCmd gSpriteAnim_83F7F3C[] = {
+const union AnimCmd gSpriteAnim_83F7F3C[] =
+{
ANIMCMD_FRAME(.imageValue = 0, .duration = 0),
ANIMCMD_END
};
-const union AnimCmd *const gSpriteAnimTable_83F7F44[] = {
+const union AnimCmd *const gSpriteAnimTable_83F7F44[] =
+{
gSpriteAnim_83F7F3C
};
-const union AffineAnimCmd gSpriteAffineAnim_83F7F48[] = {
+const union AffineAnimCmd gSpriteAffineAnim_83F7F48[] =
+{
AFFINEANIMCMD_FRAME(0, 0, -2, 2),
AFFINEANIMCMD_FRAME(0, 0, 2, 4),
AFFINEANIMCMD_FRAME(0, 0, -2, 4),
@@ -183,22 +191,26 @@ const union AffineAnimCmd gSpriteAffineAnim_83F7F48[] = {
AFFINEANIMCMD_END
};
-const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7F70[] = {
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7F70[] =
+{
gSpriteAffineAnim_83F7F48
};
-const struct CompressedSpriteSheet gUnknown_083F7F74 = {
+const struct CompressedSpriteSheet gUnknown_083F7F74 =
+{
gMenuPokeblockDevice_Gfx,
0x800,
GFX_TAG_POKEBLOCK_CASE
};
-const struct CompressedSpritePalette gUnknown_083F7F7C = {
+const struct CompressedSpritePalette gUnknown_083F7F7C =
+{
gMenuPokeblockDevice_Pal,
GFX_TAG_POKEBLOCK_CASE
};
-const struct SpriteTemplate gSpriteTemplate_83F7F84 = {
+const struct SpriteTemplate gSpriteTemplate_83F7F84 =
+{
GFX_TAG_POKEBLOCK_CASE,
GFX_TAG_POKEBLOCK_CASE,
&gOamData_83F7F34,
@@ -208,12 +220,25 @@ const struct SpriteTemplate gSpriteTemplate_83F7F84 = {
SpriteCallbackDummy
};
-const struct Pokeblock gUnknown_083F7F9C[] = {
- { PBLOCK_CLR_RED, 20, 0, 0, 0, 0, 20},
- { PBLOCK_CLR_BLUE, 0, 20, 0, 0, 0, 20},
- { PBLOCK_CLR_PINK, 0, 0, 20, 0, 0, 20},
- { PBLOCK_CLR_GREEN, 0, 0, 0, 20, 0, 20},
- { PBLOCK_CLR_YELLOW, 0, 0, 0, 0, 20, 20}
+const struct Pokeblock gUnknown_083F7F9C[] =
+{
+ { PBLOCK_CLR_RED, 20, 0, 0, 0, 0, 20 },
+ { PBLOCK_CLR_BLUE, 0, 20, 0, 0, 0, 20 },
+ { PBLOCK_CLR_PINK, 0, 0, 20, 0, 0, 20 },
+ { PBLOCK_CLR_GREEN, 0, 0, 0, 20, 0, 20 },
+ { PBLOCK_CLR_YELLOW, 0, 0, 0, 0, 20, 20 },
+#if DEBUG
+ { PBLOCK_CLR_PURPLE, 20, 0, 20, 0, 0, 20 },
+ { PBLOCK_CLR_INDIGO, 0, 20, 0, 20, 0, 20 },
+ { PBLOCK_CLR_BROWN, 0, 0, 20, 0, 20, 20 },
+ { PBLOCK_CLR_LITEBLUE, 20, 0, 0, 20, 0, 20 },
+ { PBLOCK_CLR_OLIVE, 0, 20, 0, 0, 20, 20 },
+ { PBLOCK_CLR_GRAY, 0, 2, 0, 2, 2, 0 },
+ { PBLOCK_CLR_BLACK, 3, 3, 3, 4, 3, 0 },
+ { PBLOCK_CLR_WHITE, 1, 1, 1, 1, 1, 1 },
+ { PBLOCK_CLR_GOLD, 20, 0, 0, 0, 0, 20 },
+ { 0 },
+#endif
};
// text
@@ -424,14 +449,13 @@ void OpenPokeblockCaseOnFeeder(void)
SetMainCallback2(sub_810B96C);
}
-#ifdef DEBUG
+#if DEBUG
void debug_sub_8120F98(void)
{
u8 i;
- for (i=0; i<40 && gUnknown_083F7F9C[i].color != 0; i++)
- {
+
+ for (i = 0; i < 40 && gUnknown_083F7F9C[i].color != 0; i++)
gSaveBlock1.pokeblocks[i] = gUnknown_083F7F9C[i];
- }
}
#endif
diff --git a/src/field/region_map.c b/src/field/region_map.c
index 1378820fe..7bfda1a81 100644
--- a/src/field/region_map.c
+++ b/src/field/region_map.c
@@ -280,7 +280,7 @@ static u16 sub_80FB9C0(u16);
static void sub_80FBA18(void);
static bool8 sub_80FBAA0(u16);
void CreateRegionMapCursor(u16, u16);
-static void sub_80FBCA0(void);
+void sub_80FBCA0(void);
static void sub_80FBDF8(void);
static void sub_80FBE24(void);
static void SpriteCB_PlayerIconZoomedOut(struct Sprite *);
@@ -288,8 +288,8 @@ static void UpdateIconBlink(struct Sprite *);
static void SpriteCB_PlayerIconZoomedIn(struct Sprite *);
const u8 *GetMapSectionName(u8 *, u16, u16);
static void VBlankCB_FlyRegionMap(void);
-static void CB2_FlyRegionMap(void);
-static void sub_80FC244(void (*func)(void));
+void CB2_FlyRegionMap(void);
+void sub_80FC244(void (*func)(void));
static void PrintFlyTargetName(void);
static void CreateFlyTargetGraphics(void);
static void CreateCityTownFlyTargetIcons(void);
@@ -297,7 +297,7 @@ static void CreateSpecialAreaFlyTargetIcons(void);
static void SpriteCB_FlyTargetIcons(struct Sprite *);
static void sub_80FC5B4(void);
static void sub_80FC600(void);
-static void sub_80FC69C(void);
+void sub_80FC69C(void);
void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed)
{
@@ -1127,7 +1127,7 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag)
}
}
-static void sub_80FBCA0(void)
+void sub_80FBCA0(void)
{
if (gRegionMap->cursorSprite != NULL)
{
@@ -1420,7 +1420,7 @@ struct UnknownStruct4
static const u8 *const sEverGrandeCityAreaNames[] = {OtherText_PokeLeague, OtherText_PokeCenter};
-static const struct UnknownStruct4 sUnknown_083E79C0[1] =
+const struct UnknownStruct4 gUnknown_083E79C0[1] =
{
{sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, FLAG_SYS_POKEMON_LEAGUE_FLY},
};
@@ -1591,14 +1591,14 @@ static void VBlankCB_FlyRegionMap(void)
TransferPlttBuffer();
}
-static void CB2_FlyRegionMap(void)
+void CB2_FlyRegionMap(void)
{
ewram0_3.unk0();
AnimateSprites();
BuildOamBuffer();
}
-static void sub_80FC244(void (*func)(void))
+void sub_80FC244(void (*func)(void))
{
ewram0_3.unk0 = func;
ewram0_3.unk4 = 0;
@@ -1611,9 +1611,9 @@ static void PrintFlyTargetName(void)
u16 i;
bool32 drawFrameDisabled = FALSE;
- for (i = 0; i < ARRAY_COUNT(sUnknown_083E79C0); i++)
+ for (i = 0; i < ARRAY_COUNT(gUnknown_083E79C0); i++)
{
- const struct UnknownStruct4 *r4 = &sUnknown_083E79C0[i];
+ const struct UnknownStruct4 *r4 = &gUnknown_083E79C0[i];
if (ewram0_3.regionMap.mapSectionId == r4->mapSectionId)
{
@@ -1795,7 +1795,7 @@ static void sub_80FC600(void)
}
}
-static void sub_80FC69C(void)
+void sub_80FC69C(void)
{
switch (ewram0_3.unk4)
{
diff --git a/src/field/roamer.c b/src/field/roamer.c
index 2eb26ef9d..6ed5b6c89 100644
--- a/src/field/roamer.c
+++ b/src/field/roamer.c
@@ -1,7 +1,9 @@
#include "global.h"
+#include "debug.h"
#include "roamer.h"
#include "pokemon.h"
#include "random.h"
+#include "region_map.h"
#include "constants/species.h"
#ifdef SAPPHIRE
@@ -224,3 +226,20 @@ void GetRoamerLocation(u8 *mapGroup, u8 *mapNum)
*mapGroup = sRoamerLocation[MAP_GRP];
*mapNum = sRoamerLocation[MAP_NUM];
}
+
+#if DEBUG
+void debug_sub_814A714(void)
+{
+ if (gSaveBlock1.location.mapGroup == 0)
+ {
+ CreateInitialRoamerMon();
+ sRoamerLocation[0] = 0;
+ sRoamerLocation[1] = gSaveBlock1.location.mapNum;
+ }
+}
+
+void debug_sub_814A73C(u8* str)
+{
+ GetMapSectionName(str, sRoamerLocation[1], 0);
+}
+#endif
diff --git a/src/field/safari_zone.c b/src/field/safari_zone.c
index 6c7c8b391..f371b08b3 100644
--- a/src/field/safari_zone.c
+++ b/src/field/safari_zone.c
@@ -26,7 +26,7 @@ static void DecrementFeederStepCounters(void);
extern u8 gBattleOutcome;
EWRAM_DATA u8 gNumSafariBalls = 0;
-EWRAM_DATA static u16 gSafariZoneStepCounter = 0;
+EWRAM_DATA u16 gSafariZoneStepCounter = 0;
EWRAM_DATA static struct PokeblockFeeder gPokeblockFeeders[NUM_POKEBLOCK_FEEDERS] = {0};
extern void (*gFieldCallback)(void);
diff --git a/src/field/secret_base.c b/src/field/secret_base.c
index 2d02de004..8b67a2cd9 100644
--- a/src/field/secret_base.c
+++ b/src/field/secret_base.c
@@ -1648,6 +1648,178 @@ void sub_80BD610(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases
sub_80BD328(basesC, 0);
}
+#if DEBUG
+__attribute__((naked))
+void sub_80BD674(void *playerRecords, u32 size, u8 c)
+{
+ asm("\
+ push {r4, r5, r6, r7, lr}\n\
+ add r6, r0, #0\n\
+ add r5, r1, #0\n\
+ lsl r2, r2, #0x18\n\
+ lsr r7, r2, #0x18\n\
+ ldr r0, ._503 @ gUnknown_020297ED\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0\n\
+ bne ._498 @cond_branch\n\
+ mov r0, #0x60\n\
+ bl FlagGet\n\
+ lsl r0, r0, #0x18\n\
+ cmp r0, #0\n\
+ bne ._498 @cond_branch\n\
+ b ._520\n\
+._498:\n\
+ bl GetLinkPlayerCount\n\
+ lsl r0, r0, #0x18\n\
+ lsr r0, r0, #0x18\n\
+ cmp r0, #0x2\n\
+ beq ._500 @cond_branch\n\
+ cmp r0, #0x3\n\
+ beq ._501 @cond_branch\n\
+ b ._505\n\
+._504:\n\
+ .align 2, 0\n\
+._503:\n\
+ .word gUnknown_020297ED\n\
+._500:\n\
+ lsl r4, r5, #0x1\n\
+ add r0, r6, r4\n\
+ mov r1, #0x0\n\
+ add r2, r5, #0\n\
+ bl memset\n\
+ add r4, r4, r5\n\
+ add r4, r6, r4\n\
+ add r0, r4, #0\n\
+ mov r1, #0x0\n\
+ add r2, r5, #0\n\
+ bl memset\n\
+ b ._505\n\
+._501:\n\
+ lsl r0, r5, #0x1\n\
+ add r0, r0, r5\n\
+ add r0, r6, r0\n\
+ mov r1, #0x0\n\
+ add r2, r5, #0\n\
+ bl memset\n\
+._505:\n\
+ cmp r7, #0x1\n\
+ beq ._506 @cond_branch\n\
+ cmp r7, #0x1\n\
+ bgt ._507 @cond_branch\n\
+ cmp r7, #0\n\
+ beq ._508 @cond_branch\n\
+ b ._515\n\
+._507:\n\
+ cmp r7, #0x2\n\
+ beq ._510 @cond_branch\n\
+ cmp r7, #0x3\n\
+ beq ._511 @cond_branch\n\
+ b ._515\n\
+._508:\n\
+ add r0, r6, r5\n\
+ lsl r2, r5, #0x1\n\
+ add r1, r6, r2\n\
+ add r2, r2, r5\n\
+ add r2, r6, r2\n\
+ bl sub_80BD610\n\
+ b ._515\n\
+._506:\n\
+ lsl r1, r5, #0x1\n\
+ add r0, r6, r1\n\
+ add r1, r1, r5\n\
+ add r1, r6, r1\n\
+ add r2, r6, #0\n\
+ bl sub_80BD610\n\
+ b ._515\n\
+._510:\n\
+ lsl r0, r5, #0x1\n\
+ add r0, r0, r5\n\
+ add r0, r6, r0\n\
+ add r2, r6, r5\n\
+ add r1, r6, #0\n\
+ bl sub_80BD610\n\
+ b ._515\n\
+._511:\n\
+ add r1, r6, r5\n\
+ lsl r2, r5, #0x1\n\
+ add r2, r6, r2\n\
+ add r0, r6, #0\n\
+ bl sub_80BD610\n\
+._515:\n\
+ mov r3, #0x1\n\
+ ldr r6, ._521 @ gSaveBlock1\n\
+ mov r5, #0x10\n\
+ neg r5, r5\n\
+ ldr r4, ._521 + 4 @ 0x1a09\n\
+._517:\n\
+ lsl r0, r3, #0x2\n\
+ add r0, r0, r3\n\
+ lsl r0, r0, #0x5\n\
+ add r0, r0, r6\n\
+ add r2, r0, r4\n\
+ ldrb r1, [r2]\n\
+ lsl r0, r1, #0x1c\n\
+ lsr r0, r0, #0x1c\n\
+ cmp r0, #0x1\n\
+ bne ._516 @cond_branch\n\
+ mov r0, #0x3f\n\
+ and r0, r0, r1\n\
+ mov r1, #0x40\n\
+ orr r0, r0, r1\n\
+ and r0, r0, r5\n\
+ strb r0, [r2]\n\
+._516:\n\
+ add r0, r3, #1\n\
+ lsl r0, r0, #0x10\n\
+ lsr r3, r0, #0x10\n\
+ cmp r3, #0x13\n\
+ bls ._517 @cond_branch\n\
+ bl sub_80BD280\n\
+ mov r3, #0x1\n\
+ ldr r4, ._521 @ gSaveBlock1\n\
+ ldr r6, ._521 + 4 @ 0x1a09\n\
+ add r7, r4, #0\n\
+ mov r5, #0x3f\n\
+._519:\n\
+ lsl r0, r3, #0x2\n\
+ add r0, r0, r3\n\
+ lsl r0, r0, #0x5\n\
+ add r0, r0, r4\n\
+ add r2, r0, r6\n\
+ ldrb r1, [r2]\n\
+ lsr r0, r1, #0x6\n\
+ cmp r0, #0x2\n\
+ bne ._518 @cond_branch\n\
+ add r0, r5, #0\n\
+ and r0, r0, r1\n\
+ strb r0, [r2]\n\
+._518:\n\
+ add r0, r3, #1\n\
+ lsl r0, r0, #0x10\n\
+ lsr r3, r0, #0x10\n\
+ cmp r3, #0x13\n\
+ bls ._519 @cond_branch\n\
+ ldr r0, ._521 + 8 @ 0x1a16\n\
+ add r2, r7, r0\n\
+ ldrh r1, [r2]\n\
+ ldr r0, ._521 + 12 @ 0xffff\n\
+ cmp r1, r0\n\
+ beq ._520 @cond_branch\n\
+ add r0, r1, #1\n\
+ strh r0, [r2]\n\
+._520:\n\
+ pop {r4, r5, r6, r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+._522:\n\
+ .align 2, 0\n\
+._521:\n\
+ .word gSaveBlock1\n\
+ .word 0x1a09\n\
+ .word 0x1a16\n\
+ .word 0xffff");
+}
+#else
void sub_80BD674(void *playerRecords, u32 size, u8 c)
{
if (FlagGet(FLAG_RECEIVED_SECRET_POWER))
@@ -1706,3 +1878,4 @@ void sub_80BD674(void *playerRecords, u32 size, u8 c)
}
}
}
+#endif
diff --git a/src/field/shop.c b/src/field/shop.c
index a87c859b7..a197ca13d 100644
--- a/src/field/shop.c
+++ b/src/field/shop.c
@@ -1238,3 +1238,24 @@ void Shop_CreateDecorationShop2Menu(u16 *itemList)
SetShopItemsForSale(itemList);
SetShopMenuCallback(EnableBothScriptContexts);
}
+
+#if DEBUG
+__attribute__((naked))
+void debug_sub_80C2818(void)
+{
+ asm("\
+ push {lr}\n\
+ mov r0, #0x0\n\
+ bl CreateShopMenu\n\
+ ldr r0, ._290 @ gMartBuyNoSellOptionList\n\
+ bl SetShopItemsForSale\n\
+ mov r0, #0x0\n\
+ bl SetShopMenuCallback\n\
+ pop {r0}\n\
+ bx r0\n\
+._291:\n\
+ .align 2, 0\n\
+._290:\n\
+ .word gMartBuyNoSellOptionList+0x3");
+}
+#endif
diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c
index 21bf29e91..2c97c146d 100644
--- a/src/field/slot_machine.c
+++ b/src/field/slot_machine.c
@@ -17,7 +17,8 @@
#include "menu.h"
#include "ewram.h"
-struct UnkStruct1 {
+struct UnkStruct1
+{
/*0x00*/ u8 unk00;
/*0x01*/ u8 unk01;
/*0x02*/ s16 unk02;
@@ -29,6 +30,8 @@ struct UnkStruct1 {
#define SLOTMACHINE_GFX_TILES 236
#endif
+// TODO: figure out which functions are static and which are not.
+#define static
static void CB2_SlotMachineSetup(void);
static void CB2_SlotMachineLoop(void);
@@ -61,7 +64,7 @@ static bool8 sub_8102008(struct Task *task);
static bool8 sub_8102034(struct Task *task);
static bool8 sub_8102058(struct Task *task);
static bool8 sub_8102090(struct Task *task);
-static bool8 sub_81020C8(struct Task *task);
+bool8 sub_81020C8(struct Task *task);
static bool8 sub_81021E0(struct Task *task);
static bool8 sub_81021FC(struct Task *task);
static bool8 sub_8102264(struct Task *task);
@@ -76,6 +79,7 @@ static bool8 sub_81023E0(struct Task *task);
static bool8 sub_81023FC(struct Task *task);
static bool8 sub_8102424(struct Task *task);
static bool8 sub_8102460(struct Task *task);
+static bool8 debug_sub_8116E74(struct Task *);
static void sub_8102484(void);
static void sub_81024F0(void);
static bool8 sub_8102540(void);
@@ -222,6 +226,15 @@ static void sub_81064B8(void);
static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4);
static void sub_81065DC(void);
+#if DEBUG
+__attribute__((section(".bss"))) u8 unk_debug_bss_1_0 = 0;
+__attribute__((section(".bss"))) u8 unk_debug_bss_1_1 = 0;
+__attribute__((section(".bss"))) u8 unk_debug_bss_1_2 = 0;
+__attribute__((section(".bss"))) u8 unk_debug_bss_1_3 = 0;
+__attribute__((section(".bss"))) u8 unk_debug_bss_1_4 = 0;
+__attribute__((section(".bss"))) u32 unk_debug_bss_1_8 = 0;
+#endif
+
static const struct UnkStruct1 *const gUnknown_083ED048[];
static const u16 gPalette_83EDE24[];
static const u8 gUnknown_083ECD04[][3];
@@ -231,10 +244,22 @@ static const u16 gUnknown_083ECE48[];
void PlaySlotMachine(u8 arg0, MainCallback cb)
{
+#if DEBUG
+ unk_debug_bss_1_1 = 0;
+#endif
PlaySlotMachine_Internal(arg0, cb);
SetMainCallback2(CB2_SlotMachineSetup);
}
+#if DEBUG
+void debug_sub_811609C(u8 a, void (*func)(void))
+{
+ unk_debug_bss_1_1 = 1;
+ PlaySlotMachine_Internal(a, func);
+ SetMainCallback2(CB2_SlotMachineSetup);
+}
+#endif
+
static void CB2_SlotMachineSetup(void)
{
switch (gMain.state)
@@ -366,6 +391,135 @@ static void SlotMachineSetup_2_1(void)
static const s16 gUnknown_083ECCF8[][2];
+#if DEBUG
+__attribute__((naked))
+static void SlotMachineSetup_0_1(void)
+{
+ asm("\
+ push {r4, r5, r6, r7, lr}\n\
+ mov r7, sl\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5, r6, r7}\n\
+ bl sub_81019EC\n\
+ ldr r5, ._43 @ \n\
+ mov r4, #0x0\n\
+ strb r4, [r5]\n\
+ strb r4, [r5, #0x2]\n\
+ bl Random\n\
+ mov r1, #0x1\n\
+ and r1, r1, r0\n\
+ strb r1, [r5, #0x3]\n\
+ strb r4, [r5, #0x4]\n\
+ mov r0, #0x0\n\
+ strh r4, [r5, #0x8]\n\
+ strb r0, [r5, #0xa]\n\
+ strb r0, [r5, #0xb]\n\
+ ldr r0, ._43 + 4 @ \n\
+ ldr r1, ._43 + 8 @ \n\
+ add r0, r0, r1\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r5, #0xc]\n\
+ strh r4, [r5, #0xe]\n\
+ strh r4, [r5, #0x10]\n\
+ strh r4, [r5, #0x12]\n\
+ strh r4, [r5, #0x18]\n\
+ mov r0, #0x8\n\
+ strh r0, [r5, #0x1a]\n\
+ add r1, r5, #0\n\
+ add r1, r1, #0x58\n\
+ mov r0, #0xf0\n\
+ strh r0, [r1]\n\
+ add r1, r1, #0x2\n\
+ mov r0, #0xa0\n\
+ strh r0, [r1]\n\
+ add r0, r5, #0\n\
+ add r0, r0, #0x5c\n\
+ mov r1, #0x3f\n\
+ strh r1, [r0]\n\
+ add r0, r0, #0x2\n\
+ strh r1, [r0]\n\
+ bl GetCurrentMapMusic\n\
+ add r1, r5, #0\n\
+ add r1, r1, #0x60\n\
+ strh r0, [r1]\n\
+ mov r7, #0x0\n\
+ add r6, r5, #0\n\
+ ldr r2, ._43 + 12 @ \n\
+ mov sl, r2\n\
+ mov r0, #0x1c\n\
+ add r0, r0, r6\n\
+ mov r9, r0\n\
+._41:\n\
+ lsl r5, r7, #0x1\n\
+ mov r1, #0x22\n\
+ add r1, r1, r6\n\
+ mov r8, r1\n\
+ add r1, r5, r1\n\
+ mov r0, #0x0\n\
+ strh r0, [r1]\n\
+ add r4, r6, #0\n\
+ add r4, r4, #0x28\n\
+ add r4, r5, r4\n\
+ ldrb r0, [r6, #0x3]\n\
+ lsl r0, r0, #0x1\n\
+ lsl r1, r7, #0x2\n\
+ add r0, r0, r1\n\
+ add r0, r0, sl\n\
+ mov r2, #0x0\n\
+ ldsh r0, [r0, r2]\n\
+ mov r1, #0x15\n\
+ bl __modsi3\n\
+ strh r0, [r4]\n\
+ add r5, r5, r9\n\
+ mov r1, #0x0\n\
+ ldsh r0, [r4, r1]\n\
+ lsl r1, r0, #0x1\n\
+ add r1, r1, r0\n\
+ lsl r1, r1, #0x3\n\
+ mov r2, #0xfc\n\
+ lsl r2, r2, #0x1\n\
+ add r0, r2, #0\n\
+ sub r0, r0, r1\n\
+ strh r0, [r5]\n\
+ mov r1, #0x0\n\
+ ldsh r0, [r5, r1]\n\
+ add r1, r2, #0\n\
+ bl __modsi3\n\
+ strh r0, [r5]\n\
+ add r0, r7, #1\n\
+ lsl r0, r0, #0x18\n\
+ lsr r7, r0, #0x18\n\
+ cmp r7, #0x2\n\
+ bls ._41 @cond_branch\n\
+ bl debug_sub_811B5D0\n\
+ ldr r0, ._43 + 16 @ \n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0\n\
+ beq ._42 @cond_branch\n\
+ mov r1, r8\n\
+ sub r1, r1, #0x22\n\
+ mov r0, #0xfa\n\
+ lsl r0, r0, #0x2\n\
+ strh r0, [r1, #0xc]\n\
+._42:\n\
+ pop {r3, r4, r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov sl, r5\n\
+ pop {r4, r5, r6, r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+._44:\n\
+ .align 2, 0\n\
+._43:\n\
+ .word +0x2000000\n\
+ .word gSaveBlock1\n\
+ .word 0x494\n\
+ .word gUnknown_083ECCF8\n\
+ .word unk_debug_bss_1_1");
+}
+#else
static void SlotMachineSetup_0_1(void)
{
u8 i;
@@ -397,6 +551,7 @@ static void SlotMachineSetup_0_1(void)
eSlotMachine->unk1C[i] %= 0x1f8;
}
}
+#endif
static void SlotMachineSetup_3_0(void)
{
@@ -441,7 +596,8 @@ static void sub_8101D04(void)
sub_8101D24(CreateTask(sub_8101D24, 0));
}
-static bool8 (*const gUnknown_083ECAAC[])(struct Task *task) = {
+static bool8 (*const gUnknown_083ECAAC[])(struct Task *task) =
+{
sub_8101D5C,
sub_8101D8C,
sub_8101DB0,
@@ -470,7 +626,10 @@ static bool8 (*const gUnknown_083ECAAC[])(struct Task *task) = {
sub_81023E0,
sub_81023FC,
sub_8102424,
- sub_8102460
+ sub_8102460,
+#if DEBUG
+ debug_sub_8116E74,
+#endif
};
static void sub_8101D24(u8 taskId)
@@ -523,6 +682,46 @@ static bool8 sub_8101DF4(struct Task *task)
return FALSE;
}
+#if DEBUG
+__attribute__((naked))
+static bool8 sub_8101E10(struct Task *task)
+{
+ asm("\
+ push {lr}\n\
+ mov r0, #0x0\n\
+ bl sub_8104CAC\n\
+ ldr r2, ._70 @ \n\
+ mov r0, #0x5\n\
+ strb r0, [r2]\n\
+ ldr r0, ._70 + 4 @ \n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0\n\
+ beq ._67 @cond_branch\n\
+ ldr r0, ._70 + 8 @ \n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0\n\
+ bne ._69 @cond_branch\n\
+._67:\n\
+ mov r0, #0xc\n\
+ ldsh r1, [r2, r0]\n\
+ ldr r0, ._70 + 12 @ \n\
+ cmp r1, r0\n\
+ ble ._69 @cond_branch\n\
+ mov r0, #0x17\n\
+ strb r0, [r2]\n\
+._69:\n\
+ mov r0, #0x1\n\
+ pop {r1}\n\
+ bx r1\n\
+._71:\n\
+ .align 2, 0\n\
+._70:\n\
+ .word +0x2000000\n\
+ .word unk_debug_bss_1_1\n\
+ .word unk_debug_bss_1_4\n\
+ .word 0x270e");
+}
+#else
static bool8 sub_8101E10(struct Task *task)
{
sub_8104CAC(0);
@@ -533,7 +732,205 @@ static bool8 sub_8101E10(struct Task *task)
}
return TRUE;
}
+#endif
+#if DEBUG
+__attribute__((naked))
+static bool8 sub_8101E3C(struct Task *task)
+{
+ asm("\
+ push {r4, r5, lr}\n\
+ ldr r0, ._77 @ unk_debug_bss_1_1\n\
+ ldrb r1, [r0]\n\
+ add r3, r0, #0\n\
+ ldr r5, ._77 + 4 @ gMain\n\
+ cmp r1, #0\n\
+ beq ._76 @cond_branch\n\
+ ldr r2, ._77 + 8 @ unk_debug_bss_1_4\n\
+ ldrb r0, [r2]\n\
+ cmp r0, #0\n\
+ beq ._76 @cond_branch\n\
+ ldr r4, ._77 + 12 @ \n\
+ mov r1, #0xc\n\
+ ldsh r0, [r4, r1]\n\
+ cmp r0, #0x3\n\
+ ble ._74 @cond_branch\n\
+ ldrh r1, [r5, #0x2c]\n\
+ mov r0, #0x2\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._75 @cond_branch\n\
+._74:\n\
+ mov r0, #0x0\n\
+ strb r0, [r2]\n\
+ b ._76\n\
+._78:\n\
+ .align 2, 0\n\
+._77:\n\
+ .word unk_debug_bss_1_1\n\
+ .word gMain\n\
+ .word unk_debug_bss_1_4\n\
+ .word +0x2000000\n\
+._75:\n\
+ mov r0, #0x0\n\
+ bl sub_8103D50\n\
+ mov r0, #0x1\n\
+ bl sub_8103D50\n\
+ mov r0, #0x2\n\
+ bl sub_8103D50\n\
+ ldrh r0, [r4, #0xc]\n\
+ sub r0, r0, #0x3\n\
+ strh r0, [r4, #0xc]\n\
+ mov r0, #0x3\n\
+ strh r0, [r4, #0x12]\n\
+ mov r0, #0x9\n\
+ strb r0, [r4]\n\
+ b ._102\n\
+._76:\n\
+ ldrb r0, [r3]\n\
+ cmp r0, #0\n\
+ beq ._81 @cond_branch\n\
+ ldrh r1, [r5, #0x2e]\n\
+ mov r0, #0x8\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._81 @cond_branch\n\
+ bl debug_sub_811B620\n\
+ ldr r1, ._83 @ \n\
+ mov r0, #0x1d\n\
+ strb r0, [r1]\n\
+ b ._102\n\
+._84:\n\
+ .align 2, 0\n\
+._83:\n\
+ .word +0x2000000\n\
+._81:\n\
+ ldrh r1, [r5, #0x2e]\n\
+ mov r0, #0x4\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._85 @cond_branch\n\
+ mov r0, #0x0\n\
+ bl sub_8104AB8\n\
+ ldr r1, ._87 @ \n\
+ mov r0, #0x8\n\
+ strb r0, [r1]\n\
+ b ._102\n\
+._88:\n\
+ .align 2, 0\n\
+._87:\n\
+ .word +0x2000000\n\
+._85:\n\
+ mov r0, #0x80\n\
+ lsl r0, r0, #0x1\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._89 @cond_branch\n\
+ ldr r2, ._94 @ \n\
+ mov r3, #0xc\n\
+ ldsh r0, [r2, r3]\n\
+ sub r0, r0, #0x3\n\
+ mov r3, #0x12\n\
+ ldsh r1, [r2, r3]\n\
+ add r0, r0, r1\n\
+ cmp r0, #0\n\
+ blt ._90 @cond_branch\n\
+ ldrh r4, [r2, #0x12]\n\
+ add r0, r1, #0\n\
+ cmp r0, #0x2\n\
+ bgt ._91 @cond_branch\n\
+._92:\n\
+ lsl r0, r4, #0x18\n\
+ lsr r0, r0, #0x18\n\
+ bl sub_8103D50\n\
+ lsl r0, r4, #0x10\n\
+ mov r2, #0x80\n\
+ lsl r2, r2, #0x9\n\
+ add r0, r0, r2\n\
+ lsr r4, r0, #0x10\n\
+ asr r0, r0, #0x10\n\
+ cmp r0, #0x2\n\
+ ble ._92 @cond_branch\n\
+._91:\n\
+ ldr r1, ._94 @ \n\
+ ldrh r0, [r1, #0xc]\n\
+ sub r0, r0, #0x3\n\
+ ldrh r3, [r1, #0x12]\n\
+ add r0, r0, r3\n\
+ strh r0, [r1, #0xc]\n\
+ mov r0, #0x3\n\
+ strh r0, [r1, #0x12]\n\
+ mov r0, #0x9\n\
+ strb r0, [r1]\n\
+ mov r0, #0x5f\n\
+ bl PlaySE\n\
+ b ._102\n\
+._95:\n\
+ .align 2, 0\n\
+._94:\n\
+ .word +0x2000000\n\
+._90:\n\
+ mov r0, #0x6\n\
+ b ._96\n\
+._89:\n\
+ mov r0, #0x80\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._98 @cond_branch\n\
+ ldr r4, ._103 @ \n\
+ mov r1, #0xc\n\
+ ldsh r0, [r4, r1]\n\
+ cmp r0, #0\n\
+ beq ._98 @cond_branch\n\
+ mov r0, #0x5f\n\
+ bl PlaySE\n\
+ ldrb r0, [r4, #0x12]\n\
+ bl sub_8103D50\n\
+ ldrh r0, [r4, #0xc]\n\
+ sub r0, r0, #0x1\n\
+ strh r0, [r4, #0xc]\n\
+ ldrh r0, [r4, #0x12]\n\
+ add r0, r0, #0x1\n\
+ strh r0, [r4, #0x12]\n\
+._98:\n\
+ ldr r0, ._103 @ \n\
+ mov r2, #0x12\n\
+ ldsh r1, [r0, r2]\n\
+ add r2, r0, #0\n\
+ ldr r5, ._103 + 4 @ \n\
+ cmp r1, #0x2\n\
+ bgt ._99 @cond_branch\n\
+ cmp r1, #0\n\
+ beq ._101 @cond_branch\n\
+ ldrh r1, [r5, #0x2e]\n\
+ mov r0, #0x1\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._101 @cond_branch\n\
+._99:\n\
+ mov r0, #0x9\n\
+ strb r0, [r2]\n\
+._101:\n\
+ ldrh r1, [r5, #0x2e]\n\
+ mov r0, #0x2\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._102 @cond_branch\n\
+ mov r0, #0x15\n\
+._96:\n\
+ strb r0, [r2]\n\
+._102:\n\
+ mov r0, #0x0\n\
+ pop {r4, r5}\n\
+ pop {r1}\n\
+ bx r1\n\
+._104:\n\
+ .align 2, 0\n\
+._103:\n\
+ .word +0x2000000\n\
+ .word gMain");
+}
+#else
static bool8 sub_8101E3C(struct Task *task)
{
s16 i;
@@ -581,6 +978,7 @@ static bool8 sub_8101E3C(struct Task *task)
}
return FALSE;
}
+#endif
static void sub_8101F2C(const u8 *str)
{
@@ -614,6 +1012,71 @@ static bool8 sub_8101F88(struct Task *task)
return FALSE;
}
+#if DEBUG
+__attribute__((naked))
+static bool8 sub_8101FA4(struct Task *task)
+{
+ asm("\
+ push {r4, lr}\n\
+ add r4, r0, #0\n\
+ bl sub_8102484\n\
+ bl sub_8104DA4\n\
+ mov r0, #0x0\n\
+ bl sub_8102DEC\n\
+ mov r0, #0x1\n\
+ bl sub_8102DEC\n\
+ mov r0, #0x2\n\
+ bl sub_8102DEC\n\
+ mov r0, #0x0\n\
+ strh r0, [r4, #0x8]\n\
+ ldr r4, ._115 @ \n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x20\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._113 @cond_branch\n\
+ bl sub_810430C\n\
+ mov r0, #0xa\n\
+ b ._114\n\
+._116:\n\
+ .align 2, 0\n\
+._115:\n\
+ .word +0x2000000\n\
+._113:\n\
+ mov r0, #0x1\n\
+ bl sub_8104CAC\n\
+ mov r0, #0xb\n\
+._114:\n\
+ strb r0, [r4]\n\
+ ldr r4, ._119 @ \n\
+ mov r0, #0x8\n\
+ strh r0, [r4, #0x1a]\n\
+ ldrb r0, [r4, #0xa]\n\
+ cmp r0, #0\n\
+ beq ._117 @cond_branch\n\
+ bl dp15_jump_random_unknown\n\
+ strh r0, [r4, #0x1a]\n\
+._117:\n\
+ ldr r0, ._119 + 4 @ \n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0\n\
+ beq ._118 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x68\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._118:\n\
+ mov r0, #0x0\n\
+ pop {r4}\n\
+ pop {r1}\n\
+ bx r1\n\
+._120:\n\
+ .align 2, 0\n\
+._119:\n\
+ .word +0x2000000\n\
+ .word unk_debug_bss_1_1");
+}
+#else
static bool8 sub_8101FA4(struct Task *task)
{
sub_8102484();
@@ -639,6 +1102,7 @@ static bool8 sub_8101FA4(struct Task *task)
}
return FALSE;
}
+#endif
static bool8 sub_8102008(struct Task *task)
{
@@ -651,6 +1115,52 @@ static bool8 sub_8102008(struct Task *task)
return FALSE;
}
+#if DEBUG
+__attribute__((naked))
+static bool8 sub_8102034(struct Task *task)
+{
+ asm("\
+ push {r4, lr}\n\
+ ldrh r1, [r0, #0x8]\n\
+ add r1, r1, #0x1\n\
+ strh r1, [r0, #0x8]\n\
+ lsl r1, r1, #0x10\n\
+ asr r1, r1, #0x10\n\
+ cmp r1, #0x1d\n\
+ ble ._124 @cond_branch\n\
+ ldr r0, ._127 @ unk_debug_bss_1_1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0\n\
+ beq ._126 @cond_branch\n\
+ ldr r0, ._127 + 4 @ unk_debug_bss_1_4\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0\n\
+ beq ._126 @cond_branch\n\
+ ldr r4, ._127 + 8 @ unk_debug_bss_1_8\n\
+ bl Random\n\
+ mov r1, #0x1f\n\
+ and r1, r1, r0\n\
+ add r1, r1, #0x1\n\
+ str r1, [r4]\n\
+._126:\n\
+ bl sub_81024F0\n\
+ ldr r1, ._127 + 12 @ \n\
+ mov r0, #0xc\n\
+ strb r0, [r1]\n\
+._124:\n\
+ mov r0, #0x0\n\
+ pop {r4}\n\
+ pop {r1}\n\
+ bx r1\n\
+._128:\n\
+ .align 2, 0\n\
+._127:\n\
+ .word unk_debug_bss_1_1\n\
+ .word unk_debug_bss_1_4\n\
+ .word unk_debug_bss_1_8\n\
+ .word +0x2000000");
+}
+#else
static bool8 sub_8102034(struct Task *task)
{
if (++task->data[0] >= 30)
@@ -660,7 +1170,77 @@ static bool8 sub_8102034(struct Task *task)
}
return FALSE;
}
+#endif
+#if DEBUG
+__attribute__((naked))
+static bool8 sub_8102058(struct Task *task)
+{
+ asm("\
+ push {r4, r5, lr}\n\
+ ldr r0, ._133 @ unk_debug_bss_1_1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0\n\
+ beq ._130 @cond_branch\n\
+ ldr r0, ._133 + 4 @ unk_debug_bss_1_4\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0\n\
+ beq ._130 @cond_branch\n\
+ ldr r5, ._133 + 8 @ unk_debug_bss_1_8\n\
+ ldr r0, [r5]\n\
+ sub r0, r0, #0x1\n\
+ str r0, [r5]\n\
+ cmp r0, #0\n\
+ bne ._135 @cond_branch\n\
+ mov r0, #0x18\n\
+ bl PlaySE\n\
+ ldr r4, ._133 + 12 @ \n\
+ ldrb r0, [r4, #0x18]\n\
+ bl sub_8102E1C\n\
+ ldrb r0, [r4, #0x18]\n\
+ bl sub_8103C14\n\
+ bl Random\n\
+ mov r1, #0x1f\n\
+ and r1, r1, r0\n\
+ add r1, r1, #0x1\n\
+ str r1, [r5]\n\
+ b ._132\n\
+._134:\n\
+ .align 2, 0\n\
+._133:\n\
+ .word unk_debug_bss_1_1\n\
+ .word unk_debug_bss_1_4\n\
+ .word unk_debug_bss_1_8\n\
+ .word +0x2000000\n\
+._130:\n\
+ ldr r0, ._136 @ gMain\n\
+ ldrh r1, [r0, #0x2e]\n\
+ mov r0, #0x1\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._135 @cond_branch\n\
+ mov r0, #0x18\n\
+ bl PlaySE\n\
+ ldr r4, ._136 + 4 @ \n\
+ ldrb r0, [r4, #0x18]\n\
+ bl sub_8102E1C\n\
+ ldrb r0, [r4, #0x18]\n\
+ bl sub_8103C14\n\
+._132:\n\
+ mov r0, #0xd\n\
+ strb r0, [r4]\n\
+._135:\n\
+ mov r0, #0x0\n\
+ pop {r4, r5}\n\
+ pop {r1}\n\
+ bx r1\n\
+._137:\n\
+ .align 2, 0\n\
+._136:\n\
+ .word gMain\n\
+ .word +0x2000000");
+}
+#else
static bool8 sub_8102058(struct Task *task)
{
if (gMain.newKeys & A_BUTTON)
@@ -672,7 +1252,121 @@ static bool8 sub_8102058(struct Task *task)
}
return FALSE;
}
+#endif
+#if DEBUG
+__attribute__((naked))
+static bool8 sub_8102090(struct Task *task)
+{
+ asm("\
+ push {r4, lr}\n\
+ ldr r4, ._146 @ \n\
+ ldrb r0, [r4, #0x18]\n\
+ bl sub_8102E40\n\
+ lsl r0, r0, #0x18\n\
+ lsr r2, r0, #0x18\n\
+ cmp r2, #0\n\
+ bne ._138 @cond_branch\n\
+ ldrh r0, [r4, #0x18]\n\
+ add r0, r0, #0x1\n\
+ strh r0, [r4, #0x18]\n\
+ mov r1, #0xc\n\
+ strb r1, [r4]\n\
+ lsl r0, r0, #0x10\n\
+ asr r0, r0, #0x10\n\
+ cmp r0, #0x2\n\
+ ble ._161 @cond_branch\n\
+ mov r0, #0xe\n\
+ strb r0, [r4]\n\
+ ldr r0, ._146 + 4 @ \n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0x8\n\
+ beq ._140 @cond_branch\n\
+ cmp r0, #0x8\n\
+ bgt ._141 @cond_branch\n\
+ cmp r0, #0x2\n\
+ beq ._142 @cond_branch\n\
+ cmp r0, #0x2\n\
+ bgt ._143 @cond_branch\n\
+ cmp r0, #0x1\n\
+ beq ._144 @cond_branch\n\
+ b ._161\n\
+._147:\n\
+ .align 2, 0\n\
+._146:\n\
+ .word +0x2000000\n\
+ .word unk_debug_bss_1_0\n\
+._143:\n\
+ cmp r0, #0x4\n\
+ beq ._148 @cond_branch\n\
+ b ._161\n\
+._141:\n\
+ cmp r0, #0x40\n\
+ beq ._150 @cond_branch\n\
+ cmp r0, #0x40\n\
+ bgt ._151 @cond_branch\n\
+ cmp r0, #0x10\n\
+ beq ._152 @cond_branch\n\
+ b ._161\n\
+._151:\n\
+ cmp r0, #0x80\n\
+ beq ._154 @cond_branch\n\
+ b ._161\n\
+._142:\n\
+ mov r0, #0x14\n\
+ strh r0, [r4, #0x28]\n\
+ strh r0, [r4, #0x2a]\n\
+ mov r0, #0x12\n\
+ b ._160\n\
+._144:\n\
+ mov r0, #0x14\n\
+ strh r0, [r4, #0x28]\n\
+ strh r0, [r4, #0x2a]\n\
+ mov r0, #0x12\n\
+ b ._160\n\
+._148:\n\
+ mov r0, #0x3\n\
+ strh r0, [r4, #0x28]\n\
+ mov r0, #0x1\n\
+ strh r0, [r4, #0x2a]\n\
+ mov r0, #0x2\n\
+ b ._160\n\
+._140:\n\
+ strh r2, [r4, #0x28]\n\
+ mov r0, #0x2\n\
+ strh r0, [r4, #0x2a]\n\
+ mov r0, #0x3\n\
+ b ._160\n\
+._152:\n\
+ mov r0, #0x2\n\
+ strh r0, [r4, #0x28]\n\
+ mov r0, #0x5\n\
+ strh r0, [r4, #0x2a]\n\
+ mov r0, #0x14\n\
+ b ._160\n\
+._150:\n\
+ mov r0, #0x13\n\
+ strh r0, [r4, #0x28]\n\
+ strh r0, [r4, #0x2a]\n\
+ strh r2, [r4, #0x2c]\n\
+ b ._161\n\
+._154:\n\
+ mov r0, #0x13\n\
+ strh r0, [r4, #0x28]\n\
+ strh r0, [r4, #0x2a]\n\
+._160:\n\
+ strh r0, [r4, #0x2c]\n\
+._161:\n\
+ mov r0, #0x1\n\
+ b ._162\n\
+._138:\n\
+ mov r0, #0x0\n\
+._162:\n\
+ pop {r4}\n\
+ pop {r1}\n\
+ bx r1");
+}
+#else
static bool8 sub_8102090(struct Task *task)
{
if (!sub_8102E40(eSlotMachine->unk18))
@@ -687,8 +1381,169 @@ static bool8 sub_8102090(struct Task *task)
}
return FALSE;
}
+#endif
-static bool8 sub_81020C8(struct Task *task)
+#if DEBUG
+__attribute__((naked))
+bool8 sub_81020C8(struct Task *task)
+{
+ asm("\
+ push {r4, lr}\n\
+ ldr r4, ._165 @ \n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0xc0\n\
+ and r0, r0, r1\n\
+ strb r0, [r4, #0x4]\n\
+ bl CheckMatch\n\
+ ldrb r0, [r4, #0xa]\n\
+ cmp r0, #0\n\
+ beq ._163 @cond_branch\n\
+ sub r0, r0, #0x1\n\
+ strb r0, [r4, #0xa]\n\
+ ldrb r0, [r4, #0xb]\n\
+ add r0, r0, #0x1\n\
+ strb r0, [r4, #0xb]\n\
+ b ._164\n\
+._166:\n\
+ .align 2, 0\n\
+._165:\n\
+ .word +0x2000000\n\
+._163:\n\
+ bl debug_sub_811B894\n\
+._164:\n\
+ ldr r4, ._171 @ \n\
+ ldrh r0, [r4, #0x8]\n\
+ cmp r0, #0\n\
+ beq ._167 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x6c\n\
+ mov r2, #0xe\n\
+ ldsh r1, [r4, r2]\n\
+ bl debug_sub_811B5B4\n\
+ mov r0, #0xf\n\
+ strb r0, [r4]\n\
+ bl sub_8102A24\n\
+ bl sub_8103F70\n\
+ ldrh r0, [r4, #0x10]\n\
+ ldrh r1, [r4, #0xe]\n\
+ sub r0, r0, r1\n\
+ strh r0, [r4, #0x10]\n\
+ lsl r0, r0, #0x10\n\
+ cmp r0, #0\n\
+ bge ._168 @cond_branch\n\
+ mov r0, #0x0\n\
+ strh r0, [r4, #0x10]\n\
+._168:\n\
+ ldrh r1, [r4, #0x8]\n\
+ mov r0, #0xc0\n\
+ lsl r0, r0, #0x1\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._169 @cond_branch\n\
+ ldr r0, ._171 + 4 @ \n\
+ bl PlayFanfare\n\
+ mov r0, #0x6\n\
+ bl sub_8104CAC\n\
+ b ._174\n\
+._172:\n\
+ .align 2, 0\n\
+._171:\n\
+ .word +0x2000000\n\
+ .word 0x185\n\
+._169:\n\
+ mov r0, #0x40\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._173 @cond_branch\n\
+ ldr r0, ._175 @ 0x185\n\
+ bl PlayFanfare\n\
+ mov r0, #0x5\n\
+ bl sub_8104CAC\n\
+ b ._174\n\
+._176:\n\
+ .align 2, 0\n\
+._175:\n\
+ .word 0x185\n\
+._173:\n\
+ mov r0, #0xc3\n\
+ lsl r0, r0, #0x1\n\
+ bl PlayFanfare\n\
+ mov r0, #0x2\n\
+ bl sub_8104CAC\n\
+._174:\n\
+ ldr r1, ._183 @ \n\
+ ldrh r3, [r1, #0x8]\n\
+ mov r0, #0xe0\n\
+ lsl r0, r0, #0x1\n\
+ and r0, r0, r3\n\
+ add r2, r1, #0\n\
+ cmp r0, #0\n\
+ beq ._179 @cond_branch\n\
+ ldrb r1, [r2, #0x4]\n\
+ mov r0, #0x3f\n\
+ and r0, r0, r1\n\
+ mov r1, #0x0\n\
+ strb r0, [r2, #0x4]\n\
+ mov r0, #0xc0\n\
+ lsl r0, r0, #0x1\n\
+ and r0, r0, r3\n\
+ cmp r0, #0\n\
+ beq ._179 @cond_branch\n\
+ strb r1, [r2, #0xa]\n\
+ strb r1, [r2, #0xb]\n\
+ strb r1, [r2, #0x3]\n\
+ mov r0, #0x80\n\
+ lsl r0, r0, #0x1\n\
+ and r0, r0, r3\n\
+ cmp r0, #0\n\
+ beq ._179 @cond_branch\n\
+ mov r0, #0x1\n\
+ strb r0, [r2, #0x3]\n\
+._179:\n\
+ ldrh r1, [r2, #0x8]\n\
+ mov r0, #0x20\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._185 @cond_branch\n\
+ ldrb r0, [r2, #0x2]\n\
+ cmp r0, #0xf\n\
+ bhi ._185 @cond_branch\n\
+ add r0, r0, #0x1\n\
+ strb r0, [r2, #0x2]\n\
+ ldrb r0, [r2, #0x2]\n\
+ bl sub_8104064\n\
+ b ._185\n\
+._184:\n\
+ .align 2, 0\n\
+._183:\n\
+ .word +0x2000000\n\
+._167:\n\
+ mov r0, #0x3\n\
+ bl sub_8104CAC\n\
+ mov r0, #0x14\n\
+ strb r0, [r4]\n\
+ ldrh r0, [r4, #0x12]\n\
+ ldrh r1, [r4, #0x10]\n\
+ add r0, r0, r1\n\
+ strh r0, [r4, #0x10]\n\
+ lsl r0, r0, #0x10\n\
+ asr r0, r0, #0x10\n\
+ ldr r1, ._186 @ 0x270f\n\
+ cmp r0, r1\n\
+ ble ._185 @cond_branch\n\
+ strh r1, [r4, #0x10]\n\
+._185:\n\
+ mov r0, #0x0\n\
+ pop {r4}\n\
+ pop {r1}\n\
+ bx r1\n\
+._187:\n\
+ .align 2, 0\n\
+._186:\n\
+ .word 0x270f");
+}
+#else
+bool8 sub_81020C8(struct Task *task)
{
eSlotMachine->unk04 &= 0xc0;
CheckMatch();
@@ -752,6 +1607,7 @@ static bool8 sub_81020C8(struct Task *task)
}
return FALSE;
}
+#endif
static bool8 sub_81021E0(struct Task *task)
{
@@ -902,6 +1758,48 @@ static bool8 sub_81023FC(struct Task *task)
return FALSE;
}
+#if DEBUG
+__attribute__((naked))
+static bool8 sub_8102424(struct Task *task)
+{
+ asm("\
+ push {lr}\n\
+ add sp, sp, #0xfffffffc\n\
+ ldr r0, ._234 @ unk_debug_bss_1_1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0\n\
+ bne ._233 @cond_branch\n\
+ ldr r0, ._234 + 4 @ gSaveBlock1\n\
+ ldr r1, ._234 + 8 @ \n\
+ ldrh r1, [r1, #0xc]\n\
+ ldr r2, ._234 + 12 @ \n\
+ add r0, r0, r2\n\
+ strh r1, [r0]\n\
+._233:\n\
+ mov r0, #0x1\n\
+ neg r0, r0\n\
+ mov r1, #0x0\n\
+ str r1, [sp]\n\
+ mov r2, #0x0\n\
+ mov r3, #0x10\n\
+ bl BeginNormalPaletteFade\n\
+ ldr r1, ._234 + 8 @ \n\
+ ldrb r0, [r1]\n\
+ add r0, r0, #0x1\n\
+ strb r0, [r1]\n\
+ mov r0, #0x0\n\
+ add sp, sp, #0x4\n\
+ pop {r1}\n\
+ bx r1\n\
+._235:\n\
+ .align 2, 0\n\
+._234:\n\
+ .word unk_debug_bss_1_1\n\
+ .word gSaveBlock1\n\
+ .word +0x2000000\n\
+ .word 0x494");
+}
+#else
static bool8 sub_8102424(struct Task *task)
{
gSaveBlock1.coins = eSlotMachine->coins;
@@ -909,6 +1807,7 @@ static bool8 sub_8102424(struct Task *task)
eSlotMachine->state++;
return FALSE;
}
+#endif
static bool8 sub_8102460(struct Task *task)
{
@@ -919,6 +1818,272 @@ static bool8 sub_8102460(struct Task *task)
return FALSE;
}
+#if DEBUG
+__attribute__((naked))
+static bool8 debug_sub_8116E74(struct Task *task)
+{
+ asm("\
+ push {lr}\n\
+ bl debug_sub_811B634\n\
+ lsl r0, r0, #0x18\n\
+ cmp r0, #0\n\
+ beq ._239 @cond_branch\n\
+ ldr r1, ._240 @ \n\
+ mov r0, #0x5\n\
+ strb r0, [r1]\n\
+._239:\n\
+ mov r0, #0x0\n\
+ pop {r1}\n\
+ bx r1\n\
+._241:\n\
+ .align 2, 0\n\
+._240:\n\
+ .word +0x2000000");
+}
+#endif
+
+#if DEBUG
+__attribute__((naked))
+static void sub_8102484(void)
+{
+ asm("\
+ push {r4, r5, r6, lr}\n\
+ ldr r0, ._256 @ \n\
+ ldrb r2, [r0, #0xa]\n\
+ add r4, r0, #0\n\
+ cmp r2, #0\n\
+ beq ._242 @cond_branch\n\
+ b ._270\n\
+._242:\n\
+ ldr r0, ._256 + 4 @ \n\
+ ldrb r0, [r0]\n\
+ cmp r0, #0\n\
+ beq ._245 @cond_branch\n\
+ ldr r3, ._256 + 8 @ \n\
+ ldrb r0, [r3]\n\
+ cmp r0, #0\n\
+ beq ._245 @cond_branch\n\
+ ldr r0, ._256 + 12 @ \n\
+ ldrb r1, [r0]\n\
+ strb r1, [r4, #0x4]\n\
+ strb r2, [r3]\n\
+ strb r2, [r0]\n\
+ mov r0, #0x80\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._246 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x88\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._246:\n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x40\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._247 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x84\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._247:\n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x20\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._248 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x8c\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._248:\n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x10\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._249 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x80\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._249:\n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x8\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._250 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x7c\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._250:\n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x4\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._251 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x78\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._251:\n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x1\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._252 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x74\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._252:\n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x2\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ bne ._253 @cond_branch\n\
+ b ._270\n\
+._253:\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x70\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+ b ._270\n\
+._257:\n\
+ .align 2, 0\n\
+._256:\n\
+ .word +0x2000000\n\
+ .word unk_debug_bss_1_1\n\
+ .word unk_debug_bss_1_2\n\
+ .word unk_debug_bss_1_3\n\
+._245:\n\
+ add r5, r4, #0\n\
+ ldrb r1, [r5, #0x4]\n\
+ mov r0, #0xc0\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ bne ._270 @cond_branch\n\
+ bl sub_8102540\n\
+ lsl r0, r0, #0x18\n\
+ cmp r0, #0\n\
+ beq ._260 @cond_branch\n\
+ bl sub_8102578\n\
+ lsl r0, r0, #0x18\n\
+ lsr r6, r0, #0x18\n\
+ cmp r6, #0x3\n\
+ beq ._260 @cond_branch\n\
+ ldr r1, ._271 @ gUnknown_083ECE42\n\
+ lsl r0, r6, #0x1\n\
+ add r0, r0, r1\n\
+ ldrb r1, [r0]\n\
+ ldrb r0, [r5, #0x4]\n\
+ orr r0, r0, r1\n\
+ strb r0, [r5, #0x4]\n\
+ mov r1, #0x80\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._261 @cond_branch\n\
+ add r0, r5, #0\n\
+ add r0, r0, #0x88\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._261:\n\
+ ldrb r1, [r5, #0x4]\n\
+ mov r0, #0x40\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._262 @cond_branch\n\
+ add r0, r5, #0\n\
+ add r0, r0, #0x84\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._262:\n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x20\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._263 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x8c\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._263:\n\
+ cmp r6, #0x1\n\
+ bne ._270 @cond_branch\n\
+._260:\n\
+ bl sub_81025BC\n\
+ lsl r0, r0, #0x18\n\
+ lsr r6, r0, #0x18\n\
+ cmp r6, #0x5\n\
+ beq ._270 @cond_branch\n\
+ ldr r4, ._271 + 4 @ \n\
+ ldr r1, ._271 + 8 @ \n\
+ lsl r0, r6, #0x1\n\
+ add r0, r0, r1\n\
+ ldrb r1, [r0]\n\
+ ldrb r0, [r4, #0x4]\n\
+ orr r0, r0, r1\n\
+ strb r0, [r4, #0x4]\n\
+ mov r1, #0x10\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._266 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x80\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._266:\n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x8\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._267 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x7c\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._267:\n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x4\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._268 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x78\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._268:\n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x1\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._269 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x74\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._269:\n\
+ ldrb r1, [r4, #0x4]\n\
+ mov r0, #0x2\n\
+ and r0, r0, r1\n\
+ cmp r0, #0\n\
+ beq ._270 @cond_branch\n\
+ add r0, r4, #0\n\
+ add r0, r0, #0x70\n\
+ mov r1, #0x1\n\
+ bl debug_sub_811B5B4\n\
+._270:\n\
+ pop {r4, r5, r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+._272:\n\
+ .align 2, 0\n\
+._271:\n\
+ .word gUnknown_083ECE42\n\
+ .word +0x2000000\n\
+ .word gUnknown_083ECE48");
+}
+#else
static void sub_8102484(void)
{
u8 r3;
@@ -944,6 +2109,7 @@ static void sub_8102484(void)
}
}
}
+#endif
static void sub_81024F0(void)
{
@@ -2854,7 +4020,8 @@ static void sub_8104C5C(void)
static void LoadSlotMachineWheelOverlay(void);
-static void sub_8104CAC(u8 arg0) {
+static void sub_8104CAC(u8 arg0)
+{
u8 i;
struct Task *task;
@@ -2875,9 +4042,7 @@ static void sub_8104CAC(u8 arg0) {
#ifdef GERMAN
if (arg0 == 5 && i <= 2)
- {
gSprites[spriteId].invisible = TRUE;
- }
#endif
}
}
@@ -3949,7 +5114,8 @@ static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) {
vram[16 * 32 + 1 + arg0] = arg4;
}
-static void sub_81065DC(void) {
+static void sub_81065DC(void)
+{
s16 y, x;
u16 *screen;
@@ -3965,7 +5131,1226 @@ static void sub_81065DC(void) {
}
}
-static const u8 sReelSymbols[][21] = {
+#if DEBUG
+__attribute__((naked))
+void debug_sub_811B1C4()
+{
+ asm(
+ " ldr r1, .__1_\n"
+ " ldrb r0, [r1]\n"
+ " mov r3, #0x2\n"
+ " orr r0, r0, r3\n"
+ " strb r0, [r1]\n"
+ " ldr r2, .__1_ + 4\n"
+ " ldrb r1, [r2]\n"
+ " mov r0, #0x2\n"
+ " eor r1, r1, r0\n"
+ " neg r0, r1\n"
+ " orr r0, r0, r1\n"
+ " asr r0, r0, #0x1f\n"
+ " and r0, r0, r3\n"
+ " strb r0, [r2]\n"
+ " bx lr\n"
+ ".__2_:\n"
+ " .align 2, 0\n"
+ ".__1_:\n"
+ " .word unk_debug_bss_1_3\n"
+ " .word unk_debug_bss_1_0\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B1EC()
+{
+ asm(
+ " ldr r2, .__3\n"
+ " ldrb r0, [r2]\n"
+ " mov r1, #0x1\n"
+ " orr r0, r0, r1\n"
+ " strb r0, [r2]\n"
+ " ldr r2, .__3 + 4\n"
+ " ldrb r0, [r2]\n"
+ " mov r1, #0x1\n"
+ " eor r0, r0, r1\n"
+ " neg r0, r0\n"
+ " lsr r0, r0, #0x1f\n"
+ " strb r0, [r2]\n"
+ " bx lr\n"
+ ".__4:\n"
+ " .align 2, 0\n"
+ ".__3:\n"
+ " .word unk_debug_bss_1_3\n"
+ " .word unk_debug_bss_1_0\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B210()
+{
+ asm(
+ " ldr r1, .__5\n"
+ " ldrb r0, [r1]\n"
+ " mov r3, #0x4\n"
+ " orr r0, r0, r3\n"
+ " strb r0, [r1]\n"
+ " ldr r2, .__5 + 4\n"
+ " ldrb r1, [r2]\n"
+ " mov r0, #0x4\n"
+ " eor r1, r1, r0\n"
+ " neg r0, r1\n"
+ " orr r0, r0, r1\n"
+ " asr r0, r0, #0x1f\n"
+ " and r0, r0, r3\n"
+ " strb r0, [r2]\n"
+ " bx lr\n"
+ ".__6:\n"
+ " .align 2, 0\n"
+ ".__5:\n"
+ " .word unk_debug_bss_1_3\n"
+ " .word unk_debug_bss_1_0\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B238()
+{
+ asm(
+ " ldr r1, .__7\n"
+ " ldrb r0, [r1]\n"
+ " mov r3, #0x8\n"
+ " orr r0, r0, r3\n"
+ " strb r0, [r1]\n"
+ " ldr r2, .__7 + 4\n"
+ " ldrb r1, [r2]\n"
+ " mov r0, #0x8\n"
+ " eor r1, r1, r0\n"
+ " neg r0, r1\n"
+ " orr r0, r0, r1\n"
+ " asr r0, r0, #0x1f\n"
+ " and r0, r0, r3\n"
+ " strb r0, [r2]\n"
+ " bx lr\n"
+ ".__8:\n"
+ " .align 2, 0\n"
+ ".__7:\n"
+ " .word unk_debug_bss_1_3\n"
+ " .word unk_debug_bss_1_0\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B260()
+{
+ asm(
+ " ldr r1, .__9\n"
+ " ldrb r0, [r1]\n"
+ " mov r3, #0x10\n"
+ " orr r0, r0, r3\n"
+ " strb r0, [r1]\n"
+ " ldr r2, .__9 + 4\n"
+ " ldrb r1, [r2]\n"
+ " mov r0, #0x10\n"
+ " eor r1, r1, r0\n"
+ " neg r0, r1\n"
+ " orr r0, r0, r1\n"
+ " asr r0, r0, #0x1f\n"
+ " and r0, r0, r3\n"
+ " strb r0, [r2]\n"
+ " bx lr\n"
+ ".__10:\n"
+ " .align 2, 0\n"
+ ".__9:\n"
+ " .word unk_debug_bss_1_3\n"
+ " .word unk_debug_bss_1_0\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B288()
+{
+ asm(
+ " ldr r1, .__11\n"
+ " ldrb r0, [r1]\n"
+ " mov r3, #0x40\n"
+ " orr r0, r0, r3\n"
+ " strb r0, [r1]\n"
+ " ldr r2, .__11 + 4\n"
+ " ldrb r1, [r2]\n"
+ " mov r0, #0x40\n"
+ " eor r1, r1, r0\n"
+ " neg r0, r1\n"
+ " orr r0, r0, r1\n"
+ " asr r0, r0, #0x1f\n"
+ " and r0, r0, r3\n"
+ " strb r0, [r2]\n"
+ " bx lr\n"
+ ".__12:\n"
+ " .align 2, 0\n"
+ ".__11:\n"
+ " .word unk_debug_bss_1_3\n"
+ " .word unk_debug_bss_1_0\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B2B0()
+{
+ asm(
+ " ldr r1, .__13\n"
+ " ldrb r0, [r1]\n"
+ " mov r3, #0x80\n"
+ " orr r0, r0, r3\n"
+ " strb r0, [r1]\n"
+ " ldr r2, .__13 + 4\n"
+ " ldrb r1, [r2]\n"
+ " mov r0, #0x80\n"
+ " eor r1, r1, r0\n"
+ " neg r0, r1\n"
+ " orr r0, r0, r1\n"
+ " asr r0, r0, #0x1f\n"
+ " and r0, r0, r3\n"
+ " strb r0, [r2]\n"
+ " bx lr\n"
+ ".__14:\n"
+ " .align 2, 0\n"
+ ".__13:\n"
+ " .word unk_debug_bss_1_3\n"
+ " .word unk_debug_bss_1_0\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B2D8()
+{
+ asm(
+ " ldr r0, .__15\n"
+ " ldrb r1, [r0]\n"
+ " mov r2, #0x20\n"
+ " orr r1, r1, r2\n"
+ " strb r1, [r0]\n"
+ " bx lr\n"
+ ".__16:\n"
+ " .align 2, 0\n"
+ ".__15:\n"
+ " .word unk_debug_bss_1_3\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B2E8()
+{
+ asm(
+ " push {lr}\n"
+ " add sp, sp, #0xfffffffc\n"
+ " ldr r0, .__17\n"
+ " ldrb r1, [r0, #0x1]\n"
+ " add r1, r1, #0x1\n"
+ " mov r0, sp\n"
+ " mov r2, #0x2\n"
+ " mov r3, #0x1\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " mov r0, sp\n"
+ " mov r1, #0x6\n"
+ " mov r2, #0x1\n"
+ " bl Menu_PrintText\n"
+ " add sp, sp, #0x4\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ ".__18:\n"
+ " .align 2, 0\n"
+ ".__17:\n"
+ " .word +0x2000000\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B310()
+{
+ asm(
+ " push {r4, lr}\n"
+ " add sp, sp, #0xfffffff8\n"
+ " ldr r0, .__21\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0x1\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 4\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0x3\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 8\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0x5\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 12\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0x7\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 16\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0x9\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 20\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0xb\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 24\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0xd\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 28\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0xf\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 32\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0x11\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 36\n"
+ " mov r1, #0xf\n"
+ " mov r2, #0x1\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 40\n"
+ " mov r1, #0xf\n"
+ " mov r2, #0x3\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 44\n"
+ " mov r1, #0xf\n"
+ " mov r2, #0x5\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 48\n"
+ " mov r1, #0xf\n"
+ " mov r2, #0x7\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 52\n"
+ " mov r1, #0xf\n"
+ " mov r2, #0x9\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 56\n"
+ " mov r1, #0xf\n"
+ " mov r2, #0xb\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 60\n"
+ " mov r1, #0xf\n"
+ " mov r2, #0xd\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 64\n"
+ " mov r1, #0xf\n"
+ " mov r2, #0xf\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 68\n"
+ " mov r1, #0xf\n"
+ " mov r2, #0x11\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__21 + 72\n"
+ " ldrb r0, [r0, #0x3]\n"
+ " cmp r0, #0\n"
+ " bne .__19 @cond_branch\n"
+ " ldr r0, .__21 + 76\n"
+ " mov r1, #0xa\n"
+ " mov r2, #0x9\n"
+ " bl Menu_PrintText\n"
+ " b .__20\n"
+ ".__22:\n"
+ " .align 2, 0\n"
+ ".__21:\n"
+ " .word Str_841B1C4\n"
+ " .word Str_841B1CB\n"
+ " .word Str_841B1D4\n"
+ " .word Str_841B1DB\n"
+ " .word Str_841B1E2\n"
+ " .word Str_841B1E8\n"
+ " .word Str_841B1F3\n"
+ " .word Str_841B202\n"
+ " .word Str_841B24C\n"
+ " .word Str_841B211\n"
+ " .word Str_841B219\n"
+ " .word Str_841B220\n"
+ " .word Str_841B227\n"
+ " .word Str_841B22E\n"
+ " .word Str_841B235\n"
+ " .word Str_841B23B\n"
+ " .word Str_841B23F\n"
+ " .word Str_841B243\n"
+ " .word +0x2000000\n"
+ " .word Str_841B246\n"
+ ".__19:\n"
+ " ldr r0, .__30\n"
+ " mov r1, #0xa\n"
+ " mov r2, #0x9\n"
+ " bl Menu_PrintText\n"
+ ".__20:\n"
+ " ldr r4, .__30 + 4\n"
+ " ldr r1, [r4, #0x68]\n"
+ " mov r0, sp\n"
+ " mov r2, #0x2\n"
+ " mov r3, #0x4\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " mov r0, sp\n"
+ " mov r1, #0xa\n"
+ " mov r2, #0x3\n"
+ " bl Menu_PrintText\n"
+ " ldr r1, [r4, #0x6c]\n"
+ " mov r0, sp\n"
+ " mov r2, #0x2\n"
+ " mov r3, #0x4\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " mov r0, sp\n"
+ " mov r1, #0xa\n"
+ " mov r2, #0x5\n"
+ " bl Menu_PrintText\n"
+ " mov r0, #0x10\n"
+ " ldsh r1, [r4, r0]\n"
+ " mov r0, sp\n"
+ " mov r2, #0x2\n"
+ " mov r3, #0x4\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " mov r0, sp\n"
+ " mov r1, #0xa\n"
+ " mov r2, #0x7\n"
+ " bl Menu_PrintText\n"
+ " ldr r1, [r4, #0x70]\n"
+ " mov r0, sp\n"
+ " mov r2, #0x2\n"
+ " mov r3, #0x4\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " mov r0, sp\n"
+ " mov r1, #0x14\n"
+ " mov r2, #0x3\n"
+ " bl Menu_PrintText\n"
+ " ldr r1, [r4, #0x74]\n"
+ " mov r0, sp\n"
+ " mov r2, #0x2\n"
+ " mov r3, #0x4\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " mov r0, sp\n"
+ " mov r1, #0x14\n"
+ " mov r2, #0x5\n"
+ " bl Menu_PrintText\n"
+ " ldr r1, [r4, #0x78]\n"
+ " mov r0, sp\n"
+ " mov r2, #0x2\n"
+ " mov r3, #0x4\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " mov r0, sp\n"
+ " mov r1, #0x14\n"
+ " mov r2, #0x7\n"
+ " bl Menu_PrintText\n"
+ " ldr r1, [r4, #0x7c]\n"
+ " mov r0, sp\n"
+ " mov r2, #0x2\n"
+ " mov r3, #0x4\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " mov r0, sp\n"
+ " mov r1, #0x14\n"
+ " mov r2, #0x9\n"
+ " bl Menu_PrintText\n"
+ " add r0, r4, #0\n"
+ " add r0, r0, #0x80\n"
+ " ldr r1, [r0]\n"
+ " mov r0, sp\n"
+ " mov r2, #0x2\n"
+ " mov r3, #0x4\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " mov r0, sp\n"
+ " mov r1, #0x14\n"
+ " mov r2, #0xb\n"
+ " bl Menu_PrintText\n"
+ " add r0, r4, #0\n"
+ " add r0, r0, #0x84\n"
+ " ldr r1, [r0]\n"
+ " mov r0, sp\n"
+ " mov r2, #0x2\n"
+ " mov r3, #0x4\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " mov r0, sp\n"
+ " mov r1, #0x14\n"
+ " mov r2, #0xd\n"
+ " bl Menu_PrintText\n"
+ " add r0, r4, #0\n"
+ " add r0, r0, #0x88\n"
+ " ldr r1, [r0]\n"
+ " mov r0, sp\n"
+ " mov r2, #0x2\n"
+ " mov r3, #0x4\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " mov r0, sp\n"
+ " mov r1, #0x14\n"
+ " mov r2, #0xf\n"
+ " bl Menu_PrintText\n"
+ " add r0, r4, #0\n"
+ " add r0, r0, #0x8c\n"
+ " ldr r1, [r0]\n"
+ " mov r0, sp\n"
+ " mov r2, #0x2\n"
+ " mov r3, #0x4\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " mov r0, sp\n"
+ " mov r1, #0x14\n"
+ " mov r2, #0x11\n"
+ " bl Menu_PrintText\n"
+ " ldr r1, .__30 + 8\n"
+ " ldrb r0, [r1]\n"
+ " cmp r0, #0\n"
+ " beq .__23 @cond_branch\n"
+ " mov r2, #0x0\n"
+ " cmp r0, #0x8\n"
+ " beq .__24 @cond_branch\n"
+ " cmp r0, #0x8\n"
+ " bgt .__25 @cond_branch\n"
+ " cmp r0, #0x2\n"
+ " beq .__26 @cond_branch\n"
+ " cmp r0, #0x2\n"
+ " bgt .__27 @cond_branch\n"
+ " cmp r0, #0x1\n"
+ " beq .__28 @cond_branch\n"
+ " b .__45\n"
+ ".__31:\n"
+ " .align 2, 0\n"
+ ".__30:\n"
+ " .word Str_841B249\n"
+ " .word +0x2000000\n"
+ " .word unk_debug_bss_1_0\n"
+ ".__27:\n"
+ " cmp r0, #0x4\n"
+ " beq .__32 @cond_branch\n"
+ " b .__45\n"
+ ".__25:\n"
+ " cmp r0, #0x40\n"
+ " beq .__34 @cond_branch\n"
+ " cmp r0, #0x40\n"
+ " bgt .__35 @cond_branch\n"
+ " cmp r0, #0x10\n"
+ " beq .__36 @cond_branch\n"
+ " b .__45\n"
+ ".__35:\n"
+ " cmp r0, #0x80\n"
+ " beq .__38 @cond_branch\n"
+ " b .__45\n"
+ ".__26:\n"
+ " mov r2, #0x3\n"
+ " b .__45\n"
+ ".__28:\n"
+ " mov r2, #0x5\n"
+ " b .__45\n"
+ ".__32:\n"
+ " mov r2, #0x7\n"
+ " b .__45\n"
+ ".__24:\n"
+ " mov r2, #0x9\n"
+ " b .__45\n"
+ ".__36:\n"
+ " mov r2, #0xb\n"
+ " b .__45\n"
+ ".__34:\n"
+ " mov r2, #0xd\n"
+ " b .__45\n"
+ ".__38:\n"
+ " mov r2, #0xf\n"
+ ".__45:\n"
+ " ldr r0, .__46\n"
+ " mov r1, #0x17\n"
+ " bl Menu_PrintText\n"
+ ".__23:\n"
+ " bl debug_sub_811B2E8\n"
+ " add sp, sp, #0x8\n"
+ " pop {r4}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ ".__47:\n"
+ " .align 2, 0\n"
+ ".__46:\n"
+ " .word Str_841B26D\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B5B4()
+{
+ asm(
+ " push {lr}\n"
+ " add r2, r0, #0\n"
+ " ldr r0, [r2]\n"
+ " add r0, r0, r1\n"
+ " str r0, [r2]\n"
+ " ldr r1, .__49\n"
+ " cmp r0, r1\n"
+ " ble .__48 @cond_branch\n"
+ " str r1, [r2]\n"
+ ".__48:\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ ".__50:\n"
+ " .align 2, 0\n"
+ ".__49:\n"
+ " .word 0x270f\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B5D0()
+{
+ asm(
+ " ldr r0, .__51\n"
+ " mov r1, #0x0\n"
+ " strb r1, [r0]\n"
+ " ldr r0, .__51 + 4\n"
+ " strb r1, [r0]\n"
+ " ldr r0, .__51 + 8\n"
+ " strb r1, [r0]\n"
+ " ldr r0, .__51 + 12\n"
+ " strb r1, [r0]\n"
+ " ldr r2, .__51 + 16\n"
+ " mov r0, #0x0\n"
+ " str r0, [r2, #0x68]\n"
+ " str r0, [r2, #0x6c]\n"
+ " str r0, [r2, #0x70]\n"
+ " str r0, [r2, #0x74]\n"
+ " str r0, [r2, #0x78]\n"
+ " str r0, [r2, #0x7c]\n"
+ " add r1, r2, #0\n"
+ " add r1, r1, #0x80\n"
+ " str r0, [r1]\n"
+ " add r1, r1, #0x4\n"
+ " str r0, [r1]\n"
+ " add r1, r1, #0x4\n"
+ " str r0, [r1]\n"
+ " add r1, r1, #0x4\n"
+ " str r0, [r1]\n"
+ " add r1, r1, #0x4\n"
+ " str r0, [r1]\n"
+ " bx lr\n"
+ ".__52:\n"
+ " .align 2, 0\n"
+ ".__51:\n"
+ " .word unk_debug_bss_1_0\n"
+ " .word unk_debug_bss_1_2\n"
+ " .word unk_debug_bss_1_3\n"
+ " .word unk_debug_bss_1_4\n"
+ " .word +0x2000000\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B620()
+{
+ asm(
+ " push {lr}\n"
+ " ldr r0, .__53\n"
+ " mov r1, #0x0\n"
+ " bl CreateTask\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ ".__54:\n"
+ " .align 2, 0\n"
+ ".__53:\n"
+ " .word debug_sub_811B654+1\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B634()
+{
+ asm(
+ " push {lr}\n"
+ " ldr r0, .__57\n"
+ " bl FindTaskIdByFunc\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " cmp r0, #0xff\n"
+ " beq .__55 @cond_branch\n"
+ " mov r0, #0x0\n"
+ " b .__56\n"
+ ".__58:\n"
+ " .align 2, 0\n"
+ ".__57:\n"
+ " .word debug_sub_811B654+1\n"
+ ".__55:\n"
+ " mov r0, #0x1\n"
+ ".__56:\n"
+ " pop {r1}\n"
+ " bx r1\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B654()
+{
+ asm(
+ " push {r4, r5, r6, r7, lr}\n"
+ " add sp, sp, #0xfffffff8\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r6, r0, #0x18\n"
+ " lsl r0, r6, #0x2\n"
+ " add r0, r0, r6\n"
+ " lsl r0, r0, #0x3\n"
+ " ldr r1, .__63\n"
+ " add r5, r0, r1\n"
+ " mov r0, #0x8\n"
+ " ldsh r1, [r5, r0]\n"
+ " cmp r1, #0x1\n"
+ " beq .__59 @cond_branch\n"
+ " cmp r1, #0x1\n"
+ " bgt .__60 @cond_branch\n"
+ " cmp r1, #0\n"
+ " beq .__61 @cond_branch\n"
+ " b .__116\n"
+ ".__64:\n"
+ " .align 2, 0\n"
+ ".__63:\n"
+ " .word gTasks\n"
+ ".__60:\n"
+ " cmp r1, #0x2\n"
+ " bne .__65 @cond_branch\n"
+ " b .__66\n"
+ ".__65:\n"
+ " cmp r1, #0x3\n"
+ " bne .__67 @cond_branch\n"
+ " b .__68\n"
+ ".__67:\n"
+ " b .__116\n"
+ ".__61:\n"
+ " mov r0, #0x0\n"
+ " mov r1, #0x0\n"
+ " mov r2, #0x18\n"
+ " mov r3, #0x13\n"
+ " bl Menu_DrawStdWindowFrame\n"
+ " bl debug_sub_811B310\n"
+ " ldrh r0, [r5, #0x8]\n"
+ " add r0, r0, #0x1\n"
+ " strh r0, [r5, #0x8]\n"
+ " b .__116\n"
+ ".__59:\n"
+ " ldr r7, .__76\n"
+ " ldrh r2, [r7, #0x2e]\n"
+ " mov r0, #0x2\n"
+ " and r0, r0, r2\n"
+ " cmp r0, #0\n"
+ " beq .__71 @cond_branch\n"
+ " b .__94\n"
+ ".__71:\n"
+ " mov r0, #0x20\n"
+ " and r0, r0, r2\n"
+ " lsl r0, r0, #0x10\n"
+ " lsr r3, r0, #0x10\n"
+ " cmp r3, #0\n"
+ " beq .__73 @cond_branch\n"
+ " ldr r1, .__76 + 4\n"
+ " ldrb r0, [r1, #0x1]\n"
+ " sub r0, r0, #0x1\n"
+ " strb r0, [r1, #0x1]\n"
+ " lsl r0, r0, #0x18\n"
+ " cmp r0, #0\n"
+ " bge .__79 @cond_branch\n"
+ " mov r0, #0x5\n"
+ " strb r0, [r1, #0x1]\n"
+ " b .__79\n"
+ ".__77:\n"
+ " .align 2, 0\n"
+ ".__76:\n"
+ " .word gMain\n"
+ " .word +0x2000000\n"
+ ".__73:\n"
+ " mov r0, #0x10\n"
+ " and r0, r0, r2\n"
+ " cmp r0, #0\n"
+ " beq .__78 @cond_branch\n"
+ " ldr r1, .__81\n"
+ " ldrb r0, [r1, #0x1]\n"
+ " add r0, r0, #0x1\n"
+ " strb r0, [r1, #0x1]\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " cmp r0, #0x5\n"
+ " bls .__79 @cond_branch\n"
+ " strb r3, [r1, #0x1]\n"
+ ".__79:\n"
+ " bl debug_sub_811B2E8\n"
+ " b .__116\n"
+ ".__82:\n"
+ " .align 2, 0\n"
+ ".__81:\n"
+ " .word +0x2000000\n"
+ ".__78:\n"
+ " and r1, r1, r2\n"
+ " lsl r0, r1, #0x10\n"
+ " lsr r4, r0, #0x10\n"
+ " cmp r4, #0\n"
+ " beq .__83 @cond_branch\n"
+ " mov r0, #0x3\n"
+ " strh r0, [r5, #0x8]\n"
+ " bl Menu_EraseScreen\n"
+ " mov r0, #0x0\n"
+ " mov r1, #0x0\n"
+ " mov r2, #0x9\n"
+ " mov r3, #0x5\n"
+ " bl Menu_DrawStdWindowFrame\n"
+ " ldr r0, .__85\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0x1\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__85 + 4\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0x3\n"
+ " bl Menu_PrintText\n"
+ " b .__116\n"
+ ".__86:\n"
+ " .align 2, 0\n"
+ ".__85:\n"
+ " .word Str_841B25C\n"
+ " .word Str_841B264\n"
+ ".__83:\n"
+ " mov r0, #0x4\n"
+ " and r0, r0, r2\n"
+ " cmp r0, #0\n"
+ " beq .__87 @cond_branch\n"
+ " ldr r0, .__91\n"
+ " strb r4, [r0]\n"
+ " ldr r0, .__91 + 4\n"
+ " strb r4, [r0]\n"
+ " bl Menu_EraseScreen\n"
+ " mov r0, #0x0\n"
+ " mov r1, #0x0\n"
+ " mov r2, #0xa\n"
+ " mov r3, #0x13\n"
+ " bl Menu_DrawStdWindowFrame\n"
+ " ldr r0, .__91 + 8\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0x1\n"
+ " bl Menu_PrintText\n"
+ " ldr r3, .__91 + 12\n"
+ " mov r0, #0x2\n"
+ " mov r1, #0x3\n"
+ " mov r2, #0x8\n"
+ " bl Menu_PrintItems\n"
+ " str r4, [sp]\n"
+ " mov r0, #0x9\n"
+ " str r0, [sp, #0x4]\n"
+ " mov r0, #0x0\n"
+ " mov r1, #0x1\n"
+ " mov r2, #0x3\n"
+ " mov r3, #0x8\n"
+ " bl InitMenu\n"
+ " ldrh r0, [r5, #0x8]\n"
+ " add r0, r0, #0x1\n"
+ " strh r0, [r5, #0x8]\n"
+ ".__87:\n"
+ " ldrh r1, [r7, #0x2e]\n"
+ " mov r0, #0x8\n"
+ " and r0, r0, r1\n"
+ " cmp r0, #0\n"
+ " bne .__88 @cond_branch\n"
+ " b .__116\n"
+ ".__88:\n"
+ " ldr r1, .__91 + 16\n"
+ " mov r0, #0x1\n"
+ " strb r0, [r1]\n"
+ " b .__94\n"
+ ".__92:\n"
+ " .align 2, 0\n"
+ ".__91:\n"
+ " .word unk_debug_bss_1_2\n"
+ " .word unk_debug_bss_1_3\n"
+ " .word Str_841B254\n"
+ " .word _841B270\n"
+ " .word unk_debug_bss_1_4\n"
+ ".__66:\n"
+ " bl Menu_ProcessInput\n"
+ " lsl r0, r0, #0x18\n"
+ " asr r2, r0, #0x18\n"
+ " mov r0, #0x2\n"
+ " neg r0, r0\n"
+ " cmp r2, r0\n"
+ " beq .__116 @cond_branch\n"
+ " add r0, r0, #0x1\n"
+ " cmp r2, r0\n"
+ " beq .__94 @cond_branch\n"
+ " ldr r1, .__96\n"
+ " mov r0, #0x1\n"
+ " strb r0, [r1]\n"
+ " ldr r0, .__96 + 4\n"
+ " lsl r1, r2, #0x3\n"
+ " add r0, r0, #0x4\n"
+ " add r1, r1, r0\n"
+ " ldr r0, [r1]\n"
+ " bl _call_via_r0\n"
+ ".__94:\n"
+ " bl Menu_EraseScreen\n"
+ " add r0, r6, #0\n"
+ " bl DestroyTask\n"
+ " b .__116\n"
+ ".__97:\n"
+ " .align 2, 0\n"
+ ".__96:\n"
+ " .word unk_debug_bss_1_2\n"
+ " .word _841B270\n"
+ ".__68:\n"
+ " ldr r2, .__100\n"
+ " ldrh r1, [r2, #0x30]\n"
+ " mov r0, #0x80\n"
+ " and r0, r0, r1\n"
+ " cmp r0, #0\n"
+ " beq .__98 @cond_branch\n"
+ " ldr r2, .__100 + 4\n"
+ " ldrh r0, [r2, #0xc]\n"
+ " add r0, r0, #0x64\n"
+ " b .__99\n"
+ ".__101:\n"
+ " .align 2, 0\n"
+ ".__100:\n"
+ " .word gMain\n"
+ " .word +0x2000000\n"
+ ".__98:\n"
+ " mov r0, #0x40\n"
+ " and r0, r0, r1\n"
+ " cmp r0, #0\n"
+ " beq .__102 @cond_branch\n"
+ " ldr r1, .__104\n"
+ " ldrh r0, [r1, #0xc]\n"
+ " sub r0, r0, #0x64\n"
+ " b .__103\n"
+ ".__105:\n"
+ " .align 2, 0\n"
+ ".__104:\n"
+ " .word +0x2000000\n"
+ ".__102:\n"
+ " mov r0, #0x20\n"
+ " and r0, r0, r1\n"
+ " cmp r0, #0\n"
+ " beq .__106 @cond_branch\n"
+ " ldr r1, .__109\n"
+ " ldr r2, .__109 + 4\n"
+ " add r0, r2, #0\n"
+ " ldrh r2, [r1, #0xc]\n"
+ " add r0, r0, r2\n"
+ ".__103:\n"
+ " strh r0, [r1, #0xc]\n"
+ " lsl r0, r0, #0x10\n"
+ " cmp r0, #0\n"
+ " bgt .__116 @cond_branch\n"
+ " ldr r0, .__109 + 8\n"
+ " strh r0, [r1, #0xc]\n"
+ " b .__116\n"
+ ".__110:\n"
+ " .align 2, 0\n"
+ ".__109:\n"
+ " .word +0x2000000\n"
+ " .word 0xfffffc18\n"
+ " .word 0x270f\n"
+ ".__106:\n"
+ " mov r0, #0x10\n"
+ " and r0, r0, r1\n"
+ " cmp r0, #0\n"
+ " beq .__111 @cond_branch\n"
+ " ldr r2, .__114\n"
+ " mov r1, #0xfa\n"
+ " lsl r1, r1, #0x2\n"
+ " add r0, r1, #0\n"
+ " ldrh r1, [r2, #0xc]\n"
+ " add r0, r0, r1\n"
+ ".__99:\n"
+ " strh r0, [r2, #0xc]\n"
+ " lsl r0, r0, #0x10\n"
+ " asr r0, r0, #0x10\n"
+ " ldr r1, .__114 + 4\n"
+ " cmp r0, r1\n"
+ " ble .__116 @cond_branch\n"
+ " strh r1, [r2, #0xc]\n"
+ " b .__116\n"
+ ".__115:\n"
+ " .align 2, 0\n"
+ ".__114:\n"
+ " .word +0x2000000\n"
+ " .word 0x270f\n"
+ ".__111:\n"
+ " ldrh r1, [r2, #0x2e]\n"
+ " mov r0, #0x2\n"
+ " and r0, r0, r1\n"
+ " cmp r0, #0\n"
+ " beq .__116 @cond_branch\n"
+ " bl Menu_EraseScreen\n"
+ " add r0, r6, #0\n"
+ " bl DestroyTask\n"
+ ".__116:\n"
+ " add sp, sp, #0x8\n"
+ " pop {r4, r5, r6, r7}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_811B894()
+{
+ asm(
+ " push {r4, r5, r6, r7, lr}\n"
+ " mov r7, sl\n"
+ " mov r6, r9\n"
+ " mov r5, r8\n"
+ " push {r5, r6, r7}\n"
+ " add sp, sp, #0xfffffffc\n"
+ " ldr r1, .__122\n"
+ " ldrh r2, [r1, #0x8]\n"
+ " mov r0, #0xc0\n"
+ " lsl r0, r0, #0x1\n"
+ " and r0, r0, r2\n"
+ " add r4, r1, #0\n"
+ " cmp r0, #0\n"
+ " beq .__117 @cond_branch\n"
+ " add r1, r1, #0x90\n"
+ " ldr r0, [r1]\n"
+ " add r0, r0, #0x1\n"
+ " str r0, [r1]\n"
+ " ldr r2, .__122 + 4\n"
+ " cmp r0, r2\n"
+ " ble .__118 @cond_branch\n"
+ " str r2, [r1]\n"
+ ".__118:\n"
+ " add r0, r4, #0\n"
+ " add r0, r0, #0x88\n"
+ " ldr r1, [r1]\n"
+ " ldr r0, [r0]\n"
+ " cmp r1, r0\n"
+ " beq .__119 @cond_branch\n"
+ " ldr r0, .__122 + 8\n"
+ " mov r1, #0x4\n"
+ " mov r2, #0xf\n"
+ " bl Menu_PrintText\n"
+ " ldr r1, .__122 + 12\n"
+ " mov r0, #0x0\n"
+ " strb r0, [r1]\n"
+ ".__119:\n"
+ " ldrb r1, [r4, #0x4]\n"
+ " mov r0, #0x80\n"
+ " and r0, r0, r1\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r4, r0, #0x18\n"
+ " cmp r4, #0\n"
+ " bne .__126 @cond_branch\n"
+ " ldr r0, .__122 + 16\n"
+ " mov r1, #0x4\n"
+ " mov r2, #0x11\n"
+ " b .__121\n"
+ ".__123:\n"
+ " .align 2, 0\n"
+ ".__122:\n"
+ " .word +0x2000000\n"
+ " .word 0x270f\n"
+ " .word Str_841B2B0\n"
+ " .word unk_debug_bss_1_4\n"
+ " .word Str_841B2D3\n"
+ ".__117:\n"
+ " lsl r0, r2, #0x10\n"
+ " cmp r0, #0\n"
+ " beq .__127 @cond_branch\n"
+ " ldrb r1, [r4, #0x4]\n"
+ " mov r0, #0x80\n"
+ " and r0, r0, r1\n"
+ " cmp r0, #0\n"
+ " beq .__126 @cond_branch\n"
+ " mov r4, #0x3\n"
+ " and r4, r4, r2\n"
+ " cmp r4, #0\n"
+ " bne .__126 @cond_branch\n"
+ " ldr r0, .__163\n"
+ " mov r1, #0x4\n"
+ " mov r2, #0x2\n"
+ ".__121:\n"
+ " bl Menu_PrintText\n"
+ " ldr r0, .__163 + 4\n"
+ " strb r4, [r0]\n"
+ ".__126:\n"
+ " ldr r0, .__163 + 8\n"
+ " ldrh r1, [r0, #0x8]\n"
+ " add r4, r0, #0\n"
+ " cmp r1, #0\n"
+ " beq .__127 @cond_branch\n"
+ " b .__162\n"
+ ".__127:\n"
+ " mov r1, #0x12\n"
+ " ldsh r0, [r4, r1]\n"
+ " cmp r0, #0x3\n"
+ " beq .__129 @cond_branch\n"
+ " b .__162\n"
+ ".__129:\n"
+ " ldrb r1, [r4, #0x4]\n"
+ " mov r0, #0x80\n"
+ " and r0, r0, r1\n"
+ " cmp r0, #0\n"
+ " beq .__131 @cond_branch\n"
+ " b .__162\n"
+ ".__131:\n"
+ " mov r0, #0x0\n"
+ " mov r1, #0x1\n"
+ " bl GetTagOfReelSymbolOnScreenAtPos\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r7, r0, #0x18\n"
+ " mov r0, #0x0\n"
+ " mov r1, #0x2\n"
+ " bl GetTagOfReelSymbolOnScreenAtPos\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " str r0, [sp]\n"
+ " mov r0, #0x0\n"
+ " mov r1, #0x3\n"
+ " bl GetTagOfReelSymbolOnScreenAtPos\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r6, r0, #0x18\n"
+ " mov r0, #0x1\n"
+ " mov r1, #0x1\n"
+ " bl GetTagOfReelSymbolOnScreenAtPos\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " mov r9, r0\n"
+ " mov r0, #0x1\n"
+ " mov r1, #0x2\n"
+ " bl GetTagOfReelSymbolOnScreenAtPos\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r4, r0, #0x18\n"
+ " mov r0, #0x1\n"
+ " mov r1, #0x3\n"
+ " bl GetTagOfReelSymbolOnScreenAtPos\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " mov sl, r0\n"
+ " mov r0, #0x2\n"
+ " mov r1, #0x1\n"
+ " bl GetTagOfReelSymbolOnScreenAtPos\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r5, r0, #0x18\n"
+ " mov r0, #0x2\n"
+ " mov r1, #0x2\n"
+ " bl GetTagOfReelSymbolOnScreenAtPos\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " mov r8, r0\n"
+ " mov r0, #0x2\n"
+ " mov r1, #0x3\n"
+ " bl GetTagOfReelSymbolOnScreenAtPos\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r0, r0, #0x18\n"
+ " cmp r7, #0\n"
+ " bne .__134 @cond_branch\n"
+ " mov r1, r9\n"
+ " cmp r1, #0x1\n"
+ " bne .__134 @cond_branch\n"
+ " cmp r5, #0\n"
+ " beq .__159 @cond_branch\n"
+ ".__134:\n"
+ " ldr r1, [sp]\n"
+ " cmp r1, #0\n"
+ " bne .__137 @cond_branch\n"
+ " cmp r4, #0x1\n"
+ " bne .__137 @cond_branch\n"
+ " mov r1, r8\n"
+ " cmp r1, #0\n"
+ " beq .__159 @cond_branch\n"
+ ".__137:\n"
+ " cmp r6, #0\n"
+ " bne .__140 @cond_branch\n"
+ " mov r1, sl\n"
+ " cmp r1, #0x1\n"
+ " bne .__140 @cond_branch\n"
+ " cmp r0, #0\n"
+ " beq .__159 @cond_branch\n"
+ ".__140:\n"
+ " cmp r7, #0\n"
+ " bne .__143 @cond_branch\n"
+ " cmp r4, #0x1\n"
+ " bne .__143 @cond_branch\n"
+ " cmp r0, #0\n"
+ " beq .__159 @cond_branch\n"
+ ".__143:\n"
+ " cmp r6, #0\n"
+ " bne .__146 @cond_branch\n"
+ " cmp r4, #0x1\n"
+ " bne .__146 @cond_branch\n"
+ " cmp r5, #0\n"
+ " beq .__159 @cond_branch\n"
+ ".__146:\n"
+ " cmp r7, #0x1\n"
+ " bne .__149 @cond_branch\n"
+ " mov r1, r9\n"
+ " cmp r1, #0\n"
+ " bne .__149 @cond_branch\n"
+ " cmp r5, #0x1\n"
+ " beq .__159 @cond_branch\n"
+ ".__149:\n"
+ " ldr r1, [sp]\n"
+ " cmp r1, #0x1\n"
+ " bne .__152 @cond_branch\n"
+ " cmp r4, #0\n"
+ " bne .__152 @cond_branch\n"
+ " mov r1, r8\n"
+ " cmp r1, #0x1\n"
+ " beq .__159 @cond_branch\n"
+ ".__152:\n"
+ " cmp r6, #0x1\n"
+ " bne .__155 @cond_branch\n"
+ " mov r1, sl\n"
+ " cmp r1, #0\n"
+ " bne .__155 @cond_branch\n"
+ " cmp r0, #0x1\n"
+ " beq .__159 @cond_branch\n"
+ ".__155:\n"
+ " cmp r7, #0x1\n"
+ " bne .__158 @cond_branch\n"
+ " cmp r4, #0\n"
+ " bne .__158 @cond_branch\n"
+ " cmp r0, #0x1\n"
+ " beq .__159 @cond_branch\n"
+ ".__158:\n"
+ " cmp r6, #0x1\n"
+ " bne .__162 @cond_branch\n"
+ " cmp r4, #0\n"
+ " bne .__162 @cond_branch\n"
+ " cmp r5, #0x1\n"
+ " bne .__162 @cond_branch\n"
+ ".__159:\n"
+ " ldr r0, .__163 + 12\n"
+ " mov r1, #0x4\n"
+ " mov r2, #0x0\n"
+ " bl Menu_PrintText\n"
+ " ldr r1, .__163 + 4\n"
+ " mov r0, #0x0\n"
+ " strb r0, [r1]\n"
+ ".__162:\n"
+ " add sp, sp, #0x4\n"
+ " pop {r3, r4, r5}\n"
+ " mov r8, r3\n"
+ " mov r9, r4\n"
+ " mov sl, r5\n"
+ " pop {r4, r5, r6, r7}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ ".__164:\n"
+ " .align 2, 0\n"
+ ".__163:\n"
+ " .word Str_841B2E4\n"
+ " .word unk_debug_bss_1_4\n"
+ " .word +0x2000000\n"
+ " .word Str_841B2BF\n"
+ "\n"
+ );
+}
+#endif
+
+static const u8 sReelSymbols[][21] =
+{
{
SLOT_MACHINE_TAG_7_RED,
SLOT_MACHINE_TAG_CHERRY,
@@ -5394,3 +7779,50 @@ static const struct SpritePalette gSlotMachineSpritePalettes[] = {
static const u8 sReelTimeGfx[] = INCBIN_U8("graphics/slot_machine/reel_time.4bpp.lz");
static const u16 sReelTimeWindowTilemap[] = INCBIN_U16("graphics/slot_machine/reel_time_window_map.bin");
+
+#if DEBUG
+
+const u8 Str_841B1C4[] = _("SETTEI");
+const u8 Str_841B1CB[] = _("MAWASITA");
+const u8 Str_841B1D4[] = _("MODOSI");
+const u8 Str_841B1DB[] = _("NOMARE");
+const u8 Str_841B1E2[] = _("MAE 7");
+const u8 Str_841B1E8[] = _("LR  HENKOU");
+const u8 Str_841B1F3[] = _("START  JIDOUSU");
+const u8 Str_841B202[] = _("SELECT  SETTEI");
+const u8 Str_841B211[] = _("TYUHSEN");
+const u8 Str_841B219[] = _("CHERRY");
+const u8 Str_841B220[] = _("REPLAY");
+const u8 Str_841B227[] = _("HASUBO");
+const u8 Str_841B22E[] = _("RURIRI");
+const u8 Str_841B235[] = _("INAZU");
+const u8 Str_841B23B[] = _("REG");
+const u8 Str_841B23F[] = _("BIG");
+const u8 Str_841B243[] = _("BD");
+const u8 Str_841B246[] = _("R7");
+const u8 Str_841B249[] = _("B7");
+const u8 Str_841B24C[] = _("A  COIN");
+const u8 Str_841B254[] = _("TYUHSEN");
+const u8 Str_841B25C[] = _("UD  100");
+const u8 Str_841B264[] = _("LR  1000");
+const u8 Str_841B26D[] = _("×");
+
+// Is this MenuAction2? I'm not sure.
+const struct {const u8 *text; void (*func)();} _841B270[] =
+{
+ {Str_841B219, debug_sub_811B1C4},
+ {Str_841B220, debug_sub_811B1EC},
+ {Str_841B227, debug_sub_811B210},
+ {Str_841B22E, debug_sub_811B238},
+ {Str_841B235, debug_sub_811B260},
+ {Str_841B23B, debug_sub_811B288},
+ {Str_841B23F, debug_sub_811B2B0},
+ {Str_841B243, debug_sub_811B2D8},
+};
+
+const u8 Str_841B2B0[] = _("·カウントエラーがおきました");
+const u8 Str_841B2BF[] = _("·リールそうさで エラーが おきました");
+const u8 Str_841B2D3[] = _("·フラグオフエラーが おきました");
+const u8 Str_841B2E4[] = _("·ボーナスこやくの エラーが おきました");
+
+#endif
diff --git a/src/field/start_menu.c b/src/field/start_menu.c
index 161b5d6a0..75b600da0 100644
--- a/src/field/start_menu.c
+++ b/src/field/start_menu.c
@@ -43,6 +43,11 @@ enum {
MENU_ACTION_PLAYER_LINK
};
+#if DEBUG
+static u32 _debugStartMenu_0 __attribute__((unused));
+static u32 _debugStartMenu_1 __attribute__((unused));
+#endif
+
static u8 (*saveDialogCallback)(void);
static u8 saveDialogTimer; //Number of frames to keep the window on screen after save was completed
static bool8 savingComplete;
@@ -131,6 +136,304 @@ static bool32 sub_80719FC(u8 *ptr);
static void sub_8071B54(void);
static void Task_8071B64(u8 taskId);
+#if DEBUG
+__attribute__((naked))
+void debug_sub_8075C30()
+{
+ asm(
+ " push {lr}\n"
+ " bl CloseMenu\n"
+ " bl debug_sub_8075D9C\n"
+ " mov r0, #0x1\n"
+ " pop {r1}\n"
+ " bx r1\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_8075C40()
+{
+ asm(
+ " push {r4, r5, r6, r7, lr}\n"
+ " mov r7, sl\n"
+ " mov r6, r9\n"
+ " mov r5, r8\n"
+ " push {r5, r6, r7}\n"
+ " lsl r0, r0, #0x18\n"
+ " lsr r4, r0, #0x18\n"
+ " lsl r0, r4, #0x2\n"
+ " add r0, r0, r4\n"
+ " lsl r0, r0, #0x3\n"
+ " ldr r1, ._5 @ gTasks\n"
+ " add r5, r0, r1\n"
+ " mov r1, #0x0\n"
+ " ldsh r0, [r5, r1]\n"
+ " cmp r0, #0x1\n"
+ " beq ._1 @cond_branch\n"
+ " cmp r0, #0x1\n"
+ " bgt ._2 @cond_branch\n"
+ " cmp r0, #0\n"
+ " beq ._3 @cond_branch\n"
+ " b ._18\n"
+ "._6:\n"
+ " .align 2, 0\n"
+ "._5:\n"
+ " .word gTasks+0x8\n"
+ "._2:\n"
+ " cmp r0, #0x2\n"
+ " beq ._7 @cond_branch\n"
+ " cmp r0, #0x3\n"
+ " beq ._8 @cond_branch\n"
+ " b ._18\n"
+ "._3:\n"
+ " bl m4aSoundVSyncOff\n"
+ " b ._12\n"
+ "._1:\n"
+ " ldr r1, ._13 @ 0x4000208\n"
+ " ldrh r0, [r1]\n"
+ " mov sl, r0\n"
+ " mov r0, #0x0\n"
+ " strh r0, [r1]\n"
+ " ldr r1, ._13 + 4 @ 0x4000108\n"
+ " strh r0, [r1]\n"
+ " mov r0, #0x83\n"
+ " lsl r0, r0, #0x10\n"
+ " str r0, [r1]\n"
+ " ldr r4, ._13 + 8 @ 0xc34f\n"
+ " mov r9, r4\n"
+ " ldr r2, ._13 + 12 @ 0x40000b0\n"
+ " ldr r0, ._13 + 16 @ gScanlineEffectRegBuffers\n"
+ " mov ip, r0\n"
+ " ldr r1, ._13 + 20 @ 0xc5ff\n"
+ " mov r8, r1\n"
+ " ldr r7, ._13 + 24 @ 0x7fff\n"
+ " mov r3, r9\n"
+ " add r3, r3, #0x1\n"
+ " ldr r6, ._13 + 28 @ 0x4000040\n"
+ " ldr r4, ._13 + 32 @ 0xa2600001\n"
+ "._11:\n"
+ " mov r0, ip\n"
+ " str r0, [r2]\n"
+ " str r6, [r2, #0x4]\n"
+ " str r4, [r2, #0x8]\n"
+ " ldr r0, [r2, #0x8]\n"
+ " ldrh r1, [r2, #0xa]\n"
+ " mov r0, r8\n"
+ " and r0, r0, r1\n"
+ " strh r0, [r2, #0xa]\n"
+ " ldrh r1, [r2, #0xa]\n"
+ " add r0, r7, #0\n"
+ " and r0, r0, r1\n"
+ " strh r0, [r2, #0xa]\n"
+ " ldrh r0, [r2, #0xa]\n"
+ " sub r3, r3, #0x1\n"
+ " cmp r3, #0\n"
+ " bne ._11 @cond_branch\n"
+ " mov r3, r9\n"
+ " add r3, r3, #0x1\n"
+ " ldr r0, ._13 + 36 @ 0x400010a\n"
+ " mov r2, #0x0\n"
+ " strh r2, [r0]\n"
+ " ldr r1, ._13 + 4 @ 0x4000108\n"
+ " ldrh r0, [r1]\n"
+ " ldr r4, ._13 + 40 @ _debugStartMenu_0\n"
+ " str r0, [r4]\n"
+ " strh r2, [r1]\n"
+ " ldr r0, ._13 @ 0x4000208\n"
+ " mov r1, sl\n"
+ " strh r1, [r0]\n"
+ " ldr r4, ._13 + 44 @ _debugStartMenu_1\n"
+ " str r3, [r4]\n"
+ " bl m4aSoundVSyncOn\n"
+ " b ._12\n"
+ "._14:\n"
+ " .align 2, 0\n"
+ "._13:\n"
+ " .word 0x4000208\n"
+ " .word 0x4000108\n"
+ " .word 0xc34f\n"
+ " .word 0x40000b0\n"
+ " .word gScanlineEffectRegBuffers\n"
+ " .word 0xc5ff\n"
+ " .word 0x7fff\n"
+ " .word 0x4000040\n"
+ " .word 0xa2600001\n"
+ " .word 0x400010a\n"
+ " .word _debugStartMenu_0\n"
+ " .word _debugStartMenu_1\n"
+ "._7:\n"
+ " mov r0, #0x15\n"
+ " bl PlaySE\n"
+ " ldr r0, ._16 @ gStringVar1\n"
+ " ldr r1, ._16 + 4 @ _debugStartMenu_1\n"
+ " ldr r1, [r1]\n"
+ " mov r2, #0x1\n"
+ " mov r3, #0x8\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " ldr r0, ._16 + 8 @ gStringVar2\n"
+ " ldr r1, ._16 + 12 @ _debugStartMenu_0\n"
+ " ldr r1, [r1]\n"
+ " mov r2, #0x1\n"
+ " mov r3, #0x8\n"
+ " bl ConvertIntToDecimalStringN\n"
+ " bl Menu_DisplayDialogueFrame\n"
+ " ldr r0, ._16 + 16 @ gUnknown_Debug_839B6D8\n"
+ " mov r1, #0x2\n"
+ " mov r2, #0xf\n"
+ " bl Menu_PrintText\n"
+ "._12:\n"
+ " ldrh r0, [r5]\n"
+ " add r0, r0, #0x1\n"
+ " strh r0, [r5]\n"
+ " b ._18\n"
+ "._17:\n"
+ " .align 2, 0\n"
+ "._16:\n"
+ " .word gStringVar1\n"
+ " .word _debugStartMenu_1\n"
+ " .word gStringVar2\n"
+ " .word _debugStartMenu_0\n"
+ " .word gUnknown_Debug_839B6D8\n"
+ "._8:\n"
+ " ldr r0, ._19 @ gMain\n"
+ " ldrh r1, [r0, #0x2e]\n"
+ " mov r0, #0x1\n"
+ " and r0, r0, r1\n"
+ " cmp r0, #0\n"
+ " beq ._18 @cond_branch\n"
+ " bl Menu_EraseScreen\n"
+ " bl ScriptContext2_Disable\n"
+ " add r0, r4, #0\n"
+ " bl DestroyTask\n"
+ "._18:\n"
+ " pop {r3, r4, r5}\n"
+ " mov r8, r3\n"
+ " mov r9, r4\n"
+ " mov sl, r5\n"
+ " pop {r4, r5, r6, r7}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "._20:\n"
+ " .align 2, 0\n"
+ "._19:\n"
+ " .word gMain\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_8075D9C()
+{
+ asm(
+ " push {lr}\n"
+ " ldr r0, ._21 @ debug_sub_8075C40\n"
+ " mov r1, #0xa\n"
+ " bl CreateTask\n"
+ " bl ScriptContext2_Enable\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "._22:\n"
+ " .align 2, 0\n"
+ "._21:\n"
+ " .word debug_sub_8075C40+1\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void debug_sub_8075DB4()
+{
+ asm(
+ " push {r4, r5, r6, lr}\n"
+ " add r6, r0, #0\n"
+ " add r5, r1, #0\n"
+ " add r4, r2, #0\n"
+ " add r0, r4, #0\n"
+ " mov r1, #0x4d\n"
+ " bl __umodsi3\n"
+ " strb r0, [r6, #0x1]\n"
+ " add r1, r6, #0\n"
+ " add r1, r1, #0xc\n"
+ " add r0, r4, #0\n"
+ " bl write_word_to_mem\n"
+ " add r0, r6, #4\n"
+ " add r1, r5, #0\n"
+ " bl StringCopy8\n"
+ " mov r3, #0x7\n"
+ " mov r4, #0x0\n"
+ " ldr r0, ._25 @ gSaveBlock1\n"
+ " ldr r1, ._25 + 4 @ 0x2b28\n"
+ " add r5, r0, r1\n"
+ " add r2, r6, #0\n"
+ " add r2, r2, #0x10\n"
+ " add r1, r6, #0\n"
+ " add r1, r1, #0x1c\n"
+ "._23:\n"
+ " ldrh r0, [r5]\n"
+ " strh r0, [r2]\n"
+ " strh r3, [r1]\n"
+ " add r0, r3, #6\n"
+ " strh r0, [r1, #0xc]\n"
+ " add r3, r3, #0x1\n"
+ " add r5, r5, #0x2\n"
+ " add r2, r2, #0x2\n"
+ " add r1, r1, #0x2\n"
+ " add r4, r4, #0x1\n"
+ " cmp r4, #0x5\n"
+ " ble ._23 @cond_branch\n"
+ " mov r4, #0x0\n"
+ "._24:\n"
+ " mov r0, #0x64\n"
+ " mul r0, r0, r4\n"
+ " ldr r1, ._25 + 8 @ gPlayerParty\n"
+ " add r0, r0, r1\n"
+ " mov r1, #0x2c\n"
+ " mul r1, r1, r4\n"
+ " add r1, r1, #0x34\n"
+ " add r1, r6, r1\n"
+ " bl sub_803AF78\n"
+ " add r4, r4, #0x1\n"
+ " cmp r4, #0x2\n"
+ " ble ._24 @cond_branch\n"
+ " add r0, r6, #0\n"
+ " bl SetEReaderTrainerChecksum\n"
+ " pop {r4, r5, r6}\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "._26:\n"
+ " .align 2, 0\n"
+ "._25:\n"
+ " .word gSaveBlock1\n"
+ " .word 0x2b28\n"
+ " .word gPlayerParty\n"
+ "\n"
+ );
+}
+
+__attribute__((naked))
+void unref_sub_8070F90()
+{
+ asm(
+ " push {lr}\n"
+ " ldr r0, ._27 @ 0x801\n"
+ " bl FlagSet\n"
+ " mov r0, #0x80\n"
+ " lsl r0, r0, #0x4\n"
+ " bl FlagSet\n"
+ " ldr r0, ._27 + 4 @ 0x802\n"
+ " bl FlagSet\n"
+ " pop {r0}\n"
+ " bx r0\n"
+ "._28:\n"
+ " .align 2, 0\n"
+ "._27:\n"
+ " .word 0x801\n"
+ " .word 0x802\n"
+ "\n"
+ );
+}
+#endif
static void BuildStartMenuActions(void)
{
diff --git a/src/field/trader.c b/src/field/trader.c
index 64bd708f6..885557d5a 100644
--- a/src/field/trader.c
+++ b/src/field/trader.c
@@ -108,7 +108,7 @@ void CreateAvailableDecorationsMenu(u8 taskId)
{
if (trader->unk1[i] > DECOR_REGISTEEL_DOLL)
{
- Menu_PrintText(gOtherText_FiveQuestionsAndSlash, 1, numDecorations * 2 + 2);
+ Menu_PrintText(gOtherText_FiveQuestions, 1, numDecorations * 2 + 2);
}
else
{
diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c
index 79542422e..19778e29b 100644
--- a/src/field/wild_encounter.c
+++ b/src/field/wild_encounter.c
@@ -3698,13 +3698,13 @@ const u16 gRoute119WaterTileData[] =
extern u16 gSpecialVar_Result;
extern u8 S_RepelWoreOff[];
-EWRAM_DATA static u8 sWildEncountersDisabled = 0;
+EWRAM_DATA u8 sWildEncountersDisabled = 0;
EWRAM_DATA static u32 sFeebasRngValue = 0;
#define NUM_FEEBAS_SPOTS 6
-static u16 FeebasRandom(void);
-static void FeebasSeedRng(u16 seed);
+u16 FeebasRandom(void);
+void FeebasSeedRng(u16 seed);
static bool8 IsWildLevelAllowedByRepel(u8 level);
static void ApplyFluteEncounterRateMod(u32 *encRate);
@@ -3791,17 +3791,30 @@ static bool8 CheckFeebas(void)
return FALSE;
}
-static u16 FeebasRandom(void)
+u16 FeebasRandom(void)
{
sFeebasRngValue = 12345 + 0x41C64E6D * sFeebasRngValue;
return sFeebasRngValue >> 16;
}
-static void FeebasSeedRng(u16 seed)
+void FeebasSeedRng(u16 seed)
{
sFeebasRngValue = seed;
}
+#if DEBUG
+u16 debug_sub_8092344(u8 arg0)
+{
+ if (arg0 == 0)
+ return 131;
+ if (arg0 == 1)
+ return 167;
+ if (arg0 == 2)
+ return 149;
+ return 0;
+}
+#endif
+
static u8 ChooseWildMonIndex_Land(void)
{
u8 rand = Random() % 100;
@@ -4042,6 +4055,24 @@ static bool8 DoWildEncounterRateDiceRoll(u16 encounterRate)
return FALSE;
}
+#if DEBUG
+u16 debug_sub_809283C(u16 attempts)
+{
+ u16 retval = 0;
+ u16 i = 0;
+
+ while (i < attempts)
+ {
+ if (DoWildEncounterRateDiceRoll(320) == TRUE)
+ retval++;
+
+ i++;
+ }
+
+ return retval;
+}
+#endif
+
static bool8 DoWildEncounterTest(u32 encounterRate, bool8 ignoreAbility)
{
encounterRate *= 16;