diff options
-rw-r--r-- | asm/unk_debug_menu_3.s | 95 | ||||
-rw-r--r-- | data/debug_menu_3.s | 5 | ||||
-rw-r--r-- | src/debug/unk_debug_menu_3.c | 173 |
3 files changed, 156 insertions, 117 deletions
diff --git a/asm/unk_debug_menu_3.s b/asm/unk_debug_menu_3.s index d14bfb3e1..cd931e15f 100644 --- a/asm/unk_debug_menu_3.s +++ b/asm/unk_debug_menu_3.s @@ -5,101 +5,6 @@ .text - thumb_func_start debug_sub_813C740 -debug_sub_813C740: - push {r4, r5, r6, lr} - mov r6, sl - mov r5, r9 - mov r4, r8 - push {r4, r5, r6} - add sp, sp, #0xffffffd0 - add r6, r0, #0 - ldr r0, ._29 @ gUnknown_Debug_845E443 - mov r8, r0 - ldr r1, ._29 + 4 @ gUnknown_Debug_845E4EF - ldr r5, ._29 + 8 @ gEnemyParty - sub r1, r1, r0 - mov r9, r1 - add r0, r6, #0 - mov r1, r8 - mov r2, r9 - bl memcpy - add r0, r5, #0 - mov r1, #0x19 - mov r2, #0x5 - mov r3, #0x0 - bl debug_sub_813C638 - add r4, sp, #0x24 - mov r0, #0x1 - mov sl, r0 - mov r1, sl - strb r1, [r4] - add r0, r5, #0 - mov r1, #0x2d - add r2, r4, #0 - bl SetMonData - mov r0, #0x3 - strb r0, [r4] - add r0, r5, #0 - mov r1, #0x20 - add r2, r4, #0 - bl SetMonData - mov r0, #0xff - strb r0, [r4] - add r0, r5, #0 - mov r1, #0x23 - add r2, r4, #0 - bl SetMonData - ldr r1, ._29 + 12 @ Str_842E238 - add r0, r4, #0 - mov r2, #0xb - bl StringCopyN - add r0, r5, #0 - mov r1, #0x2 - add r2, r4, #0 - bl SetMonData - mov r0, sl - strb r0, [r4] - add r0, r5, #0 - mov r1, #0x3 - add r2, r4, #0 - bl SetMonData - ldr r0, ._29 + 16 @ gUnknown_Debug_845E467 - add r0, r6, r0 - mov r1, r8 - sub r0, r0, r1 - add r1, r5, #0 - mov r2, #0x64 - bl memcpy - ldr r0, ._29 + 20 @ gUnknown_Debug_845E4CB - add r6, r6, r0 - mov r0, r8 - sub r6, r6, r0 - add r0, r6, #0 - mov r1, sp - mov r2, #0x24 - bl memcpy - mov r0, r9 - add sp, sp, #0x30 - pop {r3, r4, r5} - mov r8, r3 - mov r9, r4 - mov sl, r5 - pop {r4, r5, r6} - pop {r1} - bx r1 -._30: - .align 2, 0 -._29: - .word gUnknown_Debug_845E443 - .word gUnknown_Debug_845E4EF - .word gEnemyParty - .word Str_842E238 - .word gUnknown_Debug_845E467 - .word gUnknown_Debug_845E4CB - - thumb_func_end debug_sub_813C740 - thumb_func_start debug_sub_813C810 debug_sub_813C810: push {r4, r5, r6, lr} diff --git a/data/debug_menu_3.s b/data/debug_menu_3.s index be2966756..8e478bf46 100644 --- a/data/debug_menu_3.s +++ b/data/debug_menu_3.s @@ -206,6 +206,7 @@ gUnknown_Debug_845E4CB:: .space 36 _0845E461End: .size _0845E461, _0845E461End - _0845E461 +gUnknown_Debug_845E443End:: gUnknown_Debug_845E4EF:: me_checkcompat gUnknown_Debug_845E4EF, 0x4, 0x4, 0x4, 0x80 @@ -271,8 +272,6 @@ gUnknown_Debug_845E712:: _0845E730: me_runscript _0845E736 me_end -_0845E730End: - .size _0845E730, _0845E730End - _0845E730 _0845E736: setvaddress _0845E736 @@ -294,6 +293,8 @@ _0845E75D: _0845E771: .string "Es ist kein Platz für {STR_VAR_1}\n" .string "vorhanden...$" +_0845E730End: + .size _0845E730, _0845E730End - _0845E730 gUnknown_Debug_845E712End:: gUnknown_Debug_845E797:: diff --git a/src/debug/unk_debug_menu_3.c b/src/debug/unk_debug_menu_3.c index 0b348fa0b..50c9cb5cb 100644 --- a/src/debug/unk_debug_menu_3.c +++ b/src/debug/unk_debug_menu_3.c @@ -1,5 +1,6 @@ #include "global.h" #include "debug.h" +#include "constants/species.h" #include "constants/items.h" #include "string_util.h" #include "new_game.h" @@ -9,8 +10,8 @@ #if DEBUG -extern const u8 gUnknown_Debug_845DAE1[]; -extern const u8 gUnknown_Debug_845DAE1End[]; +extern u8 gUnknown_Debug_845DAE1[]; +extern u8 gUnknown_Debug_845DAE1End[]; size_t debug_sub_813C404(u8 * dest) { @@ -20,8 +21,8 @@ size_t debug_sub_813C404(u8 * dest) return size; } -extern const u8 gUnknown_Debug_845E3E0[]; -extern const u8 gUnknown_Debug_845E3E0End[]; +extern u8 gUnknown_Debug_845E3E0[]; +extern u8 gUnknown_Debug_845E3E0End[]; size_t debug_sub_813C430(u8 * dest) { @@ -31,8 +32,8 @@ size_t debug_sub_813C430(u8 * dest) return size; } -extern const u8 gUnknown_Debug_845E422[]; -extern const u8 gUnknown_Debug_845E422End[]; +extern u8 gUnknown_Debug_845E422[]; +extern u8 gUnknown_Debug_845E422End[]; size_t debug_sub_813C45C(u8 * dest) { @@ -42,8 +43,8 @@ size_t debug_sub_813C45C(u8 * dest) return size; } -extern const u8 gUnknown_Debug_845E402[]; -extern const u8 gUnknown_Debug_845E402End[]; +extern u8 gUnknown_Debug_845E402[]; +extern u8 gUnknown_Debug_845E402End[]; size_t debug_sub_813C488(u8 * dest) { @@ -53,8 +54,8 @@ size_t debug_sub_813C488(u8 * dest) return size; } -extern const u8 gUnknown_Debug_845E606[]; -extern const u8 gUnknown_Debug_845E606End[]; +extern u8 gUnknown_Debug_845E606[]; +extern u8 gUnknown_Debug_845E606End[]; size_t debug_sub_813C4B4(u8 * dest) { @@ -63,8 +64,8 @@ size_t debug_sub_813C4B4(u8 * dest) return size; } -extern const u8 gUnknown_Debug_845E619[]; -extern const u8 gUnknown_Debug_845E619End[]; +extern u8 gUnknown_Debug_845E619[]; +extern u8 gUnknown_Debug_845E619End[]; size_t debug_sub_813C4D4(u8 * dest) { @@ -74,8 +75,8 @@ size_t debug_sub_813C4D4(u8 * dest) return size; } -extern const u8 gUnknown_Debug_845E712[]; -extern const u8 gUnknown_Debug_845E712End[]; +extern u8 gUnknown_Debug_845E712[]; +extern u8 gUnknown_Debug_845E712End[]; size_t debug_sub_813C500(u8 * dest) { @@ -85,9 +86,9 @@ size_t debug_sub_813C500(u8 * dest) return size; } -extern const u8 gUnknown_Debug_845E797[]; -extern const u8 gUnknown_Debug_845E797End[]; -extern const u8 gUnknown_Debug_845E7B5[]; +extern u8 gUnknown_Debug_845E797[]; +extern u8 gUnknown_Debug_845E797End[]; +extern u8 gUnknown_Debug_845E7B5[]; size_t debug_sub_813C52C(u8 * dest, u16 itemId) { @@ -122,9 +123,9 @@ size_t debug_sub_813C5A4(u8 * dest) return debug_sub_813C52C(dest, ITEM_TM01_FOCUS_PUNCH); } -extern const u8 gUnknown_Debug_845DDB2[]; -extern const u8 gUnknown_Debug_845DDB2End[]; -extern const u8 gUnknown_Debug_845DDD6[]; +extern u8 gUnknown_Debug_845DDB2[]; +extern u8 gUnknown_Debug_845DDB2End[]; +extern u8 gUnknown_Debug_845DDD6[]; extern const u8 Str_842E23C[]; //static const u8 Str_842E23C[] = _("ガイブ"); @@ -191,4 +192,136 @@ void debug_sub_813C6AC(struct Pokemon *mon, struct MailStruct *mail) } } +extern u8 gUnknown_Debug_845E443[]; +extern u8 gUnknown_Debug_845E443End[]; +extern u8 gUnknown_Debug_845E467[]; +extern u8 gUnknown_Debug_845E4CB[]; +extern const u8 Str_842E238[]; + +#ifdef NONMATCHING +size_t debug_sub_813C740(u8 * dest) +{ + struct MailStruct mail; + struct Pokemon *mon = gEnemyParty; + size_t size = gUnknown_Debug_845E443End - gUnknown_Debug_845E443; + u8 dataBuffer[11]; + + memcpy(dest, gUnknown_Debug_845E443, size); + debug_sub_813C638(mon, SPECIES_PIKACHU, 5, ITEM_NONE); + dataBuffer[0] = TRUE; + SetMonData(mon, MON_DATA_IS_EGG, dataBuffer); + dataBuffer[0] = 3; + SetMonData(mon, MON_DATA_FRIENDSHIP, dataBuffer); + dataBuffer[0] = 255; + SetMonData(mon, MON_DATA_MET_LOCATION, dataBuffer); + + StringCopyN(dataBuffer, Str_842E238, POKEMON_NAME_LENGTH); + SetMonData(mon, MON_DATA_NICKNAME, dataBuffer); + + dataBuffer[0] = LANGUAGE_JAPANESE; + SetMonData(mon, MON_DATA_LANGUAGE, dataBuffer); + + // nonmatching pointer arithmetic + memcpy(gUnknown_Debug_845E467 - gUnknown_Debug_845E443 + dest, mon, sizeof(struct Pokemon)); + + memcpy(gUnknown_Debug_845E4CB - gUnknown_Debug_845E443 + dest, &mail, sizeof(struct MailStruct)); + + return size; +} +#else +__attribute__((naked)) size_t debug_sub_813C740(u8 * dest) +{ + asm("\tpush\t{r4, r5, r6, lr}\n" + "\tmov\tr6, sl\n" + "\tmov\tr5, r9\n" + "\tmov\tr4, r8\n" + "\tpush\t{r4, r5, r6}\n" + "\tadd\tsp, sp, #0xffffffd0\n" + "\tadd\tr6, r0, #0\n" + "\tldr\tr0, ._29 @ gUnknown_Debug_845E443\n" + "\tmov\tr8, r0\n" + "\tldr\tr1, ._29 + 4 @ gUnknown_Debug_845E4EF\n" + "\tldr\tr5, ._29 + 8 @ gEnemyParty\n" + "\tsub\tr1, r1, r0\n" + "\tmov\tr9, r1\n" + "\tadd\tr0, r6, #0\n" + "\tmov\tr1, r8\n" + "\tmov\tr2, r9\n" + "\tbl\tmemcpy\n" + "\tadd\tr0, r5, #0\n" + "\tmov\tr1, #0x19\n" + "\tmov\tr2, #0x5\n" + "\tmov\tr3, #0x0\n" + "\tbl\tdebug_sub_813C638\n" + "\tadd\tr4, sp, #0x24\n" + "\tmov\tr0, #0x1\n" + "\tmov\tsl, r0\n" + "\tmov\tr1, sl\n" + "\tstrb\tr1, [r4]\n" + "\tadd\tr0, r5, #0\n" + "\tmov\tr1, #0x2d\n" + "\tadd\tr2, r4, #0\n" + "\tbl\tSetMonData\n" + "\tmov\tr0, #0x3\n" + "\tstrb\tr0, [r4]\n" + "\tadd\tr0, r5, #0\n" + "\tmov\tr1, #0x20\n" + "\tadd\tr2, r4, #0\n" + "\tbl\tSetMonData\n" + "\tmov\tr0, #0xff\n" + "\tstrb\tr0, [r4]\n" + "\tadd\tr0, r5, #0\n" + "\tmov\tr1, #0x23\n" + "\tadd\tr2, r4, #0\n" + "\tbl\tSetMonData\n" + "\tldr\tr1, ._29 + 12 @ Str_842E238\n" + "\tadd\tr0, r4, #0\n" + "\tmov\tr2, #0xb\n" + "\tbl\tStringCopyN\n" + "\tadd\tr0, r5, #0\n" + "\tmov\tr1, #0x2\n" + "\tadd\tr2, r4, #0\n" + "\tbl\tSetMonData\n" + "\tmov\tr0, sl\n" + "\tstrb\tr0, [r4]\n" + "\tadd\tr0, r5, #0\n" + "\tmov\tr1, #0x3\n" + "\tadd\tr2, r4, #0\n" + "\tbl\tSetMonData\n" + "\tldr\tr0, ._29 + 16 @ gUnknown_Debug_845E467\n" + "\tadd\tr0, r6, r0\n" + "\tmov\tr1, r8\n" + "\tsub\tr0, r0, r1\n" + "\tadd\tr1, r5, #0\n" + "\tmov\tr2, #0x64\n" + "\tbl\tmemcpy\n" + "\tldr\tr0, ._29 + 20 @ gUnknown_Debug_845E4CB\n" + "\tadd\tr6, r6, r0\n" + "\tmov\tr0, r8\n" + "\tsub\tr6, r6, r0\n" + "\tadd\tr0, r6, #0\n" + "\tmov\tr1, sp\n" + "\tmov\tr2, #0x24\n" + "\tbl\tmemcpy\n" + "\tmov\tr0, r9\n" + "\tadd\tsp, sp, #0x30\n" + "\tpop\t{r3, r4, r5}\n" + "\tmov\tr8, r3\n" + "\tmov\tr9, r4\n" + "\tmov\tsl, r5\n" + "\tpop\t{r4, r5, r6}\n" + "\tpop\t{r1}\n" + "\tbx\tr1\n" + "._30:\n" + "\t.align\t2, 0\n" + "._29:\n" + "\t.word\tgUnknown_Debug_845E443\n" + "\t.word\tgUnknown_Debug_845E4EF\n" + "\t.word\tgEnemyParty\n" + "\t.word\tStr_842E238\n" + "\t.word\tgUnknown_Debug_845E467\n" + "\t.word\tgUnknown_Debug_845E4CB"); +} +#endif + #endif // DEBUG |