summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2016-11-05 17:11:17 -0400
committerYamaArashi <YamaArashi@users.noreply.github.com>2016-11-05 14:11:17 -0700
commite31301d6ea7a772df3f25b7ce60d261e0c039cc0 (patch)
treefbe253b38adb7bfc1eefdf06b88e605869f494b6
parentd26298bd4e742218a39ce7b635e502f704f73eba (diff)
decompile mori_debug_menu.c (#90)
* decompile mori_debug_menu.c * formatting
-rw-r--r--asm/mori_debug_menu.s322
-rw-r--r--include/global.h4
-rw-r--r--ld_script.txt2
-rw-r--r--src/mori_debug_menu.c157
4 files changed, 161 insertions, 324 deletions
diff --git a/asm/mori_debug_menu.s b/asm/mori_debug_menu.s
deleted file mode 100644
index b61ad2f54..000000000
--- a/asm/mori_debug_menu.s
+++ /dev/null
@@ -1,322 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8083D4C
-sub_8083D4C: @ 8083D4C
- push {lr}
- ldr r0, _08083D60 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08083D64
- movs r0, 0
- b _08083D6A
- .align 2, 0
-_08083D60: .4byte gMain
-_08083D64:
- bl sub_8071C20
- movs r0, 0x1
-_08083D6A:
- pop {r1}
- bx r1
- thumb_func_end sub_8083D4C
-
- thumb_func_start MoriDebugMenu_SearchChild
-MoriDebugMenu_SearchChild: @ 8083D70
- push {r4-r6,lr}
- sub sp, 0x34
- ldr r0, _08083DE4 @ =gPlayerParty
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r4, 0
- bl sub_8041870
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- movs r6, 0xB
- adds r1, r4, 0
- muls r1, r6
- ldr r4, _08083DE8 @ =gSpeciesNames
- adds r1, r4
- mov r0, sp
- bl StringCopy
- ldr r1, _08083DEC @ =gUnknown_0839B24D
- mov r0, sp
- bl StringAppend
- adds r1, r5, 0
- muls r1, r6
- adds r1, r4
- mov r0, sp
- bl StringAppend
- ldr r1, _08083DF0 @ =gUnknown_0839B255
- mov r0, sp
- bl StringAppend
- bl MenuZeroFillScreen
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x1E
- movs r3, 0x13
- bl MenuDrawTextWindow
- mov r0, sp
- movs r1, 0x1
- movs r2, 0xF
- bl MenuPrint
- ldr r1, _08083DF4 @ =gCallback_03004AE8
- ldr r0, _08083DF8 @ =sub_8083D4C
- str r0, [r1]
- movs r0, 0
- add sp, 0x34
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08083DE4: .4byte gPlayerParty
-_08083DE8: .4byte gSpeciesNames
-_08083DEC: .4byte gUnknown_0839B24D
-_08083DF0: .4byte gUnknown_0839B255
-_08083DF4: .4byte gCallback_03004AE8
-_08083DF8: .4byte sub_8083D4C
- thumb_func_end MoriDebugMenu_SearchChild
-
- thumb_func_start MoriDebugMenu_Egg
-MoriDebugMenu_Egg: @ 8083DFC
- push {lr}
- ldr r0, _08083E24 @ =gSaveBlock1 + 0x2F9C
- bl daycare_count_pokemon
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _08083E1A
- bl daycare_relationship_score_from_savegame
- lsls r0, 24
- cmp r0, 0
- beq _08083E1A
- bl sub_8041940
-_08083E1A:
- bl sub_8071C20
- movs r0, 0x1
- pop {r1}
- bx r1
- .align 2, 0
-_08083E24: .4byte gSaveBlock1 + 0x2F9C
- thumb_func_end MoriDebugMenu_Egg
-
- thumb_func_start MoriDebugMenu_MaleEgg
-MoriDebugMenu_MaleEgg: @ 8083E28
- push {lr}
- ldr r0, _08083E50 @ =gSaveBlock1 + 0x2F9C
- bl daycare_count_pokemon
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _08083E46
- bl daycare_relationship_score_from_savegame
- lsls r0, 24
- cmp r0, 0
- beq _08083E46
- bl sub_8041950
-_08083E46:
- bl sub_8071C20
- movs r0, 0x1
- pop {r1}
- bx r1
- .align 2, 0
-_08083E50: .4byte gSaveBlock1 + 0x2F9C
- thumb_func_end MoriDebugMenu_MaleEgg
-
- thumb_func_start MoriDebugMenu_1000Steps
-MoriDebugMenu_1000Steps: @ 8083E54
- push {lr}
- movs r0, 0xFA
- lsls r0, 2
- bl sub_8041790
- bl sub_8071C20
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end MoriDebugMenu_1000Steps
-
- thumb_func_start MoriDebugMenu_10000Steps
-MoriDebugMenu_10000Steps: @ 8083E68
- push {lr}
- ldr r0, _08083E7C @ =0x00002710
- bl sub_8041790
- bl sub_8071C20
- movs r0, 0x1
- pop {r1}
- bx r1
- .align 2, 0
-_08083E7C: .4byte 0x00002710
- thumb_func_end MoriDebugMenu_10000Steps
-
- thumb_func_start MoriDebugMenu_MoveTutor
-MoriDebugMenu_MoveTutor: @ 8083E80
- push {lr}
- bl sub_8132670
- bl sub_8071C20
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end MoriDebugMenu_MoveTutor
-
- thumb_func_start MoriDebugMenu_BreedEgg
-MoriDebugMenu_BreedEgg: @ 8083E90
- push {r4-r6,lr}
- sub sp, 0x4
- movs r5, 0
- movs r6, 0
-_08083E98:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08083EE0 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- beq _08083EBC
- mov r0, sp
- strb r6, [r0]
- adds r0, r4, 0
- movs r1, 0x20
- mov r2, sp
- bl SetMonData
-_08083EBC:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _08083E98
- ldr r0, _08083EE4 @ =gSaveBlock1
- ldr r1, _08083EE8 @ =0x000030b6
- adds r0, r1
- movs r1, 0xFD
- strb r1, [r0]
- bl sub_8071C20
- movs r0, 0x1
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08083EE0: .4byte gPlayerParty
-_08083EE4: .4byte gSaveBlock1
-_08083EE8: .4byte 0x000030b6
- thumb_func_end MoriDebugMenu_BreedEgg
-
- thumb_func_start MoriDebugMenu_LongName
-MoriDebugMenu_LongName: @ 8083EEC
- push {lr}
- ldr r0, _08083F04 @ =gPlayerParty
- ldr r2, _08083F08 @ =gUnknown_0839B257
- movs r1, 0x2
- bl SetMonData
- bl sub_8071C20
- movs r0, 0x1
- pop {r1}
- bx r1
- .align 2, 0
-_08083F04: .4byte gPlayerParty
-_08083F08: .4byte gUnknown_0839B257
- thumb_func_end MoriDebugMenu_LongName
-
- thumb_func_start MoriDebugMenu_PokeblockCase
-MoriDebugMenu_PokeblockCase: @ 8083F0C
- push {r4,lr}
- movs r4, 0
-_08083F10:
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_810CA6C
- adds r4, 0x1
- cmp r4, 0x27
- ble _08083F10
- bl sub_8071C20
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end MoriDebugMenu_PokeblockCase
-
- thumb_func_start MoriDebugMenuProcessInput
-MoriDebugMenuProcessInput: @ 8083F2C
- push {lr}
- bl ProcessMenuInput
- lsls r0, 24
- asrs r1, r0, 24
- movs r0, 0x2
- negs r0, r0
- cmp r1, r0
- beq _08083F52
- adds r0, 0x1
- cmp r1, r0
- beq _08083F60
- ldr r2, _08083F58 @ =gCallback_03004AE8
- ldr r0, _08083F5C @ =gMoriDebugMenuActions
- lsls r1, 3
- adds r0, 0x4
- adds r1, r0
- ldr r0, [r1]
- str r0, [r2]
-_08083F52:
- movs r0, 0
- b _08083F66
- .align 2, 0
-_08083F58: .4byte gCallback_03004AE8
-_08083F5C: .4byte gMoriDebugMenuActions
-_08083F60:
- bl sub_8071C20
- movs r0, 0x1
-_08083F66:
- pop {r1}
- bx r1
- thumb_func_end MoriDebugMenuProcessInput
-
- thumb_func_start InitMoriDebugMenu
-InitMoriDebugMenu: @ 8083F6C
- push {lr}
- sub sp, 0x8
- bl MenuZeroFillScreen
- movs r0, 0
- movs r1, 0
- movs r2, 0xA
- movs r3, 0x13
- bl MenuDrawTextWindow
- ldr r3, _08083FB0 @ =gMoriDebugMenuActions
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0x9
- bl PrintMenuItems
- movs r0, 0
- str r0, [sp]
- movs r0, 0x9
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x1
- movs r2, 0x1
- movs r3, 0x9
- bl InitMenu
- ldr r1, _08083FB4 @ =gCallback_03004AE8
- ldr r0, _08083FB8 @ =MoriDebugMenuProcessInput
- str r0, [r1]
- movs r0, 0
- add sp, 0x8
- pop {r1}
- bx r1
- .align 2, 0
-_08083FB0: .4byte gMoriDebugMenuActions
-_08083FB4: .4byte gCallback_03004AE8
-_08083FB8: .4byte MoriDebugMenuProcessInput
- thumb_func_end InitMoriDebugMenu
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/include/global.h b/include/global.h
index bbae9faf9..b1bfa25ad 100644
--- a/include/global.h
+++ b/include/global.h
@@ -234,7 +234,9 @@ struct SaveBlock1
/*0x2EFC*/ struct SB1_2EFC_Struct sb1_2EFC_struct[5];
/*0x2F9C*/ u8 filler_2F9C[0xA0];
/*0x303C*/ u8 filler_303C[0x38];
- /*0x3074*/ u8 filler_3074[0x9C];
+ /*0x3074*/ u8 filler_3074[0x42];
+ /*0x30B6*/ u8 filler_30B6;
+ /*0x30B7*/ u8 filler_30B7[0x59];
/*0x3110*/ u8 giftRibbons[7];
/*0x3117*/ u8 filler_311B[0x2D];
/*0x3144*/ struct Roamer roamer;
diff --git a/ld_script.txt b/ld_script.txt
index c161a6daf..16352d382 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -99,7 +99,7 @@ SECTIONS {
asm/rom_8080874.o(.text);
src/battle_setup.o(.text);
asm/cable_club.o(.text);
- asm/mori_debug_menu.o(.text);
+ src/mori_debug_menu.o(.text);
asm/trainer_see.o(.text);
src/fldeff_emotion.o(.text);
src/wild_encounter.o(.text);
diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c
new file mode 100644
index 000000000..139650c12
--- /dev/null
+++ b/src/mori_debug_menu.c
@@ -0,0 +1,157 @@
+#include "main.h"
+#include "string_util.h"
+#include "pokemon.h"
+
+extern void sub_8071C20(void);
+extern u16 sub_8041870(u16);
+extern void sub_810CA6C(s32);
+extern u8 (*gCallback_03004AE8)(void);
+
+extern u8 daycare_count_pokemon(u32);
+extern u8 daycare_relationship_score_from_savegame(void);
+
+struct DebugMenuAction
+{
+ u8 *text;
+ u8 (*func)(void);
+};
+
+extern u8 gUnknown_0839B24D[];
+extern u8 gUnknown_0839B255[];
+extern u8 gUnknown_0839B257[];
+
+extern struct DebugMenuAction gMoriDebugMenuActions[];
+
+extern u8 gSpeciesNames[][11];
+
+s8 sub_8083D4C(void)
+{
+ if ( gMain.newKeys & 1 )
+ {
+ sub_8071C20();
+ return 1;
+ }
+ else
+ return 0;
+}
+
+u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr)
+{
+ u8 localPtr[52];
+ u16 monData;
+ u16 var;
+
+ monData = GetMonData(gPlayerParty, 11, ptr);
+ var = sub_8041870(monData);
+ StringCopy(localPtr, gSpeciesNames[monData]);
+ StringAppend(localPtr, gUnknown_0839B24D);
+ StringAppend(localPtr, gSpeciesNames[var]);
+ StringAppend(localPtr, gUnknown_0839B255);
+ MenuZeroFillScreen();
+ MenuDrawTextWindow(0, 14, 30, 19);
+ MenuPrint(localPtr, 1, 15);
+ gCallback_03004AE8 = sub_8083D4C;
+ return 0;
+}
+
+s8 MoriDebugMenu_Egg(void)
+{
+ if ( daycare_count_pokemon(gSaveBlock1.filler_2F9C) == 2 && daycare_relationship_score_from_savegame() )
+ sub_8041940();
+ sub_8071C20();
+
+ return 1;
+}
+
+s8 MoriDebugMenu_MaleEgg(void)
+{
+ if ( daycare_count_pokemon(gSaveBlock1.filler_2F9C) == 2 && daycare_relationship_score_from_savegame() )
+ sub_8041950();
+ sub_8071C20();
+
+ return 1;
+}
+
+s8 MoriDebugMenu_1000Steps(void)
+{
+ sub_8041790(1000);
+ sub_8071C20();
+ return 1;
+}
+
+s8 MoriDebugMenu_10000Steps(void)
+{
+ sub_8041790(10000);
+ sub_8071C20();
+ return 1;
+}
+
+s8 MoriDebugMenu_MoveTutor(void)
+{
+ sub_8132670();
+ sub_8071C20();
+ return 1;
+}
+
+s8 MoriDebugMenu_BreedEgg(void)
+{
+ u8 loopCounter;
+
+ for(loopCounter = 0; loopCounter <= 5; loopCounter++)
+ {
+ //UB: Too few arguments for function 'GetMonData'
+ if ( GetMonData(&gPlayerParty[loopCounter], MON_DATA_IS_EGG) )
+ {
+ u8 friendship = 0;
+ SetMonData(&gPlayerParty[loopCounter], MON_DATA_FRIENDSHIP, &friendship);
+ }
+ }
+ gSaveBlock1.filler_30B6 = -3;
+ sub_8071C20();
+ return 1;
+}
+
+s8 MoriDebugMenu_LongName(void)
+{
+ SetMonData(gPlayerParty, 2, &gUnknown_0839B257);
+ sub_8071C20();
+ return 1;
+}
+
+s8 MoriDebugMenu_PokeblockCase(void)
+{
+ s32 loopCounter;
+
+ for(loopCounter = 0; loopCounter <= 39; loopCounter++)
+ sub_810CA6C((u8)loopCounter);
+
+ sub_8071C20();
+ return 1;
+}
+
+s8 MoriDebugMenuProcessInput(void)
+{
+ s8 choice = ProcessMenuInput();
+
+ switch (choice)
+ {
+ default:
+ gCallback_03004AE8 = gMoriDebugMenuActions[choice].func;
+ return 0;
+ case -2:
+ return 0;
+ case -1:
+ sub_8071C20();
+ return 1;
+ }
+}
+
+s8 InitMoriDebugMenu(void)
+{
+ MenuZeroFillScreen();
+ MenuDrawTextWindow(0, 0, 10, 19);
+ PrintMenuItems(1, 1, 9, gMoriDebugMenuActions);
+ InitMenu(0, 1, 1, 9, 0, 9);
+ gCallback_03004AE8 = MoriDebugMenuProcessInput;
+ return 0;
+}