summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/watanabe_debug_menu.s431
-rw-r--r--data/debug_menu_watanabe.s21
-rw-r--r--include/battle.h4
-rw-r--r--src/debug/watanabe_debug_menu.c138
4 files changed, 155 insertions, 439 deletions
diff --git a/asm/watanabe_debug_menu.s b/asm/watanabe_debug_menu.s
index f02f6f702..7260c0bc4 100644
--- a/asm/watanabe_debug_menu.s
+++ b/asm/watanabe_debug_menu.s
@@ -5,437 +5,6 @@
.text
- thumb_func_start debug_80C4900
-debug_80C4900:
- push {r4, r5, lr}
- add sp, sp, #0xfffffffc
- lsl r0, r0, #0x18
- lsr r5, r0, #0x18
- ldr r1, ._230 @ gMain
- ldrh r2, [r1, #0x2e]
- mov r0, #0x2
- and r0, r0, r2
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- add r3, r1, #0
- cmp r4, #0
- beq ._228 @cond_branch
- mov r0, #0x5
- bl PlaySE
- mov r0, #0x1
- neg r0, r0
- mov r4, #0x0
- str r4, [sp]
- mov r1, #0x0
- mov r2, #0x0
- mov r3, #0x10
- bl BeginNormalPaletteFade
- ldr r0, ._230 + 4 @ debug_80C370C
- bl SetMainCallback2
- bl LoadPlayerParty
- ldr r1, ._230 + 8 @ gSaveBlock2
- ldr r0, ._230 + 12 @ gUnknown_Debug_2038A0C
- ldrb r0, [r0, #0xd]
- strb r0, [r1, #0x8]
- ldr r0, ._230 + 16 @ gBattleTypeFlags
- mov r1, #0x0
- strh r4, [r0]
- ldr r0, ._230 + 20 @ gUnknown_02023A14_50
- strb r1, [r0]
- ldr r1, ._230 + 24 @ gTasks
- lsl r0, r5, #0x2
- add r0, r0, r5
- lsl r0, r0, #0x3
- add r0, r0, r1
- ldr r1, ._230 + 28 @ debug_80C373C
- b ._229
-._231:
- .align 2, 0
-._230:
- .word gMain
- .word debug_80C370C+1
- .word gSaveBlock2
- .word gUnknown_Debug_2038A0C
- .word gBattleTypeFlags
- .word gUnknown_02023A14_50
- .word gTasks
- .word debug_80C373C+1
-._228:
- mov r0, #0x8
- and r0, r0, r2
- cmp r0, #0
- bne ._232 @cond_branch
- mov r0, #0x1
- and r0, r0, r2
- cmp r0, #0
- beq ._233 @cond_branch
-._232:
- mov r0, #0x5
- bl PlaySE
- ldr r1, ._236 @ gBattleTypeFlags
- ldr r3, ._236 + 4 @ gUnknown_Debug_083F8068
- ldr r2, ._236 + 8 @ gUnknown_Debug_2038A0C
- ldrb r0, [r2, #0x3]
- lsl r0, r0, #0x3
- add r0, r0, r3
- ldrb r0, [r0, #0x4]
- strh r0, [r1]
- ldr r1, ._236 + 12 @ gUnknown_02023A14_50
- mov r0, #0x8
- strb r0, [r1]
- ldrb r0, [r2, #0x3]
- lsl r0, r0, #0x3
- add r0, r0, r3
- ldrb r0, [r0, #0x5]
- strb r0, [r2, #0xc]
- ldrb r0, [r2, #0x3]
- sub r0, r0, #0x1
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x1
- bhi ._234 @cond_branch
- str r4, [sp]
- mov r0, #0x0
- mov r1, #0x1
- mov r2, #0x1
- mov r3, #0xe
- bl debug_80C38E4
- ldr r0, ._236 + 16 @ gTasks
- lsl r1, r5, #0x2
- add r1, r1, r5
- lsl r1, r1, #0x3
- add r1, r1, r0
- ldr r0, ._236 + 20 @ debug_80C4A60
- str r0, [r1]
- b ._247
-._237:
- .align 2, 0
-._236:
- .word gBattleTypeFlags
- .word gUnknown_Debug_083F8068
- .word gUnknown_Debug_2038A0C
- .word gUnknown_02023A14_50
- .word gTasks
- .word debug_80C4A60+1
-._234:
- ldr r0, ._239 @ gTasks
- lsl r1, r5, #0x2
- add r1, r1, r5
- lsl r1, r1, #0x3
- add r1, r1, r0
- ldr r0, ._239 + 4 @ debug_80C4F48
- str r0, [r1]
- b ._247
-._240:
- .align 2, 0
-._239:
- .word gTasks
- .word debug_80C4F48+1
-._233:
- ldrh r1, [r3, #0x30]
- mov r0, #0x40
- and r0, r0, r1
- cmp r0, #0
- beq ._242 @cond_branch
- ldr r1, ._244 @ gUnknown_Debug_2038A0C
- ldrb r0, [r1, #0x3]
- cmp r0, #0
- beq ._242 @cond_branch
- sub r0, r0, #0x1
- b ._243
-._245:
- .align 2, 0
-._244:
- .word gUnknown_Debug_2038A0C
-._242:
- ldrh r1, [r3, #0x30]
- mov r0, #0x80
- and r0, r0, r1
- cmp r0, #0
- beq ._247 @cond_branch
- ldr r1, ._248 @ gUnknown_Debug_2038A0C
- ldrb r0, [r1, #0x3]
- cmp r0, #0x1
- bhi ._247 @cond_branch
- add r0, r0, #0x1
-._243:
- strb r0, [r1, #0x3]
- ldr r1, ._248 + 4 @ gTasks
- lsl r0, r5, #0x2
- add r0, r0, r5
- lsl r0, r0, #0x3
- add r0, r0, r1
- ldr r1, ._248 + 8 @ debug_80C48A0
-._229:
- str r1, [r0]
-._247:
- add sp, sp, #0x4
- pop {r4, r5}
- pop {r0}
- bx r0
-._249:
- .align 2, 0
-._248:
- .word gUnknown_Debug_2038A0C
- .word gTasks
- .word debug_80C48A0+1
-
- thumb_func_end debug_80C4900
-
- thumb_func_start debug_80C4A60
-debug_80C4A60:
- push {r4, lr}
- add sp, sp, #0xfffffffc
- add r4, r0, #0
- lsl r4, r4, #0x18
- lsr r4, r4, #0x18
- ldr r0, ._250 @ gUnknown_Debug_2038A0C
- ldrb r0, [r0, #0x5]
- lsl r0, r0, #0x19
- mov r1, #0xc0
- lsl r1, r1, #0x12
- add r0, r0, r1
- lsr r0, r0, #0x18
- mov r1, #0x1
- str r1, [sp]
- mov r1, #0x10
- mov r2, #0x1
- mov r3, #0xe
- bl debug_80C38E4
- ldr r1, ._250 + 4 @ 0x4000042
- ldr r2, ._250 + 8 @ 0x79ef
- add r0, r2, #0
- strh r0, [r1]
- add r1, r1, #0x4
- ldr r2, ._250 + 12 @ 0x17f
- add r0, r2, #0
- strh r0, [r1]
- ldr r1, ._250 + 16 @ gTasks
- lsl r0, r4, #0x2
- add r0, r0, r4
- lsl r0, r0, #0x3
- add r0, r0, r1
- ldr r1, ._250 + 20 @ debug_80C4AC4
- str r1, [r0]
- add sp, sp, #0x4
- pop {r4}
- pop {r0}
- bx r0
-._251:
- .align 2, 0
-._250:
- .word gUnknown_Debug_2038A0C
- .word 0x4000042
- .word 0x79ef
- .word 0x17f
- .word gTasks
- .word debug_80C4AC4+1
-
- thumb_func_end debug_80C4A60
-
- thumb_func_start debug_80C4AC4
-debug_80C4AC4:
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- add sp, sp, #0xfffffffc
- lsl r0, r0, #0x18
- lsr r6, r0, #0x18
- ldr r7, ._255 @ gUnknown_Debug_2038A0C
- ldrb r0, [r7, #0x4]
- mov ip, r0
- ldrb r5, [r7, #0x5]
- mov r1, ip
- add r0, r1, r5
- lsl r0, r0, #0x18
- lsr r1, r0, #0x18
- ldr r2, ._255 + 4 @ gMain
- mov r8, r2
- ldrh r2, [r2, #0x2e]
- mov r3, #0x1
- and r3, r3, r2
- add r4, r7, #0
- cmp r3, #0
- beq ._252 @cond_branch
- ldr r0, ._255 + 8 @ gUnknown_Debug_083F80D8
- lsl r1, r1, #0x3
- add r0, r0, #0x4
- add r1, r1, r0
- ldr r1, [r1]
- ldr r3, ._255 + 12 @ byte_3005E30
- ldr r2, [r3]
- add r0, r2, #0
- and r0, r0, r1
- cmp r0, #0
- beq ._253 @cond_branch
- ldr r0, ._255 + 16 @ 0xffff
- eor r1, r1, r0
- and r2, r2, r1
- b ._254
-._256:
- .align 2, 0
-._255:
- .word gUnknown_Debug_2038A0C
- .word gMain
- .word gUnknown_Debug_083F80D8
- .word byte_3005E30
- .word 0xffff
-._253:
- orr r2, r2, r1
-._254:
- str r2, [r3]
- ldrb r0, [r4, #0x4]
- bl debug_80C4C44
- ldr r1, ._258 @ gTasks
- lsl r0, r6, #0x2
- add r0, r0, r6
- lsl r0, r0, #0x3
- add r0, r0, r1
- ldr r1, ._258 + 4 @ debug_80C4A60
- str r1, [r0]
- b ._274
-._259:
- .align 2, 0
-._258:
- .word gTasks
- .word debug_80C4A60+1
-._252:
- mov r0, #0x2
- and r0, r0, r2
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- cmp r4, #0
- beq ._260 @cond_branch
- str r3, [sp]
- mov r0, #0x0
- mov r1, #0x10
- mov r2, #0x1
- mov r3, #0xe
- bl debug_80C38E4
- ldr r0, ._262 @ gTasks
- lsl r1, r6, #0x2
- add r1, r1, r6
- lsl r1, r1, #0x3
- add r1, r1, r0
- ldr r0, ._262 + 4 @ debug_80C48A0
- b ._261
-._263:
- .align 2, 0
-._262:
- .word gTasks
- .word debug_80C48A0+1
-._260:
- mov r0, #0x8
- and r0, r0, r2
- cmp r0, #0
- beq ._264 @cond_branch
- mov r0, #0x5
- bl PlaySE
- ldr r1, ._266 @ gTrainerBattleOpponent
- mov r2, #0x80
- lsl r2, r2, #0x3
- add r0, r2, #0
- strh r0, [r1]
- ldr r1, ._266 + 4 @ 0x2017000
- ldrb r2, [r1, #0x1]
- mov r0, #0x11
- neg r0, r0
- and r0, r0, r2
- strb r0, [r1, #0x1]
- mov r0, #0xac
- strb r0, [r1, #0x2]
- mov r0, #0xff
- strb r0, [r1, #0x3]
- strb r4, [r1, #0x9]
- strb r4, [r1, #0xa]
- strb r4, [r1, #0xb]
- strb r4, [r1, #0xc]
- ldr r1, ._266 + 8 @ gTasks
- lsl r0, r6, #0x2
- add r0, r0, r6
- lsl r0, r0, #0x3
- add r0, r0, r1
- ldr r1, ._266 + 12 @ debug_80C4F48
- str r1, [r0]
- b ._274
-._267:
- .align 2, 0
-._266:
- .word gTrainerBattleOpponent
- .word 0x2017000
- .word gTasks
- .word debug_80C4F48+1
-._264:
- mov r0, r8
- ldrh r1, [r0, #0x30]
- mov r0, #0x40
- and r0, r0, r1
- cmp r0, #0
- beq ._268 @cond_branch
- lsl r0, r5, #0x18
- cmp r0, #0
- beq ._269 @cond_branch
- sub r0, r5, #1
- strb r0, [r7, #0x5]
- b ._277
-._269:
- mov r1, ip
- lsl r0, r1, #0x18
- cmp r0, #0
- beq ._277 @cond_branch
- mov r0, ip
- sub r0, r0, #0x1
- b ._272
-._268:
- mov r0, #0x80
- and r0, r0, r1
- cmp r0, #0
- beq ._274 @cond_branch
- lsl r0, r5, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x8
- bhi ._274 @cond_branch
- cmp r0, #0x4
- bhi ._275 @cond_branch
- add r0, r5, #1
- strb r0, [r7, #0x5]
- b ._277
-._275:
- mov r2, ip
- lsl r0, r2, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x3
- bhi ._277 @cond_branch
- mov r0, ip
- add r0, r0, #0x1
-._272:
- strb r0, [r7, #0x4]
- ldrb r0, [r7, #0x4]
- bl debug_80C4C44
-._277:
- ldr r0, ._278 @ gTasks
- lsl r1, r6, #0x2
- add r1, r1, r6
- lsl r1, r1, #0x3
- add r1, r1, r0
- ldr r0, ._278 + 4 @ debug_80C4A60
-._261:
- str r0, [r1]
-._274:
- add sp, sp, #0x4
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
-._279:
- .align 2, 0
-._278:
- .word gTasks
- .word debug_80C4A60+1
-
- thumb_func_end debug_80C4AC4
-
thumb_func_start debug_80C4C44
debug_80C4C44:
push {r4, r5, r6, r7, lr}
diff --git a/data/debug_menu_watanabe.s b/data/debug_menu_watanabe.s
index 8717196ef..5b99533da 100644
--- a/data/debug_menu_watanabe.s
+++ b/data/debug_menu_watanabe.s
@@ -56,12 +56,23 @@ gUnknown_Debug_083F8048:: @ 0x83F8048
gUnknown_Debug_083F8058:: @ 0x83F8058
.string "{COLOR BLUE}2VS2つうしんたいせん$"
+ .align 2
gUnknown_Debug_083F8068:: @ 0x83F8068
- .4byte gUnknown_Debug_083F802E, 0x100
- .4byte gUnknown_Debug_083F8036, 0x108
- .4byte gUnknown_Debug_083F803F, 0x209
- .4byte gUnknown_Debug_083F8048, 0x10A
- .4byte gUnknown_Debug_083F8058, 0x20B
+ .4byte gUnknown_Debug_083F802E
+ .byte 0x00, 0x01
+ .align 2
+ .4byte gUnknown_Debug_083F8036
+ .byte 0x08, 0x01
+ .align 2
+ .4byte gUnknown_Debug_083F803F
+ .byte 0x09, 0x02
+ .align 2
+ .4byte gUnknown_Debug_083F8048
+ .byte 0x0A, 0x01
+ .align 2
+ .4byte gUnknown_Debug_083F8058
+ .byte 0x0B, 0x02
+ .align 2
gUnknown_Debug_083F8090:: @ 0x83F8090
.string "きほんタイプ$"
diff --git a/include/battle.h b/include/battle.h
index 02e02ca83..e63560421 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -721,6 +721,10 @@ void MarkBufferBankForExecution(u8 bank);
extern u8 gBattleTextBuff1[];
+extern u16 gBattleTypeFlags;
+extern u8 gUnknown_02023A14_50;
+extern u16 gTrainerBattleOpponent;
+
// src/battle_bg.o
void sub_800D6D4();
void ApplyPlayerChosenFrameToBattleMenu();
diff --git a/src/debug/watanabe_debug_menu.c b/src/debug/watanabe_debug_menu.c
index 112fd7e13..dcb74b870 100644
--- a/src/debug/watanabe_debug_menu.c
+++ b/src/debug/watanabe_debug_menu.c
@@ -1,5 +1,6 @@
#if DEBUG
#include "global.h"
+#include "ewram.h"
#include "gba/flash_internal.h"
#include "constants/species.h"
#include "constants/songs.h"
@@ -20,15 +21,22 @@
#include "pokedex.h"
#include "load_save.h"
#include "pokemon_storage_system.h"
+#include "battle.h"
EWRAM_DATA u8 gUnknown_Debug_20389EC[0x20] = { 0 };
EWRAM_DATA u8 gUnknown_Debug_2038A0C[0x10] = { 0 };
EWRAM_DATA u8 gUnknown_Debug_2038A1C[4] = { 0 };
EWRAM_DATA u8 gUnknown_Debug_2038A20[4] = { 0 };
-struct WatanabeDebugMenuItem {
+struct WatanabeDebugMenuItem1 {
const u8 * text;
- u32 value;
+ u8 battleTypeFlags;
+ u8 unk5;
+};
+
+struct WatanabeDebugMenuItem2 {
+ const u8 * text;
+ u32 mask;
};
u32 byte_3005E30;
@@ -47,12 +55,15 @@ bool8 debug_80C4774(void);
void debug_80C47BC(u8 taskId);
void debug_80C48A0(u8 taskId);
void debug_80C4900(u8 taskId);
+void debug_80C4A60(u8 taskId);
+void debug_80C4AC4(u8 taskId);
void debug_80C4C44(u8);
void debug_80C4D14(u8 taskId);
void debug_80C4F48(u8 taskId);
void debug_80C68CC(u16, u8, u8, u8);
-extern const struct WatanabeDebugMenuItem gUnknown_Debug_083F8068[5];
+extern const struct WatanabeDebugMenuItem1 gUnknown_Debug_083F8068[5];
+extern const struct WatanabeDebugMenuItem2 gUnknown_Debug_083F80D8[10];
extern const u8 gUnknown_Debug_083F7FD4[2]; // = _("▶");
extern const u8 gUnknown_Debug_083F7FD6[4]; // = {0x25, 0x20, 0x01, 0x08};
@@ -1141,4 +1152,125 @@ void debug_80C48A0(u8 taskId)
gTasks[taskId].func = debug_80C4900;
}
+void debug_80C4900(u8 taskId)
+{
+ if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ SetMainCallback2(debug_80C370C);
+ LoadPlayerParty();
+ gSaveBlock2.playerGender = gUnknown_Debug_2038A0C[13];
+ gBattleTypeFlags = 0;
+ gUnknown_02023A14_50 = 0;
+ gTasks[taskId].func = debug_80C373C;
+ }
+ else if (gMain.newKeys & START_BUTTON || gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gBattleTypeFlags = gUnknown_Debug_083F8068[gUnknown_Debug_2038A0C[3]].battleTypeFlags;
+ gUnknown_02023A14_50 = 8;
+ gUnknown_Debug_2038A0C[12] = gUnknown_Debug_083F8068[gUnknown_Debug_2038A0C[3]].unk5;
+ if (gUnknown_Debug_2038A0C[3] == 1 || gUnknown_Debug_2038A0C[3] == 2)
+ {
+ debug_80C38E4(0, 1, 1, 14, 0);
+ gTasks[taskId].func = debug_80C4A60;
+ }
+ else
+ {
+ gTasks[taskId].func = debug_80C4F48;
+ }
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_UP && gUnknown_Debug_2038A0C[3] > 0)
+ {
+ gUnknown_Debug_2038A0C[3]--;
+ gTasks[taskId].func = debug_80C48A0;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN && gUnknown_Debug_2038A0C[3] < 2)
+ {
+ gUnknown_Debug_2038A0C[3]++;
+ gTasks[taskId].func = debug_80C48A0;
+ }
+}
+
+void debug_80C4A60(u8 taskId)
+{
+ debug_80C38E4(gUnknown_Debug_2038A0C[5] * 2 + 3, 16, 1, 14, 1);
+ REG_WIN1H = 0x79EF;
+ REG_WIN1V = 0x017F;
+ gTasks[taskId].func = debug_80C4AC4;
+}
+
+struct WatanabeEwram17000 {
+ u8 fill0;
+ u8 unk1_0:4;
+ u8 unk1_4:1;
+ u8 unk1_5:3;
+ u8 unk2;
+ u8 unk3;
+ u8 fill4[5];
+ u8 unk9;
+ u8 unkA;
+ u8 unkB;
+ u8 unkC;
+};
+
+#define eWatanabe17000 (*(struct WatanabeEwram17000 *)(gSharedMem + 0x17000))
+
+void debug_80C4AC4(u8 taskId)
+{
+ u8 r1 = gUnknown_Debug_2038A0C[4] + gUnknown_Debug_2038A0C[5];
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ u32 mask = gUnknown_Debug_083F80D8[r1].mask;
+ if (byte_3005E30 & mask)
+ byte_3005E30 &= (mask ^ 0xFFFF);
+ else
+ byte_3005E30 |= mask;
+ debug_80C4C44(gUnknown_Debug_2038A0C[4]);
+ gTasks[taskId].func = debug_80C4A60;
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ debug_80C38E4(0, 16, 1, 14, 0);
+ gTasks[taskId].func = debug_80C48A0;
+ }
+ else if (gMain.newKeys & START_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gTrainerBattleOpponent = 0x400;
+ eWatanabe17000.unk1_4 = 0;
+ eWatanabe17000.unk2 = 0xAC;
+ eWatanabe17000.unk3 = 0xFF;
+ eWatanabe17000.unk9 = 0;
+ eWatanabe17000.unkA = 0;
+ eWatanabe17000.unkB = 0;
+ eWatanabe17000.unkC = 0;
+ gTasks[taskId].func = debug_80C4F48;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ if (gUnknown_Debug_2038A0C[5] > 0)
+ gUnknown_Debug_2038A0C[5]--;
+ else if (gUnknown_Debug_2038A0C[4] > 0)
+ {
+ gUnknown_Debug_2038A0C[4]--;
+ debug_80C4C44(gUnknown_Debug_2038A0C[4]);
+ }
+ gTasks[taskId].func = debug_80C4A60;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN && gUnknown_Debug_2038A0C[5] < 9)
+ {
+ if (gUnknown_Debug_2038A0C[5] < 5)
+ gUnknown_Debug_2038A0C[5]++;
+ else if (gUnknown_Debug_2038A0C[4] < 4)
+ {
+ gUnknown_Debug_2038A0C[4]++;
+ debug_80C4C44(gUnknown_Debug_2038A0C[4]);
+ }
+ gTasks[taskId].func = debug_80C4A60;
+ }
+}
+
#endif // DEBUG