summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/watanabe_debug_menu.s338
-rw-r--r--src/debug/watanabe_debug_menu.c137
2 files changed, 136 insertions, 339 deletions
diff --git a/asm/watanabe_debug_menu.s b/asm/watanabe_debug_menu.s
index 80ed3f7b9..3d751e544 100644
--- a/asm/watanabe_debug_menu.s
+++ b/asm/watanabe_debug_menu.s
@@ -5,344 +5,6 @@
.text
- thumb_func_start debug_80C3800
-debug_80C3800:
- push {r4, r5, r6, r7, lr}
- add sp, sp, #0xfffffff4
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- lsl r1, r1, #0x18
- lsr r6, r1, #0x18
- lsl r2, r2, #0x18
- lsr r5, r2, #0x18
- mov r3, #0x0
- ldr r2, ._18 @ gSpeciesNames
- mov r1, #0x0
-._14:
- mov r7, sp
- add r0, r7, r3
- strb r1, [r0]
- add r0, r3, #1
- lsl r0, r0, #0x18
- lsr r3, r0, #0x18
- cmp r3, #0x9
- bls ._14 @cond_branch
- add r1, r7, r3
- mov r0, #0xff
- strb r0, [r1]
- mov r3, #0x0
- mov r0, #0xb
- add r1, r4, #0
- mul r1, r1, r0
- add r0, r1, r2
- ldrb r0, [r0]
- cmp r0, #0xff
- beq ._16 @cond_branch
- add r4, r2, #0
- add r2, r1, #0
-._17:
- mov r0, sp
- add r1, r0, r3
- add r0, r3, r2
- add r0, r0, r4
- ldrb r0, [r0]
- strb r0, [r1]
- add r0, r3, #1
- lsl r0, r0, #0x18
- lsr r3, r0, #0x18
- add r0, r3, r2
- add r0, r0, r4
- ldrb r0, [r0]
- cmp r0, #0xff
- beq ._16 @cond_branch
- cmp r3, #0x9
- bls ._17 @cond_branch
-._16:
- mov r0, sp
- add r1, r6, #0
- add r2, r5, #0
- bl Menu_PrintText
- add sp, sp, #0xc
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
-._19:
- .align 2, 0
-._18:
- .word gSpeciesNames
-
- thumb_func_end debug_80C3800
-
- thumb_func_start debug_80C3878
-debug_80C3878:
- push {lr}
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- lsl r1, r1, #0x10
- lsr r1, r1, #0x10
- cmp r0, #0
- beq ._20 @cond_branch
- cmp r0, #0x1
- beq ._21 @cond_branch
-._20:
- cmp r1, #0x1
- bls ._22 @cond_branch
- sub r0, r1, #1
- b ._23
-._22:
- ldr r1, ._25 @ 0x19b
- b ._28
-._26:
- .align 2, 0
-._25:
- .word 0x19b
-._21:
- mov r0, #0xcd
- lsl r0, r0, #0x1
- cmp r1, r0
- bhi ._27 @cond_branch
- add r0, r1, #1
-._23:
- lsl r0, r0, #0x10
- lsr r1, r0, #0x10
- b ._28
-._27:
- mov r1, #0x1
-._28:
- add r0, r1, #0
- pop {r1}
- bx r1
-
- thumb_func_end debug_80C3878
-
- thumb_func_start debug_80C38B4
-debug_80C38B4:
- push {lr}
- lsl r0, r0, #0x18
- lsr r2, r0, #0x18
- lsl r1, r1, #0x10
- lsr r0, r1, #0x10
- cmp r2, #0
- beq ._29 @cond_branch
- cmp r2, #0x1
- beq ._30 @cond_branch
-._29:
- cmp r0, #0
- beq ._31 @cond_branch
- sub r0, r0, #0x1
- b ._32
-._31:
- mov r0, #0x52
- b ._35
-._30:
- cmp r0, #0x51
- bhi ._34 @cond_branch
- add r0, r0, #0x1
-._32:
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- b ._35
-._34:
- mov r0, #0x0
-._35:
- pop {r1}
- bx r1
-
- thumb_func_end debug_80C38B4
-
- thumb_func_start debug_80C38E4
-debug_80C38E4:
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- add sp, sp, #0xfffffffc
- add r4, r2, #0
- add r5, r3, #0
- ldr r6, [sp, #0x1c]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- mov r8, r0
- lsl r1, r1, #0x18
- lsr r7, r1, #0x18
- lsl r4, r4, #0x18
- lsr r4, r4, #0x18
- lsl r5, r5, #0x18
- lsr r5, r5, #0x18
- lsl r6, r6, #0x18
- lsr r6, r6, #0x18
- ldr r1, ._37 @ gUnknown_Debug_083F7FD4
- mov r0, sp
- mov r2, #0x2
- bl memcpy
- add r0, r7, #0
- add r1, r4, #0
- add r2, r7, #0
- add r3, r5, #0
- bl Menu_BlankWindowRect
- cmp r6, #0
- beq ._36 @cond_branch
- mov r0, sp
- add r1, r7, #0
- mov r2, r8
- bl Menu_PrintText
-._36:
- add sp, sp, #0x4
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
-._38:
- .align 2, 0
-._37:
- .word gUnknown_Debug_083F7FD4
-
- thumb_func_end debug_80C38E4
-
- thumb_func_start debug_80C393C
-debug_80C393C:
- push {lr}
- ldr r1, ._39 @ gUnknown_Debug_083F7FD6
- mov r0, #0x1e
- bl ProgramFlashSectorAndVerify
- pop {r0}
- bx r0
-._40:
- .align 2, 0
-._39:
- .word gUnknown_Debug_083F7FD6
-
- thumb_func_end debug_80C393C
-
- thumb_func_start InitWatanabeDebugMenu
-InitWatanabeDebugMenu:
- push {r4, lr}
- ldr r0, ._46 @ gMain
- ldr r1, ._46 + 4 @ 0x43c
- add r4, r0, r1
- ldrb r0, [r4]
- cmp r0, #0x1
- beq ._41 @cond_branch
- cmp r0, #0x1
- ble ._42 @cond_branch
- cmp r0, #0x2
- beq ._43 @cond_branch
- cmp r0, #0x3
- beq ._44 @cond_branch
-._42:
- bl save_serialize_map
- bl sub_8125E2C
- mov r0, #0x1
- strb r0, [r4]
- b ._51
-._47:
- .align 2, 0
-._46:
- .word gMain
- .word 0x43c
-._41:
- bl sub_8125E6C
- lsl r0, r0, #0x18
- cmp r0, #0
- beq ._51 @cond_branch
- b ._49
-._43:
- mov r0, #0x37
- bl PlaySE
-._49:
- ldrb r0, [r4]
- add r0, r0, #0x1
- strb r0, [r4]
- b ._51
-._44:
- bl IsSEPlaying
- lsl r0, r0, #0x18
- cmp r0, #0
- bne ._51 @cond_branch
- bl ScriptContext2_Disable
- ldr r0, ._52 @ sub_80546F0
- bl SetMainCallback2
-._51:
- pop {r4}
- pop {r0}
- bx r0
-._53:
- .align 2, 0
-._52:
- .word sub_80546F0+1
-
- thumb_func_end InitWatanabeDebugMenu
-
- thumb_func_start InitSizeComparison
-InitSizeComparison:
- push {r4, lr}
- add sp, sp, #0xfffffffc
- bl debug_80C35DC
- ldr r1, ._54 @ gReservedSpritePaletteCount
- mov r0, #0x1
- strb r0, [r1]
- ldr r0, ._54 + 4 @ gUnknown_Debug_20389EC
- mov r1, #0x80
- lsl r1, r1, #0x1
- mov r2, #0x20
- bl LoadPalette
- ldr r3, ._54 + 8 @ 0x4000208
- ldrh r2, [r3]
- mov r0, #0x0
- strh r0, [r3]
- ldr r4, ._54 + 12 @ 0x4000200
- ldrh r0, [r4]
- mov r1, #0x1
- orr r0, r0, r1
- strh r0, [r4]
- strh r2, [r3]
- mov r0, #0x1
- neg r0, r0
- mov r1, #0x0
- str r1, [sp]
- mov r2, #0x10
- mov r3, #0x0
- bl BeginNormalPaletteFade
- ldr r0, ._54 + 16 @ debug_80C3758
- bl SetVBlankCallback
- ldr r0, ._54 + 20 @ debug_80C370C
- bl SetMainCallback2
- mov r1, #0x80
- lsl r1, r1, #0x13
- mov r2, #0x8a
- lsl r2, r2, #0x5
- add r0, r2, #0
- strh r0, [r1]
- ldr r0, ._54 + 24 @ debug_80C3A50
- mov r1, #0x0
- bl CreateTask
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- ldr r2, ._54 + 28 @ gTasks
- lsl r1, r0, #0x2
- add r1, r1, r0
- lsl r1, r1, #0x3
- add r1, r1, r2
- mov r0, #0xfc
- strh r0, [r1, #0x8]
- add sp, sp, #0x4
- pop {r4}
- pop {r0}
- bx r0
-._55:
- .align 2, 0
-._54:
- .word gReservedSpritePaletteCount
- .word gUnknown_Debug_20389EC
- .word 0x4000208
- .word 0x4000200
- .word debug_80C3758+1
- .word debug_80C370C+1
- .word debug_80C3A50+1
- .word gTasks
-
- thumb_func_end InitSizeComparison
-
thumb_func_start debug_80C3A50
debug_80C3A50:
push {r4, r5, r6, r7, lr}
diff --git a/src/debug/watanabe_debug_menu.c b/src/debug/watanabe_debug_menu.c
index 43d63dce4..582b65a3e 100644
--- a/src/debug/watanabe_debug_menu.c
+++ b/src/debug/watanabe_debug_menu.c
@@ -1,5 +1,8 @@
#if DEBUG
#include "global.h"
+#include "gba/flash_internal.h"
+#include "constants/species.h"
+#include "constants/songs.h"
#include "debug.h"
#include "palette.h"
#include "scanline_effect.h"
@@ -10,6 +13,10 @@
#include "menu.h"
#include "script.h"
#include "overworld.h"
+#include "data2.h"
+#include "fieldmap.h"
+#include "save.h"
+#include "sound.h"
EWRAM_DATA u8 gUnknown_Debug_20389EC[0x20] = { 0 };
EWRAM_DATA u8 gUnknown_Debug_2038A0C[0x10] = { 0 };
@@ -18,9 +25,14 @@ EWRAM_DATA u8 gUnknown_Debug_2038A20[4] = { 0 };
u8 byte_3005E30[0x20];
+extern const u8 gUnknown_Debug_083F7FD4[2]; // = _("▶");
+extern const u8 gUnknown_Debug_083F7FD6[8]; // = _("ゆみあくひりつ");
+
extern const struct SpriteSheet stru_83F8828[2];
extern const struct SpritePalette stru_83F8838[2];
+void debug_80C3A50(u8 taskId);
+
void debug_69(struct Sprite *sprite)
{
@@ -102,7 +114,7 @@ void debug_80C376C(u16 a0, u8 a1, u8 a2)
bool8 r4;
for (i = 0; i < 3; i++)
- sp00[i] = 0;
+ sp00[i] = CHAR_SPACE;
sp00[3] = EOS;
r4 = FALSE;
@@ -124,4 +136,127 @@ void debug_80C376C(u16 a0, u8 a1, u8 a2)
Menu_PrintText(sp00, a1, a2);
}
+void debug_80C3800(u16 a0, u8 a1, u8 a2)
+{
+ u8 sp00[11];
+ u8 i;
+
+ for (i = 0; i < 10; i++)
+ sp00[i] = CHAR_SPACE;
+ sp00[i] = EOS;
+
+ for (i = 0; gSpeciesNames[a0][i] != EOS && i < 10; i++)
+ sp00[i] = gSpeciesNames[a0][i];
+
+ Menu_PrintText(sp00, a1, a2);
+}
+
+u16 debug_80C3878(u8 a0, u16 a1)
+{
+ switch (a0)
+ {
+ default:
+ case 0:
+ if (a1 > SPECIES_BULBASAUR)
+ a1--;
+ else
+ a1 = NUM_SPECIES - 1;
+ break;
+ case 1:
+ if (a1 < NUM_SPECIES - 1)
+ a1++;
+ else
+ a1 = SPECIES_BULBASAUR;
+ break;
+ }
+ return a1;
+}
+
+u16 debug_80C38B4(u8 a0, u16 a1)
+{
+ switch (a0)
+ {
+ default:
+ case 0:
+ if (a1)
+ a1--;
+ else
+ a1 = 0x52;
+ break;
+ case 1:
+ if (a1 < 0x52)
+ a1++;
+ else
+ a1 = 0;
+ break;
+ }
+ return a1;
+}
+
+void debug_80C38E4(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4)
+{
+ // u8 sp00[] = _("▶");
+ u8 sp00[2];
+
+ memcpy(sp00, gUnknown_Debug_083F7FD4, ARRAY_COUNT(gUnknown_Debug_083F7FD4));
+ Menu_BlankWindowRect(a1, a2, a1, a3);
+ if (a4)
+ Menu_PrintText(sp00, a1, a0);
+}
+
+void debug_80C393C(void)
+{
+ ProgramFlashSectorAndVerify(30, (void *)gUnknown_Debug_083F7FD6);
+}
+
+void InitWatanabeDebugMenu(void)
+{
+ switch (gMain.state)
+ {
+ default:
+ case 0:
+ save_serialize_map();
+ sub_8125E2C();
+ gMain.state = 1;
+ break;
+ case 1:
+ if (sub_8125E6C())
+ gMain.state++;
+ break;
+ case 2:
+ PlaySE(SE_SAVE);
+ gMain.state++;
+ break;
+ case 3:
+ if (!IsSEPlaying())
+ {
+ ScriptContext2_Disable();
+ SetMainCallback2(sub_80546F0);
+ }
+ break;
+ }
+}
+
+void InitSizeComparison(void)
+{
+ u8 taskId;
+ debug_80C35DC();
+ gReservedSpritePaletteCount = 1;
+ LoadPalette(gUnknown_Debug_20389EC, 0x100, 0x20);
+
+ {
+ u16 imeBak = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = imeBak;
+ }
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ SetVBlankCallback(debug_80C3758);
+ SetMainCallback2(debug_80C370C);
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_OBJ_ON;
+ taskId = CreateTask(debug_80C3A50, 0);
+ gTasks[taskId].data[0] = 0xfc;
+}
+
#endif