diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2016-11-05 17:11:17 -0400 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-11-05 14:11:17 -0700 |
commit | e31301d6ea7a772df3f25b7ce60d261e0c039cc0 (patch) | |
tree | fbe253b38adb7bfc1eefdf06b88e605869f494b6 | |
parent | d26298bd4e742218a39ce7b635e502f704f73eba (diff) |
decompile mori_debug_menu.c (#90)
* decompile mori_debug_menu.c
* formatting
-rw-r--r-- | asm/mori_debug_menu.s | 322 | ||||
-rw-r--r-- | include/global.h | 4 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/mori_debug_menu.c | 157 |
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; +} |