diff options
Diffstat (limited to 'src')
77 files changed, 30458 insertions, 332 deletions
diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 2ad2adb04..2171c6ef6 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1,5 +1,12 @@ #include "global.h" #include "constants/abilities.h" +#include "constants/battle_move_effects.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "gba/flash_internal.h" #include "battle.h" #include "battle_ai.h" #include "battle_interface.h" @@ -7,6 +14,7 @@ #include "battle_setup.h" #include "battle_util.h" #include "data2.h" +#include "decompress.h" #include "event_data.h" #include "evolution_scene.h" #include "item.h" @@ -14,6 +22,7 @@ #include "main.h" #include "m4a.h" #include "name_string_util.h" +#include "overworld.h" #include "palette.h" #include "party_menu.h" #include "pokeball.h" @@ -24,9 +33,7 @@ #include "rom3.h" #include "rom_8077ABC.h" #include "rom_8094928.h" -#include "constants/songs.h" #include "sound.h" -#include "constants/species.h" #include "sprite.h" #include "string_util.h" #include "task.h" @@ -36,10 +43,6 @@ #include "tv.h" #include "scanline_effect.h" #include "util.h" -#include "constants/battle_move_effects.h" -#include "constants/items.h" -#include "constants/hold_effects.h" -#include "constants/moves.h" #include "ewram.h" struct UnknownStruct7 @@ -64,6 +67,9 @@ struct UnknownStruct12 u8 filler4[0x54]; }; +void debug_sub_80139E4(void); +extern u8 gUnknown_02023A14_50; + extern const u16 gUnknown_08D004E0[]; extern const struct MonCoords gCastformFrontSpriteCoords[]; @@ -244,7 +250,14 @@ void InitBattle(void) gBattle_BG2_Y = 0; gBattle_BG3_X = 0; gBattle_BG3_Y = 0; + +#if DEBUG + if (!(gUnknown_02023A14_50 & 8)) + gBattleTerrain = BattleSetup_GetTerrain(); +#else gBattleTerrain = BattleSetup_GetTerrain(); +#endif + Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowTemplate_81E71EC); @@ -261,7 +274,11 @@ void InitBattle(void) SetMainCallback2(sub_800F298); else SetMainCallback2(sub_800EC9C); - if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) +#if DEBUG + && !(gUnknown_02023A14_50 & 8) +#endif + ) { CreateNPCTrainerParty(gEnemyParty, gTrainerBattleOpponent); SetWildMonHeldItem(); @@ -383,6 +400,7 @@ void sub_800EC9C(void) { u8 playerId; u8 enemyId; + s32 id; RunTasks(); AnimateSprites(); @@ -402,6 +420,16 @@ void sub_800EC9C(void) gBattleStruct->unk1 = 1; sub_800E9EC(); sub_800EAAC(); +#if DEBUG + if (gUnknown_02023A14_50 & 8) + { + for (id = 0; id < 2; id++) // Why < 2 here? + { + gLinkPlayers[id].lp_field_18 = id; + gLinkPlayers[id].linkType = 0x2211; + } + } +#endif SendBlock(bitmask_all_link_players_but_self(), gBattleStruct, 32); gBattleCommunication[0] = 1; } @@ -416,7 +444,6 @@ void sub_800EC9C(void) case 1: if ((GetBlockReceivedStatus() & 3) == 3) { - s32 id; u8 taskId; ResetBlockReceivedFlags(); @@ -524,7 +551,11 @@ void sub_800EC9C(void) if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) { gPreBattleCallback1 = gMain.callback1; +#if DEBUG + gMain.callback1 = debug_sub_80139E4; +#else gMain.callback1 = sub_8010824; +#endif SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { @@ -566,6 +597,7 @@ void sub_800F104(void) u8 playerId; MainCallback *pSavedCallback; u16 *pSavedBattleTypeFlags; + s32 i; playerId = GetMultiplayerId(); ewram160CB = playerId; @@ -579,17 +611,30 @@ void sub_800F104(void) switch (gBattleCommunication[0]) { case 0: - if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished()) + if (gReceivedRemoteLinkPlayers != 0) { - sub_800F02C(); - SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x60); - gBattleCommunication[0]++; +#if DEBUG + if (gUnknown_02023A14_50 & 8) + { + for (i = 0; i < 4; i++) + { + gLinkPlayers[i].lp_field_18 = i; + gLinkPlayers[i].linkType = 0x2211; + } + } +#endif + if (IsLinkTaskFinished()) + { + sub_800F02C(); + SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x60); + gBattleCommunication[0]++; + } } break; case 1: if ((GetBlockReceivedStatus() & 0xF) == 0xF) { - s32 i; + //s32 i; ResetBlockReceivedFlags(); for (i = 0; i < 4; i++) @@ -639,14 +684,27 @@ void sub_800F298(void) switch (gBattleCommunication[0]) { case 0: - if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished()) + if (gReceivedRemoteLinkPlayers != 0) { - gBattleStruct->unk0 = 1; - gBattleStruct->unk1 = 1; - sub_800E9EC(); - sub_800EAAC(); - SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x20); - gBattleCommunication[0]++; +#if DEBUG + if (gUnknown_02023A14_50 & 8) + { + for (id = 0; id < 4; id++) + { + gLinkPlayers[id].lp_field_18 = id; + gLinkPlayers[id].linkType = 0x2211; + } + } +#endif + if (IsLinkTaskFinished()) + { + gBattleStruct->unk0 = 1; + gBattleStruct->unk1 = 1; + sub_800E9EC(); + sub_800EAAC(); + SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x20); + gBattleCommunication[0]++; + } } break; case 1: @@ -882,7 +940,11 @@ void sub_800F298(void) if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) { gPreBattleCallback1 = gMain.callback1; +#if DEBUG + gMain.callback1 = debug_sub_80139E4; +#else gMain.callback1 = sub_8010824; +#endif SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { @@ -898,6 +960,29 @@ void BattleMainCB2(void) { AnimateSprites(); BuildOamBuffer(); + +#if DEBUG + if ((gMain.heldKeys & (R_BUTTON | SELECT_BUTTON)) == ((R_BUTTON | SELECT_BUTTON))) + { + gSpecialVar_Result = gBattleOutcome = 1; + gMain.inBattle = FALSE; + gScanlineEffect.state = 3; + gMain.callback1 = gPreBattleCallback1; + ZeroEnemyPartyMons(); + m4aSongNumStop(0x5A); + if (gBattleTypeFlags & 2) + SetMainCallback2(sub_805465C); + else + SetMainCallback2(gMain.savedCallback); + } + if (gBattleTypeFlags & 2) + { + debug_sub_8008264((gBattleTypeFlags >> 2) % 2, 1, 1, 1, 1); + debug_sub_8008264((gBattleTypeFlags >> 2) % 2, 1, 21, 1, 1); + debug_sub_8008264((gBattleTypeFlags >> 2) % 2, 1, 41, 1, 1); + } +#endif + Text_UpdateWindowInBattle(&gUnknown_03004210); UpdatePaletteFade(); RunTasks(); @@ -1275,6 +1360,5171 @@ void c2_081284E0(void) } } +// A LOT of debug code! +#if DEBUG + +void debug_sub_8010818(void); +void debug_sub_80108B8(void); +void debug_sub_8010CAC(void); +void debug_sub_801174C(void); +void debug_sub_8011D40(void); +void debug_sub_8011EA0(u8); +void debug_sub_8012294(void); +void debug_sub_80123D8(u8); +void debug_sub_8012540(void); +void debug_sub_80125A0(void); +void debug_nullsub_3(void); + +struct UnknownStruct2023A76 +{ + u16 unk0; + u16 unk2[(0x44-2)/2]; + s16 unk44; + u16 unk46; + u16 unk48[1]; +}; + +struct UnknownStruct2023B02 +{ + u16 unk0[4][4]; + u8 filler20[0x10]; + u16 unk30[4][4]; +}; + +struct UnknownStruct821F424 +{ + u8 filler0[0x12]; + u16 unk12[1][5]; // unknown length +}; + +extern struct UnknownStruct2023A76 gUnknown_Debug_2023A76; +extern struct UnknownStruct2023B02 gUnknown_Debug_2023B02; +extern u8 gUnknown_Debug_03004360; +extern struct Window gUnknown_Debug_03004370; +extern u8 gUnknown_Debug_030043A0; +extern u8 gUnknown_Debug_030043A4; +extern u8 gUnknown_Debug_030043A8; +extern u8 gBattleBuffersTransferData[]; + +extern const struct UnknownStruct821F424 gUnknown_Debug_821F424; +extern const u16 gUnknown_Debug_821F56C[][5]; + +extern const u8 gUnusedOldCharmap_Gfx_lz[]; +extern const u8 gUnusedOldCharmap_Tilemap_lz[]; +extern const u8 gUnusedOldCharmap_Pal_lz[]; + +void debug_sub_8010800(void) +{ + debug_sub_8010818(); + debug_sub_80108B8(); + *(u32 *)(gBattleBuffersTransferData + 0x100) = 0; +} + + +void debug_sub_8010818(void) +{ + s32 i; + + gUnknown_Debug_2023A76.unk0 = 0x115; + gUnknown_Debug_2023A76.unk46 = 0x115; + for (i = 0; i < 30; i++) + { + gUnknown_Debug_2023A76.unk2[i] = gUnknown_Debug_821F424.unk12[i][0]; + gUnknown_Debug_2023A76.unk48[i] = gUnknown_Debug_821F424.unk12[i][0]; + } + + for (i = 0; i < 6; i++) + { + for (gUnknown_Debug_030043A8 = 0; gUnknown_Debug_030043A8 < 4; gUnknown_Debug_030043A8++) + { + gUnknown_Debug_2023B02.unk0[i][gUnknown_Debug_030043A8] = gUnknown_Debug_821F56C[gUnknown_Debug_030043A8][0]; + gUnknown_Debug_2023B02.unk30[i][gUnknown_Debug_030043A8] = gUnknown_Debug_821F56C[gUnknown_Debug_030043A8][0]; + } + } +} + +void debug_sub_80108B8(void) +{ + s32 i; + + m4aSoundVSyncOff(); + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + DmaFill32(3, 0, (void *)VRAM, VRAM_SIZE); + REG_IE = 1; + REG_DISPCNT = 0x1340; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + REG_BG0CNT = 0x1F09; + REG_BG1CNT = 0x4801; + REG_BLDCNT = 0; + REG_BLDY = 0; + LZDecompressVram(gUnusedOldCharmap_Gfx_lz, (void *)VRAM); + LZDecompressWram(gUnusedOldCharmap_Tilemap_lz, gSharedMem); + LZDecompressVram(gUnusedOldCharmap_Pal_lz, (void *)PLTT); + LZDecompressVram(gUnusedOldCharmap_Pal_lz, (void *)(PLTT + 0x1E0)); + m4aSoundVSyncOn(); + SetVBlankCallback(debug_sub_8011D40); + SetMainCallback2(debug_sub_8010CAC); + ResetTasks(); + ResetSpriteData(); + ScanlineEffect_Stop(); + Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C); + Text_InitWindowWithTemplate(&gUnknown_Debug_03004370, &gWindowTemplate_81E6C3C); + gUnknown_Debug_03004360 = 0; + gUnknown_Debug_030043A0 = 0; + gUnknown_Debug_030043A4 = 0; + for (i = 0; i < 31; i++) + debug_sub_8011EA0(i); + for (gUnknown_Debug_030043A8 = 0; gUnknown_Debug_030043A8 < 4; gUnknown_Debug_030043A8++) + debug_sub_8012294(); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + debug_sub_8012540(); + debug_nullsub_3(); + gUnknown_Debug_030043A8 = 0; + debug_sub_80125A0(); + if (gUnknown_Debug_2023A76.unk44 == 8) + { + debug_sub_801174C(); + } + else + { + for (i = 0; i < 8; i++) + gSharedMem[0x160B4 + i] = 0; + } +} + +// This function matches, but it somehow affects registers in SetActionsAndBanksTurnOrder. +#ifdef NONMATCHING +void debug_sub_8010A7C(u8 a, u8 b) +{ + s32 i; + + for (i = 0; i < b; i++) + gBattleTextBuff1[i] = a; + gBattleTextBuff1[i] = EOS; +} +#else +__attribute__((naked)) +void debug_sub_8010A7C() +{ + asm( + " push {r4, r5, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " lsl r1, r1, #0x18\n" + " lsr r2, r1, #0x18\n" + " mov r1, #0x0\n" + " ldr r5, ._514\n" + " cmp r1, r2\n" + " bge ._512 @cond_branch\n" + " add r3, r5, #0\n" + "._513:\n" + " add r0, r1, r3\n" + " strb r4, [r0]\n" + " add r1, r1, #0x1\n" + " cmp r1, r2\n" + " blt ._513 @cond_branch\n" + "._512:\n" + " add r1, r1, r5\n" + " mov r0, #0xff\n" + " strb r0, [r1]\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._515:\n" + " .align 2, 0\n" + "._514:\n" + " .word gBattleTextBuff1\n" + "\n" + ); +} +#endif + +/* +void debug_sub_8010AAC(u8 a) +{ + u32 r7 = gUnknown_Debug_030043A4 * 5; +} +*/ + +__attribute__((naked)) +void debug_sub_8010AAC() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov ip, r0\n" + " ldr r6, ._520\n" + " ldr r4, ._520 + 4\n" + " ldr r5, ._520 + 8\n" + " ldrb r1, [r5]\n" + " lsl r0, r1, #0x2\n" + " add r7, r0, r1\n" + " lsl r1, r7, #0x1\n" + " ldr r3, ._520 + 12\n" + " ldrb r2, [r3]\n" + " mov r0, #0x46\n" + " mul r2, r2, r0\n" + " add r1, r1, r2\n" + " add r1, r1, r4\n" + " mov r0, #0x0\n" + " ldsh r1, [r1, r0]\n" + " lsl r0, r1, #0x3\n" + " sub r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r6\n" + " ldrb r0, [r0, #0x10]\n" + " add r6, r3, #0\n" + " cmp r0, #0xfe\n" + " beq ._516 @cond_branch\n" + " cmp r0, #0xfe\n" + " bgt ._517 @cond_branch\n" + " cmp r0, #0\n" + " beq ._518 @cond_branch\n" + " b ._523\n" + "._521:\n" + " .align 2, 0\n" + "._520:\n" + " .word gBaseStats\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004360\n" + "._517:\n" + " cmp r0, #0xff\n" + " beq ._522 @cond_branch\n" + " b ._523\n" + "._518:\n" + " add r0, r7, #4\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r2\n" + " add r0, r0, r4\n" + " mov r1, #0x2\n" + " b ._528\n" + "._516:\n" + " add r0, r7, #4\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r2\n" + " add r0, r0, r4\n" + " mov r1, #0x3\n" + " b ._528\n" + "._522:\n" + " add r0, r7, #4\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r2\n" + " add r0, r0, r4\n" + " mov r1, #0x4\n" + " b ._528\n" + "._523:\n" + " ldrb r0, [r5]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " add r1, r1, #0x4\n" + " lsl r1, r1, #0x1\n" + " ldrb r0, [r6]\n" + " mov r3, #0x46\n" + " mul r0, r0, r3\n" + " add r1, r1, r0\n" + " add r1, r1, r4\n" + " ldrh r2, [r1]\n" + " mov r0, #0x1\n" + " and r0, r0, r2\n" + " strh r0, [r1]\n" + " mov r1, ip\n" + " cmp r1, #0\n" + " beq ._527 @cond_branch\n" + " ldrb r1, [r5]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r0, #0x4\n" + " lsl r0, r0, #0x1\n" + " ldrb r1, [r6]\n" + " mul r1, r1, r3\n" + " add r0, r0, r1\n" + " add r0, r0, r4\n" + " ldrh r1, [r0]\n" + " mov r2, #0x1\n" + " eor r1, r1, r2\n" + " b ._528\n" + "._527:\n" + " ldrb r1, [r5]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r0, #0x4\n" + " lsl r0, r0, #0x1\n" + " ldrb r1, [r6]\n" + " mul r1, r1, r3\n" + " add r0, r0, r1\n" + " add r0, r0, r4\n" + " mov r1, ip\n" + "._528:\n" + " strh r1, [r0]\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8010B80() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r9\n" + " mov r6, r8\n" + " push {r6, r7}\n" + " lsl r0, r0, #0x18\n" + " lsr r6, r0, #0x18\n" + " mov r0, #0x0\n" + " mov ip, r0\n" + " ldr r4, ._534\n" + " ldr r1, ._534 + 4\n" + " mov r8, r1\n" + " ldr r5, ._534 + 8\n" + " ldrb r1, [r5]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " mov r2, r8\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x1\n" + " ldr r3, ._534 + 12\n" + " ldrb r2, [r3]\n" + " mov r1, #0x46\n" + " mul r1, r1, r2\n" + " add r0, r0, r1\n" + " add r0, r0, r4\n" + " ldrb r7, [r0]\n" + " lsl r1, r7, #0x18\n" + " asr r0, r1, #0x18\n" + " mov r9, r4\n" + " add r2, r5, #0\n" + " add r4, r3, #0\n" + " cmp r0, #0x9\n" + " ble ._529 @cond_branch\n" + "._530:\n" + " mov r3, #0xf6\n" + " lsl r3, r3, #0x18\n" + " add r0, r1, r3\n" + " lsr r7, r0, #0x18\n" + " mov r1, ip\n" + " lsl r0, r1, #0x18\n" + " mov r3, #0x80\n" + " lsl r3, r3, #0x11\n" + " add r0, r0, r3\n" + " lsr r0, r0, #0x18\n" + " mov ip, r0\n" + " lsl r1, r7, #0x18\n" + " asr r0, r1, #0x18\n" + " cmp r0, #0x9\n" + " bgt ._530 @cond_branch\n" + "._529:\n" + " mov r0, #0x2\n" + " and r0, r0, r6\n" + " cmp r0, #0\n" + " beq ._531 @cond_branch\n" + " mov r0, #0x1\n" + " and r0, r0, r6\n" + " cmp r0, #0\n" + " beq ._532 @cond_branch\n" + " mov r1, ip\n" + " lsl r0, r1, #0x18\n" + " mov r3, #0x80\n" + " lsl r3, r3, #0x11\n" + " b ._533\n" + "._535:\n" + " .align 2, 0\n" + "._534:\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004360\n" + "._532:\n" + " mov r1, ip\n" + " lsl r0, r1, #0x18\n" + " mov r3, #0xff\n" + " lsl r3, r3, #0x18\n" + "._533:\n" + " add r0, r0, r3\n" + " lsr r0, r0, #0x18\n" + " mov ip, r0\n" + " mov r1, ip\n" + " lsl r0, r1, #0x18\n" + " cmp r0, #0\n" + " bge ._536 @cond_branch\n" + " mov r3, #0x9\n" + " mov ip, r3\n" + "._536:\n" + " mov r1, ip\n" + " lsl r0, r1, #0x18\n" + " asr r0, r0, #0x18\n" + " cmp r0, #0x9\n" + " ble ._542 @cond_branch\n" + " mov r3, #0x0\n" + " mov ip, r3\n" + " b ._542\n" + "._531:\n" + " mov r0, #0x1\n" + " and r0, r0, r6\n" + " cmp r0, #0\n" + " beq ._539 @cond_branch\n" + " lsl r0, r7, #0x18\n" + " mov r1, #0x80\n" + " lsl r1, r1, #0x11\n" + " add r0, r0, r1\n" + " b ._540\n" + "._539:\n" + " lsl r0, r7, #0x18\n" + " mov r3, #0xff\n" + " lsl r3, r3, #0x18\n" + " add r0, r0, r3\n" + "._540:\n" + " lsr r7, r0, #0x18\n" + " lsl r0, r7, #0x18\n" + " cmp r0, #0\n" + " bgt ._541 @cond_branch\n" + " mov r7, #0x9\n" + "._541:\n" + " lsl r0, r7, #0x18\n" + " asr r0, r0, #0x18\n" + " cmp r0, #0x9\n" + " ble ._542 @cond_branch\n" + " mov r7, #0x1\n" + "._542:\n" + " ldrb r0, [r2]\n" + " lsl r2, r0, #0x2\n" + " add r2, r2, r0\n" + " mov r0, r8\n" + " ldrb r0, [r0]\n" + " add r2, r2, r0\n" + " lsl r2, r2, #0x1\n" + " ldrb r1, [r4]\n" + " mov r0, #0x1\n" + " eor r0, r0, r1\n" + " mov r1, #0x46\n" + " add r3, r0, #0\n" + " mul r3, r3, r1\n" + " add r3, r2, r3\n" + " add r3, r3, r9\n" + " ldrb r0, [r4]\n" + " mul r0, r0, r1\n" + " add r2, r2, r0\n" + " add r2, r2, r9\n" + " mov r1, ip\n" + " lsl r0, r1, #0x18\n" + " asr r0, r0, #0x18\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x1\n" + " lsl r0, r7, #0x18\n" + " asr r0, r0, #0x18\n" + " add r0, r0, r1\n" + " strh r0, [r2]\n" + " strh r0, [r3]\n" + " pop {r3, r4}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8010CAC() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r8\n" + " push {r7}\n" + " add sp, sp, #0xfffffff0\n" + " ldr r4, ._553\n" + " ldrh r1, [r4, #0x28]\n" + " mov r0, #0x81\n" + " lsl r0, r0, #0x2\n" + " cmp r1, r0\n" + " bne ._543 @cond_branch\n" + " bl DoSoftReset\n" + "._543:\n" + " ldrh r0, [r4, #0x2a]\n" + " cmp r0, #0x4\n" + " beq ._544 @cond_branch\n" + " b ._559\n" + "._544:\n" + " ldr r0, ._553 + 4\n" + " ldrb r1, [r0]\n" + " mov r8, r0\n" + " cmp r1, #0x5\n" + " bhi ._546 @cond_branch\n" + " ldr r0, ._553 + 8\n" + " mov r1, #0x0\n" + " strb r1, [r0]\n" + " bl debug_sub_8012628\n" + " ldr r0, ._553 + 12\n" + " bl SetMainCallback2\n" + "._546:\n" + " ldr r0, ._553 + 16\n" + " ldrb r3, [r0]\n" + " cmp r3, #0\n" + " bne ._555 @cond_branch\n" + " mov r1, r8\n" + " ldrb r0, [r1]\n" + " cmp r0, #0x6\n" + " bne ._555 @cond_branch\n" + " ldr r0, ._553 + 20\n" + " str r0, [r4, #0x8]\n" + " ldr r4, ._553 + 24\n" + " ldr r0, ._553 + 28\n" + " ldrh r1, [r0]\n" + " ldrb r2, [r0, #0x2]\n" + " str r3, [sp]\n" + " str r3, [sp, #0x4]\n" + " str r3, [sp, #0x8]\n" + " str r3, [sp, #0xc]\n" + " add r0, r4, #0\n" + " mov r3, #0x20\n" + " bl CreateMon\n" + " mov r5, #0x0\n" + " add r6, r4, #0\n" + "._549:\n" + " add r1, r5, #0\n" + " add r1, r1, #0xd\n" + " lsl r4, r5, #0x1\n" + " ldr r0, ._553 + 32\n" + " add r4, r4, r0\n" + " add r0, r6, #0\n" + " add r2, r4, #0\n" + " bl SetMonData\n" + " add r1, r5, #0\n" + " add r1, r1, #0x11\n" + " mov r2, #0x0\n" + " ldsh r0, [r4, r2]\n" + " lsl r2, r0, #0x1\n" + " add r2, r2, r0\n" + " lsl r2, r2, #0x2\n" + " ldr r0, ._553 + 36\n" + " add r2, r2, r0\n" + " add r0, r6, #0\n" + " bl SetMonData\n" + " add r5, r5, #0x1\n" + " cmp r5, #0x3\n" + " ble ._549 @cond_branch\n" + " ldr r2, ._553 + 28\n" + " mov r4, #0x3c\n" + " ldsh r0, [r2, r4]\n" + " cmp r0, #0x1\n" + " beq ._550 @cond_branch\n" + " cmp r0, #0x2\n" + " beq ._551 @cond_branch\n" + " b ._555\n" + "._554:\n" + " .align 2, 0\n" + "._553:\n" + " .word gMain\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_030043A8\n" + " .word debug_sub_8011498+1\n" + " .word gUnknown_Debug_030043A0\n" + " .word debug_sub_80108B8+1\n" + " .word gPlayerParty\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_2023B02\n" + " .word gBattleMoves+0x4\n" + "._550:\n" + " ldr r1, ._556\n" + " ldr r0, ._556 + 4\n" + " str r0, [r1]\n" + " ldr r0, ._556 + 8\n" + " ldrh r1, [r2, #0xa]\n" + " mov r2, #0x1\n" + " mov r3, #0x0\n" + " bl EvolutionScene\n" + " b ._555\n" + "._557:\n" + " .align 2, 0\n" + "._556:\n" + " .word gCB2_AfterEvolution\n" + " .word debug_sub_80108B8+1\n" + " .word gPlayerParty\n" + "._551:\n" + " bl debug_sub_8012688\n" + "._555:\n" + " ldr r0, ._565\n" + " ldrb r0, [r0]\n" + " cmp r0, #0x1\n" + " bne ._559 @cond_branch\n" + " ldr r0, ._565 + 4\n" + " ldrb r0, [r0]\n" + " cmp r0, #0x6\n" + " bne ._559 @cond_branch\n" + " ldr r3, ._565 + 8\n" + " ldrb r2, [r3, #0x15]\n" + " lsl r0, r2, #0x1d\n" + " lsr r5, r0, #0x1f\n" + " lsl r0, r2, #0x1f\n" + " lsr r0, r0, #0x1f\n" + " lsl r0, r0, #0x1\n" + " orr r5, r5, r0\n" + " add r5, r5, #0x1\n" + " cmp r5, #0x4\n" + " bne ._560 @cond_branch\n" + " mov r5, #0x0\n" + "._560:\n" + " mov r0, #0x1\n" + " add r1, r5, #0\n" + " and r1, r1, r0\n" + " lsl r1, r1, #0x2\n" + " mov r0, #0x5\n" + " neg r0, r0\n" + " and r0, r0, r2\n" + " orr r0, r0, r1\n" + " mov r1, #0x2\n" + " and r5, r5, r1\n" + " lsr r2, r5, #0x1\n" + " sub r1, r1, #0x4\n" + " and r0, r0, r1\n" + " orr r0, r0, r2\n" + " strb r0, [r3, #0x15]\n" + " lsl r0, r0, #0x1f\n" + " lsr r0, r0, #0x1f\n" + " bl SetPokemonCryStereo\n" + " bl debug_nullsub_3\n" + "._559:\n" + " ldr r4, ._565 + 12\n" + " ldrh r0, [r4, #0x2a]\n" + " cmp r0, #0x8\n" + " bne ._561 @cond_branch\n" + " bl debug_sub_801174C\n" + "._561:\n" + " ldrh r0, [r4, #0x2a]\n" + " cmp r0, #0x40\n" + " bne ._562 @cond_branch\n" + " bl debug_sub_80125E4\n" + " ldr r1, ._565 + 4\n" + " ldrb r0, [r1]\n" + " cmp r0, #0\n" + " beq ._563 @cond_branch\n" + " sub r0, r0, #0x1\n" + " b ._564\n" + "._566:\n" + " .align 2, 0\n" + "._565:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gSaveBlock2\n" + " .word gMain\n" + "._563:\n" + " mov r0, #0x6\n" + "._564:\n" + " strb r0, [r1]\n" + " bl debug_sub_8011E74\n" + " ldr r0, ._570\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + " bl debug_sub_80125A0\n" + "._562:\n" + " ldr r0, ._570 + 4\n" + " ldrh r0, [r0, #0x2a]\n" + " cmp r0, #0x80\n" + " bne ._567 @cond_branch\n" + " bl debug_sub_80125E4\n" + " ldr r1, ._570\n" + " ldrb r0, [r1]\n" + " cmp r0, #0x6\n" + " bne ._568 @cond_branch\n" + " mov r0, #0x0\n" + " b ._569\n" + "._571:\n" + " .align 2, 0\n" + "._570:\n" + " .word gUnknown_Debug_030043A4\n" + " .word gMain\n" + "._568:\n" + " add r0, r0, #0x1\n" + "._569:\n" + " strb r0, [r1]\n" + " bl debug_sub_8011E74\n" + " ldr r0, ._575\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + " bl debug_sub_80125A0\n" + "._567:\n" + " ldr r0, ._575 + 4\n" + " ldrh r0, [r0, #0x2a]\n" + " cmp r0, #0x20\n" + " bne ._572 @cond_branch\n" + " bl debug_sub_80125E4\n" + " ldr r2, ._575 + 8\n" + " ldrb r0, [r2]\n" + " add r1, r0, #0\n" + " cmp r1, #0\n" + " beq ._573 @cond_branch\n" + " sub r0, r0, #0x1\n" + " strb r0, [r2]\n" + " b ._577\n" + "._576:\n" + " .align 2, 0\n" + "._575:\n" + " .word gUnknown_Debug_030043A4\n" + " .word gMain\n" + " .word gUnknown_Debug_030043A0\n" + "._573:\n" + " ldr r3, ._581\n" + " ldrb r0, [r3]\n" + " cmp r0, #0\n" + " beq ._577 @cond_branch\n" + " strb r1, [r3]\n" + " mov r0, #0x4\n" + " strb r0, [r2]\n" + " ldr r0, ._581 + 4\n" + " strh r1, [r0]\n" + " bl debug_sub_8011E5C\n" + " bl debug_sub_8011E74\n" + " ldr r0, ._581 + 8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + "._577:\n" + " bl debug_sub_80125A0\n" + "._572:\n" + " ldr r0, ._581 + 12\n" + " ldrh r0, [r0, #0x2a]\n" + " cmp r0, #0x10\n" + " bne ._578 @cond_branch\n" + " bl debug_sub_80125E4\n" + " ldr r2, ._581 + 16\n" + " ldrb r0, [r2]\n" + " cmp r0, #0x4\n" + " beq ._579 @cond_branch\n" + " add r0, r0, #0x1\n" + " strb r0, [r2]\n" + " b ._583\n" + "._582:\n" + " .align 2, 0\n" + "._581:\n" + " .word gUnknown_Debug_03004360\n" + " .word gBattle_BG1_X\n" + " .word gUnknown_Debug_030043A4\n" + " .word gMain\n" + " .word gUnknown_Debug_030043A0\n" + "._579:\n" + " ldr r3, ._587\n" + " ldrb r1, [r3]\n" + " cmp r1, #0\n" + " bne ._583 @cond_branch\n" + " mov r0, #0x1\n" + " strb r0, [r3]\n" + " strb r1, [r2]\n" + " ldr r1, ._587 + 4\n" + " mov r2, #0x80\n" + " lsl r2, r2, #0x1\n" + " add r0, r2, #0\n" + " strh r0, [r1]\n" + " bl debug_sub_8011E5C\n" + " bl debug_sub_8011E74\n" + " ldr r0, ._587 + 8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + "._583:\n" + " bl debug_sub_80125A0\n" + "._578:\n" + " ldr r0, ._587 + 12\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._584 @cond_branch\n" + " b ._607\n" + "._584:\n" + " ldr r0, ._587 + 16\n" + " ldrb r2, [r0]\n" + " ldr r0, ._587 + 8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r2, r0\n" + " sub r0, r0, #0x1e\n" + " cmp r0, #0x4\n" + " bhi ._586 @cond_branch\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._587 + 20\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._588:\n" + " .align 2, 0\n" + "._587:\n" + " .word gUnknown_Debug_03004360\n" + " .word gBattle_BG1_X\n" + " .word gUnknown_Debug_030043A4\n" + " .word gMain\n" + " .word gUnknown_Debug_030043A0\n" + " .word ._589\n" + "._589:\n" + " .word ._590\n" + " .word ._591\n" + " .word ._592\n" + " .word ._593\n" + " .word ._594\n" + "._591:\n" + " bl debug_sub_8010818\n" + " b ._595\n" + "._592:\n" + " ldr r1, ._597\n" + " mov r0, #0x1f\n" + " mov r2, #0xec\n" + " bl debug_sub_80132C8\n" + "._595:\n" + " bl debug_sub_8011E5C\n" + " bl debug_sub_8011E74\n" + " bl debug_sub_8012540\n" + " bl debug_nullsub_3\n" + " ldr r0, ._597 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + " b ._607\n" + "._598:\n" + " .align 2, 0\n" + "._597:\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_030043A4\n" + "._593:\n" + " ldr r1, ._600\n" + " mov r0, #0x1f\n" + " mov r2, #0xec\n" + " bl debug_sub_8013294\n" + " b ._607\n" + "._601:\n" + " .align 2, 0\n" + "._600:\n" + " .word gUnknown_Debug_2023A76\n" + "._594:\n" + " ldr r3, ._604\n" + " add r2, r3, #0\n" + " add r2, r2, #0x44\n" + " ldrh r1, [r2]\n" + " mov r4, #0x0\n" + " ldsh r0, [r2, r4]\n" + " cmp r0, #0\n" + " beq ._602 @cond_branch\n" + " sub r0, r1, #1\n" + " strh r0, [r2]\n" + " add r1, r3, #0\n" + " add r1, r1, #0x8a\n" + " ldrh r0, [r1]\n" + " sub r0, r0, #0x1\n" + " strh r0, [r1]\n" + " b ._603\n" + "._605:\n" + " .align 2, 0\n" + "._604:\n" + " .word gUnknown_Debug_2023A76\n" + "._602:\n" + " mov r1, #0x8\n" + " strh r1, [r2]\n" + " add r0, r3, #0\n" + " add r0, r0, #0x8a\n" + " strh r1, [r0]\n" + "._603:\n" + " bl debug_sub_8012540\n" + " b ._607\n" + "._590:\n" + " mov r0, #0x0\n" + " bl debug_sub_8010B80\n" + " ldr r2, ._608\n" + " ldr r0, ._608 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " b ._607\n" + "._609:\n" + " .align 2, 0\n" + "._608:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + "._586:\n" + " cmp r2, #0x4\n" + " bne ._611 @cond_branch\n" + " cmp r1, #0x5\n" + " bhi ._611 @cond_branch\n" + " mov r0, #0x1\n" + " bl debug_sub_8010AAC\n" + " b ._613\n" + "._611:\n" + " ldr r6, ._618\n" + " ldr r5, ._618 + 4\n" + " ldr r4, ._618 + 8\n" + " ldrb r0, [r4]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " ldrb r0, [r5]\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x1\n" + " ldr r2, ._618 + 12\n" + " ldrb r0, [r2]\n" + " mov r3, #0x46\n" + " mul r0, r0, r3\n" + " add r1, r1, r0\n" + " add r1, r1, r6\n" + " ldrh r0, [r1]\n" + " sub r0, r0, #0x1\n" + " strh r0, [r1]\n" + " ldrb r0, [r4]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " ldrb r5, [r5]\n" + " add r1, r1, r5\n" + " lsl r0, r1, #0x1\n" + " ldrb r2, [r2]\n" + " mul r2, r2, r3\n" + " add r0, r0, r2\n" + " add r3, r0, r6\n" + " mov r4, #0x0\n" + " ldsh r2, [r3, r4]\n" + " ldr r4, ._618 + 16\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r1, r0, #0x1\n" + " add r0, r4, #0\n" + " add r0, r0, #0x8\n" + " add r0, r1, r0\n" + " ldrh r0, [r0]\n" + " cmp r2, r0\n" + " bge ._613 @cond_branch\n" + " add r0, r4, #6\n" + " add r0, r1, r0\n" + " ldrh r0, [r0]\n" + " strh r0, [r3]\n" + "._613:\n" + " ldr r5, ._618 + 4\n" + " ldrb r0, [r5]\n" + " cmp r0, #0\n" + " bne ._614 @cond_branch\n" + " mov r0, #0x0\n" + " bl debug_sub_8010AAC\n" + " ldr r0, ._618 + 8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r0, #0x4\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + "._614:\n" + " ldr r4, ._618 + 8\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r5, [r5]\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + "._607:\n" + " ldr r0, ._618 + 20\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._615 @cond_branch\n" + " b ._638\n" + "._615:\n" + " ldr r0, ._618 + 4\n" + " ldrb r2, [r0]\n" + " ldr r0, ._618 + 8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r2, r0\n" + " sub r0, r0, #0x1e\n" + " cmp r0, #0x4\n" + " bhi ._617 @cond_branch\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._618 + 24\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._619:\n" + " .align 2, 0\n" + "._618:\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_Debug_821F424\n" + " .word gMain\n" + " .word ._620\n" + "._620:\n" + " .word ._621\n" + " .word ._622\n" + " .word ._623\n" + " .word ._624\n" + " .word ._625\n" + "._622:\n" + " bl debug_sub_8010818\n" + " b ._626\n" + "._623:\n" + " ldr r1, ._628\n" + " mov r0, #0x1f\n" + " mov r2, #0xec\n" + " bl debug_sub_80132C8\n" + "._626:\n" + " bl debug_sub_8011E5C\n" + " bl debug_sub_8011E74\n" + " bl debug_sub_8012540\n" + " bl debug_nullsub_3\n" + " ldr r0, ._628 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + " b ._638\n" + "._629:\n" + " .align 2, 0\n" + "._628:\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_030043A4\n" + "._624:\n" + " ldr r1, ._631\n" + " mov r0, #0x1f\n" + " mov r2, #0xec\n" + " bl debug_sub_8013294\n" + " b ._638\n" + "._632:\n" + " .align 2, 0\n" + "._631:\n" + " .word gUnknown_Debug_2023A76\n" + "._625:\n" + " ldr r3, ._635\n" + " add r2, r3, #0\n" + " add r2, r2, #0x44\n" + " ldrh r1, [r2]\n" + " mov r4, #0x0\n" + " ldsh r0, [r2, r4]\n" + " cmp r0, #0x7\n" + " bgt ._633 @cond_branch\n" + " add r0, r1, #1\n" + " strh r0, [r2]\n" + " add r1, r3, #0\n" + " add r1, r1, #0x8a\n" + " ldrh r0, [r1]\n" + " add r0, r0, #0x1\n" + " strh r0, [r1]\n" + " b ._634\n" + "._636:\n" + " .align 2, 0\n" + "._635:\n" + " .word gUnknown_Debug_2023A76\n" + "._633:\n" + " mov r1, #0x0\n" + " strh r1, [r2]\n" + " add r0, r3, #0\n" + " add r0, r0, #0x8a\n" + " strh r1, [r0]\n" + "._634:\n" + " bl debug_sub_8012540\n" + " b ._638\n" + "._621:\n" + " mov r0, #0x1\n" + " bl debug_sub_8010B80\n" + " ldr r2, ._639\n" + " ldr r0, ._639 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " b ._638\n" + "._640:\n" + " .align 2, 0\n" + "._639:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + "._617:\n" + " cmp r2, #0x4\n" + " bne ._642 @cond_branch\n" + " cmp r1, #0x5\n" + " bhi ._642 @cond_branch\n" + " mov r0, #0x1\n" + " bl debug_sub_8010AAC\n" + " b ._644\n" + "._642:\n" + " ldr r6, ._650\n" + " ldr r5, ._650 + 4\n" + " ldr r4, ._650 + 8\n" + " ldrb r0, [r4]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " ldrb r0, [r5]\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x1\n" + " ldr r2, ._650 + 12\n" + " ldrb r0, [r2]\n" + " mov r3, #0x46\n" + " mul r0, r0, r3\n" + " add r1, r1, r0\n" + " add r1, r1, r6\n" + " ldrh r0, [r1]\n" + " add r0, r0, #0x1\n" + " strh r0, [r1]\n" + " ldrb r0, [r4]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " ldrb r5, [r5]\n" + " add r1, r1, r5\n" + " lsl r0, r1, #0x1\n" + " ldrb r2, [r2]\n" + " mul r2, r2, r3\n" + " add r0, r0, r2\n" + " add r3, r0, r6\n" + " mov r4, #0x0\n" + " ldsh r2, [r3, r4]\n" + " ldr r4, ._650 + 16\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r1, r0, #0x1\n" + " add r0, r4, #6\n" + " add r0, r1, r0\n" + " ldrh r0, [r0]\n" + " cmp r2, r0\n" + " ble ._644 @cond_branch\n" + " add r0, r4, #0\n" + " add r0, r0, #0x8\n" + " add r0, r1, r0\n" + " ldrh r0, [r0]\n" + " strh r0, [r3]\n" + "._644:\n" + " ldr r5, ._650 + 4\n" + " ldrb r0, [r5]\n" + " cmp r0, #0\n" + " bne ._645 @cond_branch\n" + " mov r0, #0x0\n" + " bl debug_sub_8010AAC\n" + " ldr r0, ._650 + 8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r0, #0x4\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + "._645:\n" + " ldr r4, ._650 + 8\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r5, [r5]\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + "._638:\n" + " ldr r0, ._650 + 20\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._646 @cond_branch\n" + " ldr r0, ._650 + 4\n" + " ldrb r1, [r0]\n" + " ldr r2, ._650 + 8\n" + " mov r8, r2\n" + " add r7, r0, #0\n" + " cmp r1, #0x4\n" + " bne ._648 @cond_branch\n" + " ldrb r0, [r2]\n" + " cmp r0, #0x5\n" + " bhi ._648 @cond_branch\n" + " mov r0, #0x1\n" + " bl debug_sub_8010AAC\n" + " b ._653\n" + "._651:\n" + " .align 2, 0\n" + "._650:\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_Debug_821F424\n" + " .word gMain\n" + "._648:\n" + " mov r4, r8\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r1, [r7]\n" + " add r0, r0, r1\n" + " cmp r0, #0x1e\n" + " bne ._652 @cond_branch\n" + " mov r0, #0x2\n" + " bl debug_sub_8010B80\n" + " b ._653\n" + "._652:\n" + " ldr r4, ._655\n" + " lsl r1, r0, #0x1\n" + " ldr r3, ._655 + 4\n" + " ldrb r2, [r3]\n" + " mov r0, #0x46\n" + " mul r0, r0, r2\n" + " add r1, r1, r0\n" + " add r1, r1, r4\n" + " ldrh r0, [r1]\n" + " sub r0, r0, #0xa\n" + " strh r0, [r1]\n" + " add r6, r3, #0\n" + " ldr r5, ._655 + 8\n" + " b ._654\n" + "._656:\n" + " .align 2, 0\n" + "._655:\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_Debug_821F424\n" + "._657:\n" + " add r0, r5, #6\n" + " add r0, r1, r0\n" + " ldrh r0, [r0]\n" + " ldrh r2, [r3]\n" + " add r0, r0, r2\n" + " strh r0, [r3]\n" + "._654:\n" + " mov r1, r8\n" + " ldrb r0, [r1]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " ldrb r2, [r7]\n" + " add r1, r1, r2\n" + " lsl r2, r1, #0x1\n" + " ldrb r3, [r6]\n" + " mov r0, #0x46\n" + " mul r0, r0, r3\n" + " add r2, r2, r0\n" + " add r3, r2, r4\n" + " mov r0, #0x0\n" + " ldsh r2, [r3, r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r1, r0, #0x1\n" + " add r0, r5, #0\n" + " add r0, r0, #0x8\n" + " add r0, r1, r0\n" + " ldrh r0, [r0]\n" + " cmp r2, r0\n" + " blt ._657 @cond_branch\n" + "._653:\n" + " ldr r5, ._663\n" + " ldrb r0, [r5]\n" + " cmp r0, #0\n" + " bne ._658 @cond_branch\n" + " mov r0, #0x0\n" + " bl debug_sub_8010AAC\n" + " ldr r0, ._663 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r0, #0x4\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + "._658:\n" + " ldr r4, ._663 + 4\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r5, [r5]\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + "._646:\n" + " ldr r0, ._663 + 8\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._659 @cond_branch\n" + " ldr r0, ._663\n" + " ldrb r1, [r0]\n" + " ldr r2, ._663 + 4\n" + " mov r8, r2\n" + " add r7, r0, #0\n" + " cmp r1, #0x4\n" + " bne ._661 @cond_branch\n" + " ldrb r0, [r2]\n" + " cmp r0, #0x5\n" + " bhi ._661 @cond_branch\n" + " mov r0, #0x1\n" + " bl debug_sub_8010AAC\n" + " b ._666\n" + "._664:\n" + " .align 2, 0\n" + "._663:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gMain\n" + "._661:\n" + " mov r4, r8\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r1, [r7]\n" + " add r0, r0, r1\n" + " cmp r0, #0x1e\n" + " bne ._665 @cond_branch\n" + " mov r0, #0x3\n" + " bl debug_sub_8010B80\n" + " b ._666\n" + "._665:\n" + " ldr r4, ._668\n" + " lsl r1, r0, #0x1\n" + " ldr r3, ._668 + 4\n" + " ldrb r2, [r3]\n" + " mov r0, #0x46\n" + " mul r0, r0, r2\n" + " add r1, r1, r0\n" + " add r1, r1, r4\n" + " ldrh r0, [r1]\n" + " add r0, r0, #0xa\n" + " strh r0, [r1]\n" + " add r6, r3, #0\n" + " ldr r5, ._668 + 8\n" + " b ._667\n" + "._669:\n" + " .align 2, 0\n" + "._668:\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_Debug_821F424\n" + "._670:\n" + " ldrh r0, [r3]\n" + " sub r0, r0, r1\n" + " strh r0, [r3]\n" + "._667:\n" + " mov r2, r8\n" + " ldrb r0, [r2]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " ldrb r0, [r7]\n" + " add r1, r1, r0\n" + " lsl r2, r1, #0x1\n" + " ldrb r3, [r6]\n" + " mov r0, #0x46\n" + " mul r0, r0, r3\n" + " add r2, r2, r0\n" + " add r3, r2, r4\n" + " mov r0, #0x0\n" + " ldsh r2, [r3, r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x1\n" + " add r1, r5, #6\n" + " add r0, r0, r1\n" + " ldrh r1, [r0]\n" + " cmp r2, r1\n" + " bgt ._670 @cond_branch\n" + "._666:\n" + " ldr r5, ._672\n" + " ldrb r0, [r5]\n" + " cmp r0, #0\n" + " bne ._671 @cond_branch\n" + " mov r0, #0x0\n" + " bl debug_sub_8010AAC\n" + " ldr r0, ._672 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r0, #0x4\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + "._671:\n" + " ldr r4, ._672 + 4\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r5, [r5]\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + "._659:\n" + " bl AnimateSprites\n" + " bl BuildOamBuffer\n" + " add sp, sp, #0x10\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._673:\n" + " .align 2, 0\n" + "._672:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8011498() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " ldr r2, ._687\n" + " ldr r0, ._687 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov r9, r0\n" + " ldr r4, ._687 + 8\n" + " ldrh r1, [r4, #0x28]\n" + " mov r0, #0x81\n" + " lsl r0, r0, #0x2\n" + " cmp r1, r0\n" + " bne ._674 @cond_branch\n" + " bl DoSoftReset\n" + "._674:\n" + " ldrh r0, [r4, #0x2a]\n" + " cmp r0, #0x4\n" + " bne ._675 @cond_branch\n" + " bl debug_sub_8012658\n" + " ldr r0, ._687 + 12\n" + " bl SetMainCallback2\n" + "._675:\n" + " ldrh r0, [r4, #0x2a]\n" + " cmp r0, #0x8\n" + " bne ._676 @cond_branch\n" + " bl debug_sub_801174C\n" + "._676:\n" + " ldrh r0, [r4, #0x2a]\n" + " cmp r0, #0x40\n" + " beq ._677 @cond_branch\n" + " cmp r0, #0x80\n" + " bne ._678 @cond_branch\n" + "._677:\n" + " bl debug_sub_8012658\n" + " ldr r0, ._687 + 16\n" + " ldrb r1, [r0]\n" + " mov r2, #0x2\n" + " eor r1, r1, r2\n" + " strb r1, [r0]\n" + " bl debug_sub_8012628\n" + "._678:\n" + " ldr r0, ._687 + 8\n" + " ldrh r0, [r0, #0x2a]\n" + " cmp r0, #0x20\n" + " beq ._679 @cond_branch\n" + " cmp r0, #0x10\n" + " bne ._680 @cond_branch\n" + "._679:\n" + " bl debug_sub_8012658\n" + " ldr r0, ._687 + 16\n" + " ldrb r1, [r0]\n" + " mov r2, #0x1\n" + " eor r1, r1, r2\n" + " strb r1, [r0]\n" + " bl debug_sub_8012628\n" + "._680:\n" + " ldr r0, ._687 + 8\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._681 @cond_branch\n" + " ldr r0, ._687 + 20\n" + " mov r8, r0\n" + " ldr r6, ._687 + 16\n" + " ldrb r4, [r6]\n" + " lsl r4, r4, #0x1\n" + " mov r0, r9\n" + " mov r1, #0x5\n" + " bl __udivsi3\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x15\n" + " add r4, r4, r0\n" + " ldr r5, ._687 + 24\n" + " ldrb r2, [r5]\n" + " lsl r1, r2, #0x1\n" + " add r1, r1, r2\n" + " lsl r1, r1, #0x4\n" + " add r4, r4, r1\n" + " add r4, r4, r8\n" + " ldrh r1, [r4]\n" + " sub r1, r1, #0x1\n" + " strh r1, [r4]\n" + " ldrb r3, [r6]\n" + " lsl r1, r3, #0x1\n" + " add r1, r1, r0\n" + " ldrb r2, [r5]\n" + " lsl r0, r2, #0x1\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x4\n" + " add r1, r1, r0\n" + " mov r0, r8\n" + " add r4, r1, r0\n" + " mov r0, #0x0\n" + " ldsh r1, [r4, r0]\n" + " ldr r5, ._687 + 28\n" + " lsl r0, r3, #0x2\n" + " add r0, r0, r3\n" + " lsl r2, r0, #0x1\n" + " add r0, r5, #0\n" + " add r0, r0, #0x8\n" + " add r0, r2, r0\n" + " ldrh r0, [r0]\n" + " cmp r1, r0\n" + " bge ._682 @cond_branch\n" + " add r0, r5, #6\n" + " add r0, r2, r0\n" + " ldrh r0, [r0]\n" + " strh r0, [r4]\n" + "._682:\n" + " bl debug_sub_8012294\n" + "._681:\n" + " ldr r0, ._687 + 8\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._683 @cond_branch\n" + " ldr r1, ._687 + 20\n" + " mov r8, r1\n" + " ldr r6, ._687 + 16\n" + " ldrb r4, [r6]\n" + " lsl r4, r4, #0x1\n" + " mov r0, r9\n" + " mov r1, #0x5\n" + " bl __udivsi3\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x15\n" + " add r4, r4, r0\n" + " ldr r5, ._687 + 24\n" + " ldrb r2, [r5]\n" + " lsl r1, r2, #0x1\n" + " add r1, r1, r2\n" + " lsl r1, r1, #0x4\n" + " add r4, r4, r1\n" + " add r4, r4, r8\n" + " ldrh r1, [r4]\n" + " add r1, r1, #0x1\n" + " strh r1, [r4]\n" + " ldrb r3, [r6]\n" + " lsl r1, r3, #0x1\n" + " add r1, r1, r0\n" + " ldrb r2, [r5]\n" + " lsl r0, r2, #0x1\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x4\n" + " add r1, r1, r0\n" + " mov r0, r8\n" + " add r4, r1, r0\n" + " mov r0, #0x0\n" + " ldsh r1, [r4, r0]\n" + " ldr r5, ._687 + 28\n" + " lsl r0, r3, #0x2\n" + " add r0, r0, r3\n" + " lsl r2, r0, #0x1\n" + " add r0, r5, #6\n" + " add r0, r2, r0\n" + " ldrh r0, [r0]\n" + " cmp r1, r0\n" + " ble ._684 @cond_branch\n" + " add r0, r5, #0\n" + " add r0, r0, #0x8\n" + " add r0, r2, r0\n" + " ldrh r0, [r0]\n" + " strh r0, [r4]\n" + "._684:\n" + " bl debug_sub_8012294\n" + "._683:\n" + " ldr r0, ._687 + 8\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._685 @cond_branch\n" + " ldr r6, ._687 + 20\n" + " ldr r5, ._687 + 16\n" + " ldrb r4, [r5]\n" + " lsl r4, r4, #0x1\n" + " mov r0, r9\n" + " mov r1, #0x5\n" + " bl __udivsi3\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x15\n" + " add r4, r4, r0\n" + " ldr r2, ._687 + 24\n" + " ldrb r1, [r2]\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x4\n" + " add r4, r4, r0\n" + " add r4, r4, r6\n" + " ldrh r0, [r4]\n" + " sub r0, r0, #0xa\n" + " strh r0, [r4]\n" + " mov sl, r5\n" + " mov r8, r6\n" + " add r7, r2, #0\n" + " ldr r6, ._687 + 28\n" + " b ._686\n" + "._688:\n" + " .align 2, 0\n" + "._687:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gMain\n" + " .word debug_sub_8010CAC+1\n" + " .word gUnknown_Debug_030043A8\n" + " .word gUnknown_Debug_2023B02\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_Debug_821F564\n" + "._689:\n" + " add r0, r6, #6\n" + " add r0, r2, r0\n" + " ldrh r0, [r0]\n" + " ldrh r1, [r4]\n" + " add r0, r0, r1\n" + " strh r0, [r4]\n" + "._686:\n" + " mov r0, sl\n" + " ldrb r5, [r0]\n" + " lsl r4, r5, #0x1\n" + " mov r0, r9\n" + " mov r1, #0x5\n" + " bl __udivsi3\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x15\n" + " add r4, r4, r0\n" + " ldrb r1, [r7]\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x4\n" + " add r4, r4, r0\n" + " add r4, r4, r8\n" + " mov r0, #0x0\n" + " ldsh r1, [r4, r0]\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r2, r0, #0x1\n" + " add r0, r6, #0\n" + " add r0, r0, #0x8\n" + " add r0, r2, r0\n" + " ldrh r0, [r0]\n" + " cmp r1, r0\n" + " blt ._689 @cond_branch\n" + " bl debug_sub_8012294\n" + "._685:\n" + " ldr r0, ._692\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._690 @cond_branch\n" + " ldr r6, ._692 + 4\n" + " ldr r5, ._692 + 8\n" + " ldrb r4, [r5]\n" + " lsl r4, r4, #0x1\n" + " mov r0, r9\n" + " mov r1, #0x5\n" + " bl __udivsi3\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x15\n" + " add r4, r4, r0\n" + " ldr r2, ._692 + 12\n" + " ldrb r1, [r2]\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x4\n" + " add r4, r4, r0\n" + " add r4, r4, r6\n" + " ldrh r0, [r4]\n" + " add r0, r0, #0xa\n" + " strh r0, [r4]\n" + " mov sl, r5\n" + " mov r8, r6\n" + " add r7, r2, #0\n" + " ldr r6, ._692 + 16\n" + " b ._691\n" + "._693:\n" + " .align 2, 0\n" + "._692:\n" + " .word gMain\n" + " .word gUnknown_Debug_2023B02\n" + " .word gUnknown_Debug_030043A8\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_Debug_821F564\n" + "._694:\n" + " ldrh r0, [r4]\n" + " sub r0, r0, r1\n" + " strh r0, [r4]\n" + "._691:\n" + " mov r1, sl\n" + " ldrb r5, [r1]\n" + " lsl r4, r5, #0x1\n" + " mov r0, r9\n" + " mov r1, #0x5\n" + " bl __udivsi3\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x15\n" + " add r4, r4, r0\n" + " ldrb r1, [r7]\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x4\n" + " add r4, r4, r0\n" + " add r4, r4, r8\n" + " mov r0, #0x0\n" + " ldsh r2, [r4, r0]\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x1\n" + " add r1, r6, #6\n" + " add r0, r0, r1\n" + " ldrh r1, [r0]\n" + " cmp r2, r1\n" + " bgt ._694 @cond_branch\n" + " bl debug_sub_8012294\n" + "._690:\n" + " bl AnimateSprites\n" + " bl BuildOamBuffer\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_801174C() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xffffffe8\n" + " mov r0, #0x0\n" + " mov r9, r0\n" + " ldr r1, ._704\n" + " mov r0, #0x1\n" + " strb r0, [r1]\n" + " bl Random\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x10\n" + " lsr r4, r4, #0x10\n" + " mov r0, #0x3\n" + " and r4, r4, r0\n" + " lsl r4, r4, #0x18\n" + " lsr r6, r4, #0x18\n" + " ldr r5, ._704 + 4\n" + " lsl r1, r6, #0x1\n" + " add r1, r1, r6\n" + " lsl r1, r1, #0x1\n" + " ldr r0, ._704 + 8\n" + " add r1, r1, r0\n" + " add r0, r5, #0\n" + " bl StringCopy\n" + " lsr r4, r4, #0x19\n" + " strb r4, [r5, #0x8]\n" + " bl ZeroPlayerPartyMons\n" + " bl ZeroEnemyPartyMons\n" + " ldr r0, ._704 + 12\n" + " mov r1, #0x3c\n" + " ldsh r7, [r0, r1]\n" + " mov r2, r9\n" + " str r2, [sp, #0xc]\n" + " cmp r7, #0x9\n" + " ble ._695 @cond_branch\n" + " mov r0, #0x0\n" + "._696:\n" + " sub r7, r7, #0xa\n" + " add r0, r0, #0x1\n" + " cmp r7, #0x9\n" + " bgt ._696 @cond_branch\n" + " str r0, [sp, #0xc]\n" + "._695:\n" + " ldr r2, ._704 + 16\n" + " ldr r1, ._704 + 20\n" + " sub r0, r7, #1\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r1\n" + " ldrh r3, [r0]\n" + " strh r3, [r2]\n" + " ldr r1, ._704 + 24\n" + " mov r0, #0x8\n" + " strb r0, [r1]\n" + " ldr r1, ._704 + 28\n" + " add r0, sp, #0xc\n" + " ldrb r0, [r0]\n" + " strb r0, [r1]\n" + " mov r0, #0x80\n" + " and r0, r0, r3\n" + " cmp r0, #0\n" + " beq ._697 @cond_branch\n" + " bl EnterSafariMode\n" + "._697:\n" + " ldr r5, ._704 + 12\n" + " ldrh r0, [r5, #0x3c]\n" + " sub r0, r0, #0x2\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " cmp r0, #0x2\n" + " bhi ._698 @cond_branch\n" + " ldr r4, ._704 + 32\n" + " bl Random\n" + " mov r1, #0x7\n" + " and r1, r1, r0\n" + " add r1, r1, #0x1\n" + " strh r1, [r4]\n" + "._698:\n" + " ldr r1, ._704 + 36\n" + " mov r0, #0x0\n" + " strb r0, [r1]\n" + " mov r7, #0x0\n" + "._745:\n" + " lsl r0, r7, #0x1\n" + " ldr r3, ._704 + 12\n" + " add r1, r0, r3\n" + " mov r2, #0x0\n" + " ldsh r1, [r1, r2]\n" + " add r2, r3, #0\n" + " mov r8, r0\n" + " add r3, r7, #5\n" + " mov sl, r3\n" + " cmp r1, #0\n" + " beq ._699 @cond_branch\n" + " add r0, r7, #4\n" + " lsl r0, r0, #0x1\n" + " add r1, r2, #0\n" + " add r0, r0, r1\n" + " mov r3, #0x0\n" + " ldsh r0, [r0, r3]\n" + " cmp r0, #0x1\n" + " beq ._707 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._701 @cond_branch\n" + " cmp r0, #0\n" + " beq ._706 @cond_branch\n" + " b ._708\n" + "._705:\n" + " .align 2, 0\n" + "._704:\n" + " .word gUnknown_020297ED\n" + " .word gSaveBlock2\n" + " .word str_821F631\n" + " .word gUnknown_Debug_2023A76\n" + " .word gBattleTypeFlags\n" + " .word gUnknown_Debug_821F598\n" + " .word gUnknown_02023A14_50\n" + " .word gBattleTerrain\n" + " .word gTrainerBattleOpponent\n" + " .word gPlayerPartyCount\n" + "._701:\n" + " cmp r0, #0x2\n" + " beq ._706 @cond_branch\n" + " cmp r0, #0x3\n" + " beq ._707 @cond_branch\n" + " b ._708\n" + "._706:\n" + " mov r6, #0x0\n" + " b ._710\n" + "._707:\n" + " mov r6, #0xfe\n" + " b ._710\n" + "._708:\n" + " mov r6, #0xff\n" + "._710:\n" + " mov r1, r8\n" + " add r0, r1, r2\n" + " mov r3, #0x0\n" + " ldsh r0, [r0, r3]\n" + " add r1, r7, #5\n" + " mov sl, r1\n" + " cmp r0, #0xc9\n" + " bne ._712 @cond_branch\n" + " cmp r1, #0x1d\n" + " bgt ._712 @cond_branch\n" + " add r0, r7, #7\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r2\n" + " ldrb r0, [r0]\n" + " mov r9, r0\n" + " b ._713\n" + "._712:\n" + " mov r2, #0x0\n" + " mov r9, r2\n" + "._713:\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl __divsi3\n" + " mov r3, #0x64\n" + " mul r0, r0, r3\n" + " ldr r1, ._719\n" + " add r0, r0, r1\n" + " ldr r1, ._719 + 4\n" + " add r1, r1, r8\n" + " ldrh r1, [r1]\n" + " add r2, r7, #1\n" + " lsl r2, r2, #0x1\n" + " ldr r3, ._719 + 4\n" + " add r2, r2, r3\n" + " ldrb r2, [r2]\n" + " str r6, [sp]\n" + " mov r3, #0x0\n" + " str r3, [sp, #0x4]\n" + " mov r3, r9\n" + " str r3, [sp, #0x8]\n" + " mov r3, #0x0\n" + " bl CreateMonWithGenderNatureLetter\n" + "._699:\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl __divsi3\n" + " mov r2, #0x64\n" + " add r1, r0, #0\n" + " mul r1, r1, r2\n" + " ldr r0, ._719\n" + " add r5, r1, r0\n" + " ldr r4, ._719 + 8\n" + " mov r3, r8\n" + " add r6, r3, r4\n" + " add r0, r5, #0\n" + " mov r1, #0xc\n" + " add r2, r6, #0\n" + " bl SetMonData\n" + " sub r4, r4, #0x4\n" + " add r1, r7, #2\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r4\n" + " ldrh r0, [r0]\n" + " sub r0, r0, #0x1\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " str r1, [sp, #0x10]\n" + " cmp r0, #0xb\n" + " bhi ._714 @cond_branch\n" + " add r0, r5, #0\n" + " mov r1, #0x26\n" + " add r2, r6, #0\n" + " bl SetMonData\n" + "._714:\n" + " add r1, r7, #3\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r4\n" + " mov r3, #0x0\n" + " ldsh r2, [r0, r3]\n" + " str r1, [sp, #0x14]\n" + " cmp r2, #0\n" + " beq ._716 @cond_branch\n" + " cmp r2, #0x3\n" + " beq ._716 @cond_branch\n" + " cmp r2, #0x2\n" + " bgt ._717 @cond_branch\n" + " mov r1, #0x0\n" + " ldsh r0, [r0, r1]\n" + " sub r0, r0, #0x1\n" + " b ._718\n" + "._720:\n" + " .align 2, 0\n" + "._719:\n" + " .word gEnemyParty\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_2023A7A\n" + "._717:\n" + " mov r2, #0x0\n" + " ldsh r0, [r0, r2]\n" + " sub r0, r0, #0x4\n" + "._718:\n" + " str r0, [sp, #0xc]\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl __divsi3\n" + " mov r3, #0x64\n" + " mul r0, r0, r3\n" + " ldr r1, ._726\n" + " add r0, r0, r1\n" + " mov r1, #0x2e\n" + " add r2, sp, #0xc\n" + " bl SetMonData\n" + "._716:\n" + " ldr r1, ._726 + 4\n" + " add r1, r1, #0x46\n" + " mov r2, r8\n" + " add r0, r2, r1\n" + " mov r3, #0x0\n" + " ldsh r0, [r0, r3]\n" + " ldr r2, ._726 + 4\n" + " cmp r0, #0\n" + " beq ._721 @cond_branch\n" + " add r0, r7, #4\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r1\n" + " mov r1, #0x0\n" + " ldsh r0, [r0, r1]\n" + " cmp r0, #0x1\n" + " beq ._729 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._723 @cond_branch\n" + " cmp r0, #0\n" + " beq ._728 @cond_branch\n" + " b ._730\n" + "._727:\n" + " .align 2, 0\n" + "._726:\n" + " .word gEnemyParty\n" + " .word gUnknown_Debug_2023A76\n" + "._723:\n" + " cmp r0, #0x2\n" + " beq ._728 @cond_branch\n" + " cmp r0, #0x3\n" + " beq ._729 @cond_branch\n" + " b ._730\n" + "._728:\n" + " mov r6, #0x0\n" + " b ._732\n" + "._729:\n" + " mov r6, #0xfe\n" + " b ._732\n" + "._730:\n" + " mov r6, #0xff\n" + "._732:\n" + " add r1, r2, #0\n" + " add r1, r1, #0x46\n" + " mov r2, r8\n" + " add r0, r2, r1\n" + " mov r3, #0x0\n" + " ldsh r0, [r0, r3]\n" + " cmp r0, #0xc9\n" + " bne ._734 @cond_branch\n" + " mov r0, sl\n" + " cmp r0, #0x1d\n" + " bgt ._734 @cond_branch\n" + " add r0, r7, #7\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r1\n" + " ldrb r0, [r0]\n" + " mov r9, r0\n" + " b ._735\n" + "._734:\n" + " mov r1, #0x0\n" + " mov r9, r1\n" + "._735:\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl __divsi3\n" + " mov r2, #0x64\n" + " mul r0, r0, r2\n" + " ldr r1, ._741\n" + " add r0, r0, r1\n" + " ldr r1, ._741 + 4\n" + " add r1, r1, r8\n" + " ldrh r1, [r1]\n" + " add r2, r7, #1\n" + " lsl r2, r2, #0x1\n" + " ldr r3, ._741 + 4\n" + " add r2, r2, r3\n" + " ldrb r2, [r2]\n" + " str r6, [sp]\n" + " mov r3, #0x0\n" + " str r3, [sp, #0x4]\n" + " mov r3, r9\n" + " str r3, [sp, #0x8]\n" + " mov r3, #0x0\n" + " bl CreateMonWithGenderNatureLetter\n" + " ldr r1, ._741 + 8\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + "._721:\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl __divsi3\n" + " mov r2, #0x64\n" + " add r1, r0, #0\n" + " mul r1, r1, r2\n" + " ldr r0, ._741\n" + " add r4, r1, r0\n" + " ldr r0, ._741 + 12\n" + " mov r3, r8\n" + " add r5, r3, r0\n" + " add r0, r4, #0\n" + " mov r1, #0xc\n" + " add r2, r5, #0\n" + " bl SetMonData\n" + " ldr r1, [sp, #0x10]\n" + " lsl r0, r1, #0x1\n" + " ldr r2, ._741 + 16\n" + " add r0, r0, r2\n" + " ldrh r0, [r0]\n" + " sub r0, r0, #0x1\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " cmp r0, #0xb\n" + " bhi ._736 @cond_branch\n" + " add r0, r4, #0\n" + " mov r1, #0x26\n" + " add r2, r5, #0\n" + " bl SetMonData\n" + "._736:\n" + " ldr r3, [sp, #0x14]\n" + " lsl r0, r3, #0x1\n" + " ldr r1, ._741 + 4\n" + " add r0, r0, r1\n" + " mov r2, #0x0\n" + " ldsh r1, [r0, r2]\n" + " cmp r1, #0\n" + " beq ._738 @cond_branch\n" + " cmp r1, #0x3\n" + " beq ._738 @cond_branch\n" + " cmp r1, #0x2\n" + " bgt ._739 @cond_branch\n" + " add r0, r1, #0\n" + " sub r0, r0, #0x1\n" + " b ._740\n" + "._742:\n" + " .align 2, 0\n" + "._741:\n" + " .word gPlayerParty\n" + " .word gUnknown_Debug_2023ABC\n" + " .word gPlayerPartyCount\n" + " .word gUnknown_Debug_2023AC0\n" + " .word gUnknown_Debug_2023A76\n" + "._739:\n" + " mov r1, #0x0\n" + " ldsh r0, [r0, r1]\n" + " sub r0, r0, #0x4\n" + "._740:\n" + " str r0, [sp, #0xc]\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl __divsi3\n" + " mov r2, #0x64\n" + " mul r0, r0, r2\n" + " ldr r1, ._750\n" + " add r0, r0, r1\n" + " mov r1, #0x2e\n" + " add r2, sp, #0xc\n" + " bl SetMonData\n" + "._738:\n" + " ldr r3, [sp, #0x14]\n" + " lsl r0, r3, #0x1\n" + " ldr r1, ._750 + 4\n" + " add r0, r0, r1\n" + " mov r2, #0x0\n" + " ldsh r0, [r0, r2]\n" + " cmp r0, #0x2\n" + " ble ._743 @cond_branch\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl __divsi3\n" + " mov r3, #0x64\n" + " mul r0, r0, r3\n" + " ldr r1, ._750\n" + " add r0, r0, r1\n" + " mov r1, #0x7\n" + " ldr r2, ._750 + 8\n" + " bl SetMonData\n" + " ldr r2, ._750 + 12\n" + " ldrb r0, [r2]\n" + " mov r1, #0x40\n" + " orr r0, r0, r1\n" + " strb r0, [r2]\n" + "._743:\n" + " mov r7, sl\n" + " cmp r7, #0x1d\n" + " bgt ._744 @cond_branch\n" + " b ._745\n" + "._744:\n" + " mov r0, #0x0\n" + " str r0, [sp, #0xc]\n" + " mov r0, #0x64\n" + " mov r8, r0\n" + " ldr r1, ._750 + 16\n" + " mov r9, r1\n" + " ldr r2, ._750\n" + " mov sl, r2\n" + "._747:\n" + " mov r7, #0x0\n" + "._746:\n" + " ldr r2, [sp, #0xc]\n" + " mov r0, r8\n" + " mul r0, r0, r2\n" + " ldr r3, ._750 + 20\n" + " add r0, r0, r3\n" + " add r5, r7, #0\n" + " add r5, r5, #0xd\n" + " lsl r2, r2, #0x3\n" + " lsl r4, r7, #0x1\n" + " mov r3, r9\n" + " add r1, r4, r3\n" + " add r2, r2, r1\n" + " add r1, r5, #0\n" + " bl SetMonData\n" + " ldr r1, [sp, #0xc]\n" + " mov r0, r8\n" + " mul r0, r0, r1\n" + " ldr r2, ._750 + 20\n" + " add r0, r0, r2\n" + " add r6, r7, #0\n" + " add r6, r6, #0x11\n" + " lsl r1, r1, #0x3\n" + " add r1, r4, r1\n" + " add r1, r1, r9\n" + " mov r3, #0x0\n" + " ldsh r1, [r1, r3]\n" + " lsl r2, r1, #0x1\n" + " add r2, r2, r1\n" + " lsl r2, r2, #0x2\n" + " ldr r1, ._750 + 24\n" + " add r2, r2, r1\n" + " add r1, r6, #0\n" + " bl SetMonData\n" + " ldr r2, [sp, #0xc]\n" + " mov r0, r8\n" + " mul r0, r0, r2\n" + " add r0, r0, sl\n" + " lsl r2, r2, #0x3\n" + " ldr r3, ._750 + 28\n" + " add r1, r4, r3\n" + " add r2, r2, r1\n" + " add r1, r5, #0\n" + " bl SetMonData\n" + " ldr r1, [sp, #0xc]\n" + " mov r0, r8\n" + " mul r0, r0, r1\n" + " add r0, r0, sl\n" + " lsl r1, r1, #0x3\n" + " add r4, r4, r1\n" + " ldr r1, ._750 + 28\n" + " add r4, r4, r1\n" + " mov r2, #0x0\n" + " ldsh r1, [r4, r2]\n" + " lsl r2, r1, #0x1\n" + " add r2, r2, r1\n" + " lsl r2, r2, #0x2\n" + " ldr r3, ._750 + 24\n" + " add r2, r2, r3\n" + " add r1, r6, #0\n" + " bl SetMonData\n" + " add r7, r7, #0x1\n" + " cmp r7, #0x3\n" + " ble ._746 @cond_branch\n" + " ldr r0, [sp, #0xc]\n" + " add r0, r0, #0x1\n" + " str r0, [sp, #0xc]\n" + " cmp r0, #0x5\n" + " ble ._747 @cond_branch\n" + " ldr r3, ._750 + 32\n" + " add r4, r3, #0\n" + " add r4, r4, #0x44\n" + " ldrh r1, [r4]\n" + " mov r2, #0x0\n" + " ldsh r0, [r4, r2]\n" + " cmp r0, #0x8\n" + " bne ._748 @cond_branch\n" + " ldr r0, ._750 + 12\n" + " ldrb r1, [r0]\n" + " mov r2, #0x80\n" + " b ._753\n" + "._751:\n" + " .align 2, 0\n" + "._750:\n" + " .word gPlayerParty\n" + " .word gUnknown_Debug_2023ABC\n" + " .word Str_821F649\n" + " .word gUnknown_02023A14_50\n" + " .word gUnknown_Debug_2023B02\n" + " .word gEnemyParty\n" + " .word gBattleMoves+0x4\n" + " .word gUnknown_Debug_2023B32\n" + " .word gUnknown_Debug_2023A76\n" + "._748:\n" + " cmp r0, #0x7\n" + " bne ._752 @cond_branch\n" + " ldr r0, ._754\n" + " ldrb r1, [r0]\n" + " mov r2, #0x20\n" + " b ._753\n" + "._755:\n" + " .align 2, 0\n" + "._754:\n" + " .word gUnknown_02023A14_50\n" + "._752:\n" + " cmp r0, #0x6\n" + " bne ._756 @cond_branch\n" + " ldr r2, ._759\n" + " ldrb r0, [r2]\n" + " mov r1, #0x10\n" + " orr r0, r0, r1\n" + " strb r0, [r2]\n" + " ldrh r1, [r3, #0x4]\n" + " mov r2, #0x4\n" + " ldsh r0, [r3, r2]\n" + " cmp r0, #0x5\n" + " ble ._757 @cond_branch\n" + " ldr r0, ._759 + 4\n" + " sub r1, r1, #0x2\n" + " ldr r3, ._759 + 8\n" + " add r0, r0, r3\n" + " b ._761\n" + "._760:\n" + " .align 2, 0\n" + "._759:\n" + " .word gUnknown_02023A14_50\n" + " .word gSharedMem\n" + " .word 0x160a3\n" + "._757:\n" + " ldr r0, ._762\n" + " ldr r2, ._762 + 4\n" + " add r0, r0, r2\n" + " b ._761\n" + "._763:\n" + " .align 2, 0\n" + "._762:\n" + " .word gSharedMem\n" + " .word 0x160a3\n" + "._756:\n" + " cmp r0, #0x5\n" + " bne ._764 @cond_branch\n" + " ldr r0, ._766\n" + " ldrb r1, [r0]\n" + " mov r2, #0x21\n" + "._753:\n" + " orr r1, r1, r2\n" + "._761:\n" + " strb r1, [r0]\n" + " bl sub_80408BC\n" + " b ._770\n" + "._767:\n" + " .align 2, 0\n" + "._766:\n" + " .word gUnknown_02023A14_50\n" + "._764:\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._768 @cond_branch\n" + " bl sub_80408BC\n" + "._768:\n" + " ldrh r3, [r4]\n" + " mov r0, #0x2\n" + " and r0, r0, r3\n" + " cmp r0, #0\n" + " beq ._769 @cond_branch\n" + " ldr r0, ._772\n" + " ldrb r1, [r0]\n" + " mov r2, #0x4\n" + " orr r1, r1, r2\n" + " strb r1, [r0]\n" + "._769:\n" + " mov r0, #0x4\n" + " and r0, r0, r3\n" + " cmp r0, #0\n" + " beq ._770 @cond_branch\n" + " ldr r0, ._772\n" + " ldrb r1, [r0]\n" + " mov r2, #0x6\n" + " orr r1, r1, r2\n" + " strb r1, [r0]\n" + "._770:\n" + " ldr r0, ._772 + 4\n" + " ldr r1, ._772 + 8\n" + " str r1, [r0, #0x8]\n" + " ldr r0, ._772 + 12\n" + " bl SetMainCallback2\n" + " bl ClearBag\n" + " mov r0, #0x1\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x2\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x3\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x4\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x5\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x6\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x7\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x8\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x9\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0xa\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0xb\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0xc\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x13\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x14\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x19\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x22\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x23\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x25\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x49\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x4a\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x4b\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x4c\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x4d\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x4e\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x50\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " ldr r4, ._772 + 16\n" + " mov r7, #0xe\n" + "._771:\n" + " add r0, r4, #0\n" + " bl sub_810CA34\n" + " add r4, r4, #0x8\n" + " sub r7, r7, #0x1\n" + " cmp r7, #0\n" + " bge ._771 @cond_branch\n" + " add sp, sp, #0x18\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._773:\n" + " .align 2, 0\n" + "._772:\n" + " .word gUnknown_02023A14_50\n" + " .word gMain\n" + " .word debug_sub_80108B8+1\n" + " .word unref_sub_800D684+1\n" + " .word gUnknown_Debug_821F5AC\n" + "\n" + ); +} + +void debug_sub_8011D40(void) +{ + DmaCopy16(3, gSharedMem, (void *)(VRAM + 0x4000), 0x1000); + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; + REG_BG1HOFS = gBattle_BG1_X; + REG_BG1VOFS = gBattle_BG1_Y; + REG_BG2HOFS = gBattle_BG2_X; + REG_BG2VOFS = gBattle_BG2_Y; + REG_BG3HOFS = gBattle_BG3_X; + REG_BG3VOFS = gBattle_BG3_Y; + LoadOam(); + ProcessSpriteCopyRequests(); +} + +void debug_nullsub_45() +{ +} + +void debug_sub_8011DD4(void) +{ + REG_BG0CNT = 0x9803; + + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; + + REG_BG1HOFS = gBattle_BG1_X; + REG_BG1VOFS = gBattle_BG1_Y; + + REG_BG2HOFS = gBattle_BG2_X; + REG_BG2VOFS = gBattle_BG2_Y; + + REG_BG3HOFS = gBattle_BG3_X; + REG_BG3VOFS = gBattle_BG3_Y; + + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +void debug_sub_8011E5C(void) +{ + s32 i; + + for (i = 0; i < 31; i++) + debug_sub_8011EA0(i); +} + +extern u8 gUnknown_Debug_030043A8; + +void debug_sub_8011E74(void) +{ + u8 r5 = gUnknown_Debug_030043A8; + + for (gUnknown_Debug_030043A8 = 0; gUnknown_Debug_030043A8 < 4; gUnknown_Debug_030043A8++) + debug_sub_8012294(); + + gUnknown_Debug_030043A8 = r5; +} + +__attribute__((naked)) +void debug_sub_8011EA0(u8 a) +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xfffffff4\n" + " lsl r0, r0, #0x18\n" + " lsr r7, r0, #0x18\n" + " cmp r7, #0x22\n" + " bls ._782 @cond_branch\n" + " b ._815\n" + "._782:\n" + " lsl r0, r7, #0x2\n" + " ldr r1, ._785\n" + " add r1, r0, r1\n" + " ldr r1, [r1]\n" + " str r0, [sp, #0x8]\n" + " mov pc, r1\n" + "._786:\n" + " .align 2, 0\n" + "._785:\n" + " .word ._784\n" + "._784:\n" + " .word ._812\n" + " .word ._817\n" + " .word ._814\n" + " .word ._815\n" + " .word ._816\n" + " .word ._812\n" + " .word ._817\n" + " .word ._814\n" + " .word ._815\n" + " .word ._816\n" + " .word ._812\n" + " .word ._817\n" + " .word ._814\n" + " .word ._815\n" + " .word ._816\n" + " .word ._812\n" + " .word ._817\n" + " .word ._814\n" + " .word ._815\n" + " .word ._816\n" + " .word ._812\n" + " .word ._817\n" + " .word ._814\n" + " .word ._815\n" + " .word ._816\n" + " .word ._812\n" + " .word ._817\n" + " .word ._814\n" + " .word ._815\n" + " .word ._816\n" + " .word ._817\n" + " .word ._848\n" + " .word ._848\n" + " .word ._848\n" + " .word ._848\n" + "._812:\n" + " mov r0, #0x0\n" + " mov r1, #0x14\n" + " bl debug_sub_8010A7C\n" + " ldr r6, ._823\n" + " ldr r2, ._823 + 4\n" + " ldr r0, [sp, #0x8]\n" + " add r1, r0, r7\n" + " lsl r1, r1, #0x1\n" + " add r0, r1, r2\n" + " ldrh r0, [r0]\n" + " str r0, [sp, #0x4]\n" + " add r0, r2, #2\n" + " add r0, r1, r0\n" + " ldrb r0, [r0]\n" + " mov r8, r0\n" + " add r2, r2, #0x4\n" + " add r1, r1, r2\n" + " ldrb r1, [r1]\n" + " mov r9, r1\n" + " str r1, [sp]\n" + " ldr r0, ._823 + 8\n" + " add r1, r6, #0\n" + " ldr r2, [sp, #0x4]\n" + " mov r3, r8\n" + " bl Text_InitWindow\n" + " ldr r0, ._823 + 8\n" + " bl Text_PrintWindow8002F44\n" + " ldr r1, ._823 + 12\n" + " mov sl, r1\n" + " lsl r4, r7, #0x1\n" + " ldr r5, ._823 + 16\n" + " ldrb r0, [r5]\n" + " mov r7, #0x46\n" + " mul r0, r0, r7\n" + " add r0, r4, r0\n" + " add r0, r0, sl\n" + " mov r2, #0x0\n" + " ldsh r1, [r0, r2]\n" + " add r0, r6, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r2, #0xd3\n" + " lsl r2, r2, #0x1\n" + " ldrb r3, [r5]\n" + " lsl r3, r3, #0x5\n" + " add r3, r3, #0x19\n" + " lsl r3, r3, #0x18\n" + " lsr r3, r3, #0x18\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " ldr r0, ._823 + 8\n" + " add r1, r6, #0\n" + " bl Text_InitWindow\n" + " ldr r0, ._823 + 8\n" + " bl Text_PrintWindow8002F44\n" + " mov r0, #0xff\n" + " strb r0, [r6]\n" + " ldrb r0, [r5]\n" + " mul r0, r0, r7\n" + " add r4, r4, r0\n" + " add r4, r4, sl\n" + " mov r0, #0x0\n" + " ldsh r1, [r4, r0]\n" + " mov r0, #0xb\n" + " mul r1, r1, r0\n" + " ldr r0, ._823 + 20\n" + " add r1, r1, r0\n" + " add r0, r6, #0\n" + " bl StringAppend\n" + " mov r1, r9\n" + " str r1, [sp]\n" + " ldr r0, ._823 + 8\n" + " add r1, r6, #0\n" + " ldr r2, [sp, #0x4]\n" + " mov r3, r8\n" + " bl Text_InitWindow\n" + " ldr r0, ._823 + 8\n" + " bl Text_PrintWindow8002F44\n" + " b ._848\n" + "._824:\n" + " .align 2, 0\n" + "._823:\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_Debug_821F424\n" + " .word gUnknown_Debug_03004370\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_03004360\n" + " .word gSpeciesNames\n" + "._817:\n" + " ldr r6, ._826\n" + " ldr r3, ._826 + 4\n" + " lsl r1, r7, #0x1\n" + " ldr r0, ._826 + 8\n" + " ldrb r2, [r0]\n" + " mov r0, #0x46\n" + " mul r0, r0, r2\n" + " add r1, r1, r0\n" + " add r1, r1, r3\n" + " mov r2, #0x0\n" + " ldsh r1, [r1, r2]\n" + " add r0, r6, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " b ._825\n" + "._827:\n" + " .align 2, 0\n" + "._826:\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_03004360\n" + "._814:\n" + " mov r0, #0x0\n" + " mov r1, #0x18\n" + " bl debug_sub_8010A7C\n" + " ldr r6, ._830\n" + " ldr r1, ._830 + 4\n" + " mov sl, r1\n" + " ldr r4, ._830 + 8\n" + " ldr r2, [sp, #0x8]\n" + " add r1, r2, r7\n" + " lsl r1, r1, #0x1\n" + " add r0, r1, r4\n" + " ldrh r2, [r0]\n" + " add r0, r4, #2\n" + " add r0, r1, r0\n" + " ldrb r3, [r0]\n" + " add r4, r4, #0x4\n" + " add r1, r1, r4\n" + " ldrb r0, [r1]\n" + " str r0, [sp]\n" + " add r0, r6, #0\n" + " mov r1, sl\n" + " bl Text_InitWindow\n" + " add r0, r6, #0\n" + " bl Text_PrintWindow8002F44\n" + " lsl r4, r7, #0x1\n" + " ldr r5, ._830 + 12\n" + " ldrb r0, [r5]\n" + " mov r1, #0x46\n" + " mul r0, r0, r1\n" + " add r0, r4, r0\n" + " ldr r2, ._830 + 16\n" + " add r0, r0, r2\n" + " mov r2, #0x0\n" + " ldsh r1, [r0, r2]\n" + " mov r0, sl\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r2, #0xd3\n" + " lsl r2, r2, #0x1\n" + " ldrb r3, [r5]\n" + " lsl r3, r3, #0x5\n" + " add r3, r3, #0x19\n" + " lsl r3, r3, #0x18\n" + " lsr r3, r3, #0x18\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " add r0, r6, #0\n" + " mov r1, sl\n" + " bl Text_InitWindow\n" + " add r0, r6, #0\n" + " bl Text_PrintWindow8002F44\n" + " mov r0, #0xff\n" + " mov r1, sl\n" + " strb r0, [r1]\n" + " ldrb r0, [r5]\n" + " mov r2, #0x46\n" + " mul r0, r0, r2\n" + " add r4, r4, r0\n" + " ldr r0, ._830 + 16\n" + " add r4, r4, r0\n" + " mov r1, #0x0\n" + " ldsh r0, [r4, r1]\n" + " cmp r0, #0\n" + " beq ._828 @cond_branch\n" + " ldrh r0, [r4]\n" + " bl ItemId_GetItem\n" + " add r1, r0, #0\n" + " mov r0, sl\n" + " bl StringAppend\n" + " b ._829\n" + "._831:\n" + " .align 2, 0\n" + "._830:\n" + " .word gUnknown_Debug_03004370\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_Debug_821F424\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_Debug_2023A76\n" + "._828:\n" + " ldr r1, ._833\n" + " mov r0, sl\n" + " bl StringAppend\n" + "._829:\n" + " ldr r6, ._833 + 4\n" + " ldr r1, ._833 + 8\n" + " ldr r5, ._833 + 12\n" + " ldr r2, [sp, #0x8]\n" + " add r4, r2, r7\n" + " lsl r4, r4, #0x1\n" + " add r0, r4, r5\n" + " ldrh r2, [r0]\n" + " add r0, r5, #2\n" + " add r0, r4, r0\n" + " ldrb r3, [r0]\n" + " add r5, r5, #0x4\n" + " add r4, r4, r5\n" + " ldrb r0, [r4]\n" + " str r0, [sp]\n" + " add r0, r6, #0\n" + " bl Text_InitWindow\n" + " add r0, r6, #0\n" + " bl Text_PrintWindow8002F44\n" + " b ._848\n" + "._834:\n" + " .align 2, 0\n" + "._833:\n" + " .word Str_821F624\n" + " .word gUnknown_Debug_03004370\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_Debug_821F424\n" + "._816:\n" + " mov r0, #0x0\n" + " mov r1, #0x4\n" + " bl debug_sub_8010A7C\n" + " ldr r5, ._839\n" + " ldr r6, ._839 + 4\n" + " ldr r4, ._839 + 8\n" + " ldr r0, [sp, #0x8]\n" + " add r1, r0, r7\n" + " lsl r1, r1, #0x1\n" + " add r0, r1, r4\n" + " ldrh r2, [r0]\n" + " add r0, r4, #2\n" + " add r0, r1, r0\n" + " ldrb r3, [r0]\n" + " add r4, r4, #0x4\n" + " add r1, r1, r4\n" + " ldrb r0, [r1]\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r6, #0\n" + " bl Text_InitWindow\n" + " add r0, r5, #0\n" + " bl Text_PrintWindow8002F44\n" + " mov r4, #0x0\n" + " ldr r3, ._839 + 12\n" + " lsl r1, r7, #0x1\n" + " ldr r0, ._839 + 16\n" + " ldrb r2, [r0]\n" + " mov r0, #0x46\n" + " mul r0, r0, r2\n" + " add r1, r1, r0\n" + " add r1, r1, r3\n" + " mov r2, #0x0\n" + " ldsh r0, [r1, r2]\n" + " cmp r0, #0x1\n" + " beq ._835 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._836 @cond_branch\n" + " cmp r0, #0\n" + " beq ._837 @cond_branch\n" + " b ._843\n" + "._840:\n" + " .align 2, 0\n" + "._839:\n" + " .word gUnknown_Debug_03004370\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_Debug_821F424\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_03004360\n" + "._836:\n" + " cmp r0, #0x2\n" + " beq ._841 @cond_branch\n" + " cmp r0, #0x3\n" + " beq ._842 @cond_branch\n" + " b ._843\n" + "._837:\n" + " mov r0, #0xb5\n" + " b ._844\n" + "._835:\n" + " mov r0, #0xb6\n" + "._844:\n" + " strb r0, [r6]\n" + " mov r4, #0x1\n" + " b ._847\n" + "._841:\n" + " mov r0, #0xb5\n" + " b ._846\n" + "._842:\n" + " mov r0, #0xb6\n" + "._846:\n" + " strb r0, [r6]\n" + " strb r0, [r6, #0x1]\n" + " mov r4, #0x2\n" + " b ._847\n" + "._843:\n" + " ldr r2, ._849\n" + " add r1, r4, r2\n" + " mov r0, #0xac\n" + " strb r0, [r1]\n" + " add r4, r4, #0x1\n" + " add r6, r2, #0\n" + "._847:\n" + " add r1, r4, r6\n" + " mov r0, #0xff\n" + " strb r0, [r1]\n" + "._825:\n" + " ldr r5, ._849 + 4\n" + " ldr r4, ._849 + 8\n" + " ldr r0, [sp, #0x8]\n" + " add r1, r0, r7\n" + " lsl r1, r1, #0x1\n" + " add r0, r1, r4\n" + " ldrh r2, [r0]\n" + " add r0, r4, #2\n" + " add r0, r1, r0\n" + " ldrb r3, [r0]\n" + " add r4, r4, #0x4\n" + " add r1, r1, r4\n" + " ldrb r0, [r1]\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r6, #0\n" + " bl Text_InitWindow\n" + " add r0, r5, #0\n" + " bl Text_PrintWindow8002F44\n" + " b ._848\n" + "._850:\n" + " .align 2, 0\n" + "._849:\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_Debug_03004370\n" + " .word gUnknown_Debug_821F424\n" + "._815:\n" + " ldr r6, ._851\n" + " ldr r3, ._851 + 4\n" + " lsl r1, r7, #0x1\n" + " ldr r0, ._851 + 8\n" + " ldrb r2, [r0]\n" + " mov r0, #0x46\n" + " mul r0, r0, r2\n" + " add r1, r1, r0\n" + " add r1, r1, r3\n" + " mov r2, #0x0\n" + " ldsh r1, [r1, r2]\n" + " add r0, r6, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x1\n" + " bl ConvertIntToDecimalStringN\n" + " ldr r5, ._851 + 12\n" + " ldr r4, ._851 + 16\n" + " lsl r1, r7, #0x2\n" + " add r1, r1, r7\n" + " lsl r1, r1, #0x1\n" + " add r0, r1, r4\n" + " ldrh r2, [r0]\n" + " add r0, r4, #2\n" + " add r0, r1, r0\n" + " ldrb r3, [r0]\n" + " add r4, r4, #0x4\n" + " add r1, r1, r4\n" + " ldrb r0, [r1]\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r6, #0\n" + " bl Text_InitWindow\n" + " add r0, r5, #0\n" + " bl Text_PrintWindow8002F44\n" + "._848:\n" + " add sp, sp, #0xc\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._852:\n" + " .align 2, 0\n" + "._851:\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_Debug_03004370\n" + " .word gUnknown_Debug_821F424\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012294() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xfffffffc\n" + " ldr r2, ._854\n" + " ldr r0, ._854 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " cmp r5, #0x1d\n" + " bhi ._853 @cond_branch\n" + " mov r0, #0x0\n" + " mov r1, #0x18\n" + " bl debug_sub_8010A7C\n" + " ldr r0, ._854 + 8\n" + " mov sl, r0\n" + " ldr r1, ._854 + 12\n" + " mov r9, r1\n" + " ldr r2, ._854 + 16\n" + " mov r8, r2\n" + " ldr r7, ._854 + 20\n" + " ldrb r1, [r7]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x1\n" + " add r1, r0, r2\n" + " ldrh r2, [r1]\n" + " ldr r3, ._854 + 24\n" + " add r1, r0, r3\n" + " ldrb r3, [r1]\n" + " ldr r1, ._854 + 28\n" + " add r0, r0, r1\n" + " ldrb r0, [r0]\n" + " str r0, [sp]\n" + " mov r0, sl\n" + " mov r1, r9\n" + " bl Text_InitWindow\n" + " mov r0, sl\n" + " bl Text_PrintWindow8002F44\n" + " ldrb r4, [r7]\n" + " lsl r4, r4, #0x1\n" + " add r0, r5, #0\n" + " mov r1, #0x5\n" + " bl __udivsi3\n" + " add r5, r0, #0\n" + " lsl r5, r5, #0x18\n" + " lsr r5, r5, #0x15\n" + " add r4, r4, r5\n" + " ldr r6, ._854 + 32\n" + " ldrb r1, [r6]\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x4\n" + " add r4, r4, r0\n" + " ldr r2, ._854 + 36\n" + " add r4, r4, r2\n" + " mov r3, #0x0\n" + " ldsh r1, [r4, r3]\n" + " mov r0, r9\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r2, #0xd3\n" + " lsl r2, r2, #0x1\n" + " ldrb r3, [r6]\n" + " lsl r3, r3, #0x5\n" + " add r3, r3, #0x19\n" + " lsl r3, r3, #0x18\n" + " lsr r3, r3, #0x18\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " mov r0, sl\n" + " mov r1, r9\n" + " bl Text_InitWindow\n" + " mov r0, sl\n" + " bl Text_PrintWindow8002F44\n" + " mov r0, #0xff\n" + " mov r1, r9\n" + " strb r0, [r1]\n" + " ldrb r1, [r7]\n" + " lsl r1, r1, #0x1\n" + " add r1, r1, r5\n" + " ldrb r2, [r6]\n" + " lsl r0, r2, #0x1\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x4\n" + " add r1, r1, r0\n" + " ldr r2, ._854 + 36\n" + " add r1, r1, r2\n" + " mov r3, #0x0\n" + " ldsh r1, [r1, r3]\n" + " mov r0, #0xd\n" + " mul r1, r1, r0\n" + " ldr r0, ._854 + 40\n" + " add r1, r1, r0\n" + " mov r0, r9\n" + " bl StringAppend\n" + " ldrb r1, [r7]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x1\n" + " add r8, r8, r0\n" + " mov r1, r8\n" + " ldrh r2, [r1]\n" + " ldr r3, ._854 + 24\n" + " add r1, r0, r3\n" + " ldrb r3, [r1]\n" + " ldr r1, ._854 + 28\n" + " add r0, r0, r1\n" + " ldrb r0, [r0]\n" + " str r0, [sp]\n" + " mov r0, sl\n" + " mov r1, r9\n" + " bl Text_InitWindow\n" + " mov r0, sl\n" + " bl Text_PrintWindow8002F44\n" + "._853:\n" + " add sp, sp, #0x4\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._855:\n" + " .align 2, 0\n" + "._854:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004370\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_Debug_821F564\n" + " .word gUnknown_Debug_030043A8\n" + " .word gUnknown_Debug_821F566\n" + " .word gUnknown_Debug_821F568\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_Debug_2023B02\n" + " .word gMoveNames\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80123D8(u8 a) +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xfffffffc\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " cmp r5, #0x1d\n" + " bhi ._856 @cond_branch\n" + " mov r0, #0x0\n" + " mov r1, #0x12\n" + " bl debug_sub_8010A7C\n" + " ldr r4, ._858\n" + " ldr r0, ._858 + 4\n" + " mov r8, r0\n" + " ldr r6, ._858 + 8\n" + " ldrh r1, [r6]\n" + " mov sl, r1\n" + " ldrb r7, [r6, #0x2]\n" + " ldrb r2, [r6, #0x4]\n" + " mov r9, r2\n" + " str r2, [sp]\n" + " add r0, r4, #0\n" + " mov r1, r8\n" + " mov r2, sl\n" + " add r3, r7, #0\n" + " bl Text_InitWindow\n" + " add r0, r4, #0\n" + " bl Text_PrintWindow8002F44\n" + " lsl r5, r5, #0x1\n" + " ldr r1, ._858 + 12\n" + " ldrb r0, [r1]\n" + " mov r2, #0x46\n" + " mul r0, r0, r2\n" + " add r0, r5, r0\n" + " ldr r1, ._858 + 16\n" + " add r0, r0, r1\n" + " mov r2, #0x0\n" + " ldsh r1, [r0, r2]\n" + " lsl r0, r1, #0x3\n" + " sub r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._858 + 20\n" + " add r0, r0, r1\n" + " ldrb r0, [r0, #0x16]\n" + " mov r2, #0xd\n" + " add r1, r0, #0\n" + " mul r1, r1, r2\n" + " ldr r0, ._858 + 24\n" + " add r1, r1, r0\n" + " mov r0, r8\n" + " bl StringCopy\n" + " mov r1, r9\n" + " str r1, [sp]\n" + " add r0, r4, #0\n" + " mov r1, r8\n" + " mov r2, sl\n" + " add r3, r7, #0\n" + " bl Text_InitWindow\n" + " add r0, r4, #0\n" + " bl Text_PrintWindow8002F44\n" + " mov r0, #0x0\n" + " mov r1, #0x12\n" + " bl debug_sub_8010A7C\n" + " ldrh r2, [r6, #0x6]\n" + " mov r9, r2\n" + " ldrb r0, [r6, #0x8]\n" + " mov sl, r0\n" + " ldrb r6, [r6, #0xa]\n" + " str r6, [sp]\n" + " add r0, r4, #0\n" + " mov r1, r8\n" + " mov r3, sl\n" + " bl Text_InitWindow\n" + " add r0, r4, #0\n" + " bl Text_PrintWindow8002F44\n" + " ldr r1, ._858 + 12\n" + " ldrb r0, [r1]\n" + " mov r2, #0x46\n" + " mul r0, r0, r2\n" + " add r5, r5, r0\n" + " ldr r0, ._858 + 16\n" + " add r5, r5, r0\n" + " mov r2, #0x0\n" + " ldsh r1, [r5, r2]\n" + " lsl r0, r1, #0x3\n" + " sub r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._858 + 20\n" + " add r0, r0, r1\n" + " ldrb r0, [r0, #0x17]\n" + " mov r2, #0xd\n" + " add r1, r0, #0\n" + " mul r1, r1, r2\n" + " ldr r0, ._858 + 24\n" + " add r1, r1, r0\n" + " mov r0, r8\n" + " bl StringCopy\n" + " str r6, [sp]\n" + " add r0, r4, #0\n" + " mov r1, r8\n" + " mov r2, r9\n" + " mov r3, sl\n" + " bl Text_InitWindow\n" + " add r0, r4, #0\n" + " bl Text_PrintWindow8002F44\n" + " b ._857\n" + "._859:\n" + " .align 2, 0\n" + "._858:\n" + " .word gUnknown_Debug_03004370\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_Debug_821F58C\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_Debug_2023A76\n" + " .word gBaseStats\n" + " .word gAbilityNames\n" + "._856:\n" + " ldr r6, ._860\n" + " ldr r1, ._860 + 4\n" + " add r0, r6, #0\n" + " bl StringCopy\n" + " ldr r5, ._860 + 8\n" + " ldr r4, ._860 + 12\n" + " ldrh r2, [r4]\n" + " ldrb r3, [r4, #0x2]\n" + " ldrb r0, [r4, #0x4]\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r6, #0\n" + " bl Text_InitWindow\n" + " add r0, r5, #0\n" + " bl Text_PrintWindow8002F44\n" + " ldrh r2, [r4, #0x6]\n" + " ldrb r3, [r4, #0x8]\n" + " ldrb r0, [r4, #0xa]\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r6, #0\n" + " bl Text_InitWindow\n" + " add r0, r5, #0\n" + " bl Text_PrintWindow8002F44\n" + "._857:\n" + " add sp, sp, #0x4\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._861:\n" + " .align 2, 0\n" + "._860:\n" + " .word gBattleTextBuff1\n" + " .word gAbilityNames\n" + " .word gUnknown_Debug_03004370\n" + " .word gUnknown_Debug_821F58C\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012540() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add sp, sp, #0xfffffffc\n" + " ldr r5, ._862\n" + " ldr r0, ._862 + 4\n" + " add r0, r0, #0x44\n" + " mov r2, #0x0\n" + " ldsh r1, [r0, r2]\n" + " add r0, r5, #0\n" + " mov r2, #0x0\n" + " mov r3, #0x1\n" + " bl ConvertIntToDecimalStringN\n" + " ldr r4, ._862 + 8\n" + " ldr r1, ._862 + 12\n" + " mov r3, #0x9b\n" + " lsl r3, r3, #0x1\n" + " add r0, r1, r3\n" + " ldrh r2, [r0]\n" + " mov r6, #0x9c\n" + " lsl r6, r6, #0x1\n" + " add r0, r1, r6\n" + " ldrb r3, [r0]\n" + " add r6, r6, #0x2\n" + " add r0, r1, r6\n" + " ldrb r0, [r0]\n" + " str r0, [sp]\n" + " add r0, r4, #0\n" + " add r1, r5, #0\n" + " bl Text_InitWindow\n" + " add r0, r4, #0\n" + " bl Text_PrintWindow8002F44\n" + " add sp, sp, #0x4\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._863:\n" + " .align 2, 0\n" + "._862:\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_03004370\n" + " .word gUnknown_Debug_821F424\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_nullsub_3() +{ + asm( + " bx lr\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80125A0() +{ + asm( + " push {r4, lr}\n" + " ldr r4, ._864\n" + " ldr r3, ._864 + 4\n" + " ldr r2, ._864 + 8\n" + " ldr r0, ._864 + 12\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._864 + 16\n" + " ldrb r2, [r1]\n" + " mov r1, #0x8c\n" + " mul r1, r1, r2\n" + " add r0, r0, r1\n" + " add r0, r0, r3\n" + " ldr r0, [r0]\n" + " add r0, r0, r4\n" + " mov r1, #0x6d\n" + " strb r1, [r0]\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._865:\n" + " .align 2, 0\n" + "._864:\n" + " .word gSharedMem\n" + " .word gUnknown_Debug_821F680\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004360\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80125E4() +{ + asm( + " push {r4, lr}\n" + " ldr r4, ._866\n" + " ldr r3, ._866 + 4\n" + " ldr r2, ._866 + 8\n" + " ldr r0, ._866 + 12\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._866 + 16\n" + " ldrb r2, [r1]\n" + " mov r1, #0x8c\n" + " mul r1, r1, r2\n" + " add r0, r0, r1\n" + " add r0, r0, r3\n" + " ldr r0, [r0]\n" + " add r0, r0, r4\n" + " mov r1, #0x81\n" + " strb r1, [r0]\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._867:\n" + " .align 2, 0\n" + "._866:\n" + " .word gSharedMem\n" + " .word gUnknown_Debug_821F680\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004360\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012628() +{ + asm( + " ldr r3, ._868\n" + " ldr r2, ._868 + 4\n" + " ldr r0, ._868 + 8\n" + " ldrb r1, [r0]\n" + " lsl r1, r1, #0x2\n" + " ldr r0, ._868 + 12\n" + " ldrb r0, [r0]\n" + " lsl r0, r0, #0x4\n" + " add r1, r1, r0\n" + " add r1, r1, r2\n" + " ldr r0, [r1]\n" + " add r0, r0, r3\n" + " mov r1, #0x6d\n" + " strb r1, [r0]\n" + " bx lr\n" + "._869:\n" + " .align 2, 0\n" + "._868:\n" + " .word gSharedMem\n" + " .word gUnknown_Debug_821F798\n" + " .word gUnknown_Debug_030043A8\n" + " .word gUnknown_Debug_03004360\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012658() +{ + asm( + " ldr r3, ._870\n" + " ldr r2, ._870 + 4\n" + " ldr r0, ._870 + 8\n" + " ldrb r1, [r0]\n" + " lsl r1, r1, #0x2\n" + " ldr r0, ._870 + 12\n" + " ldrb r0, [r0]\n" + " lsl r0, r0, #0x4\n" + " add r1, r1, r0\n" + " add r1, r1, r2\n" + " ldr r0, [r1]\n" + " add r0, r0, r3\n" + " mov r1, #0x81\n" + " strb r1, [r0]\n" + " bx lr\n" + "._871:\n" + " .align 2, 0\n" + "._870:\n" + " .word gSharedMem\n" + " .word gUnknown_Debug_821F798\n" + " .word gUnknown_Debug_030043A8\n" + " .word gUnknown_Debug_03004360\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012688() +{ + asm( + " push {r4, r5, r6, lr}\n" + " mov r6, r8\n" + " push {r6}\n" + " add sp, sp, #0xfffffff4\n" + " mov r1, #0x0\n" + " mov r4, #0xcd\n" + " lsl r4, r4, #0x1\n" + " ldr r3, ._873\n" + " mov r2, #0x0\n" + "._872:\n" + " add r0, r1, r3\n" + " strb r2, [r0]\n" + " add r1, r1, #0x1\n" + " cmp r1, r4\n" + " ble ._872 @cond_branch\n" + " mov r0, #0x0\n" + " bl SetHBlankCallback\n" + " mov r0, #0x0\n" + " bl SetVBlankCallback\n" + " mov r5, #0x0\n" + " str r5, [sp, #0x8]\n" + " ldr r1, ._873 + 4\n" + " add r0, sp, #0x8\n" + " str r0, [r1]\n" + " mov r0, #0xc0\n" + " lsl r0, r0, #0x13\n" + " str r0, [r1, #0x4]\n" + " ldr r0, ._873 + 8\n" + " str r0, [r1, #0x8]\n" + " ldr r0, [r1, #0x8]\n" + " ldr r0, ._873 + 12\n" + " strh r5, [r0]\n" + " sub r0, r0, #0xc\n" + " strh r5, [r0]\n" + " add r0, r0, #0x4\n" + " strh r5, [r0]\n" + " sub r0, r0, #0x2\n" + " strh r5, [r0]\n" + " add r0, r0, #0x4\n" + " strh r5, [r0]\n" + " add r0, r0, #0x2\n" + " strh r5, [r0]\n" + " add r0, r0, #0x2\n" + " strh r5, [r0]\n" + " ldr r4, ._873 + 16\n" + " add r0, r4, #0\n" + " bl Text_LoadWindowTemplate\n" + " bl ResetPaletteFade\n" + " ldr r0, ._873 + 20\n" + " strh r5, [r0]\n" + " ldr r1, ._873 + 24\n" + " mov r0, #0xa0\n" + " strh r0, [r1]\n" + " ldr r0, ._873 + 28\n" + " strh r5, [r0]\n" + " ldr r0, ._873 + 32\n" + " strh r5, [r0]\n" + " ldr r0, ._873 + 36\n" + " strh r5, [r0]\n" + " ldr r0, ._873 + 40\n" + " strh r5, [r0]\n" + " ldr r0, ._873 + 44\n" + " strh r5, [r0]\n" + " ldr r0, ._873 + 48\n" + " strh r5, [r0]\n" + " ldr r1, ._873 + 52\n" + " mov r0, #0x9\n" + " strb r0, [r1]\n" + " bl sub_800D6D4\n" + " bl sub_800DAB8\n" + " bl ResetSpriteData\n" + " bl ResetTasks\n" + " bl FreeAllSpritePalettes\n" + " ldr r1, ._873 + 56\n" + " mov r0, #0x4\n" + " strb r0, [r1]\n" + " ldr r6, ._873 + 60\n" + " mov r0, #0x1\n" + " strh r0, [r6]\n" + " ldr r0, ._873 + 64\n" + " add r1, r4, #0\n" + " bl Text_InitWindowWithTemplate\n" + " ldrh r2, [r6]\n" + " lsl r0, r2, #0x3\n" + " ldr r1, ._873 + 68\n" + " add r0, r0, r1\n" + " ldr r1, ._873 + 72\n" + " mov r8, r1\n" + " lsl r2, r2, #0x2\n" + " add r2, r2, r8\n" + " ldrb r1, [r2]\n" + " ldrb r2, [r2, #0x1]\n" + " mov r3, #0x80\n" + " lsl r3, r3, #0x12\n" + " ldr r4, ._873 + 76\n" + " ldr r4, [r4, #0x4]\n" + " str r4, [sp]\n" + " ldrh r4, [r6]\n" + " str r4, [sp, #0x4]\n" + " bl DecompressPicFromTable_2\n" + " ldr r1, ._873 + 80\n" + " ldrh r0, [r6]\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov r1, #0x88\n" + " lsl r1, r1, #0x1\n" + " mov r2, #0x20\n" + " bl LoadCompressedPalette\n" + " ldrh r0, [r6]\n" + " mov r1, #0x1\n" + " bl GetMonSpriteTemplate_803C56C\n" + " ldr r0, ._873 + 84\n" + " ldrh r1, [r6]\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r8\n" + " ldrb r2, [r1, #0x1]\n" + " add r2, r2, #0x28\n" + " mov r1, #0xb0\n" + " mov r3, #0x28\n" + " bl CreateSprite\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " ldr r3, ._873 + 88\n" + " lsl r1, r4, #0x4\n" + " add r1, r1, r4\n" + " lsl r1, r1, #0x2\n" + " add r0, r3, #0\n" + " add r0, r0, #0x1c\n" + " add r0, r1, r0\n" + " ldr r2, ._873 + 92\n" + " str r2, [r0]\n" + " add r1, r1, r3\n" + " ldrb r2, [r1, #0x5]\n" + " mov r0, #0xf\n" + " and r0, r0, r2\n" + " mov r2, #0x10\n" + " orr r0, r0, r2\n" + " strb r0, [r1, #0x5]\n" + " mov r1, #0x80\n" + " lsl r1, r1, #0x13\n" + " mov r2, #0xfa\n" + " lsl r2, r2, #0x5\n" + " add r0, r2, #0\n" + " strh r0, [r1]\n" + " ldr r0, ._873 + 96\n" + " bl SetHBlankCallback\n" + " ldr r0, ._873 + 100\n" + " bl SetVBlankCallback\n" + " bl m4aMPlayAllStop\n" + " ldr r0, ._873 + 104\n" + " mov r1, #0x0\n" + " bl CreateTask\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r2, ._873 + 108\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x3\n" + " add r1, r1, r2\n" + " strh r5, [r1, #0x8]\n" + " strh r4, [r1, #0xa]\n" + " ldr r0, ._873 + 112\n" + " bl SetMainCallback2\n" + " add sp, sp, #0xc\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._874:\n" + " .align 2, 0\n" + "._873:\n" + " .word gUnknown_Debug_2023B62\n" + " .word 0x40000d4\n" + " .word 0x85006000\n" + " .word 0x400004c\n" + " .word gWindowTemplate_81E6C58\n" + " .word gBattle_BG0_X\n" + " .word gBattle_BG0_Y\n" + " .word gBattle_BG1_X\n" + " .word gBattle_BG1_Y\n" + " .word gBattle_BG2_X\n" + " .word gBattle_BG2_Y\n" + " .word gBattle_BG3_X\n" + " .word gBattle_BG3_Y\n" + " .word gBattleTerrain\n" + " .word gReservedSpritePaletteCount\n" + " .word gCurrentMove\n" + " .word gUnknown_03004210\n" + " .word gMonFrontPicTable\n" + " .word gMonFrontPicCoords\n" + " .word gUnknown_081FAF4C\n" + " .word gMonPaletteTable\n" + " .word gUnknown_02024E8C\n" + " .word gSprites\n" + " .word nullsub_37+1\n" + " .word debug_nullsub_45+1\n" + " .word debug_sub_8011DD4+1\n" + " .word debug_sub_8012D10+1\n" + " .word gTasks\n" + " .word debug_sub_8012878+1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012878() +{ + asm( + " push {lr}\n" + " bl AnimateSprites\n" + " bl BuildOamBuffer\n" + " ldr r0, ._876\n" + " bl Text_UpdateWindowInBattle\n" + " bl UpdatePaletteFade\n" + " bl RunTasks\n" + " ldr r0, ._876 + 4\n" + " ldrh r1, [r0, #0x2c]\n" + " mov r0, #0x82\n" + " lsl r0, r0, #0x1\n" + " cmp r1, r0\n" + " bne ._875 @cond_branch\n" + " ldr r0, ._876 + 8\n" + " bl SetMainCallback2\n" + "._875:\n" + " pop {r0}\n" + " bx r0\n" + "._877:\n" + " .align 2, 0\n" + "._876:\n" + " .word gUnknown_03004210\n" + " .word gMain\n" + " .word debug_sub_80108B8+1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80128B4() +{ + asm( + " push {r4, r5, r6, lr}\n" + " mov r6, r8\n" + " push {r6}\n" + " add sp, sp, #0xfffffffc\n" + " mov r0, #0x0\n" + " mov r1, #0x9\n" + " bl debug_sub_8010A7C\n" + " ldr r5, ._878\n" + " ldr r4, ._878 + 4\n" + " mov r0, #0x23\n" + " mov r8, r0\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r4, #0\n" + " mov r2, #0x90\n" + " mov r3, #0x2\n" + " bl Text_InitWindow\n" + " add r0, r5, #0\n" + " bl Text_PrintWindow8002F44\n" + " ldr r6, ._878 + 8\n" + " ldrh r1, [r6]\n" + " add r0, r4, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, #0x0\n" + " strb r0, [r4, #0x3]\n" + " mov r0, #0xff\n" + " strb r0, [r4, #0x4]\n" + " ldrh r1, [r6]\n" + " mov r0, #0xb\n" + " mul r1, r1, r0\n" + " ldr r0, ._878 + 12\n" + " add r1, r1, r0\n" + " add r0, r4, #0\n" + " bl StringAppend\n" + " mov r0, r8\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r4, #0\n" + " mov r2, #0x90\n" + " mov r3, #0x2\n" + " bl Text_InitWindow\n" + " add r0, r5, #0\n" + " bl Text_PrintWindow8002F44\n" + " add sp, sp, #0x4\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._879:\n" + " .align 2, 0\n" + "._878:\n" + " .word gUnknown_03004210\n" + " .word gBattleTextBuff1\n" + " .word gCurrentMove\n" + " .word gSpeciesNames\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012938() +{ + asm( + " push {r4, r5, r6, lr}\n" + " mov r6, sl\n" + " mov r5, r9\n" + " mov r4, r8\n" + " push {r4, r5, r6}\n" + " add sp, sp, #0xfffffffc\n" + " add r5, r0, #0\n" + " lsl r5, r5, #0x18\n" + " lsr r5, r5, #0x18\n" + " mov r0, #0x0\n" + " mov r1, #0x7\n" + " bl debug_sub_8010A7C\n" + " ldr r6, ._880\n" + " ldr r4, ._880 + 4\n" + " mov r0, #0x25\n" + " mov r8, r0\n" + " str r0, [sp]\n" + " add r0, r6, #0\n" + " add r1, r4, #0\n" + " mov r2, #0xa2\n" + " mov r3, #0x2\n" + " bl Text_InitWindow\n" + " add r0, r6, #0\n" + " bl Text_PrintWindow8002F44\n" + " ldr r1, ._880 + 8\n" + " add r0, r4, #0\n" + " bl StringCopy\n" + " add r0, r4, #4\n" + " ldr r1, ._880 + 12\n" + " mov sl, r1\n" + " ldr r2, ._880 + 16\n" + " mov r9, r2\n" + " ldrh r1, [r2]\n" + " sub r1, r1, #0x1\n" + " add r1, r1, sl\n" + " ldrb r1, [r1]\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, r8\n" + " str r0, [sp]\n" + " add r0, r6, #0\n" + " add r1, r4, #0\n" + " mov r2, #0xa2\n" + " mov r3, #0x2\n" + " bl Text_InitWindow\n" + " add r0, r6, #0\n" + " bl Text_PrintWindow8002F44\n" + " ldr r2, ._880 + 20\n" + " ldr r1, ._880 + 24\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0xa\n" + " ldsh r0, [r0, r1]\n" + " lsl r1, r0, #0x4\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r2\n" + " mov r2, r9\n" + " ldrh r0, [r2]\n" + " sub r0, r0, #0x1\n" + " add r0, r0, sl\n" + " ldrb r0, [r0]\n" + " neg r0, r0\n" + " strh r0, [r1, #0x26]\n" + " add sp, sp, #0x4\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._881:\n" + " .align 2, 0\n" + "._880:\n" + " .word gUnknown_03004210\n" + " .word gBattleTextBuff1\n" + " .word Str_821F7B8\n" + " .word gUnknown_Debug_2023B62\n" + " .word gCurrentMove\n" + " .word gSprites\n" + " .word gTasks\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80129F8() +{ + asm( + " push {r4, r5, r6, lr}\n" + " mov r6, r8\n" + " push {r6}\n" + " add sp, sp, #0xfffffff8\n" + " add r5, r0, #0\n" + " lsl r5, r5, #0x18\n" + " lsr r5, r5, #0x18\n" + " ldr r6, ._882\n" + " ldrh r2, [r6]\n" + " lsl r0, r2, #0x3\n" + " ldr r1, ._882 + 4\n" + " add r0, r0, r1\n" + " ldr r1, ._882 + 8\n" + " mov r8, r1\n" + " lsl r2, r2, #0x2\n" + " add r2, r2, r8\n" + " ldrb r1, [r2]\n" + " ldrb r2, [r2, #0x1]\n" + " mov r3, #0x80\n" + " lsl r3, r3, #0x12\n" + " ldr r4, ._882 + 12\n" + " ldr r4, [r4, #0x4]\n" + " str r4, [sp]\n" + " ldrh r4, [r6]\n" + " str r4, [sp, #0x4]\n" + " bl DecompressPicFromTable_2\n" + " ldr r1, ._882 + 16\n" + " ldrh r0, [r6]\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov r1, #0x88\n" + " lsl r1, r1, #0x1\n" + " mov r2, #0x20\n" + " bl LoadCompressedPalette\n" + " ldr r4, ._882 + 20\n" + " ldr r0, ._882 + 24\n" + " lsl r2, r5, #0x2\n" + " add r2, r2, r5\n" + " lsl r2, r2, #0x3\n" + " add r2, r2, r0\n" + " mov r1, #0xa\n" + " ldsh r0, [r2, r1]\n" + " lsl r1, r0, #0x4\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r4\n" + " ldrh r0, [r6]\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r8\n" + " ldrb r0, [r0, #0x1]\n" + " add r0, r0, #0x28\n" + " strh r0, [r1, #0x22]\n" + " mov r1, #0xa\n" + " ldsh r0, [r2, r1]\n" + " lsl r1, r0, #0x4\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r4\n" + " ldr r3, ._882 + 28\n" + " ldrh r0, [r6]\n" + " sub r0, r0, #0x1\n" + " add r0, r0, r3\n" + " ldrb r0, [r0]\n" + " neg r0, r0\n" + " strh r0, [r1, #0x26]\n" + " mov r0, #0xa\n" + " ldsh r1, [r2, r0]\n" + " lsl r0, r1, #0x4\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r4\n" + " mov r1, #0x0\n" + " bl StartSpriteAnim\n" + " add sp, sp, #0x8\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._883:\n" + " .align 2, 0\n" + "._882:\n" + " .word gCurrentMove\n" + " .word gMonFrontPicTable\n" + " .word gMonFrontPicCoords\n" + " .word gUnknown_081FAF4C\n" + " .word gMonPaletteTable\n" + " .word gSprites\n" + " .word gTasks\n" + " .word gUnknown_Debug_2023B62\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012AC0() +{ + asm( + " push {r4, r5, r6, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " lsl r1, r1, #0x18\n" + " lsr r6, r1, #0x18\n" + " ldr r3, ._885\n" + " ldr r4, ._885 + 4\n" + " b ._884\n" + "._886:\n" + " .align 2, 0\n" + "._885:\n" + " .word gCurrentMove\n" + " .word gBaseStats\n" + "._890:\n" + " ldrb r0, [r1, #0x7]\n" + " cmp r0, #0x2\n" + " beq ._887 @cond_branch\n" + "._884:\n" + " add r2, r3, #0\n" + " lsl r0, r5, #0x18\n" + " asr r0, r0, #0x18\n" + " ldrh r1, [r2]\n" + " add r0, r0, r1\n" + " strh r0, [r2]\n" + " lsl r0, r0, #0x10\n" + " cmp r0, #0\n" + " bne ._888 @cond_branch\n" + " ldr r1, ._891\n" + " add r0, r1, #0\n" + " strh r0, [r2]\n" + "._888:\n" + " ldrh r1, [r2]\n" + " ldr r0, ._891\n" + " cmp r1, r0\n" + " bne ._889 @cond_branch\n" + " mov r0, #0x1\n" + " strh r0, [r2]\n" + "._889:\n" + " ldrh r0, [r3]\n" + " lsl r1, r0, #0x3\n" + " sub r1, r1, r0\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r4\n" + " ldrb r0, [r1, #0x6]\n" + " cmp r0, #0x2\n" + " bne ._890 @cond_branch\n" + "._887:\n" + " bl debug_sub_80128B4\n" + " add r0, r6, #0\n" + " bl debug_sub_8012938\n" + " add r0, r6, #0\n" + " bl debug_sub_80129F8\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._892:\n" + " .align 2, 0\n" + "._891:\n" + " .word 0x19b\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012B2C() +{ + asm( + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x11\n" + " ldr r1, ._893\n" + " add r2, r0, r1\n" + " mov r1, #0x1\n" + " strh r1, [r2]\n" + " ldr r1, ._893 + 4\n" + " add r0, r0, r1\n" + " mov r1, #0x2\n" + " strh r1, [r0]\n" + " bx lr\n" + "._894:\n" + " .align 2, 0\n" + "._893:\n" + " .word 0x600c772\n" + " .word 0x600c7b2\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012B4C() +{ + asm( + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x11\n" + " ldr r2, ._895\n" + " add r1, r0, r2\n" + " ldr r3, ._895 + 4\n" + " add r2, r3, #0\n" + " strh r2, [r1]\n" + " ldr r1, ._895 + 8\n" + " add r0, r0, r1\n" + " strh r2, [r0]\n" + " bx lr\n" + "._896:\n" + " .align 2, 0\n" + "._895:\n" + " .word 0x600c772\n" + " .word 0x1016\n" + " .word 0x600c7b2\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012B70() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add sp, sp, #0xfffffffc\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " lsl r1, r1, #0x18\n" + " lsr r6, r1, #0x18\n" + " cmp r6, #0\n" + " beq ._897 @cond_branch\n" + " mov r4, #0x1\n" + " str r4, [sp]\n" + " mov r0, #0x18\n" + " mov r1, #0x1c\n" + " mov r2, #0x1d\n" + " mov r3, #0x21\n" + " bl sub_802BBD4\n" + " bl debug_sub_80128B4\n" + " add r0, r5, #0\n" + " bl debug_sub_8012938\n" + " add r0, r5, #0\n" + " bl debug_sub_80129F8\n" + " ldr r1, ._899\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " strh r4, [r0, #0x8]\n" + " b ._898\n" + "._900:\n" + " .align 2, 0\n" + "._899:\n" + " .word gTasks\n" + "._897:\n" + " str r6, [sp]\n" + " mov r0, #0x18\n" + " mov r1, #0x1c\n" + " mov r2, #0x1d\n" + " mov r3, #0x21\n" + " bl sub_802BBD4\n" + " ldr r0, ._901\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " mov r0, #0x2\n" + " strh r0, [r4, #0x8]\n" + " ldr r5, ._901 + 4\n" + " ldr r1, ._901 + 8\n" + " mov r2, #0xa4\n" + " lsl r2, r2, #0x2\n" + " mov r0, #0x1d\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " mov r3, #0x1a\n" + " bl Text_InitWindow\n" + " add r0, r5, #0\n" + " bl Text_PrintWindow8002F44\n" + " strh r6, [r4, #0xe]\n" + " mov r0, #0x0\n" + " bl debug_sub_8012B2C\n" + "._898:\n" + " add sp, sp, #0x4\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._902:\n" + " .align 2, 0\n" + "._901:\n" + " .word gTasks\n" + " .word gUnknown_03004210\n" + " .word Str_821F7DA\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012C08() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r8\n" + " push {r7}\n" + " add sp, sp, #0xfffffffc\n" + " add r4, r1, #0\n" + " lsl r0, r0, #0x18\n" + " lsr r6, r0, #0x18\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " mov r0, #0x0\n" + " mov r1, #0x9\n" + " bl debug_sub_8010A7C\n" + " ldr r7, ._905\n" + " ldr r5, ._905 + 4\n" + " mov r0, #0x23\n" + " mov r8, r0\n" + " str r0, [sp]\n" + " add r0, r7, #0\n" + " add r1, r5, #0\n" + " mov r2, #0x90\n" + " mov r3, #0x2\n" + " bl Text_InitWindow\n" + " add r0, r7, #0\n" + " bl Text_PrintWindow8002F44\n" + " mov r0, #0x0\n" + " mov r1, #0x7\n" + " bl debug_sub_8010A7C\n" + " mov r0, #0x25\n" + " str r0, [sp]\n" + " add r0, r7, #0\n" + " add r1, r5, #0\n" + " mov r2, #0xa2\n" + " mov r3, #0x2\n" + " bl Text_InitWindow\n" + " add r0, r7, #0\n" + " bl Text_PrintWindow8002F44\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " mov r0, #0x18\n" + " mov r1, #0x1c\n" + " mov r2, #0x1d\n" + " mov r3, #0x21\n" + " bl sub_802BBD4\n" + " cmp r4, #0\n" + " beq ._903 @cond_branch\n" + " ldr r1, ._905 + 8\n" + " lsl r4, r6, #0x2\n" + " add r0, r4, r6\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0x4\n" + " strh r1, [r0, #0x8]\n" + " ldr r1, ._905 + 12\n" + " mov r0, r8\n" + " str r0, [sp]\n" + " add r0, r7, #0\n" + " mov r2, #0x90\n" + " mov r3, #0x2\n" + " bl Text_InitWindow\n" + " b ._904\n" + "._906:\n" + " .align 2, 0\n" + "._905:\n" + " .word gUnknown_03004210\n" + " .word gBattleTextBuff1\n" + " .word gTasks\n" + " .word gUnknown_Debug_821F7F3\n" + "._903:\n" + " ldr r1, ._907\n" + " lsl r4, r6, #0x2\n" + " add r0, r4, r6\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0x3\n" + " strh r1, [r0, #0x8]\n" + " ldr r1, ._907 + 4\n" + " mov r0, r8\n" + " str r0, [sp]\n" + " add r0, r7, #0\n" + " mov r2, #0x90\n" + " mov r3, #0x2\n" + " bl Text_InitWindow\n" + "._904:\n" + " add r5, r4, #0\n" + " ldr r4, ._907 + 8\n" + " add r0, r4, #0\n" + " bl Text_PrintWindow8002F44\n" + " ldr r1, ._907 + 12\n" + " mov r2, #0xa4\n" + " lsl r2, r2, #0x2\n" + " mov r0, #0x1d\n" + " str r0, [sp]\n" + " add r0, r4, #0\n" + " mov r3, #0x1a\n" + " bl Text_InitWindow\n" + " add r0, r4, #0\n" + " bl Text_PrintWindow8002F44\n" + " ldr r1, ._907\n" + " add r0, r5, r6\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0x1\n" + " strh r1, [r0, #0xe]\n" + " mov r0, #0x1\n" + " bl debug_sub_8012B2C\n" + " add sp, sp, #0x4\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._908:\n" + " .align 2, 0\n" + "._907:\n" + " .word gTasks\n" + " .word Str_821F7EA\n" + " .word gUnknown_03004210\n" + " .word BattleText_YesNo\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012D10() +{ + asm( + " push {r4, r5, lr}\n" + " add sp, sp, #0xfffffffc\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " ldr r1, ._911\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0x8\n" + " ldsh r0, [r0, r1]\n" + " cmp r0, #0x4\n" + " bls ._909 @cond_branch\n" + " b ._1067\n" + "._909:\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._911 + 4\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._912:\n" + " .align 2, 0\n" + "._911:\n" + " .word gTasks\n" + " .word ._913\n" + "._913:\n" + " .word ._914\n" + " .word ._915\n" + " .word ._916\n" + " .word ._917\n" + " .word ._918\n" + "._914:\n" + " bl debug_sub_80128B4\n" + " add r0, r5, #0\n" + " bl debug_sub_8012938\n" + " ldr r4, ._920\n" + " ldr r1, ._920 + 4\n" + " mov r2, #0xc8\n" + " lsl r2, r2, #0x1\n" + " mov r0, #0x23\n" + " str r0, [sp]\n" + " add r0, r4, #0\n" + " mov r3, #0x13\n" + " bl Text_InitWindow\n" + " add r0, r4, #0\n" + " bl Text_PrintWindow8002F44\n" + " ldr r1, ._920 + 8\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " ldrh r1, [r0, #0x8]\n" + " add r1, r1, #0x1\n" + " strh r1, [r0, #0x8]\n" + " ldrb r0, [r0, #0xc]\n" + " b ._919\n" + "._921:\n" + " .align 2, 0\n" + "._920:\n" + " .word gUnknown_03004210\n" + " .word Str_821F7BD\n" + " .word gTasks\n" + "._915:\n" + " ldr r2, ._924\n" + " ldrh r1, [r2, #0x2e]\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._922 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._924 + 4\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xc]\n" + " bl nullsub_8\n" + " ldrh r1, [r4, #0xc]\n" + " mov r0, #0x3\n" + " neg r0, r0\n" + " and r0, r0, r1\n" + " b ._931\n" + "._925:\n" + " .align 2, 0\n" + "._924:\n" + " .word gMain\n" + " .word gTasks\n" + "._922:\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._926 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._928\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xc]\n" + " bl nullsub_8\n" + " ldrh r1, [r4, #0xc]\n" + " mov r0, #0x2\n" + " b ._927\n" + "._929:\n" + " .align 2, 0\n" + "._928:\n" + " .word gTasks\n" + "._926:\n" + " mov r0, #0x20\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._930 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._932\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xc]\n" + " bl nullsub_8\n" + " ldrh r1, [r4, #0xc]\n" + " mov r0, #0x2\n" + " neg r0, r0\n" + " and r0, r0, r1\n" + " b ._931\n" + "._933:\n" + " .align 2, 0\n" + "._932:\n" + " .word gTasks\n" + "._930:\n" + " mov r0, #0x10\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._934 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._936\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xc]\n" + " bl nullsub_8\n" + " ldrh r1, [r4, #0xc]\n" + " mov r0, #0x1\n" + "._927:\n" + " orr r0, r0, r1\n" + "._931:\n" + " strh r0, [r4, #0xc]\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + "._919:\n" + " mov r1, #0x0\n" + " bl sub_802E3E4\n" + " b ._1067\n" + "._937:\n" + " .align 2, 0\n" + "._936:\n" + " .word gTasks\n" + "._934:\n" + " ldrh r1, [r2, #0x30]\n" + " mov r4, #0x1\n" + " add r0, r4, #0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._938 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r1, ._943\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r2, #0xc\n" + " ldsh r0, [r0, r2]\n" + " cmp r0, #0x1\n" + " beq ._939 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._940 @cond_branch\n" + " cmp r0, #0\n" + " beq ._941 @cond_branch\n" + " b ._1067\n" + "._944:\n" + " .align 2, 0\n" + "._943:\n" + " .word gTasks\n" + "._940:\n" + " cmp r0, #0x2\n" + " beq ._945 @cond_branch\n" + "._990:\n" + " cmp r0, #0x3\n" + " bne ._946 @cond_branch\n" + " b ._1014\n" + "._946:\n" + " b ._1067\n" + "._941:\n" + " ldr r1, ._952\n" + " ldr r0, ._952 + 4\n" + " ldrh r0, [r0]\n" + " sub r0, r0, #0x1\n" + " add r1, r0, r1\n" + " ldrb r0, [r1]\n" + " cmp r0, #0x3f\n" + " bls ._949 @cond_branch\n" + " b ._1067\n" + "._949:\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " b ._1019\n" + "._953:\n" + " .align 2, 0\n" + "._952:\n" + " .word gUnknown_Debug_2023B62\n" + " .word gCurrentMove\n" + "._939:\n" + " mov r0, #0x1\n" + " b ._997\n" + "._945:\n" + " ldr r1, ._957\n" + " ldrh r2, [r1]\n" + " mov r0, #0xcd\n" + " lsl r0, r0, #0x1\n" + " cmp r2, r0\n" + " bhi ._955 @cond_branch\n" + " add r0, r2, #1\n" + "._979:\n" + " strh r0, [r1]\n" + " b ._1025\n" + "._958:\n" + " .align 2, 0\n" + "._957:\n" + " .word gCurrentMove\n" + "._955:\n" + " strh r4, [r1]\n" + " b ._1025\n" + "._938:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._960 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r1, ._966\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0xc\n" + " ldsh r0, [r0, r1]\n" + " cmp r0, #0x1\n" + " bne ._961 @cond_branch\n" + " b ._1007\n" + "._961:\n" + " cmp r0, #0x1\n" + " bgt ._963 @cond_branch\n" + " cmp r0, #0\n" + " beq ._964 @cond_branch\n" + " b ._1067\n" + "._967:\n" + " .align 2, 0\n" + "._966:\n" + " .word gTasks\n" + "._963:\n" + " cmp r0, #0x2\n" + " beq ._968 @cond_branch\n" + " b ._990\n" + "._964:\n" + " ldr r1, ._973\n" + " ldr r0, ._973 + 4\n" + " ldrh r0, [r0]\n" + " sub r0, r0, #0x1\n" + " add r1, r0, r1\n" + " ldrb r0, [r1]\n" + " cmp r0, #0\n" + " bne ._970 @cond_branch\n" + " b ._1067\n" + "._970:\n" + " sub r0, r0, #0x1\n" + " strb r0, [r1]\n" + " b ._1019\n" + "._974:\n" + " .align 2, 0\n" + "._973:\n" + " .word gUnknown_Debug_2023B62\n" + " .word gCurrentMove\n" + "._968:\n" + " ldr r1, ._977\n" + " ldrh r0, [r1]\n" + " cmp r0, #0x1\n" + " bls ._975 @cond_branch\n" + " sub r0, r0, #0x1\n" + " b ._979\n" + "._978:\n" + " .align 2, 0\n" + "._977:\n" + " .word gCurrentMove\n" + "._975:\n" + " ldr r2, ._980\n" + " add r0, r2, #0\n" + " b ._979\n" + "._981:\n" + " .align 2, 0\n" + "._980:\n" + " .word 0x19b\n" + "._960:\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._982 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r1, ._987\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0xc\n" + " ldsh r0, [r0, r1]\n" + " cmp r0, #0x1\n" + " beq ._983 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._984 @cond_branch\n" + " cmp r0, #0\n" + " beq ._985 @cond_branch\n" + " b ._1067\n" + "._988:\n" + " .align 2, 0\n" + "._987:\n" + " .word gTasks\n" + "._984:\n" + " cmp r0, #0x2\n" + " beq ._989 @cond_branch\n" + " b ._990\n" + "._985:\n" + " ldr r3, ._995\n" + " ldr r2, ._995 + 4\n" + " ldrh r0, [r2]\n" + " sub r0, r0, #0x1\n" + " add r1, r0, r3\n" + " ldrb r0, [r1]\n" + " cmp r0, #0x3f\n" + " bls ._991 @cond_branch\n" + " b ._1067\n" + "._991:\n" + " add r0, r0, #0x8\n" + " strb r0, [r1]\n" + " ldrh r0, [r2]\n" + " sub r0, r0, #0x1\n" + " add r1, r0, r3\n" + " ldrb r0, [r1]\n" + " cmp r0, #0x40\n" + " bls ._1019 @cond_branch\n" + " mov r0, #0x40\n" + " strb r0, [r1]\n" + " b ._1019\n" + "._996:\n" + " .align 2, 0\n" + "._995:\n" + " .word gUnknown_Debug_2023B62\n" + " .word gCurrentMove\n" + "._983:\n" + " mov r0, #0x1\n" + " b ._997\n" + "._989:\n" + " ldr r3, ._1000\n" + " ldrh r2, [r3]\n" + " add r1, r2, #0\n" + " add r1, r1, #0xa\n" + " ldr r0, ._1000 + 4\n" + " cmp r1, r0\n" + " bgt ._998 @cond_branch\n" + " strh r1, [r3]\n" + " b ._1025\n" + "._1001:\n" + " .align 2, 0\n" + "._1000:\n" + " .word gCurrentMove\n" + " .word 0x19b\n" + "._998:\n" + " ldr r1, ._1003\n" + " add r0, r2, r1\n" + " strh r0, [r3]\n" + " b ._1025\n" + "._1004:\n" + " .align 2, 0\n" + "._1003:\n" + " .word 0xfffffe70\n" + "._982:\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._1005 @cond_branch\n" + " b ._1067\n" + "._1005:\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r1, ._1011\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r2, #0xc\n" + " ldsh r3, [r0, r2]\n" + " cmp r3, #0x1\n" + " beq ._1007 @cond_branch\n" + " cmp r3, #0x1\n" + " bgt ._1008 @cond_branch\n" + " cmp r3, #0\n" + " beq ._1009 @cond_branch\n" + " b ._1067\n" + "._1012:\n" + " .align 2, 0\n" + "._1011:\n" + " .word gTasks\n" + "._1008:\n" + " cmp r3, #0x2\n" + " beq ._1013 @cond_branch\n" + " cmp r3, #0x3\n" + " beq ._1014 @cond_branch\n" + " b ._1067\n" + "._1009:\n" + " ldr r1, ._1020\n" + " ldr r0, ._1020 + 4\n" + " ldrh r0, [r0]\n" + " sub r0, r0, #0x1\n" + " add r2, r0, r1\n" + " ldrb r0, [r2]\n" + " add r1, r0, #0\n" + " cmp r1, #0\n" + " bne ._1016 @cond_branch\n" + " b ._1067\n" + "._1016:\n" + " cmp r1, #0x8\n" + " bls ._1018 @cond_branch\n" + " sub r0, r0, #0x8\n" + " strb r0, [r2]\n" + " b ._1019\n" + "._1021:\n" + " .align 2, 0\n" + "._1020:\n" + " .word gUnknown_Debug_2023B62\n" + " .word gCurrentMove\n" + "._1018:\n" + " strb r3, [r2]\n" + "._1019:\n" + " add r0, r5, #0\n" + " bl debug_sub_8012938\n" + " b ._1067\n" + "._1007:\n" + " mov r0, #0x1\n" + " neg r0, r0\n" + "._997:\n" + " add r1, r5, #0\n" + " bl debug_sub_8012AC0\n" + " b ._1067\n" + "._1013:\n" + " ldr r2, ._1026\n" + " ldrh r0, [r2]\n" + " add r1, r0, #0\n" + " sub r1, r1, #0xa\n" + " cmp r1, #0x1\n" + " ble ._1024 @cond_branch\n" + " strh r1, [r2]\n" + " b ._1025\n" + "._1027:\n" + " .align 2, 0\n" + "._1026:\n" + " .word gCurrentMove\n" + "._1024:\n" + " mov r1, #0xc8\n" + " lsl r1, r1, #0x1\n" + " add r0, r0, r1\n" + " strh r0, [r2]\n" + "._1025:\n" + " bl debug_sub_80128B4\n" + " add r0, r5, #0\n" + " bl debug_sub_8012938\n" + " add r0, r5, #0\n" + " bl debug_sub_80129F8\n" + " b ._1067\n" + "._1014:\n" + " add r0, r5, #0\n" + " mov r1, #0x0\n" + " bl debug_sub_8012B70\n" + " b ._1067\n" + "._916:\n" + " ldr r0, ._1032\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1030 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1032 + 4\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xe]\n" + " bl debug_sub_8012B4C\n" + " mov r0, #0x0\n" + " b ._1055\n" + "._1033:\n" + " .align 2, 0\n" + "._1032:\n" + " .word gMain\n" + " .word gTasks\n" + "._1030:\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._1046 @cond_branch\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1035 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1037\n" + " lsl r1, r5, #0x2\n" + " add r1, r1, r5\n" + " lsl r1, r1, #0x3\n" + " add r1, r1, r0\n" + " ldrb r1, [r1, #0xe]\n" + " add r0, r5, #0\n" + " bl debug_sub_8012C08\n" + " b ._1067\n" + "._1038:\n" + " .align 2, 0\n" + "._1037:\n" + " .word gTasks\n" + "._1035:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._1039 @cond_branch\n" + " b ._1067\n" + "._1039:\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " b ._1063\n" + "._917:\n" + " ldr r0, ._1044\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1042 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1044 + 4\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xe]\n" + " bl debug_sub_8012B4C\n" + " mov r0, #0x0\n" + " b ._1055\n" + "._1045:\n" + " .align 2, 0\n" + "._1044:\n" + " .word gMain\n" + " .word gTasks\n" + "._1042:\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._1046 @cond_branch\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1047 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1050\n" + " lsl r1, r5, #0x2\n" + " add r1, r1, r5\n" + " lsl r1, r1, #0x3\n" + " add r1, r1, r0\n" + " mov r2, #0xe\n" + " ldsh r0, [r1, r2]\n" + " cmp r0, #0\n" + " bne ._1063 @cond_branch\n" + " ldr r1, ._1050 + 4\n" + " ldr r2, ._1050 + 8\n" + " mov r0, #0x1f\n" + " bl debug_sub_80132C8\n" + " b ._1063\n" + "._1051:\n" + " .align 2, 0\n" + "._1050:\n" + " .word gTasks\n" + " .word gUnknown_Debug_2023B62\n" + " .word 0x19b\n" + "._1047:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1067 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " b ._1063\n" + "._918:\n" + " ldr r0, ._1056\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1054 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1056 + 4\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xe]\n" + " bl debug_sub_8012B4C\n" + " mov r0, #0x0\n" + " b ._1055\n" + "._1057:\n" + " .align 2, 0\n" + "._1056:\n" + " .word gMain\n" + " .word gTasks\n" + "._1054:\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1058 @cond_branch\n" + "._1046:\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1060\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xe]\n" + " bl debug_sub_8012B4C\n" + " mov r0, #0x1\n" + "._1055:\n" + " strh r0, [r4, #0xe]\n" + " bl debug_sub_8012B2C\n" + " b ._1067\n" + "._1061:\n" + " .align 2, 0\n" + "._1060:\n" + " .word gTasks\n" + "._1058:\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1062 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1065\n" + " lsl r1, r5, #0x2\n" + " add r1, r1, r5\n" + " lsl r1, r1, #0x3\n" + " add r1, r1, r0\n" + " mov r2, #0xe\n" + " ldsh r0, [r1, r2]\n" + " cmp r0, #0\n" + " bne ._1063 @cond_branch\n" + " ldr r1, ._1065 + 4\n" + " ldr r2, ._1065 + 8\n" + " mov r0, #0x1f\n" + " bl debug_sub_8013294\n" + "._1063:\n" + " add r0, r5, #0\n" + " mov r1, #0x1\n" + " bl debug_sub_8012B70\n" + " b ._1067\n" + "._1066:\n" + " .align 2, 0\n" + "._1065:\n" + " .word gTasks\n" + " .word gUnknown_Debug_2023B62\n" + " .word 0x19b\n" + "._1062:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1067 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " add r0, r5, #0\n" + " mov r1, #0x1\n" + " bl debug_sub_8012B70\n" + "._1067:\n" + " add sp, sp, #0x4\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +u8 debug_sub_8013240(void) +{ + if (IdentifyFlash() == 0) + return 0; + else + return 1; +} + +u32 debug_sub_8013258(u16 sectorNum, u8 *data, u32 size) +{ + while (1) + { + if (ProgramFlashSectorAndVerify(sectorNum, data) != 0) + return 0; + if (size <= 0x1000) + break; + size -= 0x1000; + data += 0x1000; + sectorNum++; + } + return 1; +} + +u32 debug_sub_8013294(u8 sectorNum, void *data, u32 size) +{ + u32 result; + + if (debug_sub_8013240() != 0) + return 0; + m4aSoundVSyncOff(); + result = debug_sub_8013258(sectorNum, data, size); + m4aSoundVSyncOn(); + return result; +} + +void debug_sub_80132C8(u8 a, void *b, u32 c) +{ + if (debug_sub_8013240() == 0) + ReadFlash(a, 0, b, c); +} +#endif + void oac_poke_opponent(struct Sprite *sprite) { sprite->callback = sub_8010278; @@ -1554,6 +6804,642 @@ void sub_8010800(void) gBattleMainFunc = bc_8012FAC; } +#if DEBUG +__attribute__((naked)) +void debug_sub_80138CC() +{ + asm( + " push {lr}\n" + " ldr r0, ._1167\n" + " ldrb r0, [r0]\n" + " bl GetBankSide\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " beq ._1163 @cond_branch\n" + " b ._1186\n" + "._1163:\n" + " ldr r1, ._1167 + 4\n" + " ldr r2, ._1167 + 8\n" + " add r0, r1, r2\n" + " ldrb r0, [r0]\n" + " add r2, r1, #0\n" + " cmp r0, #0x4\n" + " bls ._1165 @cond_branch\n" + " b ._1186\n" + "._1165:\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._1167 + 12\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._1168:\n" + " .align 2, 0\n" + "._1167:\n" + " .word gActiveBank\n" + " .word gSharedMem\n" + " .word 0x160fd\n" + " .word ._1169\n" + "._1169:\n" + " .word ._1170\n" + " .word ._1171\n" + " .word ._1172\n" + " .word ._1173\n" + " .word ._1174\n" + "._1170:\n" + " ldr r1, ._1177\n" + " ldr r0, ._1177 + 4\n" + " ldrb r0, [r0]\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r1\n" + " ldr r1, [r0]\n" + " ldr r0, ._1177 + 8\n" + " cmp r1, r0\n" + " bne ._1186 @cond_branch\n" + " ldr r0, ._1177 + 12\n" + " add r1, r2, r0\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " b ._1187\n" + "._1178:\n" + " .align 2, 0\n" + "._1177:\n" + " .word gBattleBankFunc\n" + " .word gActiveBank\n" + " .word sub_802C098+1\n" + " .word 0x160fd\n" + "._1171:\n" + " ldr r1, ._1180\n" + " mov r0, #0x1\n" + " strh r0, [r1, #0x2c]\n" + " strh r0, [r1, #0x2e]\n" + " ldr r0, ._1180 + 4\n" + " add r1, r2, r0\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " ldr r0, ._1180 + 8\n" + " add r1, r2, r0\n" + " mov r0, #0x80\n" + " b ._1187\n" + "._1181:\n" + " .align 2, 0\n" + "._1180:\n" + " .word gMain\n" + " .word 0x160fd\n" + " .word 0x160fe\n" + "._1172:\n" + " ldr r0, ._1184\n" + " add r3, r2, r0\n" + " ldrb r0, [r3]\n" + " sub r0, r0, #0x1\n" + " strb r0, [r3]\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._1186 @cond_branch\n" + " ldr r1, ._1184 + 4\n" + " mov r0, #0x1\n" + " strh r0, [r1, #0x2c]\n" + " strh r0, [r1, #0x2e]\n" + " ldr r0, ._1184 + 8\n" + " add r1, r2, r0\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " mov r0, #0x80\n" + " strb r0, [r3]\n" + " b ._1186\n" + "._1185:\n" + " .align 2, 0\n" + "._1184:\n" + " .word 0x160fe\n" + " .word gMain\n" + " .word 0x160fd\n" + "._1173:\n" + " ldr r0, ._1188\n" + " add r1, r2, r0\n" + " ldrb r0, [r1]\n" + " sub r0, r0, #0x1\n" + " strb r0, [r1]\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._1186 @cond_branch\n" + " ldr r1, ._1188 + 4\n" + " mov r0, #0x1\n" + " strh r0, [r1, #0x2c]\n" + " strh r0, [r1, #0x2e]\n" + " ldr r0, ._1188 + 8\n" + " add r1, r2, r0\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " b ._1187\n" + "._1189:\n" + " .align 2, 0\n" + "._1188:\n" + " .word 0x160fe\n" + " .word gMain\n" + " .word 0x160fd\n" + "._1174:\n" + " ldr r0, ._1190\n" + " add r1, r2, r0\n" + " mov r0, #0x0\n" + "._1187:\n" + " strb r0, [r1]\n" + "._1186:\n" + " pop {r0}\n" + " bx r0\n" + "._1191:\n" + " .align 2, 0\n" + "._1190:\n" + " .word 0x160fd\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80139E4() +{ + asm( + " push {r4, r5, lr}\n" + " ldr r0, ._1198\n" + " ldrb r1, [r0]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " cmp r4, #0\n" + " beq ._1192 @cond_branch\n" + " ldr r2, ._1198 + 4\n" + " mov r0, #0x0\n" + " strb r0, [r2]\n" + " ldr r1, ._1198 + 8\n" + " ldrb r0, [r1]\n" + " cmp r0, #0\n" + " beq ._1193 @cond_branch\n" + " add r4, r2, #0\n" + " add r5, r1, #0\n" + "._1194:\n" + " bl debug_sub_80138CC\n" + " ldrb r0, [r4]\n" + " add r0, r0, #0x1\n" + " strb r0, [r4]\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldrb r1, [r5]\n" + " cmp r0, r1\n" + " bcc ._1194 @cond_branch\n" + "._1193:\n" + " ldr r0, ._1198 + 12\n" + " ldr r0, [r0]\n" + " bl _call_via_r0\n" + " ldr r1, ._1198 + 4\n" + " mov r0, #0x0\n" + " strb r0, [r1]\n" + " ldr r0, ._1198 + 8\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " beq ._1200 @cond_branch\n" + " ldr r5, ._1198 + 16\n" + " add r4, r1, #0\n" + "._1196:\n" + " ldrb r0, [r4]\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r5\n" + " ldr r0, [r0]\n" + " bl _call_via_r0\n" + " ldrb r0, [r4]\n" + " add r0, r0, #0x1\n" + " strb r0, [r4]\n" + " ldr r1, ._1198 + 8\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldrb r1, [r1]\n" + " cmp r0, r1\n" + " bcc ._1196 @cond_branch\n" + " b ._1200\n" + "._1199:\n" + " .align 2, 0\n" + "._1198:\n" + " .word gUnknown_02023A14_50\n" + " .word gActiveBank\n" + " .word gNoOfAllBanks\n" + " .word gBattleMainFunc\n" + " .word gBattleBankFunc\n" + "._1192:\n" + " ldr r0, ._1202\n" + " ldr r0, [r0]\n" + " bl _call_via_r0\n" + " ldr r1, ._1202 + 4\n" + " strb r4, [r1]\n" + " ldr r0, ._1202 + 8\n" + " ldrb r0, [r0]\n" + " cmp r4, r0\n" + " bcs ._1200 @cond_branch\n" + " ldr r5, ._1202 + 12\n" + " add r4, r1, #0\n" + "._1201:\n" + " ldrb r0, [r4]\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r5\n" + " ldr r0, [r0]\n" + " bl _call_via_r0\n" + " ldrb r0, [r4]\n" + " add r0, r0, #0x1\n" + " strb r0, [r4]\n" + " ldr r1, ._1202 + 8\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldrb r1, [r1]\n" + " cmp r0, r1\n" + " bcc ._1201 @cond_branch\n" + "._1200:\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._1203:\n" + " .align 2, 0\n" + "._1202:\n" + " .word gBattleMainFunc\n" + " .word gActiveBank\n" + " .word gNoOfAllBanks\n" + " .word gBattleBankFunc\n" + "\n" + ); +} + +__attribute__((naked)) +void sub_8010874() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " mov r0, #0x0\n" + " bl TurnValuesCleanUp\n" + " bl SpecialStatusesClear\n" + " mov r2, #0x0\n" + " mov r3, #0x0\n" + " ldr r0, ._1215\n" + " mov sl, r0\n" + " ldr r1, ._1215 + 4\n" + " mov r9, r1\n" + " ldr r4, ._1215 + 8\n" + " mov r8, r4\n" + " ldr r0, ._1215 + 12\n" + " mov ip, r0\n" + " ldr r4, ._1215 + 16\n" + " mov r5, #0x0\n" + " ldr r7, ._1215 + 20\n" + " ldr r6, ._1215 + 24\n" + "._1205:\n" + " ldr r0, ._1215 + 28\n" + " add r0, r5, r0\n" + " str r3, [r0]\n" + " mov r1, #0x0\n" + "._1204:\n" + " add r0, r4, r1\n" + " strb r3, [r0]\n" + " add r1, r1, #0x1\n" + " cmp r1, #0x1b\n" + " bls ._1204 @cond_branch\n" + " mov r0, #0x2\n" + " strb r0, [r4, #0x16]\n" + " ldr r1, ._1215 + 32\n" + " add r0, r2, r1\n" + " strb r3, [r0]\n" + " mov r0, ip\n" + " strh r3, [r0]\n" + " mov r1, r8\n" + " strh r3, [r1]\n" + " mov r0, r9\n" + " strh r3, [r0]\n" + " mov r1, sl\n" + " strh r3, [r1]\n" + " ldr r0, ._1215 + 36\n" + " add r1, r2, r0\n" + " mov r0, #0xff\n" + " strb r0, [r1]\n" + " strh r3, [r6]\n" + " strh r3, [r7]\n" + " ldr r1, ._1215 + 40\n" + " add r0, r5, r1\n" + " str r3, [r0]\n" + " mov r0, #0x2\n" + " add sl, sl, r0\n" + " add r9, r9, r0\n" + " add r8, r8, r0\n" + " add ip, ip, r0\n" + " add r4, r4, #0x1c\n" + " add r5, r5, #0x4\n" + " add r7, r7, #0x2\n" + " add r6, r6, #0x2\n" + " add r2, r2, #0x1\n" + " cmp r2, #0x3\n" + " ble ._1205 @cond_branch\n" + " mov r5, #0x0\n" + " ldr r3, ._1215 + 44\n" + " ldr r4, ._1215 + 48\n" + " mov r2, #0x1\n" + "._1207:\n" + " strh r5, [r4]\n" + " mov r1, #0x0\n" + "._1206:\n" + " add r0, r3, r1\n" + " strb r5, [r0]\n" + " add r1, r1, #0x1\n" + " cmp r1, #0xb\n" + " bls ._1206 @cond_branch\n" + " add r3, r3, #0xc\n" + " add r4, r4, #0x2\n" + " sub r2, r2, #0x1\n" + " cmp r2, #0\n" + " bge ._1207 @cond_branch\n" + " mov r1, #0x0\n" + " ldr r2, ._1215 + 52\n" + " strb r1, [r2]\n" + " ldr r3, ._1215 + 56\n" + " strb r1, [r3]\n" + " ldr r4, ._1215 + 60\n" + " strh r1, [r4]\n" + " ldr r1, ._1215 + 64\n" + " mov r2, #0x0\n" + " mov r3, #0x0\n" + "._1208:\n" + " add r0, r1, r2\n" + " strb r3, [r0]\n" + " add r2, r2, #0x1\n" + " cmp r2, #0x2b\n" + " bls ._1208 @cond_branch\n" + " mov r0, #0x0\n" + " ldr r1, ._1215 + 68\n" + " str r0, [r1]\n" + " ldr r2, ._1215 + 72\n" + " ldrh r1, [r2]\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._1210 @cond_branch\n" + " ldr r3, ._1215 + 76\n" + " ldrb r1, [r3, #0x15]\n" + " mov r0, #0x4\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1210 @cond_branch\n" + " mov r0, #0x80\n" + " ldr r4, ._1215 + 68\n" + " str r0, [r4]\n" + "._1210:\n" + " ldr r1, ._1215 + 76\n" + " ldrb r0, [r1, #0x15]\n" + " lsl r0, r0, #0x1e\n" + " lsr r0, r0, #0x1f\n" + " ldr r3, ._1215 + 80\n" + " ldr r4, ._1215 + 84\n" + " add r2, r3, r4\n" + " mov r1, #0x0\n" + " strb r0, [r2]\n" + " ldr r0, ._1215 + 88\n" + " strb r1, [r0]\n" + " ldr r2, ._1215 + 92\n" + " strb r1, [r2]\n" + " ldr r3, ._1215 + 96\n" + " str r1, [r3]\n" + " mov r2, #0x0\n" + " ldr r4, ._1215 + 100\n" + " strh r1, [r4]\n" + " ldr r1, ._1215 + 80\n" + " ldr r3, ._1215 + 104\n" + " add r0, r1, r3\n" + " strb r2, [r0]\n" + " ldr r4, ._1215 + 108\n" + " add r0, r1, r4\n" + " strb r2, [r0]\n" + " ldr r1, ._1215 + 112\n" + " mov r2, #0x0\n" + " add r0, r1, #7\n" + "._1211:\n" + " strb r2, [r0]\n" + " sub r0, r0, #0x1\n" + " cmp r0, r1\n" + " bge ._1211 @cond_branch\n" + " mov r5, #0x0\n" + " ldr r0, ._1215 + 116\n" + " strh r5, [r0]\n" + " mov r0, #0x0\n" + " ldr r1, ._1215 + 120\n" + " str r0, [r1]\n" + " ldr r2, ._1215 + 124\n" + " strh r0, [r2]\n" + " ldr r4, ._1215 + 80\n" + " ldr r3, ._1215 + 128\n" + " add r0, r4, r3\n" + " strb r5, [r0]\n" + " ldr r1, ._1215 + 132\n" + " add r0, r4, r1\n" + " strb r5, [r0]\n" + " ldr r2, ._1215 + 136\n" + " strb r5, [r2]\n" + " ldr r3, ._1215 + 140\n" + " strb r5, [r3]\n" + " sub r1, r1, #0x29\n" + " add r0, r4, r1\n" + " strb r5, [r0]\n" + " ldr r2, ._1215 + 144\n" + " add r0, r4, r2\n" + " strb r5, [r0]\n" + " ldr r3, ._1215 + 148\n" + " add r0, r4, r3\n" + " strb r5, [r0]\n" + " ldr r0, ._1215 + 152\n" + " mov r1, #0xb\n" + " bl GetMonData\n" + " ldr r2, ._1215 + 156\n" + " lsl r1, r0, #0x3\n" + " sub r1, r1, r0\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r2\n" + " ldrb r1, [r1, #0x8]\n" + " mov r0, #0x64\n" + " mul r0, r0, r1\n" + " ldr r1, ._1215 + 160\n" + " bl __divsi3\n" + " ldr r2, ._1215 + 164\n" + " add r1, r4, r2\n" + " strb r0, [r1]\n" + " ldr r3, ._1215 + 168\n" + " add r1, r4, r3\n" + " mov r0, #0x3\n" + " strb r0, [r1]\n" + " ldr r1, ._1215 + 172\n" + " add r0, r4, r1\n" + " strb r5, [r0]\n" + " sub r2, r2, #0x33\n" + " add r1, r4, r2\n" + " mov r0, #0x1\n" + " strb r0, [r1]\n" + " mov r2, #0x0\n" + " mov r1, #0x0\n" + "._1212:\n" + " ldr r3, ._1215 + 176\n" + " add r0, r2, r3\n" + " add r0, r0, r4\n" + " strb r1, [r0]\n" + " add r3, r3, #0x20\n" + " add r0, r2, r3\n" + " add r0, r0, r4\n" + " strb r1, [r0]\n" + " add r3, r3, #0x1c\n" + " add r0, r2, r3\n" + " add r0, r0, r4\n" + " strb r1, [r0]\n" + " add r3, r3, #0x8\n" + " add r0, r2, r3\n" + " add r0, r0, r4\n" + " strb r1, [r0]\n" + " add r3, r3, #0x10\n" + " add r0, r2, r3\n" + " add r0, r0, r4\n" + " strb r1, [r0]\n" + " add r3, r3, #0x8\n" + " add r0, r2, r3\n" + " add r0, r0, r4\n" + " strb r1, [r0]\n" + " add r2, r2, #0x1\n" + " cmp r2, #0x7\n" + " ble ._1212 @cond_branch\n" + " ldr r4, ._1215 + 80\n" + " ldr r1, ._1215 + 180\n" + " add r0, r4, r1\n" + " mov r2, #0x0\n" + " mov r1, #0x6\n" + " strb r1, [r0]\n" + " sub r3, r3, #0x3f\n" + " add r0, r4, r3\n" + " strb r1, [r0]\n" + " ldr r1, ._1215 + 184\n" + " add r0, r4, r1\n" + " strb r2, [r0]\n" + " ldr r3, ._1215 + 188\n" + " mov r1, #0x0\n" + " mov r2, #0xa\n" + " add r0, r3, #0\n" + " add r0, r0, #0x40\n" + "._1213:\n" + " strb r1, [r0]\n" + " sub r0, r0, #0x1\n" + " sub r2, r2, #0x1\n" + " cmp r2, #0\n" + " bge ._1213 @cond_branch\n" + " mov r1, #0x0\n" + " strb r1, [r3, #0x13]\n" + " strb r1, [r3]\n" + " strb r1, [r3, #0x1]\n" + " strb r1, [r3, #0x2]\n" + " strb r1, [r3, #0x3]\n" + " strb r1, [r3, #0x4]\n" + " ldrb r2, [r3, #0x5]\n" + " mov r0, #0x2\n" + " neg r0, r0\n" + " and r0, r0, r2\n" + " mov r2, #0x3\n" + " neg r2, r2\n" + " and r0, r0, r2\n" + " strb r0, [r3, #0x5]\n" + " strh r1, [r3, #0x20]\n" + " strh r1, [r3, #0x22]\n" + " strh r1, [r3, #0x24]\n" + " strh r1, [r3, #0x6]\n" + " strh r1, [r3, #0x26]\n" + " strh r1, [r3, #0x28]\n" + " mov r2, #0x0\n" + " add r5, r3, #0\n" + " add r5, r5, #0x8\n" + " mov r4, #0x0\n" + " add r1, r3, #0\n" + " add r1, r1, #0x14\n" + "._1214:\n" + " add r0, r2, r5\n" + " strb r4, [r0]\n" + " strb r4, [r1]\n" + " strb r4, [r1, #0x16]\n" + " add r1, r1, #0x1\n" + " add r2, r2, #0x1\n" + " cmp r2, #0x9\n" + " ble ._1214 @cond_branch\n" + " ldr r2, ._1215 + 80\n" + " ldr r3, ._1215 + 192\n" + " add r0, r2, r3\n" + " mov r1, #0x0\n" + " strb r1, [r0]\n" + " ldr r4, ._1215 + 196\n" + " add r0, r2, r4\n" + " strb r1, [r0]\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._1216:\n" + " .align 2, 0\n" + "._1215:\n" + " .word gUnknown_02024C4C\n" + " .word gLastHitByType\n" + " .word gLastLandedMoves\n" + " .word gLastUsedMove\n" + " .word gDisableStructs\n" + " .word gUnknown_02024C2C\n" + " .word gLockedMoves\n" + " .word gStatuses3\n" + " .word gUnknown_02024C70\n" + " .word gUnknown_02024C5C\n" + " .word gSharedMem+0x17100\n" + " .word gSideTimers\n" + " .word gSideAffecting\n" + " .word gBankAttacker\n" + " .word gBankTarget\n" + " .word gBattleWeather\n" + " .word gWishFutureKnock\n" + " .word gHitMarker\n" + " .word gBattleTypeFlags\n" + " .word gSaveBlock2\n" + " .word gSharedMem\n" + " .word 0x16084\n" + " .word gMultiHitCounter\n" + " .word gBattleOutcome\n" + " .word gBattleExecBuffer\n" + " .word gPaydayMoney\n" + " .word 0x17130\n" + " .word 0x17160\n" + " .word gBattleCommunication\n" + " .word gPauseCounterBattle\n" + " .word gBattleMoveDamage\n" + " .word gUnknown_02024DE8\n" + " .word 0x16002\n" + " .word 0x160a1\n" + " .word gLeveledUpInBattle\n" + " .word gAbsentBankFlags\n" + " .word 0x16086\n" + " .word 0x16087\n" + " .word gEnemyParty\n" + " .word gBaseStats\n" + " .word 0x4fb\n" + " .word 0x16089\n" + " .word 0x16088\n" + " .word 0x1601b\n" + " .word 0x160ac\n" + " .word 0x160c8\n" + " .word 0x16113\n" + " .word gBattleResults\n" + " .word 0x1609e\n" + " .word 0x1609f\n" + "\n" + ); +} +#else + void sub_8010824(void) { gBattleMainFunc(); @@ -1663,6 +7549,7 @@ void sub_8010874(void) gBattleResults.caughtNick[i] = 0; } } +#endif void SwitchInClearSetData(void) { @@ -4141,6 +10028,12 @@ void SetActionsAndBanksTurnOrder(void) } } } + // Debug ROM has a register swap from the retail ROM. + // And doing this seems to fix it. +#if DEBUG + asm("");asm("");asm("");asm("");asm("");asm("");asm("");asm("");asm(""); + asm("");asm("");asm("");asm("");asm("");asm("");asm(""); +#endif gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; eFocusPunchBank = 0; } diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 3763fc309..9fe1f6cb0 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -5018,7 +5018,156 @@ _0801F610: .4byte BattleScript_SAtkDown2\n\ } #endif // NONMATCHING - +#if DEBUG +__attribute__((naked)) +static void atk15_seteffectwithchance(void) +{ + asm("\ + push {r4, lr}\n\ + ldr r2, ._1037\n\ + ldr r0, ._1037 + 4\n\ + ldrb r1, [r0]\n\ + mov r0, #0x58\n\ + mul r0, r0, r1\n\ + add r0, r0, r2\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x20\n\ + bne ._1035 @cond_branch\n\ + ldr r2, ._1037 + 8\n\ + ldr r0, ._1037 + 12\n\ + ldrh r1, [r0]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r2\n\ + ldrb r0, [r0, #0x5]\n\ + lsl r4, r0, #0x1\n\ + b ._1036\n\ +._1038:\n\ + .align 2, 0\n\ +._1037:\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gBattleMoves\n\ + .word gCurrentMove\n\ +._1035:\n\ + ldr r2, ._1045\n\ + ldr r0, ._1045 + 4\n\ + ldrh r1, [r0]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r2\n\ + ldrb r4, [r0, #0x5]\n\ +._1036:\n\ + ldr r0, ._1045 + 8\n\ + ldrb r1, [r0]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + ldr r2, ._1045 + 12\n\ + cmp r0, #0\n\ + beq ._1039 @cond_branch\n\ + ldrb r1, [r2, #0x3]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1040 @cond_branch\n\ + ldr r0, ._1045 + 16\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1050 @cond_branch\n\ +._1039:\n\ + ldrb r1, [r2, #0x3]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1043 @cond_branch\n\ +._1040:\n\ + ldr r0, ._1045 + 16\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1043 @cond_branch\n\ + ldr r2, ._1045 + 12\n\ + ldrb r1, [r2, #0x3]\n\ + mov r0, #0x7f\n\ + and r0, r0, r1\n\ + strb r0, [r2, #0x3]\n\ + b ._1044\n\ +._1046:\n\ + .align 2, 0\n\ +._1045:\n\ + .word gBattleMoves\n\ + .word gCurrentMove\n\ + .word gUnknown_02023A14_50\n\ + .word gBattleCommunication\n\ + .word gBattleMoveFlags\n\ +._1043:\n\ + bl Random\n\ + lsl r0, r0, #0x10\n\ + lsr r0, r0, #0x10\n\ + mov r1, #0x64\n\ + bl __umodsi3\n\ + lsl r0, r0, #0x10\n\ + lsr r0, r0, #0x10\n\ + cmp r0, r4\n\ + bhi ._1049 @cond_branch\n\ + ldr r0, ._1052\n\ + ldrb r0, [r0, #0x3]\n\ + cmp r0, #0\n\ + beq ._1049 @cond_branch\n\ + ldr r0, ._1052 + 4\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1049 @cond_branch\n\ + cmp r4, #0x63\n\ + bls ._1050 @cond_branch\n\ +._1044:\n\ + mov r0, #0x0\n\ + mov r1, #0x80\n\ + bl SetMoveEffect\n\ + b ._1054\n\ +._1053:\n\ + .align 2, 0\n\ +._1052:\n\ + .word gBattleCommunication\n\ + .word gBattleMoveFlags\n\ +._1050:\n\ + mov r0, #0x0\n\ + mov r1, #0x0\n\ + bl SetMoveEffect\n\ + b ._1054\n\ +._1049:\n\ + ldr r1, ._1055\n\ + ldr r0, [r1]\n\ + add r0, r0, #0x1\n\ + str r0, [r1]\n\ +._1054:\n\ + ldr r0, ._1055 + 4\n\ + mov r1, #0x0\n\ + strb r1, [r0, #0x3]\n\ + ldr r0, ._1055 + 8\n\ + ldr r2, ._1055 + 12\n\ + add r0, r0, r2\n\ + strb r1, [r0]\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._1056:\n\ + .align 2, 0\n\ +._1055:\n\ + .word gBattlescriptCurrInstr\n\ + .word gBattleCommunication\n\ + .word +0x2000000\n\ + .word 0x16112"); +} +#else static void atk15_seteffectwithchance(void) { u32 PercentChance; @@ -5043,6 +5192,7 @@ static void atk15_seteffectwithchance(void) gBattleCommunication[MOVE_EFFECT_BYTE] = 0; gBattleStruct->unk16112 = 0; } +#endif static void atk16_seteffectprimary(void) { @@ -12620,6 +12770,193 @@ static void atk9D_mimicattackcopy(void) } } +#if DEBUG +__attribute__((naked)) +static void atk9E_metronome(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + ldr r6, ._3076\n\ + ldrb r2, [r6]\n\ + lsl r1, r2, #0x1\n\ + ldr r0, ._3076 + 4\n\ + add r3, r1, r0\n\ + ldr r5, ._3076 + 8\n\ + mov r4, #0x58\n\ + add r0, r2, #0\n\ + mul r0, r0, r4\n\ + add r1, r0, r5\n\ + ldrh r0, [r1, #0xe]\n\ + cmp r0, #0\n\ + bne ._3071 @cond_branch\n\ + ldrh r2, [r1, #0x10]\n\ + cmp r2, #0\n\ + beq ._3071 @cond_branch\n\ + ldrh r0, [r1, #0x12]\n\ + cmp r0, #0\n\ + beq ._3071 @cond_branch\n\ + ldrh r0, [r3]\n\ + cmp r0, #0\n\ + bne ._3072 @cond_branch\n\ + strh r2, [r3]\n\ +._3072:\n\ + ldr r1, ._3076 + 12\n\ + ldrh r0, [r3]\n\ + strh r0, [r1]\n\ + ldrb r0, [r6]\n\ + mul r0, r0, r4\n\ + add r0, r0, r5\n\ + ldrh r5, [r0, #0x10]\n\ + ldrh r2, [r0, #0x12]\n\ + add r7, r1, #0\n\ + cmp r5, r2\n\ + bcs ._3073 @cond_branch\n\ + ldrh r0, [r3]\n\ + cmp r0, r2\n\ + beq ._3074 @cond_branch\n\ + add r0, r0, #0x1\n\ + b ._3079\n\ +._3077:\n\ + .align 2, 0\n\ +._3076:\n\ + .word gBankAttacker\n\ + .word +0x20160b4\n\ + .word gBattleMons\n\ + .word gCurrentMove\n\ +._3073:\n\ + ldrh r4, [r3]\n\ + add r1, r4, #0\n\ + mov r0, #0xb1\n\ + lsl r0, r0, #0x1\n\ + cmp r1, r0\n\ + bne ._3078 @cond_branch\n\ + mov r0, #0x1\n\ + b ._3079\n\ +._3078:\n\ + cmp r1, r2\n\ + bne ._3080 @cond_branch\n\ +._3074:\n\ + strh r5, [r3]\n\ + b ._3081\n\ +._3080:\n\ + add r0, r4, #1\n\ +._3079:\n\ + strh r0, [r3]\n\ +._3081:\n\ + ldr r4, ._3083\n\ + ldr r2, [r4]\n\ + ldr r0, ._3083 + 4\n\ + and r2, r2, r0\n\ + str r2, [r4]\n\ + ldr r6, ._3083 + 8\n\ + ldr r5, ._3083 + 12\n\ + ldr r3, ._3083 + 16\n\ + ldrh r1, [r7]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r3\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r5\n\ + ldr r0, [r0]\n\ + str r0, [r6]\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x4\n\ + orr r2, r2, r0\n\ + str r2, [r4]\n\ + ldrh r0, [r7]\n\ + b ._3082\n\ +._3084:\n\ + .align 2, 0\n\ +._3083:\n\ + .word gHitMarker\n\ + .word 0xfffffbff\n\ + .word gBattlescriptCurrInstr\n\ + .word gBattleScriptsForMoveEffects\n\ + .word gBattleMoves\n\ +._3071:\n\ + ldr r7, ._3090\n\ + mov r6, #0xb1\n\ + lsl r6, r6, #0x1\n\ + ldr r5, ._3090 + 4\n\ + ldr r0, ._3090 + 8\n\ + mov r8, r0\n\ +._3089:\n\ + bl Random\n\ + ldr r2, ._3090 + 12\n\ + add r1, r2, #0\n\ + and r0, r0, r1\n\ + add r0, r0, #0x1\n\ + strh r0, [r7]\n\ + cmp r0, r6\n\ + bhi ._3089 @cond_branch\n\ + mov r0, #0x3\n\ +._3086:\n\ + sub r0, r0, #0x1\n\ + cmp r0, #0\n\ + bge ._3086 @cond_branch\n\ + ldr r4, ._3090\n\ + ldrh r2, [r4]\n\ + ldr r3, ._3090 + 16\n\ + sub r0, r5, #2\n\ +._3088:\n\ + add r0, r0, #0x2\n\ + ldrh r1, [r0]\n\ + cmp r1, r2\n\ + beq ._3087 @cond_branch\n\ + cmp r1, r3\n\ + bne ._3088 @cond_branch\n\ +._3087:\n\ + ldr r0, ._3090 + 16\n\ + cmp r1, r0\n\ + bne ._3089 @cond_branch\n\ + ldr r2, ._3090 + 20\n\ + ldr r0, [r2]\n\ + ldr r1, ._3090 + 24\n\ + and r0, r0, r1\n\ + str r0, [r2]\n\ + ldr r3, ._3090 + 28\n\ + ldr r2, ._3090 + 32\n\ + ldrh r1, [r4]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r2\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r3\n\ + ldr r0, [r0]\n\ + mov r1, r8\n\ + str r0, [r1]\n\ + ldrh r0, [r4]\n\ +._3082:\n\ + mov r1, #0x0\n\ + bl GetMoveTarget\n\ + ldr r1, ._3090 + 36\n\ + strb r0, [r1]\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._3091:\n\ + .align 2, 0\n\ +._3090:\n\ + .word gCurrentMove\n\ + .word sMovesForbiddenToCopy\n\ + .word gBattlescriptCurrInstr\n\ + .word 0x1ff\n\ + .word 0xffff\n\ + .word gHitMarker\n\ + .word 0xfffffbff\n\ + .word gBattleScriptsForMoveEffects\n\ + .word gBattleMoves\n\ + .word gBankTarget"); +} +#else #ifdef NONMATCHING static void atk9E_metronome(void) { @@ -12721,6 +13058,7 @@ _0802795C: .4byte gBankTarget\n\ .syntax divided"); } #endif // NONMATCHING +#endif static void atk9F_dmgtolevel(void) { diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 2ac9df2b9..629a57d25 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -13,6 +13,8 @@ #include "util.h" #include "ewram.h" +extern u8 gUnknown_02023A14_50; +extern u32 gUnknown_02023A14_4C; extern u16 gBattleTypeFlags; extern u16 gBattleWeather; extern u8 gActiveBank; @@ -336,11 +338,15 @@ void BattleAI_SetupAIData(void) else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) AI_THINKING_STRUCT->aiFlags = 0x80000000; #ifdef GERMAN - else if (gBattleTypeFlags & 0x900 || gTrainerBattleOpponent == 0x400) + else if (gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER) || gTrainerBattleOpponent == 0x400) AI_THINKING_STRUCT->aiFlags = 7; #endif else // otherwise, just set aiFlags to whatever flags the trainer has set in their data. AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent].aiFlags; +#if DEBUG + if (gUnknown_02023A14_50 & 1) + AI_THINKING_STRUCT->aiFlags = gUnknown_02023A14_4C; +#endif } u8 BattleAI_GetAIActionToUse(void) diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 5947053b6..5382738f7 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -30,6 +30,7 @@ struct MovePpInfo u8 ppBonuses; }; +extern u8 gUnknown_02023A14_50; extern u8 gActiveBank; extern u8 gBattleBufferA[][0x200]; extern u16 gBattlePartyID[]; @@ -1213,14 +1214,23 @@ void OpponentHandleTrainerThrow(void) { u32 trainerPicIndex; - if (gTrainerBattleOpponent == 0x400) - trainerPicIndex = GetSecretBaseTrainerPicIndex(); - else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) - trainerPicIndex = get_trainer_class_pic_index(); - else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - trainerPicIndex = GetEReaderTrainerPicIndex(); +#if DEBUG + if (gUnknown_02023A14_50 & 0x10) + { + trainerPicIndex = gSharedMem[0x160A3]; + } else - trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; +#endif + { + if (gTrainerBattleOpponent == 0x400) + trainerPicIndex = GetSecretBaseTrainerPicIndex(); + else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + trainerPicIndex = get_trainer_class_pic_index(); + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + trainerPicIndex = GetEReaderTrainerPicIndex(); + else + trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; + } sub_8031A6C(trainerPicIndex, gActiveBank); GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBankIdentity(gActiveBank)); @@ -1427,6 +1437,315 @@ void OpponentHandlecmd19(void) OpponentBufferExecCompleted(); } +#if DEBUG +__attribute__((naked)) +void OpponentHandlecmd20(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, sl\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5, r6, r7}\n\ + ldr r6, ._549\n\ + ldrb r0, [r6]\n\ + lsl r0, r0, #0x9\n\ + ldr r1, ._549 + 4\n\ + add r5, r0, r1\n\ + ldr r2, ._549 + 8\n\ + ldrb r1, [r2]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + mov sl, r6\n\ + cmp r0, #0\n\ + beq ._546 @cond_branch\n\ + ldr r0, ._549 + 12\n\ + mov r9, r0\n\ + ldr r1, ._549 + 16\n\ + mov ip, r1\n\ + add r7, r6, #0\n\ + mov r0, #0x2\n\ + mov r8, r0\n\ + ldr r6, ._549 + 20\n\ +._552:\n\ + ldrb r1, [r7]\n\ + mov r0, r8\n\ + and r0, r0, r1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x19\n\ + add r0, r0, r6\n\ + mov r1, ip\n\ + add r3, r0, r1\n\ + ldrb r1, [r3]\n\ + lsl r0, r1, #0x1\n\ + add r0, r5, r0\n\ + ldrh r2, [r0]\n\ + add r4, r1, #0\n\ + cmp r2, #0\n\ + beq ._547 @cond_branch\n\ + add r0, r4, #1\n\ + strb r0, [r3]\n\ + b ._548\n\ +._550:\n\ + .align 2, 0\n\ +._549:\n\ + .word gActiveBank\n\ + .word gBattleBufferA+4\n\ + .word gUnknown_02023A14_50\n\ + .word gBattleMoves\n\ + .word +0x2000000\n\ + .word 0x1609e\n\ +._547:\n\ + strb r2, [r3]\n\ +._548:\n\ + ldrb r0, [r7]\n\ + mov r1, r8\n\ + and r1, r1, r0\n\ + lsl r1, r1, #0x18\n\ + lsr r1, r1, #0x19\n\ + add r1, r1, r6\n\ + add r1, r1, ip\n\ + ldrb r0, [r1]\n\ + cmp r0, #0x3\n\ + bls ._551 @cond_branch\n\ + mov r0, #0x0\n\ + strb r0, [r1]\n\ +._551:\n\ + cmp r2, #0\n\ + beq ._552 @cond_branch\n\ + lsl r0, r2, #0x1\n\ + add r0, r0, r2\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r9\n\ + ldrb r3, [r0, #0x6]\n\ + mov r0, #0x12\n\ + and r0, r0, r3\n\ + cmp r0, #0\n\ + beq ._553 @cond_branch\n\ + mov r1, sl\n\ + ldrb r0, [r1]\n\ + b ._561\n\ +._553:\n\ + ldr r0, ._559\n\ + ldrh r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._557 @cond_branch\n\ + ldr r0, ._559 + 4\n\ + ldrb r1, [r0]\n\ + mov r5, #0x2\n\ + add r0, r5, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._556 @cond_branch\n\ + cmp r3, #0\n\ + bne ._557 @cond_branch\n\ + mov r1, sl\n\ + ldrb r0, [r1]\n\ + bl GetBankIdentity\n\ + mov r1, #0x2\n\ + eor r0, r0, r1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + b ._558\n\ +._560:\n\ + .align 2, 0\n\ +._559:\n\ + .word gBattleTypeFlags\n\ + .word gUnknown_02023A14_50\n\ +._556:\n\ + bl Random\n\ + add r1, r5, #0\n\ + and r1, r1, r0\n\ + lsl r1, r1, #0x10\n\ + lsr r0, r1, #0x10\n\ + b ._561\n\ +._557:\n\ + mov r0, #0x0\n\ +._558:\n\ + bl GetBankByIdentity\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ +._561:\n\ + lsl r2, r0, #0x8\n\ + orr r2, r2, r4\n\ + mov r0, #0x1\n\ + mov r1, #0xa\n\ +._569:\n\ + bl Emitcmd33\n\ +._573:\n\ + bl OpponentBufferExecCompleted\n\ + b ._562\n\ +._546:\n\ + ldr r0, ._567\n\ + ldrh r1, [r0]\n\ + mov r0, #0x93\n\ + lsl r0, r0, #0x3\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._563 @cond_branch\n\ + bl BattleAI_SetupAIData\n\ + bl BattleAI_GetAIActionToUse\n\ + lsl r0, r0, #0x18\n\ + lsr r4, r0, #0x18\n\ + cmp r4, #0x4\n\ + beq ._564 @cond_branch\n\ + cmp r4, #0x5\n\ + bne ._565 @cond_branch\n\ + mov r0, #0x1\n\ + mov r1, #0x4\n\ + b ._566\n\ +._568:\n\ + .align 2, 0\n\ +._567:\n\ + .word gBattleTypeFlags\n\ +._564:\n\ + mov r0, #0x1\n\ + mov r1, #0x3\n\ +._566:\n\ + mov r2, #0x0\n\ + b ._569\n\ +._565:\n\ + ldr r3, ._574\n\ + lsl r0, r4, #0x1\n\ + add r2, r5, r0\n\ + ldrh r1, [r2]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r3\n\ + ldrb r1, [r0, #0x6]\n\ + mov r0, #0x12\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._570 @cond_branch\n\ + ldr r1, ._574 + 4\n\ + ldrb r0, [r6]\n\ + strb r0, [r1]\n\ +._570:\n\ + ldrh r1, [r2]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r3\n\ + ldrb r1, [r0, #0x6]\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._572 @cond_branch\n\ + mov r0, #0x0\n\ + bl GetBankByIdentity\n\ + ldr r5, ._574 + 4\n\ + strb r0, [r5]\n\ + ldr r0, ._574 + 8\n\ + ldrb r1, [r0]\n\ + ldr r2, ._574 + 12\n\ + ldrb r0, [r5]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r2\n\ + ldr r0, [r0]\n\ + and r1, r1, r0\n\ + cmp r1, #0\n\ + beq ._572 @cond_branch\n\ + mov r0, #0x2\n\ + bl GetBankByIdentity\n\ + strb r0, [r5]\n\ +._572:\n\ + ldr r0, ._574 + 4\n\ + ldrb r2, [r0]\n\ + lsl r2, r2, #0x8\n\ + orr r2, r2, r4\n\ + mov r0, #0x1\n\ + mov r1, #0xa\n\ + bl Emitcmd33\n\ + b ._573\n\ +._575:\n\ + .align 2, 0\n\ +._574:\n\ + .word gBattleMoves\n\ + .word gBankTarget\n\ + .word gAbsentBankFlags\n\ + .word gBitTable\n\ +._563:\n\ + mov r6, #0x3\n\ +._576:\n\ + bl Random\n\ + add r4, r0, #0\n\ + and r4, r4, r6\n\ + lsl r0, r4, #0x1\n\ + add r0, r5, r0\n\ + ldrh r2, [r0]\n\ + cmp r2, #0\n\ + beq ._576 @cond_branch\n\ + ldr r1, ._579\n\ + lsl r0, r2, #0x1\n\ + add r0, r0, r2\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x6]\n\ + mov r0, #0x12\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._577 @cond_branch\n\ + ldr r0, ._579 + 4\n\ + ldrb r2, [r0]\n\ + lsl r2, r2, #0x8\n\ + b ._578\n\ +._580:\n\ + .align 2, 0\n\ +._579:\n\ + .word gBattleMoves\n\ + .word gActiveBank\n\ +._577:\n\ + ldr r0, ._583\n\ + ldrh r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._581 @cond_branch\n\ + bl Random\n\ + mov r1, #0x2\n\ + and r1, r1, r0\n\ + lsl r1, r1, #0x18\n\ + lsr r1, r1, #0x18\n\ + add r0, r1, #0\n\ + bl GetBankByIdentity\n\ + add r2, r0, #0\n\ + lsl r2, r2, #0x18\n\ + lsr r2, r2, #0x10\n\ +._578:\n\ + orr r2, r2, r4\n\ + mov r0, #0x1\n\ + mov r1, #0xa\n\ + bl Emitcmd33\n\ + b ._582\n\ +._584:\n\ + .align 2, 0\n\ +._583:\n\ + .word gBattleTypeFlags\n\ +._581:\n\ + mov r0, #0x0\n\ + bl GetBankByIdentity\n\ + add r2, r0, #0\n\ + lsl r2, r2, #0x18\n\ + lsr r2, r2, #0x10\n\ + orr r2, r2, r4\n\ + mov r0, #0x1\n\ + mov r1, #0xa\n\ + bl Emitcmd33\n\ +._582:\n\ + bl OpponentBufferExecCompleted\n\ +._562:\n\ + pop {r3, r4, r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov sl, r5\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0"); +} +#else #ifdef NONMATCHING void OpponentHandlecmd20(void) { @@ -1501,7 +1820,7 @@ void OpponentHandlecmd20(void) ldr r6, _0803545C @ =gActiveBank\n\ ldrb r0, [r6]\n\ lsls r0, 9\n\ - ldr r1, _08035460 @ =gUnknown_02023A64\n\ + ldr r1, _08035460 @ =gBattleBufferA+4\n\ adds r5, r0, r1\n\ ldr r0, _08035464 @ =gBattleTypeFlags\n\ ldrh r1, [r0]\n\ @@ -1523,7 +1842,7 @@ void OpponentHandlecmd20(void) b _0803546C\n\ .align 2, 0\n\ _0803545C: .4byte gActiveBank\n\ -_08035460: .4byte gUnknown_02023A64\n\ +_08035460: .4byte gBattleBufferA+4\n\ _08035464: .4byte gBattleTypeFlags\n\ _08035468:\n\ movs r0, 0x1\n\ @@ -1670,6 +1989,7 @@ _0803558A:\n\ .syntax divided\n"); } #endif +#endif void OpponentHandleOpenBag(void) { diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index f036e841f..d4b4da6f2 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -42,6 +42,8 @@ extern struct Window gUnknown_03004210; extern void (*gBattleBankFunc[])(void); +extern u32 gOamMatrixAllocBitmap; +extern u8 gUnknown_020297ED; extern u8 gActiveBank; extern u8 gActionSelectionCursor[]; extern u8 gDisplayedStringBattle[]; @@ -617,9 +619,14 @@ struct ChooseMoveStruct const u8 gUnknown_081FAE80[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}"); +void debug_sub_8030C24(void); + void sub_802C68C(void) { u32 r8 = 0; +#if DEBUG + u8 count = 0; +#endif struct ChooseMoveStruct *r6 = (struct ChooseMoveStruct *)(gBattleBufferA[gActiveBank] + 4); if (gMain.newKeys & A_BUTTON) @@ -750,6 +757,43 @@ void sub_802C68C(void) gBattleBankFunc[gActiveBank] = sub_802CA60; } } +#if DEBUG + else if (gUnknown_020297ED == 1 && (gMain.newKeys & START_BUTTON)) + { + const u8 *moveName; + s32 i; + + Text_FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 16, 0x3A); + moveName = gMoveNames[GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1)]; + Text_InitWindowAndPrintText(&gUnknown_03004210, moveName, 0x100, 2, 0x37); + ConvertIntToDecimalStringN( + gDisplayedStringBattle, + GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1), + 2, 3); + Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x110, 10, 0x37); + Text_InitWindowAndPrintText(&gUnknown_03004210, gString_TurnJP, 0x116, 1, 0x39); + ConvertIntToDecimalStringN(gDisplayedStringBattle, gAnimMoveTurn, 2, 3); + Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x11C, 4, 0x39); + for (i = 0; i < 64; i++) + { + if (gSprites[i].inUse) + count++; + } + ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); + Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x122, 8, 0x39); + count = GetTaskCount(); + ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); + Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x126, 11, 0x39); + for (i = 0, count = 0; i < 32; i++) + { + if (gOamMatrixAllocBitmap & (1 << i)) + count++; + } + ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); + Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x12A, 14, 0x39); + gBattleBankFunc[gActiveBank] = debug_sub_8030C24; + } +#endif } extern const u8 BattleText_Format[]; @@ -956,6 +1000,688 @@ void sub_802D18C(void) } } +#if DEBUG +__attribute__((naked)) +void debug_sub_8030C24(void) +{ + asm("\ + push {r4, r5, r6, lr}\n\ + add sp, sp, #0xfffffff4\n\ + ldr r1, ._293\n\ + ldr r4, ._293 + 4\n\ + ldrb r0, [r4]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + mov r0, #0x64\n\ + mul r0, r0, r1\n\ + ldr r1, ._293 + 8\n\ + add r0, r0, r1\n\ + mov r1, #0xd\n\ + bl GetMonData\n\ + add r1, sp, #0x8\n\ + strh r0, [r1]\n\ + ldr r5, ._293 + 12\n\ + ldrh r1, [r5, #0x30]\n\ + cmp r1, #0x20\n\ + bne ._286 @cond_branch\n\ + b ._287\n\ +._286:\n\ + cmp r1, #0x20\n\ + bgt ._288 @cond_branch\n\ + cmp r1, #0x8\n\ + beq ._289 @cond_branch\n\ + cmp r1, #0x8\n\ + bgt ._290 @cond_branch\n\ + cmp r1, #0x4\n\ + beq ._291 @cond_branch\n\ + b ._348\n\ +._294:\n\ + .align 2, 0\n\ +._293:\n\ + .word gBattlePartyID\n\ + .word gActiveBank\n\ + .word gPlayerParty\n\ + .word gMain\n\ +._290:\n\ + cmp r1, #0x10\n\ + bne ._295 @cond_branch\n\ + b ._296\n\ +._295:\n\ + b ._348\n\ +._288:\n\ + cmp r1, #0x80\n\ + bne ._298 @cond_branch\n\ + b ._302\n\ +._298:\n\ + cmp r1, #0x80\n\ + bgt ._300 @cond_branch\n\ + cmp r1, #0x40\n\ + bne ._301 @cond_branch\n\ + b ._302\n\ +._301:\n\ + b ._348\n\ +._300:\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x1\n\ + cmp r1, r0\n\ + bne ._304 @cond_branch\n\ + b ._305\n\ +._304:\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x2\n\ + cmp r1, r0\n\ + bne ._306 @cond_branch\n\ + b ._307\n\ +._306:\n\ + b ._348\n\ +._289:\n\ + ldrb r0, [r4]\n\ + mov r1, #0x1\n\ + bl dp11b_obj_free\n\ + ldrb r0, [r4]\n\ + mov r1, #0x0\n\ + bl dp11b_obj_free\n\ + ldr r0, ._312\n\ + ldrb r2, [r4]\n\ + strb r2, [r0]\n\ + ldrh r1, [r5, #0x28]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._310 @cond_branch\n\ + ldr r0, ._312 + 4\n\ + ldrh r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._310 @cond_branch\n\ + ldr r0, ._312 + 8\n\ + mov r1, #0x2\n\ + eor r1, r1, r2\n\ + strb r1, [r0]\n\ + b ._311\n\ +._313:\n\ + .align 2, 0\n\ +._312:\n\ + .word gBankAttacker\n\ + .word gBattleTypeFlags\n\ + .word gBankTarget\n\ +._310:\n\ + ldr r0, ._317\n\ + ldrh r1, [r0, #0x28]\n\ + mov r2, #0x1\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._315 @cond_branch\n\ + ldr r0, ._317 + 4\n\ + ldrh r1, [r0]\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._315 @cond_branch\n\ + mov r0, #0x3\n\ + b ._316\n\ +._318:\n\ + .align 2, 0\n\ +._317:\n\ + .word gMain\n\ + .word gBattleTypeFlags\n\ +._315:\n\ + mov r0, #0x1\n\ +._316:\n\ + bl GetBankByIdentity\n\ + ldr r1, ._320\n\ + strb r0, [r1]\n\ +._311:\n\ + mov r0, #0x0\n\ + bl sub_80326EC\n\ + add r0, sp, #0x8\n\ + ldrh r0, [r0]\n\ + bl DoMoveAnim\n\ + ldr r1, ._320 + 4\n\ + ldr r0, ._320 + 8\n\ + ldrb r0, [r0]\n\ + b ._332\n\ +._321:\n\ + .align 2, 0\n\ +._320:\n\ + .word gBankTarget\n\ + .word gBattleBankFunc\n\ + .word gActiveBank\n\ +._291:\n\ + ldrb r0, [r4]\n\ + mov r1, #0x1\n\ + bl dp11b_obj_free\n\ + ldrb r0, [r4]\n\ + mov r1, #0x0\n\ + bl dp11b_obj_free\n\ + ldr r0, ._325\n\ + ldrb r2, [r4]\n\ + strb r2, [r0]\n\ + ldrh r1, [r5, #0x28]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._323 @cond_branch\n\ + ldr r0, ._325 + 4\n\ + ldrh r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._323 @cond_branch\n\ + ldr r0, ._325 + 8\n\ + mov r1, #0x2\n\ + eor r1, r1, r2\n\ + strb r1, [r0]\n\ + b ._324\n\ +._326:\n\ + .align 2, 0\n\ +._325:\n\ + .word gBankTarget\n\ + .word gBattleTypeFlags\n\ + .word gBankAttacker\n\ +._323:\n\ + ldr r0, ._330\n\ + ldrh r1, [r0, #0x28]\n\ + mov r2, #0x1\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._328 @cond_branch\n\ + ldr r0, ._330 + 4\n\ + ldrh r1, [r0]\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._328 @cond_branch\n\ + mov r0, #0x3\n\ + b ._329\n\ +._331:\n\ + .align 2, 0\n\ +._330:\n\ + .word gMain\n\ + .word gBattleTypeFlags\n\ +._328:\n\ + mov r0, #0x1\n\ +._329:\n\ + bl GetBankByIdentity\n\ + ldr r1, ._333\n\ + strb r0, [r1]\n\ +._324:\n\ + mov r0, #0x0\n\ + bl sub_80326EC\n\ + add r0, sp, #0x8\n\ + ldrh r0, [r0]\n\ + bl DoMoveAnim\n\ + ldr r1, ._333 + 4\n\ + ldr r0, ._333 + 8\n\ + ldrb r0, [r0]\n\ + b ._332\n\ +._334:\n\ + .align 2, 0\n\ +._333:\n\ + .word gBankAttacker\n\ + .word gBattleBankFunc\n\ + .word gActiveBank\n\ +._305:\n\ + ldrh r1, [r5, #0x28]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._336 @cond_branch\n\ + ldr r0, ._338\n\ + ldrh r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._336 @cond_branch\n\ + ldrb r0, [r4]\n\ + mov r1, #0x1\n\ + bl dp11b_obj_free\n\ + ldrb r0, [r4]\n\ + mov r1, #0x0\n\ + bl dp11b_obj_free\n\ + mov r0, #0x3\n\ + bl GetBankByIdentity\n\ + ldr r1, ._338 + 4\n\ + strb r0, [r1]\n\ + mov r0, #0x1\n\ + b ._337\n\ +._339:\n\ + .align 2, 0\n\ +._338:\n\ + .word gBattleTypeFlags\n\ + .word gBankAttacker\n\ +._336:\n\ + add r0, sp, #0x8\n\ + mov r1, #0x0\n\ + ldsh r0, [r0, r1]\n\ + add r0, r0, #0x9\n\ + add r1, sp, #0x8\n\ + strh r0, [r1]\n\ +._296:\n\ + add r0, sp, #0x8\n\ + mov r2, #0x0\n\ + ldsh r0, [r0, r2]\n\ + add r0, r0, #0x1\n\ + lsl r2, r0, #0x10\n\ + add r1, sp, #0x8\n\ + strh r0, [r1]\n\ + mov r0, #0xb1\n\ + lsl r0, r0, #0x11\n\ + cmp r2, r0\n\ + ble ._347 @cond_branch\n\ + mov r1, #0x1\n\ + add r0, sp, #0x8\n\ + strh r1, [r0]\n\ + b ._347\n\ +._307:\n\ + ldrh r1, [r5, #0x28]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._343 @cond_branch\n\ + ldr r0, ._345\n\ + ldrh r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._343 @cond_branch\n\ + ldrb r0, [r4]\n\ + mov r1, #0x1\n\ + bl dp11b_obj_free\n\ + ldrb r0, [r4]\n\ + mov r1, #0x0\n\ + bl dp11b_obj_free\n\ + mov r0, #0x1\n\ + bl GetBankByIdentity\n\ + ldr r1, ._345 + 4\n\ + strb r0, [r1]\n\ + mov r0, #0x3\n\ +._337:\n\ + bl GetBankByIdentity\n\ + ldr r1, ._345 + 8\n\ + strb r0, [r1]\n\ + mov r0, #0x0\n\ + bl sub_80326EC\n\ + add r0, sp, #0x8\n\ + ldrh r0, [r0]\n\ + bl DoMoveAnim\n\ + ldr r1, ._345 + 12\n\ + ldrb r0, [r4]\n\ +._332:\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r1, ._345 + 16\n\ + str r1, [r0]\n\ + b ._348\n\ +._346:\n\ + .align 2, 0\n\ +._345:\n\ + .word gBattleTypeFlags\n\ + .word gBankAttacker\n\ + .word gBankTarget\n\ + .word gBattleBankFunc\n\ + .word debug_sub_803107C+1\n\ +._343:\n\ + add r1, sp, #0x8\n\ + add r0, r1, #0\n\ + ldrh r0, [r0]\n\ + sub r0, r0, #0x9\n\ + strh r0, [r1]\n\ +._287:\n\ + add r1, sp, #0x8\n\ + add r0, r1, #0\n\ + ldrh r0, [r0]\n\ + sub r0, r0, #0x1\n\ + strh r0, [r1]\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + bgt ._347 @cond_branch\n\ + mov r2, #0xb1\n\ + lsl r2, r2, #0x1\n\ + add r0, r2, #0\n\ + strh r0, [r1]\n\ +._347:\n\ + ldr r1, ._349\n\ + ldr r4, ._349 + 4\n\ + ldrb r0, [r4]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + mov r0, #0x64\n\ + mul r0, r0, r1\n\ + ldr r1, ._349 + 8\n\ + add r0, r0, r1\n\ + mov r1, #0xd\n\ + add r2, sp, #0x8\n\ + bl SetMonData\n\ + ldr r2, ._349 + 12\n\ + ldrb r1, [r4]\n\ + mov r0, #0x58\n\ + mul r0, r0, r1\n\ + add r0, r0, r2\n\ + add r1, sp, #0x8\n\ + ldrh r1, [r1]\n\ + strh r1, [r0, #0xc]\n\ + ldr r5, ._349 + 16\n\ + ldr r1, ._349 + 20\n\ + mov r0, #0x10\n\ + str r0, [sp]\n\ + mov r0, #0x38\n\ + str r0, [sp, #0x4]\n\ + add r0, r5, #0\n\ + mov r2, #0x1\n\ + mov r3, #0x37\n\ + bl Text_FillWindowRect\n\ + add r0, sp, #0x8\n\ + mov r2, #0x0\n\ + ldsh r1, [r0, r2]\n\ + mov r0, #0xd\n\ + mul r1, r1, r0\n\ + ldr r0, ._349 + 24\n\ + add r1, r1, r0\n\ + mov r2, #0x80\n\ + lsl r2, r2, #0x1\n\ + mov r6, #0x37\n\ + str r6, [sp]\n\ + add r0, r5, #0\n\ + mov r3, #0x2\n\ + bl Text_InitWindowAndPrintText\n\ + ldr r4, ._349 + 28\n\ + add r0, sp, #0x8\n\ + mov r2, #0x0\n\ + ldsh r1, [r0, r2]\n\ + add r0, r4, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x3\n\ + bl ConvertIntToDecimalStringN\n\ + mov r2, #0x88\n\ + lsl r2, r2, #0x1\n\ + str r6, [sp]\n\ + add r0, r5, #0\n\ + add r1, r4, #0\n\ + mov r3, #0xa\n\ + bl Text_InitWindowAndPrintText\n\ + b ._348\n\ +._350:\n\ + .align 2, 0\n\ +._349:\n\ + .word gBattlePartyID\n\ + .word gActiveBank\n\ + .word gPlayerParty\n\ + .word gBattleMons\n\ + .word gUnknown_03004210\n\ + .word 0x1016\n\ + .word gMoveNames\n\ + .word gDisplayedStringBattle\n\ +._302:\n\ + ldr r0, ._353\n\ + ldrh r0, [r0, #0x30]\n\ + cmp r0, #0x40\n\ + bne ._351 @cond_branch\n\ + ldr r1, ._353 + 4\n\ + ldrb r0, [r1]\n\ + sub r0, r0, #0x1\n\ + b ._352\n\ +._354:\n\ + .align 2, 0\n\ +._353:\n\ + .word gMain\n\ + .word gAnimMoveTurn\n\ +._351:\n\ + ldr r1, ._359\n\ + ldrb r0, [r1]\n\ + add r0, r0, #0x1\n\ +._352:\n\ + strb r0, [r1]\n\ + ldr r4, ._359 + 4\n\ + ldrb r1, [r1]\n\ + add r0, r4, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x3\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r0, ._359 + 8\n\ + mov r2, #0x8e\n\ + lsl r2, r2, #0x1\n\ + mov r1, #0x39\n\ + str r1, [sp]\n\ + add r1, r4, #0\n\ + mov r3, #0x4\n\ + bl Text_InitWindowAndPrintText\n\ +._348:\n\ + ldr r0, ._359 + 12\n\ + ldrh r2, [r0, #0x28]\n\ + mov r1, #0xc0\n\ + lsl r1, r1, #0x2\n\ + add r0, r1, #0\n\ + and r0, r0, r2\n\ + cmp r0, r1\n\ + bne ._355 @cond_branch\n\ + mov r4, #0x0\n\ + ldr r5, ._359 + 4\n\ + ldr r6, ._359 + 8\n\ +._361:\n\ + add r0, r5, #0\n\ + ldr r1, ._359 + 16\n\ + bl StringCopy\n\ + ldr r1, ._359 + 20\n\ + ldr r0, ._359 + 24\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + mov r0, #0x64\n\ + mul r0, r0, r1\n\ + ldr r1, ._359 + 28\n\ + add r0, r0, r1\n\ + add r1, r4, #0\n\ + add r1, r1, #0xd\n\ + bl GetMonData\n\ + mov r1, #0xd\n\ + mul r1, r1, r0\n\ + ldr r0, ._359 + 32\n\ + add r1, r1, r0\n\ + add r0, r5, #0\n\ + bl StringAppend\n\ + lsl r0, r4, #0x14\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x11\n\ + add r0, r0, r1\n\ + lsr r2, r0, #0x10\n\ + mov r0, #0x1\n\ + and r0, r0, r4\n\ + mov r3, #0x2\n\ + cmp r0, #0\n\ + beq ._356 @cond_branch\n\ + mov r3, #0xa\n\ +._356:\n\ + cmp r4, #0x1\n\ + bhi ._357 @cond_branch\n\ + mov r0, #0x37\n\ + b ._358\n\ +._360:\n\ + .align 2, 0\n\ +._359:\n\ + .word gAnimMoveTurn\n\ + .word gDisplayedStringBattle\n\ + .word gUnknown_03004210\n\ + .word gMain\n\ + .word BattleText_Format\n\ + .word gBattlePartyID\n\ + .word gActiveBank\n\ + .word gPlayerParty\n\ + .word gMoveNames\n\ +._357:\n\ + mov r0, #0x39\n\ +._358:\n\ + str r0, [sp]\n\ + add r0, r6, #0\n\ + add r1, r5, #0\n\ + bl Text_InitWindow\n\ + ldr r0, ._362\n\ + bl Text_PrintWindow8002F44\n\ + add r0, r4, #1\n\ + lsl r0, r0, #0x18\n\ + lsr r4, r0, #0x18\n\ + cmp r4, #0x3\n\ + bls ._361 @cond_branch\n\ + ldr r1, ._362 + 4\n\ + ldr r0, ._362 + 8\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r1, ._362 + 12\n\ + str r1, [r0]\n\ +._355:\n\ + add sp, sp, #0xc\n\ + pop {r4, r5, r6}\n\ + pop {r0}\n\ + bx r0\n\ +._363:\n\ + .align 2, 0\n\ +._362:\n\ + .word gUnknown_03004210\n\ + .word gBattleBankFunc\n\ + .word gActiveBank\n\ + .word sub_802C68C+1"); +} + +__attribute__((naked)) +void debug_sub_803107C(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + add sp, sp, #0xfffffffc\n\ + mov r7, #0x0\n\ + ldr r0, ._369\n\ + ldr r0, [r0]\n\ + bl _call_via_r0\n\ + ldr r0, ._369 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + bne ._364 @cond_branch\n\ + mov r0, #0x1\n\ + bl sub_80326EC\n\ + ldr r4, ._369 + 8\n\ + ldrb r0, [r4]\n\ + mov r1, #0x1\n\ + mov r2, #0x7\n\ + mov r3, #0x1\n\ + bl dp11b_obj_instanciate\n\ + ldrb r0, [r4]\n\ + mov r1, #0x0\n\ + mov r2, #0x7\n\ + mov r3, #0x1\n\ + bl dp11b_obj_instanciate\n\ + ldr r0, ._369 + 12\n\ + add r2, r0, #0\n\ + add r2, r2, #0x3e\n\ + mov r1, #0x3f\n\ +._366:\n\ + ldrb r0, [r2]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._365 @cond_branch\n\ + add r0, r7, #1\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ +._365:\n\ + add r2, r2, #0x44\n\ + sub r1, r1, #0x1\n\ + cmp r1, #0\n\ + bge ._366 @cond_branch\n\ + ldr r4, ._369 + 16\n\ + add r0, r4, #0\n\ + add r1, r7, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x2\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r6, ._369 + 20\n\ + mov r2, #0x91\n\ + lsl r2, r2, #0x1\n\ + mov r5, #0x39\n\ + str r5, [sp]\n\ + add r0, r6, #0\n\ + add r1, r4, #0\n\ + mov r3, #0x8\n\ + bl Text_InitWindowAndPrintText\n\ + bl GetTaskCount\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ + add r0, r4, #0\n\ + add r1, r7, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x2\n\ + bl ConvertIntToDecimalStringN\n\ + mov r2, #0x93\n\ + lsl r2, r2, #0x1\n\ + str r5, [sp]\n\ + add r0, r6, #0\n\ + add r1, r4, #0\n\ + mov r3, #0xb\n\ + bl Text_InitWindowAndPrintText\n\ + mov r1, #0x0\n\ + mov r7, #0x0\n\ + ldr r0, ._369 + 24\n\ + mov r3, #0x1\n\ + ldr r2, [r0]\n\ +._368:\n\ + add r0, r3, #0\n\ + LSL r0, r1\n\ + and r0, r0, r2\n\ + cmp r0, #0\n\ + beq ._367 @cond_branch\n\ + add r0, r7, #1\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ +._367:\n\ + add r1, r1, #0x1\n\ + cmp r1, #0x1f\n\ + ble ._368 @cond_branch\n\ + ldr r4, ._369 + 16\n\ + add r0, r4, #0\n\ + add r1, r7, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x2\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r0, ._369 + 20\n\ + mov r2, #0x95\n\ + lsl r2, r2, #0x1\n\ + mov r1, #0x39\n\ + str r1, [sp]\n\ + add r1, r4, #0\n\ + mov r3, #0xe\n\ + bl Text_InitWindowAndPrintText\n\ + ldr r1, ._369 + 28\n\ + ldr r0, ._369 + 8\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r1, ._369 + 32\n\ + str r1, [r0]\n\ +._364:\n\ + add sp, sp, #0x4\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._370:\n\ + .align 2, 0\n\ +._369:\n\ + .word gAnimScriptCallback\n\ + .word gAnimScriptActive\n\ + .word gActiveBank\n\ + .word gSprites\n\ + .word gDisplayedStringBattle\n\ + .word gUnknown_03004210\n\ + .word gOamMatrixAllocBitmap\n\ + .word gBattleBankFunc\n\ + .word debug_sub_8030C24+1"); +} +#endif + void sub_802D204(void) { if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 0d193d68f..5896e5e18 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle_anim_81258BC.h" #include "battle.h" +#include "battle_interface.h" #include "battle_message.h" #include "data2.h" #include "link.h" @@ -272,6 +273,17 @@ void bx_battle_menu_t6_2(void) sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); } } +#if DEBUG + else if (gMain.newKeys & R_BUTTON) + { + if (!ewram17810[gActiveBank].unk0_5) + move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, 4, 0); + } + else if (gMain.newKeys & START_BUTTON) + { + sub_804454C(); + } +#endif } void sub_812B65C(void) diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index 97568d254..9be026d53 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -79,8 +79,8 @@ extern const u16 gBattleInterfaceStatusIcons_DynPal[]; static void sub_8043D5C(struct Sprite *); static const void *sub_8043CDC(u8); -static void sub_8044210(u8, s16, u8); -static void draw_status_ailment_maybe(u8); +/*static*/ void sub_8044210(u8, s16, u8); +/*static*/ void draw_status_ailment_maybe(u8); extern void sub_8045180(struct Sprite *); static void sub_8045110(struct Sprite *); static void sub_8045048(struct Sprite *); @@ -651,7 +651,7 @@ void sub_8043F44(u8 a) #define CHAR_LV_SEPARATOR CHAR_PERIOD #endif -static void sub_8043FC0(u8 a, u8 b) +/*static*/ void sub_8043FC0(u8 a, u8 b) { u8 str[30]; void *const *r7; @@ -905,7 +905,7 @@ _0804420C: .4byte 0x04000008\n\ } #endif -static void sub_8044210(u8 a, s16 b, u8 c) +/*static*/ void sub_8044210(u8 a, s16 b, u8 c) { u8 str[0x14]; u8 *ptr; @@ -1277,6 +1277,8 @@ _08044548: .4byte 0x04000008\n\ } #endif +extern u8 gUnknown_020297ED; + void sub_804454C(void) { s32 i; @@ -1285,7 +1287,11 @@ void sub_804454C(void) for (i = 0; i < gNoOfAllBanks; i++) { if (gSprites[gHealthboxIDs[i]].callback == SpriteCallbackDummy +#if DEBUG + && (gUnknown_020297ED != 0 || GetBankSide(i) != 1) +#else && GetBankSide(i) != 1 +#endif && (IsDoubleBattle() || GetBankSide(i) != 0)) { u8 r6; @@ -2359,7 +2365,7 @@ void sub_8045180(struct Sprite *sprite) sprite->pos2.y = gSprites[spriteId].pos2.y; } -static void sub_80451A0(u8 a, struct Pokemon *pkmn) +/*static*/ void sub_80451A0(u8 a, struct Pokemon *pkmn) { u8 nickname[POKEMON_NAME_LENGTH]; u8 gender; @@ -2507,7 +2513,7 @@ static void sub_8045458(u8 a, u8 b) } } -static void draw_status_ailment_maybe(u8 a) +/*static*/ void draw_status_ailment_maybe(u8 a) { s32 r4; s32 r4_2; @@ -2649,7 +2655,7 @@ static u8 sub_80457E8(u8 a, u8 b) return ret; } -static void sub_80458B0(u8 a) +/*static*/ void sub_80458B0(u8 a) { u8 *r6; u8 r8; @@ -2675,7 +2681,7 @@ static void sub_80458B0(u8 a) } -static void sub_8045998(u8 a) +/*static*/ void sub_8045998(u8 a) { u8 *r7; u8 status; @@ -2752,6 +2758,15 @@ void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) { if (c == 3 || c == 0) sub_8043FC0(a, GetMonData(pkmn, MON_DATA_LEVEL)); +#if DEBUG + if (gUnknown_020297ED == 1) + { + if (c == 1 || c == 0) + sub_80440EC(a, GetMonData(pkmn, MON_DATA_HP), 0); + if (c == 2 || c == 0) + sub_80440EC(a, GetMonData(pkmn, MON_DATA_MAX_HP), 1); + } +#endif if (c == 5 || c == 0) { load_gfxc_health_bar(0); diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index 4979760d7..9dd1d7b53 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -8,9 +8,35 @@ #include "strings2.h" #include "trainer_card.h" +struct DebugStruct1 +{ + u16 var0; + u8 var1[10]; +}; + extern struct LinkPlayerMapObject gLinkPlayerMapObjects[4]; extern u8 gBattleOutcome; +#if DEBUG +const struct DebugStruct1 gUnknown_Debug_4245CC[] = +{ + { 1, _("NUMBER1") }, + { 2, _("ナンバー2") }, + { 3, _("ナンバー3") }, + { 4, _("ナンバー4") }, + { 5, _("ナンバー5") }, + { 6, _("ナンバー6") }, + { 7, _("ナンバー7") }, +}; + +const u8 gUnknown_Debug_8424620[][4] = +{ + { 1, 1, 0, 0 }, + { 2, 1, 0, 0 }, + { 3, 1, 0, 0 }, +}; +#endif + static void InitLinkBattleRecord(struct LinkBattleRecord *record) { CpuFill16(0, record, sizeof(struct LinkBattleRecord)); @@ -197,6 +223,66 @@ void UpdateLinkBattleRecords(int id) gLinkPlayers[gLinkPlayerMapObjects[id].linkPlayerId].language); } +#if DEBUG +__attribute__((naked)) +void debug_sub_81257E0(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + add sp, sp, #0xfffffffc\n\ + bl InitLinkBattleRecords\n\ + mov r5, #0x0\n\ + ldr r6, ._62\n\ + sub r0, r6, #2\n\ + mov r8, r0\n\ + ldr r7, ._62 + 4\n\ +._61:\n\ + ldr r0, ._62 + 8\n\ + lsl r3, r5, #0x2\n\ + add r3, r3, r0\n\ + ldrb r4, [r3]\n\ + sub r4, r4, #0x1\n\ + lsl r0, r4, #0x1\n\ + add r0, r0, r4\n\ + lsl r0, r0, #0x2\n\ + add r1, r0, r6\n\ + add r0, r0, r8\n\ + ldrh r2, [r0]\n\ + ldrb r3, [r3, #0x1]\n\ + ldr r0, ._62 + 12\n\ + lsl r4, r4, #0x2\n\ + add r4, r4, r0\n\ + ldrb r4, [r4, #0x1]\n\ + lsl r0, r4, #0x3\n\ + sub r0, r0, r4\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r7\n\ + ldrb r0, [r0, #0x1a]\n\ + str r0, [sp]\n\ + ldr r0, ._62 + 16\n\ + bl UpdateLinkBattleRecords_\n\ + add r5, r5, #0x1\n\ + cmp r5, #0x2\n\ + bls ._61 @cond_branch\n\ + add sp, sp, #0x4\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._63:\n\ + .align 2, 0\n\ +._62:\n\ + .word gUnknown_Debug_4245CC+2\n\ + .word gLinkPlayers\n\ + .word gUnknown_Debug_8424620\n\ + .word gLinkPlayerMapObjects\n\ + .word gSaveBlock1+0x30b8"); +} +#endif + static void PrintLinkBattleWinsLossesDraws(struct LinkBattleRecord *records) { ConvertIntToDecimalStringN_DigitWidth6(gStringVar1, GetGameStat(GAME_STAT_LINK_BATTLE_WINS), STR_CONV_MODE_RIGHT_ALIGN, 4); @@ -240,7 +326,8 @@ static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y) } } -void ShowLinkBattleRecords(void) { +void ShowLinkBattleRecords(void) +{ s32 i; Menu_DrawStdWindowFrame(1, 0, 28, 18); sub_8072BD8(gOtherText_BattleResults, 0, 1, 240); diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c index 87b6952ff..194a002d3 100644 --- a/src/battle/battle_util.c +++ b/src/battle/battle_util.c @@ -22,6 +22,8 @@ #include "constants/species.h" #include "constants/weather.h" +extern u8 gUnknown_02023A14_50; + extern const u8* gBattlescriptCurrInstr; extern u8 gActiveBank; extern u8 gBattleBufferB[4][0x200]; @@ -1736,17 +1738,14 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) else moveType = gBattleMoves[move].type; - //_080184AC switch (caseID) { case ABILITYEFFECT_ON_SWITCHIN: // 0 - //_08018518 if (gBankAttacker >= gNoOfAllBanks) gBankAttacker = bank; switch (gLastUsedAbility) { case 0xFF: //weather from overworld - //_08018586 switch (GetCurrentWeather()) { case WEATHER_RAIN_LIGHT: @@ -1786,7 +1785,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_DRIZZLE: - //_08018680 if (!(gBattleWeather & WEATHER_RAIN_PERMANENT)) { gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY); @@ -1796,7 +1794,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_SAND_STREAM: - //_080186B8 if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT)) { gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); @@ -1806,7 +1803,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_DROUGHT: - //_080186F0 if (!(gBattleWeather & WEATHER_SUN_PERMANENT)) { gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); @@ -1816,7 +1812,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_INTIMIDATE: - //_08018728 if (!(gSpecialStatuses[bank].intimidatedPoke)) { gStatuses3[bank] |= STATUS3_INTIMIDATE_POKES; @@ -1824,7 +1819,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_FORECAST: - //_0801875C effect = CastformDataTypeChange(bank); if (effect != 0) { @@ -1834,7 +1828,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_TRACE: - //_080187A0 if (!(gSpecialStatuses[bank].traced)) { gStatuses3[bank] |= STATUS3_TRACE; @@ -1843,7 +1836,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) break; case ABILITY_CLOUD_NINE: case ABILITY_AIR_LOCK: - //_080187DC { // that's a weird choice for a variable, why not use i or bank? for (target1 = 0; target1 < gNoOfAllBanks; target1++) @@ -1862,7 +1854,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_ENDTURN: // 1 - //_08018814 if (gBattleMons[bank].hp != 0) { gBankAttacker = bank; @@ -1922,7 +1913,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_MOVES_BLOCK: // 2 - //_08018A40 if (gLastUsedAbility == ABILITY_SOUNDPROOF) { for (i = 0; gSoundMovesTable[i] != 0xFFFF; i++) @@ -1940,7 +1930,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_ABSORBING: // 3 - //_08018AD8 if (move) { switch (gLastUsedAbility) @@ -2010,11 +1999,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_CONTACT: // 4 - //_08018CF0 switch (gLastUsedAbility) { case ABILITY_COLOR_CHANGE: - //_08018DCC if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) && move != MOVE_STRUGGLE && gBattleMoves[move].power != 0 @@ -2035,7 +2022,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_ROUGH_SKIN: - //_08018E94 if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) && gBattleMons[gBankAttacker].hp != 0 && !gProtectStructs[gBankAttacker].confusionSelfDmg @@ -2051,100 +2037,195 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_EFFECT_SPORE: - //_08018F54 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (Random() % 10) == 0) - { - do - { - gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3; - } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0); - if (gBattleCommunication[MOVE_EFFECT_BYTE] == 3) - gBattleCommunication[MOVE_EFFECT_BYTE] += 2; - gBattleCommunication[MOVE_EFFECT_BYTE] += 0x40; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } + if (DEBUG && (gUnknown_02023A14_50 & 4)) + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + { + do + { + gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3; + } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0); + if (gBattleCommunication[MOVE_EFFECT_BYTE] == 3) + gBattleCommunication[MOVE_EFFECT_BYTE] += 2; + gBattleCommunication[MOVE_EFFECT_BYTE] += 0x40; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } + else + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (Random() % 10) == 0) + { + do + { + gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3; + } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0); + if (gBattleCommunication[MOVE_EFFECT_BYTE] == 3) + gBattleCommunication[MOVE_EFFECT_BYTE] += 2; + gBattleCommunication[MOVE_EFFECT_BYTE] += 0x40; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } break; case ABILITY_POISON_POINT: - //_0801904C - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (Random() % 3) == 0) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = 0x42; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } + if (DEBUG && (gUnknown_02023A14_50 & 4)) + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x42; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } + else + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (Random() % 3) == 0) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x42; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } break; case ABILITY_STATIC: - //_08019128 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (Random() % 3) == 0) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = 0x45; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } + if (DEBUG && (gUnknown_02023A14_50 & 4)) + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x45; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } + else + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (Random() % 3) == 0) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x45; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } break; case ABILITY_FLAME_BODY: - //_08019204 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (Random() % 3) == 0) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = 0x43; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } + if (DEBUG && (gUnknown_02023A14_50 & 4)) + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x43; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } + else + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (Random() % 3) == 0) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x43; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } break; case ABILITY_CUTE_CHARM: - //_080192E0 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && gBattleMons[gBankTarget].hp != 0 - && (Random() % 3) == 0 - && gBattleMons[gBankAttacker].ability != ABILITY_OBLIVIOUS - && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) - && !(gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) - && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != 0xFF - && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != 0xFF) - { - gBattleMons[gBankAttacker].status2 |= (gBitTable[gBankTarget] << 0x10); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_CuteCharmActivates; - effect++; - } + if (DEBUG && (gUnknown_02023A14_50 & 4)) + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && gBattleMons[gBankTarget].hp != 0 + && gBattleMons[gBankAttacker].ability != ABILITY_OBLIVIOUS + && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) + && !(gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) + && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != 0xFF + && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != 0xFF) + { + gBattleMons[gBankAttacker].status2 |= (gBitTable[gBankTarget] << 0x10); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_CuteCharmActivates; + effect++; + } + } + else + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && gBattleMons[gBankTarget].hp != 0 + && (Random() % 3) == 0 + && gBattleMons[gBankAttacker].ability != ABILITY_OBLIVIOUS + && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) + && !(gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) + && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != 0xFF + && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != 0xFF) + { + gBattleMons[gBankAttacker].status2 |= (gBitTable[gBankTarget] << 0x10); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_CuteCharmActivates; + effect++; + } + } break; } break; case ABILITYEFFECT_IMMUNITY: // 5 - //_08019448 { for (bank = 0; bank < gNoOfAllBanks; bank++) { @@ -2228,7 +2309,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_FORECAST: // 6 - //_080197B4 { for (bank = 0; bank < gNoOfAllBanks; bank++) { @@ -2247,7 +2327,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_SYNCHRONIZE: // 7 - //_08019804 if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) { gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); @@ -2263,7 +2342,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_ATK_SYNCHRONIZE: // 8 - //_08019880 if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) { gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); @@ -2279,7 +2357,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_INTIMIDATE1: // 9 - //_080198FC for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleMons[i].ability == ABILITY_INTIMIDATE && gStatuses3[i] & STATUS3_INTIMIDATE_POKES) @@ -2294,7 +2371,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_TRACE: // 11 - //_08019940 for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleMons[i].ability == ABILITY_TRACE && (gStatuses3[i] & STATUS3_TRACE)) @@ -2308,7 +2384,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0 && gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) { - //_080199AE gActiveBank = GetBankByIdentity(((Random() & 1) * 2) | side); gBattleMons[i].ability = gBattleMons[gActiveBank].ability; gLastUsedAbility = gBattleMons[gActiveBank].ability; @@ -2316,7 +2391,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } else if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0) { - //_08019A34 gActiveBank = target1; gBattleMons[i].ability = gBattleMons[gActiveBank].ability; gLastUsedAbility = gBattleMons[gActiveBank].ability; @@ -2324,7 +2398,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } else if (gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) { - //_08019A78 gActiveBank = target2; gBattleMons[i].ability = gBattleMons[gActiveBank].ability; gLastUsedAbility = gBattleMons[gActiveBank].ability; @@ -2332,7 +2405,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } } else - //_08019ABC { gActiveBank = target1; if (gBattleMons[target1].ability && gBattleMons[target1].hp) @@ -2364,7 +2436,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_INTIMIDATE2: // 10 - //_08019B1C for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleMons[i].ability == ABILITY_INTIMIDATE && (gStatuses3[i] & STATUS3_INTIMIDATE_POKES)) @@ -2380,7 +2451,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_CHECK_OTHER_SIDE: // 12 - //_08019B60 side = GetBankSide(bank); for (i = 0; i < gNoOfAllBanks; i++) { @@ -2392,7 +2462,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_CHECK_BANK_SIDE: // 13 - //_08019BBC side = GetBankSide(bank); for (i = 0; i < gNoOfAllBanks; i++) { @@ -2404,7 +2473,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_FIELD_SPORT: // 14 - //_08019C18 switch (gLastUsedAbility) { case 0xFD: @@ -2434,7 +2502,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_CHECK_ON_FIELD: // 19 - //_08019CD4 for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleMons[i].ability == ability && gBattleMons[i].hp != 0) @@ -2445,7 +2512,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK: // 15 - //_08019D18 for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleMons[i].ability == ability && i != bank) @@ -2456,7 +2522,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_COUNT_OTHER_SIZE: // 16 - //_08019D5C side = GetBankSide(bank); for (i = 0; i < gNoOfAllBanks; i++) { @@ -2468,7 +2533,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_COUNT_BANK_SIDE: // 17 - //_08019DB8 side = GetBankSide(bank); for (i = 0; i < gNoOfAllBanks; i++) { @@ -2480,7 +2544,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_COUNT_ON_FIELD: // 18 - //_08019F44 for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleMons[i].ability == ability && i != bank) @@ -2491,7 +2554,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; } - //_08019F76 if (effect && caseID < 0xC && gLastUsedAbility != 0xFF) RecordAbilityBattle(bank, gLastUsedAbility); } @@ -3385,17 +3447,25 @@ u8 IsMonDisobedient(void) if (gBattleTypeFlags & BATTLE_TYPE_LINK || GetBankSide(gBankAttacker) == 1 - || !IsOtherTrainer(gBattleMons[gBankAttacker].otId, gBattleMons[gBankAttacker].otName) - || FlagGet(FLAG_BADGE08_GET)) - return 0; + || !IsOtherTrainer(gBattleMons[gBankAttacker].otId, gBattleMons[gBankAttacker].otName)) + return 0; - obedienceLevel = 10; - if (FlagGet(FLAG_BADGE02_GET)) - obedienceLevel = 30; - if (FlagGet(FLAG_BADGE04_GET)) - obedienceLevel = 50; - if (FlagGet(FLAG_BADGE06_GET)) - obedienceLevel = 70; + if (DEBUG && (gUnknown_02023A14_50 & 0x40)) + { + obedienceLevel = 10; + } + else + { + if (FlagGet(FLAG_BADGE08_GET)) + return 0; + obedienceLevel = 10; + if (FlagGet(FLAG_BADGE02_GET)) + obedienceLevel = 30; + if (FlagGet(FLAG_BADGE04_GET)) + obedienceLevel = 50; + if (FlagGet(FLAG_BADGE06_GET)) + obedienceLevel = 70; + } if (gBattleMons[gBankAttacker].level <= obedienceLevel) return 0; diff --git a/src/contest.c b/src/contest.c index ce29d80b0..e2695627e 100644 --- a/src/contest.c +++ b/src/contest.c @@ -33,6 +33,8 @@ #include "util.h" #include "contest_ai.h" +extern u8 gUnknown_020297ED; + extern u8 AreMovesContestCombo(u16, u16); // I don't think this is a bool extern void sub_80C8A38(u8); extern void sub_80C8AD0(u8); @@ -238,6 +240,7 @@ void sub_80B0BC4(u8, bool8); void sub_80B0C5C(struct Sprite *); void sub_80B0CB0(struct Sprite *); void sub_80B0CDC(u8, int); +void unref_sub_80B0CF4(void); void sub_80B0D7C(void); void sub_80B1118(void); void sub_80B114C(u8); @@ -613,6 +616,10 @@ void sub_80AB9A0(u8 taskId) void ContestMainCallback2(void) { +#if DEBUG + if (gUnknown_020297ED == 1 && gMain.newKeys == 4) + unref_sub_80B0CF4(); +#endif AnimateSprites(); RunTasks(); BuildOamBuffer(); @@ -732,6 +739,8 @@ void sub_80ABCDC(u8 taskId) gTasks[taskId].func = sub_80ABEA0; } +void debug_sub_80B9EBC(u8); + // Handle move selection input void sub_80ABEA0(u8 taskId) { @@ -804,10 +813,193 @@ void sub_80ABEA0(u8 taskId) if (numMoves > 1) PlaySE(SE_SELECT); break; +#if DEBUG + case START_BUTTON: + if (gUnknown_020297ED == 1 && !(gIsLinkContest & 1)) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = gContestMons[gContestPlayerMonIndex].moves[0]; + gTasks[taskId].func = debug_sub_80B9EBC; + } + break; +#endif } } } +#if DEBUG + +void debug_sub_80BA054(u8); + +void debug_sub_80B9EBC(u8 taskId) +{ + u8 text[100]; + + switch (gTasks[taskId].data[0]) + { + case 0: + Text_FillWindowRectDefPalette( + &gUnknown_03004210, + 0, + gUnknown_083CA340[0][0], + gUnknown_083CA340[0][1], + gUnknown_083CA340[0][2], + gUnknown_083CA340[0][3]); + Text_InitWindowAndPrintText( + &gUnknown_03004210, + gMoveNames[gTasks[taskId].data[1]], + 776, + gUnknown_083CA340[0][0], + gUnknown_083CA340[0][1]); + ConvertIntToDecimalStringN(text, gTasks[taskId].data[1], 2, 3); + Text_InitWindowAndPrintText( + &gUnknown_03004210, + text, + 796, + gUnknown_083CA340[1][0], + gUnknown_083CA340[1][1]); + sub_80AED58(); + sub_80AEBEC(gTasks[taskId].data[1]); + gTasks[taskId].data[0]++; + break; + case 1: + switch (gMain.newAndRepeatedKeys) + { + case 0x20: + gTasks[taskId].data[1] -= 1; + if (gTasks[taskId].data[1] < 1) + gTasks[taskId].data[1] = 354; + gTasks[taskId].data[0]--; + break; + case 0x200: + gTasks[taskId].data[1] -= 10; + if (gTasks[taskId].data[1] < 1) + gTasks[taskId].data[1] = 354; + gTasks[taskId].data[0]--; + break; + case 0x10: + gTasks[taskId].data[1] += 1; + if (gTasks[taskId].data[1] > 354) + gTasks[taskId].data[1] = 1; + gTasks[taskId].data[0]--; + break; + case 0x100: + gTasks[taskId].data[1] += 10; + if (gTasks[taskId].data[1] > 354) + gTasks[taskId].data[1] = 1; + gTasks[taskId].data[0]--; + break; + case 4: + case 8: + gBattle_BG0_Y = 0; + gBattle_BG2_Y = 0; + sub_80B1BDC(); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = debug_sub_80BA054; + break; + case 2: + gBattle_BG0_Y = DISPLAY_HEIGHT; + gBattle_BG2_Y = DISPLAY_HEIGHT; + gContestMons[gContestPlayerMonIndex].moves[0] = gTasks[taskId].data[1]; + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].func = sub_80ABCDC; + break; + } + break; + } +} + +void debug_sub_80BA054(u8 taskId) +{ + s32 i; + u8 r6; + + switch (gTasks[taskId].data[0]) + { + case 0: + for (i = 0; i < 4; i++) + gBattleMonForms[i] = 0; + memset(&shared19348, 0, sizeof(shared19348)); + sub_80B28F0(gContestPlayerMonIndex); + r6 = sub_80AE9FC( + gContestMons[gContestPlayerMonIndex].species, + gContestMons[gContestPlayerMonIndex].otId, + gContestMons[gContestPlayerMonIndex].personality); + gSprites[r6].pos2.x = 120; + gSprites[r6].callback = sub_80AD8FC; + gTasks[taskId].data[2] = r6; + gObjectBankIDs[gBankAttacker] = r6; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[0]++; + sContest.unk1925E = 0; + break; + case 1: + r6 = gTasks[taskId].data[2]; + if (gSprites[r6].callback == SpriteCallbackDummy) + { + sContestantStatus[gContestPlayerMonIndex].currMove = gTasks[taskId].data[1]; + sub_80B2790(gContestPlayerMonIndex); + sub_80B28F0(gContestPlayerMonIndex); + SelectContestMoveBankTarget(gTasks[taskId].data[1]); + DoMoveAnim(gTasks[taskId].data[1]); + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[0]++; + } + break; + case 2: + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + sub_80B28CC(gContestPlayerMonIndex); + if (sContest.unk1925E != 0) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[0] = 20; + } + else + { + gTasks[taskId].data[0]++; + } + } + break; + case 3: + gTasks[taskId].data[3]++; + if (gTasks[taskId].data[3] == 21) + { + r6 = gTasks[taskId].data[2]; + gSprites[r6].callback = sub_80AD92C; + sub_80B1B14(); + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[0]++; + } + break; + case 4: + r6 = gTasks[taskId].data[2]; + if (gSprites[r6].invisible) + { + FreeSpriteOamMatrix(&gSprites[r6]); + DestroySprite(&gSprites[r6]); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = debug_sub_80B9EBC; + gBattle_BG0_Y = DISPLAY_HEIGHT; + gBattle_BG2_Y = DISPLAY_HEIGHT; + } + break; + case 20: + if (gTasks[taskId].data[10]++ > 30) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[0] = 1; + } + break; + } +} + +#endif + void sub_80AC0AC(s8 a) { MenuCursor_SetPos814A880(4, 88 + a * 16); diff --git a/src/data/pokedex_entries_de.h b/src/data/pokedex_entries_de.h index 0f64cba66..413b73d90 100644 --- a/src/data/pokedex_entries_de.h +++ b/src/data/pokedex_entries_de.h @@ -6337,7 +6337,8 @@ static const u8 DexDescription_Deoxys_2[] = _( "dieses POKéMON ist sein Gehirn."); #endif -static const struct PokedexEntry gPokedexEntries[] = { +const struct PokedexEntry gPokedexEntries[] = +{ { // Dummy .categoryName = _("UNBEKANNT"), diff --git a/src/data/pokedex_entries_en.h b/src/data/pokedex_entries_en.h index 86da3d67b..933b1fc7d 100644 --- a/src/data/pokedex_entries_en.h +++ b/src/data/pokedex_entries_en.h @@ -5389,7 +5389,7 @@ static const u8 DexDescription_Deoxys_2[] = _( "chest appears to be its brain."); #endif -static const struct PokedexEntry gPokedexEntries[] = +const struct PokedexEntry gPokedexEntries[] = { { //Dummy .categoryName = _("UNKNOWN"), diff --git a/src/debug/kagaya_debug_menu.c b/src/debug/kagaya_debug_menu.c new file mode 100644 index 000000000..3cb36ce0c --- /dev/null +++ b/src/debug/kagaya_debug_menu.c @@ -0,0 +1,183 @@ +#if DEBUG + +#include "global.h" +#include "field_effect.h" +#include "field_control_avatar.h" +#include "field_player_avatar.h" +#include "main.h" +#include "menu.h" +#include "overworld.h" +#include "palette.h" +#include "random.h" +#include "region_map.h" +#include "script.h" +#include "slot_machine.h" +#include "trainer_card.h" + +extern u8 (*gMenuCallback)(void); + +void InitKagayaDebugMenu_B(void); +u8 debug_sub_80B061C(void); +u8 KagayaDebugMenu_TrainerCard(void); +u8 debug_sub_80B068C(void); +u8 KagayaDebugMenu_CardToExchange(void); +u8 debug_sub_80B06E0(void); +u8 KagayaDebugMenu_SlotMachine(void); +u8 Kagaya_80B0734(void); +u8 debug_sub_80B07DC(void); + +const u8 Str_83EBB34[] = _("Trainer’s card"); +const u8 Str_83EBB43[] = _("Card to exchange"); +const u8 Str_83EBB54[] = _("Slot machine"); + +const struct MenuAction _83EBB64[] = +{ + { Str_83EBB34, KagayaDebugMenu_TrainerCard }, + { Str_83EBB43, KagayaDebugMenu_CardToExchange }, + { Str_83EBB54, KagayaDebugMenu_SlotMachine }, +}; + +u8 InitKagayaDebugMenu_A(void) +{ + InitKagayaDebugMenu_B(); + return 0; +} + +void InitKagayaDebugMenu_B(void) +{ + Menu_EraseScreen(); + Menu_DrawStdWindowFrame(0, 0, 14, 7); + Menu_PrintItems(2, 1, 3, _83EBB64); + InitMenu(0, 1, 1, 3, 0, 13); + gMenuCallback = debug_sub_80B061C; +} + +u8 debug_sub_80B061C(void) +{ + s8 input = Menu_ProcessInput(); + + if (input == -2) + { + return 0; + } + else if (input == -1) + { + CloseMenu(); + return 1; + } + else + { + gMenuCallback = _83EBB64[input].func; + return 0; + } +} + +u8 KagayaDebugMenu_TrainerCard(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gMenuCallback = debug_sub_80B068C; + return 0; +} + +u8 debug_sub_80B068C(void) +{ + if (!UpdatePaletteFade()) + { + debug_sub_80A0710(sub_805469C); + CloseMenu(); + ScriptContext2_Enable(); + return 1; + } + return 0; +} + +u8 KagayaDebugMenu_CardToExchange(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gMenuCallback = debug_sub_80B06E0; + return 0; +} + +u8 debug_sub_80B06E0(void) +{ + if (!UpdatePaletteFade()) + { + debug_sub_80A073C(sub_805469C); + CloseMenu(); + ScriptContext2_Enable(); + return 1; + } + return 0; +} + +u8 KagayaDebugMenu_SlotMachine(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gMenuCallback = Kagaya_80B0734; + return 0; +} + +u8 Kagaya_80B0734(void) +{ + if (!UpdatePaletteFade()) + { + debug_sub_811609C(Random() % 6, sub_805469C); + CloseMenu(); + ScriptContext2_Enable(); + return 1; + } + return 0; +} + +u8 debug_sub_80B0770(void) +{ + if (!(gPlayerAvatar.flags & 8)) + { + CloseMenu(); + if (IsPlayerFacingSurfableFishableWater()) + { + gFieldEffectArguments[0] = 0; + FieldEffectStart(9); + } + } + else + { + CloseMenu(); + } + return 1; +} + +u8 debug_sub_80B07B0(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gMenuCallback = debug_sub_80B07DC; + return 0; +} + +u8 debug_sub_80B07DC(void) +{ + if (!UpdatePaletteFade()) + { + CloseMenu(); + SetMainCallback2(CB2_InitFlyRegionMap); + return 1; + } + return 0; +} + +u8 debug_sub_80B0800(void) +{ + u8 r2; + + CloseMenu(); + r2 = sub_8068F18(); + if (r2 != 0) + { + gFieldEffectArguments[0] = 0; + gFieldEffectArguments[1] = r2 - 1; + FieldEffectStart(0x2C); + } + return 1; +} + +#endif // DEBUG diff --git a/src/debug/nakamura_debug_menu.c b/src/debug/nakamura_debug_menu.c new file mode 100644 index 000000000..b8c4ed73e --- /dev/null +++ b/src/debug/nakamura_debug_menu.c @@ -0,0 +1,188 @@ +#if DEBUG +#include "global.h" +#include "menu.h" + +EWRAM_DATA u8 _nakamuraData0 = 0; +EWRAM_DATA u8 _nakamuraData1 = 0; +EWRAM_DATA u8 _nakamuraData2 = 0; +EWRAM_DATA u8 _nakamuraData3 = 0; +EWRAM_DATA u8 _nakamuraData4 = 0; +EWRAM_DATA u8 _nakamuraData5 = 0; +EWRAM_DATA u16 _nakamuraData6 = 0; +EWRAM_DATA u16 _nakamuraData8 = 0; +EWRAM_DATA u16 _nakamuraDataA = 0; +EWRAM_DATA u16 _nakamuraDataC = 0; + +__attribute__((unused)) static u8 _nakamuraStatic0[0x18]; +__attribute__((unused)) static u8 _nakamuraStatic18; + +asm(".global _nakamuraStatic0"); +asm(".global _nakamuraStatic18"); + +u8 debug_sub_815FC54(); +u8 debug_sub_815F2B4(); +u8 debug_sub_815FC94(); +u8 debug_sub_815FB1C(); +u8 debug_sub_815F2F4(); +u8 debug_sub_815F62C(); +u8 debug_sub_815FBE8(); +u8 debug_sub_815FE1C(); +u8 debug_sub_8160D98(); + +const u8 Str_843E36C[] = _("Berries"); +const u8 Str_843E374[] = _("Goods"); +const u8 Str_843E37A[] = _("{PKMN} list"); +const u8 Str_843E382[] = _("トラップ"); +const u8 Str_843E387[] = _("Move your base"); +const u8 Str_843E396[] = _("Moving {PKMN}"); +const u8 Str_843E3A0[] = _("Fishing points"); +const u8 Str_843E3AF[] = _("Set {POKEBLOCK}"); +const u8 Str_843E3B9[] = _("Make bases(to max)"); +const u8 Str_843E3CC[] = _("Base location"); + +const struct MenuAction _843E3DC[] = { + { Str_843E36C, debug_sub_815FC54 }, + { Str_843E37A, debug_sub_815F2B4 }, + { Str_843E374, debug_sub_815FC94 }, + { Str_843E387, debug_sub_815FB1C }, + { Str_843E3B9, debug_sub_815F2F4 }, + { Str_843E3CC, debug_sub_815F62C }, + { Str_843E396, debug_sub_815FBE8 }, + { Str_843E3A0, debug_sub_815FE1C }, + { Str_843E3AF, debug_sub_8160D98 }, +}; + +const u8 _843E424[][4] = { + { 1, 118, 47, 14 }, + { 2, 125, 53, 10 }, + { 3, 113, 49, 8 }, + { 0xB, 118, 67, 6 }, + { 0xC, 121, 40, 11 }, + { 0xD, 111, 35, 1 }, + { 0x15, 115, 20, 53 }, + { 0x16, 121, 18, 13 }, + { 0x17, 119, 26, 81 }, + { 0x1F, 127, 59, 67 }, + { 0x20, 125, 55, 11 }, + { 0x21, 111, 27, 27 }, + { 0x29, 114, 9, 47 }, + { 0x2A, 115, 32, 39 }, + { 0x2B, 115, 23, 8 }, + { 0x33, 114, 30, 51 }, + { 0x34, 115, 26, 15 }, + { 0x35, 115, 32, 46 }, + { 0x3D, 114, 11, 62 }, + { 0x3E, 115, 21, 18 }, + { 0x3F, 115, 25, 24 }, + { 0x47, 114, 19, 70 }, + { 0x48, 115, 32, 6 }, + { 0x49, 114, 32, 57 }, + { 0x51, 116, 71, 4 }, + { 0x52, 123, 47, 3 }, + { 0x53, 123, 57, 5 }, + { 0x5B, 116, 79, 11 }, + { 0x5C, 123, 49, 3 }, + { 0x5D, 120, 18, 12 }, + { 0x65, 120, 28, 62 }, + { 0x66, 116, 56, 6 }, + { 0x67, 119, 16, 81 }, + { 0x6F, 120, 30, 62 }, + { 0x70, 116, 55, 15 }, + { 0x71, 119, 16, 28 }, + { 0x79, 111, 33, 34 }, + { 0x7A, 118, 29, 5 }, + { 0x7B, 127, 45, 24 }, + { 0x83, 111, 24, 36 }, + { 0x84, 125, 7, 25 }, + { 0x85, 115, 8, 30 }, + { 0x8D, 111, 34, 50 }, + { 0x8E, 127, 59, 72 }, + { 0x8F, 127, 61, 21 }, + { 0x97, 127, 67, 63 }, + { 0x98, 125, 24, 32 }, + { 0x99, 111, 35, 31 }, + { 0xA1, 111, 13, 19 }, + { 0xA2, 121, 43, 7 }, + { 0xA3, 118, 47, 5 }, + { 0xA4, 111, 14, 19 }, + { 0xAB, 118, 46, 5 }, + { 0xAC, 121, 42, 7 }, + { 0xAD, 119, 19, 76 }, + { 0xAE, 115, 7, 20 }, + { 0xB5, 110, 16, 25 }, + { 0xB6, 114, 11, 27 }, + { 0xB7, 115, 8, 20 }, + { 0xBF, 110, 17, 25 }, + { 0xC0, 114, 12, 27 }, + { 0xC1, 119, 18, 76 }, + { 0xC9, 119, 5, 2 }, + { 0xCA, 119, 4, 89 }, + { 0xCB, 120, 38, 54 }, + { 0xCC, 120, 5, 76 }, + { 0xD3, 119, 5, 15 }, + { 0xD4, 119, 7, 101 }, + { 0xD5, 120, 31, 23 }, + { 0xDD, 119, 34, 24 }, + { 0xDE, 120, 26, 10 }, + { 0xDF, 119, 4, 15 }, + { 0xE7, 119, 31, 73 }, + { 0xE8, 120, 29, 85 }, + { 0xE9, 119, 6, 2 }, +}; + +const u8 Str_843E550[] = _("R"); +const u8 Str_843E552[] = _("X"); +const u8 Str_843E554[] = _("Y"); +const u8 Str_843E556[] = _( + "♂1\n" + "♂2\n" + "♂3\n" + "♂4\n" + "♂5\n" + "♀1\n" + "♀2\n" + "♀3\n" + "♀4\n" + "♀5"); +const u8 Str_843E574[] = _("ー"); +const u8 Str_843E576[] = _("あ"); +const u8 Str_843E578[] = _("ア"); +const u8 Str_843E57A[] = _("A"); +const u8 Str_843E57C[] = _("a"); +const u8 Str_843E57E[] = _("0"); +const u8 Str_843E580[] = _( + "ADD\n" + "DEL\n" + "EXIT"); +const u8 Str_843E58D[] = _( + "Fishing location R119\n" + " Y1\n" + " Y2\n" + " Y3\n" + "Encounter location\n" + "\n" + "\n" + "front of you"); +const u8 _843E5D1[] = {0x0F, 0x16, 0x19}; +const u8 Str_843E5D4[] = _( + "Aボタン {ESCAPE}\p" + " Bボタン ー\n" + "START けってい"); +const u8 Str_843E5F0[] = _("?"); +const u8 Str_843E5F2[] = _("HP どりょくち"); +const u8 Str_843E5FB[] = _("こうげき どりょくち"); +const u8 Str_843E606[] = _("ぼうぎょ どりょくち"); +const u8 Str_843E611[] = _("すばやさ どりょくち"); +const u8 Str_843E61C[] = _("とくこう どりょくち"); +const u8 Str_843E627[] = _("とくぼう どりょくち"); +const u8 Str_843E632[] = _("なつきど"); +const u8 Str_843E637[] = _("どりょくち ごうけい"); +const u8 Str_843E642[] = _("ここから"); +const u8 Str_843E647[] = _("ここまで"); +const u8 Str_843E64C[] = _("かいすう"); +const u8 Str_843E651[] = _("けっか"); +const u8 Str_843E655[] = _("かい"); +const u8 Str_843E658[] = _("0"); +const u8 Str_843E65A[] = _("はんい"); + +#endif // DEBUG diff --git a/src/debug/nohara_debug_menu.c b/src/debug/nohara_debug_menu.c new file mode 100644 index 000000000..b3885ff76 --- /dev/null +++ b/src/debug/nohara_debug_menu.c @@ -0,0 +1,12 @@ +#if DEBUG +#include "global.h" + +__attribute__((unused)) static u8 gDebug_03000724; +__attribute__((unused)) static u8 gDebug_03000725; +__attribute__((unused)) static u8 gDebug_03000726; + +asm(".global gDebug_03000724"); +asm(".global gDebug_03000725"); +asm(".global gDebug_03000726"); + +#endif diff --git a/src/debug/start_menu_debug.c b/src/debug/start_menu_debug.c new file mode 100644 index 000000000..2bc536d6c --- /dev/null +++ b/src/debug/start_menu_debug.c @@ -0,0 +1,6051 @@ +#if DEBUG + +#include "global.h" +#include "constants/songs.h" +#include "battle.h" +#include "debug.h" +#include "link.h" +#include "main.h" +#include "menu.h" +#include "mystery_event_menu.h" +#include "overworld.h" +#include "reset_rtc_screen.h" +#include "rtc.h" +#include "save.h" +#include "sound.h" +#include "task.h" +#include "text.h" +#include "trade.h" + +// berry_blender.c +extern void unref_sub_80524BC(void); + +void debug_sub_8076BB4(u8); +void debug_sub_8077CF4(); + +u8 DebugMenu_Exit(void); +u8 DebugMenu_OpenWatanabe(void); +u8 DebugMenu_OpenSogabe(void); +u8 DebugMenu_OpenTamada(void); +u8 DebugMenu_OpenKagaya(void); +u8 DebugMenu_OpenMatsuda(void); +u8 DebugMenu_OpenNohara(void); +u8 DebugMenu_OpenNakamura(void); +u8 DebugMenu_Teleport(void); +u8 DebugMenu_EditPKMN(void); +u8 DebugMenu_SwitchBG(void); +u8 DebugMenu_OpenMori(void); +u8 DebugMenu_OpenTomomichi(void); +u8 DebugMenu_OpenAoki(void); +u8 DebugMenu_OpenTaya(void); +u8 DebugMenu_ToggleClearFlag(void); +u8 DebugMenu_ControlEncounter(void); +u8 DebugMenu_PTime(void); +u8 DebugMenu_MakeItems(void); +u8 debug_sub_8091300(void); +u8 DebugMenu_ViewPortraits(void); +u8 DebugMenu_TimeRecords(void); +u8 DebugMenu_SetTime(void); +u8 DebugMenu_NationalDex(void); +u8 DebugMenu_CreatePKMN(void); +u8 DebugMenu_ViewPokemonGraphics(void); +u8 DebugMenu_BattleForDebug(void); +u8 DebugMenu_AllBadges(void); +u8 DebugMenu_HoennNationalDex(void); +u8 DebugMenu_SetRamBerry(void); +u8 DebugMenu_UseHM(void); +u8 DebugMenu_OpenIwasawa(void); +u8 DebugMenu_ToggleBGM(void); +u8 DebugMenu_OpenSizeComparison(void); +u8 DebugMenu_Safari(void); +u8 DebugMenu_RematchTrainers(void); +u8 DebugMenu_MiragaIslandRND(void); +u8 DebugMenu_HallOfFame(void); +u8 DebugMenu_OpenMysteryEvent(void); +u8 DebugMenu_OpenLegendsRecord(void); +u8 DebugMenu_OpenWeatherEvents(void); +u8 DebugMenu_CellInfo(void); +u8 DebugMenu_CheckPKBLCK(void); +u8 DebugMenu_EffortValues(void); +u8 DebugMenu_HoennDex(void); +u8 DebugMenu_OpenSeeTrainers(void); +u8 DebugMenu_OpenBerryInfo(void); +u8 DebugMenu_BattleTowerStages(void); +u8 DebugMenu_EndSequenceDemo(void); +u8 DebugMenu_RandomNumberTest(void); +u8 DebugMenu_MeTooBackupMan(void); +u8 DebugMenu_OpenMurakawa(void); +u8 DebugMenu_OpenKiwa(void); +u8 DebugMenu_8076CBC(void); +u8 DebugMenu_8076CC0(void); +u8 DebugMenu_8076CD4(void); +u8 DebugMenu_8076C6C(void); +u8 DebugMenu_8076CD8(void); +u8 DebugMenu_8076D28(void); +u8 DebugMenu_8076D3C(void); +u8 DebugMenu_8076C80(void); +u8 DebugMenu_8076C90(void); +u8 DebugMenu_8076D50(void); +u8 DebugMenu_8076CEC(void); +u8 DebugMenu_8076D14(void); +u8 DebugMenu_8076D00(void); +u8 DebugMenu_8076D5C(void); +u8 DebugMenu_8076E18(void); +u8 DebugMenu_8076EDC(void); +void DebugMenu_8076FEC(void); + +const u8 Str_839B740[] = _("·WATANABE"); +const u8 Str_839B74A[] = _("SOGABE"); +const u8 Str_839B751[] = _("·TAMADA"); +const u8 Str_839B759[] = _("KAGAYA"); +const u8 Str_839B760[] = _("MATUDA"); +const u8 Str_839B767[] = _("NOHARA"); +const u8 Str_839B76E[] = _("NAKAMURA"); +const u8 Str_839B777[] = _("EXIT"); +const u8 Str_839B77C[] = _("Teleport"); +const u8 Str_839B785[] = _("Switch BG"); +const u8 Str_839B78F[] = _("Edit your {PKMN}"); +const u8 Str_839B79C[] = _("MORI"); +const u8 Str_839B7A1[] = _("TOMOMITI"); +const u8 Str_839B7AA[] = _("·AOKI"); +const u8 Str_839B7B0[] = _("TAYA"); +const u8 Str_839B7B5[] = _("Control Encounter"); +const u8 Str_839B7C7[] = _("PTIME"); +const u8 Str_839B7CD[] = _("Make items"); +const u8 Str_839B7D8[] = _("Transport"); +const u8 Str_839B7E2[] = _("See portraits"); +const u8 Str_839B7F0[] = _("Time records"); +const u8 Str_839B7FD[] = _("Set time"); +const u8 Str_839B806[] = _("National オカDex"); +const u8 Str_839B815[] = _("Hoenn オカDex"); +const u8 Str_839B821[] = _("Create {PKMN}"); +const u8 Str_839B82B[] = _("See {PKMN} graphics"); +const u8 Str_839B83B[] = _("See trainers"); +const u8 Str_839B848[] = _("Battle for debug"); +const u8 Str_839B859[] = _("Full set of badges"); +const u8 Str_839B86C[] = _("Hoenn National Dex"); +const u8 Str_839B87F[] = _("Set Ram berry"); +const u8 Str_839B88D[] = _("Use HM"); +const u8 Str_839B894[] = _("IWASAWA"); +const u8 Str_839B89C[] = _("BGM ON/OFF"); +const u8 Str_839B8A7[] = _("Size comparison"); +const u8 Str_839B8B7[] = _("Clear flag ON/OFF"); +const u8 Str_839B8C9[] = _("Safari"); +const u8 Str_839B8D0[] = _("Rematch trainers"); +const u8 Str_839B8E1[] = _("Mirage island RND"); +const u8 Str_839B8F3[] = _("Hall of fame"); +const u8 Str_839B900[] = _("Mystery event"); +const u8 Str_839B90E[] = _("Legends records"); +const u8 Str_839B91E[] = _("Weather events"); +const u8 Str_839B92D[] = _("Cell info."); +const u8 Str_839B938[] = _("Check {POKEBLOCK}"); +const u8 Str_839B944[] = _("Effort values"); +const u8 Str_839B952[] = _("Berrie Info"); +const u8 Str_839B95E[] = _("Battle Tower stages"); +const u8 Str_839B972[] = _("End sequence demo"); +const u8 Str_839B984[] = _("Random number test"); +const u8 Str_839B997[] = _("Me-too BackupMan"); +const u8 Str_839B9A8[] = _("MURAKAWA"); +const u8 Str_839B9B1[] = _("KINA(FONT)"); + +const struct MenuAction gDebug0x839B9BC[] = +{ + { Str_839B777, DebugMenu_Exit }, + { Str_839B740, DebugMenu_OpenWatanabe }, + { Str_839B74A, DebugMenu_OpenSogabe }, + { Str_839B751, DebugMenu_OpenTamada }, + { Str_839B759, DebugMenu_OpenKagaya }, + { Str_839B760, DebugMenu_OpenMatsuda }, + { Str_839B767, DebugMenu_OpenNohara }, + { Str_839B76E, DebugMenu_OpenNakamura }, + { Str_839B77C, DebugMenu_Teleport }, + { Str_839B78F, DebugMenu_EditPKMN }, + { Str_839B785, DebugMenu_SwitchBG }, + { Str_839B79C, DebugMenu_OpenMori }, + { Str_839B7A1, DebugMenu_OpenTomomichi }, + { Str_839B7AA, DebugMenu_OpenAoki }, + { Str_839B7B0, DebugMenu_OpenTaya }, + { Str_839B8B7, DebugMenu_ToggleClearFlag }, + { Str_839B7B5, DebugMenu_ControlEncounter }, + { Str_839B7C7, DebugMenu_PTime }, + { Str_839B7CD, DebugMenu_MakeItems }, + { Str_839B7D8, debug_sub_8091300 }, + { Str_839B7E2, DebugMenu_ViewPortraits }, + { Str_839B7F0, DebugMenu_TimeRecords }, + { Str_839B7FD, DebugMenu_SetTime }, + { Str_839B806, DebugMenu_NationalDex }, + { Str_839B821, DebugMenu_CreatePKMN }, + { Str_839B82B, DebugMenu_ViewPokemonGraphics }, + { Str_839B848, DebugMenu_BattleForDebug }, + { Str_839B859, DebugMenu_AllBadges }, + { Str_839B86C, DebugMenu_HoennNationalDex }, + { Str_839B87F, DebugMenu_SetRamBerry }, + { Str_839B88D, DebugMenu_UseHM }, + { Str_839B894, DebugMenu_OpenIwasawa }, + { Str_839B89C, DebugMenu_ToggleBGM }, + { Str_839B8A7, DebugMenu_OpenSizeComparison }, + { Str_839B8C9, DebugMenu_Safari }, + { Str_839B8D0, DebugMenu_RematchTrainers }, + { Str_839B8E1, DebugMenu_MiragaIslandRND }, + { Str_839B8F3, DebugMenu_HallOfFame }, + { Str_839B900, DebugMenu_OpenMysteryEvent }, + { Str_839B90E, DebugMenu_OpenLegendsRecord }, + { Str_839B91E, DebugMenu_OpenWeatherEvents }, + { Str_839B92D, DebugMenu_CellInfo }, + { Str_839B938, DebugMenu_CheckPKBLCK }, + { Str_839B944, DebugMenu_EffortValues }, + { Str_839B815, DebugMenu_HoennDex }, + { Str_839B83B, DebugMenu_OpenSeeTrainers }, + { Str_839B952, DebugMenu_OpenBerryInfo }, + { Str_839B95E, DebugMenu_BattleTowerStages }, + { Str_839B972, DebugMenu_EndSequenceDemo }, + { Str_839B984, DebugMenu_RandomNumberTest }, + { Str_839B997, DebugMenu_MeTooBackupMan }, + { Str_839B9A8, DebugMenu_OpenMurakawa }, + { Str_839B9B1, DebugMenu_OpenKiwa }, +}; + +const u8 gUnknown_Debug_839BB64[] = +{ + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x00, 0x0b, 0x0c, 0x0d, 0x0e, 0x1f, 0x12, 0x13, 0x00, 0x08, 0x09, 0x0a, 0x1e, 0x10, 0x24, 0x0f, 0x00, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x00, + 0x1c, 0x1d, 0x14, 0x20, 0x21, 0x22, 0x23, 0x00, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x00, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x00, 0x11, 0x33, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const u8 gUnknown_Debug_0839BBA4[] = _("Debugging Version"); +const u8 gUnknown_Debug_0839BBB6[] = _("{VERSION} Version"); +const u8 gUnknown_Debug_0839BBC1[] = _("Normal RTC compatible"); +const u8 Str_839BBD7[] = _("か の じっけん"); +const u8 Str_839BBE0[] = _("じっけん2"); +const u8 Str_839BBE6[] = _("BGじっけん"); +const u8 Str_839BBED[] = _("Battle"); +const u8 Str_839BBF4[] = _("つうしん じっけん"); +const u8 Str_839BBFE[] = _("LINK Test2"); +const u8 Str_839BC09[] = _("フィールド はじめる"); +const u8 Str_839BC14[] = _("フィールド つづき"); +const u8 Str_839BC1E[] = _("Sound test"); +const u8 Str_839BC29[] = _("{POKEBLOCK} test"); +const u8 Str_839BC34[] = _("Crash backup data"); +const u8 Str_839BC46[] = _("e-Card test"); +const u8 Str_839BC52[] = _("こうかんデモ "); +const u8 Str_839BC5C[] = _("Time in game"); +const u8 Str_839BC69[] = _("フェスタ モード"); +const u8 Str_839BC72[] = _("Mimic e-Card"); +const u8 Str_839BC7F[] = _("RTC reset"); +const u8 Str_839BC89[] = _("Converter"); + +const struct MenuAction gUnknown_Debug_839BC94[] = +{ + { Str_839BBD7, DebugMenu_8076CBC }, + { Str_839BBE0, DebugMenu_8076CC0 }, + { Str_839BBE6, DebugMenu_8076CD4 }, + { Str_839BBED, DebugMenu_8076C6C }, + { Str_839BC29, DebugMenu_8076CD8 }, + { Str_839BBFE, DebugMenu_8076D28 }, + { Str_839BC1E, DebugMenu_8076D3C }, + { Str_839BC09, DebugMenu_8076C80 }, + { Str_839BC14, DebugMenu_8076C90 }, + { Str_839BC34, DebugMenu_8076D50 }, + { Str_839BC46, DebugMenu_8076CEC }, + { Str_839BC52, DebugMenu_8076D14 }, + { Str_839BC72, DebugMenu_8076D00 }, + { Str_839BC5C, DebugMenu_8076D5C }, + { Str_839BC7F, DebugMenu_8076E18 }, + { Str_839BC89, DebugMenu_8076EDC }, +}; + +// NOTE: When decompiling this file, I found out that having an extraneous extern +// in a C file can affect the generated asm. If this extern is commented out, +// debug_sub_8076BB4 will access the array differently and no longer match. +//extern const struct MenuAction gUnknown_Debug_839BC94[]; + +const u8 gMenuOrders_839BD14[][10] = +{ + { 3, 6, 4, 0xFF }, + { 5, 9, 10, 12, 13, 14, 15, 0xFF }, +}; + +const u8 Str_839BD26[] = {2, 0, 0, 0}; // doesn't appear to be referenced + +const u8 Str_839BD2C[] = _("RTCを リセット します\n" // Reset RTC + "Aで じっこう Bでキャンセル"); + +const u8 Str_839BD4C[] = _("RTCを リセット した!"); + +const u8 Str_839BD5A[] = _("セーブデータを コンバートします\n" + "Aで けってい Bで キャンセル"); + +const u8 Str_839BD7D[] = _("へんかんが しゅうりょう しました!"); + + +extern const u8 Str_839BD2C[]; +extern const u8 Str_839BD4C[]; + +__attribute__((unused)) static u8 gUnknown_030006B8[4]; +__attribute__((unused)) static u8 gUnknown_030006BC[4]; +__attribute__((unused)) static u8 gUnknown_030006C0; +__attribute__((unused)) static u8 gUnknown_030006C1; +static const u8 *gUnknown_030006C4; +__attribute__((unused)) static u8 gUnknown_030006C8; + +void debug_sub_8076AC8(u8 a) +{ + s32 r4; + + gUnknown_030006C4 = gMenuOrders_839BD14[a]; + for (r4 = 0; gUnknown_030006C4[r4] != 0xFF; r4++) + ; + Menu_EraseWindowRect(16, 0, 29, 19); + Menu_DrawStdWindowFrame(16, 0, 29, r4 * 2 + 1); + Menu_PrintItemsReordered(17, 1, r4, (struct MenuAction2 *)gUnknown_Debug_839BC94, gUnknown_030006C4); + InitMenu(0, 17, 1, r4, 0, 12); +} + +void debug_sub_8076B4C(void) +{ + u8 taskId = FindTaskIdByFunc(debug_sub_8076BB4); + + if (taskId != 0xFF) + DestroyTask(taskId); +} + +// Initializes test menu +void debug_sub_8076B68(void) +{ + Menu_PrintText(gUnknown_Debug_0839BBB6, 1, 1); + Menu_PrintText(gUnknown_Debug_0839BBC1, 1, 3); + Menu_PrintText(gUnknown_Debug_0839BBA4, 1, 9); + debug_sub_8077CF4(4, 11); + debug_sub_8076AC8(0); + CreateTask(debug_sub_8076BB4, 1); +} + +// Handles input for the test menu +void debug_sub_8076BB4(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s8 input = Menu_ProcessInput(); + s8 cursorPos = Menu_GetCursorPos(); + + switch (input) + { + default: + gUnknown_Debug_839BC94[gUnknown_030006C4[cursorPos]].func(); + break; + case -2: + if (gMain.newKeys & 0x20) + { + if (data[0] == 0) + data[0] = 1; + else + data[0]--; + debug_sub_8076AC8(data[0]); + PlaySE(SE_SELECT); + } + else if (gMain.newKeys & 0x10) + { + if (data[0] == 1) + data[0] = 0; + else + data[0]++; + debug_sub_8076AC8(data[0]); + PlaySE(SE_SELECT); + } + break; + case -1: + DoSoftReset(); + break; + } +} + +u8 DebugMenu_8076C6C(void) +{ + SetMainCallback2(debug_sub_8010800); + return 0; +} + +u8 DebugMenu_8076C80(void) +{ + debug_sub_8076B4C(); + DebugMenu_8076FEC(); + return 0; +} + +u8 DebugMenu_8076C90(void) +{ + if (gSaveFileStatus == SAVE_STATUS_ERROR) + { + PlaySE(0x16); + } + else + { + debug_sub_8076B4C(); + SetMainCallback2(CB2_ContinueSavedGame); + } + return 0; +} + +u8 DebugMenu_8076CBC(void) +{ + return 0; +} + +u8 DebugMenu_8076CC0(void) +{ + SetMainCallback2(debug_nullsub_66); + return 0; +} + +u8 DebugMenu_8076CD4(void) +{ + return 0; +} + +u8 DebugMenu_8076CD8(void) +{ + SetMainCallback2(unref_sub_80524BC); + return 0; +} + +u8 DebugMenu_8076CEC(void) +{ + SetMainCallback2(CB2_InitMysteryEventMenu); + return 0; +} + +u8 DebugMenu_8076D00(void) +{ + SetMainCallback2(debug_sub_815D15C); + return 0; +} + +u8 DebugMenu_8076D14(void) +{ + SetMainCallback2(sub_804B790); + return 0; +} + +u8 DebugMenu_8076D28(void) +{ + SetMainCallback2(LinkTestScreen); + return 0; +} + +u8 DebugMenu_8076D3C(void) +{ + SetMainCallback2(CB2_StartSoundCheckMenu); + return 0; +} + +u8 DebugMenu_8076D50(void) +{ + Save_EraseAllData(); + return 0; +} + +u8 DebugMenu_8076D5C(void) +{ + debug_sub_8076B4C(); + debug_sub_806F8F8(); + return 0; +} + +void DebugMenu_8076D6C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + Menu_DisplayDialogueFrame(); + Menu_PrintText(Str_839BD2C, 2, 15); + data[0]++; + break; + case 1: + if (gMain.newKeys & A_BUTTON) + { + Menu_DisplayDialogueFrame(); + Menu_PrintText(Str_839BD4C, 2, 15); + PlaySE(0x49); + RtcReset(); + data[0]++; + } + else if (gMain.newKeys & B_BUTTON) + { + DestroyTask(taskId); + DoSoftReset(); + } + break; + case 2: + if (gMain.newKeys & A_BUTTON) + { + DestroyTask(taskId); + DoSoftReset(); + } + break; + } +} + +__attribute__((naked)) +u8 DebugMenu_8076E18() +{ + asm( + " push {lr}\n" + " bl debug_sub_8076B4C\n" + " ldr r0, ._67\n" + " mov r1, #0xa\n" + " bl CreateTask\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._68:\n" + " .align 2, 0\n" + "._67:\n" + " .word DebugMenu_8076D6C+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8076E30() +{ + asm( + " push {r4, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r3, r0, #0x18\n" + " lsl r0, r3, #0x2\n" + " add r0, r0, r3\n" + " lsl r0, r0, #0x3\n" + " ldr r1, ._73\n" + " add r4, r0, r1\n" + " mov r0, #0x0\n" + " ldsh r1, [r4, r0]\n" + " cmp r1, #0x1\n" + " beq ._69 @cond_branch\n" + " cmp r1, #0x1\n" + " bgt ._70 @cond_branch\n" + " cmp r1, #0\n" + " beq ._71 @cond_branch\n" + " b ._86\n" + "._74:\n" + " .align 2, 0\n" + "._73:\n" + " .word gTasks+0x8\n" + "._70:\n" + " cmp r1, #0x2\n" + " beq ._75 @cond_branch\n" + " b ._86\n" + "._71:\n" + " bl Menu_DisplayDialogueFrame\n" + " ldr r0, ._78\n" + " mov r1, #0x2\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " b ._77\n" + "._79:\n" + " .align 2, 0\n" + "._78:\n" + " .word Str_839BD5A\n" + "._69:\n" + " ldr r0, ._82\n" + " ldrh r2, [r0, #0x2e]\n" + " and r1, r1, r2\n" + " cmp r1, #0\n" + " beq ._80 @cond_branch\n" + " bl Menu_DisplayDialogueFrame\n" + " bl sub_813B79C\n" + " ldr r0, ._82 + 4\n" + " mov r1, #0x2\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " mov r0, #0x49\n" + " bl PlaySE\n" + "._77:\n" + " ldrh r0, [r4]\n" + " add r0, r0, #0x1\n" + " strh r0, [r4]\n" + " b ._86\n" + "._83:\n" + " .align 2, 0\n" + "._82:\n" + " .word gMain\n" + " .word Str_839BD7D\n" + "._80:\n" + " mov r0, #0x2\n" + " and r0, r0, r2\n" + " cmp r0, #0\n" + " beq ._86 @cond_branch\n" + " add r0, r3, #0\n" + " bl DestroyTask\n" + " bl DoSoftReset\n" + " b ._86\n" + "._75:\n" + " ldr r0, ._87\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._86 @cond_branch\n" + " add r0, r3, #0\n" + " bl DestroyTask\n" + " bl DoSoftReset\n" + "._86:\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._88:\n" + " .align 2, 0\n" + "._87:\n" + " .word gMain\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_8076EDC() +{ + asm( + " push {lr}\n" + " bl debug_sub_8076B4C\n" + " ldr r0, ._89\n" + " mov r1, #0xa\n" + " bl CreateTask\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._90:\n" + " .align 2, 0\n" + "._89:\n" + " .word DebugMenu_8076E30+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8076EF4() +{ + asm( + " push {r4, r5, lr}\n" + " add sp, sp, #0xfffffff8\n" + " mov r0, #0x0\n" + " mov r1, #0x0\n" + " mov r2, #0xb\n" + " mov r3, #0x11\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r4, ._93\n" + " mov r0, #0x2\n" + " mov r1, #0x1\n" + " mov r2, #0x8\n" + " add r3, r4, #0\n" + " bl Menu_PrintItems\n" + " mov r5, #0x0\n" + " add r4, r4, #0x4\n" + "._92:\n" + " lsl r0, r5, #0x3\n" + " add r0, r0, r4\n" + " ldr r1, [r0]\n" + " mov r0, #0x1\n" + " and r1, r1, r0\n" + " mov r0, #0xb6\n" + " cmp r1, #0\n" + " bne ._91 @cond_branch\n" + " mov r0, #0xb5\n" + "._91:\n" + " lsl r2, r5, #0x1\n" + " add r2, r2, #0x1\n" + " lsl r2, r2, #0x18\n" + " lsr r2, r2, #0x18\n" + " mov r1, #0xa\n" + " bl sub_8071F60\n" + " add r0, r5, #1\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " cmp r5, #0x7\n" + " bls ._92 @cond_branch\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " mov r0, #0x9\n" + " str r0, [sp, #0x4]\n" + " mov r0, #0x0\n" + " mov r1, #0x1\n" + " mov r2, #0x1\n" + " mov r3, #0x8\n" + " bl InitMenu\n" + " add sp, sp, #0x8\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._94:\n" + " .align 2, 0\n" + "._93:\n" + " .word gUnknown_Debug_839BDC4\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8076F60() +{ + asm( + " push {r4, r5, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " bl Menu_ProcessInput\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " bl Menu_GetCursorPos\n" + " lsl r0, r0, #0x18\n" + " lsr r2, r0, #0x18\n" + " lsl r4, r4, #0x18\n" + " asr r4, r4, #0x18\n" + " mov r0, #0x2\n" + " neg r0, r0\n" + " cmp r4, r0\n" + " beq ._97 @cond_branch\n" + " add r0, r0, #0x1\n" + " cmp r4, r0\n" + " bne ._96 @cond_branch\n" + " bl Menu_EraseScreen\n" + " bl debug_sub_8076B68\n" + " add r0, r5, #0\n" + " bl DestroyTask\n" + " b ._97\n" + "._96:\n" + " ldr r3, ._100\n" + " lsl r2, r2, #0x18\n" + " asr r2, r2, #0x15\n" + " add r0, r3, #4\n" + " add r0, r2, r0\n" + " ldrb r4, [r0]\n" + " ldr r0, ._100 + 4\n" + " mov r1, #0x1\n" + " and r1, r1, r4\n" + " strb r1, [r0, #0x8]\n" + " add r2, r2, r3\n" + " ldr r1, [r2]\n" + " bl StringCopy\n" + " mov r0, #0x80\n" + " and r4, r4, r0\n" + " cmp r4, #0\n" + " bne ._98 @cond_branch\n" + " mov r0, #0x0\n" + " bl debug_sub_8057508\n" + " b ._99\n" + "._101:\n" + " .align 2, 0\n" + "._100:\n" + " .word gUnknown_Debug_839BDC4\n" + " .word gSaveBlock2\n" + "._98:\n" + " mov r0, #0x1\n" + " bl debug_sub_8057508\n" + "._99:\n" + " add r0, r5, #0\n" + " bl DestroyTask\n" + " ldr r0, ._102\n" + " bl SetMainCallback2\n" + "._97:\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._103:\n" + " .align 2, 0\n" + "._102:\n" + " .word debug_sub_8058C00+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8076FEC() +{ + asm( + " push {lr}\n" + " bl DebugMenu_8076EF4\n" + " ldr r0, ._104\n" + " mov r1, #0xa\n" + " bl CreateTask\n" + " pop {r0}\n" + " bx r0\n" + "._105:\n" + " .align 2, 0\n" + "._104:\n" + " .word DebugMenu_8076F60+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077004() +{ + asm( + " ldr r2, ._106\n" + " ldr r0, ._106 + 4\n" + " ldrb r0, [r0]\n" + " lsl r0, r0, #0x3\n" + " ldr r1, ._106 + 8\n" + " add r0, r0, r1\n" + " str r0, [r2]\n" + " bx lr\n" + "._107:\n" + " .align 2, 0\n" + "._106:\n" + " .word gUnknown_030006C4 \n" + " .word gUnknown_030006C1 \n" + " .word gUnknown_Debug_839BB64\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077020() +{ + asm( + " push {r4, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " ldr r0, ._109\n" + " ldr r0, [r0]\n" + " bl _call_via_r0\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x1\n" + " bne ._108 @cond_branch\n" + " add r0, r4, #0\n" + " bl DestroyTask\n" + "._108:\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._110:\n" + " .align 2, 0\n" + "._109:\n" + " .word gMenuCallback\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077048() +{ + asm( + " push {lr}\n" + " ldr r0, ._111\n" + " ldr r1, ._111 + 4\n" + " str r1, [r0]\n" + " bl ScriptContext2_Enable\n" + " ldr r0, ._111 + 8\n" + " mov r1, #0x50\n" + " bl CreateTask\n" + " pop {r0}\n" + " bx r0\n" + "._112:\n" + " .align 2, 0\n" + "._111:\n" + " .word gMenuCallback\n" + " .word DebugMenu_807706C+1\n" + " .word DebugMenu_8077020+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_807706C() +{ + asm( + " push {lr}\n" + " ldr r0, ._113\n" + " bl InitMenuWindow\n" + " bl DebugMenu_8077004\n" + " bl DebugMenu_807719C\n" + " bl DebugMenu_80771EC\n" + " bl DebugMenu_8077238\n" + " ldr r1, ._113 + 4\n" + " ldr r0, ._113 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._114:\n" + " .align 2, 0\n" + "._113:\n" + " .word gWindowTemplate_81E6CE4\n" + " .word gMenuCallback\n" + " .word DebugMenu_807709C+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_807709C() +{ + asm( + " push {r4, lr}\n" + " ldr r4, ._120\n" + " ldrh r1, [r4, #0x2e]\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._115 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " mov r0, #0x1\n" + " neg r0, r0\n" + " bl Menu_MoveCursor\n" + " ldr r1, ._120 + 4\n" + " strb r0, [r1]\n" + "._115:\n" + " ldrh r1, [r4, #0x2e]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._116 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " mov r0, #0x1\n" + " bl Menu_MoveCursor\n" + " ldr r1, ._120 + 4\n" + " strb r0, [r1]\n" + "._116:\n" + " ldrh r1, [r4, #0x2e]\n" + " mov r0, #0x20\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._117 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r1, ._120 + 8\n" + " ldrb r0, [r1]\n" + " cmp r0, #0\n" + " bne ._118 @cond_branch\n" + " mov r0, #0x7\n" + " b ._119\n" + "._121:\n" + " .align 2, 0\n" + "._120:\n" + " .word gMain\n" + " .word gUnknown_030006C0 \n" + " .word gUnknown_030006C1 \n" + "._118:\n" + " sub r0, r0, #0x1\n" + "._119:\n" + " strb r0, [r1]\n" + " bl DebugMenu_8077004\n" + " bl DebugMenu_807719C\n" + "._117:\n" + " ldr r0, ._125\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x10\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._122 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r1, ._125 + 4\n" + " ldrb r0, [r1]\n" + " cmp r0, #0x7\n" + " bne ._123 @cond_branch\n" + " mov r0, #0x0\n" + " b ._124\n" + "._126:\n" + " .align 2, 0\n" + "._125:\n" + " .word gMain\n" + " .word gUnknown_030006C1 \n" + "._123:\n" + " add r0, r0, #0x1\n" + "._124:\n" + " strb r0, [r1]\n" + " bl DebugMenu_8077004\n" + " bl DebugMenu_807719C\n" + "._122:\n" + " ldr r0, ._129\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._127 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r1, ._129 + 4\n" + " ldr r0, ._129 + 8\n" + " ldrb r2, [r0]\n" + " ldr r0, ._129 + 12\n" + " ldr r0, [r0]\n" + " add r0, r0, r2\n" + " ldrb r0, [r0]\n" + " lsl r0, r0, #0x3\n" + " add r1, r1, #0x4\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " bl _call_via_r0\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " b ._132\n" + "._130:\n" + " .align 2, 0\n" + "._129:\n" + " .word gMain\n" + " .word gDebug0x839B9BC\n" + " .word gUnknown_030006C0 \n" + " .word gUnknown_030006C4 \n" + "._127:\n" + " mov r0, #0xa\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._131 @cond_branch\n" + " mov r0, #0x0\n" + " b ._132\n" + "._131:\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + "._132:\n" + " pop {r4}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_807719C() +{ + asm( + " push {r4, lr}\n" + " add sp, sp, #0xfffffff8\n" + " mov r0, #0x0\n" + " mov r1, #0x0\n" + " mov r2, #0xe\n" + " mov r3, #0x11\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r3, ._133\n" + " ldr r0, ._133 + 4\n" + " ldr r0, [r0]\n" + " str r0, [sp]\n" + " mov r0, #0x1\n" + " mov r1, #0x1\n" + " mov r2, #0x8\n" + " bl Menu_PrintItemsReordered\n" + " ldr r4, ._133 + 8\n" + " ldrb r0, [r4]\n" + " str r0, [sp]\n" + " mov r0, #0xd\n" + " str r0, [sp, #0x4]\n" + " mov r0, #0x0\n" + " mov r1, #0x1\n" + " mov r2, #0x1\n" + " mov r3, #0x8\n" + " bl InitMenu\n" + " strb r0, [r4]\n" + " add sp, sp, #0x8\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._134:\n" + " .align 2, 0\n" + "._133:\n" + " .word gDebug0x839B9BC\n" + " .word gUnknown_030006C4 \n" + " .word gUnknown_030006C0 \n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80771EC() +{ + asm( + " push {r4, lr}\n" + " ldr r0, ._135\n" + " ldr r1, ._135 + 4\n" + " bl StringCopy\n" + " ldr r4, ._135 + 8\n" + " mov r1, #0x4\n" + " ldsb r1, [r4, r1]\n" + " mov r2, #0x1\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r1, #0x5\n" + " ldsb r1, [r4, r1]\n" + " mov r2, #0x1\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, #0x13\n" + " mov r1, #0xc\n" + " mov r2, #0x1d\n" + " mov r3, #0xf\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r0, ._135\n" + " mov r1, #0x14\n" + " mov r2, #0xd\n" + " bl Menu_PrintText\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._136:\n" + " .align 2, 0\n" + "._135:\n" + " .word gStringVar4\n" + " .word Str_839BE04\n" + " .word gSaveBlock1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077238() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xffffffe8\n" + " ldr r1, ._139\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " bl memcpy\n" + " add r0, sp, #0x4\n" + " mov r9, r0\n" + " ldr r1, ._139 + 4\n" + " mov r2, #0x3\n" + " bl memcpy\n" + " add r1, sp, #0x8\n" + " mov sl, r1\n" + " ldr r1, ._139 + 8\n" + " mov r0, sl\n" + " mov r2, #0x3\n" + " bl memcpy\n" + " mov r2, #0x0\n" + " str r2, [sp, #0x14]\n" + " add r4, sp, #0x10\n" + " mov r6, sp\n" + " add r6, r6, #0x12\n" + " add r0, r4, #0\n" + " add r1, r6, #0\n" + " bl PlayerGetDestCoords\n" + " mov r1, #0x0\n" + " ldsh r0, [r4, r1]\n" + " mov r2, #0x0\n" + " ldsh r1, [r6, r2]\n" + " bl MapGridGetZCoordAt\n" + " mov r8, r0\n" + " mov r0, r8\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov r8, r0\n" + " ldrh r0, [r4]\n" + " sub r0, r0, #0x7\n" + " strh r0, [r4]\n" + " ldrh r0, [r6]\n" + " sub r0, r0, #0x7\n" + " strh r0, [r6]\n" + " ldr r7, ._139 + 12\n" + " add r0, r7, #0\n" + " mov r1, sp\n" + " bl StringCopy\n" + " add r5, sp, #0xc\n" + " mov r2, #0x0\n" + " ldsh r1, [r4, r2]\n" + " add r0, r5, #0\n" + " mov r2, #0x0\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " add r0, r7, #0\n" + " add r1, r5, #0\n" + " bl StringAppend\n" + " add r0, r7, #0\n" + " mov r1, r9\n" + " bl StringAppend\n" + " mov r0, #0x0\n" + " ldsh r1, [r6, r0]\n" + " add r0, r5, #0\n" + " mov r2, #0x0\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " add r0, r7, #0\n" + " add r1, r5, #0\n" + " bl StringAppend\n" + " add r0, r7, #0\n" + " mov r1, sl\n" + " bl StringAppend\n" + " add r0, r5, #0\n" + " mov r1, r8\n" + " mov r2, #0x0\n" + " mov r3, #0x2\n" + " bl ConvertIntToDecimalStringN\n" + " add r0, r7, #0\n" + " add r1, r5, #0\n" + " bl StringAppend\n" + " ldrb r0, [r7]\n" + " cmp r0, #0xff\n" + " beq ._137 @cond_branch\n" + " add r1, r7, #0\n" + "._138:\n" + " ldr r0, [sp, #0x14]\n" + " add r0, r0, #0x1\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " str r0, [sp, #0x14]\n" + " add r0, r0, r1\n" + " ldrb r0, [r0]\n" + " cmp r0, #0xff\n" + " bne ._138 @cond_branch\n" + "._137:\n" + " mov r0, #0x1c\n" + " ldr r1, [sp, #0x14]\n" + " sub r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov r1, #0x10\n" + " mov r2, #0x1d\n" + " mov r3, #0x13\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r0, ._139 + 12\n" + " mov r1, #0x1d\n" + " ldr r2, [sp, #0x14]\n" + " sub r1, r1, r2\n" + " lsl r1, r1, #0x18\n" + " lsr r1, r1, #0x18\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + " add sp, sp, #0x18\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._140:\n" + " .align 2, 0\n" + "._139:\n" + " .word Str_839BE07\n" + " .word Str_839BE09\n" + " .word Str_839BE0C\n" + " .word gStringVar4\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_Exit() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenSogabe() +{ + asm( + " push {lr}\n" + " bl unref_sub_814A414\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenTamada() +{ + asm( + " push {lr}\n" + " bl debug_sub_8075C30\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenKagaya() +{ + asm( + " push {lr}\n" + " bl InitKagayaDebugMenu_A\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenMatsuda() +{ + asm( + " push {lr}\n" + " bl unref_sub_80A9B28\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenNohara() +{ + asm( + " push {lr}\n" + " bl InitNoharaDebugMenu\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenWatanabe() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " ldr r0, ._141\n" + " bl SetMainCallback2\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._142:\n" + " .align 2, 0\n" + "._141:\n" + " .word InitWatanabeDebugMenu+1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_EndSequenceDemo() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " ldr r0, ._143\n" + " bl SetMainCallback2\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._144:\n" + " .align 2, 0\n" + "._143:\n" + " .word sub_81439D0+1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_HallOfFame() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " bl GameClear\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenSizeComparison() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " bl InitSizeComparison\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_HoennNationalDex() +{ + asm( + " push {lr}\n" + " bl IsNationalPokedexEnabled\n" + " cmp r0, #0\n" + " beq ._145 @cond_branch\n" + " bl DisableNationalPokedex\n" + " b ._146\n" + "._145:\n" + " bl EnableNationalPokedex\n" + "._146:\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_8077434() +{ + asm( + " push {lr}\n" + " add sp, sp, #0xfffffff8\n" + " bl Menu_GetCursorPos\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x4\n" + " bhi ._165 @cond_branch\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._149\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._150:\n" + " .align 2, 0\n" + "._149:\n" + " .word ._148\n" + "._148:\n" + " .word ._151\n" + " .word ._152\n" + " .word ._153\n" + " .word ._154\n" + " .word ._155\n" + "._151:\n" + " ldr r0, ._157\n" + " mov r1, #0x1\n" + " mov r2, #0x4\n" + " bl GetEnigmaBerryChecksum\n" + " mov r0, #0xff\n" + " str r0, [sp]\n" + " str r0, [sp, #0x4]\n" + " mov r1, #0xff\n" + " mov r2, #0xff\n" + " mov r3, #0x0\n" + " bl debug_sub_80C2D24\n" + " b ._165\n" + "._158:\n" + " .align 2, 0\n" + "._157:\n" + " .word Str_839BE0F\n" + "._152:\n" + " ldr r0, ._160\n" + " mov r1, #0x2\n" + " mov r2, #0x0\n" + " bl GetEnigmaBerryChecksum\n" + " mov r0, #0xff\n" + " str r0, [sp]\n" + " str r0, [sp, #0x4]\n" + " mov r1, #0xff\n" + " mov r2, #0x0\n" + " b ._159\n" + "._161:\n" + " .align 2, 0\n" + "._160:\n" + " .word Str_839BE12\n" + "._153:\n" + " ldr r0, ._163\n" + " mov r1, #0x3\n" + " mov r2, #0x0\n" + " bl GetEnigmaBerryChecksum\n" + " mov r0, #0xff\n" + " str r0, [sp]\n" + " str r0, [sp, #0x4]\n" + " mov r1, #0x0\n" + " b ._162\n" + "._164:\n" + " .align 2, 0\n" + "._163:\n" + " .word Str_839BE16\n" + "._154:\n" + " ldr r0, ._166\n" + " mov r1, #0x4\n" + " mov r2, #0x0\n" + " bl GetEnigmaBerryChecksum\n" + " mov r0, #0xff\n" + " str r0, [sp]\n" + " str r0, [sp, #0x4]\n" + " mov r0, #0x0\n" + " mov r1, #0xff\n" + "._162:\n" + " mov r2, #0xff\n" + "._159:\n" + " mov r3, #0xff\n" + " bl debug_sub_80C2D24\n" + " b ._165\n" + "._167:\n" + " .align 2, 0\n" + "._166:\n" + " .word Str_839BE1A\n" + "._155:\n" + " ldr r0, ._168\n" + " mov r1, #0x4\n" + " mov r2, #0x0\n" + " bl GetEnigmaBerryChecksum\n" + " mov r0, #0xff\n" + " str r0, [sp]\n" + " str r0, [sp, #0x4]\n" + " mov r1, #0xff\n" + " mov r2, #0xff\n" + " mov r3, #0xff\n" + " bl debug_sub_80C2D24\n" + "._165:\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " add sp, sp, #0x8\n" + " pop {r1}\n" + " bx r1\n" + "._169:\n" + " .align 2, 0\n" + "._168:\n" + " .word Str_839BE1E\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_807750C() +{ + asm( + " push {lr}\n" + " ldr r0, ._170\n" + " bl DebugMenu_8077D78\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "._171:\n" + " .align 2, 0\n" + "._170:\n" + " .word gUnknown_Debug_839BE24\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_SetRamBerry() +{ + asm( + " push {lr}\n" + " ldr r0, ._172\n" + " mov r1, #0xc\n" + " mov r2, #0x5\n" + " bl DebugMenu_8077D24\n" + " ldr r1, ._172 + 4\n" + " ldr r0, ._172 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._173:\n" + " .align 2, 0\n" + "._172:\n" + " .word gUnknown_Debug_839BE24\n" + " .word gMenuCallback\n" + " .word DebugMenu_807750C+1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_ToggleBGM() +{ + asm( + " push {lr}\n" + " ldr r2, ._175\n" + " mov r1, #0x0\n" + " ldrb r0, [r2]\n" + " cmp r0, #0\n" + " bne ._174 @cond_branch\n" + " mov r1, #0x1\n" + "._174:\n" + " strb r1, [r2]\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._176:\n" + " .align 2, 0\n" + "._175:\n" + " .word gDisableMusic\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_BattleForDebug() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " bl InitBattleForDebug\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_NationalDex() +{ + asm( + " push {r4, r5, lr}\n" + " mov r4, #0x0\n" + " ldr r5, ._178\n" + "._177:\n" + " add r4, r4, #0x1\n" + " lsl r4, r4, #0x10\n" + " lsr r4, r4, #0x10\n" + " add r0, r4, #0\n" + " mov r1, #0x2\n" + " bl GetSetPokedexFlag\n" + " add r0, r4, #0\n" + " mov r1, #0x3\n" + " bl GetSetPokedexFlag\n" + " cmp r4, r5\n" + " bls ._177 @cond_branch\n" + " ldr r1, ._178 + 4\n" + " mov r0, #0x1\n" + " strb r0, [r1]\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r4, r5}\n" + " pop {r1}\n" + " bx r1\n" + "._179:\n" + " .align 2, 0\n" + "._178:\n" + " .word 0x181\n" + " .word gUnknown_03005CE8\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_HoennDex() +{ + asm( + " push {r4, r5, lr}\n" + " mov r5, #0x0\n" + "._180:\n" + " add r5, r5, #0x1\n" + " lsl r5, r5, #0x10\n" + " lsr r5, r5, #0x10\n" + " add r0, r5, #0\n" + " bl HoennToNationalOrder\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x10\n" + " lsr r4, r4, #0x10\n" + " add r0, r4, #0\n" + " mov r1, #0x2\n" + " bl GetSetPokedexFlag\n" + " add r0, r4, #0\n" + " mov r1, #0x3\n" + " bl GetSetPokedexFlag\n" + " cmp r5, #0xc9\n" + " bls ._180 @cond_branch\n" + " ldr r1, ._181\n" + " mov r0, #0x1\n" + " strb r0, [r1]\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r4, r5}\n" + " pop {r1}\n" + " bx r1\n" + "._182:\n" + " .align 2, 0\n" + "._181:\n" + " .word gUnknown_03005CE8\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_CreatePKMN() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " bl InitCreatePokemon\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_ViewPokemonGraphics() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " bl InitSeePokemonGraphics\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenSeeTrainers() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " bl InitSeeTrainers\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenMori() +{ + asm( + " push {lr}\n" + " bl InitMoriDebugMenu\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenTomomichi() +{ + asm( + " push {lr}\n" + " bl InitTomomichiDebugWindow\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenAoki() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenTaya() +{ + asm( + " push {lr}\n" + " bl InitTayaDebugWindow\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenNakamura() +{ + asm( + " push {lr}\n" + " bl InitNakamuraDebugMenu\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenIwasawa() +{ + asm( + " push {lr}\n" + " bl debug_sub_8138CC4\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_Teleport() +{ + asm( + " push {lr}\n" + " bl Overworld_SetWarpDestToLastHealLoc\n" + " bl sub_8080E88\n" + " bl ScriptContext2_Enable\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_EditPKMN() +{ + asm( + " push {lr}\n" + " bl Menu_EraseScreen\n" + " bl debug_sub_815FFDC\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80776B4() +{ + asm( + " push {r4, r5, lr}\n" + " add sp, sp, #0xfffffff8\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " ldr r1, ._183\n" + " mov r0, sp\n" + " mov r2, #0x7\n" + " bl memcpy\n" + " lsl r3, r4, #0x1\n" + " lsl r5, r4, #0x19\n" + " lsr r5, r5, #0x18\n" + " add r3, r3, #0x1\n" + " lsl r3, r3, #0x18\n" + " lsr r3, r3, #0x18\n" + " mov r0, #0x19\n" + " add r1, r5, #0\n" + " mov r2, #0x1d\n" + " bl Menu_BlankWindowRect\n" + " ldr r0, ._183 + 4\n" + " ldrb r0, [r0]\n" + " ASR r0, r4\n" + " mov r1, #0x1\n" + " and r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, sp\n" + " mov r1, #0x19\n" + " add r2, r5, #0\n" + " bl Menu_PrintText\n" + " add sp, sp, #0x8\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._184:\n" + " .align 2, 0\n" + "._183:\n" + " .word Str_839BE4C\n" + " .word gUnknown_030006C8 \n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077704() +{ + asm( + " push {lr}\n" + " add sp, sp, #0xffffffec\n" + " ldr r1, ._185\n" + " mov r0, sp\n" + " mov r2, #0x11\n" + " bl memcpy\n" + " mov r0, #0x13\n" + " mov r1, #0x0\n" + " mov r2, #0x1d\n" + " mov r3, #0x8\n" + " bl Menu_BlankWindowRect\n" + " mov r0, sp\n" + " mov r1, #0x15\n" + " mov r2, #0x0\n" + " bl Menu_PrintText\n" + " ldr r2, ._185 + 4\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x13\n" + " ldrh r0, [r0]\n" + " lsr r0, r0, #0x8\n" + " mov r1, #0xf\n" + " and r0, r0, r1\n" + " strb r0, [r2]\n" + " mov r0, #0x0\n" + " bl DebugMenu_80776B4\n" + " mov r0, #0x1\n" + " bl DebugMenu_80776B4\n" + " mov r0, #0x2\n" + " bl DebugMenu_80776B4\n" + " mov r0, #0x3\n" + " bl DebugMenu_80776B4\n" + " add sp, sp, #0x14\n" + " pop {r0}\n" + " bx r0\n" + "._186:\n" + " .align 2, 0\n" + "._185:\n" + " .word Str_839BE53\n" + " .word gUnknown_030006C8 \n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_8077760() +{ + asm( + " push {r4, r5, lr}\n" + " ldr r2, ._190\n" + " ldrh r1, [r2, #0x2e]\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " add r5, r2, #0\n" + " cmp r0, #0\n" + " beq ._187 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " mov r0, #0x1\n" + " neg r0, r0\n" + " bl Menu_MoveCursor\n" + " ldr r1, ._190 + 4\n" + " ldrb r0, [r1]\n" + " cmp r0, #0\n" + " beq ._188 @cond_branch\n" + " sub r0, r0, #0x1\n" + " b ._189\n" + "._191:\n" + " .align 2, 0\n" + "._190:\n" + " .word gMain\n" + " .word gUnknown_030006B8 \n" + "._188:\n" + " mov r0, #0x3\n" + "._189:\n" + " strb r0, [r1]\n" + "._187:\n" + " ldrh r1, [r5, #0x2e]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._192 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " mov r0, #0x1\n" + " bl Menu_MoveCursor\n" + " ldr r1, ._195\n" + " ldrb r0, [r1]\n" + " cmp r0, #0x3\n" + " beq ._193 @cond_branch\n" + " add r0, r0, #0x1\n" + " b ._194\n" + "._196:\n" + " .align 2, 0\n" + "._195:\n" + " .word gUnknown_030006B8 \n" + "._193:\n" + " mov r0, #0x0\n" + "._194:\n" + " strb r0, [r1]\n" + "._192:\n" + " ldrh r1, [r5, #0x2e]\n" + " mov r0, #0x30\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._197 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r4, ._201\n" + " bl Menu_GetCursorPos\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov r1, #0x1\n" + " LSL r1, r0\n" + " ldrb r0, [r4]\n" + " eor r1, r1, r0\n" + " strb r1, [r4]\n" + " bl Menu_GetCursorPos\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl DebugMenu_80776B4\n" + "._197:\n" + " ldrh r2, [r5, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r2\n" + " cmp r0, #0\n" + " bne ._198 @cond_branch\n" + " mov r0, #0x2\n" + " and r0, r0, r2\n" + " cmp r0, #0\n" + " beq ._199 @cond_branch\n" + "._198:\n" + " mov r2, #0x80\n" + " lsl r2, r2, #0x13\n" + " ldrh r0, [r2]\n" + " ldr r1, ._201 + 4\n" + " and r1, r1, r0\n" + " ldr r0, ._201\n" + " ldrb r0, [r0]\n" + " lsl r0, r0, #0x8\n" + " add r1, r1, r0\n" + " strh r1, [r2]\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " b ._200\n" + "._202:\n" + " .align 2, 0\n" + "._201:\n" + " .word gUnknown_030006C8 \n" + " .word 0xf0ff\n" + "._199:\n" + " mov r0, #0x0\n" + "._200:\n" + " pop {r4, r5}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_SwitchBG() +{ + asm( + " push {lr}\n" + " add sp, sp, #0xfffffff8\n" + " bl Menu_EraseScreen\n" + " bl DebugMenu_8077704\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " mov r0, #0x6\n" + " str r0, [sp, #0x4]\n" + " mov r0, #0x0\n" + " mov r1, #0x14\n" + " mov r2, #0x0\n" + " mov r3, #0x4\n" + " bl InitMenu\n" + " ldr r1, ._203\n" + " ldr r0, ._203 + 4\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " add sp, sp, #0x8\n" + " pop {r1}\n" + " bx r1\n" + "._204:\n" + " .align 2, 0\n" + "._203:\n" + " .word gMenuCallback\n" + " .word DebugMenu_8077760+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_807786C() +{ + asm( + " push {r4, lr}\n" + " add sp, sp, #0xfffffff8\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " ldr r1, ._205\n" + " mov r0, sp\n" + " mov r2, #0x7\n" + " bl memcpy\n" + " mov r0, #0x19\n" + " mov r1, #0x0\n" + " mov r2, #0x1d\n" + " mov r3, #0x3\n" + " bl Menu_DrawStdWindowFrame\n" + " lsl r0, r4, #0x1\n" + " add r0, r0, r4\n" + " add r0, r0, sp\n" + " mov r1, #0x1a\n" + " mov r2, #0x1\n" + " bl Menu_PrintText\n" + " add sp, sp, #0x8\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._206:\n" + " .align 2, 0\n" + "._205:\n" + " .word Str_839BE64\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80778A8() +{ + asm( + " push {r4, lr}\n" + " ldr r4, ._211\n" + " ldrh r1, [r4, #0x2e]\n" + " mov r0, #0x30\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._207 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r2, ._211 + 4\n" + " ldrb r0, [r2]\n" + " mov r1, #0x1\n" + " eor r0, r0, r1\n" + " strb r0, [r2]\n" + " ldrb r0, [r2]\n" + " bl DebugMenu_807786C\n" + "._207:\n" + " ldrh r1, [r4, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._208 @cond_branch\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._209 @cond_branch\n" + "._208:\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " b ._210\n" + "._212:\n" + " .align 2, 0\n" + "._211:\n" + " .word gMain\n" + " .word sWildEncountersDisabled\n" + "._209:\n" + " mov r0, #0x0\n" + "._210:\n" + " pop {r4}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_ControlEncounter() +{ + asm( + " push {lr}\n" + " bl Menu_EraseScreen\n" + " ldr r0, ._213\n" + " ldrb r0, [r0]\n" + " bl DebugMenu_807786C\n" + " ldr r1, ._213 + 4\n" + " ldr r0, ._213 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._214:\n" + " .align 2, 0\n" + "._213:\n" + " .word sWildEncountersDisabled\n" + " .word gMenuCallback\n" + " .word DebugMenu_80778A8+1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_UseHM() +{ + asm( + " ldr r1, ._215\n" + " ldr r0, ._215 + 4\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " bx lr\n" + "._216:\n" + " .align 2, 0\n" + "._215:\n" + " .word gMenuCallback\n" + " .word DebugMenu_8077C14+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077934() +{ + asm( + " push {lr}\n" + " mov r1, #0x0\n" + " ldr r3, ._218\n" + " mov r2, #0x1\n" + "._217:\n" + " add r0, r1, r3\n" + " strb r2, [r0]\n" + " add r1, r1, #0x1\n" + " cmp r1, #0x63\n" + " bls ._217 @cond_branch\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._219:\n" + " .align 2, 0\n" + "._218:\n" + " .word gSaveBlock1+0x97a\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077954() +{ + asm( + " push {lr}\n" + " mov r1, #0x0\n" + " ldr r3, ._222\n" + " mov r2, #0x0\n" + "._221:\n" + " add r0, r1, r3\n" + " strb r2, [r0]\n" + " add r1, r1, #0x1\n" + " cmp r1, #0x63\n" + " bls ._221 @cond_branch\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._223:\n" + " .align 2, 0\n" + "._222:\n" + " .word gSaveBlock1+0x97a\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077974() +{ + asm( + " push {lr}\n" + " bl Menu_EraseScreen\n" + " ldr r1, ._226\n" + " mov r0, #0x4\n" + " ldsb r0, [r1, r0]\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " ldrb r1, [r1, #0x5]\n" + " lsl r1, r1, #0x18\n" + " asr r1, r1, #0x18\n" + " lsl r1, r1, #0x10\n" + " lsr r1, r1, #0x10\n" + " bl IsRematchTrainerIn\n" + " cmp r0, #0\n" + " beq ._224 @cond_branch\n" + " ldr r0, ._226 + 4\n" + " ldr r1, ._226 + 8\n" + " bl StringCopy\n" + " b ._225\n" + "._227:\n" + " .align 2, 0\n" + "._226:\n" + " .word gSaveBlock1\n" + " .word gStringVar1\n" + " .word Str_839BE8D\n" + "._224:\n" + " ldr r0, ._230\n" + " ldr r1, ._230 + 4\n" + " bl StringCopy\n" + "._225:\n" + " ldr r1, ._230 + 8\n" + " mov r0, #0x4\n" + " ldsb r0, [r1, r0]\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " ldrb r1, [r1, #0x5]\n" + " lsl r1, r1, #0x18\n" + " asr r1, r1, #0x18\n" + " lsl r1, r1, #0x10\n" + " lsr r1, r1, #0x10\n" + " bl DoesSomeoneWantRematchIn\n" + " cmp r0, #0\n" + " beq ._228 @cond_branch\n" + " ldr r0, ._230 + 12\n" + " ldr r1, ._230 + 16\n" + " bl StringCopy\n" + " b ._229\n" + "._231:\n" + " .align 2, 0\n" + "._230:\n" + " .word gStringVar1\n" + " .word Str_839BE90\n" + " .word gSaveBlock1\n" + " .word gStringVar2\n" + " .word Str_839BE8D\n" + "._228:\n" + " ldr r0, ._232\n" + " ldr r1, ._232 + 4\n" + " bl StringCopy\n" + "._229:\n" + " ldr r0, ._232 + 8\n" + " bl sub_8071F40\n" + " ldr r1, ._232 + 12\n" + " ldr r0, ._232 + 16\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._233:\n" + " .align 2, 0\n" + "._232:\n" + " .word gStringVar2\n" + " .word Str_839BE90\n" + " .word Str_839BE6B\n" + " .word gMenuCallback\n" + " .word DebugMenu_8077DB4+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077A20() +{ + asm( + " push {lr}\n" + " ldr r0, ._234\n" + " ldr r1, ._234 + 4\n" + " add r0, r0, r1\n" + " mov r1, #0xff\n" + " strh r1, [r0]\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._235:\n" + " .align 2, 0\n" + "._234:\n" + " .word gSaveBlock1\n" + " .word 0x978\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077A40() +{ + asm( + " push {lr}\n" + " ldr r0, ._236\n" + " ldr r1, ._236 + 4\n" + " add r0, r0, r1\n" + " mov r1, #0x0\n" + " strh r1, [r0]\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._237:\n" + " .align 2, 0\n" + "._236:\n" + " .word gSaveBlock1\n" + " .word 0x978\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077A60() +{ + asm( + " push {lr}\n" + " ldr r0, ._238\n" + " bl DebugMenu_8077D78\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "._239:\n" + " .align 2, 0\n" + "._238:\n" + " .word gUnknown_Debug_839BEE4\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_RematchTrainers() +{ + asm( + " push {lr}\n" + " bl Menu_EraseScreen\n" + " ldr r0, ._240\n" + " mov r1, #0xd\n" + " mov r2, #0x5\n" + " bl DebugMenu_8077D24\n" + " ldr r1, ._240 + 4\n" + " ldr r0, ._240 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._241:\n" + " .align 2, 0\n" + "._240:\n" + " .word gUnknown_Debug_839BEE4\n" + " .word gMenuCallback\n" + " .word DebugMenu_8077A60+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077A9C() +{ + asm( + " push {lr}\n" + " ldr r1, ._242\n" + " mov r0, #0x1e\n" + " strb r0, [r1]\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._243:\n" + " .align 2, 0\n" + "._242:\n" + " .word gNumSafariBalls\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077AB4() +{ + asm( + " push {lr}\n" + " ldr r1, ._244\n" + " mov r0, #0x1\n" + " strb r0, [r1]\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._245:\n" + " .align 2, 0\n" + "._244:\n" + " .word gNumSafariBalls\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077ACC() +{ + asm( + " push {lr}\n" + " ldr r1, ._246\n" + " mov r2, #0xfa\n" + " lsl r2, r2, #0x1\n" + " add r0, r2, #0\n" + " strh r0, [r1]\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._247:\n" + " .align 2, 0\n" + "._246:\n" + " .word gSafariZoneStepCounter\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077AE8() +{ + asm( + " push {lr}\n" + " ldr r1, ._248\n" + " mov r0, #0x1\n" + " strh r0, [r1]\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._249:\n" + " .align 2, 0\n" + "._248:\n" + " .word gSafariZoneStepCounter\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077B00() +{ + asm( + " push {lr}\n" + " bl Menu_EraseScreen\n" + " bl unref_sub_80C853C\n" + " cmp r0, #0\n" + " beq ._250 @cond_branch\n" + " ldr r0, ._252\n" + " bl sub_8071F40\n" + " b ._251\n" + "._253:\n" + " .align 2, 0\n" + "._252:\n" + " .word Str_839BF14\n" + "._250:\n" + " ldr r0, ._254\n" + " bl sub_8071F40\n" + "._251:\n" + " ldr r1, ._254 + 4\n" + " ldr r0, ._254 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._255:\n" + " .align 2, 0\n" + "._254:\n" + " .word Str_839BF1F\n" + " .word gMenuCallback\n" + " .word DebugMenu_8077DB4+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077B3C() +{ + asm( + " push {lr}\n" + " ldr r0, ._256\n" + " bl DebugMenu_8077D78\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "._257:\n" + " .align 2, 0\n" + "._256:\n" + " .word gUnknown_Debug_839BF6C\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_Safari() +{ + asm( + " push {lr}\n" + " bl GetSafariZoneFlag\n" + " cmp r0, #0\n" + " beq ._258 @cond_branch\n" + " bl Menu_EraseScreen\n" + " ldr r0, ._260\n" + " mov r1, #0xe\n" + " mov r2, #0x5\n" + " bl DebugMenu_8077D24\n" + " ldr r0, ._260 + 4\n" + " ldr r1, ._260 + 8\n" + " ldrh r1, [r1]\n" + " mov r2, #0x1\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " ldr r0, ._260 + 12\n" + " bl sub_8071F40\n" + " ldr r1, ._260 + 16\n" + " ldr r0, ._260 + 20\n" + " str r0, [r1]\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x0\n" + " b ._259\n" + "._261:\n" + " .align 2, 0\n" + "._260:\n" + " .word gUnknown_Debug_839BF6C\n" + " .word gStringVar1\n" + " .word gSafariZoneStepCounter\n" + " .word Str_839BF0C\n" + " .word gMenuCallback\n" + " .word DebugMenu_8077B3C+1\n" + "._258:\n" + " bl CloseMenu\n" + " mov r0, #0x16\n" + " bl PlaySE\n" + " mov r0, #0x1\n" + "._259:\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077BB4() +{ + asm( + " push {lr}\n" + " bl debug_sub_80AFEE4\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077BC0() +{ + asm( + " push {lr}\n" + " bl debug_sub_8122080\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077BCC() +{ + asm( + " push {lr}\n" + " bl debug_sub_8120968\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077BD8() +{ + asm( + " push {lr}\n" + " bl debug_sub_8130318\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077BE4() +{ + asm( + " push {lr}\n" + " bl debug_sub_80986AC\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077BF4() +{ + asm( + " push {lr}\n" + " bl debug_sub_80D93F4\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077C00() +{ + asm( + " push {lr}\n" + " ldr r0, ._262\n" + " bl DebugMenu_8077D78\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "._263:\n" + " .align 2, 0\n" + "._262:\n" + " .word gUnknown_Debug_839BF94\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077C14() +{ + asm( + " push {lr}\n" + " bl Menu_EraseScreen\n" + " ldr r0, ._264\n" + " mov r1, #0xa\n" + " mov r2, #0x9\n" + " bl DebugMenu_8077D24\n" + " ldr r1, ._264 + 4\n" + " ldr r0, ._264 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._265:\n" + " .align 2, 0\n" + "._264:\n" + " .word gUnknown_Debug_839BF94\n" + " .word gMenuCallback\n" + " .word DebugMenu_8077C00+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077C3C() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xfffffffc\n" + " mov sl, r0\n" + " add r7, r1, #0\n" + " ldr r0, ._271\n" + " ldr r1, ._271 + 4\n" + " str r1, [r0]\n" + " mov r1, #0x0\n" + " strb r1, [r7]\n" + " add r7, r7, #0x1\n" + " strb r1, [r7]\n" + " add r7, r7, #0x1\n" + " mov r3, #0x0\n" + " mov r8, r0\n" + "._269:\n" + " mov r5, #0x0\n" + " ldr r1, ._271\n" + " ldr r0, [r1]\n" + " ldr r2, [r0, #0x4]\n" + " mov r4, #0x0\n" + " ldr r1, [r0, #0x8]\n" + " add r3, r3, #0x1\n" + " mov r9, r3\n" + " cmp r5, r1\n" + " bge ._266 @cond_branch\n" + " add r3, r0, #0\n" + " add r6, r1, #0\n" + "._267:\n" + " ldr r0, [r3, #0xc]\n" + " add r0, r0, r4\n" + " add r0, r0, sl\n" + " ldrb r0, [r0]\n" + " sub r0, r0, #0x30\n" + " mul r0, r0, r2\n" + " add r5, r5, r0\n" + " add r4, r4, #0x1\n" + " add r0, r2, #0\n" + " mov r1, #0xa\n" + " str r3, [sp]\n" + " bl __divsi3\n" + " add r2, r0, #0\n" + " ldr r3, [sp]\n" + " cmp r4, r6\n" + " blt ._267 @cond_branch\n" + "._266:\n" + " mov r0, r8\n" + " ldr r1, [r0]\n" + " ldr r0, [r1]\n" + " cmp r0, r5\n" + " bcs ._268 @cond_branch\n" + " add r5, r0, #0\n" + "._268:\n" + " ldrb r3, [r1, #0x8]\n" + " add r0, r7, #0\n" + " add r1, r5, #0\n" + " mov r2, #0x2\n" + " bl ConvertIntToDecimalStringN\n" + " add r7, r0, #0\n" + " mov r3, r9\n" + " mov r1, r8\n" + " ldr r0, [r1]\n" + " add r0, r0, #0x10\n" + " str r0, [r1]\n" + " cmp r3, #0x1\n" + " ble ._269 @cond_branch\n" + " mov r1, sl\n" + " ldrb r0, [r1, #0x1d]\n" + " add r0, r0, #0x7a\n" + " strb r0, [r7]\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0xf6\n" + " bls ._270 @cond_branch\n" + " mov r0, #0xf6\n" + " strb r0, [r7]\n" + "._270:\n" + " mov r0, #0xff\n" + " strb r0, [r7, #0x1]\n" + " add sp, sp, #0x4\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._272:\n" + " .align 2, 0\n" + "._271:\n" + " .word gUnknown_030006BC \n" + " .word gUnknown_Debug_839BFE8\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8077CF4() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add r4, r0, #0\n" + " add r5, r1, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " lsl r5, r5, #0x18\n" + " lsr r5, r5, #0x18\n" + " ldr r0, ._273\n" + " ldr r6, ._273 + 4\n" + " add r1, r6, #0\n" + " bl DebugMenu_8077C3C\n" + " add r0, r6, #0\n" + " add r1, r4, #0\n" + " add r2, r5, #0\n" + " bl Menu_PrintText\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._274:\n" + " .align 2, 0\n" + "._273:\n" + " .word BuildDateTime\n" + " .word gStringVar4\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077D24() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add sp, sp, #0xfffffff8\n" + " add r6, r0, #0\n" + " add r4, r1, #0\n" + " add r5, r2, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " lsl r5, r5, #0x18\n" + " lsr r5, r5, #0x18\n" + " bl Menu_EraseScreen\n" + " lsl r3, r5, #0x1\n" + " add r3, r3, #0x1\n" + " lsl r3, r3, #0x18\n" + " lsr r3, r3, #0x18\n" + " mov r0, #0x0\n" + " mov r1, #0x0\n" + " add r2, r4, #0\n" + " bl Menu_DrawStdWindowFrame\n" + " mov r0, #0x1\n" + " mov r1, #0x1\n" + " add r2, r5, #0\n" + " add r3, r6, #0\n" + " bl Menu_PrintItems\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " sub r4, r4, #0x1\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " str r4, [sp, #0x4]\n" + " mov r1, #0x1\n" + " mov r2, #0x1\n" + " add r3, r5, #0\n" + " bl InitMenu\n" + " add sp, sp, #0x8\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077D78() +{ + asm( + " push {r4, r5, lr}\n" + " add r5, r0, #0\n" + " bl Menu_ProcessInput\n" + " lsl r0, r0, #0x18\n" + " asr r4, r0, #0x18\n" + " mov r0, #0x2\n" + " neg r0, r0\n" + " cmp r4, r0\n" + " beq ._275 @cond_branch\n" + " add r0, r0, #0x1\n" + " cmp r4, r0\n" + " beq ._276 @cond_branch\n" + " bl Menu_EraseScreen\n" + " ldr r0, ._278\n" + " lsl r1, r4, #0x3\n" + " add r1, r1, r5\n" + " ldr r1, [r1, #0x4]\n" + " str r1, [r0]\n" + "._275:\n" + " mov r0, #0x0\n" + " b ._277\n" + "._279:\n" + " .align 2, 0\n" + "._278:\n" + " .word gMenuCallback\n" + "._276:\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + "._277:\n" + " pop {r4, r5}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077DB4() +{ + asm( + " push {lr}\n" + " ldr r0, ._282\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._280 @cond_branch\n" + " mov r0, #0x0\n" + " b ._281\n" + "._283:\n" + " .align 2, 0\n" + "._282:\n" + " .word gMain\n" + "._280:\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + "._281:\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077DD8() +{ + asm( + " push {r4, r5, lr}\n" + " add r4, r0, #0\n" + " add r5, r1, #0\n" + " lsl r3, r3, #0x10\n" + " lsr r3, r3, #0x10\n" + " add r1, r3, #0\n" + " mov r0, #0x80\n" + " and r0, r0, r3\n" + " cmp r0, #0\n" + " beq ._284 @cond_branch\n" + " ldrh r0, [r4]\n" + " sub r0, r0, #0x1\n" + " b ._285\n" + "._284:\n" + " mov r0, #0x40\n" + " and r0, r0, r3\n" + " cmp r0, #0\n" + " beq ._286 @cond_branch\n" + " ldrh r0, [r4]\n" + " add r0, r0, #0x1\n" + " b ._287\n" + "._286:\n" + " mov r0, #0x20\n" + " and r0, r0, r3\n" + " cmp r0, #0\n" + " beq ._288 @cond_branch\n" + " ldrh r0, [r4]\n" + " sub r0, r0, #0xa\n" + "._285:\n" + " strh r0, [r4]\n" + " mov r1, #0x0\n" + " ldsh r0, [r4, r1]\n" + " cmp r0, r5\n" + " bge ._293 @cond_branch\n" + " strh r2, [r4]\n" + " b ._293\n" + "._288:\n" + " mov r0, #0x10\n" + " and r1, r1, r0\n" + " cmp r1, #0\n" + " bne ._291 @cond_branch\n" + " mov r0, #0x0\n" + " b ._292\n" + "._291:\n" + " ldrh r0, [r4]\n" + " add r0, r0, #0xa\n" + "._287:\n" + " strh r0, [r4]\n" + " mov r1, #0x0\n" + " ldsh r0, [r4, r1]\n" + " cmp r0, r2\n" + " ble ._293 @cond_branch\n" + " strh r5, [r4]\n" + "._293:\n" + " mov r0, #0x1\n" + "._292:\n" + " pop {r4, r5}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077E40() +{ + asm( + " push {r4, lr}\n" + " add r4, r0, #0\n" + " ldr r0, ._297\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._294 @cond_branch\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._295 @cond_branch\n" + "._294:\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " neg r0, r0\n" + " b ._302\n" + "._298:\n" + " .align 2, 0\n" + "._297:\n" + " .word gMain\n" + "._295:\n" + " mov r0, #0x30\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._299 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " cmp r4, #0\n" + " beq ._300 @cond_branch\n" + " mov r0, #0x1\n" + " bl DebugMenu_807786C\n" + " mov r0, #0x0\n" + " b ._302\n" + "._300:\n" + " mov r0, #0x0\n" + " bl DebugMenu_807786C\n" + " mov r0, #0x1\n" + " b ._302\n" + "._299:\n" + " add r0, r4, #0\n" + "._302:\n" + " pop {r4}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_MakeItems() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " bl DebugMenu_8077EAC\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077EAC() +{ + asm( + " push {r4, lr}\n" + " ldr r0, ._303\n" + " mov r1, #0x50\n" + " bl CreateTask\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " bl Menu_EraseScreen\n" + " ldr r1, ._303 + 4\n" + " lsl r0, r4, #0x2\n" + " add r0, r0, r4\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0x1\n" + " strh r1, [r0, #0xa]\n" + " strh r1, [r0, #0xc]\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._304:\n" + " .align 2, 0\n" + "._303:\n" + " .word DebugMenu_8077F40+1\n" + " .word gTasks\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077EE0() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add r4, r0, #0\n" + " add r6, r1, #0\n" + " lsl r4, r4, #0x10\n" + " lsr r4, r4, #0x10\n" + " lsl r6, r6, #0x10\n" + " lsr r6, r6, #0x10\n" + " mov r0, #0x4\n" + " mov r1, #0x11\n" + " mov r2, #0x16\n" + " mov r3, #0x12\n" + " bl Menu_BlankWindowRect\n" + " ldr r5, ._305\n" + " add r0, r5, #0\n" + " add r1, r4, #0\n" + " mov r2, #0x1\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " add r0, r5, #0\n" + " mov r1, #0x4\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + " add r0, r4, #0\n" + " bl ItemId_GetItem\n" + " mov r1, #0x8\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + " add r0, r5, #0\n" + " add r1, r6, #0\n" + " mov r2, #0x1\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " add r0, r5, #0\n" + " mov r1, #0x12\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._306:\n" + " .align 2, 0\n" + "._305:\n" + " .word gStringVar1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077F40() +{ + asm( + " push {r4, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " lsl r4, r0, #0x2\n" + " add r4, r4, r0\n" + " lsl r4, r4, #0x3\n" + " ldr r0, ._307\n" + " add r4, r4, r0\n" + " bl Menu_DisplayDialogueFrame\n" + " ldr r0, ._307 + 4\n" + " mov r1, #0x2\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " ldrh r0, [r4, #0xa]\n" + " ldrh r1, [r4, #0xc]\n" + " bl DebugMenu_8077EE0\n" + " ldr r0, ._307 + 8\n" + " str r0, [r4]\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._308:\n" + " .align 2, 0\n" + "._307:\n" + " .word gTasks\n" + " .word gDebug0x839C008\n" + " .word DebugMenu_8077F7C+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077F7C() +{ + asm( + " push {r4, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x3\n" + " ldr r0, ._311\n" + " add r4, r1, r0\n" + " ldr r3, ._311 + 4\n" + " ldrh r1, [r3, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._309 @cond_branch\n" + " bl Menu_DisplayDialogueFrame\n" + " ldr r0, ._311 + 8\n" + " mov r1, #0x2\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " ldrh r0, [r4, #0xa]\n" + " ldrh r1, [r4, #0xc]\n" + " bl DebugMenu_8077EE0\n" + " ldr r0, ._311 + 12\n" + " str r0, [r4]\n" + " b ._317\n" + "._312:\n" + " .align 2, 0\n" + "._311:\n" + " .word gTasks\n" + " .word gMain\n" + " .word Str_839C014\n" + " .word DebugMenu_8077FFC+1\n" + "._309:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._313 @cond_branch\n" + " ldr r0, ._315\n" + " str r0, [r4]\n" + " b ._317\n" + "._316:\n" + " .align 2, 0\n" + "._315:\n" + " .word DebugMenu_807806C+1\n" + "._313:\n" + " add r0, r4, #0\n" + " add r0, r0, #0xa\n" + " mov r2, #0xae\n" + " lsl r2, r2, #0x1\n" + " ldrh r3, [r3, #0x30]\n" + " mov r1, #0x1\n" + " bl DebugMenu_8077DD8\n" + " cmp r0, #0x1\n" + " bne ._317 @cond_branch\n" + " ldrh r0, [r4, #0xa]\n" + " ldrh r1, [r4, #0xc]\n" + " bl DebugMenu_8077EE0\n" + "._317:\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8077FFC() +{ + asm( + " push {r4, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x3\n" + " ldr r0, ._321\n" + " add r4, r1, r0\n" + " ldr r2, ._321 + 4\n" + " ldrh r1, [r2, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._318 @cond_branch\n" + " ldrh r0, [r4, #0xa]\n" + " ldrh r1, [r4, #0xc]\n" + " bl AddBagItem\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x1\n" + " bne ._320 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " b ._320\n" + "._322:\n" + " .align 2, 0\n" + "._321:\n" + " .word gTasks\n" + " .word gMain\n" + "._318:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._323 @cond_branch\n" + "._320:\n" + " ldr r0, ._325\n" + " str r0, [r4]\n" + " b ._327\n" + "._326:\n" + " .align 2, 0\n" + "._325:\n" + " .word DebugMenu_8077F40+1\n" + "._323:\n" + " add r0, r4, #0\n" + " add r0, r0, #0xc\n" + " ldrh r3, [r2, #0x30]\n" + " mov r1, #0x1\n" + " mov r2, #0x63\n" + " bl DebugMenu_8077DD8\n" + " cmp r0, #0x1\n" + " bne ._327 @cond_branch\n" + " ldrh r0, [r4, #0xa]\n" + " ldrh r1, [r4, #0xc]\n" + " bl DebugMenu_8077EE0\n" + "._327:\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_807806C() +{ + asm( + " push {r4, lr}\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " bl Menu_EraseScreen\n" + " bl ScriptContext2_Disable\n" + " add r0, r4, #0\n" + " bl DestroyTask\n" + " bl DebugMenu_8077048\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_807808C() +{ + asm( + " push {r4, r5, lr}\n" + " add sp, sp, #0xfffffff4\n" + " add r4, r0, #0\n" + " sub r0, r4, #1\n" + " cmp r0, #0xc\n" + " bls ._328 @cond_branch\n" + " mov r4, #0x1\n" + "._328:\n" + " lsl r1, r4, #0x5\n" + " ldr r0, ._331\n" + " add r5, r1, r0\n" + " bl Menu_EraseScreen\n" + " mov r0, #0x0\n" + " mov r1, #0x0\n" + " mov r2, #0x13\n" + " mov r3, #0x11\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r0, ._331 + 4\n" + " mov r1, #0x2\n" + " mov r2, #0x2\n" + " bl Menu_PrintText\n" + " mov r0, sp\n" + " add r1, r4, #0\n" + " mov r2, #0x1\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0xb\n" + " mov r2, #0x2\n" + " bl Menu_PrintText\n" + " ldrh r1, [r5, #0x8]\n" + " mov r0, sp\n" + " mov r2, #0x1\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0xb\n" + " mov r2, #0x4\n" + " bl Menu_PrintText\n" + " add r4, r5, #0\n" + " add r4, r4, #0xb\n" + " add r0, r4, #0\n" + " bl StringLength\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " cmp r0, #0xb\n" + " bhi ._329 @cond_branch\n" + " add r0, r4, #0\n" + " mov r1, #0xb\n" + " mov r2, #0x6\n" + " bl Menu_PrintText\n" + " b ._330\n" + "._332:\n" + " .align 2, 0\n" + "._331:\n" + " .word gSaveBlock1+0x2ddc\n" + " .word Str_839C01E\n" + "._329:\n" + " ldr r0, ._335\n" + " mov r1, #0xb\n" + " mov r2, #0x6\n" + " bl Menu_PrintText\n" + "._330:\n" + " add r4, r5, #0\n" + " add r4, r4, #0x16\n" + " add r0, r4, #0\n" + " bl StringLength\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " cmp r0, #0xb\n" + " bhi ._333 @cond_branch\n" + " add r0, r4, #0\n" + " mov r1, #0xb\n" + " mov r2, #0x8\n" + " bl Menu_PrintText\n" + " b ._334\n" + "._336:\n" + " .align 2, 0\n" + "._335:\n" + " .word Str_839C04D\n" + "._333:\n" + " ldr r0, ._337\n" + " mov r1, #0xb\n" + " mov r2, #0x8\n" + " bl Menu_PrintText\n" + "._334:\n" + " ldrb r1, [r5, #0xa]\n" + " mov r0, sp\n" + " mov r2, #0x1\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0xb\n" + " mov r2, #0xa\n" + " bl Menu_PrintText\n" + " ldr r1, [r5]\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x8\n" + " bl ConvertIntToHexStringN\n" + " mov r0, sp\n" + " mov r1, #0xb\n" + " mov r2, #0xc\n" + " bl Menu_PrintText\n" + " add sp, sp, #0xc\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._338:\n" + " .align 2, 0\n" + "._337:\n" + " .word Str_839C04D\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_807817C() +{ + asm( + " push {r4, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " ldr r0, ._340\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._339 @cond_branch\n" + " bl Menu_EraseScreen\n" + " add r0, r4, #0\n" + " bl DestroyTask\n" + " bl ScriptContext2_Disable\n" + "._339:\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._341:\n" + " .align 2, 0\n" + "._340:\n" + " .word gMain\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80781A8() +{ + asm( + " push {r4, r5, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x3\n" + " ldr r0, ._344\n" + " add r5, r1, r0\n" + " ldrh r1, [r5, #0x8]\n" + " mov r2, #0x8\n" + " ldsh r0, [r5, r2]\n" + " cmp r0, #0\n" + " bne ._342 @cond_branch\n" + " add r0, r1, #1\n" + " strh r0, [r5, #0x8]\n" + " b ._343\n" + "._345:\n" + " .align 2, 0\n" + "._344:\n" + " .word gTasks\n" + "._342:\n" + " ldr r2, ._348\n" + " ldrh r1, [r2, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._346 @cond_branch\n" + " mov r1, #0x8\n" + " ldsh r0, [r5, r1]\n" + " bl DebugMenu_807808C\n" + " ldr r0, ._348 + 4\n" + " str r0, [r5]\n" + " b ._350\n" + "._349:\n" + " .align 2, 0\n" + "._348:\n" + " .word gMain\n" + " .word DebugMenu_807817C+1\n" + "._346:\n" + " add r0, r5, #0\n" + " add r0, r0, #0x8\n" + " ldrh r1, [r2, #0x30]\n" + " mov r3, #0xc0\n" + " and r3, r3, r1\n" + " mov r1, #0x1\n" + " mov r2, #0xd\n" + " bl DebugMenu_8077DD8\n" + " cmp r0, #0\n" + " beq ._350 @cond_branch\n" + "._343:\n" + " mov r0, #0x4\n" + " mov r1, #0x11\n" + " mov r2, #0x16\n" + " mov r3, #0x12\n" + " bl Menu_BlankWindowRect\n" + " ldr r4, ._351\n" + " mov r2, #0x8\n" + " ldsh r1, [r5, r2]\n" + " add r0, r4, #0\n" + " mov r2, #0x1\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " add r0, r4, #0\n" + " mov r1, #0x4\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + "._350:\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._352:\n" + " .align 2, 0\n" + "._351:\n" + " .word gStringVar1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_ViewPortraits() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " ldr r0, ._353\n" + " mov r1, #0x50\n" + " bl CreateTask\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._354:\n" + " .align 2, 0\n" + "._353:\n" + " .word DebugMenu_80781A8+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078254() +{ + asm( + " push {lr}\n" + " bl DebugMenu_807808C\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_AllBadges() +{ + asm( + " push {lr}\n" + " ldr r0, ._355\n" + " bl FlagSet\n" + " ldr r0, ._355 + 4\n" + " bl FlagSet\n" + " ldr r0, ._355 + 8\n" + " bl FlagSet\n" + " ldr r0, ._355 + 12\n" + " bl FlagSet\n" + " ldr r0, ._355 + 16\n" + " bl FlagSet\n" + " ldr r0, ._355 + 20\n" + " bl FlagSet\n" + " ldr r0, ._355 + 24\n" + " bl FlagSet\n" + " ldr r0, ._355 + 28\n" + " bl FlagSet\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._356:\n" + " .align 2, 0\n" + "._355:\n" + " .word 0x807\n" + " .word 0x808\n" + " .word 0x809\n" + " .word 0x80a\n" + " .word 0x80b\n" + " .word 0x80c\n" + " .word 0x80d\n" + " .word 0x80e\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_TimeRecords() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " ldr r0, ._357\n" + " mov r1, #0x50\n" + " bl CreateTask\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._358:\n" + " .align 2, 0\n" + "._357:\n" + " .word debug_sub_806F9E4+1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_SetTime() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " bl debug_sub_806F99C\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80782EC() +{ + asm( + " push {lr}\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x10\n" + " lsr r1, r1, #0x10\n" + " ldr r0, ._359\n" + " mov r2, #0x0\n" + " mov r3, #0x4\n" + " bl ConvertIntToHexStringN\n" + " ldr r0, ._359 + 4\n" + " bl sub_8071F40\n" + " pop {r0}\n" + " bx r0\n" + "._360:\n" + " .align 2, 0\n" + "._359:\n" + " .word gStringVar1\n" + " .word Str_839C053\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078310() +{ + asm( + " push {r4, r5, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " ldr r1, ._364\n" + " add r4, r0, r1\n" + " mov r1, #0x0\n" + " ldsh r0, [r4, r1]\n" + " cmp r0, #0\n" + " beq ._361 @cond_branch\n" + " cmp r0, #0x1\n" + " beq ._362 @cond_branch\n" + " b ._375\n" + "._365:\n" + " .align 2, 0\n" + "._364:\n" + " .word gTasks+0x8\n" + "._361:\n" + " ldr r0, ._367\n" + " bl VarGet\n" + " strh r0, [r4, #0x2]\n" + " ldrh r0, [r4, #0x2]\n" + " bl DebugMenu_80782EC\n" + " ldrh r0, [r4]\n" + " add r0, r0, #0x1\n" + " strh r0, [r4]\n" + " b ._375\n" + "._368:\n" + " .align 2, 0\n" + "._367:\n" + " .word 0x4024\n" + "._362:\n" + " ldr r3, ._371\n" + " ldrh r1, [r3, #0x2e]\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._369 @cond_branch\n" + " mov r0, #0x49\n" + " bl PlaySE\n" + " ldr r0, ._371 + 4\n" + " bl GetVarPointer\n" + " ldrh r1, [r4, #0x2]\n" + " strh r1, [r0]\n" + " b ._370\n" + "._372:\n" + " .align 2, 0\n" + "._371:\n" + " .word gMain\n" + " .word 0x4024\n" + "._369:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._373 @cond_branch\n" + "._370:\n" + " bl Menu_EraseScreen\n" + " add r0, r5, #0\n" + " bl DestroyTask\n" + " bl ScriptContext2_Disable\n" + " b ._375\n" + "._373:\n" + " add r0, r4, #2\n" + " ldr r2, ._376\n" + " ldrh r3, [r3, #0x30]\n" + " mov r1, #0x0\n" + " bl DebugMenu_8077DD8\n" + " cmp r0, #0x1\n" + " bne ._375 @cond_branch\n" + " ldrh r0, [r4, #0x2]\n" + " bl DebugMenu_80782EC\n" + "._375:\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._377:\n" + " .align 2, 0\n" + "._376:\n" + " .word 0xffff\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_MiragaIslandRND() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " ldr r0, ._378\n" + " mov r1, #0x50\n" + " bl CreateTask\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._379:\n" + " .align 2, 0\n" + "._378:\n" + " .word DebugMenu_8078310+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80783C8() +{ + asm( + " push {r4, lr}\n" + " ldr r0, ._383\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x30\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._382 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r4, ._383 + 4\n" + " add r0, r4, #0\n" + " bl FlagGet\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._381 @cond_branch\n" + " add r0, r4, #0\n" + " bl FlagSet\n" + " mov r0, #0x0\n" + " bl DebugMenu_807786C\n" + " b ._382\n" + "._384:\n" + " .align 2, 0\n" + "._383:\n" + " .word gMain\n" + " .word 0x804\n" + "._381:\n" + " add r0, r4, #0\n" + " bl FlagClear\n" + " mov r0, #0x1\n" + " bl DebugMenu_807786C\n" + "._382:\n" + " ldr r0, ._388\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._385 @cond_branch\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._386 @cond_branch\n" + "._385:\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " b ._387\n" + "._389:\n" + " .align 2, 0\n" + "._388:\n" + " .word gMain\n" + "._386:\n" + " mov r0, #0x0\n" + "._387:\n" + " pop {r4}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_ToggleClearFlag() +{ + asm( + " push {lr}\n" + " bl Menu_EraseScreen\n" + " ldr r0, ._390\n" + " bl FlagGet\n" + " mov r1, #0x1\n" + " eor r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl DebugMenu_807786C\n" + " ldr r1, ._390 + 4\n" + " ldr r0, ._390 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._391:\n" + " .align 2, 0\n" + "._390:\n" + " .word 0x804\n" + " .word gMenuCallback\n" + " .word DebugMenu_80783C8+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078464() +{ + asm( + " push {r4, lr}\n" + " ldr r4, ._396\n" + " add r0, r4, #0\n" + " bl FlagGet\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl DebugMenu_8077E40\n" + " add r1, r0, #0\n" + " cmp r1, #0\n" + " beq ._392 @cond_branch\n" + " cmp r1, #0\n" + " bgt ._393 @cond_branch\n" + " mov r0, #0x1\n" + " neg r0, r0\n" + " cmp r1, r0\n" + " beq ._394 @cond_branch\n" + " b ._401\n" + "._397:\n" + " .align 2, 0\n" + "._396:\n" + " .word 0x82a\n" + "._393:\n" + " cmp r1, #0x1\n" + " beq ._398 @cond_branch\n" + " b ._401\n" + "._392:\n" + " add r0, r4, #0\n" + " bl FlagClear\n" + " b ._401\n" + "._398:\n" + " add r0, r4, #0\n" + " bl FlagSet\n" + " b ._401\n" + "._394:\n" + " mov r0, #0x1\n" + " b ._402\n" + "._401:\n" + " mov r0, #0x0\n" + "._402:\n" + " pop {r4}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenWeatherEvents() +{ + asm( + " push {lr}\n" + " bl Menu_EraseScreen\n" + " ldr r0, ._404\n" + " bl FlagGet\n" + " mov r1, #0x0\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._403 @cond_branch\n" + " mov r1, #0x1\n" + "._403:\n" + " add r0, r1, #0\n" + " bl DebugMenu_807786C\n" + " ldr r1, ._404 + 4\n" + " ldr r0, ._404 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._405:\n" + " .align 2, 0\n" + "._404:\n" + " .word 0x82a\n" + " .word gMenuCallback\n" + " .word DebugMenu_8078464+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80784E8() +{ + asm( + " push {lr}\n" + " bl IsMysteryGiftEnabled\n" + " bl DebugMenu_8077E40\n" + " add r1, r0, #0\n" + " cmp r1, #0\n" + " beq ._406 @cond_branch\n" + " cmp r1, #0\n" + " bgt ._407 @cond_branch\n" + " mov r0, #0x1\n" + " neg r0, r0\n" + " cmp r1, r0\n" + " beq ._408 @cond_branch\n" + " b ._413\n" + "._407:\n" + " cmp r1, #0x1\n" + " beq ._410 @cond_branch\n" + " b ._413\n" + "._406:\n" + " bl DisableMysteryGift\n" + " b ._413\n" + "._410:\n" + " bl EnableMysteryGift\n" + " b ._413\n" + "._408:\n" + " mov r0, #0x1\n" + " b ._414\n" + "._413:\n" + " mov r0, #0x0\n" + "._414:\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenMysteryEvent() +{ + asm( + " push {lr}\n" + " bl Menu_EraseScreen\n" + " bl IsMysteryGiftEnabled\n" + " mov r1, #0x0\n" + " cmp r0, #0\n" + " bne ._415 @cond_branch\n" + " mov r1, #0x1\n" + "._415:\n" + " add r0, r1, #0\n" + " bl DebugMenu_807786C\n" + " ldr r1, ._416\n" + " ldr r0, ._416 + 4\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._417:\n" + " .align 2, 0\n" + "._416:\n" + " .word gMenuCallback\n" + " .word DebugMenu_80784E8+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078550() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " lsl r0, r0, #0x10\n" + " lsr r6, r0, #0x10\n" + " lsl r0, r6, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl GetGameStat\n" + " add r7, r0, #0\n" + " ldr r0, ._420\n" + " add r1, r6, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x2\n" + " bl ConvertIntToDecimalStringN\n" + " ldr r0, ._420 + 4\n" + " ldr r5, ._420 + 8\n" + " lsl r4, r6, #0x3\n" + " add r1, r5, #4\n" + " add r1, r4, r1\n" + " ldr r1, [r1]\n" + " bl StringCopy\n" + " add r4, r4, r5\n" + " ldr r0, [r4]\n" + " cmp r0, #0\n" + " bne ._418 @cond_branch\n" + " ldr r0, ._420 + 12\n" + " ldr r1, ._420 + 16\n" + " bl StringCopy\n" + " b ._423\n" + "._421:\n" + " .align 2, 0\n" + "._420:\n" + " .word gStringVar1\n" + " .word gStringVar2\n" + " .word gUnknown_Debug_839C26C\n" + " .word gStringVar3\n" + " .word Str_839C085\n" + "._418:\n" + " cmp r6, #0x1\n" + " beq ._422 @cond_branch\n" + " ldr r0, ._424\n" + " add r1, r7, #0\n" + " mov r2, #0x1\n" + " mov r3, #0xa\n" + " bl ConvertIntToDecimalStringN\n" + " b ._423\n" + "._425:\n" + " .align 2, 0\n" + "._424:\n" + " .word gStringVar3\n" + "._422:\n" + " ldr r4, ._426\n" + " lsr r1, r7, #0x10\n" + " add r0, r4, #0\n" + " mov r2, #0x1\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r6, #0xf0\n" + " strb r6, [r4, #0x3]\n" + " add r0, r4, #4\n" + " lsr r1, r7, #0x8\n" + " mov r5, #0xff\n" + " and r1, r1, r5\n" + " mov r2, #0x2\n" + " mov r3, #0x2\n" + " bl ConvertIntToDecimalStringN\n" + " strb r6, [r4, #0x6]\n" + " add r4, r4, #0x7\n" + " and r7, r7, r5\n" + " add r0, r4, #0\n" + " add r1, r7, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x2\n" + " bl ConvertIntToDecimalStringN\n" + "._423:\n" + " bl Menu_DisplayDialogueFrame\n" + " ldr r0, ._426 + 4\n" + " mov r1, #0x2\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._427:\n" + " .align 2, 0\n" + "._426:\n" + " .word gStringVar3\n" + " .word Str_839C07C\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_807860C() +{ + asm( + " push {r4, r5, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " ldr r1, ._432\n" + " add r4, r0, r1\n" + " mov r1, #0x0\n" + " ldsh r0, [r4, r1]\n" + " cmp r0, #0x1\n" + " beq ._428 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._429 @cond_branch\n" + " cmp r0, #0\n" + " beq ._430 @cond_branch\n" + " b ._447\n" + "._433:\n" + " .align 2, 0\n" + "._432:\n" + " .word gTasks+0x8\n" + "._429:\n" + " cmp r0, #0x2\n" + " beq ._434 @cond_branch\n" + " b ._447\n" + "._430:\n" + " ldrh r0, [r4, #0x2]\n" + " bl DebugMenu_8078550\n" + "._441:\n" + " ldrh r0, [r4]\n" + " add r0, r0, #0x1\n" + " strh r0, [r4]\n" + " b ._447\n" + "._428:\n" + " ldr r3, ._439\n" + " ldrh r1, [r3, #0x2e]\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._437 @cond_branch\n" + " ldrh r0, [r4]\n" + " sub r0, r0, #0x1\n" + " strh r0, [r4]\n" + " mov r0, #0x1\n" + " b ._438\n" + "._440:\n" + " .align 2, 0\n" + "._439:\n" + " .word gMain\n" + "._437:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " lsl r0, r0, #0x10\n" + " lsr r2, r0, #0x10\n" + " cmp r2, #0\n" + " bne ._441 @cond_branch\n" + " ldrh r1, [r3, #0x30]\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._442 @cond_branch\n" + " ldrh r0, [r4, #0x2]\n" + " add r0, r0, #0x1\n" + " strh r0, [r4, #0x2]\n" + " lsl r0, r0, #0x10\n" + " asr r0, r0, #0x10\n" + " cmp r0, #0x32\n" + " bne ._446 @cond_branch\n" + " strh r2, [r4, #0x2]\n" + " b ._446\n" + "._442:\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._447 @cond_branch\n" + " ldrh r0, [r4, #0x2]\n" + " sub r0, r0, #0x1\n" + " strh r0, [r4, #0x2]\n" + " lsl r0, r0, #0x10\n" + " cmp r0, #0\n" + " bge ._446 @cond_branch\n" + " mov r0, #0x31\n" + " strh r0, [r4, #0x2]\n" + "._446:\n" + " ldrh r0, [r4, #0x2]\n" + " bl DebugMenu_8078550\n" + " b ._447\n" + "._434:\n" + " bl Menu_EraseScreen\n" + " bl ScriptContext2_Disable\n" + " add r0, r5, #0\n" + " bl DestroyTask\n" + "._447:\n" + " mov r0, #0x0\n" + "._438:\n" + " pop {r4, r5}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80786C0() +{ + asm( + " push {lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl DebugMenu_807860C\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80786D0() +{ + asm( + " push {r4, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " add r0, r4, #0\n" + " bl DebugMenu_807860C\n" + " cmp r0, #0\n" + " beq ._449 @cond_branch\n" + " ldr r1, ._450\n" + " lsl r0, r4, #0x2\n" + " add r0, r0, r4\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " ldrb r2, [r0, #0xa]\n" + " ldr r1, ._450 + 4\n" + " lsl r0, r2, #0x3\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " cmp r0, #0\n" + " beq ._449 @cond_branch\n" + " sub r1, r0, #1\n" + " add r0, r2, #0\n" + " bl SetGameStat\n" + " mov r0, #0x15\n" + " bl PlaySE\n" + "._449:\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._451:\n" + " .align 2, 0\n" + "._450:\n" + " .word gTasks\n" + " .word gUnknown_Debug_839C26C\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078714() +{ + asm( + " push {r4, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " add r0, r4, #0\n" + " bl DebugMenu_807860C\n" + " cmp r0, #0\n" + " beq ._453 @cond_branch\n" + " ldr r1, ._454\n" + " lsl r0, r4, #0x2\n" + " add r0, r0, r4\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " ldrb r2, [r0, #0xa]\n" + " ldr r1, ._454 + 4\n" + " lsl r0, r2, #0x3\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " cmp r0, #0\n" + " beq ._453 @cond_branch\n" + " add r0, r2, #0\n" + " mov r1, #0x0\n" + " bl SetGameStat\n" + " mov r0, #0x15\n" + " bl PlaySE\n" + "._453:\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._455:\n" + " .align 2, 0\n" + "._454:\n" + " .word gTasks\n" + " .word gUnknown_Debug_839C26C\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078758() +{ + asm( + " push {r4, lr}\n" + " add r4, r0, #0\n" + " bl CloseMenu\n" + " bl ScriptContext2_Enable\n" + " add r0, r4, #0\n" + " mov r1, #0x50\n" + " bl CreateTask\n" + " mov r0, #0x1\n" + " pop {r4}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078774() +{ + asm( + " push {lr}\n" + " ldr r0, ._456\n" + " bl DebugMenu_8078758\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "._457:\n" + " .align 2, 0\n" + "._456:\n" + " .word DebugMenu_80786C0+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078788() +{ + asm( + " push {lr}\n" + " ldr r0, ._458\n" + " bl DebugMenu_8078758\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "._459:\n" + " .align 2, 0\n" + "._458:\n" + " .word DebugMenu_80786D0+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_807879C() +{ + asm( + " push {lr}\n" + " ldr r0, ._460\n" + " bl DebugMenu_8078758\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "._461:\n" + " .align 2, 0\n" + "._460:\n" + " .word DebugMenu_8078714+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80787B0() +{ + asm( + " push {lr}\n" + " ldr r0, ._462\n" + " bl DebugMenu_8077D78\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "._463:\n" + " .align 2, 0\n" + "._462:\n" + " .word gUnknown_Debug_839C3FC\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenLegendsRecord() +{ + asm( + " push {lr}\n" + " bl Menu_EraseScreen\n" + " ldr r0, ._464\n" + " mov r1, #0xc\n" + " mov r2, #0x3\n" + " bl DebugMenu_8077D24\n" + " ldr r1, ._464 + 4\n" + " ldr r0, ._464 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._465:\n" + " .align 2, 0\n" + "._464:\n" + " .word gUnknown_Debug_839C3FC\n" + " .word gMenuCallback\n" + " .word DebugMenu_80787B0+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80787EC() +{ + asm( + " push {r4, r5, lr}\n" + " add sp, sp, #0xfffffffc\n" + " mov r5, sp\n" + " add r5, r5, #0x2\n" + " mov r0, sp\n" + " add r1, r5, #0\n" + " bl GetXYCoordsOneStepInFrontOfPlayer\n" + " ldr r4, ._466\n" + " mov r0, sp\n" + " mov r1, #0x0\n" + " ldsh r0, [r0, r1]\n" + " mov r2, #0x0\n" + " ldsh r1, [r5, r2]\n" + " bl MapGridGetMetatileBehaviorAt\n" + " strh r0, [r4]\n" + " ldr r0, ._466 + 4\n" + " ldrh r1, [r4]\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToHexStringN\n" + " mov r0, sp\n" + " mov r1, #0x0\n" + " ldsh r0, [r0, r1]\n" + " mov r2, #0x0\n" + " ldsh r1, [r5, r2]\n" + " bl MapGridGetMetatileIdAt\n" + " strh r0, [r4]\n" + " ldr r0, ._466 + 8\n" + " ldrh r1, [r4]\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToHexStringN\n" + " mov r0, sp\n" + " mov r1, #0x0\n" + " ldsh r0, [r0, r1]\n" + " mov r2, #0x0\n" + " ldsh r1, [r5, r2]\n" + " bl MapGridGetZCoordAt\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " strh r0, [r4]\n" + " ldr r0, ._466 + 12\n" + " ldrh r1, [r4]\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToHexStringN\n" + " ldr r0, ._466 + 16\n" + " ldr r1, ._466 + 20\n" + " bl StringExpandPlaceholders\n" + " add sp, sp, #0x4\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._467:\n" + " .align 2, 0\n" + "._466:\n" + " .word gSpecialVar_Result\n" + " .word gStringVar1\n" + " .word gStringVar2\n" + " .word gStringVar3\n" + " .word gStringVar4\n" + " .word Str_839C414\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078880() +{ + asm( + " push {r4, r5, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " ldr r1, ._472\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r4, r0, r1\n" + " mov r1, #0x8\n" + " ldsh r0, [r4, r1]\n" + " cmp r0, #0x1\n" + " beq ._468 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._469 @cond_branch\n" + " cmp r0, #0\n" + " beq ._470 @cond_branch\n" + " b ._480\n" + "._473:\n" + " .align 2, 0\n" + "._472:\n" + " .word gTasks\n" + "._469:\n" + " cmp r0, #0x2\n" + " beq ._474 @cond_branch\n" + " b ._480\n" + "._470:\n" + " bl Menu_DisplayDialogueFrame\n" + " b ._476\n" + "._468:\n" + " ldr r0, ._478\n" + " mov r1, #0x2\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + "._476:\n" + " ldrh r0, [r4, #0x8]\n" + " add r0, r0, #0x1\n" + " strh r0, [r4, #0x8]\n" + " b ._480\n" + "._479:\n" + " .align 2, 0\n" + "._478:\n" + " .word gStringVar4\n" + "._474:\n" + " ldr r0, ._481\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._480 @cond_branch\n" + " bl Menu_EraseScreen\n" + " bl ScriptContext2_Disable\n" + " add r0, r5, #0\n" + " bl DestroyTask\n" + "._480:\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._482:\n" + " .align 2, 0\n" + "._481:\n" + " .word gMain\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_CellInfo() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " ldr r0, ._483\n" + " mov r1, #0x50\n" + " bl CreateTask\n" + " bl DebugMenu_80787EC\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._484:\n" + " .align 2, 0\n" + "._483:\n" + " .word DebugMenu_8078880+1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenBerryInfo() +{ + asm( + " push {r4, lr}\n" + " bl DebugOpenBerryInfo\n" + " add r4, r0, #0\n" + " cmp r4, #0\n" + " bne ._485 @cond_branch\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " b ._486\n" + "._485:\n" + " mov r0, #0x0\n" + " mov r1, #0x0\n" + " mov r2, #0x13\n" + " mov r3, #0x13\n" + " bl Menu_DrawStdWindowFrame\n" + " add r0, r4, #0\n" + " mov r1, #0x1\n" + " mov r2, #0x1\n" + " bl Menu_PrintText\n" + " ldr r1, ._487\n" + " ldr r0, ._487 + 4\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + "._486:\n" + " pop {r4}\n" + " pop {r1}\n" + " bx r1\n" + "._488:\n" + " .align 2, 0\n" + "._487:\n" + " .word gMenuCallback\n" + " .word DebugMenu_8077DB4+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078950() +{ + asm( + " push {lr}\n" + " bl Menu_DisplayDialogueFrame\n" + " ldr r0, ._489\n" + " mov r1, #0x4\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " pop {r0}\n" + " bx r0\n" + "._490:\n" + " .align 2, 0\n" + "._489:\n" + " .word Str_839C42E\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078968() +{ + asm( + " push {lr}\n" + " lsl r0, r0, #0x10\n" + " cmp r0, #0\n" + " bne ._491 @cond_branch\n" + " ldr r0, ._493\n" + " mov r1, #0x32\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " b ._492\n" + "._494:\n" + " .align 2, 0\n" + "._493:\n" + " .word gStringVar1\n" + "._491:\n" + " ldr r0, ._495\n" + " mov r1, #0x64\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + "._492:\n" + " ldr r0, ._495\n" + " mov r1, #0x4\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + " pop {r0}\n" + " bx r0\n" + "._496:\n" + " .align 2, 0\n" + "._495:\n" + " .word gStringVar1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80789A4() +{ + asm( + " push {r4, lr}\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x10\n" + " lsr r1, r1, #0x10\n" + " ldr r4, ._497\n" + " add r0, r4, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToDecimalStringN\n" + " add r0, r4, #0\n" + " mov r1, #0x9\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._498:\n" + " .align 2, 0\n" + "._497:\n" + " .word gStringVar1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_80789CC() +{ + asm( + " push {r4, r5, r6, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " lsl r4, r0, #0x2\n" + " add r4, r4, r0\n" + " lsl r4, r4, #0x3\n" + " ldr r6, ._499\n" + " add r5, r4, r6\n" + " mov r0, #0x0\n" + " strh r0, [r5]\n" + " ldr r0, ._499 + 4\n" + " ldr r1, ._499 + 8\n" + " add r0, r0, r1\n" + " ldrh r0, [r0]\n" + " strh r0, [r5, #0x2]\n" + " bl DebugMenu_8078950\n" + " ldrh r0, [r5]\n" + " bl DebugMenu_8078968\n" + " sub r6, r6, #0x8\n" + " add r4, r4, r6\n" + " ldr r0, ._499 + 12\n" + " str r0, [r4]\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._500:\n" + " .align 2, 0\n" + "._499:\n" + " .word gTasks+0x8\n" + " .word gSaveBlock2\n" + " .word 0x55c\n" + " .word DebugMenu_8078A14+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078A14() +{ + asm( + " push {r4, r5, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r4, r1, #0x3\n" + " ldr r5, ._504\n" + " add r2, r4, r5\n" + " ldr r0, ._504 + 4\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0xc0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._501 @cond_branch\n" + " mov r1, #0x0\n" + " mov r3, #0x0\n" + " ldsh r0, [r2, r3]\n" + " cmp r0, #0\n" + " bne ._502 @cond_branch\n" + " mov r1, #0x1\n" + "._502:\n" + " strh r1, [r2]\n" + " ldrh r0, [r2]\n" + " bl DebugMenu_8078968\n" + " b ._510\n" + "._505:\n" + " .align 2, 0\n" + "._504:\n" + " .word gTasks+0x8\n" + " .word gMain\n" + "._501:\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._506 @cond_branch\n" + " ldr r1, ._508\n" + " mov r3, #0x0\n" + " ldsh r0, [r2, r3]\n" + " lsl r0, r0, #0x1\n" + " ldr r3, ._508 + 4\n" + " add r1, r1, r3\n" + " add r0, r0, r1\n" + " ldrh r0, [r0]\n" + " strh r0, [r2, #0x2]\n" + " ldrh r0, [r2, #0x2]\n" + " bl DebugMenu_80789A4\n" + " add r0, r5, #0\n" + " sub r0, r0, #0x8\n" + " add r0, r4, r0\n" + " ldr r1, ._508 + 8\n" + " b ._507\n" + "._509:\n" + " .align 2, 0\n" + "._508:\n" + " .word gSaveBlock2\n" + " .word 0x55c\n" + " .word DebugMenu_8078AA4+1\n" + "._506:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._510 @cond_branch\n" + " add r0, r5, #0\n" + " sub r0, r0, #0x8\n" + " add r0, r4, r0\n" + " ldr r1, ._511\n" + "._507:\n" + " str r1, [r0]\n" + "._510:\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._512:\n" + " .align 2, 0\n" + "._511:\n" + " .word DebugMenu_8078B38+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078AA4() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r5, r1, #0x3\n" + " ldr r7, ._515\n" + " add r4, r5, r7\n" + " add r0, r4, #2\n" + " mov r2, #0xfa\n" + " lsl r2, r2, #0x3\n" + " ldr r6, ._515 + 4\n" + " ldrh r3, [r6, #0x30]\n" + " mov r1, #0x0\n" + " bl DebugMenu_8077DD8\n" + " cmp r0, #0x1\n" + " bne ._513 @cond_branch\n" + " ldrh r0, [r4, #0x2]\n" + " bl DebugMenu_80789A4\n" + " b ._521\n" + "._516:\n" + " .align 2, 0\n" + "._515:\n" + " .word gTasks+0x8\n" + " .word gMain\n" + "._513:\n" + " ldrh r1, [r6, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._517 @cond_branch\n" + " ldr r1, ._519\n" + " mov r2, #0x0\n" + " ldsh r0, [r4, r2]\n" + " lsl r0, r0, #0x1\n" + " ldr r2, ._519 + 4\n" + " add r1, r1, r2\n" + " add r0, r0, r1\n" + " ldrh r1, [r4, #0x2]\n" + " strh r1, [r0]\n" + " mov r0, #0x49\n" + " bl PlaySE\n" + " add r0, r7, #0\n" + " sub r0, r0, #0x8\n" + " add r0, r5, r0\n" + " ldr r1, ._519 + 8\n" + " b ._518\n" + "._520:\n" + " .align 2, 0\n" + "._519:\n" + " .word gSaveBlock2\n" + " .word 0x55c\n" + " .word DebugMenu_8078B38+1\n" + "._517:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._521 @cond_branch\n" + " bl DebugMenu_8078950\n" + " ldrh r0, [r4]\n" + " bl DebugMenu_8078968\n" + " add r0, r7, #0\n" + " sub r0, r0, #0x8\n" + " add r0, r5, r0\n" + " ldr r1, ._522\n" + "._518:\n" + " str r1, [r0]\n" + "._521:\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._523:\n" + " .align 2, 0\n" + "._522:\n" + " .word DebugMenu_8078A14+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078B38() +{ + asm( + " push {r4, lr}\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " bl Menu_EraseScreen\n" + " bl ScriptContext2_Disable\n" + " add r0, r4, #0\n" + " bl DestroyTask\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_BattleTowerStages() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " bl ScriptContext2_Enable\n" + " ldr r0, ._524\n" + " mov r1, #0x50\n" + " bl CreateTask\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._525:\n" + " .align 2, 0\n" + "._524:\n" + " .word DebugMenu_80789CC+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078B70() +{ + asm( + " push {lr}\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x10\n" + " lsr r1, r1, #0x10\n" + " ldr r0, ._526\n" + " mov r2, #0x0\n" + " mov r3, #0x1\n" + " bl ConvertIntToHexStringN\n" + " ldr r0, ._526 + 4\n" + " bl sub_8071F40\n" + " pop {r0}\n" + " bx r0\n" + "._527:\n" + " .align 2, 0\n" + "._526:\n" + " .word gStringVar1\n" + " .word Str_839C438\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078B94() +{ + asm( + " push {r4, r5, lr}\n" + " mov r3, #0x0\n" + " ldr r1, ._531\n" + " ldrb r0, [r1]\n" + " cmp r0, #0\n" + " beq ._529 @cond_branch\n" + " ldr r5, ._531 + 4\n" + " add r4, r1, #0\n" + "._530:\n" + " lsl r0, r3, #0x3\n" + " add r2, r0, r5\n" + " add r0, r0, r4\n" + " ldr r1, [r0, #0x4]\n" + " ldr r0, [r0]\n" + " str r0, [r2]\n" + " str r1, [r2, #0x4]\n" + " add r0, r3, #1\n" + " lsl r0, r0, #0x18\n" + " lsr r3, r0, #0x18\n" + " cmp r3, #0x27\n" + " bhi ._529 @cond_branch\n" + " lsl r0, r3, #0x3\n" + " add r0, r0, r4\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " bne ._530 @cond_branch\n" + "._529:\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._532:\n" + " .align 2, 0\n" + "._531:\n" + " .word gUnknown_Debug_839C444\n" + " .word gSaveBlock1+0x7f8\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078BD4() +{ + asm( + " push {r4, r5, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " ldr r1, ._536\n" + " add r4, r0, r1\n" + " mov r1, #0x0\n" + " ldsh r0, [r4, r1]\n" + " cmp r0, #0\n" + " beq ._533 @cond_branch\n" + " cmp r0, #0x1\n" + " beq ._534 @cond_branch\n" + " b ._545\n" + "._537:\n" + " .align 2, 0\n" + "._536:\n" + " .word gTasks+0x8\n" + "._533:\n" + " ldrh r0, [r4, #0x2]\n" + " bl DebugMenu_8078B70\n" + " ldrh r0, [r4]\n" + " add r0, r0, #0x1\n" + " strh r0, [r4]\n" + " b ._545\n" + "._534:\n" + " ldr r2, ._541\n" + " ldrh r1, [r2, #0x2e]\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._539 @cond_branch\n" + " mov r0, #0x49\n" + " bl PlaySE\n" + " bl Menu_EraseScreen\n" + " add r0, r5, #0\n" + " bl DestroyTask\n" + " bl ScriptContext2_Disable\n" + " bl DebugMenu_8078B94\n" + " b ._545\n" + "._542:\n" + " .align 2, 0\n" + "._541:\n" + " .word gMain\n" + "._539:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._543 @cond_branch\n" + " bl Menu_EraseScreen\n" + " add r0, r5, #0\n" + " bl DestroyTask\n" + " bl ScriptContext2_Disable\n" + " b ._545\n" + "._543:\n" + " add r0, r4, #2\n" + " ldrh r3, [r2, #0x30]\n" + " mov r1, #0x0\n" + " mov r2, #0x4\n" + " bl DebugMenu_8077DD8\n" + " cmp r0, #0x1\n" + " bne ._545 @cond_branch\n" + " ldrh r0, [r4, #0x2]\n" + " bl DebugMenu_8078B70\n" + "._545:\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_CheckPKBLCK() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " ldr r0, ._546\n" + " mov r1, #0x50\n" + " bl CreateTask\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._547:\n" + " .align 2, 0\n" + "._546:\n" + " .word DebugMenu_8078BD4+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078C80() +{ + asm( + " push {lr}\n" + " bl Menu_DisplayDialogueFrame\n" + " ldr r0, ._548\n" + " mov r1, #0x2\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " ldr r1, ._548 + 4\n" + " ldr r0, ._548 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._549:\n" + " .align 2, 0\n" + "._548:\n" + " .word Str_839C5A4\n" + " .word gMenuCallback\n" + " .word DebugMenu_8078CA8+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078CA8() +{ + asm( + " push {lr}\n" + " ldr r0, ._552\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._550 @cond_branch\n" + " ldr r1, ._552 + 4\n" + " ldr r0, ._552 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " b ._555\n" + "._553:\n" + " .align 2, 0\n" + "._552:\n" + " .word gMain\n" + " .word gMenuCallback\n" + " .word DebugMenu_8078CE4+1\n" + "._550:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._554 @cond_branch\n" + " mov r0, #0x0\n" + " b ._555\n" + "._554:\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + "._555:\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078CE4() +{ + asm( + " push {lr}\n" + " ldr r1, ._558\n" + " mov r2, #0x80\n" + " lsl r2, r2, #0xa\n" + " mov r0, #0x0\n" + " bl DebugMenu_8078E40\n" + " cmp r0, #0x1\n" + " bne ._556 @cond_branch\n" + " ldr r0, ._558 + 4\n" + " ldr r1, ._558 + 8\n" + " bl StringCopy\n" + " b ._557\n" + "._559:\n" + " .align 2, 0\n" + "._558:\n" + " .word +0x2000000\n" + " .word gStringVar4\n" + " .word Str_839C5CC\n" + "._556:\n" + " ldr r0, ._560\n" + " ldr r1, ._560 + 4\n" + " bl StringCopy\n" + "._557:\n" + " ldr r1, ._560 + 8\n" + " ldr r0, ._560 + 12\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._561:\n" + " .align 2, 0\n" + "._560:\n" + " .word gStringVar4\n" + " .word Str_839C5DF\n" + " .word gMenuCallback\n" + " .word DebugMenu_8078D7C+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078D30() +{ + asm( + " push {r4, r5, r6, lr}\n" + " ldr r5, ._563\n" + " mov r4, #0x0\n" + " mov r6, #0x80\n" + " lsl r6, r6, #0x5\n" + "._562:\n" + " add r0, r4, #0\n" + " add r1, r5, #0\n" + " add r2, r6, #0\n" + " bl DebugMenu_8078E68\n" + " add r5, r5, r6\n" + " add r0, r4, #1\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " cmp r4, #0x1f\n" + " bls ._562 @cond_branch\n" + " ldr r0, ._563 + 4\n" + " ldr r1, ._563 + 8\n" + " bl StringCopy\n" + " ldr r1, ._563 + 12\n" + " ldr r0, ._563 + 16\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r4, r5, r6}\n" + " pop {r1}\n" + " bx r1\n" + "._564:\n" + " .align 2, 0\n" + "._563:\n" + " .word +0x2000000\n" + " .word gStringVar4\n" + " .word Str_839C5D6\n" + " .word gMenuCallback\n" + " .word DebugMenu_8078D7C+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078D7C() +{ + asm( + " push {lr}\n" + " bl Menu_DisplayDialogueFrame\n" + " ldr r0, ._565\n" + " mov r1, #0x2\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " ldr r1, ._565 + 4\n" + " ldr r0, ._565 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._566:\n" + " .align 2, 0\n" + "._565:\n" + " .word gStringVar4\n" + " .word gMenuCallback\n" + " .word DebugMenu_8078DA4+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078DA4() +{ + asm( + " push {lr}\n" + " ldr r0, ._569\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._567 @cond_branch\n" + " mov r0, #0x0\n" + " b ._568\n" + "._570:\n" + " .align 2, 0\n" + "._569:\n" + " .word gMain\n" + "._567:\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + "._568:\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_MeTooBackupMan() +{ + asm( + " push {lr}\n" + " bl Menu_EraseScreen\n" + " ldr r0, ._571\n" + " mov r1, #0xc\n" + " mov r2, #0x2\n" + " bl DebugMenu_8077D24\n" + " ldr r1, ._571 + 4\n" + " ldr r0, ._571 + 8\n" + " str r0, [r1]\n" + " mov r0, #0x0\n" + " pop {r1}\n" + " bx r1\n" + "._572:\n" + " .align 2, 0\n" + "._571:\n" + " .word gUnknown_Debug_839C594\n" + " .word gMenuCallback\n" + " .word DebugMenu_8078DF0+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078DF0() +{ + asm( + " push {lr}\n" + " ldr r0, ._573\n" + " bl DebugMenu_8077D78\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " pop {r1}\n" + " bx r1\n" + "._574:\n" + " .align 2, 0\n" + "._573:\n" + " .word gUnknown_Debug_839C594\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078E04() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add r6, r1, #0\n" + " add r5, r2, #0\n" + " b ._575\n" + "._577:\n" + " ldr r0, ._579\n" + " add r5, r5, r0\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x5\n" + " add r6, r6, r0\n" + " add r0, r4, #1\n" + "._575:\n" + " lsl r0, r0, #0x10\n" + " lsr r4, r0, #0x10\n" + " add r0, r4, #0\n" + " add r1, r6, #0\n" + " bl ProgramFlashSectorAndVerify\n" + " cmp r0, #0\n" + " bne ._576 @cond_branch\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x5\n" + " cmp r5, r0\n" + " bhi ._577 @cond_branch\n" + " mov r0, #0x1\n" + " b ._578\n" + "._580:\n" + " .align 2, 0\n" + "._579:\n" + " .word 0xfffff000\n" + "._576:\n" + " mov r0, #0x0\n" + "._578:\n" + " pop {r4, r5, r6}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078E40() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add r4, r0, #0\n" + " add r5, r1, #0\n" + " add r6, r2, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " bl m4aSoundVSyncOff\n" + " add r0, r4, #0\n" + " add r1, r5, #0\n" + " add r2, r6, #0\n" + " bl DebugMenu_8078E04\n" + " add r4, r0, #0\n" + " bl m4aSoundVSyncOn\n" + " add r0, r4, #0\n" + " pop {r4, r5, r6}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078E68() +{ + asm( + " push {r4, lr}\n" + " add r4, r1, #0\n" + " add r3, r2, #0\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov r1, #0x0\n" + " add r2, r4, #0\n" + " bl ReadFlash\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078E80() +{ + asm( + " push {r4, lr}\n" + " add r4, r0, #0\n" + " mov r0, #0x2\n" + " mov r1, #0xf\n" + " mov r2, #0x16\n" + " mov r3, #0x10\n" + " bl Menu_BlankWindowRect\n" + " ldr r1, ._581\n" + " mov r2, #0x0\n" + " ldsh r0, [r4, r2]\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " ldrb r1, [r0, #0x4]\n" + " mov r0, #0xd0\n" + " mov r2, #0xf\n" + " bl sub_8071F60\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._582:\n" + " .align 2, 0\n" + "._581:\n" + " .word gUnknown_Debug_839C5F4\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078EB0() +{ + asm( + " push {r4, r5, lr}\n" + " add r5, r0, #0\n" + " ldr r4, ._583\n" + " mov r0, #0x2\n" + " ldsh r1, [r5, r0]\n" + " add r0, r4, #0\n" + " mov r2, #0x1\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " add r0, r4, #0\n" + " mov r1, #0x2\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + " mov r0, #0xf0\n" + " mov r1, #0x5\n" + " mov r2, #0x11\n" + " bl sub_8071F60\n" + " mov r0, #0x4\n" + " ldsh r1, [r5, r0]\n" + " add r0, r4, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x2\n" + " bl ConvertIntToDecimalStringN\n" + " add r0, r4, #0\n" + " mov r1, #0x6\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + " mov r0, #0xf0\n" + " mov r1, #0x8\n" + " mov r2, #0x11\n" + " bl sub_8071F60\n" + " mov r0, #0x6\n" + " ldsh r1, [r5, r0]\n" + " add r0, r4, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x2\n" + " bl ConvertIntToDecimalStringN\n" + " add r0, r4, #0\n" + " mov r1, #0x9\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._584:\n" + " .align 2, 0\n" + "._583:\n" + " .word gStringVar1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078F1C() +{ + asm( + " push {r4, r5, r6, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " lsl r4, r0, #0x2\n" + " add r4, r4, r0\n" + " lsl r4, r4, #0x3\n" + " ldr r6, ._585\n" + " add r5, r4, r6\n" + " mov r0, #0x0\n" + " strh r0, [r5]\n" + " ldr r1, ._585 + 4\n" + " ldrh r0, [r1, #0xe]\n" + " strh r0, [r5, #0x2]\n" + " ldrb r0, [r1, #0x10]\n" + " strh r0, [r5, #0x4]\n" + " ldrb r0, [r1, #0x11]\n" + " strh r0, [r5, #0x6]\n" + " bl Menu_DisplayDialogueFrame\n" + " add r0, r5, #0\n" + " bl DebugMenu_8078EB0\n" + " add r0, r5, #0\n" + " bl DebugMenu_8078E80\n" + " sub r6, r6, #0x8\n" + " add r4, r4, r6\n" + " ldr r0, ._585 + 8\n" + " str r0, [r4]\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._586:\n" + " .align 2, 0\n" + "._585:\n" + " .word gTasks+0x8\n" + " .word gSaveBlock2\n" + " .word DebugMenu_8078F68+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8078F68() +{ + asm( + " push {r4, r5, r6, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r5, r1, #0x3\n" + " ldr r6, ._589\n" + " add r4, r5, r6\n" + " ldr r3, ._589 + 4\n" + " ldrh r1, [r3, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._587 @cond_branch\n" + " ldr r1, ._589 + 8\n" + " ldrh r0, [r4, #0x2]\n" + " strh r0, [r1, #0xe]\n" + " ldrh r0, [r4, #0x4]\n" + " strb r0, [r1, #0x10]\n" + " ldrh r0, [r4, #0x6]\n" + " strb r0, [r1, #0x11]\n" + " mov r0, #0x49\n" + " bl PlaySE\n" + " b ._588\n" + "._590:\n" + " .align 2, 0\n" + "._589:\n" + " .word gTasks+0x8\n" + " .word gMain\n" + " .word gSaveBlock2\n" + "._587:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._591 @cond_branch\n" + "._588:\n" + " add r0, r6, #0\n" + " sub r0, r0, #0x8\n" + " add r0, r5, r0\n" + " ldr r1, ._593\n" + " str r1, [r0]\n" + " b ._601\n" + "._594:\n" + " .align 2, 0\n" + "._593:\n" + " .word DebugMenu_8079020+1\n" + "._591:\n" + " mov r0, #0x20\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._595 @cond_branch\n" + " ldrh r1, [r4]\n" + " mov r2, #0x0\n" + " ldsh r0, [r4, r2]\n" + " cmp r0, #0\n" + " beq ._601 @cond_branch\n" + " sub r0, r1, #1\n" + " b ._597\n" + "._595:\n" + " mov r0, #0x10\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._598 @cond_branch\n" + " ldrh r0, [r4]\n" + " cmp r0, #0x1\n" + " bhi ._601 @cond_branch\n" + " add r0, r0, #0x1\n" + "._597:\n" + " strh r0, [r4]\n" + " add r0, r4, #0\n" + " bl DebugMenu_8078E80\n" + " b ._601\n" + "._598:\n" + " mov r0, #0x0\n" + " ldsh r2, [r4, r0]\n" + " lsl r2, r2, #0x3\n" + " ldr r0, ._602\n" + " add r2, r2, r0\n" + " ldrb r0, [r2, #0x5]\n" + " lsl r0, r0, #0x1\n" + " add r0, r4, r0\n" + " ldrh r1, [r2]\n" + " ldrh r2, [r2, #0x2]\n" + " ldrh r3, [r3, #0x30]\n" + " bl DebugMenu_8077DD8\n" + " cmp r0, #0x1\n" + " bne ._601 @cond_branch\n" + " add r0, r4, #0\n" + " bl DebugMenu_8078EB0\n" + "._601:\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._603:\n" + " .align 2, 0\n" + "._602:\n" + " .word gUnknown_Debug_839C5F4\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8079020() +{ + asm( + " push {r4, lr}\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " bl Menu_EraseScreen\n" + " bl ScriptContext2_Disable\n" + " add r0, r4, #0\n" + " bl DestroyTask\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_PTime() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " ldr r0, ._604\n" + " mov r1, #0x50\n" + " bl CreateTask\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._605:\n" + " .align 2, 0\n" + "._604:\n" + " .word DebugMenu_8078F1C+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8079058() +{ + asm( + " push {r4, r5, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " ldr r1, ._610\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r4, r0, r1\n" + " mov r0, #0x8\n" + " ldsh r1, [r4, r0]\n" + " cmp r1, #0x1\n" + " beq ._606 @cond_branch\n" + " cmp r1, #0x1\n" + " bgt ._607 @cond_branch\n" + " cmp r1, #0\n" + " beq ._608 @cond_branch\n" + " b ._620\n" + "._611:\n" + " .align 2, 0\n" + "._610:\n" + " .word gTasks\n" + "._607:\n" + " cmp r1, #0x2\n" + " beq ._612 @cond_branch\n" + " b ._620\n" + "._608:\n" + " ldr r0, ._615\n" + " str r1, [r0]\n" + " bl Menu_DisplayDialogueFrame\n" + " b ._614\n" + "._616:\n" + " .align 2, 0\n" + "._615:\n" + " .word gUnknown_Debug_03004BD0\n" + "._606:\n" + " ldr r0, ._618\n" + " mov r1, #0x4\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " mov r0, #0x14\n" + " mov r1, #0x8\n" + " mov r2, #0x1\n" + " bl DisplayYesNoMenu\n" + "._614:\n" + " ldrh r0, [r4, #0x8]\n" + " add r0, r0, #0x1\n" + " strh r0, [r4, #0x8]\n" + " b ._620\n" + "._619:\n" + " .align 2, 0\n" + "._618:\n" + " .word gDebug0x839C60C\n" + "._612:\n" + " bl Menu_ProcessInputNoWrap_\n" + " lsl r0, r0, #0x18\n" + " asr r1, r0, #0x18\n" + " mov r0, #0x2\n" + " neg r0, r0\n" + " cmp r1, r0\n" + " beq ._620 @cond_branch\n" + " cmp r1, #0\n" + " bne ._621 @cond_branch\n" + " ldr r1, ._623\n" + " mov r0, #0x1\n" + " b ._622\n" + "._624:\n" + " .align 2, 0\n" + "._623:\n" + " .word gUnknown_Debug_03004BD0\n" + "._621:\n" + " ldr r1, ._625\n" + " mov r0, #0x0\n" + "._622:\n" + " str r0, [r1]\n" + " bl Menu_EraseScreen\n" + " bl ScriptContext2_Disable\n" + " add r0, r5, #0\n" + " bl DestroyTask\n" + "._620:\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._626:\n" + " .align 2, 0\n" + "._625:\n" + " .word gUnknown_Debug_03004BD0\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenMurakawa() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " ldr r0, ._627\n" + " mov r1, #0x50\n" + " bl CreateTask\n" + " bl ScriptContext2_Enable\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._628:\n" + " .align 2, 0\n" + "._627:\n" + " .word DebugMenu_8079058+1\n" + "\n" + ); +} + +__attribute__((naked)) +void DebugMenu_8079110() +{ + asm( + " push {r4, r5, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " ldr r1, ._633\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r4, r0, r1\n" + " mov r1, #0x8\n" + " ldsh r0, [r4, r1]\n" + " cmp r0, #0x1\n" + " beq ._629 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._630 @cond_branch\n" + " cmp r0, #0\n" + " beq ._631 @cond_branch\n" + " b ._642\n" + "._634:\n" + " .align 2, 0\n" + "._633:\n" + " .word gTasks\n" + "._630:\n" + " cmp r0, #0x2\n" + " beq ._635 @cond_branch\n" + " b ._642\n" + "._631:\n" + " bl Menu_DisplayDialogueFrame\n" + " b ._637\n" + "._629:\n" + " ldr r0, ._639\n" + " mov r1, #0x2\n" + " mov r2, #0xf\n" + " bl MenuPrintMessage\n" + "._637:\n" + " ldrh r0, [r4, #0x8]\n" + " add r0, r0, #0x1\n" + " strh r0, [r4, #0x8]\n" + " b ._642\n" + "._640:\n" + " .align 2, 0\n" + "._639:\n" + " .word Str_839C61A\n" + "._635:\n" + " bl Menu_UpdateWindowText\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " beq ._642 @cond_branch\n" + " ldr r0, ._643\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._642 @cond_branch\n" + " bl Menu_EraseScreen\n" + " bl ScriptContext2_Disable\n" + " add r0, r5, #0\n" + " bl DestroyTask\n" + "._642:\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._644:\n" + " .align 2, 0\n" + "._643:\n" + " .word gMain\n" + "\n" + ); +} + +__attribute__((naked)) +u8 DebugMenu_OpenKiwa() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " ldr r0, ._645\n" + " mov r1, #0x50\n" + " bl CreateTask\n" + " bl ScriptContext2_Enable\n" + " pop {r1}\n" + " bx r1\n" + "._646:\n" + " .align 2, 0\n" + "._645:\n" + " .word DebugMenu_8079110+1\n" + "\n" + ); +} + +#endif diff --git a/src/debug/taya_debug_window.c b/src/debug/taya_debug_window.c new file mode 100644 index 000000000..f7e0e3770 --- /dev/null +++ b/src/debug/taya_debug_window.c @@ -0,0 +1,6 @@ +#if DEBUG +#include "global.h" + +EWRAM_DATA u8 unk_2030224[4] = { 0 }; + +#endif diff --git a/src/debug/tomomichi_debug_menu.c b/src/debug/tomomichi_debug_menu.c new file mode 100644 index 000000000..c3616797e --- /dev/null +++ b/src/debug/tomomichi_debug_menu.c @@ -0,0 +1,20 @@ +#if DEBUG +#include "global.h" + +// These should be static, uninitialized once it gets decompiled. +#define BSS_DATA __attribute__((section(".bss"))) +BSS_DATA u8 gDebug_03000700[4] = {0}; +BSS_DATA u8 gDebug_03000704[4] = {0}; +BSS_DATA u8 gDebug_03000708[4] = {0}; +BSS_DATA u8 gDebug_0300070C = 0; +BSS_DATA u8 gDebug_0300070D = 0; +BSS_DATA u8 gDebug_0300070E = 0; +BSS_DATA u8 gDebug_0300070F = 0; +BSS_DATA u8 gDebug_03000710[13] = {0}; +BSS_DATA u8 gDebug_0300071D = 0; +BSS_DATA u8 gDebug_0300071E = 0; +BSS_DATA u8 gDebug_0300071F = 0; +BSS_DATA u8 gDebug_03000720 = 0; +BSS_DATA u8 gDebug_03000721 = 0; + +#endif diff --git a/src/debug/watanabe_debug_menu.c b/src/debug/watanabe_debug_menu.c new file mode 100644 index 000000000..6c94b0466 --- /dev/null +++ b/src/debug/watanabe_debug_menu.c @@ -0,0 +1,11 @@ +#if DEBUG +#include "global.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 }; + +u8 byte_3005E30[0x20]; + +#endif diff --git a/src/engine/cable_club.c b/src/engine/cable_club.c index e7c504c7b..8f79944de 100644 --- a/src/engine/cable_club.c +++ b/src/engine/cable_club.c @@ -23,6 +23,7 @@ #include "text.h" #include "trainer_card.h" +extern u8 unk_2030220; extern u16 gSpecialVar_Result; extern struct TrainerCard gTrainerCards[4]; extern u8 gUnknown_03004860; @@ -41,7 +42,7 @@ extern struct u8 field1; } gUnknown_020297D8; -static void sub_8082F20(u8 taskId); +/*static*/ void sub_8082F20(u8 taskId); static void sub_8082F68(u8 taskId); static void sub_8082FEC(u8 taskId); static void sub_808303C(u8 taskId); @@ -95,6 +96,382 @@ const u8 *const gTrainerCardColorNames[] = TrainerCardColorName_Gold, }; +#if DEBUG + +__attribute__((naked)) +int debug_sub_808A4D0() +{ + asm("\ + push {lr}\n\ + add r1, r0, #0\n\ + ldr r0, ._3\n\ + cmp r1, r0\n\ + bne ._1 @cond_branch\n\ + mov r0, #0x1\n\ + b ._30\n\ +._4:\n\ + .align 2, 0\n\ +._3:\n\ + .word sub_8082F68+1\n\ +._1:\n\ + ldr r0, ._7\n\ + cmp r1, r0\n\ + bne ._5 @cond_branch\n\ + mov r0, #0x11\n\ + b ._30\n\ +._8:\n\ + .align 2, 0\n\ +._7:\n\ + .word sub_8082FEC+1\n\ +._5:\n\ + ldr r0, ._11\n\ + cmp r1, r0\n\ + bne ._9 @cond_branch\n\ + mov r0, #0x12\n\ + b ._30\n\ +._12:\n\ + .align 2, 0\n\ +._11:\n\ + .word sub_808303C+1\n\ +._9:\n\ + ldr r0, ._15\n\ + cmp r1, r0\n\ + bne ._13 @cond_branch\n\ + mov r0, #0x13\n\ + b ._30\n\ +._16:\n\ + .align 2, 0\n\ +._15:\n\ + .word sub_8083188+1\n\ +._13:\n\ + ldr r0, ._19\n\ + cmp r1, r0\n\ + bne ._17 @cond_branch\n\ + mov r0, #0x14\n\ + b ._30\n\ +._20:\n\ + .align 2, 0\n\ +._19:\n\ + .word sub_80830E4+1\n\ +._17:\n\ + ldr r0, ._23\n\ + cmp r1, r0\n\ + bne ._21 @cond_branch\n\ + mov r0, #0x21\n\ + b ._30\n\ +._24:\n\ + .align 2, 0\n\ +._23:\n\ + .word sub_80831F8+1\n\ +._21:\n\ + ldr r0, ._27\n\ + cmp r1, r0\n\ + bne ._25 @cond_branch\n\ + mov r0, #0x2\n\ + b ._30\n\ +._28:\n\ + .align 2, 0\n\ +._27:\n\ + .word sub_8083314+1\n\ +._25:\n\ + ldr r0, ._31\n\ + cmp r1, r0\n\ + beq ._29 @cond_branch\n\ + mov r0, #0x0\n\ + b ._30\n\ +._32:\n\ + .align 2, 0\n\ +._31:\n\ + .word sub_80833C4+1\n\ +._29:\n\ + mov r0, #0x3\n\ +._30:\n\ + pop {r1}\n\ + bx r1"); +} + +__attribute__((naked)) +void debug_sub_808A55C() +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ + ldr r2, ._37\n\ + lsl r0, r7, #0x2\n\ + add r0, r0, r7\n\ + lsl r0, r0, #0x3\n\ + add r4, r0, r2\n\ + mov r0, #0x8\n\ + ldsh r1, [r4, r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x3\n\ + add r0, r0, r2\n\ + ldrb r0, [r0, #0x4]\n\ + cmp r0, #0\n\ + bne ._33 @cond_branch\n\ + mov r1, #0xa\n\ + ldsh r0, [r4, r1]\n\ + cmp r0, #0x5\n\ + bne ._34 @cond_branch\n\ + add r0, r7, #0\n\ + bl DestroyTask\n\ +._34:\n\ + ldrh r0, [r4, #0xa]\n\ + add r0, r0, #0x1\n\ + strh r0, [r4, #0xa]\n\ +._33:\n\ + ldr r0, ._37 + 4\n\ + ldrb r0, [r0]\n\ + mov r1, #0x2\n\ + mov r2, #0x0\n\ + mov r3, #0x2\n\ + bl PrintHex\n\ + ldr r0, ._37 + 8\n\ + ldrb r0, [r0]\n\ + mov r1, #0x16\n\ + mov r2, #0x5\n\ + mov r3, #0x4\n\ + bl PrintHex\n\ + mov r4, #0x0\n\ + lsl r3, r7, #0x2\n\ + mov r8, r3\n\ + mov r6, #0xc0\n\ + lsl r6, r6, #0x13\n\ + mov r5, #0xa0\n\ + lsl r5, r5, #0x13\n\ +._35:\n\ + ldr r0, ._37 + 12\n\ + add r0, r4, r0\n\ + ldrb r0, [r0]\n\ + lsr r1, r5, #0x18\n\ + mov r2, #0x0\n\ + mov r3, #0x1\n\ + bl PrintHex\n\ + ldr r1, ._37 + 16\n\ + lsl r0, r4, #0x8\n\ + add r0, r0, r1\n\ + ldrh r0, [r0]\n\ + lsr r2, r6, #0x18\n\ + mov r1, #0x16\n\ + mov r3, #0x4\n\ + bl PrintHex\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x11\n\ + add r6, r6, r0\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x12\n\ + add r5, r5, r1\n\ + add r4, r4, #0x1\n\ + cmp r4, #0x3\n\ + ble ._35 @cond_branch\n\ + ldr r4, ._37 + 20\n\ + ldr r0, [r4]\n\ + mov r1, #0xf\n\ + mov r2, #0x0\n\ + mov r3, #0x8\n\ + bl PrintHex\n\ + ldr r0, ._37 + 24\n\ + ldrb r0, [r0, #0x1]\n\ + mov r1, #0x2\n\ + mov r2, #0xa\n\ + mov r3, #0x2\n\ + bl PrintHex\n\ + bl GetMultiplayerId\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r1, #0x7\n\ + mov r2, #0xc\n\ + mov r3, #0x2\n\ + bl PrintHex\n\ + bl GetBlockReceivedStatus\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r1, #0x7\n\ + mov r2, #0xa\n\ + mov r3, #0x2\n\ + bl PrintHex\n\ + ldr r0, ._37 + 28\n\ + ldrb r0, [r0]\n\ + mov r1, #0x2\n\ + mov r2, #0xc\n\ + mov r3, #0x1\n\ + bl PrintHex\n\ + ldr r0, ._37 + 32\n\ + ldrh r0, [r0]\n\ + mov r1, #0xb\n\ + mov r2, #0x8\n\ + mov r3, #0x2\n\ + bl PrintHex\n\ + ldr r0, [r4]\n\ + mov r1, #0x1c\n\ + and r0, r0, r1\n\ + lsr r0, r0, #0x2\n\ + mov r1, #0xb\n\ + mov r2, #0xa\n\ + mov r3, #0x2\n\ + bl PrintHex\n\ + bl IsLinkConnectionEstablished\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r1, #0xb\n\ + mov r2, #0xc\n\ + mov r3, #0x1\n\ + bl PrintHex\n\ + bl sub_8007ECC\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r1, #0xf\n\ + mov r2, #0xa\n\ + mov r3, #0x1\n\ + bl PrintHex\n\ + ldr r2, ._37\n\ + mov r3, r8\n\ + add r0, r3, r7\n\ + lsl r0, r0, #0x3\n\ + add r0, r0, r2\n\ + mov r3, #0x8\n\ + ldsh r1, [r0, r3]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x3\n\ + add r0, r0, r2\n\ + ldr r0, [r0]\n\ + bl debug_sub_808A4D0\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r1, #0xf\n\ + mov r2, #0xc\n\ + mov r3, #0x2\n\ + bl PrintHex\n\ + ldr r0, ._37 + 36\n\ + ldr r0, [r0]\n\ + mov r1, #0x2\n\ + mov r2, #0xd\n\ + mov r3, #0x8\n\ + bl PrintHex\n\ + bl HasLinkErrorOccurred\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r1, #0x2\n\ + mov r2, #0x2\n\ + mov r3, #0x1\n\ + bl PrintHex\n\ + ldr r0, ._37 + 40\n\ + mov r6, #0x80\n\ + lsl r6, r6, #0x12\n\ + add r5, r0, #0\n\ + add r5, r5, #0x14\n\ + mov r4, #0x3\n\ +._36:\n\ + ldr r0, [r5]\n\ + lsr r1, r6, #0x18\n\ + mov r2, #0x3\n\ + mov r3, #0x4\n\ + bl PrintHex\n\ + mov r0, #0xc0\n\ + lsl r0, r0, #0x13\n\ + add r6, r6, r0\n\ + add r5, r5, #0x1c\n\ + sub r4, r4, #0x1\n\ + cmp r4, #0\n\ + bge ._36 @cond_branch\n\ + ldr r0, ._37 + 44\n\ + ldrh r0, [r0]\n\ + mov r1, #0x2\n\ + mov r2, #0x6\n\ + mov r3, #0x4\n\ + bl PrintHex\n\ + bl debug_sub_808B850\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r1, #0x19\n\ + mov r2, #0x3\n\ + mov r3, #0x1\n\ + bl PrintHex\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._38:\n\ + .align 2, 0\n\ +._37:\n\ + .word gTasks\n\ + .word gShouldAdvanceLinkState\n\ + .word gBlockSendBuffer\n\ + .word gLinkPlayerPending\n\ + .word gBlockRecvBuffer\n\ + .word gLinkStatus\n\ + .word gLink\n\ + .word gReceivedRemoteLinkPlayers\n\ + .word gSpecialVar_Result\n\ + .word gLinkCallback\n\ + .word gLinkPlayers\n\ + .word 0x4000128"); +} +#endif + +#if DEBUG +__attribute__((naked)) +static void sub_8082CD4(u8 arg0, u8 arg1) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ + lsl r1, r1, #0x18\n\ + lsr r6, r1, #0x18\n\ + mov r0, #0xc\n\ + mov r1, #0x0\n\ + mov r2, #0x1f\n\ + mov r3, #0x2\n\ + bl InitLinkTestBG_Unused\n\ + ldr r4, ._40\n\ + add r0, r4, #0\n\ + bl FindTaskIdByFunc\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0xff\n\ + bne ._39 @cond_branch\n\ + add r0, r4, #0\n\ + mov r1, #0x50\n\ + bl CreateTask\n\ + add r4, r0, #0\n\ + lsl r4, r4, #0x18\n\ + lsr r4, r4, #0x18\n\ + ldr r5, ._40 + 4\n\ + lsl r0, r4, #0x2\n\ + add r0, r0, r4\n\ + lsl r0, r0, #0x3\n\ + add r0, r0, r5\n\ + strh r7, [r0, #0xa]\n\ + strh r6, [r0, #0xc]\n\ + ldr r0, ._40 + 8\n\ + mov r1, #0x50\n\ + bl CreateTask\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + lsl r1, r0, #0x2\n\ + add r1, r1, r0\n\ + lsl r1, r1, #0x3\n\ + add r1, r1, r5\n\ + strh r4, [r1, #0x8]\n\ +._39:\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._41:\n\ + .align 2, 0\n\ +._40:\n\ + .word sub_8082F20+1\n\ + .word gTasks\n\ + .word debug_sub_808A55C+1"); +} +#else static void sub_8082CD4(u8 arg0, u8 arg1) { if (FindTaskIdByFunc(sub_8082F20) == 0xFF) @@ -105,6 +482,7 @@ static void sub_8082CD4(u8 arg0, u8 arg1) gTasks[taskId].data[2] = arg1; } } +#endif static void sub_8082D18(u32 value) { @@ -207,7 +585,7 @@ void unref_sub_8082EEC(u8 taskId) } } -static void sub_8082F20(u8 taskId) +/*static*/ void sub_8082F20(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -360,6 +738,10 @@ void sub_80831F8(u8 taskId) || sub_8082DF4(taskId) == TRUE) return; +#if DEBUG + sub_8082D60(taskId, GetLinkPlayerCount_2()); +#endif + gSpecialVar_Result = sub_8082D9C(local1, local2); if (gSpecialVar_Result == 0) return; @@ -908,6 +1290,74 @@ void sub_8083C50(u8 taskId) DestroyTask(taskId); } +#if DEBUG + +__attribute__((naked)) +void debug_sub_808B778() +{ + asm("\ + push {r4, lr}\n\ + ldr r4, ._390\n\ + add r0, r4, #0\n\ + bl FuncIsActiveTask\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._389 @cond_branch\n\ + add r0, r4, #0\n\ + mov r1, #0x50\n\ + bl CreateTask\n\ +._389:\n\ + ldr r1, ._390 + 4\n\ + ldr r0, [r1]\n\ + add r0, r0, #0x1\n\ + str r0, [r1]\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._391:\n\ + .align 2, 0\n\ +._390:\n\ + .word debug_sub_808B7A8+1\n\ + .word unk_3004E98"); +} + +__attribute__((naked)) +void debug_sub_808B7A8() +{ + asm("\ + push {lr}\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + ldr r2, ._393\n\ + lsl r1, r0, #0x2\n\ + add r1, r1, r0\n\ + lsl r1, r1, #0x3\n\ + add r1, r1, r2\n\ + ldrh r0, [r1, #0x8]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1, #0x8]\n\ + lsl r0, r0, #0x10\n\ + asr r0, r0, #0x10\n\ + cmp r0, #0x1e\n\ + bne ._392 @cond_branch\n\ + mov r0, #0x0\n\ + strh r0, [r1, #0x8]\n\ + ldr r2, ._393 + 4\n\ + ldrh r0, [r2]\n\ + mov r1, #0x1\n\ + orr r0, r0, r1\n\ + strh r0, [r2]\n\ +._392:\n\ + pop {r0}\n\ + bx r0\n\ +._394:\n\ + .align 2, 0\n\ +._393:\n\ + .word gTasks\n\ + .word unk_3004E94"); +} +#endif + static void sub_8083CA4(u8 taskId) { if (!gReceivedRemoteLinkPlayers) @@ -921,4 +1371,23 @@ void unref_sub_8083CC8(u8 taskId) { sub_800832C(); gTasks[taskId].func = sub_8083CA4; -}
\ No newline at end of file +} + +#if DEBUG + +void debug_sub_808B82C(void) +{ + unk_2030220 = 0; +} + +void debug_sub_808B838(u8 a) +{ + unk_2030220 |= 1 << a; +} + +int debug_sub_808B850(void) +{ + return unk_2030220; +} + +#endif
\ No newline at end of file diff --git a/src/engine/clock.c b/src/engine/clock.c index 416aaa6bb..fceccdfcb 100644 --- a/src/engine/clock.c +++ b/src/engine/clock.c @@ -13,12 +13,11 @@ #include "tv.h" #include "wallclock.h" -static void InitTimeBasedEvents(void); static void UpdatePerDay(struct Time *time); static void UpdatePerMinute(struct Time *time); static void ReturnFromStartWallClock(void); -static void InitTimeBasedEvents(void) +void InitTimeBasedEvents(void) { FlagSet(FLAG_SYS_CLOCK_SET); RtcCalcLocalTime(); diff --git a/src/engine/link.c b/src/engine/link.c index 33037b817..8888f22f5 100644 --- a/src/engine/link.c +++ b/src/engine/link.c @@ -1,4 +1,5 @@ #include "global.h" +#include "cable_club.h" #include "link.h" #include "battle.h" #include "berry.h" @@ -12,6 +13,7 @@ #include "constants/songs.h" #include "sound.h" #include "sprite.h" +#include "string_util.h" #include "strings2.h" #include "task.h" #include "text.h" @@ -66,7 +68,7 @@ u32 sub_8007E40(void); static void SetBlockReceivedFlag(u8); static u16 LinkTestCalcBlockChecksum(void *, u16); static void PrintHexDigit(u8, u8, u8); -static void PrintHex(u32, u8, u8, u8); +void PrintHex(u32, u8, u8, u8); static void LinkCB_RequestPlayerDataExchange(void); static void Task_PrintTestData(u8); bool8 sub_8008224(void); @@ -79,7 +81,7 @@ static void sub_80084C8(void); static void sub_80084F4(void); static void CheckErrorStatus(void); -static void CB2_PrintErrorMessage(void); +void CB2_PrintErrorMessage(void); static u8 IsSioMultiMaster(void); static void DisableSerial(void); static void EnableSerial(void); @@ -145,6 +147,9 @@ void (*gLinkCallback)(void); struct LinkPlayer gSavedLinkPlayers[MAX_LINK_PLAYERS]; u8 gShouldAdvanceLinkState; u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS]; +#if DEBUG +u8 gUnknown_Debug_30030E0; +#endif u8 gBlockRequestType; u8 gLastSendQueueCount; struct Link gLink; @@ -156,11 +161,11 @@ u8 deUnkValue1; u8 deUnkValue2; #endif -EWRAM_DATA bool8 gLinkTestDebugValuesEnabled = {0}; -EWRAM_DATA bool8 gLinkTestDummyBool = {0}; -EWRAM_DATA u32 gFiller_20238B8 = {0}; -EWRAM_DATA u32 dword_20238BC = {0}; -EWRAM_DATA bool8 gLinkOpen = {0}; +EWRAM_DATA bool8 gLinkTestDebugValuesEnabled = 0; +EWRAM_DATA bool8 gLinkTestDummyBool = 0; +EWRAM_DATA u32 gFiller_20238B8 = 0; +EWRAM_DATA u32 dword_20238BC = 0; +EWRAM_DATA bool8 gLinkOpen = 0; static const u16 sLinkTestDigitPalette[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal"); static const u32 sLinkTestDigitTiles[] = INCBIN_U32("graphics/interface/link_test_digits.4bpp"); @@ -189,9 +194,19 @@ const struct BlockRequest sBlockRequestLookupTable[5] = static const u8 sTestString[] = _("テストな"); -ALIGNED(4) static const u8 sMagic[] = "GameFreak inc."; +// TODO: fix the alignment here + +ALIGNED(4) const u8 sMagic[] = "GameFreak inc."; -ALIGNED(4) static const u8 sEmptyString[] = _(""); +#if DEBUG +const u8 sEmptyString[] = _(" "); +#else +ALIGNED(4) const u8 sEmptyString[] = _(""); +#endif + +#if DEBUG +const u8 linkDebugFillerPleaseRemove[2] = {0}; +#endif void Task_DestroySelf(u8 taskId) { @@ -543,6 +558,9 @@ static void ProcessRecvCmds(u8 unusedParam) else { SetBlockReceivedFlag(i); +#if DEBUG + debug_sub_808B838(i); +#endif } } break; @@ -952,7 +970,7 @@ static void PrintHexDigit(u8 tileNum, u8 x, u8 y) tilemap[(32 * y) + x] = (gLinkTestBGInfo.paletteNum << 12) | (tileNum + 1); } -static void PrintHex(u32 num, u8 x, u8 y, u8 maxDigits) +void PrintHex(u32 num, u8 x, u8 y, u8 maxDigits) { u8 buffer[16]; s32 i; @@ -970,6 +988,143 @@ static void PrintHex(u32 num, u8 x, u8 y, u8 maxDigits) } } +#if DEBUG + +EWRAM_DATA u16 *debugCharacterBase = NULL; +EWRAM_DATA void *unk_20238C8 = NULL; +EWRAM_DATA u16 (*debugTileMap)[] = NULL; +EWRAM_DATA u32 unk_20238D0 = 0; + +void debug_sub_8008218(u16 *buffer, void *arg1, u16 (*arg2)[], u32 arg3) +{ + CpuSet(sLinkTestDigitTiles, buffer, 272); + debugCharacterBase = buffer; + unk_20238C8 = arg1; + debugTileMap = arg2; + unk_20238D0 = arg3; +} + +#ifdef NONMATCHING +void debug_sub_8008264(u32 value, int left, int top, int r3, int sp0) +{ + u32 buffer[8]; + u32 *ptr; + + u16 *dest; + + int i; + + if (unk_20238D0 != sp0) + return; + + r3 = max(r3, 8); + + ptr = &buffer[0]; + dest = &(*debugTileMap)[left + top * 32]; + + for (i = r3; i != 0; i--) + { + *(ptr++) = value & 0xF; + value = value >> 4; + } + + ptr = &buffer[8 - r3]; + for (i = r3; i != 0; i--) + { + int charOffset = (((uintptr_t) debugCharacterBase) - ((uintptr_t) unk_20238C8)) / 32; + *dest = *ptr + charOffset + 1; + ptr--; + dest++; + } +} +#else +__attribute__((naked)) +void debug_sub_8008264(u32 value, int left, int top, int r3, int sp0) +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r8\n" + " push {r7}\n" + " add sp, sp, #0xffffffe0\n" + " add r5, r0, #0\n" + " add r6, r1, #0\n" + " add r4, r3, #0\n" + " ldr r0, [sp, #0x38]\n" + " ldr r1, ._347\n" + " ldr r1, [r1]\n" + " cmp r1, r0\n" + " bne ._345 @cond_branch\n" + " cmp r4, #0x8\n" + " ble ._342 @cond_branch\n" + " mov r4, #0x8\n" + "._342:\n" + " mov r3, sp\n" + " ldr r0, ._347 + 4\n" + " mov r8, r0\n" + " lsl r2, r2, #0x6\n" + " mov ip, r2\n" + " lsl r6, r6, #0x1\n" + " lsl r7, r4, #0x2\n" + " cmp r4, #0\n" + " ble ._343 @cond_branch\n" + " mov r1, #0xf\n" + " add r2, r4, #0\n" + "._344:\n" + " add r0, r5, #0\n" + " and r0, r0, r1\n" + " stmia r3!, {r0}\n" + " lsr r5, r5, #0x4\n" + " sub r2, r2, #0x1\n" + " cmp r2, #0\n" + " bne ._344 @cond_branch\n" + "._343:\n" + " mov r1, r8\n" + " ldr r0, [r1]\n" + " add r0, r0, ip\n" + " add r5, r0, r6\n" + " mov r1, sp\n" + " add r0, r1, r7\n" + " sub r3, r0, #4\n" + " cmp r4, #0\n" + " ble ._345 @cond_branch\n" + " ldr r7, ._347 + 8\n" + " ldr r6, ._347 + 12\n" + " add r2, r4, #0\n" + "._346:\n" + " ldr r1, [r7]\n" + " ldr r0, [r6]\n" + " sub r1, r1, r0\n" + " lsr r1, r1, #0x5\n" + " ldr r0, [r3]\n" + " add r0, r0, r1\n" + " add r0, r0, #0x1\n" + " strh r0, [r5]\n" + " sub r3, r3, #0x4\n" + " add r5, r5, #0x2\n" + " sub r2, r2, #0x1\n" + " cmp r2, #0\n" + " bne ._346 @cond_branch\n" + "._345:\n" + " add sp, sp, #0x20\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._348:\n" + " .align 2, 0\n" + "._347:\n" + " .word unk_20238D0\n" + " .word debugTileMap\n" + " .word debugCharacterBase\n" + " .word unk_20238C8\n" + "\n" + ); +} +#endif + +#endif + static void LinkCB_RequestPlayerDataExchange(void) { // Only one request needs to be sent, so only the master sends it. @@ -1248,14 +1403,33 @@ void CB2_LinkError(void) SetMainCallback2(CB2_PrintErrorMessage); } -static void CB2_PrintErrorMessage(void) +void CB2_PrintErrorMessage(void) { - u8 array[64] __attribute__((unused)); // unused + u8 array[32] __attribute__((unused)); // unused + u8 array2[32] __attribute__((unused)); // unused switch (gMain.state) { case 0: Menu_PrintTextPixelCoords(gMultiText_LinkError, 20, 56, 1); +#if DEBUG + StringCopy(array, sColorCodes); + + ConvertIntToHexStringN(array2, sErrorLinkStatus, STR_CONV_MODE_LEADING_ZEROS, 8); + StringAppend(array, array2); + + StringAppend(array, sEmptyString); + + ConvertIntToHexStringN(array2, sErrorLastSendQueueCount, STR_CONV_MODE_LEADING_ZEROS, 2); + StringAppend(array, array2); + + StringAppend(array, sEmptyString); + + ConvertIntToHexStringN(array2, sErrorLastRecvQueueCount, STR_CONV_MODE_LEADING_ZEROS, 2); + StringAppend(array, array2); + + Menu_PrintText(array, 2, 15); +#endif break; case 30: case 60: diff --git a/src/engine/mystery_event_menu.c b/src/engine/mystery_event_menu.c index 8fad563e6..2e526bb4a 100644 --- a/src/engine/mystery_event_menu.c +++ b/src/engine/mystery_event_menu.c @@ -338,3 +338,463 @@ static void CB2_MysteryEventMenu(void) BuildOamBuffer(); UpdatePaletteFade(); } + +#if DEBUG + +void debug_sub_815D1D8(); + +__attribute__((naked)) +void debug_sub_815D04C() +{ + asm( + " push {r4, r5, r6, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " ldr r1, ._125\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r4, r0, r1\n" + " mov r1, #0x8\n" + " ldsh r0, [r4, r1]\n" + " cmp r0, #0\n" + " bne ._121 @cond_branch\n" + " mov r0, #0x4\n" + " mov r1, #0x4\n" + " mov r2, #0xd\n" + " mov r3, #0x7\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r1, ._125 + 4\n" + " mov r2, #0xa\n" + " ldsh r0, [r4, r2]\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov r1, #0x5\n" + " mov r2, #0x5\n" + " bl Menu_PrintText\n" + " ldrh r0, [r4, #0x8]\n" + " add r0, r0, #0x1\n" + " strh r0, [r4, #0x8]\n" + "._121:\n" + " ldr r2, ._125 + 8\n" + " ldrh r1, [r2, #0x2e]\n" + " mov r0, #0x20\n" + " and r0, r0, r1\n" + " add r6, r2, #0\n" + " cmp r0, #0\n" + " beq ._122 @cond_branch\n" + " ldrh r1, [r4, #0xa]\n" + " mov r2, #0xa\n" + " ldsh r0, [r4, r2]\n" + " cmp r0, #0\n" + " bne ._123 @cond_branch\n" + " ldr r0, ._125 + 12\n" + " ldrb r0, [r0]\n" + " sub r0, r0, #0x1\n" + " b ._124\n" + "._126:\n" + " .align 2, 0\n" + "._125:\n" + " .word gTasks\n" + " .word gUnknown_Debug_842E2D0\n" + " .word gMain\n" + " .word gUnknown_Debug_842E350\n" + "._123:\n" + " sub r0, r1, #1\n" + "._124:\n" + " strh r0, [r4, #0xa]\n" + " ldr r0, ._130\n" + " lsl r1, r5, #0x2\n" + " add r1, r1, r5\n" + " lsl r1, r1, #0x3\n" + " add r1, r1, r0\n" + " mov r0, #0x0\n" + " strh r0, [r1, #0x8]\n" + "._122:\n" + " ldrh r1, [r6, #0x2e]\n" + " mov r0, #0x10\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._127 @cond_branch\n" + " ldr r1, ._130\n" + " lsl r2, r5, #0x2\n" + " add r0, r2, r5\n" + " lsl r0, r0, #0x3\n" + " add r4, r0, r1\n" + " mov r0, #0xa\n" + " ldsh r3, [r4, r0]\n" + " ldr r0, ._130 + 4\n" + " ldrb r0, [r0]\n" + " sub r0, r0, #0x1\n" + " cmp r3, r0\n" + " bne ._128 @cond_branch\n" + " mov r0, #0x0\n" + " b ._129\n" + "._131:\n" + " .align 2, 0\n" + "._130:\n" + " .word gTasks\n" + " .word gUnknown_Debug_842E350\n" + "._128:\n" + " ldrh r0, [r4, #0xa]\n" + " add r0, r0, #0x1\n" + "._129:\n" + " strh r0, [r4, #0xa]\n" + " add r0, r2, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0x0\n" + " strh r1, [r0, #0x8]\n" + "._127:\n" + " ldrh r1, [r6, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._132 @cond_branch\n" + " ldr r1, ._133\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r2, #0xa\n" + " ldsh r1, [r0, r2]\n" + " lsl r1, r1, #0x3\n" + " ldr r0, ._133 + 4\n" + " add r0, r0, #0x4\n" + " add r1, r1, r0\n" + " ldr r0, ._133 + 8\n" + " ldr r1, [r1]\n" + " bl _call_via_r1\n" + " ldr r0, ._133 + 12\n" + " add r1, r6, r0\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " add r0, r5, #0\n" + " bl DestroyTask\n" + "._132:\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._134:\n" + " .align 2, 0\n" + "._133:\n" + " .word gTasks\n" + " .word gUnknown_Debug_842E2D0\n" + " .word +0x2004000\n" + " .word 0x43c\n" + "\n" + ); +} + +void debug_sub_815D15C(void) +{ + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + SetVBlankCallback(VBlankCB); + Text_LoadWindowTemplate(&gWindowTemplate_81E6CE4); + InitMenuWindow(&gWindowTemplate_81E6CE4); + Menu_EraseScreen(); + REG_DISPCNT = DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_MODE_0; + REG_BLDCNT = 0; + + CreateTask(Task_DestroySelf, 0); + StopMapMusic(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + FillPalette(0, 0, 2); + SetMainCallback2(debug_sub_815D1D8); +} + +__attribute__((naked)) +void debug_sub_815D1D8() +{ + asm( + " push {r4, lr}\n" + " add sp, sp, #0xfffffffc\n" + " ldr r1, ._139\n" + " ldr r2, ._139 + 4\n" + " add r0, r1, r2\n" + " ldrb r0, [r0]\n" + " add r4, r1, #0\n" + " cmp r0, #0xb\n" + " bls ._137 @cond_branch\n" + " b ._196\n" + "._137:\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._139 + 8\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._140:\n" + " .align 2, 0\n" + "._139:\n" + " .word gMain\n" + " .word 0x43c\n" + " .word ._141\n" + "._141:\n" + " .word ._142\n" + " .word ._143\n" + " .word ._144\n" + " .word ._145\n" + " .word ._146\n" + " .word ._196\n" + " .word ._148\n" + " .word ._149\n" + " .word ._150\n" + " .word ._151\n" + " .word ._152\n" + " .word ._153\n" + "._142:\n" + " mov r0, #0x3\n" + " mov r1, #0xe\n" + " mov r2, #0x1b\n" + " mov r3, #0x13\n" + " bl Menu_DrawStdWindowFrame\n" + " mov r0, #0x1\n" + " neg r0, r0\n" + " mov r1, #0x0\n" + " str r1, [sp]\n" + " mov r2, #0x10\n" + " mov r3, #0x0\n" + " bl BeginNormalPaletteFade\n" + " ldr r1, ._155\n" + " ldr r0, ._155 + 4\n" + " add r1, r1, r0\n" + " b ._189\n" + "._156:\n" + " .align 2, 0\n" + "._155:\n" + " .word gMain\n" + " .word 0x43c\n" + "._143:\n" + " ldr r0, ._161\n" + " ldrb r1, [r0, #0x7]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._157 @cond_branch\n" + " b ._196\n" + "._157:\n" + " ldrh r1, [r4, #0x2c]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._159 @cond_branch\n" + " ldr r1, ._161 + 4\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + "._159:\n" + " ldr r0, ._161 + 8\n" + " mov r1, #0x4\n" + " mov r2, #0xf\n" + " bl MenuPrintMessage\n" + " ldr r2, ._161 + 12\n" + " add r1, r4, r2\n" + " b ._189\n" + "._162:\n" + " .align 2, 0\n" + "._161:\n" + " .word gPaletteFade\n" + " .word gUnknown_Debug_30030E0\n" + " .word Str_843DA70\n" + " .word 0x43c\n" + "._144:\n" + " bl Menu_UpdateWindowText\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._163 @cond_branch\n" + " b ._196\n" + "._163:\n" + " ldr r1, ._166\n" + " ldr r0, ._166 + 4\n" + " add r1, r1, r0\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " ldr r1, ._166 + 8\n" + " ldr r2, ._166 + 12\n" + " add r0, r2, #0\n" + " strh r0, [r1]\n" + " bl OpenLink\n" + " b ._196\n" + "._167:\n" + " .align 2, 0\n" + "._166:\n" + " .word gMain\n" + " .word 0x43c\n" + " .word gLinkType\n" + " .word 0x5501\n" + "._145:\n" + " ldr r0, ._171\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " bne ._168 @cond_branch\n" + " b ._196\n" + "._168:\n" + " ldr r1, ._171 + 4\n" + " add r0, r4, r1\n" + " ldrb r1, [r0]\n" + " add r1, r1, #0x1\n" + " strb r1, [r0]\n" + " ldr r0, ._171 + 8\n" + " mov r1, #0x4\n" + " mov r2, #0xf\n" + " bl MenuPrintMessage\n" + " b ._196\n" + "._172:\n" + " .align 2, 0\n" + "._171:\n" + " .word gReceivedRemoteLinkPlayers\n" + " .word 0x43c\n" + " .word Str_843DA84\n" + "._146:\n" + " bl Menu_UpdateWindowText\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._173 @cond_branch\n" + " b ._196\n" + "._173:\n" + " ldr r0, ._176\n" + " mov r1, #0xa\n" + " bl CreateTask\n" + " ldr r1, ._176 + 4\n" + " ldr r2, ._176 + 8\n" + " add r1, r1, r2\n" + " b ._189\n" + "._177:\n" + " .align 2, 0\n" + "._176:\n" + " .word debug_sub_815D04C+1\n" + " .word gMain\n" + " .word 0x43c\n" + "._148:\n" + " ldr r0, ._179\n" + " mov r1, #0x4\n" + " mov r2, #0xf\n" + " bl MenuPrintMessage\n" + " ldr r1, ._179 + 4\n" + " ldr r2, ._179 + 8\n" + " mov r0, #0x0\n" + " bl SendBlock\n" + " ldr r1, ._179 + 12\n" + " ldr r0, ._179 + 16\n" + " add r1, r1, r0\n" + " b ._189\n" + "._180:\n" + " .align 2, 0\n" + "._179:\n" + " .word Str_843DA98\n" + " .word 0x2004000\n" + " .word 0x2004\n" + " .word gMain\n" + " .word 0x43c\n" + "._149:\n" + " bl Menu_UpdateWindowText\n" + " bl sub_8007ECC\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " beq ._196 @cond_branch\n" + " ldr r1, ._183\n" + " ldr r2, ._183 + 4\n" + " add r1, r1, r2\n" + " b ._189\n" + "._184:\n" + " .align 2, 0\n" + "._183:\n" + " .word gMain\n" + " .word 0x43c\n" + "._150:\n" + " bl sub_800832C\n" + " ldr r1, ._186\n" + " ldr r0, ._186 + 4\n" + " add r1, r1, r0\n" + " b ._189\n" + "._187:\n" + " .align 2, 0\n" + "._186:\n" + " .word gMain\n" + " .word 0x43c\n" + "._151:\n" + " ldr r0, ._190\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " bne ._196 @cond_branch\n" + " mov r0, #0x4\n" + " mov r1, #0xf\n" + " mov r2, #0x1a\n" + " mov r3, #0x12\n" + " bl Menu_BlankWindowRect\n" + " ldr r0, ._190 + 4\n" + " mov r1, #0x4\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " ldr r1, ._190 + 8\n" + " ldr r2, ._190 + 12\n" + " add r1, r1, r2\n" + " b ._189\n" + "._191:\n" + " .align 2, 0\n" + "._190:\n" + " .word gReceivedRemoteLinkPlayers\n" + " .word Str_843DAA3\n" + " .word gMain\n" + " .word 0x43c\n" + "._152:\n" + " ldrh r1, [r4, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._196 @cond_branch\n" + " mov r0, #0x1\n" + " neg r0, r0\n" + " mov r1, #0x0\n" + " str r1, [sp]\n" + " mov r2, #0x0\n" + " mov r3, #0x10\n" + " bl BeginNormalPaletteFade\n" + " ldr r0, ._194\n" + " add r1, r4, r0\n" + "._189:\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " b ._196\n" + "._195:\n" + " .align 2, 0\n" + "._194:\n" + " .word 0x43c\n" + "._153:\n" + " ldr r0, ._197\n" + " ldrb r1, [r0, #0x7]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._196 @cond_branch\n" + " ldr r0, ._197 + 4\n" + " bl SetMainCallback2\n" + "._196:\n" + " bl RunTasks\n" + " bl AnimateSprites\n" + " bl BuildOamBuffer\n" + " bl UpdatePaletteFade\n" + " add sp, sp, #0x4\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._198:\n" + " .align 2, 0\n" + "._197:\n" + " .word gPaletteFade\n" + " .word CB2_InitTitleScreen+1\n" + "\n" + ); +} + +#endif diff --git a/src/engine/reset_rtc_screen.c b/src/engine/reset_rtc_screen.c index ce4afe922..9324ea1c1 100644 --- a/src/engine/reset_rtc_screen.c +++ b/src/engine/reset_rtc_screen.c @@ -147,6 +147,13 @@ const struct SpriteTemplate gSpriteTemplate_83764E8 = const u8 gUnknown_08376500[] = _(" : "); +#if DEBUG +const u8 gUnknown_Debug_0839AE94[] = _("にっすう"); +const u8 gUnknown_Debug_0839AE99[] = _("じかん"); +const u8 gUnknown_Debug_0839AE9D[] = _("ゲームない じかん"); +const u8 gUnknown_Debug_0839AEA7[] = _("RTC じかん"); +#endif + void SpriteCB_ResetRtcCusor0(struct Sprite *sprite) { int state = gTasks[sprite->data[0]].data[2]; @@ -587,3 +594,319 @@ void Task_ResetRtcScreen(u8 taskId) } } } + +#if DEBUG + +__attribute__((naked)) +void debug_sub_806F8F8(void) +{ + asm("\ + push {lr}\n\ + ldr r0, ._131\n\ + bl SetMainCallback2\n\ + pop {r0}\n\ + bx r0\n\ +._132:\n\ + .align 2, 0\n\ +._131:\n\ + .word CB2_InitResetRtcScreen+1"); +} + +__attribute__((naked)) +void debug_sub_806F908(u8 a) +{ + asm("\ + push {r4, r5, lr}\n\ + lsl r0, r0, #0x18\n\ + lsr r5, r0, #0x18\n\ + lsl r0, r5, #0x2\n\ + add r0, r0, r5\n\ + lsl r0, r0, #0x3\n\ + ldr r2, ._136\n\ + add r4, r0, r2\n\ + mov r1, #0x0\n\ + ldsh r0, [r4, r1]\n\ + cmp r0, #0\n\ + beq ._133 @cond_branch\n\ + cmp r0, #0x1\n\ + beq ._134 @cond_branch\n\ + b ._141\n\ +._137:\n\ + .align 2, 0\n\ +._136:\n\ + .word gTasks+0x8\n\ +._133:\n\ + ldr r0, ._139\n\ + mov r1, #0x50\n\ + bl CreateTask\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + strh r0, [r4, #0x2]\n\ + ldrh r0, [r4]\n\ + add r0, r0, #0x1\n\ + strh r0, [r4]\n\ + b ._141\n\ +._140:\n\ + .align 2, 0\n\ +._139:\n\ + .word Task_ResetRtc_0+1\n\ +._134:\n\ + sub r2, r2, #0x8\n\ + mov r0, #0x2\n\ + ldsh r1, [r4, r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x3\n\ + add r2, r0, r2\n\ + mov r1, #0x8\n\ + ldsh r0, [r2, r1]\n\ + cmp r0, #0\n\ + beq ._141 @cond_branch\n\ + mov r1, #0xa\n\ + ldsh r0, [r2, r1]\n\ + cmp r0, #0x1\n\ + bne ._142 @cond_branch\n\ + ldr r3, ._143\n\ + mov r1, #0x0\n\ + ldsh r0, [r3, r1]\n\ + mov r1, #0x2\n\ + ldsb r1, [r3, r1]\n\ + mov r2, #0x3\n\ + ldsb r2, [r3, r2]\n\ + ldrb r3, [r3, #0x4]\n\ + lsl r3, r3, #0x18\n\ + asr r3, r3, #0x18\n\ + bl RtcCalcLocalTimeOffset\n\ +._142:\n\ + ldrb r0, [r4, #0x2]\n\ + bl DestroyTask\n\ + bl Menu_EraseScreen\n\ + bl ScriptContext2_Disable\n\ + add r0, r5, #0\n\ + bl DestroyTask\n\ +._141:\n\ + pop {r4, r5}\n\ + pop {r0}\n\ + bx r0\n\ +._144:\n\ + .align 2, 0\n\ +._143:\n\ + .word gLocalTime"); +} + +__attribute__((naked)) +void debug_sub_806F99C() +{ + asm("\ + push {lr}\n\ + bl RtcCalcLocalTime\n\ + ldr r0, ._145\n\ + mov r1, #0x50\n\ + bl CreateTask\n\ + bl ScriptContext2_Enable\n\ + pop {r0}\n\ + bx r0\n\ +._146:\n\ + .align 2, 0\n\ +._145:\n\ + .word debug_sub_806F908+1"); +} + +__attribute__((naked)) +void debug_sub_806F9B8() +{ + asm("\ + push {lr}\n\ + ldr r2, ._147\n\ + ldr r0, ._147 + 4\n\ + add r0, r0, #0xa0\n\ + ldr r1, [r0, #0x4]\n\ + ldr r0, [r0]\n\ + str r0, [r2]\n\ + str r1, [r2, #0x4]\n\ + ldr r0, ._147 + 8\n\ + mov r1, #0x50\n\ + bl CreateTask\n\ + bl ScriptContext2_Enable\n\ + pop {r0}\n\ + bx r0\n\ +._148:\n\ + .align 2, 0\n\ +._147:\n\ + .word gLocalTime\n\ + .word gSaveBlock2\n\ + .word debug_sub_806F908+1"); +} + +__attribute__((naked)) +void debug_sub_806F9E4() +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, sl\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5, r6, r7}\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ + lsl r0, r7, #0x2\n\ + add r0, r0, r7\n\ + lsl r0, r0, #0x3\n\ + ldr r1, ._153\n\ + add r5, r0, r1\n\ + ldr r6, ._153 + 4\n\ + mov r1, #0x0\n\ + ldsh r0, [r5, r1]\n\ + cmp r0, #0x1\n\ + beq ._149 @cond_branch\n\ + cmp r0, #0x1\n\ + bgt ._150 @cond_branch\n\ + cmp r0, #0\n\ + beq ._151 @cond_branch\n\ + b ._165\n\ +._154:\n\ + .align 2, 0\n\ +._153:\n\ + .word gTasks+0x8\n\ + .word gStringVar4\n\ +._150:\n\ + cmp r0, #0x2\n\ + beq ._155 @cond_branch\n\ + b ._165\n\ +._149:\n\ + mov r0, #0x0\n\ + mov r1, #0x9\n\ + mov r2, #0x1d\n\ + mov r3, #0x13\n\ + bl Menu_DrawStdWindowFrame\n\ + add r4, r6, #0\n\ + add r4, r4, #0x50\n\ + bl RtcGetErrorStatus\n\ + add r1, r0, #0\n\ + lsl r1, r1, #0x10\n\ + lsr r1, r1, #0x10\n\ + add r0, r4, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x4\n\ + bl ConvertIntToHexStringN\n\ + add r0, r4, #0\n\ + mov r1, #0x2\n\ + mov r2, #0xa\n\ + bl Menu_PrintText\n\ + ldr r0, ._158\n\ + mov r1, #0xc\n\ + mov r2, #0xc\n\ + bl Menu_PrintText\n\ + ldr r0, ._158 + 4\n\ + mov r1, #0x14\n\ + mov r2, #0xc\n\ + bl Menu_PrintText\n\ + ldr r0, ._158 + 8\n\ + mov r1, #0x1\n\ + mov r2, #0xe\n\ + bl Menu_PrintText\n\ + ldr r0, ._158 + 12\n\ + mov r1, #0x1\n\ + mov r2, #0x10\n\ + bl Menu_PrintText\n\ +._151:\n\ + ldrh r0, [r5]\n\ + add r0, r0, #0x1\n\ + strh r0, [r5]\n\ + b ._165\n\ +._159:\n\ + .align 2, 0\n\ +._158:\n\ + .word gUnknown_Debug_0839AE94\n\ + .word gUnknown_Debug_0839AE99\n\ + .word gUnknown_Debug_0839AEA7\n\ + .word gUnknown_Debug_0839AE9D\n\ +._155:\n\ + bl RtcCalcLocalTime\n\ + add r0, r6, #0\n\ + bl FormatHexRtcTime\n\ + mov r2, #0x14\n\ + add r2, r2, r6\n\ + mov r9, r2\n\ + mov r0, r9\n\ + bl debug_sub_8009894\n\ + mov r0, #0x28\n\ + add r0, r0, r6\n\ + mov sl, r0\n\ + ldr r4, ._163\n\ + mov r1, #0x2\n\ + ldsb r1, [r4, r1]\n\ + mov r2, #0x3\n\ + ldsb r2, [r4, r2]\n\ + mov r3, #0x4\n\ + ldsb r3, [r4, r3]\n\ + bl FormatDecimalTime\n\ + mov r1, #0x3c\n\ + add r1, r1, r6\n\ + mov r8, r1\n\ + mov r2, #0x0\n\ + ldsh r1, [r4, r2]\n\ + mov r0, r8\n\ + mov r2, #0x1\n\ + mov r3, #0x4\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r0, ._163 + 4\n\ + ldrb r0, [r0, #0x12]\n\ + cmp r0, #0\n\ + bne ._160 @cond_branch\n\ + add r0, r6, #0\n\ + mov r1, #0x14\n\ + mov r2, #0xe\n\ + bl Menu_PrintText\n\ + mov r0, r9\n\ + mov r1, #0xc\n\ + mov r2, #0xe\n\ + bl Menu_PrintText\n\ + mov r0, sl\n\ + mov r1, #0x14\n\ + mov r2, #0x10\n\ + bl Menu_PrintText\n\ + mov r0, r8\n\ + mov r1, #0xc\n\ + mov r2, #0x10\n\ + bl Menu_PrintText\n\ +._160:\n\ + ldrh r1, [r5, #0x2]\n\ + mov r2, #0x2\n\ + ldsh r0, [r5, r2]\n\ + cmp r0, #0x13\n\ + ble ._161 @cond_branch\n\ + add r0, r1, #1\n\ + strh r0, [r5, #0x2]\n\ + b ._165\n\ +._164:\n\ + .align 2, 0\n\ +._163:\n\ + .word gLocalTime\n\ + .word gSaveBlock2\n\ +._161:\n\ + ldr r0, ._166\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._165 @cond_branch\n\ + bl Menu_EraseScreen\n\ + add r0, r7, #0\n\ + bl DestroyTask\n\ + bl ScriptContext2_Disable\n\ +._165:\n\ + pop {r3, r4, r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov sl, r5\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._167:\n\ + .align 2, 0\n\ +._166:\n\ + .word gMain"); +} + +#endif
\ No newline at end of file diff --git a/src/engine/rtc.c b/src/engine/rtc.c index d73f943d2..5462298ed 100644 --- a/src/engine/rtc.c +++ b/src/engine/rtc.c @@ -268,6 +268,28 @@ void FormatHexDate(u8 *dest, s32 year, s32 month, s32 day) *dest = EOS; } +#if DEBUG + +void debug_sub_800987C(u8 *dest) +{ + FormatHexDate(dest, sRtc.year, sRtc.month, sRtc.day); +} + +void debug_sub_8009894(u8 *dest) +{ + u16 dayCount; + + dayCount = RtcGetDayCount(&sRtc); + ConvertIntToDecimalStringN(dest, dayCount, STR_CONV_MODE_RIGHT_ALIGN, 4); +} + +void debug_sub_80098B8(u8 *dest) +{ + ConvertIntToHexStringN(dest, sRtc.status, STR_CONV_MODE_LEADING_ZEROS, 2); +} + +#endif + void RtcCalcTimeDifference(struct SiiRtcInfo *rtc, struct Time *result, struct Time *t) { u16 days = RtcGetDayCount(rtc); @@ -347,3 +369,10 @@ u32 RtcGetMinuteCount() RtcGetInfo(&sRtc); return (24 * 60) * RtcGetDayCount(&sRtc) + 60 * sRtc.hour + sRtc.minute; } + +#if DEBUG +void debug_sub_8009A60() +{ + RtcGetRawInfo(&sRtc); +} +#endif diff --git a/src/engine/save.c b/src/engine/save.c index 250b29a87..0b7a3dd79 100644 --- a/src/engine/save.c +++ b/src/engine/save.c @@ -663,6 +663,35 @@ static u16 CalculateChecksum(void *data, u16 size) return ((checksum >> 16) + checksum); } +#if DEBUG +void sub_813B79C(void) +{ + struct SaveSector *sbSector; + struct SaveSector *hofSector; + const struct SaveBlockChunk *sbChunks; + const struct SaveBlockChunk *hofChunks; + u16 i; + + sbSector = eSaveSection; + sbChunks = sSaveBlockChunks; + for (i = 0; i < NUM_SECTORS_PER_SAVE_SLOT * 2; i++) + { + DoReadFlashWholeSection(i, sbSector); + sbSector->checksum = CalculateChecksum(sbSector, sbChunks[sbSector->id].size); + ProgramFlashSectorAndVerify(i, sbSector->data); + } + + hofSector = eSaveSection; + hofChunks = sHallOfFameChunks; + for (i = 0; i < NUM_HALL_OF_FAME_SECTORS; i++) + { + DoReadFlashWholeSection(HALL_OF_FAME_SECTOR + i, hofSector); + hofSector->id = CalculateChecksum(hofSector, hofChunks[i].size); // why id? + ProgramFlashSectorAndVerify(HALL_OF_FAME_SECTOR + i, hofSector->data); + } +} +#endif + u8 Save_WriteDataInternal(u8 saveType) { u8 i; @@ -706,13 +735,21 @@ u8 Save_WriteDataInternal(u8 saveType) return 0; } +#if DEBUG +extern u32 gUnknown_Debug_03004BD0; +#endif + u8 Save_WriteData(u8 saveType) // TrySave { if (gFlashMemoryPresent != TRUE) return SAVE_STATUS_ERROR; Save_WriteDataInternal(saveType); - if (!gDamagedSaveSectors) + if (!gDamagedSaveSectors +#if DEBUG + && gUnknown_Debug_03004BD0 == 0 +#endif + ) return SAVE_STATUS_OK; DoSaveFailedScreen(saveType); @@ -815,7 +852,7 @@ u8 Save_LoadGameData(u8 saveType) return result; } -static const u8 sUnusedFlashSectors[] = { 30, 31 }; +const u8 sUnusedFlashSectors[] = { 30, 31 }; bool8 unref_sub_8125F4C(struct UnkSaveSection *a1) { diff --git a/src/engine/save_failed_screen.c b/src/engine/save_failed_screen.c index 74a1e9612..7902427e0 100644 --- a/src/engine/save_failed_screen.c +++ b/src/engine/save_failed_screen.c @@ -61,16 +61,18 @@ static const u8 sClockFrames[8][3] = static const u8 gSaveFailedClockPal[] = INCBIN_U8("graphics/misc/clock_small.gbapal"); static const u8 gSaveFailedClockGfx[] = INCBIN_U8("graphics/misc/clock_small.4bpp.lz"); +#define static + static void VBlankCB(void); static void CB2_SaveFailedScreen(void); static void CB2_WipeSave(void); -static void CB2_GameplayCannotBeContinued(void); +/*static*/ void CB2_GameplayCannotBeContinued(void); static void CB2_FadeAndReturnToTitleScreen(void); static void CB2_ReturnToTitleScreen(void); static void VBlankCB_UpdateClockGraphics(void); static bool8 VerifySectorWipe(u16 sector); static bool8 WipeSector(u16 sector); -static bool8 WipeSectors(u32 sectorBits); +/*static*/ bool8 WipeSectors(u32 sectorBits); void DoSaveFailedScreen(u8 saveType) { @@ -148,6 +150,151 @@ static void CB2_SaveFailedScreen(void) } } +#if DEBUG +__attribute__((naked)) +void CB2_WipeSave() +{ + asm( + " push {r4, r5, lr}\n" + " mov r4, #0x0\n" + " ldr r0, ._20\n" + " mov r2, #0x1\n" + " strh r2, [r0]\n" + " ldr r0, ._20 + 4\n" + " ldr r0, [r0]\n" + " ldr r1, ._20 + 8\n" + " cmp r0, #0\n" + " beq ._12 @cond_branch\n" + " str r2, [r1]\n" + "._12:\n" + " ldr r0, [r1]\n" + " cmp r0, #0\n" + " beq ._16 @cond_branch\n" + " add r5, r1, #0\n" + "._17:\n" + " ldr r0, [r5]\n" + " bl WipeSectors\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._14 @cond_branch\n" + " mov r0, #0x1\n" + " mov r1, #0xa\n" + " mov r2, #0x1c\n" + " mov r3, #0x13\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r0, ._20 + 12\n" + " mov r1, #0x2\n" + " mov r2, #0xb\n" + " bl Menu_PrintText\n" + " ldr r0, ._20 + 16\n" + " ldrb r0, [r0]\n" + " bl Save_WriteDataInternal\n" + " ldr r0, [r5]\n" + " cmp r0, #0\n" + " beq ._15 @cond_branch\n" + " mov r0, #0x1\n" + " mov r1, #0xa\n" + " mov r2, #0x1c\n" + " mov r3, #0x13\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r0, ._20 + 20\n" + " mov r1, #0x2\n" + " mov r2, #0xb\n" + " bl Menu_PrintText\n" + "._15:\n" + " add r0, r4, #1\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " ldr r0, [r5]\n" + " cmp r0, #0\n" + " beq ._16 @cond_branch\n" + " cmp r4, #0x2\n" + " bls ._17 @cond_branch\n" + "._16:\n" + " cmp r4, #0x3\n" + " bne ._18 @cond_branch\n" + " mov r0, #0x1\n" + " mov r1, #0xa\n" + " mov r2, #0x1c\n" + " mov r3, #0x13\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r0, ._20 + 24\n" + " mov r1, #0x2\n" + " mov r2, #0xb\n" + " bl Menu_PrintText\n" + " ldr r0, ._20 + 28\n" + " bl SetMainCallback2\n" + " b ._23\n" + "._21:\n" + " .align 2, 0\n" + "._20:\n" + " .word gSaveFailedClockInfo\n" + " .word gUnknown_Debug_03004BD0\n" + " .word gDamagedSaveSectors\n" + " .word gSystemText_CheckCompleteSaveAttempt\n" + " .word gSaveFailedType\n" + " .word gSystemText_SaveFailedBackupCheck\n" + " .word gSystemText_BackupDamagedGameContinue\n" + " .word CB2_FadeAndReturnToTitleScreen+1\n" + "._18:\n" + " mov r0, #0x1\n" + " mov r1, #0xa\n" + " mov r2, #0x1c\n" + " mov r3, #0x13\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r0, ._24\n" + " ldr r0, [r0]\n" + " cmp r0, #0\n" + " bne ._22 @cond_branch\n" + " ldr r0, ._24 + 4\n" + " mov r1, #0x2\n" + " mov r2, #0xb\n" + " bl Menu_PrintText\n" + " b ._23\n" + "._25:\n" + " .align 2, 0\n" + "._24:\n" + " .word gGameContinueCallback\n" + " .word gSystemText_SaveCompletedGameEnd\n" + "._14:\n" + " mov r0, #0x1\n" + " mov r1, #0xa\n" + " mov r2, #0x1c\n" + " mov r3, #0x13\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r0, ._27\n" + " mov r1, #0x2\n" + " mov r2, #0xb\n" + " bl Menu_PrintText\n" + " ldr r0, ._27 + 4\n" + " bl SetMainCallback2\n" + " b ._26\n" + "._28:\n" + " .align 2, 0\n" + "._27:\n" + " .word gSystemText_BackupDamagedGameContinue\n" + " .word CB2_GameplayCannotBeContinued+1\n" + "._22:\n" + " ldr r0, ._29\n" + " mov r1, #0x2\n" + " mov r2, #0xb\n" + " bl Menu_PrintText\n" + "._23:\n" + " ldr r0, ._29 + 4\n" + " bl SetMainCallback2\n" + "._26:\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._30:\n" + " .align 2, 0\n" + "._29:\n" + " .word gSystemText_SaveCompletedPressA\n" + " .word CB2_FadeAndReturnToTitleScreen+1\n" + "\n" + ); +} +#else static void CB2_WipeSave(void) { u8 wipeTries = 0; @@ -198,8 +345,9 @@ static void CB2_WipeSave(void) SetMainCallback2(CB2_FadeAndReturnToTitleScreen); } +#endif -static void CB2_GameplayCannotBeContinued(void) +/*static*/ void CB2_GameplayCannotBeContinued(void) { gSaveFailedClockInfo[0] = FALSE; @@ -264,6 +412,41 @@ static void VBlankCB_UpdateClockGraphics(void) gSaveFailedClockInfo[1]--; } +#if DEBUG +__attribute__((naked)) +bool8 VerifySectorWipe(u16 sector) +{ + asm( + " push {lr}\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " ldr r2, ._50\n" + " mov r3, #0x80\n" + " lsl r3, r3, #0x5\n" + " mov r1, #0x0\n" + " bl ReadFlash\n" + " mov r0, #0x0\n" + " ldr r1, ._50 + 4\n" + "._49:\n" + " add r0, r0, #0x1\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " cmp r0, r1\n" + " bls ._49 @cond_branch\n" + " ldr r0, ._50 + 8\n" + " ldrb r0, [r0]\n" + " pop {r1}\n" + " bx r1\n" + "._51:\n" + " .align 2, 0\n" + "._50:\n" + " .word +0x2000000\n" + " .word 0x3ff\n" + " .word gUnknown_Debug_03004BD0\n" + "\n" + ); +} +#else static bool8 VerifySectorWipe(u16 sector) { u32 *ptr = (u32 *)&gSharedMem; @@ -277,6 +460,7 @@ static bool8 VerifySectorWipe(u16 sector) return FALSE; } +#endif static bool8 WipeSector(u16 sector) { @@ -294,7 +478,7 @@ static bool8 WipeSector(u16 sector) return failed; } -static bool8 WipeSectors(u32 sectorBits) +/*static*/ bool8 WipeSectors(u32 sectorBits) { u16 i; diff --git a/src/engine/sprite.c b/src/engine/sprite.c index cf35e12a3..a9d84e01a 100644 --- a/src/engine/sprite.c +++ b/src/engine/sprite.c @@ -1,8 +1,10 @@ #include "global.h" +#include "debug.h" #include "sprite.h" #include "main.h" #include "menu_cursor.h" #include "palette.h" +#include "sprite.h" #define MAX_SPRITE_COPY_REQUESTS 64 @@ -822,6 +824,12 @@ static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct Spr gSpriteCopyRequests[gSpriteCopyRequestCount].size = images[index].size; gSpriteCopyRequestCount++; } +#if DEBUG + else + { + Crash(sDmaOverErrorMsg); + } +#endif } void RequestSpriteCopy(const void *src, u8 *dest, u16 size) @@ -833,6 +841,12 @@ void RequestSpriteCopy(const void *src, u8 *dest, u16 size) gSpriteCopyRequests[gSpriteCopyRequestCount].size = size; gSpriteCopyRequestCount++; } +#if DEBUG + else + { + Crash(sDmaOverErrorMsg); + } +#endif } // these two functions are unused. diff --git a/src/engine/task.c b/src/engine/task.c index 7bd2b5937..3e8a5588c 100644 --- a/src/engine/task.c +++ b/src/engine/task.c @@ -1,4 +1,5 @@ #include "global.h" +#include "debug.h" #include "task.h" #define ACTIVE_SENTINEL 0x10 @@ -11,8 +12,9 @@ struct Task gTasks[ACTIVE_SENTINEL]; static void InsertTask(u8 newTaskId); static u8 FindFirstActiveTask(); -// Unused string -const u8 sTaskOverString[] = _("TASK OVER\nタスクがオーバーしました"); +const u8 gError_NoTasksLeft[] = _( + "TASK OVER\n" + "タスクがオーバーしました"); void ResetTasks() { @@ -49,6 +51,10 @@ u8 CreateTask(TaskFunc func, u8 priority) } } +#if DEBUG + Crash(gError_NoTasksLeft); +#endif + return 0; } diff --git a/src/engine/trade.c b/src/engine/trade.c index 4bd39c4ef..36e6fc757 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -4495,8 +4495,8 @@ static __attribute__((naked)) void sub_804B41C(void) } #endif -static void sub_804B790(void) // In-game trade init +void sub_804B790(void) { u8 otName[11]; switch (gMain.state) diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index b49628bfa..998c4697e 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -5,6 +5,7 @@ #include "field_effect.h" #include "graphics.h" #include "link.h" +#include "m4a.h" #include "main.h" #include "menu.h" #include "money.h" @@ -52,7 +53,6 @@ extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; EWRAM_DATA struct TrainerCard gTrainerCards[4] = {0}; -extern const u8 gBadgesTiles[]; extern const u16 gUnknown_083B5F0C[]; extern const u16 gBadgesPalette[]; extern const u16 gUnknown_083B5F4C[]; @@ -63,6 +63,34 @@ const u8 gBadgesTiles[] = INCBIN_U8("graphics/trainer_card/badges.4bpp"); // XXX: what is this? u8 *const ewram_ = gSharedMem; +#if DEBUG +const struct TrainerCard gUnknown_Debug_083E0448 = +{ + .gender = FEMALE, + .stars = 4, + .hasPokedex = TRUE, + .var_3 = TRUE, + .var_4 = TRUE, + .firstHallOfFameA = 999, + .firstHallOfFameB = 99, + .firstHallOfFameC = 99, + .pokedexSeen = 411, + .trainerId = 12345, + .playTimeHours = 99, + .playTimeMinutes = 99, + .linkBattleWins = 9999, + .linkBattleLosses = 9999, + .battleTowerWins = 9999, + .battleTowerLosses = 9999, + .contestsWithFriends = 999, + .pokeblocksWithFriends = 0xFFFF, + .pokemonTrades = 0xFFFF, + .money = 99999, + .var_28 = {1, 2, 3, 4}, + .playerName = _("てすと"), +}; +#endif + bool8 TrainerCard_Init(struct Task *); bool8 TrainerCard_WaitForFadeInToFinish(struct Task *); bool8 TrainerCard_WaitForKeys(struct Task *); @@ -176,8 +204,15 @@ static void TrainerCard_Back_PrintPokemonTrades_Label(void); static void TrainerCard_Back_PrintPokemonTrades(void); void unref_sub_8094588(u16 left, u16 top); +#if DEBUG +static u8 gDebug_03000748; +#endif + void TrainerCard_ShowPlayerCard(Callback arg1) { +#if DEBUG + gDebug_03000748 = 0; +#endif TrainerCard_InitScreenForPlayer(arg1); SetMainCallback2(sub_8093174); ewram0_2.language = GAME_LANGUAGE; @@ -185,11 +220,41 @@ void TrainerCard_ShowPlayerCard(Callback arg1) void TrainerCard_ShowLinkCard(u8 playerIndex, Callback arg2) { +#if DEBUG + gDebug_03000748 = 0; +#endif TrainerCard_InitScreenForLinkPlayer(playerIndex, arg2); SetMainCallback2(sub_8093174); ewram0_2.language = gLinkPlayers[gLinkPlayerMapObjects[playerIndex].linkPlayerId].language; } +#if DEBUG +void debug_sub_80A0710(Callback callback) +{ + gDebug_03000748 = TRUE; + TrainerCard_InitScreenForPlayer(callback); + SetMainCallback2(sub_8093174); + ewram0_2.language = GAME_LANGUAGE; +} + +void debug_sub_80A073C(Callback callback) +{ + memcpy(&gTrainerCards[0], &gUnknown_Debug_083E0448, sizeof(struct TrainerCard)); + gDebug_03000748=TRUE; + TrainerCard_InitScreenForLinkPlayer(0, callback); + SetMainCallback2(sub_8093174); + ewram0_2.language = GAME_LANGUAGE; +} + +void debug_sub_80A0780() +{ + int i; + + for (i = 0; i < 4; i++) + memcpy(&gTrainerCards[i], &gUnknown_Debug_083E0448, sizeof(struct TrainerCard)); +} +#endif + static void sub_8093174(void) { switch (gMain.state) @@ -538,6 +603,19 @@ static void TrainerCard_FillFlags(void) } } } + +#if DEBUG + if (gDebug_03000748 != 0) + { + ewram0_2.showHallOfFame = TRUE; + ewram0_2.showLinkBattleStatus = TRUE; + ewram0_2.showBattleTowerStatus = TRUE; + ewram0_2.showContestRecord = TRUE; + ewram0_2.showMixingRecord = TRUE; + ewram0_2.showTradingRecord = TRUE; + memset(ewram0_2.ownedBadges, TRUE, sizeof(ewram0_2.ownedBadges)); + } +#endif } void sub_80937A4() @@ -630,6 +708,17 @@ bool8 TrainerCard_WaitForKeys(struct Task *task) } return TRUE; } +#if DEBUG + else if (gDebug_03000748 && gMain.newKeys & R_BUTTON) + { + ewram0_2.starCount++; + ewram0_2.starCount %= 5; + TrainerCard_LoadPalettes(); + if (ewram0_2.backSideShown == 0) + TrainerCard_DrawStars(); + } +#endif + return FALSE; } @@ -1334,7 +1423,11 @@ static void TrainerCard_Front_PrintPokedexCount(void) { u8 buffer[16]; - if (!ewram0_2.showPokedexCount) + if ( +#if DEBUG + gDebug_03000748 == 0 && +#endif + !ewram0_2.showPokedexCount) { TrainerCard_ClearPokedexLabel(); } diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index ab2a818a7..41d5ae9d1 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -259,7 +259,7 @@ static void SaveCurrentWinStreak(void); static void sub_8135CFC(void); static void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); -static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); +void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); static void ClearBattleTowerRecord(struct BattleTowerRecord *); diff --git a/src/field/berry.c b/src/field/berry.c index 088267ad0..5c1ecd699 100644 --- a/src/field/berry.c +++ b/src/field/berry.c @@ -999,6 +999,66 @@ extern u16 gSpecialVar_0x8006; static u8 CalcBerryYield(struct BerryTree *tree); static u16 GetStageDurationByBerryType(u8 berry); +#if DEBUG +__attribute__((naked)) +void debug_sub_80C2B04() +{ + asm( + " push {lr}\n" + " mov r0, #0x0\n" + " bl sub_80B47D8\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r2, ._1\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x3\n" + " add r1, r1, r2\n" + " ldrh r0, [r1, #0x10]\n" + " sub r0, r0, #0x1\n" + " strh r0, [r1, #0x10]\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._2:\n" + " .align 2, 0\n" + "._1:\n" + " .word gTasks\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80C2B30() +{ + asm( + " push {lr}\n" + " mov r0, #0x1\n" + " bl sub_80B47D8\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r2, ._3\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x3\n" + " add r1, r1, r2\n" + " ldrh r0, [r1, #0x10]\n" + " sub r0, r0, #0x1\n" + " strh r0, [r1, #0x10]\n" + " bl CloseMenu\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "._4:\n" + " .align 2, 0\n" + "._3:\n" + " .word gTasks\n" + "\n" + ); +} +#endif + // unused // this could be static, but making it so causes a compile-time warning. void ClearEnigmaBerries(void) @@ -1022,6 +1082,180 @@ void SetEnigmaBerry(u8 *src) gSaveBlock1.enigmaBerry.berry.description2 = gSaveBlock1.enigmaBerry.description2; } +#if DEBUG +__attribute__((naked)) +void debug_sub_80C2BD0() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " ldr r3, ._11\n" + " ldr r1, ._11 + 4\n" + " add r4, r3, r1\n" + " ldr r6, [r4]\n" + " add r1, r1, #0x4\n" + " add r2, r3, r1\n" + " ldr r7, [r2]\n" + " mov r1, #0x0\n" + " str r1, [r4]\n" + " str r1, [r2]\n" + " add r4, r0, #0\n" + " mov r2, #0x0\n" + " ldr r5, ._11 + 8\n" + "._10:\n" + " add r0, r4, r1\n" + " ldrb r0, [r0]\n" + " add r2, r2, r0\n" + " add r1, r1, #0x1\n" + " cmp r1, r5\n" + " bls ._10 @cond_branch\n" + " ldr r1, ._11 + 4\n" + " add r0, r3, r1\n" + " str r6, [r0]\n" + " add r1, r1, #0x4\n" + " add r0, r3, r1\n" + " str r7, [r0]\n" + " add r0, r2, #0\n" + " pop {r4, r5, r6, r7}\n" + " pop {r1}\n" + " bx r1\n" + "._12:\n" + " .align 2, 0\n" + "._11:\n" + " .word gSaveBlock1\n" + " .word 0x316c\n" + " .word 0x52b\n" + "\n" + ); +} +#endif + +#if DEBUG +__attribute__((naked)) +u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r9\n" + " mov r6, r8\n" + " push {r6, r7}\n" + " add r3, r0, #0\n" + " lsl r1, r1, #0x18\n" + " lsr r1, r1, #0x18\n" + " mov r9, r1\n" + " lsl r2, r2, #0x18\n" + " lsr r2, r2, #0x18\n" + " mov r8, r2\n" + " ldr r4, ._16\n" + " ldr r1, ._16 + 4\n" + " add r0, r4, r1\n" + " add r2, r0, #0\n" + " ldr r1, ._16 + 8\n" + " ldmia r1!, {r5, r6, r7}\n" + " stmia r2!, {r5, r6, r7}\n" + " ldmia r1!, {r5, r6, r7}\n" + " stmia r2!, {r5, r6, r7}\n" + " ldr r1, [r1]\n" + " str r1, [r2]\n" + " add r1, r3, #0\n" + " bl StringCopy\n" + " ldr r0, ._16 + 12\n" + " add r6, r4, r0\n" + " ldr r1, ._16 + 16\n" + " add r0, r6, #0\n" + " bl StringCopy\n" + " ldr r1, ._16 + 20\n" + " add r5, r4, r1\n" + " ldr r1, ._16 + 24\n" + " add r0, r5, #0\n" + " bl StringCopy\n" + " ldr r2, ._16 + 28\n" + " add r0, r4, r2\n" + " str r6, [r0]\n" + " ldr r6, ._16 + 32\n" + " add r0, r4, r6\n" + " str r5, [r0]\n" + " mov r2, #0x0\n" + " ldr r6, ._16 + 36\n" + " ldr r7, ._16 + 40\n" + " add r5, r4, r7\n" + " ldr r3, ._16 + 44\n" + "._13:\n" + " add r0, r2, r5\n" + " add r1, r2, r3\n" + " ldrb r1, [r1]\n" + " strb r1, [r0]\n" + " add r2, r2, #0x1\n" + " cmp r2, r6\n" + " ble ._13 @cond_branch\n" + " ldr r0, ._16\n" + " ldr r3, ._16 + 48\n" + " ldr r2, ._16 + 52\n" + " add r1, r0, r2\n" + " mov r2, #0xf\n" + "._14:\n" + " ldrh r0, [r3]\n" + " strh r0, [r1]\n" + " add r3, r3, #0x2\n" + " add r1, r1, #0x2\n" + " sub r2, r2, #0x1\n" + " cmp r2, #0\n" + " bge ._14 @cond_branch\n" + " mov r2, #0x0\n" + " ldr r5, ._16 + 56\n" + " ldr r3, ._16 + 60\n" + "._15:\n" + " add r0, r2, r5\n" + " add r1, r2, r3\n" + " ldrb r1, [r1]\n" + " strb r1, [r0]\n" + " add r2, r2, #0x1\n" + " cmp r2, #0x11\n" + " ble ._15 @cond_branch\n" + " ldr r5, ._16 + 64\n" + " add r0, r4, r5\n" + " mov r6, r9\n" + " strb r6, [r0]\n" + " ldr r7, ._16 + 68\n" + " add r0, r4, r7\n" + " mov r1, r8\n" + " strb r1, [r0]\n" + " ldr r2, ._16 + 4\n" + " add r0, r4, r2\n" + " bl debug_sub_80C2BD0\n" + " add r5, r5, #0x4\n" + " add r1, r4, r5\n" + " str r0, [r1]\n" + " pop {r3, r4}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._17:\n" + " .align 2, 0\n" + "._16:\n" + " .word gSaveBlock1\n" + " .word 0x3160\n" + " .word gBerries\n" + " .word 0x361c\n" + " .word gUnknown_Debug_083F7F84\n" + " .word 0x3649\n" + " .word gUnknown_Debug_083F7F90\n" + " .word 0x316c\n" + " .word 0x3170\n" + " .word 0x47f\n" + " .word 0x317c\n" + " .word gSpriteImage_UnusedCherry\n" + " .word gSpritePalette_UnusedCherry\n" + " .word 0x35fc\n" + " .word gSaveBlock1+0x3676\n" + " .word gUnknown_Debug_839B6CE\n" + " .word 0x3688\n" + " .word 0x3689\n" + "\n" + ); +} +#else static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) { const u8 *description1; @@ -1051,9 +1285,110 @@ static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) return checksum; } +#endif + +#if DEBUG +__attribute__((naked)) +void debug_sub_80C2D24() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r8\n" + " push {r7}\n" + " ldr r6, [sp, #0x18]\n" + " ldr r4, [sp, #0x1c]\n" + " mov r8, r4\n" + " ldr r5, ._18\n" + " ldr r7, ._18 + 4\n" + " add r4, r5, r7\n" + " strb r0, [r4]\n" + " ldr r4, ._18 + 8\n" + " add r0, r5, r4\n" + " strb r1, [r0]\n" + " add r7, r7, #0x2\n" + " add r0, r5, r7\n" + " strb r2, [r0]\n" + " ldr r1, ._18 + 12\n" + " add r0, r5, r1\n" + " strb r3, [r0]\n" + " add r4, r4, #0x3\n" + " add r0, r5, r4\n" + " strb r6, [r0]\n" + " add r7, r7, #0x3\n" + " add r0, r5, r7\n" + " mov r1, r8\n" + " strb r1, [r0]\n" + " sub r4, r4, #0x19\n" + " add r0, r5, r4\n" + " bl debug_sub_80C2BD0\n" + " ldr r7, ._18 + 16\n" + " add r5, r5, r7\n" + " str r0, [r5]\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._19:\n" + " .align 2, 0\n" + "._18:\n" + " .word gSaveBlock1\n" + " .word 0x3175\n" + " .word 0x3176\n" + " .word 0x3178\n" + " .word 0x368c\n" + "\n" + ); +} +#endif // due to e-reader scans being particularly volatile to failure, it is a requirement to check for // their integrity here due to scans possibly failing to produce the correct result. +#if DEBUG +__attribute__((naked)) +bool32 IsEnigmaBerryValid() +{ + asm( + " push {r4, lr}\n" + " ldr r4, ._24\n" + " ldr r1, ._24 + 4\n" + " add r0, r4, r1\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " beq ._22 @cond_branch\n" + " ldr r2, ._24 + 8\n" + " add r0, r4, r2\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " beq ._22 @cond_branch\n" + " ldr r1, ._24 + 12\n" + " add r0, r4, r1\n" + " bl debug_sub_80C2BD0\n" + " ldr r2, ._24 + 16\n" + " add r1, r4, r2\n" + " ldr r1, [r1]\n" + " cmp r0, r1\n" + " bne ._22 @cond_branch\n" + " mov r0, #0x1\n" + " b ._23\n" + "._25:\n" + " .align 2, 0\n" + "._24:\n" + " .word gSaveBlock1\n" + " .word 0x3174\n" + " .word 0x316a\n" + " .word 0x3160\n" + " .word 0x368c\n" + "._22:\n" + " mov r0, #0x0\n" + "._23:\n" + " pop {r4}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} +#else bool32 IsEnigmaBerryValid(void) { if (gSaveBlock1.enigmaBerry.berry.stageDuration == 0) @@ -1064,6 +1399,7 @@ bool32 IsEnigmaBerryValid(void) return FALSE; return TRUE; } +#endif const struct Berry *GetBerryInfo(u8 berry) { @@ -1417,6 +1753,177 @@ bool8 PlayerHasBerries(void) return IsBagPocketNonEmpty(BAG_BERRIES); } +#if DEBUG +void debug_sub_80C33FC(u8 *buffer, s32 value, u8 n) +{ + StringAppend(gStringVar4, buffer); + ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEADING_ZEROS, n); + StringAppend(gStringVar4, gStringVar1); +} + +extern const u8 gUnknown_Debug_083F7F9D[]; +extern const u8 gUnknown_Debug_083F7FA2[]; +extern const u8 gUnknown_Debug_083F7FA9[]; +extern const u8 gUnknown_Debug_083F7FB0[]; +extern const u8 gUnknown_Debug_083F7FB7[]; +extern const u8 gUnknown_Debug_083F7FBE[]; +extern const u8 gUnknown_Debug_083F7FC5[]; +extern const u8 gUnknown_Debug_083F7FCC[]; +extern const u8 gUnknown_Debug_083F7FD3[]; +extern const u8 gUnknown_Debug_083F7FD3[]; +extern const u8 gUnknown_Debug_083F7FD3[]; + +#ifdef NONMATCHING +u8* DebugOpenBerryInfo(void) +{ + s32 i; + u8 berryTreeId; + struct BerryTree *berryTree; + + if (GetFieldObjectScriptPointerPlayerFacing() != &S_BerryTree) + return NULL; + + berryTreeId = FieldObjectGetBerryTreeId(gSelectedMapObject); + berryTree = GetBerryTreeInfo(berryTreeId); + + for (i = 0; i < 500; i++) + gStringVar4[i] |= 0xFF; + + debug_sub_80C33FC(gUnknown_Debug_083F7F9D, berryTreeId, 3); + debug_sub_80C33FC(gUnknown_Debug_083F7FA2, berryTree->berry, 2); + debug_sub_80C33FC(gUnknown_Debug_083F7FA9, berryTree->stage, 2); + debug_sub_80C33FC(gUnknown_Debug_083F7FB0, berryTree->secondsUntilNextStage, 5); + debug_sub_80C33FC(gUnknown_Debug_083F7FB7, berryTree->berryYield, 2); + debug_sub_80C33FC(gUnknown_Debug_083F7FBE, berryTree->regrowthCount, 3); + debug_sub_80C33FC(gUnknown_Debug_083F7FC5, berryTree->growthSparkle, 1); + debug_sub_80C33FC(gUnknown_Debug_083F7FCC, berryTree->watered1, 1); + debug_sub_80C33FC(gUnknown_Debug_083F7FD3, berryTree->watered2, 1); + debug_sub_80C33FC(gUnknown_Debug_083F7FD3, berryTree->watered3, 1); + debug_sub_80C33FC(gUnknown_Debug_083F7FD3, berryTree->watered4, 1); + + return gStringVar4; +} +#else +__attribute__((naked)) +void DebugOpenBerryInfo() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " bl GetFieldObjectScriptPointerPlayerFacing\n" + " ldr r1, ._138\n" + " cmp r0, r1\n" + " beq ._136 @cond_branch\n" + " mov r0, #0x0\n" + " b ._137\n" + "._139:\n" + " .align 2, 0\n" + "._138:\n" + " .word S_BerryTree\n" + "._136:\n" + " ldr r0, ._141\n" + " ldrb r0, [r0]\n" + " bl FieldObjectGetBerryTreeId\n" + " lsl r0, r0, #0x18\n" + " lsr r6, r0, #0x18\n" + " add r0, r6, #0\n" + " bl GetBerryTreeInfo\n" + " add r5, r0, #0\n" + " mov r2, #0x0\n" + " ldr r7, ._141 + 4\n" + " ldr r4, ._141 + 8\n" + " mov r3, #0xff\n" + "._140:\n" + " add r1, r2, r4\n" + " ldrb r0, [r1]\n" + " orr r0, r0, r3\n" + " strb r0, [r1]\n" + " add r2, r2, #0x1\n" + " cmp r2, r7\n" + " ble ._140 @cond_branch\n" + " ldr r0, ._141 + 12\n" + " add r1, r6, #0\n" + " mov r2, #0x3\n" + " bl debug_sub_80C33FC\n" + " ldr r0, ._141 + 16\n" + " ldrb r1, [r5]\n" + " mov r2, #0x2\n" + " bl debug_sub_80C33FC\n" + " ldr r0, ._141 + 20\n" + " ldrb r1, [r5, #0x1]\n" + " lsl r1, r1, #0x19\n" + " lsr r1, r1, #0x19\n" + " mov r2, #0x2\n" + " bl debug_sub_80C33FC\n" + " ldr r0, ._141 + 24\n" + " ldrh r1, [r5, #0x2]\n" + " mov r2, #0x5\n" + " bl debug_sub_80C33FC\n" + " ldr r0, ._141 + 28\n" + " ldrb r1, [r5, #0x4]\n" + " mov r2, #0x2\n" + " bl debug_sub_80C33FC\n" + " ldr r0, ._141 + 32\n" + " ldrb r1, [r5, #0x5]\n" + " lsl r1, r1, #0x1c\n" + " lsr r1, r1, #0x1c\n" + " mov r2, #0x3\n" + " bl debug_sub_80C33FC\n" + " ldr r0, ._141 + 36\n" + " ldrb r1, [r5, #0x1]\n" + " lsr r1, r1, #0x7\n" + " mov r2, #0x1\n" + " bl debug_sub_80C33FC\n" + " ldr r0, ._141 + 40\n" + " ldrb r1, [r5, #0x5]\n" + " lsl r1, r1, #0x1b\n" + " lsr r1, r1, #0x1f\n" + " mov r2, #0x1\n" + " bl debug_sub_80C33FC\n" + " ldr r4, ._141 + 44\n" + " ldrb r1, [r5, #0x5]\n" + " lsl r1, r1, #0x1a\n" + " lsr r1, r1, #0x1f\n" + " add r0, r4, #0\n" + " mov r2, #0x1\n" + " bl debug_sub_80C33FC\n" + " ldrb r1, [r5, #0x5]\n" + " lsl r1, r1, #0x19\n" + " lsr r1, r1, #0x1f\n" + " add r0, r4, #0\n" + " mov r2, #0x1\n" + " bl debug_sub_80C33FC\n" + " ldrb r1, [r5, #0x5]\n" + " lsr r1, r1, #0x7\n" + " add r0, r4, #0\n" + " mov r2, #0x1\n" + " bl debug_sub_80C33FC\n" + " ldr r0, ._141 + 8\n" + "._137:\n" + " pop {r4, r5, r6, r7}\n" + " pop {r1}\n" + " bx r1\n" + "._142:\n" + " .align 2, 0\n" + "._141:\n" + " .word gSelectedMapObject\n" + " .word 0x1f3\n" + " .word gStringVar4\n" + " .word gUnknown_Debug_083F7F9D\n" + " .word gUnknown_Debug_083F7FA2\n" + " .word gUnknown_Debug_083F7FA9\n" + " .word gUnknown_Debug_083F7FB0\n" + " .word gUnknown_Debug_083F7FB7\n" + " .word gUnknown_Debug_083F7FBE\n" + " .word gUnknown_Debug_083F7FC5\n" + " .word gUnknown_Debug_083F7FCC\n" + " .word gUnknown_Debug_083F7FD3\n" + "\n" + ); +} +#endif + +#endif + // whenever the player is not within view of the berry tree during its sparkle state, the // sparkle state will be reset. void ResetBerryTreeSparkleFlags(void) @@ -1445,3 +1952,17 @@ void ResetBerryTreeSparkleFlags(void) } } } + +#if DEBUG +static const u8 gUnknown_Debug_083F7F84[] = _("そとから きた きのみ"); +static const u8 gUnknown_Debug_083F7F90[] = _("ただいま かいはつちゅう"); +static const u8 gUnknown_Debug_083F7F9D[] = _("POS:"); +static const u8 gUnknown_Debug_083F7FA2[] = _("\nTYPE:"); +static const u8 gUnknown_Debug_083F7FA9[] = _("\nGROW:"); +static const u8 gUnknown_Debug_083F7FB0[] = _("\nTIME:"); +static const u8 gUnknown_Debug_083F7FB7[] = _("\nFCNT:"); +static const u8 gUnknown_Debug_083F7FBE[] = _("\nSCNT:"); +static const u8 gUnknown_Debug_083F7FC5[] = _("\nHOOK:"); +static const u8 gUnknown_Debug_083F7FCC[] = _("\nWBIT:"); +static const u8 gUnknown_Debug_083F7FD3[] = _(""); +#endif diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c index bb937ea43..ed0ab86ae 100644 --- a/src/field/berry_tag_screen.c +++ b/src/field/berry_tag_screen.c @@ -42,7 +42,7 @@ extern u8 gBerryCheck_Pal[]; extern u8 gUnknown_08E788E4[]; extern u8 gUnknown_08E78A84[]; -static const u8 *const gUnknown_0841192C[] = +const u8 *const gUnknown_0841192C[] = { ContestStatsText_VerySoft, ContestStatsText_Soft, diff --git a/src/field/bike.c b/src/field/bike.c index 8db01b4b4..98966ebd4 100644 --- a/src/field/bike.c +++ b/src/field/bike.c @@ -14,6 +14,11 @@ extern bool8 gBikeCyclingChallenge; extern u8 gBikeCollisions; extern u8 gUnusedBikeCameraAheadPanback; +#if DEBUG +extern u8 gUnknown_020297ED; +u8 debug_sub_805F2B0(u8); +#endif + static void MovePlayerOnMachBike(u8, u16, u16); static u8 GetMachBikeTransition(u8 *); static void MachBikeTransition_FaceDirection(u8); @@ -134,6 +139,13 @@ void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys) static void MovePlayerOnMachBike(u8 direction, u16 newKeys, u16 heldKeys) { +#if DEBUG + if (gUnknown_020297ED && debug_sub_805F2B0(direction)) + { + Bike_SetBikeStill(); + return; + } +#endif sMachBikeTransitions[GetMachBikeTransition(&direction)](direction); } @@ -271,6 +283,14 @@ static void MachBikeTransition_TrySlowDown(u8 var) // the acro bike requires the input handler to be executed before the transition can. static void MovePlayerOnAcroBike(u8 newDirection, u16 newKeys, u16 heldKeys) { +#if DEBUG + if (gUnknown_020297ED && debug_sub_805F2B0(newDirection)) + { + Bike_SetBikeStill(); + return; + } +#endif + sAcroBikeTransitions[CheckMovementInputAcroBike(&newDirection, newKeys, heldKeys)](newDirection); } diff --git a/src/field/choose_party.c b/src/field/choose_party.c index 18d26f007..b2d950e35 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -527,6 +527,107 @@ static void BattleTowerEntryMenuCallback_Exit(u8 taskId) sub_81227FC(taskId); } +#if DEBUG +__attribute__((naked)) +void debug_sub_81381B4() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r9\n" + " mov r6, r8\n" + " push {r6, r7}\n" + " ldr r4, ._189\n" + " add r0, r4, #0\n" + " mov r1, #0x0\n" + " mov r2, #0x60\n" + " bl memset\n" + " mov r7, #0x0\n" + " mov r8, r4\n" + " mov r0, #0x4\n" + " add r0, r0, r8\n" + " mov r9, r0\n" + "._188:\n" + " mov r0, #0x64\n" + " add r1, r7, #0\n" + " mul r1, r1, r0\n" + " ldr r0, ._189 + 4\n" + " add r5, r1, r0\n" + " add r0, r5, #0\n" + " mov r1, #0x41\n" + " bl GetMonData\n" + " lsl r4, r7, #0x5\n" + " mov r1, r8\n" + " add r6, r4, r1\n" + " strh r0, [r6]\n" + " lsl r0, r0, #0x10\n" + " cmp r0, #0\n" + " beq ._187 @cond_branch\n" + " add r0, r5, #0\n" + " mov r1, #0x38\n" + " bl GetMonData\n" + " strb r0, [r6, #0xf]\n" + " add r0, r5, #0\n" + " mov r1, #0x39\n" + " bl GetMonData\n" + " strh r0, [r6, #0x10]\n" + " add r0, r5, #0\n" + " mov r1, #0x3a\n" + " bl GetMonData\n" + " strh r0, [r6, #0x12]\n" + " add r0, r5, #0\n" + " mov r1, #0x37\n" + " bl GetMonData\n" + " mov r1, r8\n" + " add r1, r1, #0x14\n" + " add r1, r4, r1\n" + " str r0, [r1]\n" + " add r0, r5, #0\n" + " mov r1, #0xc\n" + " bl GetMonData\n" + " strh r0, [r6, #0x2]\n" + " add r0, r5, #0\n" + " mov r1, #0x0\n" + " bl GetMonData\n" + " mov r1, r8\n" + " add r1, r1, #0x18\n" + " add r1, r4, r1\n" + " str r0, [r1]\n" + " add r0, r5, #0\n" + " bl GetMonGender\n" + " strb r0, [r6, #0x1c]\n" + " add r4, r4, r9\n" + " add r0, r5, #0\n" + " mov r1, #0x2\n" + " add r2, r4, #0\n" + " bl GetMonData\n" + " add r0, r4, #0\n" + " bl Text_StripExtCtrlCodes\n" + " add r0, r5, #0\n" + " mov r1, #0x3\n" + " bl GetMonData\n" + " strb r0, [r6, #0x1d]\n" + "._187:\n" + " add r0, r7, #1\n" + " lsl r0, r0, #0x18\n" + " lsr r7, r0, #0x18\n" + " cmp r7, #0x2\n" + " bls ._188 @cond_branch\n" + " pop {r3, r4}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._190:\n" + " .align 2, 0\n" + "._189:\n" + " .word gUnknown_02023A00\n" + " .word gPlayerParty+0x12c\n" + "\n" + ); +} +#endif + bool8 SetupLinkMultiBattlePartyMenu(void) { switch (ewram1B000_alt.setupState) diff --git a/src/field/decoration_inventory.c b/src/field/decoration_inventory.c index dd0e972aa..8f7f5eb92 100644 --- a/src/field/decoration_inventory.c +++ b/src/field/decoration_inventory.c @@ -164,3 +164,14 @@ u8 sub_81341D4(void) } return count; } + + +#if DEBUG +void debug_sub_814A3A8(void) +{ + u8 decor; + + for (decor = 0; decor < DECOR_COUNT; decor++) + IsThereStorageSpaceForDecoration(decor); +} +#endif diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c index bf96c724f..48eb64dd7 100644 --- a/src/field/field_control_avatar.c +++ b/src/field/field_control_avatar.c @@ -4,6 +4,7 @@ #include "bike.h" #include "coord_event_weather.h" #include "daycare.h" +#include "debug.h" #include "event_data.h" #include "field_fadetransition.h" #include "field_player_avatar.h" @@ -35,6 +36,7 @@ extern u16 gSpecialVar_Facing; extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; +extern u8 gUnknown_020297ED; static EWRAM_DATA u8 gUnknown_0202E8C0 = 0; static EWRAM_DATA u16 gUnknown_0202E8C2 = 0; @@ -103,7 +105,7 @@ static void sub_8068C30(struct MapHeader *, s8, struct MapPosition *); static bool8 map_warp_consider_2_to_inside(struct MapPosition *, u16, u8); static s8 map_warp_check(struct MapHeader *, u16, u16, u8); static u8 *mapheader_trigger_activate_at(struct MapHeader *, u16, u16, u8); -static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *, u16, u16, u8); +static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *, u16, u16, u8);; void FieldClearPlayerInput(struct FieldInput *input) { @@ -162,6 +164,31 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) input->dpadDirection = DIR_WEST; else if (heldKeys & DPAD_RIGHT) input->dpadDirection = DIR_EAST; +#if DEBUG + if ((heldKeys & R_BUTTON) && input->pressedStartButton) + { + input->input_field_1_2 = TRUE; + input->pressedStartButton = FALSE; + } + if (gUnknown_020297ED) + { + if (heldKeys & R_BUTTON) + { + input->input_field_1_1 = TRUE; + input->input_field_0_6 = FALSE; + input->input_field_0_1 = FALSE; + input->input_field_0_4 = FALSE; + input->input_field_0_5 = FALSE; + if (newKeys & SELECT_BUTTON) + { + input->input_field_1_0 = TRUE; + input->pressedSelectButton = FALSE; + } + } + if (heldKeys & L_BUTTON) + input->input_field_1_3 = TRUE; + } +#endif } int sub_8068024(struct FieldInput *input) @@ -173,10 +200,25 @@ int sub_8068024(struct FieldInput *input) r6 = player_get_direction_lower_nybble(); player_get_pos_to_and_height(&position); r4 = MapGridGetMetatileBehaviorAt(position.x, position.y); - if (CheckTrainers() == TRUE) +#if DEBUG + if (input->input_field_1_3 && dive_warp(&position, r4) == TRUE) + return TRUE; +#endif + + if ( +#if DEBUG + !input->input_field_1_1 && +#endif + CheckTrainers() == TRUE) return TRUE; - if (mapheader_run_first_tag2_script_list_match() == 1) + + if ( +#if DEBUG + !input->input_field_1_1 && +#endif + mapheader_run_first_tag2_script_list_match() == 1) return TRUE; + if (input->pressedBButton && sub_80687A4() == 1) return TRUE; if (input->input_field_0_6) @@ -211,6 +253,21 @@ int sub_8068024(struct FieldInput *input) } if (input->pressedSelectButton && sub_80A6D1C() == TRUE) return TRUE; + +#if DEBUG + if (input->input_field_1_0) + { + debug_sub_80888D8(); + return TRUE; + } + if (input->input_field_1_2) + { + PlaySE(SE_WIN_OPEN); + DebugMenu_8077048(); + return TRUE; + } +#endif + return FALSE; } @@ -810,7 +867,7 @@ static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *mapHea return NULL; } -int dive_warp(struct MapPosition *position, u16 b) +bool8 dive_warp(struct MapPosition *position, u16 b) { if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && sub_805750C(b) == 0) { diff --git a/src/field/field_effect_helpers.c b/src/field/field_effect_helpers.c index 93fc62bd5..c9d337de1 100644 --- a/src/field/field_effect_helpers.c +++ b/src/field/field_effect_helpers.c @@ -29,8 +29,6 @@ static void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *); static void sub_8128174(struct Sprite *); static u32 ShowDisguiseFieldEffect(u8, u8, u8); -const u8 UnusedEggString_8401E28[] = _("タマゴ"); - void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 flag) { struct Sprite *newSprite; diff --git a/src/field/field_fadetransition.c b/src/field/field_fadetransition.c index d68be3b36..21235500a 100644 --- a/src/field/field_fadetransition.c +++ b/src/field/field_fadetransition.c @@ -511,6 +511,22 @@ void sub_80810DC(void) CreateTask(sub_8081050, 10); } +#if DEBUG + +__attribute__((naked)) +void debug_sub_80888D8() +{ + asm("\ + PUSH {LR}\n\ + BL debug_sub_8052E04\n\ + BL sub_8080E88\n\ + BL ScriptContext2_Enable\n\ + POP {R0}\n\ + BX R0"); +} + +#endif + void task0A_fade_n_map_maybe(u8 taskId) { struct Task *task = &gTasks[taskId]; diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 77b4c8b5c..c255d3013 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -1907,6 +1907,9 @@ static u8 gUnknown_030005A4; static u16 gUnknown_030005A6; struct MapObject gMapObjects[16]; +#if DEBUG +u8 gUnknown_Debug_03004BC0[4]; // unknown type +#endif void npc_clear_ids_and_state(struct MapObject *mapObj) { @@ -1917,6 +1920,40 @@ void npc_clear_ids_and_state(struct MapObject *mapObj) mapObj->mapobj_unk_1C = 0xFF; } +#if DEBUG +__attribute__((naked)) +void npcs_clear_ids_and_state() +{ + asm( + " push {r4, r5, lr}\n" + " mov r4, #0x0\n" + " ldr r5, ._2\n" + "._1:\n" + " lsl r0, r4, #0x3\n" + " add r0, r0, r4\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r5\n" + " bl npc_clear_ids_and_state\n" + " add r0, r4, #1\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " cmp r4, #0xf\n" + " bls ._1 @cond_branch\n" + " ldr r1, ._2 + 4\n" + " mov r0, #0x0\n" + " strb r0, [r1]\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._3:\n" + " .align 2, 0\n" + "._2:\n" + " .word gMapObjects\n" + " .word gUnknown_Debug_03004BC0\n" + "\n" + ); +} +#else void npcs_clear_ids_and_state(void) { u8 i; @@ -1924,6 +1961,7 @@ void npcs_clear_ids_and_state(void) for (i = 0; i < 16; i++) npc_clear_ids_and_state(&gMapObjects[i]); } +#endif void sub_805AA98(void) { @@ -2017,6 +2055,176 @@ u8 GetFieldObjectIdByLocalId(u8 localId) return 16; } +#if DEBUG +__attribute__((naked)) +u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r9\n" + " mov r6, r8\n" + " push {r6, r7}\n" + " add sp, sp, #0xfffffffc\n" + " add r5, r0, #0\n" + " lsl r1, r1, #0x18\n" + " lsr r6, r1, #0x18\n" + " lsl r2, r2, #0x18\n" + " lsr r7, r2, #0x18\n" + " ldrb r0, [r5]\n" + " add r1, r6, #0\n" + " add r2, r7, #0\n" + " mov r3, sp\n" + " bl GetAvailableFieldObjectSlot\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " beq ._35 @cond_branch\n" + " mov r0, #0x10\n" + " b ._36\n" + "._35:\n" + " mov r0, sp\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x3\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._40\n" + " add r4, r0, r1\n" + " add r0, r4, #0\n" + " bl npc_clear_ids_and_state\n" + " ldrh r3, [r5, #0x4]\n" + " add r3, r3, #0x7\n" + " lsl r3, r3, #0x10\n" + " lsr r3, r3, #0x10\n" + " ldrh r2, [r5, #0x6]\n" + " add r2, r2, #0x7\n" + " lsl r2, r2, #0x10\n" + " lsr r2, r2, #0x10\n" + " ldrb r0, [r4]\n" + " mov r1, #0x1\n" + " orr r0, r0, r1\n" + " mov r1, #0x4\n" + " orr r0, r0, r1\n" + " strb r0, [r4]\n" + " ldrb r0, [r5, #0x1]\n" + " strb r0, [r4, #0x5]\n" + " ldrb r0, [r5, #0x9]\n" + " strb r0, [r4, #0x6]\n" + " ldrb r0, [r5]\n" + " strb r0, [r4, #0x8]\n" + " strb r6, [r4, #0x9]\n" + " strb r7, [r4, #0xa]\n" + " strh r3, [r4, #0xc]\n" + " strh r2, [r4, #0xe]\n" + " strh r3, [r4, #0x10]\n" + " strh r2, [r4, #0x12]\n" + " strh r3, [r4, #0x14]\n" + " strh r2, [r4, #0x16]\n" + " ldrb r0, [r5, #0x8]\n" + " mov r7, #0xf\n" + " add r1, r7, #0\n" + " and r1, r1, r0\n" + " ldrb r2, [r4, #0xb]\n" + " mov r0, #0x10\n" + " neg r0, r0\n" + " mov r8, r0\n" + " and r0, r0, r2\n" + " orr r0, r0, r1\n" + " strb r0, [r4, #0xb]\n" + " ldrb r1, [r5, #0x8]\n" + " lsl r1, r1, #0x4\n" + " and r0, r0, r7\n" + " orr r0, r0, r1\n" + " strb r0, [r4, #0xb]\n" + " ldrb r1, [r5, #0xa]\n" + " lsl r1, r1, #0x1c\n" + " mov r0, #0xf\n" + " mov r9, r0\n" + " lsr r1, r1, #0x1c\n" + " ldrb r2, [r4, #0x19]\n" + " mov r0, r8\n" + " and r0, r0, r2\n" + " orr r0, r0, r1\n" + " strb r0, [r4, #0x19]\n" + " ldrb r1, [r5, #0xa]\n" + " lsr r1, r1, #0x4\n" + " lsl r1, r1, #0x4\n" + " and r0, r0, r7\n" + " orr r0, r0, r1\n" + " strb r0, [r4, #0x19]\n" + " ldrh r0, [r5, #0xc]\n" + " strb r0, [r4, #0x7]\n" + " ldrh r0, [r5, #0xe]\n" + " strb r0, [r4, #0x1d]\n" + " ldr r1, ._40 + 4\n" + " ldrb r0, [r5, #0x9]\n" + " add r0, r0, r1\n" + " ldrb r1, [r0]\n" + " add r0, r4, #0\n" + " add r0, r0, #0x20\n" + " strb r1, [r0]\n" + " ldrb r1, [r0]\n" + " add r0, r4, #0\n" + " bl FieldObjectSetDirection\n" + " add r0, r4, #0\n" + " bl FieldObjectHandleDynamicGraphicsId\n" + " ldr r1, ._40 + 8\n" + " ldrb r0, [r4, #0x6]\n" + " add r0, r0, r1\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " beq ._39 @cond_branch\n" + " ldrb r2, [r4, #0x19]\n" + " add r0, r7, #0\n" + " and r0, r0, r2\n" + " cmp r0, #0\n" + " bne ._38 @cond_branch\n" + " lsl r0, r2, #0x1c\n" + " lsr r0, r0, #0x1c\n" + " add r0, r0, #0x1\n" + " mov r1, r9\n" + " and r0, r0, r1\n" + " mov r1, r8\n" + " and r1, r1, r2\n" + " orr r1, r1, r0\n" + " strb r1, [r4, #0x19]\n" + "._38:\n" + " ldrb r2, [r4, #0x19]\n" + " mov r0, #0xf0\n" + " and r0, r0, r2\n" + " cmp r0, #0\n" + " bne ._39 @cond_branch\n" + " lsr r1, r2, #0x4\n" + " add r1, r1, #0x1\n" + " lsl r1, r1, #0x4\n" + " add r0, r7, #0\n" + " and r0, r0, r2\n" + " orr r0, r0, r1\n" + " strb r0, [r4, #0x19]\n" + "._39:\n" + " ldr r1, ._40 + 12\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " mov r0, sp\n" + " ldrb r0, [r0]\n" + "._36:\n" + " add sp, sp, #0x4\n" + " pop {r3, r4}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " pop {r4, r5, r6, r7}\n" + " pop {r1}\n" + " bx r1\n" + "._41:\n" + " .align 2, 0\n" + "._40:\n" + " .word gMapObjects\n" + " .word gUnknown_0836DC09\n" + " .word gUnknown_0836DBBC\n" + " .word gUnknown_Debug_03004BC0\n" + "\n" + ); +} +#else #ifdef NONMATCHING u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) { @@ -2227,6 +2435,7 @@ _0805ADD8: .4byte gUnknown_0836DBBC\n\ .syntax divided\n"); } #endif +#endif u8 sub_805ADDC(u8 localId) { @@ -2266,11 +2475,38 @@ u8 GetAvailableFieldObjectSlot(u16 a, u8 b, u8 c, u8 *d) return 0; } +#if DEBUG +__attribute__((naked)) +void RemoveFieldObject(struct MapObject *mapObject) +{ + asm( + " push {lr}\n" + " ldrb r2, [r0]\n" + " mov r1, #0x2\n" + " neg r1, r1\n" + " and r1, r1, r2\n" + " strb r1, [r0]\n" + " bl RemoveFieldObjectInternal\n" + " ldr r1, ._72\n" + " ldrb r0, [r1]\n" + " sub r0, r0, #0x1\n" + " strb r0, [r1]\n" + " pop {r0}\n" + " bx r0\n" + "._73:\n" + " .align 2, 0\n" + "._72:\n" + " .word gUnknown_Debug_03004BC0\n" + "\n" + ); +} +#else void RemoveFieldObject(struct MapObject *mapObject) { mapObject->active = FALSE; RemoveFieldObjectInternal(mapObject); } +#endif void RemoveFieldObjectByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { @@ -2303,6 +2539,226 @@ void npc_hide_all_but_player(void) } } +#if DEBUG +__attribute__((naked)) +u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, u8 c, u8 d, s16 e, s16 f) +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add r7, r1, #0\n" + " add r1, r2, #0\n" + " add r2, r3, #0\n" + " ldr r3, [sp, #0x20]\n" + " ldr r4, [sp, #0x24]\n" + " lsl r1, r1, #0x18\n" + " lsr r1, r1, #0x18\n" + " lsl r2, r2, #0x18\n" + " lsr r2, r2, #0x18\n" + " lsl r3, r3, #0x10\n" + " lsr r3, r3, #0x10\n" + " mov r9, r3\n" + " lsl r4, r4, #0x10\n" + " lsr r4, r4, #0x10\n" + " mov sl, r4\n" + " bl InitFieldObjectStateFromTemplate\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov r8, r0\n" + " cmp r0, #0x10\n" + " bne ._83 @cond_branch\n" + " mov r0, #0x10\n" + " b ._92\n" + "._83:\n" + " mov r0, r8\n" + " lsl r4, r0, #0x3\n" + " add r0, r4, r0\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._87\n" + " add r5, r0, r1\n" + " ldrb r0, [r5, #0x5]\n" + " bl GetFieldObjectGraphicsInfo\n" + " add r6, r0, #0\n" + " ldrb r1, [r6, #0xc]\n" + " mov r0, #0xf\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._85 @cond_branch\n" + " ldrh r0, [r6, #0x2]\n" + " lsl r1, r1, #0x1c\n" + " lsr r1, r1, #0x1c\n" + " bl npc_load_two_palettes__no_record\n" + " b ._89\n" + "._88:\n" + " .align 2, 0\n" + "._87:\n" + " .word gMapObjects\n" + "._85:\n" + " cmp r0, #0xa\n" + " bne ._89 @cond_branch\n" + " ldrh r0, [r6, #0x2]\n" + " lsl r1, r1, #0x1c\n" + " lsr r1, r1, #0x1c\n" + " bl npc_load_two_palettes__and_record\n" + "._89:\n" + " ldrb r0, [r5, #0x6]\n" + " cmp r0, #0x4c\n" + " bne ._90 @cond_branch\n" + " ldrb r0, [r5, #0x1]\n" + " mov r1, #0x20\n" + " orr r0, r0, r1\n" + " strb r0, [r5, #0x1]\n" + "._90:\n" + " ldr r1, ._93\n" + " add r0, r1, #0\n" + " strh r0, [r7, #0x2]\n" + " add r0, r7, #0\n" + " mov r1, #0x0\n" + " mov r2, #0x0\n" + " mov r3, #0x0\n" + " bl CreateSprite\n" + " lsl r0, r0, #0x18\n" + " lsr r7, r0, #0x18\n" + " cmp r7, #0x40\n" + " bne ._91 @cond_branch\n" + " ldr r1, ._93 + 4\n" + " ldrb r0, [r1]\n" + " sub r0, r0, #0x1\n" + " strb r0, [r1]\n" + " ldr r0, ._93 + 8\n" + " mov r2, r8\n" + " add r1, r4, r2\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r0\n" + " ldrb r2, [r1]\n" + " mov r0, #0x2\n" + " neg r0, r0\n" + " and r0, r0, r2\n" + " strb r0, [r1]\n" + " mov r0, #0x10\n" + " b ._92\n" + "._94:\n" + " .align 2, 0\n" + "._93:\n" + " .word 0xffff\n" + " .word gUnknown_Debug_03004BC0\n" + " .word gMapObjects\n" + "._91:\n" + " lsl r0, r7, #0x4\n" + " add r0, r0, r7\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._96\n" + " add r4, r0, r1\n" + " mov r1, r9\n" + " lsl r0, r1, #0x10\n" + " asr r0, r0, #0x10\n" + " ldrh r2, [r5, #0x10]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x10\n" + " asr r0, r0, #0x10\n" + " mov r2, sl\n" + " lsl r1, r2, #0x10\n" + " asr r1, r1, #0x10\n" + " ldrh r2, [r5, #0x12]\n" + " add r1, r1, r2\n" + " lsl r1, r1, #0x10\n" + " asr r1, r1, #0x10\n" + " add r2, r4, #0\n" + " add r2, r2, #0x20\n" + " add r3, r4, #0\n" + " add r3, r3, #0x22\n" + " bl sub_8060388\n" + " ldrh r0, [r6, #0x8]\n" + " lsl r0, r0, #0x10\n" + " asr r0, r0, #0x11\n" + " neg r0, r0\n" + " add r1, r4, #0\n" + " add r1, r1, #0x28\n" + " strb r0, [r1]\n" + " ldrh r0, [r6, #0xa]\n" + " lsl r0, r0, #0x10\n" + " asr r0, r0, #0x11\n" + " neg r0, r0\n" + " add r2, r4, #0\n" + " add r2, r2, #0x29\n" + " strb r0, [r2]\n" + " ldrh r0, [r4, #0x20]\n" + " add r0, r0, #0x8\n" + " strh r0, [r4, #0x20]\n" + " ldrh r1, [r4, #0x22]\n" + " add r1, r1, #0x10\n" + " mov r0, #0x0\n" + " ldsb r0, [r2, r0]\n" + " add r0, r0, r1\n" + " strh r0, [r4, #0x22]\n" + " ldrb r1, [r6, #0xc]\n" + " lsl r1, r1, #0x1c\n" + " lsr r1, r1, #0x18\n" + " ldrb r2, [r4, #0x5]\n" + " mov r0, #0xf\n" + " and r0, r0, r2\n" + " orr r0, r0, r1\n" + " strb r0, [r4, #0x5]\n" + " add r2, r4, #0\n" + " add r2, r2, #0x3e\n" + " ldrb r0, [r2]\n" + " mov r1, #0x2\n" + " orr r0, r0, r1\n" + " strb r0, [r2]\n" + " mov r0, r8\n" + " strh r0, [r4, #0x2e]\n" + " strb r7, [r5, #0x4]\n" + " ldrb r1, [r6, #0xc]\n" + " lsl r1, r1, #0x19\n" + " lsr r1, r1, #0x1f\n" + " lsl r1, r1, #0x4\n" + " ldrb r2, [r5, #0x1]\n" + " mov r0, #0x11\n" + " neg r0, r0\n" + " and r0, r0, r2\n" + " orr r0, r0, r1\n" + " strb r0, [r5, #0x1]\n" + " lsl r0, r0, #0x1b\n" + " cmp r0, #0\n" + " blt ._95 @cond_branch\n" + " ldrb r0, [r5, #0x18]\n" + " lsl r0, r0, #0x1c\n" + " lsr r0, r0, #0x1c\n" + " bl FieldObjectDirectionToImageAnimId\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x18\n" + " lsr r1, r1, #0x18\n" + " add r0, r4, #0\n" + " bl StartSpriteAnim\n" + "._95:\n" + " ldrb r0, [r5, #0xb]\n" + " lsr r0, r0, #0x4\n" + " add r1, r4, #0\n" + " mov r2, #0x1\n" + " bl SetObjectSubpriorityByZCoord\n" + " add r0, r5, #0\n" + " add r1, r4, #0\n" + " bl sub_80634D0\n" + " mov r0, r8\n" + "._92:\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r1}\n" + " bx r1\n" + "._97:\n" + " .align 2, 0\n" + "._96:\n" + " .word gSprites\n" + "\n" + ); +} +#else u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, u8 c, u8 d, s16 e, s16 f) { u8 mapObjectId; @@ -2352,6 +2808,7 @@ u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate * sub_80634D0(mapObject, sprite); return mapObjectId; } +#endif u8 SpawnFieldObject(struct MapObjectTemplate *mapObjTemplate, u8 b, u8 c, s16 d, s16 e) { @@ -2574,6 +3031,66 @@ void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject) void sub_805B75C(u8, s16, s16); +#if DEBUG +__attribute__((naked)) +void sub_805B710(u16 u161, u16 u162) +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r8\n" + " push {r7}\n" + " add r4, r0, #0\n" + " add r5, r1, #0\n" + " lsl r4, r4, #0x10\n" + " lsr r4, r4, #0x10\n" + " lsl r5, r5, #0x10\n" + " lsr r5, r5, #0x10\n" + " ldr r6, ._153\n" + " mov r0, #0x0\n" + " strb r0, [r6]\n" + " bl ClearPlayerAvatarInfo\n" + " mov r7, #0x0\n" + " ldr r0, ._153 + 4\n" + " mov r8, r0\n" + " lsl r4, r4, #0x10\n" + " lsl r5, r5, #0x10\n" + "._152:\n" + " lsl r0, r7, #0x3\n" + " add r0, r0, r7\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r8\n" + " ldrb r0, [r0]\n" + " lsl r0, r0, #0x1f\n" + " cmp r0, #0\n" + " beq ._151 @cond_branch\n" + " add r0, r7, #0\n" + " asr r1, r4, #0x10\n" + " asr r2, r5, #0x10\n" + " bl sub_805B75C\n" + " ldrb r0, [r6]\n" + " add r0, r0, #0x1\n" + " strb r0, [r6]\n" + "._151:\n" + " add r0, r7, #1\n" + " lsl r0, r0, #0x18\n" + " lsr r7, r0, #0x18\n" + " cmp r7, #0xf\n" + " bls ._152 @cond_branch\n" + " bl sub_805AAB0\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._154:\n" + " .align 2, 0\n" + "._153:\n" + " .word gUnknown_Debug_03004BC0\n" + " .word gMapObjects\n" + "\n" + ); +} +#else void sub_805B710(u16 a, u16 b) { u8 i; @@ -2586,6 +3103,7 @@ void sub_805B710(u16 a, u16 b) } sub_805AAB0(); } +#endif extern void SetPlayerAvatarFieldObjectIdAndObjectId(u8, u8); extern void sub_805B914(struct MapObject *); diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c index ba45e506d..c382db19f 100644 --- a/src/field/field_player_avatar.c +++ b/src/field/field_player_avatar.c @@ -32,9 +32,9 @@ static void npc_clear_strange_bits(struct MapObject *a); static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c); static void PlayerAllowForcedMovementIfMovingSameDirection(void); static bool8 TryDoMetatileBehaviorForcedMovement(void); -static u8 GetForcedMovementByMetatileBehavior(void); +/*static*/ u8 GetForcedMovementByMetatileBehavior(void); static void MovePlayerNotOnBike(u8 a, u16 b); -static u8 CheckMovementInputNotOnBike(u8 a); +/*static*/ u8 CheckMovementInputNotOnBike(u8 a); static u8 CheckForPlayerAvatarCollision(u8 a); static u8 sub_8058EF0(s16 a, s16 b, u8 c); static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c); @@ -260,12 +260,59 @@ static void PlayerAllowForcedMovementIfMovingSameDirection(void) gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; } +#if DEBUG +__attribute__((naked)) +u8 TryDoMetatileBehaviorForcedMovement() +{ + asm( + " push {r4, lr}\n" + " ldr r0, ._27\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " beq ._25 @cond_branch\n" + " ldr r0, ._27 + 4\n" + " ldrh r1, [r0, #0x2c]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._25 @cond_branch\n" + " mov r0, #0x0\n" + " b ._26\n" + "._28:\n" + " .align 2, 0\n" + "._27:\n" + " .word gUnknown_020297ED\n" + " .word gMain\n" + "._25:\n" + " ldr r4, ._29\n" + " bl GetForcedMovementByMetatileBehavior\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x16\n" + " add r0, r0, r4\n" + " ldr r0, [r0]\n" + " bl _call_via_r0\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + "._26:\n" + " pop {r4}\n" + " pop {r1}\n" + " bx r1\n" + "._30:\n" + " .align 2, 0\n" + "._29:\n" + " .word gUnknown_0830FBA0\n" + "\n" + ); +} +#else static bool8 TryDoMetatileBehaviorForcedMovement(void) { return gUnknown_0830FBA0[GetForcedMovementByMetatileBehavior()](); } +#endif -static u8 GetForcedMovementByMetatileBehavior(void) +/*static*/ u8 GetForcedMovementByMetatileBehavior(void) { u8 i; @@ -436,12 +483,57 @@ bool8 ForcedMovement_MuddySlope(void) } } +#if DEBUG +__attribute__((naked)) +void MovePlayerNotOnBike(u8 u81, u16 u161) +{ + asm( + " push {r4, r5, r6, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r2, r0, #0x18\n" + " add r5, r2, #0\n" + " lsl r1, r1, #0x10\n" + " lsr r6, r1, #0x10\n" + " ldr r0, ._84\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " beq ._82 @cond_branch\n" + " add r0, r2, #0\n" + " bl debug_sub_805F2B0\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._83 @cond_branch\n" + "._82:\n" + " ldr r4, ._84 + 4\n" + " add r0, r5, #0\n" + " bl CheckMovementInputNotOnBike\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x16\n" + " add r0, r0, r4\n" + " ldr r2, [r0]\n" + " add r0, r5, #0\n" + " add r1, r6, #0\n" + " bl _call_via_r2\n" + "._83:\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._85:\n" + " .align 2, 0\n" + "._84:\n" + " .word gUnknown_020297ED\n" + " .word gUnknown_0830FBEC\n" + "\n" + ); +} +#else static void MovePlayerNotOnBike(u8 direction, u16 heldKeys) { gUnknown_0830FBEC[CheckMovementInputNotOnBike(direction)](direction, heldKeys); } +#endif -static u8 CheckMovementInputNotOnBike(u8 direction) +/*static*/ u8 CheckMovementInputNotOnBike(u8 direction) { if (direction == DIR_NONE) { @@ -1763,3 +1855,98 @@ static void sub_805A954(void) if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 1, playerSprite->pos2.y); } + +#if DEBUG +__attribute__((naked)) +void debug_sub_805F2B0() +{ + asm( + " push {lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r2, r0, #0x18\n" + " ldr r0, ._422\n" + " ldrh r1, [r0, #0x2c]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._420 @cond_branch\n" + " mov r0, #0x0\n" + " b ._421\n" + "._423:\n" + " .align 2, 0\n" + "._422:\n" + " .word gMain\n" + "._420:\n" + " add r0, r2, #0\n" + " bl debug_sub_805F2DC\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + "._421:\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_805F2DC() +{ + asm( + " push {r4, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " cmp r4, #0\n" + " bne ._424 @cond_branch\n" + " ldr r2, ._426\n" + " ldr r0, ._426 + 4\n" + " ldrb r1, [r0, #0x5]\n" + " lsl r0, r1, #0x3\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r2\n" + " ldrb r0, [r0, #0x18]\n" + " lsr r0, r0, #0x4\n" + " bl PlayerFaceDirection\n" + " b ._430\n" + "._427:\n" + " .align 2, 0\n" + "._426:\n" + " .word gMapObjects\n" + " .word gPlayerAvatar\n" + "._424:\n" + " ldr r2, ._431\n" + " ldr r0, ._431 + 4\n" + " ldrb r1, [r0, #0x5]\n" + " lsl r0, r1, #0x3\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r2\n" + " ldrb r0, [r0, #0x1]\n" + " lsr r0, r0, #0x7\n" + " cmp r0, #0\n" + " beq ._429 @cond_branch\n" + " add r0, r4, #0\n" + " bl CanCameraMoveInDirection\n" + " cmp r0, #0\n" + " bne ._429 @cond_branch\n" + " add r0, r4, #0\n" + " bl PlayerOnBikeCollide\n" + " b ._430\n" + "._432:\n" + " .align 2, 0\n" + "._431:\n" + " .word gMapObjects\n" + " .word gPlayerAvatar\n" + "._429:\n" + " add r0, r4, #0\n" + " bl PlayerGoSpeed4\n" + "._430:\n" + " mov r0, #0x1\n" + " pop {r4}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} +#endif diff --git a/src/field/field_weather.c b/src/field/field_weather.c index 7beb1b440..c411bf20b 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -43,7 +43,10 @@ struct WeatherCallbacks EWRAM_DATA struct Weather gWeather = {0}; EWRAM_DATA u8 gFieldEffectPaletteGammaTypes[32] = {0}; -EWRAM_DATA u16 gUnknown_0202FF58 = {0}; +EWRAM_DATA u16 gUnknown_0202FF58 = 0; +#if DEBUG +EWRAM_DATA u16 gUnknown_Debug_20301FE = 0; +#endif static const u8 *sPaletteGammaTypes; @@ -210,6 +213,45 @@ static const u8 sBasePaletteGammaTypes[32] = GAMMA_NORMAL, }; +#if DEBUG + +const u8 gDebugText_Weather_0[] = _("なし "); +const u8 gDebugText_Weather_1[] = _("はれ "); +const u8 gDebugText_Weather_2[] = _("はれ2 "); +const u8 gDebugText_Weather_3[] = _("あめ "); +const u8 gDebugText_Weather_4[] = _("ゆき "); +const u8 gDebugText_Weather_5[] = _("かみなり "); +const u8 gDebugText_Weather_6[] = _("きり "); +const u8 gDebugText_Weather_7[] = _("かざんばい"); +const u8 gDebugText_Weather_8[] = _("すなあらし"); +const u8 gDebugText_Weather_9[] = _("きり2 "); +const u8 gDebugText_Weather_10[] = _("かいてい "); +const u8 gDebugText_Weather_11[] = _("くもり "); +const u8 gDebugText_Weather_12[] = _("はれ3 "); +const u8 gDebugText_Weather_13[] = _("おおあめ"); +const u8 gDebugText_Weather_14[] = _("かいてい2"); + +const u8 *const gDebugText_Weather[] = +{ + gDebugText_Weather_0, + gDebugText_Weather_1, + gDebugText_Weather_2, + gDebugText_Weather_3, + gDebugText_Weather_4, + gDebugText_Weather_5, + gDebugText_Weather_6, + gDebugText_Weather_7, + gDebugText_Weather_8, + gDebugText_Weather_9, + gDebugText_Weather_10, + gDebugText_Weather_11, + gDebugText_Weather_12, + gDebugText_Weather_13, + gDebugText_Weather_14, +}; + +#endif + const u16 gUnknown_083970E8[] = INCBIN_U16("graphics/weather/0.gbapal"); void StartWeather(void) @@ -1213,3 +1255,145 @@ void ResetPreservedPalettesInWeather(void) { sPaletteGammaTypes = sBasePaletteGammaTypes; } + +#if DEBUG + +__attribute__((naked)) +u8 debug_sub_8085564(void) +{ + asm("\ + push {lr}\n\ + mov r2, #0x0\n\ + ldr r0, ._375\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._370 @cond_branch\n\ + ldr r1, ._375 + 4\n\ + ldrb r0, [r1]\n\ + add r0, r0, #0x1\n\ + strb r0, [r1]\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0xf\n\ + bne ._371 @cond_branch\n\ + strb r2, [r1]\n\ +._371:\n\ + mov r2, #0x1\n\ +._370:\n\ + ldr r0, ._375\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._372 @cond_branch\n\ + ldr r1, ._375 + 4\n\ + ldrb r0, [r1]\n\ + cmp r0, #0\n\ + beq ._373 @cond_branch\n\ + sub r0, r0, #0x1\n\ + b ._374\n\ +._376:\n\ + .align 2, 0\n\ +._375:\n\ + .word gMain\n\ + .word gUnknown_Debug_20301FE\n\ +._373:\n\ + mov r0, #0xe\n\ +._374:\n\ + strb r0, [r1]\n\ + mov r2, #0x1\n\ +._372:\n\ + cmp r2, #0\n\ + beq ._377 @cond_branch\n\ + mov r0, #0x16\n\ + mov r1, #0x1\n\ + mov r2, #0x1c\n\ + mov r3, #0x2\n\ + bl Menu_BlankWindowRect\n\ + ldr r1, ._380\n\ + ldr r0, ._380 + 4\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x17\n\ + mov r2, #0x1\n\ + bl Menu_PrintText\n\ +._377:\n\ + ldr r0, ._380 + 8\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._378 @cond_branch\n\ + mov r0, #0x0\n\ + b ._379\n\ +._381:\n\ + .align 2, 0\n\ +._380:\n\ + .word gDebugText_Weather\n\ + .word gUnknown_Debug_20301FE\n\ + .word gMain\n\ +._378:\n\ + ldr r0, ._382\n\ + ldrb r0, [r0]\n\ + bl ChangeWeather\n\ + bl CloseMenu\n\ + mov r0, #0x1\n\ +._379:\n\ + pop {r1}\n\ + bx r1\n\ +._383:\n\ + .align 2, 0\n\ +._382:\n\ + .word gUnknown_Debug_20301FE"); +} + +__attribute__((naked)) +u8 debug_sub_808560C(void) +{ + asm("\ + push {r4, lr}\n\ + ldr r4, ._384\n\ + ldr r0, ._384 + 4\n\ + mov r1, #0xda\n\ + lsl r1, r1, #0x3\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + strb r0, [r4]\n\ + bl Menu_EraseScreen\n\ + mov r0, #0x16\n\ + mov r1, #0x1\n\ + mov r2, #0x1c\n\ + mov r3, #0x2\n\ + bl Menu_BlankWindowRect\n\ + ldr r1, ._384 + 8\n\ + ldrb r0, [r4]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x17\n\ + mov r2, #0x1\n\ + bl Menu_PrintText\n\ + ldr r1, ._384 + 12\n\ + ldr r0, ._384 + 16\n\ + str r0, [r1]\n\ + mov r0, #0x0\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ +._385:\n\ + .align 2, 0\n\ +._384:\n\ + .word gUnknown_Debug_20301FE\n\ + .word gWeather\n\ + .word gDebugText_Weather\n\ + .word gMenuCallback\n\ + .word debug_sub_8085564+1"); +} + +#endif diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c index 513107729..522fb01d6 100644 --- a/src/field/fldeff_cut.c +++ b/src/field/fldeff_cut.c @@ -72,6 +72,115 @@ static const struct SpriteTemplate gSpriteTemplate_CutGrass = .callback = sub_80A2A48, }; +#if DEBUG +__attribute__((naked)) +void debug_sub_80AFEE4() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r8\n" + " push {r7}\n" + " mov r0, #0x52\n" + " bl npc_before_player_of_type\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x1\n" + " bne ._1 @cond_branch\n" + " ldr r1, ._3\n" + " mov r0, #0x0\n" + " strb r0, [r1]\n" + " bl sub_80A2634\n" + " b ._8\n" + "._4:\n" + " .align 2, 0\n" + "._3:\n" + " .word gLastFieldPokeMenuOpened\n" + "._1:\n" + " ldr r4, ._9\n" + " add r1, r4, #2\n" + " add r0, r4, #0\n" + " bl PlayerGetDestCoords\n" + " mov r7, #0x0\n" + " mov r8, r4\n" + "._12:\n" + " ldr r1, ._9 + 4\n" + " add r0, r7, r1\n" + " mov r2, r8\n" + " ldrh r2, [r2, #0x2]\n" + " add r0, r0, r2\n" + " mov r6, #0x0\n" + " lsl r0, r0, #0x10\n" + " asr r5, r0, #0x10\n" + "._11:\n" + " ldr r1, ._9 + 4\n" + " add r0, r6, r1\n" + " mov r2, r8\n" + " ldrh r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x10\n" + " asr r4, r0, #0x10\n" + " add r0, r4, #0\n" + " add r1, r5, #0\n" + " bl MapGridGetZCoordAt\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov r2, r8\n" + " mov r1, #0x4\n" + " ldsb r1, [r2, r1]\n" + " cmp r0, r1\n" + " bne ._7 @cond_branch\n" + " add r0, r4, #0\n" + " add r1, r5, #0\n" + " bl MapGridGetMetatileBehaviorAt\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " add r0, r4, #0\n" + " bl MetatileBehavior_IsPokeGrass\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x1\n" + " beq ._6 @cond_branch\n" + " add r0, r4, #0\n" + " bl MetatileBehavior_IsAshGrass\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x1\n" + " bne ._7 @cond_branch\n" + "._6:\n" + " ldr r1, ._9 + 8\n" + " mov r0, #0x0\n" + " strb r0, [r1]\n" + " bl sub_80A25E8\n" + " b ._8\n" + "._10:\n" + " .align 2, 0\n" + "._9:\n" + " .word gUnknown_0203923C\n" + " .word 0xffff\n" + " .word gLastFieldPokeMenuOpened\n" + "._7:\n" + " add r0, r6, #1\n" + " lsl r0, r0, #0x18\n" + " lsr r6, r0, #0x18\n" + " cmp r6, #0x2\n" + " bls ._11 @cond_branch\n" + " add r0, r7, #1\n" + " lsl r0, r0, #0x18\n" + " lsr r7, r0, #0x18\n" + " cmp r7, #0x2\n" + " bls ._12 @cond_branch\n" + " bl ScriptContext2_Disable\n" + "._8:\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} +#endif + bool8 SetUpFieldMove_Cut(void) { s16 x, y; diff --git a/src/field/fldeff_flash.c b/src/field/fldeff_flash.c index 22f170184..d8f70200c 100644 --- a/src/field/fldeff_flash.c +++ b/src/field/fldeff_flash.c @@ -71,6 +71,36 @@ static const u16 gUnknown_083F809C[] = INCBIN_U16("graphics/misc/83F809C.gbapal" static const u16 gCaveTransitionTilemap[] = INCBIN_U16("graphics/misc/cave_transition_map.bin.lz"); static const u8 gCaveTransitionTiles[] = INCBIN_U8("graphics/misc/cave_transition.4bpp.lz"); +#if DEBUG +__attribute__((naked)) +void debug_sub_8122080(void) +{ + asm("\ + push {lr}\n\ + ldr r0, ._4\n\ + ldrb r0, [r0, #0x15]\n\ + cmp r0, #0x1\n\ + bne ._2 @cond_branch\n\ + ldr r0, ._4 + 4\n\ + bl FlagGet\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._2 @cond_branch\n\ + bl sub_810CBFC\n\ + b ._3\n\ +._5:\n\ + .align 2, 0\n\ +._4:\n\ + .word gMapHeader\n\ + .word 0x828\n\ +._2:\n\ + bl ScriptContext2_Disable\n\ +._3:\n\ + pop {r0}\n\ + bx r0"); +} +#endif + bool8 SetUpFieldMove_Flash(void) { if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH)) diff --git a/src/field/fldeff_secretpower.c b/src/field/fldeff_secretpower.c index bf8e98403..3f539fc6e 100644 --- a/src/field/fldeff_secretpower.c +++ b/src/field/fldeff_secretpower.c @@ -243,6 +243,102 @@ void sub_80C6280(void) } } +#if DEBUG + +__attribute__((naked)) +void debug_sub_80D93F4() +{ + asm("\ + push {r4, lr}\n\ + bl sub_80BB63C\n\ + ldr r0, ._98\n\ + ldrh r0, [r0]\n\ + cmp r0, #0x1\n\ + beq ._95 @cond_branch\n\ + bl player_get_direction_lower_nybble\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x2\n\ + beq ._96 @cond_branch\n\ +._95:\n\ + bl ScriptContext2_Disable\n\ + b ._109\n\ +._99:\n\ + .align 2, 0\n\ +._98:\n\ + .word gSpecialVar_Result\n\ +._96:\n\ + ldr r4, ._102\n\ + add r1, r4, #2\n\ + add r0, r4, #0\n\ + bl GetXYCoordsOneStepInFrontOfPlayer\n\ + mov r1, #0x0\n\ + ldsh r0, [r4, r1]\n\ + mov r2, #0x2\n\ + ldsh r1, [r4, r2]\n\ + bl MapGridGetMetatileBehaviorAt\n\ + lsl r0, r0, #0x18\n\ + lsr r4, r0, #0x18\n\ + add r0, r4, #0\n\ + bl MetatileBehavior_IsSecretBaseCave\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + bne ._100 @cond_branch\n\ + bl sub_80C6264\n\ + ldr r1, ._102 + 4\n\ + mov r0, #0x0\n\ + strb r0, [r1]\n\ + bl sub_80C639C\n\ + b ._109\n\ +._103:\n\ + .align 2, 0\n\ +._102:\n\ + .word gUnknown_0203923C\n\ + .word gLastFieldPokeMenuOpened\n\ +._100:\n\ + add r0, r4, #0\n\ + bl MetatileBehavior_IsSecretBaseTree\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + bne ._104 @cond_branch\n\ + bl sub_80C6264\n\ + ldr r1, ._106\n\ + mov r0, #0x0\n\ + strb r0, [r1]\n\ + bl sub_80C64A8\n\ + b ._109\n\ +._107:\n\ + .align 2, 0\n\ +._106:\n\ + .word gLastFieldPokeMenuOpened\n\ +._104:\n\ + add r0, r4, #0\n\ + bl MetatileBehavior_IsSecretBaseShrub\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + bne ._108 @cond_branch\n\ + bl sub_80C6264\n\ + ldr r1, ._110\n\ + mov r0, #0x0\n\ + strb r0, [r1]\n\ + bl sub_80C660C\n\ + b ._109\n\ +._111:\n\ + .align 2, 0\n\ +._110:\n\ + .word gLastFieldPokeMenuOpened\n\ +._108:\n\ + bl ScriptContext2_Disable\n\ +._109:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0"); +} +#endif + bool8 SetUpFieldMove_SecretPower(void) { u8 behavior; diff --git a/src/field/fldeff_strength.c b/src/field/fldeff_strength.c index 565ac1651..9f9cd4013 100644 --- a/src/field/fldeff_strength.c +++ b/src/field/fldeff_strength.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/map_objects.h" #include "braille_puzzles.h" #include "field_effect.h" #include "party_menu.h" @@ -20,6 +21,28 @@ extern void (*gUnknown_03005CE4)(void); extern u8 S_UseStrength[]; +#if DEBUG +void debug_sub_8130318(void) +{ + if (ShouldDoBrailleStrengthEffect()) + { + gLastFieldPokeMenuOpened = 0; + gSpecialVar_Result = 0; + sub_811AA38(); + } + else if (npc_before_player_of_type(MAP_OBJ_GFX_PUSHABLE_BOULDER) == TRUE) + { + gLastFieldPokeMenuOpened = 0; + gSpecialVar_Result = 0; + sub_811AA18(); + } + else + { + ScriptContext2_Disable(); + } +} +#endif + bool8 SetUpFieldMove_Strength(void) { if (ShouldDoBrailleStrengthEffect()) diff --git a/src/field/item_menu.c b/src/field/item_menu.c index 959eb09ae..cf3c7ca4b 100644 --- a/src/field/item_menu.c +++ b/src/field/item_menu.c @@ -158,6 +158,9 @@ extern struct PocketScrollState gBagPocketScrollStates[]; extern struct ItemSlot *gCurrentBagPocketItemSlots; // selected pocket item slots extern const u8 Event_NoRegisteredItem[]; +// TODO: decompile the debug code so we can use static in this file +#define static + extern const struct CompressedSpriteSheet sMaleBagSpriteSheet; extern const struct CompressedSpriteSheet sFemaleBagSpriteSheet; extern const struct CompressedSpritePalette sBagSpritePalette; @@ -286,6 +289,24 @@ static void sub_80A6618(u8); const struct YesNoFuncTable gUnknown_083C16FC = {sub_80A65AC, sub_80A6618}; +#if DEBUG +const struct {u16 item; u8 unk;} gUnknown_Debug_083EBC68[12+48] = +{ + {ITEM_POKE_BALL, 10}, + {ITEM_ULTRA_BALL, 15}, + {ITEM_GREAT_BALL, 20}, + {ITEM_MASTER_BALL, 25}, + {ITEM_ACRO_BIKE, 1 }, + {ITEM_OLD_ROD, 1 }, + {ITEM_GOOD_ROD, 1 }, + {ITEM_SUPER_ROD, 1 }, + {ITEM_POKEBLOCK_CASE, 1 }, + {ITEM_WAILMER_PAIL, 1 }, + {ITEM_ITEMFINDER, 1 }, + {ITEM_NONE, 1 }, +}; +#endif + void sub_80A34E8(void); static bool8 LoadBagGraphicsMultistep(void); static void sub_80A362C(void); @@ -372,6 +393,390 @@ static void sub_80A3134(void) DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0x6000), 0x800); } +#if DEBUG +__attribute__((naked)) +static bool8 SetupBagMultistep(void) +{ + asm("\ + push {r4, r5, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r0, ._5\n\ + ldr r1, ._5 + 4\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x10\n\ + bls ._3 @cond_branch\n\ + b ._66\n\ +._3:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._5 + 8\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._6:\n\ + .align 2, 0\n\ +._5:\n\ + .word gMain\n\ + .word 0x43c\n\ + .word ._7\n\ +._7:\n\ + .word ._8\n\ + .word ._9\n\ + .word ._10\n\ + .word ._11\n\ + .word ._12\n\ + .word ._13\n\ + .word ._14\n\ + .word ._15\n\ + .word ._16\n\ + .word ._17\n\ + .word ._18\n\ + .word ._19\n\ + .word ._20\n\ + .word ._21\n\ + .word ._22\n\ + .word ._23\n\ + .word ._24\n\ +._8:\n\ + bl ClearVideoCallbacks\n\ + bl sub_80A34E8\n\ + b ._61\n\ +._9:\n\ + bl ScanlineEffect_Stop\n\ + ldr r1, ._27\n\ + ldr r0, ._27 + 4\n\ + add r1, r1, r0\n\ + b ._62\n\ +._28:\n\ + .align 2, 0\n\ +._27:\n\ + .word gMain\n\ + .word 0x43c\n\ +._10:\n\ + bl gpu_pal_allocator_reset__manage_upper_four\n\ + b ._61\n\ +._11:\n\ + bl ClearBGTilemapBuffers\n\ + ldr r0, ._31\n\ + ldr r1, ._31 + 4\n\ + add r0, r0, r1\n\ + mov r1, #0x0\n\ + strb r1, [r0]\n\ + b ._61\n\ +._32:\n\ + .align 2, 0\n\ +._31:\n\ + .word +0x2000000\n\ + .word 0x1ffff\n\ +._12:\n\ + bl ResetPaletteFade\n\ + ldr r2, ._34\n\ + ldrb r0, [r2, #0x8]\n\ + mov r1, #0x80\n\ + orr r0, r0, r1\n\ + strb r0, [r2, #0x8]\n\ + ldr r1, ._34 + 4\n\ + ldr r0, ._34 + 8\n\ + add r1, r1, r0\n\ + b ._62\n\ +._35:\n\ + .align 2, 0\n\ +._34:\n\ + .word gPaletteFade\n\ + .word gMain\n\ + .word 0x43c\n\ +._13:\n\ + bl ResetSpriteData\n\ + b ._61\n\ +._14:\n\ + bl LoadBagGraphicsMultistep\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._37 @cond_branch\n\ + b ._66\n\ +._37:\n\ + ldr r1, ._40\n\ + ldr r0, ._40 + 4\n\ + add r1, r1, r0\n\ + b ._62\n\ +._41:\n\ + .align 2, 0\n\ +._40:\n\ + .word gMain\n\ + .word 0x43c\n\ +._15:\n\ + ldr r0, ._43\n\ + bl Text_LoadWindowTemplate\n\ + b ._61\n\ +._44:\n\ + .align 2, 0\n\ +._43:\n\ + .word gWindowTemplate_81E6DFC\n\ +._16:\n\ + ldr r0, ._46\n\ + bl MultistepInitMenuWindowBegin\n\ + ldr r1, ._46 + 4\n\ + ldr r0, ._46 + 8\n\ + add r1, r1, r0\n\ + b ._62\n\ +._47:\n\ + .align 2, 0\n\ +._46:\n\ + .word gWindowTemplate_81E6DFC\n\ + .word gMain\n\ + .word 0x43c\n\ +._17:\n\ + bl MultistepInitMenuWindowContinue\n\ + cmp r0, #0\n\ + bne ._48 @cond_branch\n\ + b ._66\n\ +._48:\n\ + b ._61\n\ +._18:\n\ + bl ClearVerticalScrollIndicatorPalettes\n\ + bl LoadScrollIndicatorPalette\n\ + mov r0, #0x0\n\ + mov r1, #0xac\n\ + mov r2, #0xc\n\ + bl CreateVerticalScrollIndicators\n\ + mov r0, #0x1\n\ + mov r1, #0xac\n\ + mov r2, #0x94\n\ + bl CreateVerticalScrollIndicators\n\ + mov r0, #0x2\n\ + mov r1, #0x1c\n\ + mov r2, #0x58\n\ + bl CreateVerticalScrollIndicators\n\ + mov r0, #0x3\n\ + mov r1, #0x64\n\ + mov r2, #0x58\n\ + bl CreateVerticalScrollIndicators\n\ + mov r0, #0x0\n\ + mov r1, #0x2\n\ + bl SetVerticalScrollIndicatorPriority\n\ + mov r0, #0x1\n\ + mov r1, #0x2\n\ + bl SetVerticalScrollIndicatorPriority\n\ + mov r0, #0x2\n\ + mov r1, #0x2\n\ + bl SetVerticalScrollIndicatorPriority\n\ + mov r0, #0x3\n\ + mov r1, #0x2\n\ + bl SetVerticalScrollIndicatorPriority\n\ + ldr r0, ._53\n\ + ldrb r0, [r0]\n\ + sub r0, r0, #0x4\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + bhi ._51 @cond_branch\n\ + mov r0, #0x2\n\ + mov r1, #0x1\n\ + bl SetVerticalScrollIndicators\n\ + mov r0, #0x3\n\ + mov r1, #0x1\n\ + bl SetVerticalScrollIndicators\n\ +._51:\n\ + ldr r1, ._53 + 4\n\ + ldr r0, ._53 + 8\n\ + add r1, r1, r0\n\ + b ._62\n\ +._54:\n\ + .align 2, 0\n\ +._53:\n\ + .word sReturnLocation\n\ + .word gMain\n\ + .word 0x43c\n\ +._19:\n\ + ldr r1, ._56\n\ + mov r0, #0x10\n\ + strb r0, [r1]\n\ + ldr r4, ._56 + 4\n\ + ldr r5, ._56 + 8\n\ + ldrb r1, [r5]\n\ + add r1, r1, #0x1\n\ + lsl r1, r1, #0x18\n\ + lsr r1, r1, #0x18\n\ + add r0, r4, #0\n\ + bl sub_80A39B8\n\ + ldrb r1, [r5]\n\ + add r0, r4, #0\n\ + bl DrawPocketIndicatorDots\n\ + bl UpdateAllBagPockets\n\ + ldr r4, ._56 + 12\n\ + ldr r0, [r4, #0x10]\n\ + ldr r1, [r4, #0x14]\n\ + bl SortItemSlots\n\ + ldr r0, [r4, #0x18]\n\ + ldr r1, [r4, #0x1c]\n\ + bl SortItemSlots\n\ + bl sub_80A3D40\n\ + ldr r1, ._56 + 16\n\ + mov r0, #0x0\n\ + ldsb r0, [r5, r0]\n\ + lsl r0, r0, #0x3\n\ + add r0, r0, r4\n\ + ldr r0, [r0]\n\ + str r0, [r1]\n\ + bl sub_80A362C\n\ + b ._61\n\ +._57:\n\ + .align 2, 0\n\ +._56:\n\ + .word gUnknown_0203855A\n\ + .word gBGTilemapBuffers+0x1000\n\ + .word sCurrentBagPocket\n\ + .word gBagPockets\n\ + .word gCurrentBagPocketItemSlots\n\ +._20:\n\ + ldr r0, ._59\n\ + mov r1, #0x0\n\ + mov r2, #0x7\n\ + bl sub_80A48E8\n\ + ldr r1, ._59 + 4\n\ + ldr r4, ._59 + 8\n\ + mov r0, #0x0\n\ + ldsb r0, [r4, r0]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x1]\n\ + ldrb r0, [r0]\n\ + add r1, r1, r0\n\ + ldr r0, ._59 + 12\n\ + ldr r0, [r0]\n\ + lsl r1, r1, #0x2\n\ + add r1, r1, r0\n\ + mov r2, #0x0\n\ + ldsh r0, [r1, r2]\n\ + bl ItemListMenu_InitDescription\n\ + bl ItemListMenu_InitMenu\n\ + ldr r1, ._59 + 16\n\ + ldrb r0, [r4]\n\ + add r0, r0, #0x1\n\ + strb r0, [r1]\n\ + ldr r1, ._59 + 20\n\ + mov r0, #0x0\n\ + strb r0, [r1]\n\ + ldr r1, ._59 + 24\n\ + ldr r0, ._59 + 28\n\ + add r1, r1, r0\n\ + b ._62\n\ +._60:\n\ + .align 2, 0\n\ +._59:\n\ + .word 0xffff\n\ + .word gBagPocketScrollStates\n\ + .word sCurrentBagPocket\n\ + .word gCurrentBagPocketItemSlots\n\ + .word gUnknown_0203855B\n\ + .word gUnknown_0203855C\n\ + .word gMain\n\ + .word 0x43c\n\ +._21:\n\ + bl CreateBagSprite\n\ + mov r0, #0x0\n\ + bl CreateBagPokeballSprite\n\ + bl sub_80A3740\n\ + b ._61\n\ +._22:\n\ + ldr r3, ._63\n\ + ldrh r2, [r3]\n\ + mov r0, #0x0\n\ + strh r0, [r3]\n\ + ldr r4, ._63 + 4\n\ + ldrh r0, [r4]\n\ + mov r1, #0x1\n\ + orr r0, r0, r1\n\ + strh r0, [r4]\n\ + strh r2, [r3]\n\ + ldr r2, ._63 + 8\n\ + ldrh r0, [r2]\n\ + mov r1, #0x8\n\ + orr r0, r0, r1\n\ + strh r0, [r2]\n\ + mov r0, #0x1\n\ + neg r0, r0\n\ + mov r1, #0x0\n\ + str r1, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r2, ._63 + 12\n\ + ldrb r1, [r2, #0x8]\n\ + mov r0, #0x7f\n\ + and r0, r0, r1\n\ + strb r0, [r2, #0x8]\n\ + ldr r1, ._63 + 16\n\ + ldr r0, ._63 + 20\n\ + add r1, r1, r0\n\ + b ._62\n\ +._64:\n\ + .align 2, 0\n\ +._63:\n\ + .word 0x4000208\n\ + .word 0x4000200\n\ + .word 0x4000004\n\ + .word gPaletteFade\n\ + .word gMain\n\ + .word 0x43c\n\ +._23:\n\ + bl sub_8055870\n\ + cmp r0, #0x1\n\ + beq ._66 @cond_branch\n\ +._61:\n\ + ldr r1, ._67\n\ + ldr r2, ._67 + 4\n\ + add r1, r1, r2\n\ +._62:\n\ + ldrb r0, [r1]\n\ + add r0, r0, #0x1\n\ + strb r0, [r1]\n\ + b ._66\n\ +._68:\n\ + .align 2, 0\n\ +._67:\n\ + .word gMain\n\ + .word 0x43c\n\ +._24:\n\ + ldr r0, ._71\n\ + bl SetVBlankCallback\n\ + ldr r0, ._71 + 4\n\ + bl SetMainCallback2\n\ + bl sub_80A751C\n\ + bl sub_80A7630\n\ + bl sub_80A770C\n\ + bl sub_80A7828\n\ + bl sub_80A78B8\n\ + ldr r0, ._71 + 8\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._69 @cond_branch\n\ + ldr r0, ._71 + 12\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x8\n\ + ldr r2, ._71 + 16\n\ + mov r3, #0x0\n\ + bl debug_sub_8008218\n\ +._69:\n\ + mov r0, #0x1\n\ + b ._70\n\ +._72:\n\ + .align 2, 0\n\ +._71:\n\ + .word sub_80A3134+1\n\ + .word sub_80A3118+1\n\ + .word gLinkOpen\n\ + .word 0x600f5e0\n\ + .word 0x600f800\n\ +._66:\n\ + mov r0, #0x0\n\ +._70:\n\ + add sp, sp, #0x4\n\ + pop {r4, r5}\n\ + pop {r1}\n\ + bx r1"); +} +#else static bool8 SetupBagMultistep(void) { u32 index; @@ -496,6 +901,7 @@ static bool8 SetupBagMultistep(void) } return FALSE; } +#endif static bool8 sub_80A34B4(void) { @@ -622,6 +1028,79 @@ void ClearBag(void) ResetBagScrollPositions(); } +#if DEBUG +__attribute__((naked)) +void debug_sub_80A3714() +{ + asm("\ + push {r4, r5, r6, lr}\n\ + add sp, sp, #0xfffffff4\n\ + mov r5, #0x0\n\ + ldr r2, ._138\n\ + mov r1, #0x0\n\ +._134:\n\ + lsl r0, r5, #0x1\n\ + add r0, r0, sp\n\ + strh r1, [r0]\n\ + add r0, r5, #1\n\ + lsl r0, r0, #0x10\n\ + lsr r5, r0, #0x10\n\ + cmp r5, #0x4\n\ + bls ._134 @cond_branch\n\ + mov r5, #0x0\n\ + ldrh r0, [r2]\n\ + cmp r0, #0\n\ + beq ._136 @cond_branch\n\ + add r6, r2, #0\n\ +._137:\n\ + lsl r4, r5, #0x2\n\ + add r4, r4, r6\n\ + ldrh r0, [r4]\n\ + bl ItemId_GetPocket\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x8\n\ + ldr r1, ._138 + 4\n\ + add r0, r0, r1\n\ + lsr r0, r0, #0x10\n\ + ldr r1, ._138 + 8\n\ + lsl r2, r0, #0x3\n\ + add r2, r2, r1\n\ + lsl r0, r0, #0x1\n\ + mov r1, sp\n\ + add r3, r1, r0\n\ + ldrh r1, [r3]\n\ + ldr r0, [r2]\n\ + lsl r1, r1, #0x2\n\ + add r1, r1, r0\n\ + ldr r0, [r4]\n\ + str r0, [r1]\n\ + ldrh r0, [r3]\n\ + add r0, r0, #0x1\n\ + strh r0, [r3]\n\ + add r0, r5, #1\n\ + lsl r0, r0, #0x10\n\ + lsr r5, r0, #0x10\n\ + cmp r5, #0x3b\n\ + bhi ._136 @cond_branch\n\ + lsl r0, r5, #0x2\n\ + add r0, r0, r6\n\ + ldrh r0, [r0]\n\ + cmp r0, #0\n\ + bne ._137 @cond_branch\n\ +._136:\n\ + add sp, sp, #0xc\n\ + pop {r4, r5, r6}\n\ + pop {r0}\n\ + bx r0\n\ +._139:\n\ + .align 2, 0\n\ +._138:\n\ + .word gUnknown_Debug_083EBC68\n\ + .word 0xffff0000\n\ + .word gBagPockets"); +} +#endif + static void sub_80A3740(void) { const u16 colors[2] = {RGB(14, 15, 16), RGB_WHITE}; @@ -3561,12 +4040,49 @@ static void sub_80A73FC(void) MenuCursor_Destroy814AD44(); } +#if DEBUG +__attribute__((naked)) +static void sub_80A740C(void) +{ + asm("\ + push {lr}\n\ + add sp, sp, #0xfffffffc\n\ + bl sub_80A75E4\n\ + bl sub_80A7768\n\ + bl sub_80A7420\n\ + ldr r0, ._931\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._930 @cond_branch\n\ + ldr r0, ._931 + 4\n\ + ldr r1, ._931 + 8\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + mov r1, #0x0\n\ + str r1, [sp]\n\ + mov r1, #0x1\n\ + mov r2, #0x1\n\ + mov r3, #0x2\n\ + bl debug_sub_8008264\n\ +._930:\n\ + add sp, sp, #0x4\n\ + pop {r0}\n\ + bx r0\n\ +._932:\n\ + .align 2, 0\n\ +._931:\n\ + .word gLinkOpen\n\ + .word gLink\n\ + .word 0xfbd"); +} +#else static void sub_80A740C(void) { sub_80A75E4(); sub_80A7768(); sub_80A7420(); } +#endif static void sub_80A7420(void) { diff --git a/src/field/mauville_man.c b/src/field/mauville_man.c index 0a841eed1..e41ea1628 100644 --- a/src/field/mauville_man.c +++ b/src/field/mauville_man.c @@ -250,7 +250,88 @@ void SetupMauvilleOldMan(void) sub_80F83D0(); } -static u8 GetCurrentMauvilleOldMan(void) +#if DEBUG +__attribute__((naked)) +void debug_sub_810B32C() +{ + asm( + " push {r4, lr}\n" + " add sp, sp, #0xfffffff8\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x4\n" + " bhi ._37 @cond_branch\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._23\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._24:\n" + " .align 2, 0\n" + "._23:\n" + " .word ._22\n" + "._22:\n" + " .word ._25\n" + " .word ._26\n" + " .word ._27\n" + " .word ._28\n" + " .word ._29\n" + "._25:\n" + " bl SetupBard\n" + " b ._37\n" + "._26:\n" + " mov r2, #0x0\n" + " ldr r3, ._34\n" + "._31:\n" + " mov r0, sp\n" + " add r1, r0, r2\n" + " add r0, r2, r3\n" + " ldrb r0, [r0]\n" + " strb r0, [r1]\n" + " add r0, r2, #1\n" + " lsl r0, r0, #0x18\n" + " lsr r2, r0, #0x18\n" + " cmp r2, #0x7\n" + " bls ._31 @cond_branch\n" + " bl SetupHipster\n" + " mov r2, #0x0\n" + " ldr r3, ._34\n" + "._32:\n" + " add r1, r2, r3\n" + " mov r4, sp\n" + " add r0, r4, r2\n" + " ldrb r0, [r0]\n" + " strb r0, [r1]\n" + " add r0, r2, #1\n" + " lsl r0, r0, #0x18\n" + " lsr r2, r0, #0x18\n" + " cmp r2, #0x7\n" + " bls ._32 @cond_branch\n" + " b ._37\n" + "._35:\n" + " .align 2, 0\n" + "._34:\n" + " .word gSaveBlock1+0x2d8c\n" + "._27:\n" + " bl SetupTrader\n" + " b ._37\n" + "._28:\n" + " bl SetupStoryteller\n" + " b ._37\n" + "._29:\n" + " bl SetupGiddy\n" + "._37:\n" + " bl sub_80F83D0\n" + " add sp, sp, #0x8\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} +#endif + +u8 GetCurrentMauvilleOldMan(void) { struct MauvilleManCommon *common = &gSaveBlock1.mauvilleMan.common; diff --git a/src/field/overworld.c b/src/field/overworld.c index 07453e4fe..07135080e 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -25,6 +25,7 @@ #include "link.h" #include "load_save.h" #include "main.h" +#include "m4a.h" #include "constants/maps.h" #include "map_name_popup.h" #include "menu.h" @@ -62,6 +63,7 @@ struct UnkTVStruct u32 tv_field_4; }; +extern u8 gUnknown_020297ED; extern u16 gUnknown_03004898; extern u16 gUnknown_0300489C; @@ -1106,6 +1108,68 @@ u8 sav1_map_get_battletype(void) return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->battleType; } +#if DEBUG + +void debug_sub_8076B68(void); + +void debug_sub_80589D8(void); + +void debug_sub_8058A50(void); + +void CB2_InitTestMenu(void) +{ + m4aSoundVSyncOff(); + SetVBlankCallback(NULL); + DmaFill32(3, 0, (void *) VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *) PLTT, PLTT_SIZE); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + ScanlineEffect_Stop(); + Text_LoadWindowTemplate(&gWindowTemplate_81E6CE4); + InitMenuWindow(&gWindowTemplate_81E6CE4); + debug_sub_8076B68(); + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + REG_IE |= 1; + REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP; + m4aSoundVSyncOn(); + SetVBlankCallback(debug_sub_8058A50); + m4aSongNumStart(0x19D); + SetMainCallback2(debug_sub_80589D8); +} + +void debug_sub_80589D8(void) +{ + if (UpdatePaletteFade()) + return; + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); +} + +void debug_sub_80589F4(void) +{ + if (UpdatePaletteFade()) + return; + + SetVBlankCallback(NULL); + + DmaFill32(3, 0, (void *) VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *) PLTT, PLTT_SIZE); + + SetMainCallback2(gMain.savedCallback); +} + +void debug_sub_8058A50(void) +{ + ProcessSpriteCopyRequests(); + LoadOam(); + TransferPlttBuffer(); +} + +#endif + void ResetSafariZoneFlag_(void) { ResetSafariZoneFlag(); @@ -1210,6 +1274,33 @@ void CB2_NewGame(void) SetMainCallback2(c2_overworld); } +#if DEBUG + +extern void (*gFieldCallback)(void); + +void debug_sub_8058C00(void) +{ + FieldClearVBlankHBlankCallbacks(); + StopMapMusic(); + ResetSafariZoneFlag_(); + player_avatar_init_params_reset(); + PlayTimeCounter_Start(); + ScriptContext1_Init(); + ScriptContext2_Disable(); + + if (gMain.heldKeys & R_BUTTON) + gFieldCallback = ExecuteTruckSequence; + else + gFieldCallback = sub_8080B60; + + do_load_map_stuff_loop(&gMain.state); + SetFieldVBlankCallback(); + set_callback1(c1_overworld); + SetMainCallback2(c2_overworld); +} + +#endif + void CB2_WhiteOut(void) { u8 val; @@ -1365,6 +1456,10 @@ void CB2_ContinueSavedGame(void) { FieldClearVBlankHBlankCallbacks(); StopMapMusic(); +#if DEBUG + if (gMain.heldKeys & R_BUTTON) + gUnknown_020297ED = TRUE; +#endif ResetSafariZoneFlag_(); LoadSaveblockMapHeader(); LoadSaveblockMapObjScripts(); diff --git a/src/field/party_menu.c b/src/field/party_menu.c index f55ed669d..4108145c1 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -94,9 +94,9 @@ static void SpriteCB_UpdateHeldItemIconPosition(struct Sprite *sprite); static void ItemUseMoveMenu_HandleMoveSelection(u8 taskId); static void ItemUseMoveMenu_HandleCancel(u8 taskId); static bool8 SetupDefaultPartyMenu(void); -static void sub_806B4A8(void); -static void VBlankCB_PartyMenu(void); -static bool8 LoadPartyMenuGraphics(u8 a); +/*static*/ void sub_806B4A8(void); +/*static*/ void VBlankCB_PartyMenu(void); +/*static*/ bool8 LoadPartyMenuGraphics(u8 a); static void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d); static void sub_806BB9C(u8 a); static void sub_806BBEC(u8 a); @@ -493,6 +493,71 @@ extern const u8 gStatusPal_Icons[]; #define WINDOW_RIGHT (29) #endif +#if DEBUG +__attribute__((naked)) +void CB2_PartyMenuMain(void) +{ + asm("\ + push {r4, r5, r6, lr}\n\ + add sp, sp, #0xfffffffc\n\ + bl AnimateSprites\n\ + bl BuildOamBuffer\n\ + ldr r0, ._3\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x4\n\ + ldr r1, ._3 + 4\n\ + add r5, r0, r1\n\ + mov r6, #0x0\n\ +._1:\n\ + ldrb r0, [r5]\n\ + lsl r0, r0, #0x3\n\ + ldrb r1, [r5, #0x1]\n\ + lsl r1, r1, #0x3\n\ + ldr r2, [r5, #0x4]\n\ + lsl r3, r6, #0x5\n\ + mov r4, #0x80\n\ + lsl r4, r4, #0x2\n\ + orr r3, r3, r4\n\ + str r3, [sp]\n\ + mov r3, #0x0\n\ + bl DrawPartyMenuMonText\n\ + add r5, r5, #0x8\n\ + add r6, r6, #0x1\n\ + cmp r6, #0x5\n\ + ble ._1 @cond_branch\n\ + bl RunTasks\n\ + bl UpdatePaletteFade\n\ + ldr r0, ._3 + 8\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._2 @cond_branch\n\ + ldr r0, ._3 + 12\n\ + ldr r1, ._3 + 16\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + mov r1, #0x2\n\ + str r1, [sp]\n\ + mov r1, #0x1\n\ + mov r2, #0x1\n\ + mov r3, #0x2\n\ + bl debug_sub_8008264\n\ +._2:\n\ + add sp, sp, #0x4\n\ + pop {r4, r5, r6}\n\ + pop {r0}\n\ + bx r0\n\ +._4:\n\ + .align 2, 0\n\ +._3:\n\ + .word gPartyMenuType\n\ + .word PartyMonTextSettings\n\ + .word gLinkOpen\n\ + .word gLink\n\ + .word 0xfbd"); +} +#else void CB2_PartyMenuMain(void) { const struct PartyMonTextSettingsStruct *textSettings; @@ -517,6 +582,7 @@ void CB2_PartyMenuMain(void) RunTasks(); UpdatePaletteFade(); } +#endif void VBlankCB_PartyMenu(void) { @@ -621,6 +687,425 @@ bool8 SetupDefaultPartyMenu(void) return FALSE; } +#if DEBUG +__attribute__((naked)) +bool8 InitPartyMenu(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + add sp, sp, #0xfffffff4\n\ + ldr r0, ._55\n\ + ldr r1, ._55 + 4\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x11\n\ + bls ._53 @cond_branch\n\ + b ._125\n\ +._53:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._55 + 8\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._56:\n\ + .align 2, 0\n\ +._55:\n\ + .word gMain\n\ + .word 0x43c\n\ + .word ._57\n\ +._57:\n\ + .word ._58\n\ + .word ._59\n\ + .word ._60\n\ + .word ._61\n\ + .word ._62\n\ + .word ._63\n\ + .word ._64\n\ + .word ._65\n\ + .word ._66\n\ + .word ._67\n\ + .word ._68\n\ + .word ._69\n\ + .word ._70\n\ + .word ._71\n\ + .word ._72\n\ + .word ._73\n\ + .word ._74\n\ + .word ._75\n\ +._58:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + mov r3, #0xc0\n\ + lsl r3, r3, #0x13\n\ + mov r4, #0xc0\n\ + lsl r4, r4, #0x9\n\ + add r2, sp, #0x8\n\ + mov r8, r2\n\ + add r2, sp, #0x4\n\ + mov r6, #0x0\n\ + ldr r1, ._78\n\ + mov r5, #0x80\n\ + lsl r5, r5, #0x5\n\ + ldr r7, ._78 + 4\n\ + mov r0, #0x81\n\ + lsl r0, r0, #0x18\n\ + mov ip, r0\n\ +._76:\n\ + strh r6, [r2]\n\ + add r0, sp, #0x4\n\ + str r0, [r1]\n\ + str r3, [r1, #0x4]\n\ + str r7, [r1, #0x8]\n\ + ldr r0, [r1, #0x8]\n\ + add r3, r3, r5\n\ + sub r4, r4, r5\n\ + cmp r4, r5\n\ + bhi ._76 @cond_branch\n\ + strh r6, [r2]\n\ + add r2, sp, #0x4\n\ + str r2, [r1]\n\ + str r3, [r1, #0x4]\n\ + lsr r0, r4, #0x1\n\ + mov r3, ip\n\ + orr r0, r0, r3\n\ + str r0, [r1, #0x8]\n\ + ldr r0, [r1, #0x8]\n\ + mov r0, #0xe0\n\ + lsl r0, r0, #0x13\n\ + mov r3, #0x80\n\ + lsl r3, r3, #0x3\n\ + mov r4, #0x0\n\ + str r4, [sp, #0x8]\n\ + ldr r2, ._78\n\ + mov r1, r8\n\ + str r1, [r2]\n\ + str r0, [r2, #0x4]\n\ + lsr r0, r3, #0x2\n\ + mov r1, #0x85\n\ + lsl r1, r1, #0x18\n\ + orr r0, r0, r1\n\ + str r0, [r2, #0x8]\n\ + ldr r0, [r2, #0x8]\n\ + mov r1, #0xa0\n\ + lsl r1, r1, #0x13\n\ + add r0, sp, #0x4\n\ + strh r4, [r0]\n\ + str r0, [r2]\n\ + str r1, [r2, #0x4]\n\ + lsr r3, r3, #0x1\n\ + mov r0, #0x81\n\ + lsl r0, r0, #0x18\n\ + orr r3, r3, r0\n\ + str r3, [r2, #0x8]\n\ + ldr r0, [r2, #0x8]\n\ + ldr r2, ._78 + 8\n\ + ldrb r0, [r2, #0x8]\n\ + mov r1, #0x80\n\ + orr r0, r0, r1\n\ + strb r0, [r2, #0x8]\n\ + ldr r1, ._78 + 12\n\ + ldr r2, ._78 + 16\n\ + add r1, r1, r2\n\ + b ._122\n\ +._79:\n\ + .align 2, 0\n\ +._78:\n\ + .word 0x40000d4\n\ + .word 0x81000800\n\ + .word gPaletteFade\n\ + .word gMain\n\ + .word 0x43c\n\ +._59:\n\ + bl ScanlineEffect_Stop\n\ + b ._115\n\ +._60:\n\ + bl sub_806B4A8\n\ + ldr r1, ._82\n\ + mov r2, #0x99\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + mov r2, #0x0\n\ + strh r2, [r0]\n\ + ldr r3, ._82 + 4\n\ + add r0, r1, r3\n\ + strh r2, [r0]\n\ + mov r0, #0x9a\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + strh r2, [r1]\n\ + ldr r1, ._82 + 8\n\ + ldr r2, ._82 + 12\n\ + add r1, r1, r2\n\ + b ._122\n\ +._83:\n\ + .align 2, 0\n\ +._82:\n\ + .word +0x201b000\n\ + .word 0x266\n\ + .word gMain\n\ + .word 0x43c\n\ +._61:\n\ + bl ResetSpriteData\n\ + b ._115\n\ +._62:\n\ + ldr r0, ._88\n\ + mov r1, #0x96\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + beq ._86 @cond_branch\n\ + cmp r0, #0x5\n\ + beq ._86 @cond_branch\n\ + bl ResetTasks\n\ +._86:\n\ + ldr r1, ._88 + 4\n\ + ldr r2, ._88 + 8\n\ + add r1, r1, r2\n\ + b ._122\n\ +._89:\n\ + .align 2, 0\n\ +._88:\n\ + .word +0x201b000\n\ + .word gMain\n\ + .word 0x43c\n\ +._63:\n\ + bl FreeAllSpritePalettes\n\ + b ._115\n\ +._64:\n\ + ldr r4, ._92\n\ + mov r1, #0x97\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x0\n\ + bl CreateTask\n\ + mov r2, #0x98\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + strb r0, [r1]\n\ + b ._115\n\ +._93:\n\ + .align 2, 0\n\ +._92:\n\ + .word +0x201b000\n\ +._65:\n\ + ldr r0, ._95\n\ + bl Text_LoadWindowTemplate\n\ + ldr r1, ._95 + 4\n\ + ldr r0, ._95 + 8\n\ + add r1, r1, r0\n\ + b ._122\n\ +._96:\n\ + .align 2, 0\n\ +._95:\n\ + .word gWindowTemplate_81E6C90\n\ + .word gMain\n\ + .word 0x43c\n\ +._66:\n\ + ldr r4, ._98\n\ + ldr r1, ._98 + 4\n\ + add r0, r4, #0\n\ + bl Text_InitWindowWithTemplate\n\ + add r0, r4, #0\n\ + mov r1, #0x1\n\ + bl MultistepInitWindowTileData\n\ + ldr r1, ._98 + 8\n\ + ldr r2, ._98 + 12\n\ + add r1, r1, r2\n\ + b ._122\n\ +._99:\n\ + .align 2, 0\n\ +._98:\n\ + .word gUnknown_03004210\n\ + .word gWindowTemplate_81E6C90\n\ + .word gMain\n\ + .word 0x43c\n\ +._67:\n\ + bl MultistepLoadFont\n\ + cmp r0, #0\n\ + bne ._100 @cond_branch\n\ + b ._125\n\ +._100:\n\ + ldr r0, ._103\n\ + mov r3, #0x99\n\ + lsl r3, r3, #0x2\n\ + add r0, r0, r3\n\ + mov r1, #0x1\n\ + strh r1, [r0]\n\ + ldr r1, ._103 + 4\n\ + ldr r0, ._103 + 8\n\ + add r1, r1, r0\n\ + b ._122\n\ +._104:\n\ + .align 2, 0\n\ +._103:\n\ + .word +0x201b000\n\ + .word gMain\n\ + .word 0x43c\n\ +._68:\n\ + ldr r0, ._107\n\ + mov r1, #0x99\n\ + lsl r1, r1, #0x2\n\ + add r4, r0, r1\n\ + ldrb r0, [r4]\n\ + bl LoadPartyMenuGraphics\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + bne ._105 @cond_branch\n\ + mov r0, #0x0\n\ + strh r0, [r4]\n\ + ldr r1, ._107 + 4\n\ + ldr r2, ._107 + 8\n\ + add r1, r1, r2\n\ + b ._122\n\ +._108:\n\ + .align 2, 0\n\ +._107:\n\ + .word +0x201b000\n\ + .word gMain\n\ + .word 0x43c\n\ +._105:\n\ + ldrh r0, [r4]\n\ + add r0, r0, #0x1\n\ + strh r0, [r4]\n\ + b ._125\n\ +._69:\n\ + bl sub_809D51C\n\ + b ._115\n\ +._70:\n\ + ldr r2, ._113\n\ + ldr r0, ._113 + 4\n\ + mov r1, #0x96\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r2, r2, #0x4\n\ + add r0, r0, r2\n\ + ldr r0, [r0]\n\ + bl _call_via_r0\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + bne ._125 @cond_branch\n\ + ldr r1, ._113 + 8\n\ + ldr r2, ._113 + 12\n\ + add r1, r1, r2\n\ + b ._122\n\ +._114:\n\ + .align 2, 0\n\ +._113:\n\ + .word PartyMenuHandlers\n\ + .word +0x201b000\n\ + .word gMain\n\ + .word 0x43c\n\ +._71:\n\ + ldr r0, ._116\n\ + bl MultistepInitMenuWindowBegin\n\ + b ._115\n\ +._117:\n\ + .align 2, 0\n\ +._116:\n\ + .word gWindowTemplate_81E6CC8\n\ +._72:\n\ + bl MultistepInitMenuWindowContinue\n\ + cmp r0, #0\n\ + beq ._125 @cond_branch\n\ + ldr r1, ._120\n\ + ldr r0, ._120 + 4\n\ + add r1, r1, r0\n\ + b ._122\n\ +._121:\n\ + .align 2, 0\n\ +._120:\n\ + .word gMain\n\ + .word 0x43c\n\ +._73:\n\ + ldr r0, ._123\n\ + ldr r1, ._123 + 4\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + mov r1, #0x0\n\ + bl PrintPartyMenuPromptText\n\ + ldr r1, ._123 + 8\n\ + ldr r2, ._123 + 12\n\ + add r1, r1, r2\n\ + b ._122\n\ +._124:\n\ + .align 2, 0\n\ +._123:\n\ + .word +0x201b000\n\ + .word 0x259\n\ + .word gMain\n\ + .word 0x43c\n\ +._74:\n\ + mov r0, #0x1\n\ + neg r0, r0\n\ + mov r1, #0x0\n\ + str r1, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r2, ._126\n\ + ldrb r1, [r2, #0x8]\n\ + mov r0, #0x7f\n\ + and r0, r0, r1\n\ + strb r0, [r2, #0x8]\n\ +._115:\n\ + ldr r1, ._126 + 4\n\ + ldr r3, ._126 + 8\n\ + add r1, r1, r3\n\ +._122:\n\ + ldrb r0, [r1]\n\ + add r0, r0, #0x1\n\ + strb r0, [r1]\n\ + b ._125\n\ +._127:\n\ + .align 2, 0\n\ +._126:\n\ + .word gPaletteFade\n\ + .word gMain\n\ + .word 0x43c\n\ +._75:\n\ + ldr r0, ._130\n\ + bl SetVBlankCallback\n\ + ldr r0, ._130 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._128 @cond_branch\n\ + ldr r0, ._130 + 8\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x8\n\ + ldr r2, ._130 + 12\n\ + mov r3, #0x2\n\ + bl debug_sub_8008218\n\ +._128:\n\ + mov r0, #0x1\n\ + b ._129\n\ +._131:\n\ + .align 2, 0\n\ +._130:\n\ + .word VBlankCB_PartyMenu+1\n\ + .word gLinkOpen\n\ + .word 0x600e5e0\n\ + .word 0x6007800\n\ +._125:\n\ + mov r0, #0x0\n\ +._129:\n\ + add sp, sp, #0xc\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4, r5, r6, r7}\n\ + pop {r1}\n\ + bx r1"); +} +#else bool8 InitPartyMenu(void) { switch (gMain.state) @@ -728,6 +1213,7 @@ bool8 InitPartyMenu(void) return FALSE; } +#endif void CB2_InitPartyMenu(void) { @@ -4007,6 +4493,10 @@ void TeachMonTMMove(u8 taskId, u16 move, TaskFunc func) CreateTask(Task_TeamMonTMMove, 5); } +#if DEBUG +extern u8 gUnknown_020297ED; +#endif + void Task_TeamMonTMMove(u8 taskId) { GetMonNickname(ewram1C000.pokemon, gStringVar1); @@ -4021,7 +4511,11 @@ void Task_TeamMonTMMove(u8 taskId) } else { - if (!CanMonLearnTMHM(ewram1C000.pokemon, ewram1C000.unk6 - 33)) + if ( +#if DEBUG + !gUnknown_020297ED && +#endif + !CanMonLearnTMHM(ewram1C000.pokemon, ewram1C000.unk6 - 33)) { StringExpandPlaceholders(gStringVar4, gOtherText_NotCompatible); sub_806E834(gStringVar4, 1); @@ -4751,7 +5245,8 @@ void DoPPUpItemEffect(u8 taskId, u16 b, TaskFunc c) gMain.newKeys = 0; } -static const u8 *const StatNames[] = { +static const u8 *const StatNames[] = +{ gOtherText_HP, gOtherText_Attack, gOtherText_Defense, @@ -4760,7 +5255,8 @@ static const u8 *const StatNames[] = { gOtherText_Speed, }; -static const u8 StatDataTypes[] = { +static const u8 StatDataTypes[] = +{ MON_DATA_MAX_HP, MON_DATA_ATK, MON_DATA_DEF, @@ -4768,6 +5264,17 @@ static const u8 StatDataTypes[] = { MON_DATA_SPDEF, MON_DATA_SPEED, }; + +#if DEBUG + +const u8 gUnknown_Debug_839B6CE[] = {0x40, 0, 0, 0, 0x44, 0, 0xFF, 0, 0, 0}; + +const u8 gUnknown_Debug_839B6D8[] = _( + "{STR_VAR_1}かい じっこう\n" + "{STR_VAR_2}たんいじかん しょうひ"); + +#endif + void DoRareCandyItemEffect(u8 taskId, u16 b, TaskFunc c) { u8 i; @@ -5499,9 +6006,13 @@ _08070F8A:\n\ } #endif // NONMATCHING + +// Maybe this goes in start_menu.c +#if !DEBUG void unref_sub_8070F90(void) { FlagSet(FLAG_SYS_POKEDEX_GET); FlagSet(FLAG_SYS_POKEMON_GET); FlagSet(FLAG_SYS_POKENAV_GET); } +#endif diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c index e08a65f49..b4be44aa2 100644 --- a/src/field/pokeblock.c +++ b/src/field/pokeblock.c @@ -91,7 +91,8 @@ static const u8 *gUnknown_03000758; #define GFX_TAG_POKEBLOCK_CASE 14800 -const s8 gPokeblockFlavorCompatibilityTable[] = { +const s8 gPokeblockFlavorCompatibilityTable[] = +{ // Cool, Beauty, Cute, Smart, Tough 0, 0, 0, 0, 0, // Hardy 1, 0, 0, 0, -1, // Lonely @@ -120,14 +121,16 @@ const s8 gPokeblockFlavorCompatibilityTable[] = { 0, 0, 0, 0, 0 // Quirky }; -void (*const gUnknown_083F7EA8[])(void) = { +void (*const gUnknown_083F7EA8[])(void) = +{ sub_80A5B40, c2_exit_to_overworld_2_switch, sub_802E424, c2_exit_to_overworld_2_switch }; -const u8 *const gPokeblockNames[] = { +const u8 *const gPokeblockNames[] = +{ NULL, ContestStatsText_RedPokeBlock, ContestStatsText_BluePokeBlock, @@ -145,7 +148,8 @@ const u8 *const gPokeblockNames[] = { ContestStatsText_GoldPokeBlock }; -const struct MenuAction2 gUnknown_083F7EF4[] = { +const struct MenuAction2 gUnknown_083F7EF4[] = +{ {OtherText_Use, sub_810C508}, {OtherText_Toss, sub_810C5C0}, {gOtherText_CancelNoTerminator, sub_810C748}, @@ -161,21 +165,25 @@ const struct YesNoFuncTable gUnknown_083F7F24 = {sub_810C610, sub_810C668}; const u8 UnreferencedData_083F7F2C[] = {0x16, 0x17, 0x18, 0x21, 0x2f}; -const struct OamData gOamData_83F7F34 = { +const struct OamData gOamData_83F7F34 = +{ .size = 3, .priority = 2 }; -const union AnimCmd gSpriteAnim_83F7F3C[] = { +const union AnimCmd gSpriteAnim_83F7F3C[] = +{ ANIMCMD_FRAME(.imageValue = 0, .duration = 0), ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_83F7F44[] = { +const union AnimCmd *const gSpriteAnimTable_83F7F44[] = +{ gSpriteAnim_83F7F3C }; -const union AffineAnimCmd gSpriteAffineAnim_83F7F48[] = { +const union AffineAnimCmd gSpriteAffineAnim_83F7F48[] = +{ AFFINEANIMCMD_FRAME(0, 0, -2, 2), AFFINEANIMCMD_FRAME(0, 0, 2, 4), AFFINEANIMCMD_FRAME(0, 0, -2, 4), @@ -183,22 +191,26 @@ const union AffineAnimCmd gSpriteAffineAnim_83F7F48[] = { AFFINEANIMCMD_END }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7F70[] = { +const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7F70[] = +{ gSpriteAffineAnim_83F7F48 }; -const struct CompressedSpriteSheet gUnknown_083F7F74 = { +const struct CompressedSpriteSheet gUnknown_083F7F74 = +{ gMenuPokeblockDevice_Gfx, 0x800, GFX_TAG_POKEBLOCK_CASE }; -const struct CompressedSpritePalette gUnknown_083F7F7C = { +const struct CompressedSpritePalette gUnknown_083F7F7C = +{ gMenuPokeblockDevice_Pal, GFX_TAG_POKEBLOCK_CASE }; -const struct SpriteTemplate gSpriteTemplate_83F7F84 = { +const struct SpriteTemplate gSpriteTemplate_83F7F84 = +{ GFX_TAG_POKEBLOCK_CASE, GFX_TAG_POKEBLOCK_CASE, &gOamData_83F7F34, @@ -208,12 +220,25 @@ const struct SpriteTemplate gSpriteTemplate_83F7F84 = { SpriteCallbackDummy }; -const struct Pokeblock gUnknown_083F7F9C[] = { - { PBLOCK_CLR_RED, 20, 0, 0, 0, 0, 20}, - { PBLOCK_CLR_BLUE, 0, 20, 0, 0, 0, 20}, - { PBLOCK_CLR_PINK, 0, 0, 20, 0, 0, 20}, - { PBLOCK_CLR_GREEN, 0, 0, 0, 20, 0, 20}, - { PBLOCK_CLR_YELLOW, 0, 0, 0, 0, 20, 20} +const struct Pokeblock gUnknown_083F7F9C[] = +{ + { PBLOCK_CLR_RED, 20, 0, 0, 0, 0, 20 }, + { PBLOCK_CLR_BLUE, 0, 20, 0, 0, 0, 20 }, + { PBLOCK_CLR_PINK, 0, 0, 20, 0, 0, 20 }, + { PBLOCK_CLR_GREEN, 0, 0, 0, 20, 0, 20 }, + { PBLOCK_CLR_YELLOW, 0, 0, 0, 0, 20, 20 }, +#if DEBUG + { PBLOCK_CLR_PURPLE, 20, 0, 20, 0, 0, 20 }, + { PBLOCK_CLR_INDIGO, 0, 20, 0, 20, 0, 20 }, + { PBLOCK_CLR_BROWN, 0, 0, 20, 0, 20, 20 }, + { PBLOCK_CLR_LITEBLUE, 20, 0, 0, 20, 0, 20 }, + { PBLOCK_CLR_OLIVE, 0, 20, 0, 0, 20, 20 }, + { PBLOCK_CLR_GRAY, 0, 2, 0, 2, 2, 0 }, + { PBLOCK_CLR_BLACK, 3, 3, 3, 4, 3, 0 }, + { PBLOCK_CLR_WHITE, 1, 1, 1, 1, 1, 1 }, + { PBLOCK_CLR_GOLD, 20, 0, 0, 0, 0, 20 }, + { 0 }, +#endif }; // text @@ -424,14 +449,13 @@ void OpenPokeblockCaseOnFeeder(void) SetMainCallback2(sub_810B96C); } -#ifdef DEBUG +#if DEBUG void debug_sub_8120F98(void) { u8 i; - for (i=0; i<40 && gUnknown_083F7F9C[i].color != 0; i++) - { + + for (i = 0; i < 40 && gUnknown_083F7F9C[i].color != 0; i++) gSaveBlock1.pokeblocks[i] = gUnknown_083F7F9C[i]; - } } #endif diff --git a/src/field/region_map.c b/src/field/region_map.c index 1378820fe..7bfda1a81 100644 --- a/src/field/region_map.c +++ b/src/field/region_map.c @@ -280,7 +280,7 @@ static u16 sub_80FB9C0(u16); static void sub_80FBA18(void); static bool8 sub_80FBAA0(u16); void CreateRegionMapCursor(u16, u16); -static void sub_80FBCA0(void); +void sub_80FBCA0(void); static void sub_80FBDF8(void); static void sub_80FBE24(void); static void SpriteCB_PlayerIconZoomedOut(struct Sprite *); @@ -288,8 +288,8 @@ static void UpdateIconBlink(struct Sprite *); static void SpriteCB_PlayerIconZoomedIn(struct Sprite *); const u8 *GetMapSectionName(u8 *, u16, u16); static void VBlankCB_FlyRegionMap(void); -static void CB2_FlyRegionMap(void); -static void sub_80FC244(void (*func)(void)); +void CB2_FlyRegionMap(void); +void sub_80FC244(void (*func)(void)); static void PrintFlyTargetName(void); static void CreateFlyTargetGraphics(void); static void CreateCityTownFlyTargetIcons(void); @@ -297,7 +297,7 @@ static void CreateSpecialAreaFlyTargetIcons(void); static void SpriteCB_FlyTargetIcons(struct Sprite *); static void sub_80FC5B4(void); static void sub_80FC600(void); -static void sub_80FC69C(void); +void sub_80FC69C(void); void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed) { @@ -1127,7 +1127,7 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) } } -static void sub_80FBCA0(void) +void sub_80FBCA0(void) { if (gRegionMap->cursorSprite != NULL) { @@ -1420,7 +1420,7 @@ struct UnknownStruct4 static const u8 *const sEverGrandeCityAreaNames[] = {OtherText_PokeLeague, OtherText_PokeCenter}; -static const struct UnknownStruct4 sUnknown_083E79C0[1] = +const struct UnknownStruct4 gUnknown_083E79C0[1] = { {sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, FLAG_SYS_POKEMON_LEAGUE_FLY}, }; @@ -1591,14 +1591,14 @@ static void VBlankCB_FlyRegionMap(void) TransferPlttBuffer(); } -static void CB2_FlyRegionMap(void) +void CB2_FlyRegionMap(void) { ewram0_3.unk0(); AnimateSprites(); BuildOamBuffer(); } -static void sub_80FC244(void (*func)(void)) +void sub_80FC244(void (*func)(void)) { ewram0_3.unk0 = func; ewram0_3.unk4 = 0; @@ -1611,9 +1611,9 @@ static void PrintFlyTargetName(void) u16 i; bool32 drawFrameDisabled = FALSE; - for (i = 0; i < ARRAY_COUNT(sUnknown_083E79C0); i++) + for (i = 0; i < ARRAY_COUNT(gUnknown_083E79C0); i++) { - const struct UnknownStruct4 *r4 = &sUnknown_083E79C0[i]; + const struct UnknownStruct4 *r4 = &gUnknown_083E79C0[i]; if (ewram0_3.regionMap.mapSectionId == r4->mapSectionId) { @@ -1795,7 +1795,7 @@ static void sub_80FC600(void) } } -static void sub_80FC69C(void) +void sub_80FC69C(void) { switch (ewram0_3.unk4) { diff --git a/src/field/roamer.c b/src/field/roamer.c index 2eb26ef9d..6ed5b6c89 100644 --- a/src/field/roamer.c +++ b/src/field/roamer.c @@ -1,7 +1,9 @@ #include "global.h" +#include "debug.h" #include "roamer.h" #include "pokemon.h" #include "random.h" +#include "region_map.h" #include "constants/species.h" #ifdef SAPPHIRE @@ -224,3 +226,20 @@ void GetRoamerLocation(u8 *mapGroup, u8 *mapNum) *mapGroup = sRoamerLocation[MAP_GRP]; *mapNum = sRoamerLocation[MAP_NUM]; } + +#if DEBUG +void debug_sub_814A714(void) +{ + if (gSaveBlock1.location.mapGroup == 0) + { + CreateInitialRoamerMon(); + sRoamerLocation[0] = 0; + sRoamerLocation[1] = gSaveBlock1.location.mapNum; + } +} + +void debug_sub_814A73C(u8* str) +{ + GetMapSectionName(str, sRoamerLocation[1], 0); +} +#endif diff --git a/src/field/safari_zone.c b/src/field/safari_zone.c index 6c7c8b391..f371b08b3 100644 --- a/src/field/safari_zone.c +++ b/src/field/safari_zone.c @@ -26,7 +26,7 @@ static void DecrementFeederStepCounters(void); extern u8 gBattleOutcome; EWRAM_DATA u8 gNumSafariBalls = 0; -EWRAM_DATA static u16 gSafariZoneStepCounter = 0; +EWRAM_DATA u16 gSafariZoneStepCounter = 0; EWRAM_DATA static struct PokeblockFeeder gPokeblockFeeders[NUM_POKEBLOCK_FEEDERS] = {0}; extern void (*gFieldCallback)(void); diff --git a/src/field/secret_base.c b/src/field/secret_base.c index 2d02de004..01e9711dc 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -1648,6 +1648,178 @@ void sub_80BD610(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases sub_80BD328(basesC, 0); } +#if DEBUG +__attribute__((naked)) +void sub_80BD674(void *playerRecords, u32 size, u8 c) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + add r6, r0, #0\n\ + add r5, r1, #0\n\ + lsl r2, r2, #0x18\n\ + lsr r7, r2, #0x18\n\ + ldr r0, ._503\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + bne ._498 @cond_branch\n\ + mov r0, #0x60\n\ + bl FlagGet\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._498 @cond_branch\n\ + b ._520\n\ +._498:\n\ + bl GetLinkPlayerCount\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x2\n\ + beq ._500 @cond_branch\n\ + cmp r0, #0x3\n\ + beq ._501 @cond_branch\n\ + b ._505\n\ +._504:\n\ + .align 2, 0\n\ +._503:\n\ + .word gUnknown_020297ED\n\ +._500:\n\ + lsl r4, r5, #0x1\n\ + add r0, r6, r4\n\ + mov r1, #0x0\n\ + add r2, r5, #0\n\ + bl memset\n\ + add r4, r4, r5\n\ + add r4, r6, r4\n\ + add r0, r4, #0\n\ + mov r1, #0x0\n\ + add r2, r5, #0\n\ + bl memset\n\ + b ._505\n\ +._501:\n\ + lsl r0, r5, #0x1\n\ + add r0, r0, r5\n\ + add r0, r6, r0\n\ + mov r1, #0x0\n\ + add r2, r5, #0\n\ + bl memset\n\ +._505:\n\ + cmp r7, #0x1\n\ + beq ._506 @cond_branch\n\ + cmp r7, #0x1\n\ + bgt ._507 @cond_branch\n\ + cmp r7, #0\n\ + beq ._508 @cond_branch\n\ + b ._515\n\ +._507:\n\ + cmp r7, #0x2\n\ + beq ._510 @cond_branch\n\ + cmp r7, #0x3\n\ + beq ._511 @cond_branch\n\ + b ._515\n\ +._508:\n\ + add r0, r6, r5\n\ + lsl r2, r5, #0x1\n\ + add r1, r6, r2\n\ + add r2, r2, r5\n\ + add r2, r6, r2\n\ + bl sub_80BD610\n\ + b ._515\n\ +._506:\n\ + lsl r1, r5, #0x1\n\ + add r0, r6, r1\n\ + add r1, r1, r5\n\ + add r1, r6, r1\n\ + add r2, r6, #0\n\ + bl sub_80BD610\n\ + b ._515\n\ +._510:\n\ + lsl r0, r5, #0x1\n\ + add r0, r0, r5\n\ + add r0, r6, r0\n\ + add r2, r6, r5\n\ + add r1, r6, #0\n\ + bl sub_80BD610\n\ + b ._515\n\ +._511:\n\ + add r1, r6, r5\n\ + lsl r2, r5, #0x1\n\ + add r2, r6, r2\n\ + add r0, r6, #0\n\ + bl sub_80BD610\n\ +._515:\n\ + mov r3, #0x1\n\ + ldr r6, ._521\n\ + mov r5, #0x10\n\ + neg r5, r5\n\ + ldr r4, ._521 + 4\n\ +._517:\n\ + lsl r0, r3, #0x2\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x5\n\ + add r0, r0, r6\n\ + add r2, r0, r4\n\ + ldrb r1, [r2]\n\ + lsl r0, r1, #0x1c\n\ + lsr r0, r0, #0x1c\n\ + cmp r0, #0x1\n\ + bne ._516 @cond_branch\n\ + mov r0, #0x3f\n\ + and r0, r0, r1\n\ + mov r1, #0x40\n\ + orr r0, r0, r1\n\ + and r0, r0, r5\n\ + strb r0, [r2]\n\ +._516:\n\ + add r0, r3, #1\n\ + lsl r0, r0, #0x10\n\ + lsr r3, r0, #0x10\n\ + cmp r3, #0x13\n\ + bls ._517 @cond_branch\n\ + bl sub_80BD280\n\ + mov r3, #0x1\n\ + ldr r4, ._521\n\ + ldr r6, ._521 + 4\n\ + add r7, r4, #0\n\ + mov r5, #0x3f\n\ +._519:\n\ + lsl r0, r3, #0x2\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x5\n\ + add r0, r0, r4\n\ + add r2, r0, r6\n\ + ldrb r1, [r2]\n\ + lsr r0, r1, #0x6\n\ + cmp r0, #0x2\n\ + bne ._518 @cond_branch\n\ + add r0, r5, #0\n\ + and r0, r0, r1\n\ + strb r0, [r2]\n\ +._518:\n\ + add r0, r3, #1\n\ + lsl r0, r0, #0x10\n\ + lsr r3, r0, #0x10\n\ + cmp r3, #0x13\n\ + bls ._519 @cond_branch\n\ + ldr r0, ._521 + 8\n\ + add r2, r7, r0\n\ + ldrh r1, [r2]\n\ + ldr r0, ._521 + 12\n\ + cmp r1, r0\n\ + beq ._520 @cond_branch\n\ + add r0, r1, #1\n\ + strh r0, [r2]\n\ +._520:\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._522:\n\ + .align 2, 0\n\ +._521:\n\ + .word gSaveBlock1\n\ + .word 0x1a09\n\ + .word 0x1a16\n\ + .word 0xffff"); +} +#else void sub_80BD674(void *playerRecords, u32 size, u8 c) { if (FlagGet(FLAG_RECEIVED_SECRET_POWER)) @@ -1706,3 +1878,4 @@ void sub_80BD674(void *playerRecords, u32 size, u8 c) } } } +#endif diff --git a/src/field/shop.c b/src/field/shop.c index e087628da..852ccddda 100644 --- a/src/field/shop.c +++ b/src/field/shop.c @@ -1238,3 +1238,24 @@ void Shop_CreateDecorationShop2Menu(u16 *itemList) SetShopItemsForSale(itemList); SetShopMenuCallback(EnableBothScriptContexts); } + +#if DEBUG +__attribute__((naked)) +void debug_sub_80C2818(void) +{ + asm("\ + push {lr}\n\ + mov r0, #0x0\n\ + bl CreateShopMenu\n\ + ldr r0, ._290\n\ + bl SetShopItemsForSale\n\ + mov r0, #0x0\n\ + bl SetShopMenuCallback\n\ + pop {r0}\n\ + bx r0\n\ +._291:\n\ + .align 2, 0\n\ +._290:\n\ + .word gMartBuyNoSellOptionList+0x3"); +} +#endif diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 21bf29e91..0d4ebe3f0 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -17,7 +17,8 @@ #include "menu.h" #include "ewram.h" -struct UnkStruct1 { +struct UnkStruct1 +{ /*0x00*/ u8 unk00; /*0x01*/ u8 unk01; /*0x02*/ s16 unk02; @@ -29,6 +30,8 @@ struct UnkStruct1 { #define SLOTMACHINE_GFX_TILES 236 #endif +// TODO: figure out which functions are static and which are not. +#define static static void CB2_SlotMachineSetup(void); static void CB2_SlotMachineLoop(void); @@ -61,7 +64,7 @@ static bool8 sub_8102008(struct Task *task); static bool8 sub_8102034(struct Task *task); static bool8 sub_8102058(struct Task *task); static bool8 sub_8102090(struct Task *task); -static bool8 sub_81020C8(struct Task *task); +bool8 sub_81020C8(struct Task *task); static bool8 sub_81021E0(struct Task *task); static bool8 sub_81021FC(struct Task *task); static bool8 sub_8102264(struct Task *task); @@ -76,6 +79,7 @@ static bool8 sub_81023E0(struct Task *task); static bool8 sub_81023FC(struct Task *task); static bool8 sub_8102424(struct Task *task); static bool8 sub_8102460(struct Task *task); +static bool8 debug_sub_8116E74(struct Task *); static void sub_8102484(void); static void sub_81024F0(void); static bool8 sub_8102540(void); @@ -222,6 +226,15 @@ static void sub_81064B8(void); static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4); static void sub_81065DC(void); +#if DEBUG +__attribute__((section(".bss"))) u8 unk_debug_bss_1_0 = 0; +__attribute__((section(".bss"))) u8 unk_debug_bss_1_1 = 0; +__attribute__((section(".bss"))) u8 unk_debug_bss_1_2 = 0; +__attribute__((section(".bss"))) u8 unk_debug_bss_1_3 = 0; +__attribute__((section(".bss"))) u8 unk_debug_bss_1_4 = 0; +__attribute__((section(".bss"))) u32 unk_debug_bss_1_8 = 0; +#endif + static const struct UnkStruct1 *const gUnknown_083ED048[]; static const u16 gPalette_83EDE24[]; static const u8 gUnknown_083ECD04[][3]; @@ -231,10 +244,22 @@ static const u16 gUnknown_083ECE48[]; void PlaySlotMachine(u8 arg0, MainCallback cb) { +#if DEBUG + unk_debug_bss_1_1 = 0; +#endif PlaySlotMachine_Internal(arg0, cb); SetMainCallback2(CB2_SlotMachineSetup); } +#if DEBUG +void debug_sub_811609C(u8 a, void (*func)(void)) +{ + unk_debug_bss_1_1 = 1; + PlaySlotMachine_Internal(a, func); + SetMainCallback2(CB2_SlotMachineSetup); +} +#endif + static void CB2_SlotMachineSetup(void) { switch (gMain.state) @@ -366,6 +391,135 @@ static void SlotMachineSetup_2_1(void) static const s16 gUnknown_083ECCF8[][2]; +#if DEBUG +__attribute__((naked)) +static void SlotMachineSetup_0_1(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, sl\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5, r6, r7}\n\ + bl sub_81019EC\n\ + ldr r5, ._43\n\ + mov r4, #0x0\n\ + strb r4, [r5]\n\ + strb r4, [r5, #0x2]\n\ + bl Random\n\ + mov r1, #0x1\n\ + and r1, r1, r0\n\ + strb r1, [r5, #0x3]\n\ + strb r4, [r5, #0x4]\n\ + mov r0, #0x0\n\ + strh r4, [r5, #0x8]\n\ + strb r0, [r5, #0xa]\n\ + strb r0, [r5, #0xb]\n\ + ldr r0, ._43 + 4\n\ + ldr r1, ._43 + 8\n\ + add r0, r0, r1\n\ + ldrh r0, [r0]\n\ + strh r0, [r5, #0xc]\n\ + strh r4, [r5, #0xe]\n\ + strh r4, [r5, #0x10]\n\ + strh r4, [r5, #0x12]\n\ + strh r4, [r5, #0x18]\n\ + mov r0, #0x8\n\ + strh r0, [r5, #0x1a]\n\ + add r1, r5, #0\n\ + add r1, r1, #0x58\n\ + mov r0, #0xf0\n\ + strh r0, [r1]\n\ + add r1, r1, #0x2\n\ + mov r0, #0xa0\n\ + strh r0, [r1]\n\ + add r0, r5, #0\n\ + add r0, r0, #0x5c\n\ + mov r1, #0x3f\n\ + strh r1, [r0]\n\ + add r0, r0, #0x2\n\ + strh r1, [r0]\n\ + bl GetCurrentMapMusic\n\ + add r1, r5, #0\n\ + add r1, r1, #0x60\n\ + strh r0, [r1]\n\ + mov r7, #0x0\n\ + add r6, r5, #0\n\ + ldr r2, ._43 + 12\n\ + mov sl, r2\n\ + mov r0, #0x1c\n\ + add r0, r0, r6\n\ + mov r9, r0\n\ +._41:\n\ + lsl r5, r7, #0x1\n\ + mov r1, #0x22\n\ + add r1, r1, r6\n\ + mov r8, r1\n\ + add r1, r5, r1\n\ + mov r0, #0x0\n\ + strh r0, [r1]\n\ + add r4, r6, #0\n\ + add r4, r4, #0x28\n\ + add r4, r5, r4\n\ + ldrb r0, [r6, #0x3]\n\ + lsl r0, r0, #0x1\n\ + lsl r1, r7, #0x2\n\ + add r0, r0, r1\n\ + add r0, r0, sl\n\ + mov r2, #0x0\n\ + ldsh r0, [r0, r2]\n\ + mov r1, #0x15\n\ + bl __modsi3\n\ + strh r0, [r4]\n\ + add r5, r5, r9\n\ + mov r1, #0x0\n\ + ldsh r0, [r4, r1]\n\ + lsl r1, r0, #0x1\n\ + add r1, r1, r0\n\ + lsl r1, r1, #0x3\n\ + mov r2, #0xfc\n\ + lsl r2, r2, #0x1\n\ + add r0, r2, #0\n\ + sub r0, r0, r1\n\ + strh r0, [r5]\n\ + mov r1, #0x0\n\ + ldsh r0, [r5, r1]\n\ + add r1, r2, #0\n\ + bl __modsi3\n\ + strh r0, [r5]\n\ + add r0, r7, #1\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ + cmp r7, #0x2\n\ + bls ._41 @cond_branch\n\ + bl debug_sub_811B5D0\n\ + ldr r0, ._43 + 16\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._42 @cond_branch\n\ + mov r1, r8\n\ + sub r1, r1, #0x22\n\ + mov r0, #0xfa\n\ + lsl r0, r0, #0x2\n\ + strh r0, [r1, #0xc]\n\ +._42:\n\ + pop {r3, r4, r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov sl, r5\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._44:\n\ + .align 2, 0\n\ +._43:\n\ + .word +0x2000000\n\ + .word gSaveBlock1\n\ + .word 0x494\n\ + .word gUnknown_083ECCF8\n\ + .word unk_debug_bss_1_1"); +} +#else static void SlotMachineSetup_0_1(void) { u8 i; @@ -397,6 +551,7 @@ static void SlotMachineSetup_0_1(void) eSlotMachine->unk1C[i] %= 0x1f8; } } +#endif static void SlotMachineSetup_3_0(void) { @@ -441,7 +596,8 @@ static void sub_8101D04(void) sub_8101D24(CreateTask(sub_8101D24, 0)); } -static bool8 (*const gUnknown_083ECAAC[])(struct Task *task) = { +static bool8 (*const gUnknown_083ECAAC[])(struct Task *task) = +{ sub_8101D5C, sub_8101D8C, sub_8101DB0, @@ -470,7 +626,10 @@ static bool8 (*const gUnknown_083ECAAC[])(struct Task *task) = { sub_81023E0, sub_81023FC, sub_8102424, - sub_8102460 + sub_8102460, +#if DEBUG + debug_sub_8116E74, +#endif }; static void sub_8101D24(u8 taskId) @@ -523,6 +682,46 @@ static bool8 sub_8101DF4(struct Task *task) return FALSE; } +#if DEBUG +__attribute__((naked)) +static bool8 sub_8101E10(struct Task *task) +{ + asm("\ + push {lr}\n\ + mov r0, #0x0\n\ + bl sub_8104CAC\n\ + ldr r2, ._70\n\ + mov r0, #0x5\n\ + strb r0, [r2]\n\ + ldr r0, ._70 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._67 @cond_branch\n\ + ldr r0, ._70 + 8\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + bne ._69 @cond_branch\n\ +._67:\n\ + mov r0, #0xc\n\ + ldsh r1, [r2, r0]\n\ + ldr r0, ._70 + 12\n\ + cmp r1, r0\n\ + ble ._69 @cond_branch\n\ + mov r0, #0x17\n\ + strb r0, [r2]\n\ +._69:\n\ + mov r0, #0x1\n\ + pop {r1}\n\ + bx r1\n\ +._71:\n\ + .align 2, 0\n\ +._70:\n\ + .word +0x2000000\n\ + .word unk_debug_bss_1_1\n\ + .word unk_debug_bss_1_4\n\ + .word 0x270e"); +} +#else static bool8 sub_8101E10(struct Task *task) { sub_8104CAC(0); @@ -533,7 +732,205 @@ static bool8 sub_8101E10(struct Task *task) } return TRUE; } +#endif +#if DEBUG +__attribute__((naked)) +static bool8 sub_8101E3C(struct Task *task) +{ + asm("\ + push {r4, r5, lr}\n\ + ldr r0, ._77\n\ + ldrb r1, [r0]\n\ + add r3, r0, #0\n\ + ldr r5, ._77 + 4\n\ + cmp r1, #0\n\ + beq ._76 @cond_branch\n\ + ldr r2, ._77 + 8\n\ + ldrb r0, [r2]\n\ + cmp r0, #0\n\ + beq ._76 @cond_branch\n\ + ldr r4, ._77 + 12\n\ + mov r1, #0xc\n\ + ldsh r0, [r4, r1]\n\ + cmp r0, #0x3\n\ + ble ._74 @cond_branch\n\ + ldrh r1, [r5, #0x2c]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._75 @cond_branch\n\ +._74:\n\ + mov r0, #0x0\n\ + strb r0, [r2]\n\ + b ._76\n\ +._78:\n\ + .align 2, 0\n\ +._77:\n\ + .word unk_debug_bss_1_1\n\ + .word gMain\n\ + .word unk_debug_bss_1_4\n\ + .word +0x2000000\n\ +._75:\n\ + mov r0, #0x0\n\ + bl sub_8103D50\n\ + mov r0, #0x1\n\ + bl sub_8103D50\n\ + mov r0, #0x2\n\ + bl sub_8103D50\n\ + ldrh r0, [r4, #0xc]\n\ + sub r0, r0, #0x3\n\ + strh r0, [r4, #0xc]\n\ + mov r0, #0x3\n\ + strh r0, [r4, #0x12]\n\ + mov r0, #0x9\n\ + strb r0, [r4]\n\ + b ._102\n\ +._76:\n\ + ldrb r0, [r3]\n\ + cmp r0, #0\n\ + beq ._81 @cond_branch\n\ + ldrh r1, [r5, #0x2e]\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._81 @cond_branch\n\ + bl debug_sub_811B620\n\ + ldr r1, ._83\n\ + mov r0, #0x1d\n\ + strb r0, [r1]\n\ + b ._102\n\ +._84:\n\ + .align 2, 0\n\ +._83:\n\ + .word +0x2000000\n\ +._81:\n\ + ldrh r1, [r5, #0x2e]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._85 @cond_branch\n\ + mov r0, #0x0\n\ + bl sub_8104AB8\n\ + ldr r1, ._87\n\ + mov r0, #0x8\n\ + strb r0, [r1]\n\ + b ._102\n\ +._88:\n\ + .align 2, 0\n\ +._87:\n\ + .word +0x2000000\n\ +._85:\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._89 @cond_branch\n\ + ldr r2, ._94\n\ + mov r3, #0xc\n\ + ldsh r0, [r2, r3]\n\ + sub r0, r0, #0x3\n\ + mov r3, #0x12\n\ + ldsh r1, [r2, r3]\n\ + add r0, r0, r1\n\ + cmp r0, #0\n\ + blt ._90 @cond_branch\n\ + ldrh r4, [r2, #0x12]\n\ + add r0, r1, #0\n\ + cmp r0, #0x2\n\ + bgt ._91 @cond_branch\n\ +._92:\n\ + lsl r0, r4, #0x18\n\ + lsr r0, r0, #0x18\n\ + bl sub_8103D50\n\ + lsl r0, r4, #0x10\n\ + mov r2, #0x80\n\ + lsl r2, r2, #0x9\n\ + add r0, r0, r2\n\ + lsr r4, r0, #0x10\n\ + asr r0, r0, #0x10\n\ + cmp r0, #0x2\n\ + ble ._92 @cond_branch\n\ +._91:\n\ + ldr r1, ._94\n\ + ldrh r0, [r1, #0xc]\n\ + sub r0, r0, #0x3\n\ + ldrh r3, [r1, #0x12]\n\ + add r0, r0, r3\n\ + strh r0, [r1, #0xc]\n\ + mov r0, #0x3\n\ + strh r0, [r1, #0x12]\n\ + mov r0, #0x9\n\ + strb r0, [r1]\n\ + mov r0, #0x5f\n\ + bl PlaySE\n\ + b ._102\n\ +._95:\n\ + .align 2, 0\n\ +._94:\n\ + .word +0x2000000\n\ +._90:\n\ + mov r0, #0x6\n\ + b ._96\n\ +._89:\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._98 @cond_branch\n\ + ldr r4, ._103\n\ + mov r1, #0xc\n\ + ldsh r0, [r4, r1]\n\ + cmp r0, #0\n\ + beq ._98 @cond_branch\n\ + mov r0, #0x5f\n\ + bl PlaySE\n\ + ldrb r0, [r4, #0x12]\n\ + bl sub_8103D50\n\ + ldrh r0, [r4, #0xc]\n\ + sub r0, r0, #0x1\n\ + strh r0, [r4, #0xc]\n\ + ldrh r0, [r4, #0x12]\n\ + add r0, r0, #0x1\n\ + strh r0, [r4, #0x12]\n\ +._98:\n\ + ldr r0, ._103\n\ + mov r2, #0x12\n\ + ldsh r1, [r0, r2]\n\ + add r2, r0, #0\n\ + ldr r5, ._103 + 4\n\ + cmp r1, #0x2\n\ + bgt ._99 @cond_branch\n\ + cmp r1, #0\n\ + beq ._101 @cond_branch\n\ + ldrh r1, [r5, #0x2e]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._101 @cond_branch\n\ +._99:\n\ + mov r0, #0x9\n\ + strb r0, [r2]\n\ +._101:\n\ + ldrh r1, [r5, #0x2e]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._102 @cond_branch\n\ + mov r0, #0x15\n\ +._96:\n\ + strb r0, [r2]\n\ +._102:\n\ + mov r0, #0x0\n\ + pop {r4, r5}\n\ + pop {r1}\n\ + bx r1\n\ +._104:\n\ + .align 2, 0\n\ +._103:\n\ + .word +0x2000000\n\ + .word gMain"); +} +#else static bool8 sub_8101E3C(struct Task *task) { s16 i; @@ -581,6 +978,7 @@ static bool8 sub_8101E3C(struct Task *task) } return FALSE; } +#endif static void sub_8101F2C(const u8 *str) { @@ -614,6 +1012,71 @@ static bool8 sub_8101F88(struct Task *task) return FALSE; } +#if DEBUG +__attribute__((naked)) +static bool8 sub_8101FA4(struct Task *task) +{ + asm("\ + push {r4, lr}\n\ + add r4, r0, #0\n\ + bl sub_8102484\n\ + bl sub_8104DA4\n\ + mov r0, #0x0\n\ + bl sub_8102DEC\n\ + mov r0, #0x1\n\ + bl sub_8102DEC\n\ + mov r0, #0x2\n\ + bl sub_8102DEC\n\ + mov r0, #0x0\n\ + strh r0, [r4, #0x8]\n\ + ldr r4, ._115\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x20\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._113 @cond_branch\n\ + bl sub_810430C\n\ + mov r0, #0xa\n\ + b ._114\n\ +._116:\n\ + .align 2, 0\n\ +._115:\n\ + .word +0x2000000\n\ +._113:\n\ + mov r0, #0x1\n\ + bl sub_8104CAC\n\ + mov r0, #0xb\n\ +._114:\n\ + strb r0, [r4]\n\ + ldr r4, ._119\n\ + mov r0, #0x8\n\ + strh r0, [r4, #0x1a]\n\ + ldrb r0, [r4, #0xa]\n\ + cmp r0, #0\n\ + beq ._117 @cond_branch\n\ + bl dp15_jump_random_unknown\n\ + strh r0, [r4, #0x1a]\n\ +._117:\n\ + ldr r0, ._119 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._118 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x68\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._118:\n\ + mov r0, #0x0\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ +._120:\n\ + .align 2, 0\n\ +._119:\n\ + .word +0x2000000\n\ + .word unk_debug_bss_1_1"); +} +#else static bool8 sub_8101FA4(struct Task *task) { sub_8102484(); @@ -639,6 +1102,7 @@ static bool8 sub_8101FA4(struct Task *task) } return FALSE; } +#endif static bool8 sub_8102008(struct Task *task) { @@ -651,6 +1115,52 @@ static bool8 sub_8102008(struct Task *task) return FALSE; } +#if DEBUG +__attribute__((naked)) +static bool8 sub_8102034(struct Task *task) +{ + asm("\ + push {r4, lr}\n\ + ldrh r1, [r0, #0x8]\n\ + add r1, r1, #0x1\n\ + strh r1, [r0, #0x8]\n\ + lsl r1, r1, #0x10\n\ + asr r1, r1, #0x10\n\ + cmp r1, #0x1d\n\ + ble ._124 @cond_branch\n\ + ldr r0, ._127\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._126 @cond_branch\n\ + ldr r0, ._127 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._126 @cond_branch\n\ + ldr r4, ._127 + 8\n\ + bl Random\n\ + mov r1, #0x1f\n\ + and r1, r1, r0\n\ + add r1, r1, #0x1\n\ + str r1, [r4]\n\ +._126:\n\ + bl sub_81024F0\n\ + ldr r1, ._127 + 12\n\ + mov r0, #0xc\n\ + strb r0, [r1]\n\ +._124:\n\ + mov r0, #0x0\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ +._128:\n\ + .align 2, 0\n\ +._127:\n\ + .word unk_debug_bss_1_1\n\ + .word unk_debug_bss_1_4\n\ + .word unk_debug_bss_1_8\n\ + .word +0x2000000"); +} +#else static bool8 sub_8102034(struct Task *task) { if (++task->data[0] >= 30) @@ -660,7 +1170,77 @@ static bool8 sub_8102034(struct Task *task) } return FALSE; } +#endif +#if DEBUG +__attribute__((naked)) +static bool8 sub_8102058(struct Task *task) +{ + asm("\ + push {r4, r5, lr}\n\ + ldr r0, ._133\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._130 @cond_branch\n\ + ldr r0, ._133 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._130 @cond_branch\n\ + ldr r5, ._133 + 8\n\ + ldr r0, [r5]\n\ + sub r0, r0, #0x1\n\ + str r0, [r5]\n\ + cmp r0, #0\n\ + bne ._135 @cond_branch\n\ + mov r0, #0x18\n\ + bl PlaySE\n\ + ldr r4, ._133 + 12\n\ + ldrb r0, [r4, #0x18]\n\ + bl sub_8102E1C\n\ + ldrb r0, [r4, #0x18]\n\ + bl sub_8103C14\n\ + bl Random\n\ + mov r1, #0x1f\n\ + and r1, r1, r0\n\ + add r1, r1, #0x1\n\ + str r1, [r5]\n\ + b ._132\n\ +._134:\n\ + .align 2, 0\n\ +._133:\n\ + .word unk_debug_bss_1_1\n\ + .word unk_debug_bss_1_4\n\ + .word unk_debug_bss_1_8\n\ + .word +0x2000000\n\ +._130:\n\ + ldr r0, ._136\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._135 @cond_branch\n\ + mov r0, #0x18\n\ + bl PlaySE\n\ + ldr r4, ._136 + 4\n\ + ldrb r0, [r4, #0x18]\n\ + bl sub_8102E1C\n\ + ldrb r0, [r4, #0x18]\n\ + bl sub_8103C14\n\ +._132:\n\ + mov r0, #0xd\n\ + strb r0, [r4]\n\ +._135:\n\ + mov r0, #0x0\n\ + pop {r4, r5}\n\ + pop {r1}\n\ + bx r1\n\ +._137:\n\ + .align 2, 0\n\ +._136:\n\ + .word gMain\n\ + .word +0x2000000"); +} +#else static bool8 sub_8102058(struct Task *task) { if (gMain.newKeys & A_BUTTON) @@ -672,7 +1252,121 @@ static bool8 sub_8102058(struct Task *task) } return FALSE; } +#endif +#if DEBUG +__attribute__((naked)) +static bool8 sub_8102090(struct Task *task) +{ + asm("\ + push {r4, lr}\n\ + ldr r4, ._146\n\ + ldrb r0, [r4, #0x18]\n\ + bl sub_8102E40\n\ + lsl r0, r0, #0x18\n\ + lsr r2, r0, #0x18\n\ + cmp r2, #0\n\ + bne ._138 @cond_branch\n\ + ldrh r0, [r4, #0x18]\n\ + add r0, r0, #0x1\n\ + strh r0, [r4, #0x18]\n\ + mov r1, #0xc\n\ + strb r1, [r4]\n\ + lsl r0, r0, #0x10\n\ + asr r0, r0, #0x10\n\ + cmp r0, #0x2\n\ + ble ._161 @cond_branch\n\ + mov r0, #0xe\n\ + strb r0, [r4]\n\ + ldr r0, ._146 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x8\n\ + beq ._140 @cond_branch\n\ + cmp r0, #0x8\n\ + bgt ._141 @cond_branch\n\ + cmp r0, #0x2\n\ + beq ._142 @cond_branch\n\ + cmp r0, #0x2\n\ + bgt ._143 @cond_branch\n\ + cmp r0, #0x1\n\ + beq ._144 @cond_branch\n\ + b ._161\n\ +._147:\n\ + .align 2, 0\n\ +._146:\n\ + .word +0x2000000\n\ + .word unk_debug_bss_1_0\n\ +._143:\n\ + cmp r0, #0x4\n\ + beq ._148 @cond_branch\n\ + b ._161\n\ +._141:\n\ + cmp r0, #0x40\n\ + beq ._150 @cond_branch\n\ + cmp r0, #0x40\n\ + bgt ._151 @cond_branch\n\ + cmp r0, #0x10\n\ + beq ._152 @cond_branch\n\ + b ._161\n\ +._151:\n\ + cmp r0, #0x80\n\ + beq ._154 @cond_branch\n\ + b ._161\n\ +._142:\n\ + mov r0, #0x14\n\ + strh r0, [r4, #0x28]\n\ + strh r0, [r4, #0x2a]\n\ + mov r0, #0x12\n\ + b ._160\n\ +._144:\n\ + mov r0, #0x14\n\ + strh r0, [r4, #0x28]\n\ + strh r0, [r4, #0x2a]\n\ + mov r0, #0x12\n\ + b ._160\n\ +._148:\n\ + mov r0, #0x3\n\ + strh r0, [r4, #0x28]\n\ + mov r0, #0x1\n\ + strh r0, [r4, #0x2a]\n\ + mov r0, #0x2\n\ + b ._160\n\ +._140:\n\ + strh r2, [r4, #0x28]\n\ + mov r0, #0x2\n\ + strh r0, [r4, #0x2a]\n\ + mov r0, #0x3\n\ + b ._160\n\ +._152:\n\ + mov r0, #0x2\n\ + strh r0, [r4, #0x28]\n\ + mov r0, #0x5\n\ + strh r0, [r4, #0x2a]\n\ + mov r0, #0x14\n\ + b ._160\n\ +._150:\n\ + mov r0, #0x13\n\ + strh r0, [r4, #0x28]\n\ + strh r0, [r4, #0x2a]\n\ + strh r2, [r4, #0x2c]\n\ + b ._161\n\ +._154:\n\ + mov r0, #0x13\n\ + strh r0, [r4, #0x28]\n\ + strh r0, [r4, #0x2a]\n\ +._160:\n\ + strh r0, [r4, #0x2c]\n\ +._161:\n\ + mov r0, #0x1\n\ + b ._162\n\ +._138:\n\ + mov r0, #0x0\n\ +._162:\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1"); +} +#else static bool8 sub_8102090(struct Task *task) { if (!sub_8102E40(eSlotMachine->unk18)) @@ -687,8 +1381,169 @@ static bool8 sub_8102090(struct Task *task) } return FALSE; } +#endif -static bool8 sub_81020C8(struct Task *task) +#if DEBUG +__attribute__((naked)) +bool8 sub_81020C8(struct Task *task) +{ + asm("\ + push {r4, lr}\n\ + ldr r4, ._165\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0xc0\n\ + and r0, r0, r1\n\ + strb r0, [r4, #0x4]\n\ + bl CheckMatch\n\ + ldrb r0, [r4, #0xa]\n\ + cmp r0, #0\n\ + beq ._163 @cond_branch\n\ + sub r0, r0, #0x1\n\ + strb r0, [r4, #0xa]\n\ + ldrb r0, [r4, #0xb]\n\ + add r0, r0, #0x1\n\ + strb r0, [r4, #0xb]\n\ + b ._164\n\ +._166:\n\ + .align 2, 0\n\ +._165:\n\ + .word +0x2000000\n\ +._163:\n\ + bl debug_sub_811B894\n\ +._164:\n\ + ldr r4, ._171\n\ + ldrh r0, [r4, #0x8]\n\ + cmp r0, #0\n\ + beq ._167 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x6c\n\ + mov r2, #0xe\n\ + ldsh r1, [r4, r2]\n\ + bl debug_sub_811B5B4\n\ + mov r0, #0xf\n\ + strb r0, [r4]\n\ + bl sub_8102A24\n\ + bl sub_8103F70\n\ + ldrh r0, [r4, #0x10]\n\ + ldrh r1, [r4, #0xe]\n\ + sub r0, r0, r1\n\ + strh r0, [r4, #0x10]\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + bge ._168 @cond_branch\n\ + mov r0, #0x0\n\ + strh r0, [r4, #0x10]\n\ +._168:\n\ + ldrh r1, [r4, #0x8]\n\ + mov r0, #0xc0\n\ + lsl r0, r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._169 @cond_branch\n\ + ldr r0, ._171 + 4\n\ + bl PlayFanfare\n\ + mov r0, #0x6\n\ + bl sub_8104CAC\n\ + b ._174\n\ +._172:\n\ + .align 2, 0\n\ +._171:\n\ + .word +0x2000000\n\ + .word 0x185\n\ +._169:\n\ + mov r0, #0x40\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._173 @cond_branch\n\ + ldr r0, ._175\n\ + bl PlayFanfare\n\ + mov r0, #0x5\n\ + bl sub_8104CAC\n\ + b ._174\n\ +._176:\n\ + .align 2, 0\n\ +._175:\n\ + .word 0x185\n\ +._173:\n\ + mov r0, #0xc3\n\ + lsl r0, r0, #0x1\n\ + bl PlayFanfare\n\ + mov r0, #0x2\n\ + bl sub_8104CAC\n\ +._174:\n\ + ldr r1, ._183\n\ + ldrh r3, [r1, #0x8]\n\ + mov r0, #0xe0\n\ + lsl r0, r0, #0x1\n\ + and r0, r0, r3\n\ + add r2, r1, #0\n\ + cmp r0, #0\n\ + beq ._179 @cond_branch\n\ + ldrb r1, [r2, #0x4]\n\ + mov r0, #0x3f\n\ + and r0, r0, r1\n\ + mov r1, #0x0\n\ + strb r0, [r2, #0x4]\n\ + mov r0, #0xc0\n\ + lsl r0, r0, #0x1\n\ + and r0, r0, r3\n\ + cmp r0, #0\n\ + beq ._179 @cond_branch\n\ + strb r1, [r2, #0xa]\n\ + strb r1, [r2, #0xb]\n\ + strb r1, [r2, #0x3]\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x1\n\ + and r0, r0, r3\n\ + cmp r0, #0\n\ + beq ._179 @cond_branch\n\ + mov r0, #0x1\n\ + strb r0, [r2, #0x3]\n\ +._179:\n\ + ldrh r1, [r2, #0x8]\n\ + mov r0, #0x20\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._185 @cond_branch\n\ + ldrb r0, [r2, #0x2]\n\ + cmp r0, #0xf\n\ + bhi ._185 @cond_branch\n\ + add r0, r0, #0x1\n\ + strb r0, [r2, #0x2]\n\ + ldrb r0, [r2, #0x2]\n\ + bl sub_8104064\n\ + b ._185\n\ +._184:\n\ + .align 2, 0\n\ +._183:\n\ + .word +0x2000000\n\ +._167:\n\ + mov r0, #0x3\n\ + bl sub_8104CAC\n\ + mov r0, #0x14\n\ + strb r0, [r4]\n\ + ldrh r0, [r4, #0x12]\n\ + ldrh r1, [r4, #0x10]\n\ + add r0, r0, r1\n\ + strh r0, [r4, #0x10]\n\ + lsl r0, r0, #0x10\n\ + asr r0, r0, #0x10\n\ + ldr r1, ._186\n\ + cmp r0, r1\n\ + ble ._185 @cond_branch\n\ + strh r1, [r4, #0x10]\n\ +._185:\n\ + mov r0, #0x0\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ +._187:\n\ + .align 2, 0\n\ +._186:\n\ + .word 0x270f"); +} +#else +bool8 sub_81020C8(struct Task *task) { eSlotMachine->unk04 &= 0xc0; CheckMatch(); @@ -752,6 +1607,7 @@ static bool8 sub_81020C8(struct Task *task) } return FALSE; } +#endif static bool8 sub_81021E0(struct Task *task) { @@ -902,6 +1758,48 @@ static bool8 sub_81023FC(struct Task *task) return FALSE; } +#if DEBUG +__attribute__((naked)) +static bool8 sub_8102424(struct Task *task) +{ + asm("\ + push {lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r0, ._234\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + bne ._233 @cond_branch\n\ + ldr r0, ._234 + 4\n\ + ldr r1, ._234 + 8\n\ + ldrh r1, [r1, #0xc]\n\ + ldr r2, ._234 + 12\n\ + add r0, r0, r2\n\ + strh r1, [r0]\n\ +._233:\n\ + mov r0, #0x1\n\ + neg r0, r0\n\ + mov r1, #0x0\n\ + str r1, [sp]\n\ + mov r2, #0x0\n\ + mov r3, #0x10\n\ + bl BeginNormalPaletteFade\n\ + ldr r1, ._234 + 8\n\ + ldrb r0, [r1]\n\ + add r0, r0, #0x1\n\ + strb r0, [r1]\n\ + mov r0, #0x0\n\ + add sp, sp, #0x4\n\ + pop {r1}\n\ + bx r1\n\ +._235:\n\ + .align 2, 0\n\ +._234:\n\ + .word unk_debug_bss_1_1\n\ + .word gSaveBlock1\n\ + .word +0x2000000\n\ + .word 0x494"); +} +#else static bool8 sub_8102424(struct Task *task) { gSaveBlock1.coins = eSlotMachine->coins; @@ -909,6 +1807,7 @@ static bool8 sub_8102424(struct Task *task) eSlotMachine->state++; return FALSE; } +#endif static bool8 sub_8102460(struct Task *task) { @@ -919,6 +1818,272 @@ static bool8 sub_8102460(struct Task *task) return FALSE; } +#if DEBUG +__attribute__((naked)) +static bool8 debug_sub_8116E74(struct Task *task) +{ + asm("\ + push {lr}\n\ + bl debug_sub_811B634\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._239 @cond_branch\n\ + ldr r1, ._240\n\ + mov r0, #0x5\n\ + strb r0, [r1]\n\ +._239:\n\ + mov r0, #0x0\n\ + pop {r1}\n\ + bx r1\n\ +._241:\n\ + .align 2, 0\n\ +._240:\n\ + .word +0x2000000"); +} +#endif + +#if DEBUG +__attribute__((naked)) +static void sub_8102484(void) +{ + asm("\ + push {r4, r5, r6, lr}\n\ + ldr r0, ._256\n\ + ldrb r2, [r0, #0xa]\n\ + add r4, r0, #0\n\ + cmp r2, #0\n\ + beq ._242 @cond_branch\n\ + b ._270\n\ +._242:\n\ + ldr r0, ._256 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._245 @cond_branch\n\ + ldr r3, ._256 + 8\n\ + ldrb r0, [r3]\n\ + cmp r0, #0\n\ + beq ._245 @cond_branch\n\ + ldr r0, ._256 + 12\n\ + ldrb r1, [r0]\n\ + strb r1, [r4, #0x4]\n\ + strb r2, [r3]\n\ + strb r2, [r0]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._246 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x88\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._246:\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x40\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._247 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x84\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._247:\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x20\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._248 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x8c\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._248:\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x10\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._249 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x80\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._249:\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._250 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x7c\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._250:\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._251 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x78\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._251:\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._252 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x74\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._252:\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._253 @cond_branch\n\ + b ._270\n\ +._253:\n\ + add r0, r4, #0\n\ + add r0, r0, #0x70\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ + b ._270\n\ +._257:\n\ + .align 2, 0\n\ +._256:\n\ + .word +0x2000000\n\ + .word unk_debug_bss_1_1\n\ + .word unk_debug_bss_1_2\n\ + .word unk_debug_bss_1_3\n\ +._245:\n\ + add r5, r4, #0\n\ + ldrb r1, [r5, #0x4]\n\ + mov r0, #0xc0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._270 @cond_branch\n\ + bl sub_8102540\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._260 @cond_branch\n\ + bl sub_8102578\n\ + lsl r0, r0, #0x18\n\ + lsr r6, r0, #0x18\n\ + cmp r6, #0x3\n\ + beq ._260 @cond_branch\n\ + ldr r1, ._271\n\ + lsl r0, r6, #0x1\n\ + add r0, r0, r1\n\ + ldrb r1, [r0]\n\ + ldrb r0, [r5, #0x4]\n\ + orr r0, r0, r1\n\ + strb r0, [r5, #0x4]\n\ + mov r1, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._261 @cond_branch\n\ + add r0, r5, #0\n\ + add r0, r0, #0x88\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._261:\n\ + ldrb r1, [r5, #0x4]\n\ + mov r0, #0x40\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._262 @cond_branch\n\ + add r0, r5, #0\n\ + add r0, r0, #0x84\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._262:\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x20\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._263 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x8c\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._263:\n\ + cmp r6, #0x1\n\ + bne ._270 @cond_branch\n\ +._260:\n\ + bl sub_81025BC\n\ + lsl r0, r0, #0x18\n\ + lsr r6, r0, #0x18\n\ + cmp r6, #0x5\n\ + beq ._270 @cond_branch\n\ + ldr r4, ._271 + 4\n\ + ldr r1, ._271 + 8\n\ + lsl r0, r6, #0x1\n\ + add r0, r0, r1\n\ + ldrb r1, [r0]\n\ + ldrb r0, [r4, #0x4]\n\ + orr r0, r0, r1\n\ + strb r0, [r4, #0x4]\n\ + mov r1, #0x10\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._266 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x80\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._266:\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._267 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x7c\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._267:\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._268 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x78\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._268:\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._269 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x74\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._269:\n\ + ldrb r1, [r4, #0x4]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._270 @cond_branch\n\ + add r0, r4, #0\n\ + add r0, r0, #0x70\n\ + mov r1, #0x1\n\ + bl debug_sub_811B5B4\n\ +._270:\n\ + pop {r4, r5, r6}\n\ + pop {r0}\n\ + bx r0\n\ +._272:\n\ + .align 2, 0\n\ +._271:\n\ + .word gUnknown_083ECE42\n\ + .word +0x2000000\n\ + .word gUnknown_083ECE48"); +} +#else static void sub_8102484(void) { u8 r3; @@ -944,6 +2109,7 @@ static void sub_8102484(void) } } } +#endif static void sub_81024F0(void) { @@ -2854,7 +4020,8 @@ static void sub_8104C5C(void) static void LoadSlotMachineWheelOverlay(void); -static void sub_8104CAC(u8 arg0) { +static void sub_8104CAC(u8 arg0) +{ u8 i; struct Task *task; @@ -2875,9 +4042,7 @@ static void sub_8104CAC(u8 arg0) { #ifdef GERMAN if (arg0 == 5 && i <= 2) - { gSprites[spriteId].invisible = TRUE; - } #endif } } @@ -3949,7 +5114,8 @@ static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) { vram[16 * 32 + 1 + arg0] = arg4; } -static void sub_81065DC(void) { +static void sub_81065DC(void) +{ s16 y, x; u16 *screen; @@ -3965,7 +5131,1226 @@ static void sub_81065DC(void) { } } -static const u8 sReelSymbols[][21] = { +#if DEBUG +__attribute__((naked)) +void debug_sub_811B1C4() +{ + asm( + " ldr r1, .__1_\n" + " ldrb r0, [r1]\n" + " mov r3, #0x2\n" + " orr r0, r0, r3\n" + " strb r0, [r1]\n" + " ldr r2, .__1_ + 4\n" + " ldrb r1, [r2]\n" + " mov r0, #0x2\n" + " eor r1, r1, r0\n" + " neg r0, r1\n" + " orr r0, r0, r1\n" + " asr r0, r0, #0x1f\n" + " and r0, r0, r3\n" + " strb r0, [r2]\n" + " bx lr\n" + ".__2_:\n" + " .align 2, 0\n" + ".__1_:\n" + " .word unk_debug_bss_1_3\n" + " .word unk_debug_bss_1_0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B1EC() +{ + asm( + " ldr r2, .__3\n" + " ldrb r0, [r2]\n" + " mov r1, #0x1\n" + " orr r0, r0, r1\n" + " strb r0, [r2]\n" + " ldr r2, .__3 + 4\n" + " ldrb r0, [r2]\n" + " mov r1, #0x1\n" + " eor r0, r0, r1\n" + " neg r0, r0\n" + " lsr r0, r0, #0x1f\n" + " strb r0, [r2]\n" + " bx lr\n" + ".__4:\n" + " .align 2, 0\n" + ".__3:\n" + " .word unk_debug_bss_1_3\n" + " .word unk_debug_bss_1_0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B210() +{ + asm( + " ldr r1, .__5\n" + " ldrb r0, [r1]\n" + " mov r3, #0x4\n" + " orr r0, r0, r3\n" + " strb r0, [r1]\n" + " ldr r2, .__5 + 4\n" + " ldrb r1, [r2]\n" + " mov r0, #0x4\n" + " eor r1, r1, r0\n" + " neg r0, r1\n" + " orr r0, r0, r1\n" + " asr r0, r0, #0x1f\n" + " and r0, r0, r3\n" + " strb r0, [r2]\n" + " bx lr\n" + ".__6:\n" + " .align 2, 0\n" + ".__5:\n" + " .word unk_debug_bss_1_3\n" + " .word unk_debug_bss_1_0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B238() +{ + asm( + " ldr r1, .__7\n" + " ldrb r0, [r1]\n" + " mov r3, #0x8\n" + " orr r0, r0, r3\n" + " strb r0, [r1]\n" + " ldr r2, .__7 + 4\n" + " ldrb r1, [r2]\n" + " mov r0, #0x8\n" + " eor r1, r1, r0\n" + " neg r0, r1\n" + " orr r0, r0, r1\n" + " asr r0, r0, #0x1f\n" + " and r0, r0, r3\n" + " strb r0, [r2]\n" + " bx lr\n" + ".__8:\n" + " .align 2, 0\n" + ".__7:\n" + " .word unk_debug_bss_1_3\n" + " .word unk_debug_bss_1_0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B260() +{ + asm( + " ldr r1, .__9\n" + " ldrb r0, [r1]\n" + " mov r3, #0x10\n" + " orr r0, r0, r3\n" + " strb r0, [r1]\n" + " ldr r2, .__9 + 4\n" + " ldrb r1, [r2]\n" + " mov r0, #0x10\n" + " eor r1, r1, r0\n" + " neg r0, r1\n" + " orr r0, r0, r1\n" + " asr r0, r0, #0x1f\n" + " and r0, r0, r3\n" + " strb r0, [r2]\n" + " bx lr\n" + ".__10:\n" + " .align 2, 0\n" + ".__9:\n" + " .word unk_debug_bss_1_3\n" + " .word unk_debug_bss_1_0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B288() +{ + asm( + " ldr r1, .__11\n" + " ldrb r0, [r1]\n" + " mov r3, #0x40\n" + " orr r0, r0, r3\n" + " strb r0, [r1]\n" + " ldr r2, .__11 + 4\n" + " ldrb r1, [r2]\n" + " mov r0, #0x40\n" + " eor r1, r1, r0\n" + " neg r0, r1\n" + " orr r0, r0, r1\n" + " asr r0, r0, #0x1f\n" + " and r0, r0, r3\n" + " strb r0, [r2]\n" + " bx lr\n" + ".__12:\n" + " .align 2, 0\n" + ".__11:\n" + " .word unk_debug_bss_1_3\n" + " .word unk_debug_bss_1_0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B2B0() +{ + asm( + " ldr r1, .__13\n" + " ldrb r0, [r1]\n" + " mov r3, #0x80\n" + " orr r0, r0, r3\n" + " strb r0, [r1]\n" + " ldr r2, .__13 + 4\n" + " ldrb r1, [r2]\n" + " mov r0, #0x80\n" + " eor r1, r1, r0\n" + " neg r0, r1\n" + " orr r0, r0, r1\n" + " asr r0, r0, #0x1f\n" + " and r0, r0, r3\n" + " strb r0, [r2]\n" + " bx lr\n" + ".__14:\n" + " .align 2, 0\n" + ".__13:\n" + " .word unk_debug_bss_1_3\n" + " .word unk_debug_bss_1_0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B2D8() +{ + asm( + " ldr r0, .__15\n" + " ldrb r1, [r0]\n" + " mov r2, #0x20\n" + " orr r1, r1, r2\n" + " strb r1, [r0]\n" + " bx lr\n" + ".__16:\n" + " .align 2, 0\n" + ".__15:\n" + " .word unk_debug_bss_1_3\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B2E8() +{ + asm( + " push {lr}\n" + " add sp, sp, #0xfffffffc\n" + " ldr r0, .__17\n" + " ldrb r1, [r0, #0x1]\n" + " add r1, r1, #0x1\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x1\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0x6\n" + " mov r2, #0x1\n" + " bl Menu_PrintText\n" + " add sp, sp, #0x4\n" + " pop {r0}\n" + " bx r0\n" + ".__18:\n" + " .align 2, 0\n" + ".__17:\n" + " .word +0x2000000\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B310() +{ + asm( + " push {r4, lr}\n" + " add sp, sp, #0xfffffff8\n" + " ldr r0, .__21\n" + " mov r1, #0x1\n" + " mov r2, #0x1\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 4\n" + " mov r1, #0x1\n" + " mov r2, #0x3\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 8\n" + " mov r1, #0x1\n" + " mov r2, #0x5\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 12\n" + " mov r1, #0x1\n" + " mov r2, #0x7\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 16\n" + " mov r1, #0x1\n" + " mov r2, #0x9\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 20\n" + " mov r1, #0x1\n" + " mov r2, #0xb\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 24\n" + " mov r1, #0x1\n" + " mov r2, #0xd\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 28\n" + " mov r1, #0x1\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 32\n" + " mov r1, #0x1\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 36\n" + " mov r1, #0xf\n" + " mov r2, #0x1\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 40\n" + " mov r1, #0xf\n" + " mov r2, #0x3\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 44\n" + " mov r1, #0xf\n" + " mov r2, #0x5\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 48\n" + " mov r1, #0xf\n" + " mov r2, #0x7\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 52\n" + " mov r1, #0xf\n" + " mov r2, #0x9\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 56\n" + " mov r1, #0xf\n" + " mov r2, #0xb\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 60\n" + " mov r1, #0xf\n" + " mov r2, #0xd\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 64\n" + " mov r1, #0xf\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 68\n" + " mov r1, #0xf\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + " ldr r0, .__21 + 72\n" + " ldrb r0, [r0, #0x3]\n" + " cmp r0, #0\n" + " bne .__19 @cond_branch\n" + " ldr r0, .__21 + 76\n" + " mov r1, #0xa\n" + " mov r2, #0x9\n" + " bl Menu_PrintText\n" + " b .__20\n" + ".__22:\n" + " .align 2, 0\n" + ".__21:\n" + " .word Str_841B1C4\n" + " .word Str_841B1CB\n" + " .word Str_841B1D4\n" + " .word Str_841B1DB\n" + " .word Str_841B1E2\n" + " .word Str_841B1E8\n" + " .word Str_841B1F3\n" + " .word Str_841B202\n" + " .word Str_841B24C\n" + " .word Str_841B211\n" + " .word Str_841B219\n" + " .word Str_841B220\n" + " .word Str_841B227\n" + " .word Str_841B22E\n" + " .word Str_841B235\n" + " .word Str_841B23B\n" + " .word Str_841B23F\n" + " .word Str_841B243\n" + " .word +0x2000000\n" + " .word Str_841B246\n" + ".__19:\n" + " ldr r0, .__30\n" + " mov r1, #0xa\n" + " mov r2, #0x9\n" + " bl Menu_PrintText\n" + ".__20:\n" + " ldr r4, .__30 + 4\n" + " ldr r1, [r4, #0x68]\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0xa\n" + " mov r2, #0x3\n" + " bl Menu_PrintText\n" + " ldr r1, [r4, #0x6c]\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0xa\n" + " mov r2, #0x5\n" + " bl Menu_PrintText\n" + " mov r0, #0x10\n" + " ldsh r1, [r4, r0]\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0xa\n" + " mov r2, #0x7\n" + " bl Menu_PrintText\n" + " ldr r1, [r4, #0x70]\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0x14\n" + " mov r2, #0x3\n" + " bl Menu_PrintText\n" + " ldr r1, [r4, #0x74]\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0x14\n" + " mov r2, #0x5\n" + " bl Menu_PrintText\n" + " ldr r1, [r4, #0x78]\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0x14\n" + " mov r2, #0x7\n" + " bl Menu_PrintText\n" + " ldr r1, [r4, #0x7c]\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0x14\n" + " mov r2, #0x9\n" + " bl Menu_PrintText\n" + " add r0, r4, #0\n" + " add r0, r0, #0x80\n" + " ldr r1, [r0]\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0x14\n" + " mov r2, #0xb\n" + " bl Menu_PrintText\n" + " add r0, r4, #0\n" + " add r0, r0, #0x84\n" + " ldr r1, [r0]\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0x14\n" + " mov r2, #0xd\n" + " bl Menu_PrintText\n" + " add r0, r4, #0\n" + " add r0, r0, #0x88\n" + " ldr r1, [r0]\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0x14\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " add r0, r4, #0\n" + " add r0, r0, #0x8c\n" + " ldr r1, [r0]\n" + " mov r0, sp\n" + " mov r2, #0x2\n" + " mov r3, #0x4\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, sp\n" + " mov r1, #0x14\n" + " mov r2, #0x11\n" + " bl Menu_PrintText\n" + " ldr r1, .__30 + 8\n" + " ldrb r0, [r1]\n" + " cmp r0, #0\n" + " beq .__23 @cond_branch\n" + " mov r2, #0x0\n" + " cmp r0, #0x8\n" + " beq .__24 @cond_branch\n" + " cmp r0, #0x8\n" + " bgt .__25 @cond_branch\n" + " cmp r0, #0x2\n" + " beq .__26 @cond_branch\n" + " cmp r0, #0x2\n" + " bgt .__27 @cond_branch\n" + " cmp r0, #0x1\n" + " beq .__28 @cond_branch\n" + " b .__45\n" + ".__31:\n" + " .align 2, 0\n" + ".__30:\n" + " .word Str_841B249\n" + " .word +0x2000000\n" + " .word unk_debug_bss_1_0\n" + ".__27:\n" + " cmp r0, #0x4\n" + " beq .__32 @cond_branch\n" + " b .__45\n" + ".__25:\n" + " cmp r0, #0x40\n" + " beq .__34 @cond_branch\n" + " cmp r0, #0x40\n" + " bgt .__35 @cond_branch\n" + " cmp r0, #0x10\n" + " beq .__36 @cond_branch\n" + " b .__45\n" + ".__35:\n" + " cmp r0, #0x80\n" + " beq .__38 @cond_branch\n" + " b .__45\n" + ".__26:\n" + " mov r2, #0x3\n" + " b .__45\n" + ".__28:\n" + " mov r2, #0x5\n" + " b .__45\n" + ".__32:\n" + " mov r2, #0x7\n" + " b .__45\n" + ".__24:\n" + " mov r2, #0x9\n" + " b .__45\n" + ".__36:\n" + " mov r2, #0xb\n" + " b .__45\n" + ".__34:\n" + " mov r2, #0xd\n" + " b .__45\n" + ".__38:\n" + " mov r2, #0xf\n" + ".__45:\n" + " ldr r0, .__46\n" + " mov r1, #0x17\n" + " bl Menu_PrintText\n" + ".__23:\n" + " bl debug_sub_811B2E8\n" + " add sp, sp, #0x8\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + ".__47:\n" + " .align 2, 0\n" + ".__46:\n" + " .word Str_841B26D\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B5B4() +{ + asm( + " push {lr}\n" + " add r2, r0, #0\n" + " ldr r0, [r2]\n" + " add r0, r0, r1\n" + " str r0, [r2]\n" + " ldr r1, .__49\n" + " cmp r0, r1\n" + " ble .__48 @cond_branch\n" + " str r1, [r2]\n" + ".__48:\n" + " pop {r0}\n" + " bx r0\n" + ".__50:\n" + " .align 2, 0\n" + ".__49:\n" + " .word 0x270f\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B5D0() +{ + asm( + " ldr r0, .__51\n" + " mov r1, #0x0\n" + " strb r1, [r0]\n" + " ldr r0, .__51 + 4\n" + " strb r1, [r0]\n" + " ldr r0, .__51 + 8\n" + " strb r1, [r0]\n" + " ldr r0, .__51 + 12\n" + " strb r1, [r0]\n" + " ldr r2, .__51 + 16\n" + " mov r0, #0x0\n" + " str r0, [r2, #0x68]\n" + " str r0, [r2, #0x6c]\n" + " str r0, [r2, #0x70]\n" + " str r0, [r2, #0x74]\n" + " str r0, [r2, #0x78]\n" + " str r0, [r2, #0x7c]\n" + " add r1, r2, #0\n" + " add r1, r1, #0x80\n" + " str r0, [r1]\n" + " add r1, r1, #0x4\n" + " str r0, [r1]\n" + " add r1, r1, #0x4\n" + " str r0, [r1]\n" + " add r1, r1, #0x4\n" + " str r0, [r1]\n" + " add r1, r1, #0x4\n" + " str r0, [r1]\n" + " bx lr\n" + ".__52:\n" + " .align 2, 0\n" + ".__51:\n" + " .word unk_debug_bss_1_0\n" + " .word unk_debug_bss_1_2\n" + " .word unk_debug_bss_1_3\n" + " .word unk_debug_bss_1_4\n" + " .word +0x2000000\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B620() +{ + asm( + " push {lr}\n" + " ldr r0, .__53\n" + " mov r1, #0x0\n" + " bl CreateTask\n" + " pop {r0}\n" + " bx r0\n" + ".__54:\n" + " .align 2, 0\n" + ".__53:\n" + " .word debug_sub_811B654+1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B634() +{ + asm( + " push {lr}\n" + " ldr r0, .__57\n" + " bl FindTaskIdByFunc\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0xff\n" + " beq .__55 @cond_branch\n" + " mov r0, #0x0\n" + " b .__56\n" + ".__58:\n" + " .align 2, 0\n" + ".__57:\n" + " .word debug_sub_811B654+1\n" + ".__55:\n" + " mov r0, #0x1\n" + ".__56:\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B654() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " add sp, sp, #0xfffffff8\n" + " lsl r0, r0, #0x18\n" + " lsr r6, r0, #0x18\n" + " lsl r0, r6, #0x2\n" + " add r0, r0, r6\n" + " lsl r0, r0, #0x3\n" + " ldr r1, .__63\n" + " add r5, r0, r1\n" + " mov r0, #0x8\n" + " ldsh r1, [r5, r0]\n" + " cmp r1, #0x1\n" + " beq .__59 @cond_branch\n" + " cmp r1, #0x1\n" + " bgt .__60 @cond_branch\n" + " cmp r1, #0\n" + " beq .__61 @cond_branch\n" + " b .__116\n" + ".__64:\n" + " .align 2, 0\n" + ".__63:\n" + " .word gTasks\n" + ".__60:\n" + " cmp r1, #0x2\n" + " bne .__65 @cond_branch\n" + " b .__66\n" + ".__65:\n" + " cmp r1, #0x3\n" + " bne .__67 @cond_branch\n" + " b .__68\n" + ".__67:\n" + " b .__116\n" + ".__61:\n" + " mov r0, #0x0\n" + " mov r1, #0x0\n" + " mov r2, #0x18\n" + " mov r3, #0x13\n" + " bl Menu_DrawStdWindowFrame\n" + " bl debug_sub_811B310\n" + " ldrh r0, [r5, #0x8]\n" + " add r0, r0, #0x1\n" + " strh r0, [r5, #0x8]\n" + " b .__116\n" + ".__59:\n" + " ldr r7, .__76\n" + " ldrh r2, [r7, #0x2e]\n" + " mov r0, #0x2\n" + " and r0, r0, r2\n" + " cmp r0, #0\n" + " beq .__71 @cond_branch\n" + " b .__94\n" + ".__71:\n" + " mov r0, #0x20\n" + " and r0, r0, r2\n" + " lsl r0, r0, #0x10\n" + " lsr r3, r0, #0x10\n" + " cmp r3, #0\n" + " beq .__73 @cond_branch\n" + " ldr r1, .__76 + 4\n" + " ldrb r0, [r1, #0x1]\n" + " sub r0, r0, #0x1\n" + " strb r0, [r1, #0x1]\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bge .__79 @cond_branch\n" + " mov r0, #0x5\n" + " strb r0, [r1, #0x1]\n" + " b .__79\n" + ".__77:\n" + " .align 2, 0\n" + ".__76:\n" + " .word gMain\n" + " .word +0x2000000\n" + ".__73:\n" + " mov r0, #0x10\n" + " and r0, r0, r2\n" + " cmp r0, #0\n" + " beq .__78 @cond_branch\n" + " ldr r1, .__81\n" + " ldrb r0, [r1, #0x1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1, #0x1]\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x5\n" + " bls .__79 @cond_branch\n" + " strb r3, [r1, #0x1]\n" + ".__79:\n" + " bl debug_sub_811B2E8\n" + " b .__116\n" + ".__82:\n" + " .align 2, 0\n" + ".__81:\n" + " .word +0x2000000\n" + ".__78:\n" + " and r1, r1, r2\n" + " lsl r0, r1, #0x10\n" + " lsr r4, r0, #0x10\n" + " cmp r4, #0\n" + " beq .__83 @cond_branch\n" + " mov r0, #0x3\n" + " strh r0, [r5, #0x8]\n" + " bl Menu_EraseScreen\n" + " mov r0, #0x0\n" + " mov r1, #0x0\n" + " mov r2, #0x9\n" + " mov r3, #0x5\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r0, .__85\n" + " mov r1, #0x1\n" + " mov r2, #0x1\n" + " bl Menu_PrintText\n" + " ldr r0, .__85 + 4\n" + " mov r1, #0x1\n" + " mov r2, #0x3\n" + " bl Menu_PrintText\n" + " b .__116\n" + ".__86:\n" + " .align 2, 0\n" + ".__85:\n" + " .word Str_841B25C\n" + " .word Str_841B264\n" + ".__83:\n" + " mov r0, #0x4\n" + " and r0, r0, r2\n" + " cmp r0, #0\n" + " beq .__87 @cond_branch\n" + " ldr r0, .__91\n" + " strb r4, [r0]\n" + " ldr r0, .__91 + 4\n" + " strb r4, [r0]\n" + " bl Menu_EraseScreen\n" + " mov r0, #0x0\n" + " mov r1, #0x0\n" + " mov r2, #0xa\n" + " mov r3, #0x13\n" + " bl Menu_DrawStdWindowFrame\n" + " ldr r0, .__91 + 8\n" + " mov r1, #0x1\n" + " mov r2, #0x1\n" + " bl Menu_PrintText\n" + " ldr r3, .__91 + 12\n" + " mov r0, #0x2\n" + " mov r1, #0x3\n" + " mov r2, #0x8\n" + " bl Menu_PrintItems\n" + " str r4, [sp]\n" + " mov r0, #0x9\n" + " str r0, [sp, #0x4]\n" + " mov r0, #0x0\n" + " mov r1, #0x1\n" + " mov r2, #0x3\n" + " mov r3, #0x8\n" + " bl InitMenu\n" + " ldrh r0, [r5, #0x8]\n" + " add r0, r0, #0x1\n" + " strh r0, [r5, #0x8]\n" + ".__87:\n" + " ldrh r1, [r7, #0x2e]\n" + " mov r0, #0x8\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne .__88 @cond_branch\n" + " b .__116\n" + ".__88:\n" + " ldr r1, .__91 + 16\n" + " mov r0, #0x1\n" + " strb r0, [r1]\n" + " b .__94\n" + ".__92:\n" + " .align 2, 0\n" + ".__91:\n" + " .word unk_debug_bss_1_2\n" + " .word unk_debug_bss_1_3\n" + " .word Str_841B254\n" + " .word _841B270\n" + " .word unk_debug_bss_1_4\n" + ".__66:\n" + " bl Menu_ProcessInput\n" + " lsl r0, r0, #0x18\n" + " asr r2, r0, #0x18\n" + " mov r0, #0x2\n" + " neg r0, r0\n" + " cmp r2, r0\n" + " beq .__116 @cond_branch\n" + " add r0, r0, #0x1\n" + " cmp r2, r0\n" + " beq .__94 @cond_branch\n" + " ldr r1, .__96\n" + " mov r0, #0x1\n" + " strb r0, [r1]\n" + " ldr r0, .__96 + 4\n" + " lsl r1, r2, #0x3\n" + " add r0, r0, #0x4\n" + " add r1, r1, r0\n" + " ldr r0, [r1]\n" + " bl _call_via_r0\n" + ".__94:\n" + " bl Menu_EraseScreen\n" + " add r0, r6, #0\n" + " bl DestroyTask\n" + " b .__116\n" + ".__97:\n" + " .align 2, 0\n" + ".__96:\n" + " .word unk_debug_bss_1_2\n" + " .word _841B270\n" + ".__68:\n" + " ldr r2, .__100\n" + " ldrh r1, [r2, #0x30]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq .__98 @cond_branch\n" + " ldr r2, .__100 + 4\n" + " ldrh r0, [r2, #0xc]\n" + " add r0, r0, #0x64\n" + " b .__99\n" + ".__101:\n" + " .align 2, 0\n" + ".__100:\n" + " .word gMain\n" + " .word +0x2000000\n" + ".__98:\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq .__102 @cond_branch\n" + " ldr r1, .__104\n" + " ldrh r0, [r1, #0xc]\n" + " sub r0, r0, #0x64\n" + " b .__103\n" + ".__105:\n" + " .align 2, 0\n" + ".__104:\n" + " .word +0x2000000\n" + ".__102:\n" + " mov r0, #0x20\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq .__106 @cond_branch\n" + " ldr r1, .__109\n" + " ldr r2, .__109 + 4\n" + " add r0, r2, #0\n" + " ldrh r2, [r1, #0xc]\n" + " add r0, r0, r2\n" + ".__103:\n" + " strh r0, [r1, #0xc]\n" + " lsl r0, r0, #0x10\n" + " cmp r0, #0\n" + " bgt .__116 @cond_branch\n" + " ldr r0, .__109 + 8\n" + " strh r0, [r1, #0xc]\n" + " b .__116\n" + ".__110:\n" + " .align 2, 0\n" + ".__109:\n" + " .word +0x2000000\n" + " .word 0xfffffc18\n" + " .word 0x270f\n" + ".__106:\n" + " mov r0, #0x10\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq .__111 @cond_branch\n" + " ldr r2, .__114\n" + " mov r1, #0xfa\n" + " lsl r1, r1, #0x2\n" + " add r0, r1, #0\n" + " ldrh r1, [r2, #0xc]\n" + " add r0, r0, r1\n" + ".__99:\n" + " strh r0, [r2, #0xc]\n" + " lsl r0, r0, #0x10\n" + " asr r0, r0, #0x10\n" + " ldr r1, .__114 + 4\n" + " cmp r0, r1\n" + " ble .__116 @cond_branch\n" + " strh r1, [r2, #0xc]\n" + " b .__116\n" + ".__115:\n" + " .align 2, 0\n" + ".__114:\n" + " .word +0x2000000\n" + " .word 0x270f\n" + ".__111:\n" + " ldrh r1, [r2, #0x2e]\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq .__116 @cond_branch\n" + " bl Menu_EraseScreen\n" + " add r0, r6, #0\n" + " bl DestroyTask\n" + ".__116:\n" + " add sp, sp, #0x8\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_811B894() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xfffffffc\n" + " ldr r1, .__122\n" + " ldrh r2, [r1, #0x8]\n" + " mov r0, #0xc0\n" + " lsl r0, r0, #0x1\n" + " and r0, r0, r2\n" + " add r4, r1, #0\n" + " cmp r0, #0\n" + " beq .__117 @cond_branch\n" + " add r1, r1, #0x90\n" + " ldr r0, [r1]\n" + " add r0, r0, #0x1\n" + " str r0, [r1]\n" + " ldr r2, .__122 + 4\n" + " cmp r0, r2\n" + " ble .__118 @cond_branch\n" + " str r2, [r1]\n" + ".__118:\n" + " add r0, r4, #0\n" + " add r0, r0, #0x88\n" + " ldr r1, [r1]\n" + " ldr r0, [r0]\n" + " cmp r1, r0\n" + " beq .__119 @cond_branch\n" + " ldr r0, .__122 + 8\n" + " mov r1, #0x4\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + " ldr r1, .__122 + 12\n" + " mov r0, #0x0\n" + " strb r0, [r1]\n" + ".__119:\n" + " ldrb r1, [r4, #0x4]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " cmp r4, #0\n" + " bne .__126 @cond_branch\n" + " ldr r0, .__122 + 16\n" + " mov r1, #0x4\n" + " mov r2, #0x11\n" + " b .__121\n" + ".__123:\n" + " .align 2, 0\n" + ".__122:\n" + " .word +0x2000000\n" + " .word 0x270f\n" + " .word Str_841B2B0\n" + " .word unk_debug_bss_1_4\n" + " .word Str_841B2D3\n" + ".__117:\n" + " lsl r0, r2, #0x10\n" + " cmp r0, #0\n" + " beq .__127 @cond_branch\n" + " ldrb r1, [r4, #0x4]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq .__126 @cond_branch\n" + " mov r4, #0x3\n" + " and r4, r4, r2\n" + " cmp r4, #0\n" + " bne .__126 @cond_branch\n" + " ldr r0, .__163\n" + " mov r1, #0x4\n" + " mov r2, #0x2\n" + ".__121:\n" + " bl Menu_PrintText\n" + " ldr r0, .__163 + 4\n" + " strb r4, [r0]\n" + ".__126:\n" + " ldr r0, .__163 + 8\n" + " ldrh r1, [r0, #0x8]\n" + " add r4, r0, #0\n" + " cmp r1, #0\n" + " beq .__127 @cond_branch\n" + " b .__162\n" + ".__127:\n" + " mov r1, #0x12\n" + " ldsh r0, [r4, r1]\n" + " cmp r0, #0x3\n" + " beq .__129 @cond_branch\n" + " b .__162\n" + ".__129:\n" + " ldrb r1, [r4, #0x4]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq .__131 @cond_branch\n" + " b .__162\n" + ".__131:\n" + " mov r0, #0x0\n" + " mov r1, #0x1\n" + " bl GetTagOfReelSymbolOnScreenAtPos\n" + " lsl r0, r0, #0x18\n" + " lsr r7, r0, #0x18\n" + " mov r0, #0x0\n" + " mov r1, #0x2\n" + " bl GetTagOfReelSymbolOnScreenAtPos\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " str r0, [sp]\n" + " mov r0, #0x0\n" + " mov r1, #0x3\n" + " bl GetTagOfReelSymbolOnScreenAtPos\n" + " lsl r0, r0, #0x18\n" + " lsr r6, r0, #0x18\n" + " mov r0, #0x1\n" + " mov r1, #0x1\n" + " bl GetTagOfReelSymbolOnScreenAtPos\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov r9, r0\n" + " mov r0, #0x1\n" + " mov r1, #0x2\n" + " bl GetTagOfReelSymbolOnScreenAtPos\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " mov r0, #0x1\n" + " mov r1, #0x3\n" + " bl GetTagOfReelSymbolOnScreenAtPos\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov sl, r0\n" + " mov r0, #0x2\n" + " mov r1, #0x1\n" + " bl GetTagOfReelSymbolOnScreenAtPos\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " mov r0, #0x2\n" + " mov r1, #0x2\n" + " bl GetTagOfReelSymbolOnScreenAtPos\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov r8, r0\n" + " mov r0, #0x2\n" + " mov r1, #0x3\n" + " bl GetTagOfReelSymbolOnScreenAtPos\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r7, #0\n" + " bne .__134 @cond_branch\n" + " mov r1, r9\n" + " cmp r1, #0x1\n" + " bne .__134 @cond_branch\n" + " cmp r5, #0\n" + " beq .__159 @cond_branch\n" + ".__134:\n" + " ldr r1, [sp]\n" + " cmp r1, #0\n" + " bne .__137 @cond_branch\n" + " cmp r4, #0x1\n" + " bne .__137 @cond_branch\n" + " mov r1, r8\n" + " cmp r1, #0\n" + " beq .__159 @cond_branch\n" + ".__137:\n" + " cmp r6, #0\n" + " bne .__140 @cond_branch\n" + " mov r1, sl\n" + " cmp r1, #0x1\n" + " bne .__140 @cond_branch\n" + " cmp r0, #0\n" + " beq .__159 @cond_branch\n" + ".__140:\n" + " cmp r7, #0\n" + " bne .__143 @cond_branch\n" + " cmp r4, #0x1\n" + " bne .__143 @cond_branch\n" + " cmp r0, #0\n" + " beq .__159 @cond_branch\n" + ".__143:\n" + " cmp r6, #0\n" + " bne .__146 @cond_branch\n" + " cmp r4, #0x1\n" + " bne .__146 @cond_branch\n" + " cmp r5, #0\n" + " beq .__159 @cond_branch\n" + ".__146:\n" + " cmp r7, #0x1\n" + " bne .__149 @cond_branch\n" + " mov r1, r9\n" + " cmp r1, #0\n" + " bne .__149 @cond_branch\n" + " cmp r5, #0x1\n" + " beq .__159 @cond_branch\n" + ".__149:\n" + " ldr r1, [sp]\n" + " cmp r1, #0x1\n" + " bne .__152 @cond_branch\n" + " cmp r4, #0\n" + " bne .__152 @cond_branch\n" + " mov r1, r8\n" + " cmp r1, #0x1\n" + " beq .__159 @cond_branch\n" + ".__152:\n" + " cmp r6, #0x1\n" + " bne .__155 @cond_branch\n" + " mov r1, sl\n" + " cmp r1, #0\n" + " bne .__155 @cond_branch\n" + " cmp r0, #0x1\n" + " beq .__159 @cond_branch\n" + ".__155:\n" + " cmp r7, #0x1\n" + " bne .__158 @cond_branch\n" + " cmp r4, #0\n" + " bne .__158 @cond_branch\n" + " cmp r0, #0x1\n" + " beq .__159 @cond_branch\n" + ".__158:\n" + " cmp r6, #0x1\n" + " bne .__162 @cond_branch\n" + " cmp r4, #0\n" + " bne .__162 @cond_branch\n" + " cmp r5, #0x1\n" + " bne .__162 @cond_branch\n" + ".__159:\n" + " ldr r0, .__163 + 12\n" + " mov r1, #0x4\n" + " mov r2, #0x0\n" + " bl Menu_PrintText\n" + " ldr r1, .__163 + 4\n" + " mov r0, #0x0\n" + " strb r0, [r1]\n" + ".__162:\n" + " add sp, sp, #0x4\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + ".__164:\n" + " .align 2, 0\n" + ".__163:\n" + " .word Str_841B2E4\n" + " .word unk_debug_bss_1_4\n" + " .word +0x2000000\n" + " .word Str_841B2BF\n" + "\n" + ); +} +#endif + +static const u8 sReelSymbols[][21] = +{ { SLOT_MACHINE_TAG_7_RED, SLOT_MACHINE_TAG_CHERRY, @@ -5394,3 +7779,50 @@ static const struct SpritePalette gSlotMachineSpritePalettes[] = { static const u8 sReelTimeGfx[] = INCBIN_U8("graphics/slot_machine/reel_time.4bpp.lz"); static const u16 sReelTimeWindowTilemap[] = INCBIN_U16("graphics/slot_machine/reel_time_window_map.bin"); + +#if DEBUG + +const u8 Str_841B1C4[] = _("SETTEI"); +const u8 Str_841B1CB[] = _("MAWASITA"); +const u8 Str_841B1D4[] = _("MODOSI"); +const u8 Str_841B1DB[] = _("NOMARE"); +const u8 Str_841B1E2[] = _("MAE 7"); +const u8 Str_841B1E8[] = _("LR HENKOU"); +const u8 Str_841B1F3[] = _("START JIDOUSU"); +const u8 Str_841B202[] = _("SELECT SETTEI"); +const u8 Str_841B211[] = _("TYUHSEN"); +const u8 Str_841B219[] = _("CHERRY"); +const u8 Str_841B220[] = _("REPLAY"); +const u8 Str_841B227[] = _("HASUBO"); +const u8 Str_841B22E[] = _("RURIRI"); +const u8 Str_841B235[] = _("INAZU"); +const u8 Str_841B23B[] = _("REG"); +const u8 Str_841B23F[] = _("BIG"); +const u8 Str_841B243[] = _("BD"); +const u8 Str_841B246[] = _("R7"); +const u8 Str_841B249[] = _("B7"); +const u8 Str_841B24C[] = _("A COIN"); +const u8 Str_841B254[] = _("TYUHSEN"); +const u8 Str_841B25C[] = _("UD 100"); +const u8 Str_841B264[] = _("LR 1000"); +const u8 Str_841B26D[] = _("×"); + +// Is this MenuAction2? I'm not sure. +const struct {const u8 *text; void (*func)();} _841B270[] = +{ + {Str_841B219, debug_sub_811B1C4}, + {Str_841B220, debug_sub_811B1EC}, + {Str_841B227, debug_sub_811B210}, + {Str_841B22E, debug_sub_811B238}, + {Str_841B235, debug_sub_811B260}, + {Str_841B23B, debug_sub_811B288}, + {Str_841B23F, debug_sub_811B2B0}, + {Str_841B243, debug_sub_811B2D8}, +}; + +const u8 Str_841B2B0[] = _("·カウントエラーがおきました"); +const u8 Str_841B2BF[] = _("·リールそうさで エラーが おきました"); +const u8 Str_841B2D3[] = _("·フラグオフエラーが おきました"); +const u8 Str_841B2E4[] = _("·ボーナスこやくの エラーが おきました"); + +#endif diff --git a/src/field/start_menu.c b/src/field/start_menu.c index 381c19bb7..1b01bf7a8 100644 --- a/src/field/start_menu.c +++ b/src/field/start_menu.c @@ -44,6 +44,11 @@ enum { MENU_ACTION_PLAYER_LINK }; +#if DEBUG +static u32 _debugStartMenu_0 __attribute__((unused)); +static u32 _debugStartMenu_1 __attribute__((unused)); +#endif + static u8 (*saveDialogCallback)(void); static u8 saveDialogTimer; //Number of frames to keep the window on screen after save was completed static bool8 savingComplete; @@ -132,6 +137,304 @@ static bool32 sub_80719FC(u8 *ptr); static void sub_8071B54(void); static void Task_8071B64(u8 taskId); +#if DEBUG +__attribute__((naked)) +void debug_sub_8075C30() +{ + asm( + " push {lr}\n" + " bl CloseMenu\n" + " bl debug_sub_8075D9C\n" + " mov r0, #0x1\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8075C40() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " lsl r0, r4, #0x2\n" + " add r0, r0, r4\n" + " lsl r0, r0, #0x3\n" + " ldr r1, ._5\n" + " add r5, r0, r1\n" + " mov r1, #0x0\n" + " ldsh r0, [r5, r1]\n" + " cmp r0, #0x1\n" + " beq ._1 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._2 @cond_branch\n" + " cmp r0, #0\n" + " beq ._3 @cond_branch\n" + " b ._18\n" + "._6:\n" + " .align 2, 0\n" + "._5:\n" + " .word gTasks+0x8\n" + "._2:\n" + " cmp r0, #0x2\n" + " beq ._7 @cond_branch\n" + " cmp r0, #0x3\n" + " beq ._8 @cond_branch\n" + " b ._18\n" + "._3:\n" + " bl m4aSoundVSyncOff\n" + " b ._12\n" + "._1:\n" + " ldr r1, ._13\n" + " ldrh r0, [r1]\n" + " mov sl, r0\n" + " mov r0, #0x0\n" + " strh r0, [r1]\n" + " ldr r1, ._13 + 4\n" + " strh r0, [r1]\n" + " mov r0, #0x83\n" + " lsl r0, r0, #0x10\n" + " str r0, [r1]\n" + " ldr r4, ._13 + 8\n" + " mov r9, r4\n" + " ldr r2, ._13 + 12\n" + " ldr r0, ._13 + 16\n" + " mov ip, r0\n" + " ldr r1, ._13 + 20\n" + " mov r8, r1\n" + " ldr r7, ._13 + 24\n" + " mov r3, r9\n" + " add r3, r3, #0x1\n" + " ldr r6, ._13 + 28\n" + " ldr r4, ._13 + 32\n" + "._11:\n" + " mov r0, ip\n" + " str r0, [r2]\n" + " str r6, [r2, #0x4]\n" + " str r4, [r2, #0x8]\n" + " ldr r0, [r2, #0x8]\n" + " ldrh r1, [r2, #0xa]\n" + " mov r0, r8\n" + " and r0, r0, r1\n" + " strh r0, [r2, #0xa]\n" + " ldrh r1, [r2, #0xa]\n" + " add r0, r7, #0\n" + " and r0, r0, r1\n" + " strh r0, [r2, #0xa]\n" + " ldrh r0, [r2, #0xa]\n" + " sub r3, r3, #0x1\n" + " cmp r3, #0\n" + " bne ._11 @cond_branch\n" + " mov r3, r9\n" + " add r3, r3, #0x1\n" + " ldr r0, ._13 + 36\n" + " mov r2, #0x0\n" + " strh r2, [r0]\n" + " ldr r1, ._13 + 4\n" + " ldrh r0, [r1]\n" + " ldr r4, ._13 + 40\n" + " str r0, [r4]\n" + " strh r2, [r1]\n" + " ldr r0, ._13\n" + " mov r1, sl\n" + " strh r1, [r0]\n" + " ldr r4, ._13 + 44\n" + " str r3, [r4]\n" + " bl m4aSoundVSyncOn\n" + " b ._12\n" + "._14:\n" + " .align 2, 0\n" + "._13:\n" + " .word 0x4000208\n" + " .word 0x4000108\n" + " .word 0xc34f\n" + " .word 0x40000b0\n" + " .word gScanlineEffectRegBuffers\n" + " .word 0xc5ff\n" + " .word 0x7fff\n" + " .word 0x4000040\n" + " .word 0xa2600001\n" + " .word 0x400010a\n" + " .word _debugStartMenu_0\n" + " .word _debugStartMenu_1\n" + "._7:\n" + " mov r0, #0x15\n" + " bl PlaySE\n" + " ldr r0, ._16\n" + " ldr r1, ._16 + 4\n" + " ldr r1, [r1]\n" + " mov r2, #0x1\n" + " mov r3, #0x8\n" + " bl ConvertIntToDecimalStringN\n" + " ldr r0, ._16 + 8\n" + " ldr r1, ._16 + 12\n" + " ldr r1, [r1]\n" + " mov r2, #0x1\n" + " mov r3, #0x8\n" + " bl ConvertIntToDecimalStringN\n" + " bl Menu_DisplayDialogueFrame\n" + " ldr r0, ._16 + 16\n" + " mov r1, #0x2\n" + " mov r2, #0xf\n" + " bl Menu_PrintText\n" + "._12:\n" + " ldrh r0, [r5]\n" + " add r0, r0, #0x1\n" + " strh r0, [r5]\n" + " b ._18\n" + "._17:\n" + " .align 2, 0\n" + "._16:\n" + " .word gStringVar1\n" + " .word _debugStartMenu_1\n" + " .word gStringVar2\n" + " .word _debugStartMenu_0\n" + " .word gUnknown_Debug_839B6D8\n" + "._8:\n" + " ldr r0, ._19\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._18 @cond_branch\n" + " bl Menu_EraseScreen\n" + " bl ScriptContext2_Disable\n" + " add r0, r4, #0\n" + " bl DestroyTask\n" + "._18:\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._20:\n" + " .align 2, 0\n" + "._19:\n" + " .word gMain\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8075D9C() +{ + asm( + " push {lr}\n" + " ldr r0, ._21\n" + " mov r1, #0xa\n" + " bl CreateTask\n" + " bl ScriptContext2_Enable\n" + " pop {r0}\n" + " bx r0\n" + "._22:\n" + " .align 2, 0\n" + "._21:\n" + " .word debug_sub_8075C40+1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8075DB4() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add r6, r0, #0\n" + " add r5, r1, #0\n" + " add r4, r2, #0\n" + " add r0, r4, #0\n" + " mov r1, #0x4d\n" + " bl __umodsi3\n" + " strb r0, [r6, #0x1]\n" + " add r1, r6, #0\n" + " add r1, r1, #0xc\n" + " add r0, r4, #0\n" + " bl write_word_to_mem\n" + " add r0, r6, #4\n" + " add r1, r5, #0\n" + " bl StringCopy8\n" + " mov r3, #0x7\n" + " mov r4, #0x0\n" + " ldr r0, ._25\n" + " ldr r1, ._25 + 4\n" + " add r5, r0, r1\n" + " add r2, r6, #0\n" + " add r2, r2, #0x10\n" + " add r1, r6, #0\n" + " add r1, r1, #0x1c\n" + "._23:\n" + " ldrh r0, [r5]\n" + " strh r0, [r2]\n" + " strh r3, [r1]\n" + " add r0, r3, #6\n" + " strh r0, [r1, #0xc]\n" + " add r3, r3, #0x1\n" + " add r5, r5, #0x2\n" + " add r2, r2, #0x2\n" + " add r1, r1, #0x2\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x5\n" + " ble ._23 @cond_branch\n" + " mov r4, #0x0\n" + "._24:\n" + " mov r0, #0x64\n" + " mul r0, r0, r4\n" + " ldr r1, ._25 + 8\n" + " add r0, r0, r1\n" + " mov r1, #0x2c\n" + " mul r1, r1, r4\n" + " add r1, r1, #0x34\n" + " add r1, r6, r1\n" + " bl sub_803AF78\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x2\n" + " ble ._24 @cond_branch\n" + " add r0, r6, #0\n" + " bl SetEReaderTrainerChecksum\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._26:\n" + " .align 2, 0\n" + "._25:\n" + " .word gSaveBlock1\n" + " .word 0x2b28\n" + " .word gPlayerParty\n" + "\n" + ); +} + +__attribute__((naked)) +void unref_sub_8070F90() +{ + asm( + " push {lr}\n" + " ldr r0, ._27\n" + " bl FlagSet\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x4\n" + " bl FlagSet\n" + " ldr r0, ._27 + 4\n" + " bl FlagSet\n" + " pop {r0}\n" + " bx r0\n" + "._28:\n" + " .align 2, 0\n" + "._27:\n" + " .word 0x801\n" + " .word 0x802\n" + "\n" + ); +} +#endif static void BuildStartMenuActions(void) { diff --git a/src/field/trader.c b/src/field/trader.c index 64bd708f6..885557d5a 100644 --- a/src/field/trader.c +++ b/src/field/trader.c @@ -108,7 +108,7 @@ void CreateAvailableDecorationsMenu(u8 taskId) { if (trader->unk1[i] > DECOR_REGISTEEL_DOLL) { - Menu_PrintText(gOtherText_FiveQuestionsAndSlash, 1, numDecorations * 2 + 2); + Menu_PrintText(gOtherText_FiveQuestions, 1, numDecorations * 2 + 2); } else { diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c index 79542422e..19778e29b 100644 --- a/src/field/wild_encounter.c +++ b/src/field/wild_encounter.c @@ -3698,13 +3698,13 @@ const u16 gRoute119WaterTileData[] = extern u16 gSpecialVar_Result; extern u8 S_RepelWoreOff[]; -EWRAM_DATA static u8 sWildEncountersDisabled = 0; +EWRAM_DATA u8 sWildEncountersDisabled = 0; EWRAM_DATA static u32 sFeebasRngValue = 0; #define NUM_FEEBAS_SPOTS 6 -static u16 FeebasRandom(void); -static void FeebasSeedRng(u16 seed); +u16 FeebasRandom(void); +void FeebasSeedRng(u16 seed); static bool8 IsWildLevelAllowedByRepel(u8 level); static void ApplyFluteEncounterRateMod(u32 *encRate); @@ -3791,17 +3791,30 @@ static bool8 CheckFeebas(void) return FALSE; } -static u16 FeebasRandom(void) +u16 FeebasRandom(void) { sFeebasRngValue = 12345 + 0x41C64E6D * sFeebasRngValue; return sFeebasRngValue >> 16; } -static void FeebasSeedRng(u16 seed) +void FeebasSeedRng(u16 seed) { sFeebasRngValue = seed; } +#if DEBUG +u16 debug_sub_8092344(u8 arg0) +{ + if (arg0 == 0) + return 131; + if (arg0 == 1) + return 167; + if (arg0 == 2) + return 149; + return 0; +} +#endif + static u8 ChooseWildMonIndex_Land(void) { u8 rand = Random() % 100; @@ -4042,6 +4055,24 @@ static bool8 DoWildEncounterRateDiceRoll(u16 encounterRate) return FALSE; } +#if DEBUG +u16 debug_sub_809283C(u16 attempts) +{ + u16 retval = 0; + u16 i = 0; + + while (i < attempts) + { + if (DoWildEncounterRateDiceRoll(320) == TRUE) + retval++; + + i++; + } + + return retval; +} +#endif + static bool8 DoWildEncounterTest(u32 encounterRate, bool8 ignoreAbility) { encounterRate *= 16; diff --git a/src/pokemon/mail.c b/src/pokemon/mail.c index 921a3ad93..4497c98fb 100644 --- a/src/pokemon/mail.c +++ b/src/pokemon/mail.c @@ -1,7 +1,10 @@ #include "global.h" #include "mail.h" +#include "data2.h" #include "easy_chat.h" #include "constants/items.h" +#include "constants/species.h" +#include "field_fadetransition.h" #include "graphics.h" #include "mail_data.h" #include "menu.h" @@ -10,6 +13,7 @@ #include "palette.h" #include "pokemon_icon.h" #include "overworld.h" +#include "script.h" #include "sprite.h" #include "string_util.h" #include "strings2.h" @@ -18,6 +22,8 @@ #include "scanline_effect.h" #include "ewram.h" +extern u8 (*gMenuCallback)(void); + struct UnkMailStruct { u8 unk_0_0:2; @@ -234,6 +240,56 @@ const struct MailLayout gUnknown_083E57A4[] = {5, 15, 15, 4, 3, Unknown_3E5790}, }; +#if DEBUG + +const u8 Str_8411540[] = _("レイアウトを にほんごで ひょうじ?"); // Display using Japanese layout? +const u8 Str_8411553[] = _("にほんご "); // Japanese +const u8 Str_8411559[] = _("かいがい "); // Overseas + +const u8 *const _8411560[] = +{ + Str_8411553, + Str_8411559, +}; + +const u8 Str_8411568[] = _("イメージ タイプを えらんでね"); // Choose an image type +const u8 Str_8411578[] = _("{STR_VAR_1}"); +const u8 Str_841157B[] = _("オレンジ "); // Orange +const u8 Str_8411581[] = _("ハーバー "); // Harbor +const u8 Str_8411587[] = _("キラキラ "); // Glitter +const u8 Str_841158D[] = _("メカニカル"); // Mech +const u8 Str_8411593[] = _("ウッディー"); // Wood +const u8 Str_8411599[] = _("クロス "); // Wave +const u8 Str_841159F[] = _("トレジャー"); // Bead +const u8 Str_84115A5[] = _("シャドウ "); // Shadow +const u8 Str_84115AB[] = _("トロピカル"); // Tropic +const u8 Str_84115B1[] = _("ドリーム "); // Dream +const u8 Str_84115B7[] = _("ミラクル "); // Fab +const u8 Str_84115BD[] = _("レトロ "); // Retro + +const u8 *const _84115C4[] = +{ + Str_841157B, + Str_8411581, + Str_8411587, + Str_841158D, + Str_8411593, + Str_8411599, + Str_841159F, + Str_84115A5, + Str_84115AB, + Str_84115B1, + Str_84115B7, + Str_84115BD, +}; + +const u8 Str_84115F4[] = _("メールをみる"); // View Mail +const u8 Str_84115FB[] = _("メールとうろく"); // Register Mail +const u8 Str_8411603[] = _("もたせる"); // Give to Pokémon +const u8 Str_8411608[] = _("メールをけす"); // Delete Mail + +#endif + // XXX: what is this? static u8 *const sSharedMemPtr = gSharedMem; @@ -247,26 +303,44 @@ static void sub_80F8F58(void); static void sub_80F8F78(void); static void sub_80F8FB4(void); +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; + +#if DEBUG +static u8 gUnknown_Debug_0300079C; +#endif + void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) { - u16 mailDesign; u16 buffer[2]; + u16 species; - ewram0_4.varFF = GAME_LANGUAGE; - ewram0_4.var100 = 1; - ewram0_4.var104 = (MainCallback)EasyChat_GetWordText; - ewram0_4.var108 = (MainCallback)ConvertEasyChatWordsToString; - - mailDesign = arg0->itemId - ITEM_ORANGE_MAIL; - - if (mailDesign <= 11) +#if DEBUG + if (gUnknown_Debug_0300079C != 0) { - ewram0_4.varFA = arg0->itemId - ITEM_ORANGE_MAIL; + ewram0_4.varFF = GAME_LANGUAGE; + ewram0_4.var100 = gSpecialVar_0x8004; + ewram0_4.var104 = (MainCallback)EasyChat_GetWordText; + ewram0_4.var108 = (MainCallback)ConvertEasyChatWordsToString; + ewram0_4.varFA = gSpecialVar_0x8006; } else +#endif { - ewram0_4.varFA = 0; - arg2 = FALSE; + ewram0_4.varFF = GAME_LANGUAGE; + ewram0_4.var100 = 1; + ewram0_4.var104 = (MainCallback)EasyChat_GetWordText; + ewram0_4.var108 = (MainCallback)ConvertEasyChatWordsToString; + if (IS_ITEM_MAIL(arg0->itemId)) + { + ewram0_4.varFA = arg0->itemId - 0x79; + } + else + { + ewram0_4.varFA = 0; + arg2 = FALSE; + } } switch (ewram0_4.var100) @@ -275,24 +349,22 @@ void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) default: ewram0_4.var10C = &gUnknown_083E5730[ewram0_4.varFA]; break; - case 1: ewram0_4.var10C = &gUnknown_083E57A4[ewram0_4.varFA]; break; } - if (((MailSpeciesToSpecies(arg0->species, buffer) << 16) + 0xFFFF0000) <= (410 << 16)) + species = MailSpeciesToSpecies(arg0->species, buffer); + if (species >= 1 && species <= 411) { switch (ewram0_4.varFA) { case 6: ewram0_4.varFB = 1; break; - case 9: ewram0_4.varFB = 2; break; - default: ewram0_4.varFB = 0; break; @@ -303,7 +375,6 @@ void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) ewram0_4.varFB = 0; } - ewram0_4.varF4 = arg0; ewram0_4.varEC = arg1; ewram0_4.varF8 = arg2; @@ -575,25 +646,514 @@ static void sub_80F8F78(void) static void sub_80F8FB4(void) { - u16 local1; + if (!UpdatePaletteFade()) + { + SetMainCallback2(ewram0_4.varEC); + switch (ewram0_4.varFB) + { + case 2: + case 1: + sub_809D608(sub_809D4A8(ewram0_4.varF4->species)); + sub_809D510(&gSprites[ewram0_4.varFC]); + break; + } +#if !DEBUG + memset(&ewram0_4, 0, 0x110); +#endif + ResetPaletteFade(); + } +} + +#if DEBUG - if (UpdatePaletteFade()) +void debug_sub_810CA7C(u8); +void debug_sub_810CE1C(u8); +void debug_sub_810D388(void); +void debug_sub_810D340(void); + +void debug_sub_810C910(u8 taskId) +{ + if (!gPaletteFade.active) { + gUnknown_Debug_0300079C = 1; + Menu_EraseScreen(); + DestroyTask(taskId); + if (gSaveBlock1.mail[gSpecialVar_0x8005].itemId == 0) + HandleReadMail(&gSaveBlock1.mail[gSpecialVar_0x8005], debug_sub_810D388, 0); + else + HandleReadMail(&gSaveBlock1.mail[gSpecialVar_0x8005], debug_sub_810D388, 1); + } +} + +void debug_sub_810C990(u8 taskId) +{ + if (gMain.newKeys & (DPAD_LEFT | DPAD_DOWN)) + { + gSpecialVar_0x8006 = (gSpecialVar_0x8006 + 11) % 12; + Menu_DrawStdWindowFrame(1, 1, 10, 4); + Menu_PrintText(_84115C4[gSpecialVar_0x8006], 2, 2); + } + else if (gMain.newKeys & (DPAD_UP | DPAD_RIGHT)) + { + gSpecialVar_0x8006 = (gSpecialVar_0x8006 + 1) % 12; + Menu_DrawStdWindowFrame(1, 1, 10, 4); + Menu_PrintText(_84115C4[gSpecialVar_0x8006], 2, 2); + } + else if (gMain.newKeys & A_BUTTON) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = debug_sub_810C910; + } + else if (gMain.newKeys & B_BUTTON) + { + Menu_DisplayDialogueFrame(); + Menu_PrintText(Str_8411540, 4, 15); + Menu_PrintText(_8411560[gSpecialVar_0x8004], 2, 2); + gTasks[taskId].func = debug_sub_810CA7C; + } +} + +void debug_sub_810CA7C(u8 taskId) +{ + if (gMain.newKeys & 0xF0) + { + gSpecialVar_0x8004 ^= 1; + Menu_PrintText(_8411560[gSpecialVar_0x8004], 2, 2); + } + else if (gMain.newKeys & A_BUTTON) + { + if (gMain.watchedKeysPressed) + { + gMain.watchedKeysPressed = FALSE; + Menu_DisplayDialogueFrame(); + Menu_PrintText(Str_8411540, 4, 15); + Menu_DrawStdWindowFrame(1, 1, 10, 4); + Menu_PrintText(_8411560[gSpecialVar_0x8004], 2, 2); + } + else + { + Menu_DisplayDialogueFrame(); + Menu_PrintText(Str_8411568, 4, 15); + Menu_DrawStdWindowFrame(1, 1, 10, 4); + Menu_PrintText(_84115C4[gSpecialVar_0x8006], 2, 2); + gTasks[taskId].func = debug_sub_810C990; + } + } +} + +void debug_sub_810CB50(u8 taskId) +{ + u8 sp0[] = _("{STR_VAR_1} {STR_VAR_2}"); + u8 sp8[] = _("メール{STR_VAR_1} {STR_VAR_2}"); + bool8 r2 = FALSE; + + if (gMain.newKeys & A_BUTTON) + { + ConvertIntToDecimalStringN(gStringVar1, gSpecialVar_0x8005, 2, 1); + StringCopy(gStringVar2, gSpeciesNames[gTasks[taskId].data[0]]); + gSaveBlock1.mail[gSpecialVar_0x8005].species = gTasks[taskId].data[0]; + StringExpandPlaceholders(gStringVar4, sp8); + Menu_DisplayDialogueFrame(); + Menu_PrintText(gStringVar4, 4, 15); + DestroyTask(taskId); + CreateTask(debug_sub_810CE1C, 0); + debug_sub_810D340(); return; } + else if (gMain.newKeys & B_BUTTON) + { + DestroyTask(taskId); + Menu_EraseScreen(); + CreateTask(debug_sub_810CE1C, 0); + debug_sub_810D340(); + return; + } + else if (gMain.newKeys & (DPAD_LEFT | DPAD_DOWN)) + { + gTasks[taskId].data[0] = (gTasks[taskId].data[0] + 0x19B) % 0x19C; + r2 = TRUE; + } + else if (gMain.newKeys & (DPAD_UP | DPAD_RIGHT)) + { + gTasks[taskId].data[0] = (gTasks[taskId].data[0] + 1) % 0x19C; + r2 = TRUE; + } + + if (r2) + { + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[0], 2, 3); + StringCopy(gStringVar2, gSpeciesNames[gTasks[taskId].data[0]]); + StringExpandPlaceholders(gStringVar4, sp0); + Menu_DrawStdWindowFrame(0, 0, 12, 3); + Menu_PrintText(gStringVar4, 1, 1); + } +} + +void debug_sub_810CCEC(u8 taskId) +{ + u8 string1[] = _("メール{STR_VAR_1}を だれに もたせる?"); + u8 string2[] = _("000 {STR_VAR_1}"); + + ConvertIntToDecimalStringN(gStringVar1, gSpecialVar_0x8005, 1, 1); + StringExpandPlaceholders(gStringVar4, string1); + Menu_DisplayDialogueFrame(); + Menu_PrintText(gStringVar4, 4, 15); + + StringCopy(gStringVar1, gSpeciesNames[0]); + StringExpandPlaceholders(gStringVar4, string2); + Menu_DrawStdWindowFrame(0, 0, 12, 3); + Menu_PrintText(string2, 1, 1); // This probably should have been gStringVar4 + + gTasks[taskId].func = debug_sub_810CB50; +} + +u8 debug_sub_810CD9C(void) +{ + CloseMenu(); + ScriptContext1_Stop(); + ScriptContext2_Enable(); + gUnknown_Debug_0300079C = 0; + gSpecialVar_0x8004 = gSpecialVar_0x8005 = gSpecialVar_0x8006 = 0; + SetMainCallback2(debug_sub_810D388); + return 1; +} + +void debug_sub_810CDE0(void) +{ + UpdatePaletteFade(); + RunTasks(); +} + +void debug_sub_810CDF0(void) +{ + gMain.watchedKeysPressed = 0; + gMain.watchedKeysMask = 0; + gFieldCallback = mapldr_default; + SetMainCallback2(c2_exit_to_overworld_2_switch); +} + +void debug_sub_810CE1C(u8 taskId) +{ + if (gMenuCallback() == TRUE) + { + CloseMenu(); + DestroyTask(taskId); + } +} + +u8 debug_sub_810CE48(void) +{ + s8 input = Menu_ProcessInput(); - SetMainCallback2(ewram0_4.varEC); - switch (ewram0_4.varFB) + switch (input) { + case -1: + Menu_EraseScreen(); + debug_sub_810D340(); + return 0; + case -2: + return 0; + default: + gSpecialVar_0x8005 = input; + gSpecialVar_0x8006 %= 12; + CreateTask(debug_sub_810CA7C, 0); + gMain.watchedKeysPressed = TRUE; // huh? + gMain.watchedKeysMask = 0; + return 1; + } +} + +u8 debug_sub_810CEA4(void) +{ + if (!gPaletteFade.active) + { + gSpecialVar_0x8004 = 4; + sub_80E60D8(); + return 1; + } + return 0; +} + +u8 debug_sub_810CED0(void) +{ + u8 text[] = _("せいきの データが とうろくずみ です\n" + "しんき とうろく できません"); + s8 input = Menu_ProcessInput(); + + switch (input) + { + case -1: + Menu_EraseScreen(); + break; + case -2: + return 0; + default: + gSpecialVar_0x8005 = input; + if (IS_ITEM_MAIL(gSaveBlock1.mail[input].itemId)) + { + Menu_EraseScreen(); + Menu_DisplayDialogueFrame(); + Menu_PrintText(text, 4, 15); + } + else + { + gSaveBlock1.mail[gSpecialVar_0x8005].itemId = 0xFFFF; + StringCopy(gSaveBlock1.mail[gSpecialVar_0x8005].playerName, gSaveBlock2.playerName); + *(u32 *)gSaveBlock1.mail[gSpecialVar_0x8005].trainerId = *(u32 *)gSaveBlock2.playerTrainerId; + gMenuCallback = debug_sub_810CEA4; + return 0; + } + break; + } + debug_sub_810D340(); + return 0; +} + +u8 debug_sub_810CFA4(void) +{ + u8 text[] = _("せいきに とうろくされたメールデータは\n" + "へんこう できません"); + s8 input = Menu_ProcessInput(); + + switch (input) + { + case -1: + Menu_EraseScreen(); + debug_sub_810D340(); + return 0; + case -2: + return 0; + default: + gSpecialVar_0x8005 = input; + if (IS_ITEM_MAIL(gSaveBlock1.mail[input].itemId)) + { + Menu_EraseScreen(); + Menu_DisplayDialogueFrame(); + Menu_PrintText(text, 4, 15); + debug_sub_810D340(); + return 0; + } + else + { + CreateTask(debug_sub_810CCEC, 0); + return 1; + } + } +} + +u8 debug_sub_810D030(void) +{ + const u8 text1[] = _("メール{STR_VAR_1} とうろく かいじょ"); + const u8 text2[] = _("デバッグメニューから とうろくした\n" + "メール いがいは けせません"); + s8 input = Menu_ProcessInput(); + + switch (input) + { + case -1: + Menu_EraseScreen(); + debug_sub_810D340(); + return 0; + case -2: + return 0; + default: + gSpecialVar_0x8005 = input; + if (gSaveBlock1.mail[gSpecialVar_0x8005].itemId != 0xFFFF + && gSaveBlock1.mail[gSpecialVar_0x8005].itemId != 0) + { + Menu_EraseScreen(); + Menu_DisplayDialogueFrame(); + Menu_PrintText(text2, 4, 15); + debug_sub_810D340(); + return 0; + } + else + { + s8 i; + + gSaveBlock1.mail[gSpecialVar_0x8005].itemId = 0; + gSaveBlock1.mail[gSpecialVar_0x8005].species = 0; + gSaveBlock1.mail[gSpecialVar_0x8005].playerName[0] = EOS; + *(u32 *)gSaveBlock1.mail[gSpecialVar_0x8005].trainerId = 0; + for (i = 0; i < 9; i++) + gSaveBlock1.mail[gSpecialVar_0x8005].words[i] = 0xFFFF; + ConvertIntToDecimalStringN(gStringVar1, gSpecialVar_0x8005, 1, 1); + StringExpandPlaceholders(gStringVar4, text1); + Menu_EraseScreen(); + Menu_DisplayDialogueFrame(); + Menu_PrintText(gStringVar4, 4, 15); + debug_sub_810D340(); + return 0; + } + } +} + +void debug_sub_810D174(u8 a) +{ + u8 string[] = _("メール{STR_VAR_1} {STR_VAR_2} {STR_VAR_3}"); + u8 buffer[9][20]; + struct MenuAction menuActions[9]; + u8 i; + + for (i = 0; i < 9; i++) + { + ConvertIntToDecimalStringN(gStringVar1, i, 1, 1); + if (gSaveBlock1.mail[i].itemId == 0xFFFF) + { + ConvertIntToDecimalStringN(gStringVar2, 1, 1, 1); + } + else if (IS_ITEM_MAIL(gSaveBlock1.mail[i].itemId)) + { + ConvertIntToDecimalStringN(gStringVar2, 2, 1, 1); + } + else + { + ConvertIntToDecimalStringN(gStringVar2, 0, 1, 1); + gSaveBlock1.mail[i].itemId = 0; + } + StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1.mail[i].species]); + StringExpandPlaceholders(buffer[i], string); + menuActions[i].text = buffer[i]; + menuActions[i].func = NULL; + } + Menu_DrawStdWindowFrame(0, 0, 16, 19); + Menu_PrintItems(2, 1, 9, menuActions); + InitMenu(0, 1, 1, 9, 0, 15); + switch (a) + { + case 0: + gMenuCallback = debug_sub_810CE48; + break; + case 1: + gMenuCallback = debug_sub_810CED0; + break; case 2: + gMenuCallback = debug_sub_810CFA4; + break; + case 3: + gMenuCallback = debug_sub_810D030; + break; + } +} + +u8 debug_sub_810D2F4(void) +{ + s8 input = Menu_ProcessInput(); + + switch (input) + { + case -1: + SetMainCallback2(debug_sub_810CDF0); + return 1; + case -2: + return 0; + } + + switch (input) + { + case 0: + debug_sub_810D174(input); + return 0; case 1: - local1 = sub_809D4A8(ewram0_4.varF4->species); - sub_809D608(local1); + debug_sub_810D174(input); + return 0; + case 2: + debug_sub_810D174(input); + return 0; + case 3: + debug_sub_810D174(input); + return 0; + } - sub_809D510(&gSprites[ewram0_4.varFC]); + return 1; +} + +const struct MenuAction _84116BC[] = +{ + {Str_84115F4, NULL}, + {Str_84115FB, NULL}, + {Str_8411603, NULL}, + {Str_8411608, NULL}, +}; + +void debug_sub_810D340(void) +{ + Menu_DrawStdWindowFrame(0, 0, 9, 9); + Menu_PrintItems(2, 1, 4, _84116BC); + InitMenu(0, 1, 1, 4, 0, 8); + gMenuCallback = debug_sub_810D2F4; +} + +void debug_sub_810D388(void) +{ + switch (gMain.state) + { + case 0: + if (gUnknown_Debug_0300079C != 0) + { + gMain.state = 2; + gUnknown_Debug_0300079C = 0; + return; + } + else + { + ScanlineEffect_Stop(); + ResetPaletteFade(); + SetVBlankCallback(sub_80F8F18); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + } + break; + case 1: + if (UpdatePaletteFade()) + return; + break; + case 2: + SetVBlankCallback(NULL); + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2VOFS = 0; + REG_BG2HOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; break; + case 3: + ResetSpriteData(); + ResetTasks(); + FreeAllSpritePalettes(); + break; + case 4: + Text_LoadWindowTemplate(&gWindowTemplate_81E6CE4); + InitMenuWindow(&gWindowTemplate_81E6CE4); + Menu_EraseScreen(); + break; + case 5: + LoadPalette(gMailGraphicsTable[0].palette, 0, 32); + LZ77UnCompVram(gMailGraphicsTable[0].tiles, (void *)VRAM); + DmaFill16(3, 1, (void *)(VRAM + 0x4000), 0x500); + break; + case 6: + REG_BG0CNT = 0x9F08; + REG_BG1CNT = 0x0801; + REG_BLDCNT = 0; + REG_DISPCNT = 0x0340; + debug_sub_810D340(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + SetVBlankCallback(sub_80F8F18); + break; + case 7: + if (!UpdatePaletteFade()) + return; + break; + case 8: + CreateTask(debug_sub_810CE1C, 0); + SetMainCallback2(debug_sub_810CDE0); + break; + default: + return; } - - memset(&ewram0_4, 0, 0x110); - ResetPaletteFade(); + gMain.state++; } + +#endif diff --git a/src/pokemon/pokedex.c b/src/pokemon/pokedex.c index cbd816206..090873f9d 100644 --- a/src/pokemon/pokedex.c +++ b/src/pokemon/pokedex.c @@ -1273,7 +1273,7 @@ static u8 sub_8091260(u16 num, u8, u8, u8); static void sub_8091304(const u8 *name, u8, u8); static void sub_8091458(u16 height, u8 i, u8 i1); static void sub_8091564(u16 weight, u8 i, u8 i1); -static void sub_8091738(u16, u16, u16); +void sub_8091738(u16, u16, u16); static void sub_80917CC(u16 i, u16 i1); static u16 sub_8091818(u8, u16, u16, u16); u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d); @@ -4449,7 +4449,7 @@ static void sub_8091564(u16 arg0, u8 left, u8 top) } #endif -static void sub_8091738(u16 num, u16 b, u16 c) +void sub_8091738(u16 num, u16 b, u16 c) { u8 arr[0x80]; u16 i; diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c index 0242e7444..41579fa28 100644 --- a/src/pokemon/pokemon_1.c +++ b/src/pokemon/pokemon_1.c @@ -524,6 +524,53 @@ void CalculateMonStats(struct Pokemon *mon) SetMonData(mon, MON_DATA_HP, ¤tHP); } +#if DEBUG +void debug_sub_803F55C(struct Pokemon *mon) +{ + s32 currentHP = GetMonData(mon, MON_DATA_HP, NULL); + s32 hpIV = GetMonData(mon, MON_DATA_HP_IV, NULL); + s32 hpEV = GetMonData(mon, MON_DATA_HP_EV, NULL); + s32 attackIV = GetMonData(mon, MON_DATA_ATK_IV, NULL); + s32 attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL); + s32 defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL); + s32 defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL); + s32 speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL); + s32 speedEV = GetMonData(mon, MON_DATA_SPEED_EV, NULL); + s32 spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL); + s32 spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL); + s32 spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL); + s32 spDefenseEV = GetMonData(mon, MON_DATA_SPDEF_EV, NULL); + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + s32 level = GetLevelFromMonExp(mon); + s32 newMaxHP; + + SetMonData(mon, MON_DATA_LEVEL, &level); + + if (species == SPECIES_SHEDINJA) + { + newMaxHP = 1; + } + else + { + s32 n = 2 * gBaseStats[species].baseHP + hpIV; + newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10; + } + + SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP); + + CALC_STAT(baseAttack, attackIV, attackEV, 1, MON_DATA_ATK) + CALC_STAT(baseDefense, defenseIV, defenseEV, 2, MON_DATA_DEF) + CALC_STAT(baseSpeed, speedIV, speedEV, 3, MON_DATA_SPEED) + CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, 4, MON_DATA_SPATK) + CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, 5, MON_DATA_SPDEF) + + if (newMaxHP < currentHP) + currentHP = newMaxHP; + + SetMonData(mon, MON_DATA_HP, ¤tHP); +} +#endif + void sub_803B4B4(const struct BoxPokemon *src, struct Pokemon *dest) { u32 value = 0; diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index c0cae9353..532340ce4 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -31,6 +31,7 @@ #include "item_menu.h" #include "player_pc.h" #include "ewram.h" +#include "script.h" /* Pokemon menu: @@ -45,6 +46,7 @@ struct PokeMenuFieldMoveFunc u8 field_1; }; +extern u8 gUnknown_020297ED; extern u8 gUnknown_020384F0; extern u8 gUnknown_0202E8F4; extern u8 gUnknown_0202E8F5; @@ -900,9 +902,10 @@ static void sub_808AE08(void) static bool8 SetUpFieldMove_Waterfall(void) { s16 x, y; + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE - && IsPlayerSurfingNorth() == TRUE) + && IsPlayerSurfingNorth() == TRUE) { gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_808AE08; @@ -912,6 +915,20 @@ static bool8 SetUpFieldMove_Waterfall(void) return FALSE; } +#if DEBUG +void debug_sub_80986AC(void) +{ + s16 x, y; + + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE + && IsPlayerSurfingNorth() == TRUE) + sub_808AE08(); + else + ScriptContext2_Disable(); +} +#endif + static void sub_808AE8C(void) { u8 i; @@ -921,7 +938,11 @@ static void sub_808AE8C(void) if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) { sub_806D668(i); - if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !CanMonLearnTMHM(&gPlayerParty[i], arg)) + if ( +#if DEBUG + gUnknown_020297ED == 0 && +#endif + (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !CanMonLearnTMHM(&gPlayerParty[i], arg))) sub_806BC3C(i, 0x9A); else if (pokemon_has_move(&gPlayerParty[i], ItemIdToBattleMoveId(gSpecialVar_ItemId))) sub_806BC3C(i, 0xA8); diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 001cebe45..cd4c18252 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -13,7 +13,8 @@ extern const struct StorageAction gUnknown_083B6DF4[]; EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; -void sub_8098898(u8 index) { +void sub_8098898(u8 index) +{ u8 *ptr; Menu_DrawStdWindowFrame(10, 16, 29, 19); diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 96f9c44f9..f1bded592 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -41,11 +41,11 @@ static void sub_80A0090(struct Pokemon *); static void sub_80A015C(struct Pokemon *); static void sub_809DE44(void); static void sub_809EB40(u8); -static void sub_809EBC4(void); -static void sub_809E044(void); +/*static*/ void sub_809EBC4(void); +/*static*/ void sub_809E044(void); static void sub_80A1D84(struct Pokemon *); -static void sub_80A18C4(void); -static bool8 LoadPokemonSummaryScreenGraphics(void); +/*static*/ void sub_80A18C4(void); +/*static*/ bool8 LoadPokemonSummaryScreenGraphics(void); static bool8 MonKnowsMultipleMoves(struct Pokemon *); static void PrintSummaryWindowHeaderText(void); static void sub_80A1DCC(struct Pokemon *); @@ -63,8 +63,8 @@ static void PrintHeldItemName(u16, u8, u8); static void PrintNumRibbons(struct Pokemon *); static void DrawExperienceProgressBar(struct Pokemon *, u8, u8); static void sub_809E13C(u8 taskId); -static void sub_80A1950(void); -static void sub_809DE64(void); +/*static*/ void sub_80A1950(void); +/*static*/ void sub_809DE64(void); static void SummaryScreenHandleAButton(u8); static void SummaryScreenHandleUpDownInput(u8, s8); static bool8 sub_809F7D0(u8); @@ -572,7 +572,43 @@ static const u8 sUnknown_083C15BC[] = { -1, 15, 0, 10, }; - +#if DEBUG +__attribute__((naked)) +void sub_809D844(void) +{ + asm("\ + push {lr}\n\ + add sp, sp, #0xfffffffc\n\ + bl RunTasks\n\ + bl AnimateSprites\n\ + bl BuildOamBuffer\n\ + bl UpdatePaletteFade\n\ + ldr r0, ._2\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._1 @cond_branch\n\ + ldr r0, ._2 + 4\n\ + ldr r1, ._2 + 8\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + mov r1, #0x3\n\ + str r1, [sp]\n\ + mov r1, #0x14\n\ + mov r2, #0x1\n\ + mov r3, #0x2\n\ + bl debug_sub_8008264\n\ +._1:\n\ + add sp, sp, #0x4\n\ + pop {r0}\n\ + bx r0\n\ +._3:\n\ + .align 2, 0\n\ +._2:\n\ + .word gLinkOpen\n\ + .word gLink\n\ + .word 0xfbd"); +} +#else void sub_809D844(void) { RunTasks(); @@ -580,6 +616,7 @@ void sub_809D844(void) BuildOamBuffer(); UpdatePaletteFade(); } +#endif void sub_809D85C(void) { @@ -689,6 +726,491 @@ void sub_809DA1C(void) } } +#if DEBUG +__attribute__((naked)) +bool8 sub_809DA84(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + add sp, sp, #0xfffffff8\n\ + ldr r1, ._52\n\ + ldr r2, ._52 + 4\n\ + add r0, r1, r2\n\ + ldrb r0, [r0]\n\ + mov ip, r1\n\ + cmp r0, #0x16\n\ + bls ._50 @cond_branch\n\ + b ._51\n\ +._50:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._52 + 8\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._53:\n\ + .align 2, 0\n\ +._52:\n\ + .word gMain\n\ + .word 0x43c\n\ + .word ._54\n\ +._54:\n\ + .word ._55\n\ + .word ._56\n\ + .word ._57\n\ + .word ._58\n\ + .word ._59\n\ + .word ._60\n\ + .word ._61\n\ + .word ._62\n\ + .word ._63\n\ + .word ._64\n\ + .word ._65\n\ + .word ._66\n\ + .word ._67\n\ + .word ._68\n\ + .word ._69\n\ + .word ._70\n\ + .word ._71\n\ + .word ._72\n\ + .word ._73\n\ + .word ._74\n\ + .word ._75\n\ + .word ._76\n\ + .word ._77\n\ +._55:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + bl ResetSpriteData\n\ + b ._146\n\ +._56:\n\ + bl ScanlineEffect_Stop\n\ + ldr r1, ._80\n\ + ldr r2, ._80 + 4\n\ + add r1, r1, r2\n\ + b ._153\n\ +._81:\n\ + .align 2, 0\n\ +._80:\n\ + .word gMain\n\ + .word 0x43c\n\ +._57:\n\ + bl FreeAllSpritePalettes\n\ + b ._146\n\ +._58:\n\ + mov r2, #0xc0\n\ + lsl r2, r2, #0x13\n\ + mov r3, #0x80\n\ + lsl r3, r3, #0x9\n\ + mov r5, #0x0\n\ + ldr r1, ._85\n\ + mov r4, #0x80\n\ + lsl r4, r4, #0x5\n\ + ldr r6, ._85 + 4\n\ + mov r7, #0x85\n\ + lsl r7, r7, #0x18\n\ +._83:\n\ + str r5, [sp, #0x4]\n\ + add r0, sp, #0x4\n\ + str r0, [r1]\n\ + str r2, [r1, #0x4]\n\ + str r6, [r1, #0x8]\n\ + ldr r0, [r1, #0x8]\n\ + add r2, r2, r4\n\ + sub r3, r3, r4\n\ + cmp r3, r4\n\ + bhi ._83 @cond_branch\n\ + str r5, [sp, #0x4]\n\ + add r0, sp, #0x4\n\ + str r0, [r1]\n\ + str r2, [r1, #0x4]\n\ + lsr r0, r3, #0x2\n\ + orr r0, r0, r7\n\ + str r0, [r1, #0x8]\n\ + ldr r0, [r1, #0x8]\n\ + ldr r1, ._85 + 8\n\ + add r1, r1, ip\n\ + b ._153\n\ +._86:\n\ + .align 2, 0\n\ +._85:\n\ + .word 0x40000d4\n\ + .word 0x85000400\n\ + .word 0x43c\n\ +._59:\n\ + bl sub_809DE64\n\ + ldr r1, ._88\n\ + ldr r2, ._88 + 4\n\ + add r1, r1, r2\n\ + b ._153\n\ +._89:\n\ + .align 2, 0\n\ +._88:\n\ + .word gMain\n\ + .word 0x43c\n\ +._60:\n\ + ldr r0, ._91\n\ + bl Text_LoadWindowTemplate\n\ + b ._146\n\ +._92:\n\ + .align 2, 0\n\ +._91:\n\ + .word gWindowTemplate_81E6E6C\n\ +._61:\n\ + ldr r0, ._94\n\ + bl MultistepInitMenuWindowBegin\n\ + ldr r1, ._94 + 4\n\ + ldr r2, ._94 + 8\n\ + add r1, r1, r2\n\ + b ._153\n\ +._95:\n\ + .align 2, 0\n\ +._94:\n\ + .word gWindowTemplate_81E6E6C\n\ + .word gMain\n\ + .word 0x43c\n\ +._62:\n\ + bl MultistepInitMenuWindowContinue\n\ + cmp r0, #0\n\ + bne ._96 @cond_branch\n\ + b ._157\n\ +._96:\n\ + b ._146\n\ +._63:\n\ + bl sub_809DA1C\n\ + ldr r1, ._100\n\ + ldr r2, ._100 + 4\n\ + add r1, r1, r2\n\ + b ._153\n\ +._101:\n\ + .align 2, 0\n\ +._100:\n\ + .word gMain\n\ + .word 0x43c\n\ +._64:\n\ + ldr r1, ._103\n\ + ldr r2, ._103 + 4\n\ + ldr r0, ._103 + 8\n\ + str r1, [r0]\n\ + str r2, [r0, #0x4]\n\ + ldr r1, ._103 + 12\n\ + str r1, [r0, #0x8]\n\ + ldr r1, [r0, #0x8]\n\ + ldr r1, ._103 + 16\n\ + ldr r2, ._103 + 20\n\ + str r1, [r0]\n\ + str r2, [r0, #0x4]\n\ + ldr r1, ._103 + 24\n\ + str r1, [r0, #0x8]\n\ + ldr r0, [r0, #0x8]\n\ + ldr r0, ._103 + 28\n\ + add r0, r0, #0x74\n\ + mov r1, #0x0\n\ + strb r1, [r0]\n\ + ldr r1, ._103 + 32\n\ + add r1, r1, ip\n\ + b ._153\n\ +._104:\n\ + .align 2, 0\n\ +._103:\n\ + .word gSummaryScreenTextTiles\n\ + .word 0x600d000\n\ + .word 0x40000d4\n\ + .word 0x800000a0\n\ + .word sSummaryScreenButtonTiles\n\ + .word 0x600d140\n\ + .word 0x80000080\n\ + .word +0x2018000\n\ + .word 0x43c\n\ +._65:\n\ + bl LoadPokemonSummaryScreenGraphics\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._105 @cond_branch\n\ + b ._157\n\ +._105:\n\ + ldr r0, ._108\n\ + add r0, r0, #0x74\n\ + mov r1, #0x0\n\ + strb r1, [r0]\n\ + b ._146\n\ +._109:\n\ + .align 2, 0\n\ +._108:\n\ + .word +0x2018000\n\ +._66:\n\ + bl sub_80A18C4\n\ + ldr r1, ._111\n\ + ldr r2, ._111 + 4\n\ + add r1, r1, r2\n\ + b ._153\n\ +._112:\n\ + .align 2, 0\n\ +._111:\n\ + .word gMain\n\ + .word 0x43c\n\ +._67:\n\ + ldr r4, ._115\n\ + add r0, r4, #0\n\ + bl sub_809F678\n\ + add r0, r4, #0\n\ + bl GetMonStatusAndPokerus\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._113 @cond_branch\n\ + mov r0, #0x0\n\ + bl sub_80A12D0\n\ + b ._114\n\ +._116:\n\ + .align 2, 0\n\ +._115:\n\ + .word +0x2018010\n\ +._113:\n\ + mov r0, #0xa\n\ + bl sub_80A12D0\n\ +._114:\n\ + ldr r0, ._118\n\ + bl DrawPokerusSurvivorDot\n\ + b ._146\n\ +._119:\n\ + .align 2, 0\n\ +._118:\n\ + .word +0x2018010\n\ +._68:\n\ + bl sub_80A1950\n\ + ldr r0, ._121\n\ + bl sub_80A1D84\n\ + ldr r1, ._121 + 4\n\ + ldr r2, ._121 + 8\n\ + add r1, r1, r2\n\ + b ._153\n\ +._122:\n\ + .align 2, 0\n\ +._121:\n\ + .word +0x2018010\n\ + .word gMain\n\ + .word 0x43c\n\ +._69:\n\ + ldr r4, ._124\n\ + add r0, r4, #0\n\ + bl sub_80A1DE8\n\ + add r4, r4, #0x64\n\ + mov r0, #0x0\n\ + strb r0, [r4]\n\ + b ._146\n\ +._125:\n\ + .align 2, 0\n\ +._124:\n\ + .word +0x2018010\n\ +._70:\n\ + ldr r4, ._129\n\ + add r5, r4, #0\n\ + add r5, r5, #0x64\n\ + add r0, r4, #0\n\ + add r1, r5, #0\n\ + bl sub_809F6B4\n\ + sub r4, r4, #0x10\n\ + strb r0, [r4, #0xc]\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0xff\n\ + bne ._126 @cond_branch\n\ + b ._157\n\ +._126:\n\ + mov r0, #0x0\n\ + strb r0, [r5]\n\ + ldr r1, ._129 + 4\n\ + ldr r2, ._129 + 8\n\ + add r1, r1, r2\n\ + b ._153\n\ +._130:\n\ + .align 2, 0\n\ +._129:\n\ + .word +0x2018010\n\ + .word gMain\n\ + .word 0x43c\n\ +._71:\n\ + bl sub_809E044\n\ + bl DrawSummaryScreenNavigationDots\n\ + b ._146\n\ +._72:\n\ + ldr r1, ._134\n\ + ldrb r0, [r1, #0xb]\n\ + cmp r0, #0x1\n\ + bhi ._132 @cond_branch\n\ + ldr r0, ._134 + 4\n\ + ldrb r1, [r1, #0xb]\n\ + lsl r1, r1, #0x2\n\ + add r1, r1, r0\n\ + ldr r0, [r1]\n\ + bl _call_via_r0\n\ +._132:\n\ + ldr r1, ._134 + 8\n\ + ldr r2, ._134 + 12\n\ + add r1, r1, r2\n\ + b ._153\n\ +._135:\n\ + .align 2, 0\n\ +._134:\n\ + .word +0x2018000\n\ + .word sUnknown_083C1580\n\ + .word gMain\n\ + .word 0x43c\n\ +._73:\n\ + ldr r0, ._137\n\ + bl sub_809FAC8\n\ + b ._146\n\ +._138:\n\ + .align 2, 0\n\ +._137:\n\ + .word +0x2018010\n\ +._74:\n\ + ldr r2, ._140\n\ + ldr r0, ._140 + 4\n\ + ldrb r1, [r0, #0xb]\n\ + lsl r1, r1, #0x2\n\ + add r1, r1, r2\n\ + add r0, r0, #0x10\n\ + ldr r1, [r1]\n\ + bl _call_via_r1\n\ + ldr r1, ._140 + 8\n\ + ldr r2, ._140 + 12\n\ + add r1, r1, r2\n\ + b ._153\n\ +._141:\n\ + .align 2, 0\n\ +._140:\n\ + .word sUnknown_083C1598\n\ + .word +0x2018000\n\ + .word gMain\n\ + .word 0x43c\n\ +._75:\n\ + ldr r0, ._144\n\ + mov r1, #0x2d\n\ + bl GetMonData\n\ + add r1, r0, #0\n\ + cmp r1, #0\n\ + beq ._142 @cond_branch\n\ + ldr r1, ._144 + 4\n\ + mov r2, #0x80\n\ + lsl r2, r2, #0x1\n\ + add r0, r2, #0\n\ + strh r0, [r1]\n\ + b ._146\n\ +._145:\n\ + .align 2, 0\n\ +._144:\n\ + .word +0x2018010\n\ + .word gBattle_BG3_X\n\ +._142:\n\ + ldr r0, ._147\n\ + strh r1, [r0]\n\ + b ._146\n\ +._148:\n\ + .align 2, 0\n\ +._147:\n\ + .word gBattle_BG3_X\n\ +._76:\n\ + bl sub_809EBC4\n\ + ldr r0, ._151\n\ + add r0, r0, #0x79\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._149 @cond_branch\n\ + mov r0, #0x0\n\ + mov r1, #0x0\n\ + bl sub_80A1488\n\ + mov r0, #0x0\n\ + mov r1, #0x0\n\ + bl sub_80A1654\n\ + b ._150\n\ +._152:\n\ + .align 2, 0\n\ +._151:\n\ + .word +0x2018000\n\ +._149:\n\ + mov r0, #0xa\n\ + mov r1, #0x0\n\ + bl sub_80A1488\n\ + mov r0, #0xa\n\ + mov r1, #0x0\n\ + bl sub_80A1654\n\ +._150:\n\ + bl PrintSummaryWindowHeaderText\n\ + ldr r1, ._154\n\ + ldr r2, ._154 + 4\n\ + add r1, r1, r2\n\ + b ._153\n\ +._155:\n\ + .align 2, 0\n\ +._154:\n\ + .word gMain\n\ + .word 0x43c\n\ +._77:\n\ + bl sub_8055870\n\ + cmp r0, #0x1\n\ + beq ._157 @cond_branch\n\ +._146:\n\ + ldr r1, ._158\n\ + ldr r0, ._158 + 4\n\ + add r1, r1, r0\n\ +._153:\n\ + ldrb r0, [r1]\n\ + add r0, r0, #0x1\n\ + strb r0, [r1]\n\ + b ._157\n\ +._159:\n\ + .align 2, 0\n\ +._158:\n\ + .word gMain\n\ + .word 0x43c\n\ +._51:\n\ + ldr r0, ._162\n\ + bl SetVBlankCallback\n\ + mov r0, #0x1\n\ + str r0, [sp]\n\ + mov r0, #0xff\n\ + mov r1, #0x0\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginHardwarePaletteFade\n\ + ldr r0, ._162 + 4\n\ + bl SetMainCallback2\n\ + ldr r2, ._162 + 8\n\ + ldrb r1, [r2, #0x8]\n\ + mov r0, #0x7f\n\ + and r0, r0, r1\n\ + strb r0, [r2, #0x8]\n\ + ldr r0, ._162 + 12\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._160 @cond_branch\n\ + ldr r0, ._162 + 16\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x8\n\ + ldr r2, ._162 + 20\n\ + mov r3, #0x3\n\ + bl debug_sub_8008218\n\ +._160:\n\ + mov r0, #0x1\n\ + b ._161\n\ +._163:\n\ + .align 2, 0\n\ +._162:\n\ + .word sub_809D85C+1\n\ + .word sub_809D844+1\n\ + .word gPaletteFade\n\ + .word gLinkOpen\n\ + .word 0x600dde0\n\ + .word 0x600f000\n\ +._157:\n\ + mov r0, #0x0\n\ +._161:\n\ + add sp, sp, #0x8\n\ + pop {r4, r5, r6, r7}\n\ + pop {r1}\n\ + bx r1"); +} +#else bool8 sub_809DA84(void) { switch (gMain.state) @@ -846,13 +1368,15 @@ bool8 sub_809DA84(void) return FALSE; } +#endif static void sub_809DE44(void) { - while (sub_809DA84() != TRUE && sub_80F9344() != TRUE); + while (sub_809DA84() != TRUE && sub_80F9344() != TRUE) + ; } -static void sub_809DE64(void) +/*static*/ void sub_809DE64(void) { REG_BG0CNT = 0x1E08; REG_BG1CNT = 0x4801; @@ -879,7 +1403,7 @@ static void sub_809DE64(void) REG_DISPCNT = 0x1F40; } -static bool8 LoadPokemonSummaryScreenGraphics(void) +/*static*/ bool8 LoadPokemonSummaryScreenGraphics(void) { switch (pssData.loadGfxState) { @@ -929,7 +1453,7 @@ static bool8 LoadPokemonSummaryScreenGraphics(void) return FALSE; } -static void sub_809E044(void) +/*static*/ void sub_809E044(void) { LoadPalette(&gUnknownPalette_81E6692[28], 129, 2); LoadPalette(&gUnknownPalette_81E6692[30], 136, 2); @@ -1508,7 +2032,7 @@ static void sub_809EB40(u8 taskId) } } -static void sub_809EBC4(void) +/*static*/ void sub_809EBC4(void) { if (pssData.page != PSS_PAGE_INFO) { @@ -2566,14 +3090,14 @@ static void sub_809FC34(struct Pokemon *mon) buffer = gStringVar1; buffer = sub_80A1E58(buffer, 13); buffer = StringCopy(buffer, gOtherText_OriginalTrainer); - buffer = StringCopy(buffer, gOtherText_FiveQuestionsAndSlash); + buffer = StringCopy(buffer, gOtherText_FiveQuestions); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; buffer[2] = 0x4E; buffer[3] = EOS; Menu_PrintText(gStringVar1, 11, 4); - sub_80A1EF8(gOtherText_FiveQuestionsAndSlash, 13, 193, 32, 1); + sub_80A1EF8(gOtherText_FiveQuestions, 13, 193, 32, 1); sub_80A198C(9, 120, 48, 0); friendship = GetMonData(mon, MON_DATA_FRIENDSHIP); @@ -4875,7 +5399,7 @@ static void sub_80A1888(struct Sprite *sprite) } } -static void sub_80A18C4(void) +/*static*/ void sub_80A18C4(void) { u8 i; @@ -4899,7 +5423,7 @@ static void sub_80A1918(u8 a, u8 invisible) gSprites[ewram1A000[a]].invisible = invisible; } -static void sub_80A1950(void) +/*static*/ void sub_80A1950(void) { u8 i; diff --git a/src/pokenav_before.c b/src/pokenav_before.c index b31be2ce1..b292e80c4 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -132,6 +132,10 @@ extern const u8 gUnknown_08E99FB0[]; extern const u8 gUnknown_08E9A100[]; extern const u16 gPokenavHoennMap1_Pal[]; +// TODO: decompile the debug code so the compiler doesn't complain about +// unused static functions +#define static + static void sub_80EBCA8(); static void sub_80EEE20(); static bool8 sub_80EEE54(); @@ -297,7 +301,6 @@ extern void sub_80F19FC(); extern u16 gKeyRepeatStartDelay; - void sub_80EBA5C() { switch (gMain.state) @@ -469,6 +472,315 @@ void sub_80EBDBC(void (*func)(void)) ewram0_10.var304 = 0; } +#if DEBUG +__attribute__((naked)) +void sub_80EBDD8() +{ + asm("\ + push {lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._64\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r2, r1, #0\n\ + cmp r0, #0x11\n\ + bls ._62 @cond_branch\n\ + b ._131\n\ +._62:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._64 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._65:\n\ + .align 2, 0\n\ +._64:\n\ + .word gSharedMem\n\ + .word ._66\n\ +._66:\n\ + .word ._67\n\ + .word ._68\n\ + .word ._69\n\ + .word ._70\n\ + .word ._71\n\ + .word ._72\n\ + .word ._73\n\ + .word ._74\n\ + .word ._75\n\ + .word ._76\n\ + .word ._77\n\ + .word ._78\n\ + .word ._79\n\ + .word ._80\n\ + .word ._81\n\ + .word ._82\n\ + .word ._83\n\ + .word ._84\n\ +._67:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x13\n\ + mov r0, #0x0\n\ + strh r0, [r1]\n\ + ldr r1, ._86\n\ + ldr r3, ._86 + 4\n\ + add r0, r1, r3\n\ + ldrb r2, [r0]\n\ + sub r3, r3, #0x2f\n\ + add r0, r1, r3\n\ + strb r2, [r0]\n\ + ldr r0, ._86 + 8\n\ + add r2, r1, r0\n\ + mov r0, #0x5\n\ + strb r0, [r2]\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._124\n\ +._87:\n\ + .align 2, 0\n\ +._86:\n\ + .word gSharedMem\n\ + .word 0x6ddc\n\ + .word 0x6dae\n\ +._68:\n\ + bl sub_80F3FF0\n\ + ldr r1, ._91\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r1, r3\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._69:\n\ + bl sub_80F4024\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._88 @cond_branch\n\ + b ._131\n\ +._88:\n\ + ldr r1, ._91\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._124\n\ +._92:\n\ + .align 2, 0\n\ +._91:\n\ + .word gSharedMem\n\ +._70:\n\ + bl sub_80F2598\n\ + ldr r1, ._94\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._124\n\ +._95:\n\ + .align 2, 0\n\ +._94:\n\ + .word gSharedMem\n\ +._71:\n\ + bl sub_80EEE20\n\ + ldr r1, ._99\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r1, r3\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._72:\n\ + bl sub_80EEE54\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._96 @cond_branch\n\ + b ._131\n\ +._96:\n\ + bl sub_80EEE08\n\ + ldr r1, ._99\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._124\n\ +._100:\n\ + .align 2, 0\n\ +._99:\n\ + .word gSharedMem\n\ +._73:\n\ + mov r0, #0x0\n\ + bl sub_80EF248\n\ + ldr r1, ._104\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._74:\n\ + mov r0, #0x0\n\ + bl sub_80EF284\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._101 @cond_branch\n\ + b ._131\n\ +._101:\n\ + b ._110\n\ +._105:\n\ + .align 2, 0\n\ +._104:\n\ + .word gSharedMem\n\ +._75:\n\ + mov r0, #0x0\n\ + bl sub_80F1B8C\n\ + ldr r1, ._108\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._76:\n\ + mov r0, #0x0\n\ + bl sub_80F1BC8\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._131 @cond_branch\n\ + ldr r1, ._108\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._124\n\ +._109:\n\ + .align 2, 0\n\ +._108:\n\ + .word gSharedMem\n\ +._77:\n\ + ldr r0, ._111\n\ + bl SetVBlankCallback\n\ + b ._110\n\ +._112:\n\ + .align 2, 0\n\ +._111:\n\ + .word sub_80EBD18+1\n\ +._78:\n\ + mov r0, #0x1\n\ + neg r0, r0\n\ + mov r1, #0x0\n\ + str r1, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r1, ._114\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._124\n\ +._115:\n\ + .align 2, 0\n\ +._114:\n\ + .word gSharedMem\n\ +._79:\n\ + mov r0, #0x0\n\ + bl sub_80EED2C\n\ + ldr r1, ._117\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._124\n\ +._118:\n\ + .align 2, 0\n\ +._117:\n\ + .word gSharedMem\n\ +._80:\n\ + ldr r0, ._121\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._131 @cond_branch\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r2, r3\n\ + b ._124\n\ +._122:\n\ + .align 2, 0\n\ +._121:\n\ + .word gPaletteFade\n\ +._81:\n\ + mov r0, #0x0\n\ + bl sub_80F2C80\n\ + ldr r1, ._125\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._82:\n\ + mov r0, #0x0\n\ + bl sub_80F2CBC\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._131 @cond_branch\n\ + ldr r1, ._125\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._124\n\ +._126:\n\ + .align 2, 0\n\ +._125:\n\ + .word gSharedMem\n\ +._83:\n\ + bl sub_80F1DF0\n\ +._110:\n\ + ldr r1, ._128\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r1, r3\n\ +._124:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._131\n\ +._129:\n\ + .align 2, 0\n\ +._128:\n\ + .word gSharedMem\n\ +._84:\n\ + bl sub_80F1E50\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._131 @cond_branch\n\ + mov r0, #0x0\n\ + mov r1, #0x0\n\ + bl sub_80EF428\n\ + ldr r0, ._132\n\ + bl sub_80EBDBC\n\ + ldr r0, ._132 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._131 @cond_branch\n\ + ldr r0, ._132 + 8\n\ + ldr r2, ._132 + 12\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ +._131:\n\ + add sp, sp, #0x4\n\ + pop {r0}\n\ + bx r0\n\ +._133:\n\ + .align 2, 0\n\ +._132:\n\ + .word sub_80EC268+1\n\ + .word gLinkOpen\n\ + .word 0x6007de0\n\ + .word 0x600f800"); +} +#else void sub_80EBDD8() { switch (ewram0_10.var304) @@ -556,7 +868,285 @@ void sub_80EBDD8() break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_80EC00C() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._136\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r4, r1, #0\n\ + cmp r0, #0xd\n\ + bls ._134 @cond_branch\n\ + b ._191\n\ +._134:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._136 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._137:\n\ + .align 2, 0\n\ +._136:\n\ + .word gSharedMem\n\ + .word ._138\n\ +._138:\n\ + .word ._139\n\ + .word ._140\n\ + .word ._141\n\ + .word ._142\n\ + .word ._143\n\ + .word ._144\n\ + .word ._145\n\ + .word ._146\n\ + .word ._147\n\ + .word ._148\n\ + .word ._149\n\ + .word ._150\n\ + .word ._151\n\ + .word ._152\n\ +._139:\n\ + bl sub_80EEF78\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._153 @cond_branch\n\ + b ._191\n\ +._153:\n\ + ldr r0, ._156\n\ + bl SetVBlankCallback\n\ + bl sub_80EED1C\n\ + ldr r4, ._156 + 4\n\ + ldr r1, ._156 + 8\n\ + add r0, r4, r1\n\ + ldrb r1, [r0]\n\ + ldr r2, ._156 + 12\n\ + add r0, r4, r2\n\ + strb r1, [r0]\n\ + ldr r0, ._156 + 16\n\ + add r1, r4, r0\n\ + mov r0, #0x5\n\ + strb r0, [r1]\n\ + bl sub_80EEE08\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r4, r4, r1\n\ + ldrh r0, [r4]\n\ + add r0, r0, #0x1\n\ + strh r0, [r4]\n\ + b ._191\n\ +._157:\n\ + .align 2, 0\n\ +._156:\n\ + .word sub_80EBD80+1\n\ + .word gSharedMem\n\ + .word 0x6ddc\n\ + .word 0x6dad\n\ + .word 0x6dae\n\ +._140:\n\ + mov r0, #0x0\n\ + bl sub_80EF248\n\ + ldr r1, ._161\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._141:\n\ + mov r0, #0x0\n\ + bl sub_80EF284\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._158 @cond_branch\n\ + b ._191\n\ +._158:\n\ + ldr r1, ._161\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._184\n\ +._162:\n\ + .align 2, 0\n\ +._161:\n\ + .word gSharedMem\n\ +._142:\n\ + mov r0, #0x0\n\ + bl sub_80F1B8C\n\ + ldr r1, ._166\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._143:\n\ + mov r0, #0x0\n\ + bl sub_80F1BC8\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._163 @cond_branch\n\ + b ._191\n\ +._163:\n\ + ldr r1, ._166\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._184\n\ +._167:\n\ + .align 2, 0\n\ +._166:\n\ + .word gSharedMem\n\ +._144:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._191 @cond_branch\n\ + b ._169\n\ +._145:\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r0, ._171\n\ + bl SetVBlankCallback\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._184\n\ +._172:\n\ + .align 2, 0\n\ +._171:\n\ + .word sub_80EBD18+1\n\ +._146:\n\ + mov r0, #0x0\n\ + bl sub_80EED2C\n\ + ldr r1, ._174\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._184\n\ +._175:\n\ + .align 2, 0\n\ +._174:\n\ + .word gSharedMem\n\ +._147:\n\ + ldr r0, ._178\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._191 @cond_branch\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._184\n\ +._179:\n\ + .align 2, 0\n\ +._178:\n\ + .word gPaletteFade\n\ +._148:\n\ + bl sub_80F2598\n\ + ldr r1, ._181\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._184\n\ +._182:\n\ + .align 2, 0\n\ +._181:\n\ + .word gSharedMem\n\ +._149:\n\ + mov r0, #0x0\n\ + bl sub_80F2C80\n\ + ldr r1, ._185\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._150:\n\ + mov r0, #0x0\n\ + bl sub_80F2CBC\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._191 @cond_branch\n\ + ldr r1, ._185\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._184\n\ +._186:\n\ + .align 2, 0\n\ +._185:\n\ + .word gSharedMem\n\ +._151:\n\ + bl sub_80F1DF0\n\ +._169:\n\ + ldr r1, ._188\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ +._184:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._191\n\ +._189:\n\ + .align 2, 0\n\ +._188:\n\ + .word gSharedMem\n\ +._152:\n\ + bl sub_80F1E50\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._191 @cond_branch\n\ + ldr r0, ._192\n\ + ldr r1, ._192 + 4\n\ + add r0, r0, r1\n\ + ldrb r1, [r0]\n\ + mov r0, #0x0\n\ + bl sub_80EF428\n\ + ldr r0, ._192 + 8\n\ + bl sub_80EBDBC\n\ + ldr r0, ._192 + 12\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._191 @cond_branch\n\ + ldr r0, ._192 + 16\n\ + ldr r2, ._192 + 20\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ +._191:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._193:\n\ + .align 2, 0\n\ +._192:\n\ + .word gSharedMem\n\ + .word 0x6dad\n\ + .word sub_80EC268+1\n\ + .word gLinkOpen\n\ + .word 0x6007de0\n\ + .word 0x600f800"); +} +#else void sub_80EC00C() { switch (ewram0_10.var304) @@ -630,6 +1220,7 @@ void sub_80EC00C() break; } } +#endif void sub_80EC210() { @@ -751,6 +1342,262 @@ void sub_80EC268() } } +#if DEBUG +__attribute__((naked)) +void sub_80EC4A0() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._285\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r4, r1, #0\n\ + cmp r0, #0xe\n\ + bls ._283 @cond_branch\n\ + b ._340\n\ +._283:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._285 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._286:\n\ + .align 2, 0\n\ +._285:\n\ + .word gSharedMem\n\ + .word ._287\n\ +._287:\n\ + .word ._288\n\ + .word ._289\n\ + .word ._290\n\ + .word ._291\n\ + .word ._292\n\ + .word ._293\n\ + .word ._294\n\ + .word ._295\n\ + .word ._296\n\ + .word ._297\n\ + .word ._298\n\ + .word ._299\n\ + .word ._300\n\ + .word ._301\n\ + .word ._302\n\ +._288:\n\ + bl sub_80F1E84\n\ + mov r0, #0x0\n\ + bl sub_80F2D04\n\ + b ._336\n\ +._289:\n\ + bl sub_80F1F10\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._304 @cond_branch\n\ + b ._340\n\ +._304:\n\ + ldr r0, ._308\n\ + ldrb r1, [r0, #0x15]\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + mov r1, #0x8\n\ + cmp r0, #0\n\ + beq ._306 @cond_branch\n\ + mov r1, #0x7\n\ +._306:\n\ + add r0, r1, #0\n\ + bl sub_80EEFBC\n\ + ldr r1, ._308 + 4\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._335\n\ +._309:\n\ + .align 2, 0\n\ +._308:\n\ + .word gSaveBlock2\n\ + .word gSharedMem\n\ +._290:\n\ + bl sub_80EEF34\n\ + lsl r0, r0, #0x18\n\ + lsr r2, r0, #0x18\n\ + cmp r2, #0\n\ + beq ._310 @cond_branch\n\ + b ._340\n\ +._310:\n\ + ldr r4, ._313\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + str r2, [sp]\n\ + mov r2, #0x0\n\ + mov r3, #0x10\n\ + bl BeginNormalPaletteFade\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._335\n\ +._314:\n\ + .align 2, 0\n\ +._313:\n\ + .word gSharedMem\n\ +._291:\n\ + ldr r0, ._318\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._315 @cond_branch\n\ + b ._340\n\ +._315:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + bl sub_80EED0C\n\ + b ._336\n\ +._319:\n\ + .align 2, 0\n\ +._318:\n\ + .word gPaletteFade\n\ +._292:\n\ + bl sub_80F2620\n\ + ldr r1, ._321\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._335\n\ +._322:\n\ + .align 2, 0\n\ +._321:\n\ + .word gSharedMem\n\ +._293:\n\ + bl sub_80EF814\n\ + b ._336\n\ +._294:\n\ + bl sub_80EF840\n\ + ldr r1, ._326\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._295:\n\ + bl sub_80EF874\n\ +._328:\n\ + lsl r0, r0, #0x18\n\ +._334:\n\ + cmp r0, #0\n\ + bne ._340 @cond_branch\n\ + b ._336\n\ +._327:\n\ + .align 2, 0\n\ +._326:\n\ + .word gSharedMem\n\ +._296:\n\ + mov r0, #0x4\n\ + bl sub_80F2C80\n\ + ldr r1, ._329\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._297:\n\ + mov r0, #0x4\n\ + bl sub_80F2CBC\n\ + b ._328\n\ +._330:\n\ + .align 2, 0\n\ +._329:\n\ + .word gSharedMem\n\ +._298:\n\ + bl sub_80F2DD8\n\ + ldr r0, ._332\n\ + bl SetVBlankCallback\n\ + ldr r1, ._332 + 4\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._335\n\ +._333:\n\ + .align 2, 0\n\ +._332:\n\ + .word sub_80EBD30+1\n\ + .word gSharedMem\n\ +._299:\n\ + bl sub_8055870\n\ + b ._334\n\ +._300:\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._335\n\ +._301:\n\ + mov r0, #0x1\n\ + bl sub_80EED2C\n\ + ldr r0, ._338\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._336 @cond_branch\n\ + ldr r0, ._338 + 4\n\ + ldr r2, ._338 + 8\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ +._336:\n\ + ldr r1, ._338 + 12\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ +._335:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._340\n\ +._339:\n\ + .align 2, 0\n\ +._338:\n\ + .word gLinkOpen\n\ + .word 0x60075e0\n\ + .word 0x600f800\n\ + .word gSharedMem\n\ +._302:\n\ + ldr r0, ._341\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._340 @cond_branch\n\ + ldr r0, ._341 + 4\n\ + bl sub_80EBDBC\n\ +._340:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._342:\n\ + .align 2, 0\n\ +._341:\n\ + .word gPaletteFade\n\ + .word sub_80EC67C+1"); +} +#else void sub_80EC4A0() { u32 var1; @@ -835,7 +1682,243 @@ void sub_80EC4A0() break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_80EC67C() +{ + asm("\ + push {r4, r5, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._345\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r4, r1, #0\n\ + cmp r0, #0x5\n\ + bls ._343 @cond_branch\n\ + b ._386\n\ +._343:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._345 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._346:\n\ + .align 2, 0\n\ +._345:\n\ + .word gSharedMem\n\ + .word ._347\n\ +._347:\n\ + .word ._348\n\ + .word ._349\n\ + .word ._350\n\ + .word ._351\n\ + .word ._352\n\ + .word ._353\n\ +._348:\n\ + bl sub_80FAB60\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x3\n\ + beq ._354 @cond_branch\n\ + cmp r0, #0x3\n\ + bgt ._355 @cond_branch\n\ + cmp r0, #0x1\n\ + beq ._356 @cond_branch\n\ + b ._386\n\ +._355:\n\ + cmp r0, #0x4\n\ + beq ._358 @cond_branch\n\ + cmp r0, #0x5\n\ + beq ._359 @cond_branch\n\ + b ._386\n\ +._356:\n\ + bl sub_80EED9C\n\ + b ._386\n\ +._354:\n\ + bl sub_80EF9F8\n\ + b ._386\n\ +._358:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r0, ._364\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + mov r1, #0x1\n\ + strh r1, [r0]\n\ + b ._386\n\ +._365:\n\ + .align 2, 0\n\ +._364:\n\ + .word gSharedMem\n\ +._359:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r0, ._367\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r0, r2\n\ + mov r1, #0x4\n\ + strh r1, [r0]\n\ + b ._386\n\ +._368:\n\ + .align 2, 0\n\ +._367:\n\ + .word gSharedMem\n\ +._349:\n\ + ldr r1, ._371\n\ + add r0, r4, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + bne ._369 @cond_branch\n\ + bl sub_80FAEC4\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._380\n\ +._372:\n\ + .align 2, 0\n\ +._371:\n\ + .word 0x6e90\n\ +._369:\n\ + mov r0, #0x1\n\ + bl sub_80EFBDC\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._386 @cond_branch\n\ + bl sub_80FAEC4\n\ + b ._374\n\ +._350:\n\ + bl sub_80FAFC0\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._386 @cond_branch\n\ + ldr r5, ._378\n\ + ldr r1, ._378 + 4\n\ + add r0, r5, r1\n\ + ldrb r4, [r0]\n\ + cmp r4, #0\n\ + bne ._376 @cond_branch\n\ + bl sub_80EFBB0\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r5, r2\n\ + strh r4, [r0]\n\ + b ._386\n\ +._379:\n\ + .align 2, 0\n\ +._378:\n\ + .word gSharedMem\n\ + .word 0x6e90\n\ +._376:\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r5, r0\n\ + b ._380\n\ +._351:\n\ + mov r0, #0x0\n\ + bl sub_80EFBDC\n\ + lsl r0, r0, #0x18\n\ + lsr r4, r0, #0x18\n\ + cmp r4, #0\n\ + bne ._386 @cond_branch\n\ + bl sub_80EFBB0\n\ + ldr r0, ._383\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + strh r4, [r0]\n\ + b ._386\n\ +._384:\n\ + .align 2, 0\n\ +._383:\n\ + .word gSharedMem\n\ +._352:\n\ + mov r2, #0xc2\n\ + lsl r2, r2, #0x2\n\ + add r0, r4, r2\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r3, #0x10\n\ + bl BeginNormalPaletteFade\n\ +._374:\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r4, r0\n\ +._380:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._386\n\ +._353:\n\ + ldr r0, ._389\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._386 @cond_branch\n\ + bl sub_80F2DF4\n\ + mov r0, #0x4\n\ + bl sub_80F2D04\n\ + ldr r3, ._389 + 4\n\ + mov r2, #0x0\n\ + ldr r0, ._389 + 8\n\ + ldr r1, ._389 + 12\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._387 @cond_branch\n\ + mov r2, #0x1\n\ +._387:\n\ + lsl r2, r2, #0x3\n\ + ldrb r1, [r3, #0x15]\n\ + mov r0, #0x9\n\ + neg r0, r0\n\ + and r0, r0, r1\n\ + orr r0, r0, r2\n\ + strb r0, [r3, #0x15]\n\ + ldr r0, ._389 + 16\n\ + bl sub_80EBDBC\n\ +._386:\n\ + ldr r0, ._389 + 20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._388 @cond_branch\n\ + ldr r0, ._389 + 24\n\ + ldr r2, ._389 + 28\n\ + add r0, r0, r2\n\ + ldrb r0, [r0]\n\ + mov r1, #0x4\n\ + str r1, [sp]\n\ + mov r1, #0x1\n\ + mov r2, #0x1\n\ + mov r3, #0x2\n\ + bl debug_sub_8008264\n\ +._388:\n\ + add sp, sp, #0x4\n\ + pop {r4, r5}\n\ + pop {r0}\n\ + bx r0\n\ +._390:\n\ + .align 2, 0\n\ +._389:\n\ + .word gPaletteFade\n\ + .word gSaveBlock2\n\ + .word gSharedMem\n\ + .word 0x6e90\n\ + .word sub_80EC00C+1\n\ + .word gLinkOpen\n\ + .word gLink\n\ + .word 0xfbd"); +} +#else void sub_80EC67C() { switch (ewram0_10.var304) @@ -907,6 +1990,7 @@ void sub_80EC67C() break; } } +#endif void sub_80EC81C() { @@ -1001,6 +2085,275 @@ void sub_80EC9A8() } } +#if DEBUG +__attribute__((naked)) +void sub_80ECA10() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._456\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r4, r1, #0\n\ + cmp r0, #0xd\n\ + bls ._454 @cond_branch\n\ + b ._509\n\ +._454:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._456 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._457:\n\ + .align 2, 0\n\ +._456:\n\ + .word gSharedMem\n\ + .word ._458\n\ +._458:\n\ + .word ._459\n\ + .word ._460\n\ + .word ._461\n\ + .word ._462\n\ + .word ._463\n\ + .word ._464\n\ + .word ._465\n\ + .word ._466\n\ + .word ._467\n\ + .word ._468\n\ + .word ._469\n\ + .word ._470\n\ + .word ._471\n\ + .word ._472\n\ +._459:\n\ + bl sub_80EEF78\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._473 @cond_branch\n\ + b ._509\n\ +._473:\n\ + ldr r0, ._476\n\ + bl SetVBlankCallback\n\ + bl sub_80EED1C\n\ + ldr r4, ._476 + 4\n\ + ldr r1, ._476 + 8\n\ + add r0, r4, r1\n\ + ldrb r1, [r0]\n\ + ldr r2, ._476 + 12\n\ + add r0, r4, r2\n\ + strb r1, [r0]\n\ + ldr r0, ._476 + 16\n\ + add r1, r4, r0\n\ + mov r0, #0x3\n\ + strb r0, [r1]\n\ + bl sub_80EEE08\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r4, r4, r1\n\ + ldrh r0, [r4]\n\ + add r0, r0, #0x1\n\ + strh r0, [r4]\n\ + b ._509\n\ +._477:\n\ + .align 2, 0\n\ +._476:\n\ + .word sub_80EBD80+1\n\ + .word gSharedMem\n\ + .word 0x6df0\n\ + .word 0x6dad\n\ + .word 0x6dae\n\ +._460:\n\ + mov r0, #0x1\n\ + bl sub_80EF248\n\ + ldr r1, ._481\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._461:\n\ + mov r0, #0x1\n\ + bl sub_80EF284\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._478 @cond_branch\n\ + b ._509\n\ +._478:\n\ + ldr r1, ._481\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._502\n\ +._482:\n\ + .align 2, 0\n\ +._481:\n\ + .word gSharedMem\n\ +._462:\n\ + mov r0, #0x1\n\ + bl sub_80F1B8C\n\ + ldr r1, ._486\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._463:\n\ + mov r0, #0x1\n\ + bl sub_80F1BC8\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._483 @cond_branch\n\ + b ._509\n\ +._483:\n\ + ldr r1, ._486\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._502\n\ +._487:\n\ + .align 2, 0\n\ +._486:\n\ + .word gSharedMem\n\ +._464:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._509 @cond_branch\n\ + b ._496\n\ +._465:\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r0, ._491\n\ + bl SetVBlankCallback\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._502\n\ +._492:\n\ + .align 2, 0\n\ +._491:\n\ + .word sub_80EBD18+1\n\ +._466:\n\ + mov r0, #0x0\n\ + bl sub_80EED2C\n\ + ldr r1, ._494\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._502\n\ +._495:\n\ + .align 2, 0\n\ +._494:\n\ + .word gSharedMem\n\ +._467:\n\ + bl sub_80F2598\n\ + b ._496\n\ +._468:\n\ + ldr r0, ._499\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._509 @cond_branch\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r4, r0\n\ + b ._502\n\ +._500:\n\ + .align 2, 0\n\ +._499:\n\ + .word gPaletteFade\n\ +._469:\n\ + mov r0, #0x1\n\ + bl sub_80F2C80\n\ + ldr r1, ._503\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._470:\n\ + mov r0, #0x1\n\ + bl sub_80F2CBC\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._509 @cond_branch\n\ + ldr r1, ._503\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._502\n\ +._504:\n\ + .align 2, 0\n\ +._503:\n\ + .word gSharedMem\n\ +._471:\n\ + bl sub_80F1DF0\n\ +._496:\n\ + ldr r1, ._506\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ +._502:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._509\n\ +._507:\n\ + .align 2, 0\n\ +._506:\n\ + .word gSharedMem\n\ +._472:\n\ + bl sub_80F1E50\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._509 @cond_branch\n\ + ldr r0, ._510\n\ + ldr r1, ._510 + 4\n\ + add r0, r0, r1\n\ + ldrb r1, [r0]\n\ + mov r0, #0x1\n\ + bl sub_80EF428\n\ + ldr r0, ._510 + 8\n\ + bl sub_80EBDBC\n\ + ldr r0, ._510 + 12\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._509 @cond_branch\n\ + ldr r0, ._510 + 16\n\ + ldr r2, ._510 + 20\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ +._509:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._511:\n\ + .align 2, 0\n\ +._510:\n\ + .word gSharedMem\n\ + .word 0x6dad\n\ + .word sub_80EC86C+1\n\ + .word gLinkOpen\n\ + .word 0x6007de0\n\ + .word 0x600f800"); +} +#else void sub_80ECA10() { switch (ewram0_10.var304) @@ -1072,6 +2425,7 @@ void sub_80ECA10() break; } } +#endif void sub_80ECC08() { @@ -1127,6 +2481,362 @@ void sub_80ECC08() } } +#if DEBUG +__attribute__((naked)) +void sub_80ECD80() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._564\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r4, r1, #0\n\ + cmp r0, #0x14\n\ + bls ._562 @cond_branch\n\ + b ._642\n\ +._562:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._564 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._565:\n\ + .align 2, 0\n\ +._564:\n\ + .word gSharedMem\n\ + .word ._566\n\ +._566:\n\ + .word ._567\n\ + .word ._568\n\ + .word ._569\n\ + .word ._570\n\ + .word ._571\n\ + .word ._572\n\ + .word ._573\n\ + .word ._574\n\ + .word ._575\n\ + .word ._576\n\ + .word ._577\n\ + .word ._578\n\ + .word ._579\n\ + .word ._580\n\ + .word ._581\n\ + .word ._582\n\ + .word ._583\n\ + .word ._584\n\ + .word ._585\n\ + .word ._586\n\ + .word ._587\n\ +._567:\n\ + mov r3, #0xc2\n\ + lsl r3, r3, #0x2\n\ + add r0, r4, r3\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r3, #0x10\n\ + bl BeginNormalPaletteFade\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r4, r0\n\ + b ._630\n\ +._568:\n\ + ldr r0, ._592\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._589 @cond_branch\n\ + b ._642\n\ +._589:\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._630\n\ +._593:\n\ + .align 2, 0\n\ +._592:\n\ + .word gPaletteFade\n\ +._569:\n\ + bl sub_80EEF78\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._594 @cond_branch\n\ + b ._642\n\ +._594:\n\ + ldr r0, ._597\n\ + bl SetVBlankCallback\n\ + b ._625\n\ +._598:\n\ + .align 2, 0\n\ +._597:\n\ + .word sub_80EBD80+1\n\ +._570:\n\ + bl sub_80EED1C\n\ + bl sub_80F3130\n\ + ldr r1, ._600\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._630\n\ +._601:\n\ + .align 2, 0\n\ +._600:\n\ + .word gSharedMem\n\ +._571:\n\ + mov r0, #0x1\n\ + bl sub_80F2D6C\n\ + ldr r1, ._603\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._630\n\ +._604:\n\ + .align 2, 0\n\ +._603:\n\ + .word gSharedMem\n\ +._572:\n\ + mov r0, #0x5\n\ + bl sub_80F2D6C\n\ + b ._625\n\ +._573:\n\ + ldr r1, ._607\n\ + add r0, r4, r1\n\ + ldrb r1, [r0]\n\ + ldr r2, ._607 + 4\n\ + add r0, r4, r2\n\ + strb r1, [r0]\n\ + ldr r3, ._607 + 8\n\ + add r1, r4, r3\n\ + mov r0, #0x6\n\ + strb r0, [r1]\n\ + bl sub_80EEE08\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r4, r0\n\ + b ._630\n\ +._608:\n\ + .align 2, 0\n\ +._607:\n\ + .word 0x6dfc\n\ + .word 0x6dad\n\ + .word 0x6dae\n\ +._574:\n\ + mov r0, #0x2\n\ + bl sub_80EF248\n\ + ldr r1, ._612\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._575:\n\ + mov r0, #0x2\n\ + bl sub_80EF284\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._609 @cond_branch\n\ + b ._642\n\ +._609:\n\ + b ._625\n\ +._613:\n\ + .align 2, 0\n\ +._612:\n\ + .word gSharedMem\n\ +._576:\n\ + mov r0, #0x2\n\ + bl sub_80F1B8C\n\ + ldr r1, ._617\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._577:\n\ + mov r0, #0x2\n\ + bl sub_80F1BC8\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._614 @cond_branch\n\ + b ._642\n\ +._614:\n\ + ldr r1, ._617\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._630\n\ +._618:\n\ + .align 2, 0\n\ +._617:\n\ + .word gSharedMem\n\ +._578:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + beq ._619 @cond_branch\n\ + b ._642\n\ +._619:\n\ + b ._625\n\ +._579:\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r0, ._623\n\ + bl SetVBlankCallback\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._630\n\ +._624:\n\ + .align 2, 0\n\ +._623:\n\ + .word sub_80EBD18+1\n\ +._580:\n\ + mov r0, #0x0\n\ + bl sub_80EED2C\n\ + b ._625\n\ +._581:\n\ + bl sub_80F2598\n\ + ldr r1, ._627\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._630\n\ +._628:\n\ + .align 2, 0\n\ +._627:\n\ + .word gSharedMem\n\ +._582:\n\ + ldr r0, ._631\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._642 @cond_branch\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._630\n\ +._632:\n\ + .align 2, 0\n\ +._631:\n\ + .word gPaletteFade\n\ +._583:\n\ + mov r0, #0x1\n\ + bl sub_80F2C80\n\ + ldr r1, ._635\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r1, r3\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._584:\n\ + mov r0, #0x1\n\ + bl sub_80F2CBC\n\ + lsl r0, r0, #0x18\n\ + lsr r2, r0, #0x18\n\ + cmp r2, #0\n\ + bne ._642 @cond_branch\n\ + ldr r0, ._635\n\ + ldr r3, ._635 + 4\n\ + add r1, r0, r3\n\ + strh r2, [r1]\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + add r1, r1, #0x1\n\ + strh r1, [r0]\n\ + b ._642\n\ +._636:\n\ + .align 2, 0\n\ +._635:\n\ + .word gSharedMem\n\ + .word 0x306\n\ +._585:\n\ + mov r0, #0x5\n\ + bl sub_80F2C80\n\ + ldr r1, ._639\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._586:\n\ + mov r0, #0x5\n\ + bl sub_80F2CBC\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._642 @cond_branch\n\ + bl sub_80F1DF0\n\ +._625:\n\ + ldr r1, ._639\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r1, r3\n\ +._630:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._642\n\ +._640:\n\ + .align 2, 0\n\ +._639:\n\ + .word gSharedMem\n\ +._587:\n\ + bl sub_80F1E50\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._642 @cond_branch\n\ + ldr r0, ._643\n\ + ldr r1, ._643 + 4\n\ + add r0, r0, r1\n\ + ldrb r1, [r0]\n\ + mov r0, #0x2\n\ + bl sub_80EF428\n\ + ldr r0, ._643 + 8\n\ + bl sub_80EBDBC\n\ + ldr r0, ._643 + 12\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._642 @cond_branch\n\ + ldr r0, ._643 + 16\n\ + ldr r2, ._643 + 20\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ +._642:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._644:\n\ + .align 2, 0\n\ +._643:\n\ + .word gSharedMem\n\ + .word 0x6dad\n\ + .word sub_80ECC08+1\n\ + .word gLinkOpen\n\ + .word 0x6007de0\n\ + .word 0x600f800"); +} +#else void sub_80ECD80() { switch (ewram0_10.var304) @@ -1233,7 +2943,418 @@ void sub_80ECD80() break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_80ED01C() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._647\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r4, r1, #0\n\ + cmp r0, #0x13\n\ + bls ._645 @cond_branch\n\ + b ._736\n\ +._645:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._647 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._648:\n\ + .align 2, 0\n\ +._647:\n\ + .word gSharedMem\n\ + .word ._649\n\ +._649:\n\ + .word ._650\n\ + .word ._651\n\ + .word ._652\n\ + .word ._653\n\ + .word ._654\n\ + .word ._655\n\ + .word ._656\n\ + .word ._657\n\ + .word ._658\n\ + .word ._659\n\ + .word ._660\n\ + .word ._661\n\ + .word ._662\n\ + .word ._663\n\ + .word ._664\n\ + .word ._665\n\ + .word ._666\n\ + .word ._667\n\ + .word ._668\n\ + .word ._669\n\ +._650:\n\ + bl sub_80F1E84\n\ + mov r0, #0x1\n\ + bl sub_80F2D04\n\ + mov r0, #0x5\n\ + bl sub_80F2D04\n\ + ldr r1, ._671\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r1, r3\n\ + b ._724\n\ +._672:\n\ + .align 2, 0\n\ +._671:\n\ + .word gSharedMem\n\ +._651:\n\ + bl sub_80F1F10\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._673 @cond_branch\n\ + b ._736\n\ +._673:\n\ + mov r0, #0x0\n\ + bl sub_80EEFBC\n\ + ldr r1, ._676\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._724\n\ +._677:\n\ + .align 2, 0\n\ +._676:\n\ + .word gSharedMem\n\ +._652:\n\ + bl sub_80EEF34\n\ + lsl r0, r0, #0x18\n\ + lsr r2, r0, #0x18\n\ + cmp r2, #0\n\ + beq ._678 @cond_branch\n\ + b ._736\n\ +._678:\n\ + ldr r4, ._681\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + str r2, [sp]\n\ + mov r2, #0x0\n\ + mov r3, #0x10\n\ + bl BeginNormalPaletteFade\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._724\n\ +._682:\n\ + .align 2, 0\n\ +._681:\n\ + .word gSharedMem\n\ +._653:\n\ + ldr r0, ._686\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._683 @cond_branch\n\ + b ._736\n\ +._683:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + bl sub_80EED0C\n\ + bl sub_80EF814\n\ + ldr r1, ._686 + 4\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r1, r3\n\ + b ._724\n\ +._687:\n\ + .align 2, 0\n\ +._686:\n\ + .word gPaletteFade\n\ + .word gSharedMem\n\ +._654:\n\ + bl sub_80F2620\n\ + ldr r1, ._689\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._724\n\ +._690:\n\ + .align 2, 0\n\ +._689:\n\ + .word gSharedMem\n\ +._655:\n\ + bl sub_80F4D44\n\ + ldr r1, ._693\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._656:\n\ + bl sub_80F4D88\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._691 @cond_branch\n\ + ldr r1, ._693\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r1, r3\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x2\n\ + strh r0, [r1]\n\ + b ._736\n\ +._694:\n\ + .align 2, 0\n\ +._693:\n\ + .word gSharedMem\n\ +._691:\n\ + ldr r1, ._696\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._724\n\ +._697:\n\ + .align 2, 0\n\ +._696:\n\ + .word gSharedMem\n\ +._657:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + beq ._698 @cond_branch\n\ + b ._736\n\ +._698:\n\ + ldr r1, ._701\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + sub r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._736\n\ +._702:\n\ + .align 2, 0\n\ +._701:\n\ + .word gSharedMem\n\ +._658:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + beq ._703 @cond_branch\n\ + b ._736\n\ +._703:\n\ + ldr r1, ._706\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r1, r3\n\ + b ._724\n\ +._707:\n\ + .align 2, 0\n\ +._706:\n\ + .word gSharedMem\n\ +._659:\n\ + mov r0, #0x0\n\ + bl sub_80F0264\n\ + ldr r1, ._711\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._660:\n\ + bl sub_80F02A0\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._708 @cond_branch\n\ + b ._736\n\ +._708:\n\ + ldr r1, ._711\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._724\n\ +._712:\n\ + .align 2, 0\n\ +._711:\n\ + .word gSharedMem\n\ +._661:\n\ + mov r0, #0x0\n\ + bl sub_80F3008\n\ + ldr r1, ._714\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r1, r3\n\ + b ._724\n\ +._715:\n\ + .align 2, 0\n\ +._714:\n\ + .word gSharedMem\n\ +._662:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + beq ._716 @cond_branch\n\ + b ._736\n\ +._716:\n\ + ldr r1, ._719\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._724\n\ +._720:\n\ + .align 2, 0\n\ +._719:\n\ + .word gSharedMem\n\ +._663:\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r0, ._722\n\ + bl SetVBlankCallback\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._724\n\ +._723:\n\ + .align 2, 0\n\ +._722:\n\ + .word sub_80EBD18+1\n\ +._664:\n\ + mov r0, #0x4\n\ + bl sub_80EED2C\n\ + ldr r1, ._725\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r1, r3\n\ + b ._724\n\ +._726:\n\ + .align 2, 0\n\ +._725:\n\ + .word gSharedMem\n\ +._665:\n\ + ldr r0, ._729\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + lsl r0, r0, #0x18\n\ + lsr r1, r0, #0x18\n\ + cmp r1, #0\n\ + bne ._736 @cond_branch\n\ + ldr r2, ._729 + 4\n\ + add r0, r4, r2\n\ + strh r1, [r0]\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r1, r4, r3\n\ +._724:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._736\n\ +._730:\n\ + .align 2, 0\n\ +._729:\n\ + .word gPaletteFade\n\ + .word 0x306\n\ +._666:\n\ + mov r0, #0x1\n\ + bl sub_80F2C80\n\ + ldr r1, ._733\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._667:\n\ + mov r0, #0x1\n\ + bl sub_80F2CBC\n\ + lsl r0, r0, #0x18\n\ + lsr r2, r0, #0x18\n\ + cmp r2, #0\n\ + bne ._736 @cond_branch\n\ + ldr r0, ._733\n\ + ldr r3, ._733 + 4\n\ + add r1, r0, r3\n\ + strh r2, [r1]\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + add r1, r1, #0x1\n\ + strh r1, [r0]\n\ + b ._736\n\ +._734:\n\ + .align 2, 0\n\ +._733:\n\ + .word gSharedMem\n\ + .word 0x306\n\ +._668:\n\ + ldr r4, ._737\n\ + ldr r2, ._737 + 4\n\ + add r0, r4, r2\n\ + ldrb r0, [r0]\n\ + add r0, r0, #0x7\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + bl sub_80F2C80\n\ + mov r3, #0xc1\n\ + lsl r3, r3, #0x2\n\ + add r4, r4, r3\n\ + ldrh r0, [r4]\n\ + add r0, r0, #0x1\n\ + strh r0, [r4]\n\ +._669:\n\ + ldr r0, ._737\n\ + ldr r1, ._737 + 4\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + add r0, r0, #0x7\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + bl sub_80F2CBC\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._736 @cond_branch\n\ + ldr r0, ._737 + 8\n\ + bl sub_80EBDBC\n\ + ldr r0, ._737 + 12\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._736 @cond_branch\n\ + ldr r0, ._737 + 16\n\ + ldr r2, ._737 + 20\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ +._736:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._738:\n\ + .align 2, 0\n\ +._737:\n\ + .word gSharedMem\n\ + .word 0x6dfc\n\ + .word sub_80ED31C+1\n\ + .word gLinkOpen\n\ + .word 0x6007de0\n\ + .word 0x600f800"); +} +#else void sub_80ED01C() { switch (ewram0_10.var304) @@ -1342,7 +3463,129 @@ void sub_80ED01C() break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_80ED31C() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r0, ._743\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r4, r0, r1\n\ + ldrh r0, [r4]\n\ + cmp r0, #0x1\n\ + beq ._739 @cond_branch\n\ + cmp r0, #0x1\n\ + bgt ._740 @cond_branch\n\ + cmp r0, #0\n\ + beq ._741 @cond_branch\n\ + b ._761\n\ +._744:\n\ + .align 2, 0\n\ +._743:\n\ + .word gSharedMem\n\ +._740:\n\ + cmp r0, #0x2\n\ + beq ._745 @cond_branch\n\ + b ._761\n\ +._741:\n\ + bl sub_80F5DD4\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + beq ._747 @cond_branch\n\ + cmp r0, #0x2\n\ + beq ._748 @cond_branch\n\ + ldr r0, ._751\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._749 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r0, ._751 + 4\n\ + bl sub_80EBDBC\n\ + b ._762\n\ +._752:\n\ + .align 2, 0\n\ +._751:\n\ + .word gMain\n\ + .word sub_80ED4D8+1\n\ +._747:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + bl ShowMapNamePopUpWindow\n\ + b ._762\n\ +._748:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldrh r0, [r4]\n\ + add r0, r0, #0x1\n\ + strh r0, [r4]\n\ + b ._762\n\ +._749:\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._761 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r0, ._757\n\ + bl sub_80EBDBC\n\ + b ._762\n\ +._758:\n\ + .align 2, 0\n\ +._757:\n\ + .word sub_80ECD80+1\n\ +._739:\n\ + bl sub_80F0718\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._761 @cond_branch\n\ + bl ShowMapNamePopUpWindow\n\ + bl sub_80F3264\n\ + ldrh r0, [r4]\n\ + add r0, r0, #0x1\n\ + b ._760\n\ +._745:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._761 @cond_branch\n\ +._760:\n\ + strh r0, [r4]\n\ +._761:\n\ + ldr r0, ._763\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._762 @cond_branch\n\ + ldr r0, ._763 + 4\n\ + ldr r1, ._763 + 8\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + mov r1, #0x4\n\ + str r1, [sp]\n\ + mov r1, #0x1\n\ + mov r2, #0x8\n\ + mov r3, #0x2\n\ + bl debug_sub_8008264\n\ +._762:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._764:\n\ + .align 2, 0\n\ +._763:\n\ + .word gLinkOpen\n\ + .word gLink\n\ + .word 0xfbd"); +} +#else void sub_80ED31C() { switch (ewram0_10.var304) @@ -1386,7 +3629,195 @@ void sub_80ED31C() break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_80ED3D0() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r0, ._767\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + ldrh r0, [r0]\n\ + cmp r0, #0x8\n\ + bls ._765 @cond_branch\n\ + b ._803\n\ +._765:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._767 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._768:\n\ + .align 2, 0\n\ +._767:\n\ + .word gSharedMem\n\ + .word ._769\n\ +._769:\n\ + .word ._770\n\ + .word ._771\n\ + .word ._772\n\ + .word ._773\n\ + .word ._774\n\ + .word ._775\n\ + .word ._776\n\ + .word ._777\n\ + .word ._778\n\ +._770:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + ldr r1, ._780\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._793\n\ +._781:\n\ + .align 2, 0\n\ +._780:\n\ + .word gSharedMem\n\ +._771:\n\ + bl sub_80EED0C\n\ + bl sub_80F6134\n\ + ldr r1, ._783\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._793\n\ +._784:\n\ + .align 2, 0\n\ +._783:\n\ + .word gSharedMem\n\ +._772:\n\ + mov r0, #0x0\n\ + bl sub_80EEFBC\n\ + ldr r1, ._786\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._793\n\ +._787:\n\ + .align 2, 0\n\ +._786:\n\ + .word gSharedMem\n\ +._773:\n\ + mov r0, #0x0\n\ + bl sub_80F0264\n\ + ldr r1, ._790\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._774:\n\ + bl sub_80F02A0\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._803 @cond_branch\n\ + ldr r1, ._790\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._793\n\ +._791:\n\ + .align 2, 0\n\ +._790:\n\ + .word gSharedMem\n\ +._775:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._803 @cond_branch\n\ + ldr r1, ._794\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._793\n\ +._795:\n\ + .align 2, 0\n\ +._794:\n\ + .word gSharedMem\n\ +._776:\n\ + mov r0, #0x0\n\ + bl sub_80F3008\n\ + ldr r4, ._797\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r0, ._797 + 4\n\ + bl SetVBlankCallback\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r4, r0\n\ +._793:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._803\n\ +._798:\n\ + .align 2, 0\n\ +._797:\n\ + .word gSharedMem\n\ + .word sub_80EBD18+1\n\ +._777:\n\ + mov r0, #0x4\n\ + bl sub_80EED2C\n\ + ldr r1, ._801\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + ldr r0, ._801 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._803 @cond_branch\n\ + ldr r0, ._801 + 8\n\ + ldr r2, ._801 + 12\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ + b ._803\n\ +._802:\n\ + .align 2, 0\n\ +._801:\n\ + .word gSharedMem\n\ + .word gLinkOpen\n\ + .word 0x6007de0\n\ + .word 0x600f800\n\ +._778:\n\ + ldr r0, ._804\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._803 @cond_branch\n\ + ldr r0, ._804 + 4\n\ + bl sub_80EBDBC\n\ +._803:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._805:\n\ + .align 2, 0\n\ +._804:\n\ + .word gPaletteFade\n\ + .word sub_80ED31C+1"); +} +#else void sub_80ED3D0() { switch (ewram0_10.var304) @@ -1432,7 +3863,207 @@ void sub_80ED3D0() break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_80ED4D8() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._808\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r4, r1, #0\n\ + cmp r0, #0x8\n\ + bls ._806 @cond_branch\n\ + b ._844\n\ +._806:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._808 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._809:\n\ + .align 2, 0\n\ +._808:\n\ + .word gSharedMem\n\ + .word ._810\n\ +._810:\n\ + .word ._811\n\ + .word ._812\n\ + .word ._813\n\ + .word ._814\n\ + .word ._815\n\ + .word ._816\n\ + .word ._817\n\ + .word ._818\n\ + .word ._819\n\ +._811:\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r3, #0x10\n\ + bl BeginNormalPaletteFade\n\ + b ._820\n\ +._812:\n\ + ldr r0, ._824\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._821 @cond_branch\n\ + b ._844\n\ +._821:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + bl sub_80EED0C\n\ + bl sub_80F3130\n\ + ldr r1, ._824 + 4\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._834\n\ +._825:\n\ + .align 2, 0\n\ +._824:\n\ + .word gPaletteFade\n\ + .word gSharedMem\n\ +._813:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._844 @cond_branch\n\ + ldr r1, ._828\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._834\n\ +._829:\n\ + .align 2, 0\n\ +._828:\n\ + .word gSharedMem\n\ +._814:\n\ + bl sub_80F4CF0\n\ + ldr r1, ._831\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._834\n\ +._832:\n\ + .align 2, 0\n\ +._831:\n\ + .word gSharedMem\n\ +._815:\n\ + bl sub_80EFF34\n\ + ldr r1, ._835\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._816:\n\ + bl sub_80EFF68\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._844 @cond_branch\n\ + ldr r1, ._835\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._834\n\ +._836:\n\ + .align 2, 0\n\ +._835:\n\ + .word gSharedMem\n\ +._817:\n\ + bl sub_80F35B4\n\ + mov r0, #0x2\n\ + bl sub_80EEFBC\n\ + ldr r4, ._838\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r0, ._838 + 4\n\ + bl SetVBlankCallback\n\ +._820:\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ +._834:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._844\n\ +._839:\n\ + .align 2, 0\n\ +._838:\n\ + .word gSharedMem\n\ + .word sub_80EBD4C+1\n\ +._818:\n\ + mov r0, #0x2\n\ + bl sub_80EED2C\n\ + ldr r1, ._842\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + ldr r0, ._842 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._844 @cond_branch\n\ + ldr r0, ._842 + 8\n\ + ldr r2, ._842 + 12\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ + b ._844\n\ +._843:\n\ + .align 2, 0\n\ +._842:\n\ + .word gSharedMem\n\ + .word gLinkOpen\n\ + .word 0x6007de0\n\ + .word 0x600f000\n\ +._819:\n\ + ldr r0, ._845\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._844 @cond_branch\n\ + ldr r0, ._845 + 4\n\ + bl sub_80EBDBC\n\ +._844:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._846:\n\ + .align 2, 0\n\ +._845:\n\ + .word gPaletteFade\n\ + .word sub_80ED858+1"); +} +#else void sub_80ED4D8() { switch (ewram0_10.var304) @@ -1483,7 +4114,310 @@ void sub_80ED4D8() break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_80ED620() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._849\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r4, r1, #0\n\ + cmp r0, #0x10\n\ + bls ._847 @cond_branch\n\ + b ._912\n\ +._847:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._849 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._850:\n\ + .align 2, 0\n\ +._849:\n\ + .word gSharedMem\n\ + .word ._851\n\ +._851:\n\ + .word ._852\n\ + .word ._853\n\ + .word ._854\n\ + .word ._855\n\ + .word ._856\n\ + .word ._857\n\ + .word ._858\n\ + .word ._859\n\ + .word ._860\n\ + .word ._861\n\ + .word ._862\n\ + .word ._863\n\ + .word ._864\n\ + .word ._865\n\ + .word ._866\n\ + .word ._867\n\ + .word ._868\n\ +._852:\n\ + bl sub_80F1E84\n\ + mov r0, #0x1\n\ + bl sub_80F2D04\n\ + ldr r1, ._870\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._904\n\ +._871:\n\ + .align 2, 0\n\ +._870:\n\ + .word gSharedMem\n\ +._853:\n\ + bl sub_80F1F10\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._872 @cond_branch\n\ + b ._912\n\ +._872:\n\ + mov r0, #0x1\n\ + bl sub_80EEFBC\n\ + b ._885\n\ +._854:\n\ + bl sub_80EEF34\n\ + lsl r0, r0, #0x18\n\ + lsr r2, r0, #0x18\n\ + cmp r2, #0\n\ + beq ._875 @cond_branch\n\ + b ._912\n\ +._875:\n\ + ldr r4, ._878\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + str r2, [sp]\n\ + mov r2, #0x0\n\ + mov r3, #0x10\n\ + bl BeginNormalPaletteFade\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._904\n\ +._879:\n\ + .align 2, 0\n\ +._878:\n\ + .word gSharedMem\n\ +._855:\n\ + ldr r0, ._883\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + lsl r0, r0, #0x18\n\ + lsr r4, r0, #0x18\n\ + cmp r4, #0\n\ + beq ._880 @cond_branch\n\ + b ._912\n\ +._880:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + bl sub_80EED0C\n\ + bl sub_80EF814\n\ + ldr r0, ._883 + 4\n\ + ldr r2, ._883 + 8\n\ + add r1, r0, r2\n\ + strb r4, [r1]\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + add r1, r1, #0x1\n\ + strh r1, [r0]\n\ + b ._912\n\ +._884:\n\ + .align 2, 0\n\ +._883:\n\ + .word gPaletteFade\n\ + .word gSharedMem\n\ + .word 0x76aa\n\ +._856:\n\ + bl sub_80F2620\n\ + b ._885\n\ +._857:\n\ + ldr r0, ._887\n\ + add r1, r4, r0\n\ + mov r0, #0x2\n\ + strb r0, [r1]\n\ + bl sub_80F4BD0\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._904\n\ +._888:\n\ + .align 2, 0\n\ +._887:\n\ + .word 0xd162\n\ +._858:\n\ + bl sub_80EFF34\n\ + ldr r1, ._890\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._859:\n\ + bl sub_80EFF68\n\ + b ._889\n\ +._891:\n\ + .align 2, 0\n\ +._890:\n\ + .word gSharedMem\n\ +._860:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._912 @cond_branch\n\ + ldr r1, ._894\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._904\n\ +._895:\n\ + .align 2, 0\n\ +._894:\n\ + .word gSharedMem\n\ +._861:\n\ + bl sub_8055870\n\ + b ._896\n\ +._862:\n\ + bl sub_80F33A8\n\ + ldr r4, ._898\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r0, ._898 + 4\n\ + bl SetVBlankCallback\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._904\n\ +._899:\n\ + .align 2, 0\n\ +._898:\n\ + .word gSharedMem\n\ + .word sub_80EBD4C+1\n\ +._863:\n\ + mov r0, #0x2\n\ + bl sub_80EED2C\n\ + ldr r1, ._901\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._904\n\ +._902:\n\ + .align 2, 0\n\ +._901:\n\ + .word gSharedMem\n\ +._864:\n\ + ldr r0, ._905\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._912 @cond_branch\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ + b ._904\n\ +._906:\n\ + .align 2, 0\n\ +._905:\n\ + .word gPaletteFade\n\ +._865:\n\ + mov r0, #0x1\n\ + bl sub_80F2C80\n\ + ldr r1, ._909\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._866:\n\ + mov r0, #0x1\n\ + bl sub_80F2CBC\n\ +._889:\n\ + lsl r0, r0, #0x18\n\ +._896:\n\ + cmp r0, #0\n\ + bne ._912 @cond_branch\n\ +._885:\n\ + ldr r1, ._909\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ +._904:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._912\n\ +._910:\n\ + .align 2, 0\n\ +._909:\n\ + .word gSharedMem\n\ +._867:\n\ + mov r0, #0x6\n\ + bl sub_80F2C80\n\ + ldr r1, ._913\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._868:\n\ + mov r0, #0x6\n\ + bl sub_80F2CBC\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._912 @cond_branch\n\ + ldr r0, ._913 + 4\n\ + bl sub_80EBDBC\n\ + ldr r0, ._913 + 8\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._912 @cond_branch\n\ + ldr r0, ._913 + 12\n\ + ldr r2, ._913 + 16\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ +._912:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._914:\n\ + .align 2, 0\n\ +._913:\n\ + .word gSharedMem\n\ + .word sub_80ED858+1\n\ + .word gLinkOpen\n\ + .word 0x6007de0\n\ + .word 0x600f000"); +} +#else void sub_80ED620() { switch (ewram0_10.var304) @@ -1573,6 +4507,7 @@ void sub_80ED620() break; } } +#endif #if 0 void sub_80F4F78(); @@ -1742,8 +4677,433 @@ label2: } #else +#if DEBUG __attribute__((naked)) -void sub_80ED858() { +void sub_80ED858() +{ + asm("\ + push {r4, r5, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._917\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r5, r1, #0\n\ + cmp r0, #0xb\n\ + bls ._915 @cond_branch\n\ + b ._999\n\ +._915:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._917 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._918:\n\ + .align 2, 0\n\ +._917:\n\ + .word gSharedMem\n\ + .word ._919\n\ +._919:\n\ + .word ._920\n\ + .word ._921\n\ + .word ._922\n\ + .word ._923\n\ + .word ._924\n\ + .word ._925\n\ + .word ._926\n\ + .word ._927\n\ + .word ._928\n\ + .word ._929\n\ + .word ._999\n\ + .word ._931\n\ +._920:\n\ + bl sub_80F4F78\n\ + bl sub_80F5B38\n\ + ldr r0, ._933\n\ + mov r4, #0xc1\n\ + lsl r4, r4, #0x2\n\ + add r0, r0, r4\n\ + mov r1, #0x1\n\ + strh r1, [r0]\n\ + b ._999\n\ +._934:\n\ + .align 2, 0\n\ +._933:\n\ + .word gSharedMem\n\ +._921:\n\ + bl sub_80F5B50\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._935 @cond_branch\n\ + b ._999\n\ +._935:\n\ + ldr r0, ._938\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + mov r1, #0x2\n\ + strh r1, [r0]\n\ + b ._999\n\ +._939:\n\ + .align 2, 0\n\ +._938:\n\ + .word gSharedMem\n\ +._922:\n\ + mov r0, #0x1\n\ + bl sub_80F0174\n\ + ldr r0, ._941\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r0, r2\n\ + mov r1, #0x3\n\ + strh r1, [r0]\n\ + b ._999\n\ +._942:\n\ + .align 2, 0\n\ +._941:\n\ + .word gSharedMem\n\ +._923:\n\ + bl sub_80F4FB4\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._943 @cond_branch\n\ + b ._999\n\ +._943:\n\ + bl sub_80F3C94\n\ + bl sub_80F3D00\n\ + b ._945\n\ +._924:\n\ + ldr r2, ._951\n\ + ldrh r1, [r2, #0x2c]\n\ + mov r0, #0x40\n\ + and r0, r0, r1\n\ + add r3, r2, #0\n\ + cmp r0, #0\n\ + beq ._949 @cond_branch\n\ + ldr r1, ._951 + 4\n\ + add r0, r5, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._949 @cond_branch\n\ + ldr r2, ._951 + 8\n\ + add r0, r5, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._948 @cond_branch\n\ + ldr r4, ._951 + 12\n\ + add r0, r5, r4\n\ + mov r1, #0x0\n\ + ldsh r0, [r0, r1]\n\ + cmp r0, #0\n\ + beq ._949 @cond_branch\n\ +._948:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + mov r0, #0x1\n\ + bl sub_80F5060\n\ + bl move_anim_execute\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r5, r2\n\ + b ._950\n\ +._952:\n\ + .align 2, 0\n\ +._951:\n\ + .word gMain\n\ + .word 0x87cb\n\ + .word 0x76aa\n\ + .word 0x87dc\n\ +._949:\n\ + ldrh r1, [r3, #0x2c]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._956 @cond_branch\n\ + ldr r4, ._958\n\ + add r0, r5, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._956 @cond_branch\n\ + ldr r1, ._958 + 4\n\ + add r0, r5, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._955 @cond_branch\n\ + ldr r2, ._958 + 8\n\ + add r0, r5, r2\n\ + sub r4, r4, #0x57\n\ + add r1, r5, r4\n\ + mov r4, #0x0\n\ + ldsh r2, [r0, r4]\n\ + mov r4, #0x0\n\ + ldsh r0, [r1, r4]\n\ + cmp r2, r0\n\ + bge ._956 @cond_branch\n\ +._955:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + mov r0, #0x0\n\ + bl sub_80F5060\n\ + bl move_anim_execute\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r5, r0\n\ +._950:\n\ + mov r0, #0x5\n\ + strh r0, [r1]\n\ + b ._999\n\ +._959:\n\ + .align 2, 0\n\ +._958:\n\ + .word 0x87cb\n\ + .word 0x76aa\n\ + .word 0x87dc\n\ +._956:\n\ + ldrh r2, [r3, #0x2e]\n\ + mov r0, #0x2\n\ + and r0, r0, r2\n\ + cmp r0, #0\n\ + beq ._960 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + bl sub_80F4FDC\n\ + bl move_anim_execute\n\ + ldr r0, ._962\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + mov r1, #0x9\n\ + strh r1, [r0]\n\ + b ._999\n\ +._963:\n\ + .align 2, 0\n\ +._962:\n\ + .word gSharedMem\n\ +._960:\n\ + mov r0, #0x1\n\ + and r0, r0, r2\n\ + cmp r0, #0\n\ + bne ._964 @cond_branch\n\ + b ._999\n\ +._964:\n\ + add r4, r5, #0\n\ + ldr r2, ._970\n\ + add r0, r4, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + bne ._966 @cond_branch\n\ + ldr r1, ._970 + 4\n\ + add r0, r4, r1\n\ + mov r2, #0x0\n\ + ldsh r1, [r0, r2]\n\ + ldr r2, ._970 + 8\n\ + add r0, r4, r2\n\ + mov r2, #0x0\n\ + ldsh r0, [r0, r2]\n\ + sub r0, r0, #0x1\n\ + cmp r1, r0\n\ + beq ._967 @cond_branch\n\ + b ._999\n\ +._967:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r4, r0\n\ + mov r0, #0x9\n\ + strh r0, [r1]\n\ + b ._999\n\ +._971:\n\ + .align 2, 0\n\ +._970:\n\ + .word 0x76aa\n\ + .word 0x87dc\n\ + .word 0x87da\n\ +._966:\n\ + ldr r1, ._975\n\ + add r0, r5, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._972 @cond_branch\n\ + b ._999\n\ +._972:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r5, r2\n\ + mov r0, #0x7\n\ + strh r0, [r1]\n\ + b ._999\n\ +._976:\n\ + .align 2, 0\n\ +._975:\n\ + .word 0x6dac\n\ +._925:\n\ + bl gpu_sync_bg_show\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._977 @cond_branch\n\ + b ._999\n\ +._977:\n\ + bl sub_80F3D00\n\ + ldr r0, ._980\n\ + mov r4, #0xc1\n\ + lsl r4, r4, #0x2\n\ + add r0, r0, r4\n\ + mov r1, #0x6\n\ + strh r1, [r0]\n\ + b ._999\n\ +._981:\n\ + .align 2, 0\n\ +._980:\n\ + .word gSharedMem\n\ +._926:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._999 @cond_branch\n\ + ldr r0, ._984\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + b ._983\n\ +._985:\n\ + .align 2, 0\n\ +._984:\n\ + .word gSharedMem\n\ +._927:\n\ + mov r0, #0x3\n\ + bl sub_80EEFBC\n\ + bl sub_80F3668\n\ + ldr r0, ._987\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r0, r2\n\ + mov r1, #0x8\n\ + strh r1, [r0]\n\ + b ._999\n\ +._988:\n\ + .align 2, 0\n\ +._987:\n\ + .word gSharedMem\n\ +._928:\n\ + bl sub_80F7500\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._999 @cond_branch\n\ + mov r0, #0x2\n\ + bl sub_80EEFBC\n\ + bl sub_80F3698\n\ +._945:\n\ + ldr r0, ._991\n\ + mov r4, #0xc1\n\ + lsl r4, r4, #0x2\n\ + add r0, r0, r4\n\ +._983:\n\ + mov r1, #0x4\n\ + strh r1, [r0]\n\ + b ._999\n\ +._992:\n\ + .align 2, 0\n\ +._991:\n\ + .word gSharedMem\n\ +._929:\n\ + bl sub_80F5038\n\ + lsl r0, r0, #0x18\n\ + lsr r4, r0, #0x18\n\ + cmp r4, #0\n\ + bne ._999 @cond_branch\n\ + mov r0, #0x0\n\ + bl sub_80F0174\n\ + bl sub_80F2F48\n\ + ldr r5, ._995\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r5, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + str r4, [sp]\n\ + mov r2, #0x0\n\ + mov r3, #0x10\n\ + bl BeginNormalPaletteFade\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r5, r2\n\ + mov r0, #0xb\n\ + strh r0, [r1]\n\ + b ._999\n\ +._996:\n\ + .align 2, 0\n\ +._995:\n\ + .word gSharedMem\n\ +._931:\n\ + ldr r0, ._1000\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._999 @cond_branch\n\ + bl sub_80F3CE8\n\ + bl sub_80F5BDC\n\ + ldr r0, ._1000 + 4\n\ + ldr r4, ._1000 + 8\n\ + add r0, r0, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + bne ._998 @cond_branch\n\ + bl sub_80F357C\n\ + mov r0, #0x1\n\ + bl sub_80F2D6C\n\ + mov r0, #0x6\n\ + bl sub_80F2D6C\n\ + ldr r0, ._1000 + 12\n\ + bl sub_80EBDBC\n\ + b ._999\n\ +._1001:\n\ + .align 2, 0\n\ +._1000:\n\ + .word gPaletteFade\n\ + .word gSharedMem\n\ + .word 0x76aa\n\ + .word sub_80ECA10+1\n\ +._998:\n\ + bl sub_80F3614\n\ + ldr r0, ._1003\n\ + bl sub_80EBDBC\n\ +._999:\n\ + ldr r0, ._1003 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._1002 @cond_branch\n\ + ldr r0, ._1003 + 8\n\ + ldr r1, ._1003 + 12\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + mov r1, #0x4\n\ + str r1, [sp]\n\ + mov r1, #0x9\n\ + mov r2, #0x6\n\ + mov r3, #0x2\n\ + bl debug_sub_8008264\n\ +._1002:\n\ + add sp, sp, #0x4\n\ + pop {r4, r5}\n\ + pop {r0}\n\ + bx r0\n\ +._1004:\n\ + .align 2, 0\n\ +._1003:\n\ + .word sub_80ED3D0+1\n\ + .word gLinkOpen\n\ + .word gLink\n\ + .word 0xfbd"); +} +#else +__attribute__((naked)) +void sub_80ED858() +{ asm_unified("push {r4,r5,lr}\n\ sub sp, 0x4\n\ ldr r1, _080ED878 @ =gSharedMem\n\ @@ -2114,7 +5474,361 @@ _080EDB7A:\n\ _080EDB84: .4byte sub_80ED3D0\n"); } #endif +#endif +#if DEBUG +__attribute__((naked)) +void sub_80EDB88() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._1007\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r4, r1, #0\n\ + cmp r0, #0x11\n\ + bls ._1005 @cond_branch\n\ + b ._1088\n\ +._1005:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._1007 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._1008:\n\ + .align 2, 0\n\ +._1007:\n\ + .word gSharedMem\n\ + .word ._1009\n\ +._1009:\n\ + .word ._1010\n\ + .word ._1011\n\ + .word ._1012\n\ + .word ._1013\n\ + .word ._1014\n\ + .word ._1015\n\ + .word ._1016\n\ + .word ._1017\n\ + .word ._1018\n\ + .word ._1019\n\ + .word ._1020\n\ + .word ._1021\n\ + .word ._1022\n\ + .word ._1023\n\ + .word ._1024\n\ + .word ._1025\n\ + .word ._1026\n\ + .word ._1027\n\ +._1010:\n\ + bl sub_80F1E84\n\ + mov r0, #0x0\n\ + bl sub_80F2D04\n\ + ldr r1, ._1029\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1078\n\ +._1030:\n\ + .align 2, 0\n\ +._1029:\n\ + .word gSharedMem\n\ +._1011:\n\ + bl sub_80F1F10\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._1031 @cond_branch\n\ + b ._1088\n\ +._1031:\n\ + mov r0, #0x4\n\ + bl sub_80EEFBC\n\ + ldr r1, ._1034\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._1078\n\ +._1035:\n\ + .align 2, 0\n\ +._1034:\n\ + .word gSharedMem\n\ +._1012:\n\ + bl sub_80EEF34\n\ + lsl r0, r0, #0x18\n\ + lsr r2, r0, #0x18\n\ + cmp r2, #0\n\ + beq ._1036 @cond_branch\n\ + b ._1088\n\ +._1036:\n\ + ldr r4, ._1039\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + str r2, [sp]\n\ + mov r2, #0x0\n\ + mov r3, #0x10\n\ + bl BeginNormalPaletteFade\n\ + b ._1038\n\ +._1040:\n\ + .align 2, 0\n\ +._1039:\n\ + .word gSharedMem\n\ +._1013:\n\ + ldr r0, ._1044\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1041 @cond_branch\n\ + b ._1088\n\ +._1041:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + bl sub_80EED0C\n\ + bl sub_80EF814\n\ + ldr r1, ._1044 + 4\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1078\n\ +._1045:\n\ + .align 2, 0\n\ +._1044:\n\ + .word gPaletteFade\n\ + .word gSharedMem\n\ +._1014:\n\ + bl sub_80F2620\n\ + ldr r1, ._1047\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._1078\n\ +._1048:\n\ + .align 2, 0\n\ +._1047:\n\ + .word gSharedMem\n\ +._1015:\n\ + bl sub_80F638C\n\ + ldr r1, ._1051\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._1016:\n\ + bl sub_80F63D0\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1049 @cond_branch\n\ + ldr r1, ._1051\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x2\n\ + strh r0, [r1]\n\ + b ._1088\n\ +._1052:\n\ + .align 2, 0\n\ +._1051:\n\ + .word gSharedMem\n\ +._1049:\n\ + ldr r1, ._1054\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1078\n\ +._1055:\n\ + .align 2, 0\n\ +._1054:\n\ + .word gSharedMem\n\ +._1017:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + beq ._1056 @cond_branch\n\ + b ._1088\n\ +._1056:\n\ + ldr r1, ._1059\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + sub r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._1088\n\ +._1060:\n\ + .align 2, 0\n\ +._1059:\n\ + .word gSharedMem\n\ +._1018:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + beq ._1061 @cond_branch\n\ + b ._1088\n\ +._1061:\n\ + ldr r1, ._1064\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1078\n\ +._1065:\n\ + .align 2, 0\n\ +._1064:\n\ + .word gSharedMem\n\ +._1019:\n\ + mov r0, #0x1\n\ + bl sub_80F0264\n\ + ldr r1, ._1068\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._1020:\n\ + bl sub_80F02A0\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1088 @cond_branch\n\ + ldr r1, ._1068\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1078\n\ +._1069:\n\ + .align 2, 0\n\ +._1068:\n\ + .word gSharedMem\n\ +._1021:\n\ + mov r0, #0x2\n\ + bl sub_80F2C80\n\ + ldr r1, ._1072\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._1022:\n\ + mov r0, #0x2\n\ + bl sub_80F2CBC\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1088 @cond_branch\n\ + ldr r1, ._1072\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1078\n\ +._1073:\n\ + .align 2, 0\n\ +._1072:\n\ + .word gSharedMem\n\ +._1023:\n\ + mov r0, #0x1\n\ + bl sub_80F3008\n\ + ldr r1, ._1075\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._1078\n\ +._1076:\n\ + .align 2, 0\n\ +._1075:\n\ + .word gSharedMem\n\ +._1024:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._1088 @cond_branch\n\ + ldr r1, ._1079\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1078\n\ +._1080:\n\ + .align 2, 0\n\ +._1079:\n\ + .word gSharedMem\n\ +._1025:\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r0, ._1082\n\ + bl SetVBlankCallback\n\ +._1038:\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ +._1078:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._1088\n\ +._1083:\n\ + .align 2, 0\n\ +._1082:\n\ + .word sub_80EBD18+1\n\ +._1026:\n\ + mov r0, #0x4\n\ + bl sub_80EED2C\n\ + ldr r1, ._1086\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + ldr r0, ._1086 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._1088 @cond_branch\n\ + ldr r0, ._1086 + 8\n\ + ldr r2, ._1086 + 12\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ + b ._1088\n\ +._1087:\n\ + .align 2, 0\n\ +._1086:\n\ + .word gSharedMem\n\ + .word gLinkOpen\n\ + .word 0x6007de0\n\ + .word 0x600f800\n\ +._1027:\n\ + ldr r0, ._1089\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1088 @cond_branch\n\ + ldr r0, ._1089 + 4\n\ + bl sub_80EBDBC\n\ +._1088:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._1090:\n\ + .align 2, 0\n\ +._1089:\n\ + .word gPaletteFade\n\ + .word sub_80EDDBC+1"); +} +#else void sub_80EDB88() { switch (ewram0_10.var304) @@ -2205,7 +5919,129 @@ void sub_80EDB88() break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_80EDDBC() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r0, ._1095\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r4, r0, r1\n\ + ldrh r0, [r4]\n\ + cmp r0, #0x1\n\ + beq ._1091 @cond_branch\n\ + cmp r0, #0x1\n\ + bgt ._1092 @cond_branch\n\ + cmp r0, #0\n\ + beq ._1093 @cond_branch\n\ + b ._1113\n\ +._1096:\n\ + .align 2, 0\n\ +._1095:\n\ + .word gSharedMem\n\ +._1092:\n\ + cmp r0, #0x2\n\ + beq ._1097 @cond_branch\n\ + b ._1113\n\ +._1093:\n\ + bl sub_80F5DD4\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + beq ._1099 @cond_branch\n\ + cmp r0, #0x2\n\ + beq ._1100 @cond_branch\n\ + ldr r0, ._1103\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1101 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r0, ._1103 + 4\n\ + bl sub_80EBDBC\n\ + b ._1114\n\ +._1104:\n\ + .align 2, 0\n\ +._1103:\n\ + .word gMain\n\ + .word sub_80EDEE4+1\n\ +._1099:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + bl ShowMapNamePopUpWindow\n\ + b ._1114\n\ +._1100:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldrh r0, [r4]\n\ + add r0, r0, #0x1\n\ + strh r0, [r4]\n\ + b ._1114\n\ +._1101:\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1113 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r0, ._1109\n\ + bl sub_80EBDBC\n\ + b ._1114\n\ +._1110:\n\ + .align 2, 0\n\ +._1109:\n\ + .word sub_80EDE70+1\n\ +._1091:\n\ + bl sub_80F0718\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1113 @cond_branch\n\ + bl ShowMapNamePopUpWindow\n\ + bl sub_80F3264\n\ + ldrh r0, [r4]\n\ + add r0, r0, #0x1\n\ + b ._1112\n\ +._1097:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._1113 @cond_branch\n\ +._1112:\n\ + strh r0, [r4]\n\ +._1113:\n\ + ldr r0, ._1115\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._1114 @cond_branch\n\ + ldr r0, ._1115 + 4\n\ + ldr r1, ._1115 + 8\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + mov r1, #0x4\n\ + str r1, [sp]\n\ + mov r1, #0x1\n\ + mov r2, #0x8\n\ + mov r3, #0x2\n\ + bl debug_sub_8008264\n\ +._1114:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._1116:\n\ + .align 2, 0\n\ +._1115:\n\ + .word gLinkOpen\n\ + .word gLink\n\ + .word 0xfbd"); +} +#else void sub_80EDDBC() { switch (ewram0_10.var304) @@ -2250,6 +6086,7 @@ void sub_80EDDBC() } } +#endif void sub_80EDE70() { @@ -2274,6 +6111,228 @@ void sub_80EDE70() } +#if DEBUG +__attribute__((naked)) +void sub_80EDEE4() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._1134\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r4, r1, #0\n\ + cmp r0, #0xa\n\ + bls ._1132 @cond_branch\n\ + b ._1180\n\ +._1132:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._1134 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._1135:\n\ + .align 2, 0\n\ +._1134:\n\ + .word gSharedMem\n\ + .word ._1136\n\ +._1136:\n\ + .word ._1137\n\ + .word ._1138\n\ + .word ._1139\n\ + .word ._1140\n\ + .word ._1141\n\ + .word ._1142\n\ + .word ._1143\n\ + .word ._1144\n\ + .word ._1145\n\ + .word ._1146\n\ + .word ._1147\n\ +._1137:\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r3, #0x10\n\ + bl BeginNormalPaletteFade\n\ + b ._1169\n\ +._1138:\n\ + ldr r0, ._1152\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1149 @cond_branch\n\ + b ._1180\n\ +._1149:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + bl sub_80EED0C\n\ + bl sub_80F3130\n\ + ldr r1, ._1152 + 4\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1166\n\ +._1153:\n\ + .align 2, 0\n\ +._1152:\n\ + .word gPaletteFade\n\ + .word gSharedMem\n\ +._1139:\n\ + bl sub_80F66E0\n\ + bl sub_80EEE08\n\ + ldr r1, ._1155\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._1166\n\ +._1156:\n\ + .align 2, 0\n\ +._1155:\n\ + .word gSharedMem\n\ +._1140:\n\ + bl sub_80F1080\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1180 @cond_branch\n\ + ldr r1, ._1159\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1166\n\ +._1160:\n\ + .align 2, 0\n\ +._1159:\n\ + .word gSharedMem\n\ +._1141:\n\ + mov r0, #0x5\n\ + bl sub_80EEFBC\n\ + bl sub_80F38B8\n\ + ldr r1, ._1163\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._1142:\n\ + bl sub_80F38EC\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1180 @cond_branch\n\ + ldr r1, ._1163\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1166\n\ +._1164:\n\ + .align 2, 0\n\ +._1163:\n\ + .word gSharedMem\n\ +._1143:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._1180 @cond_branch\n\ + ldr r1, ._1167\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._1166\n\ +._1168:\n\ + .align 2, 0\n\ +._1167:\n\ + .word gSharedMem\n\ +._1144:\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r0, ._1170\n\ + bl SetVBlankCallback\n\ + b ._1169\n\ +._1171:\n\ + .align 2, 0\n\ +._1170:\n\ + .word sub_80EBD18+1\n\ +._1145:\n\ + mov r0, #0x3\n\ + bl sub_80EED2C\n\ + ldr r1, ._1174\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + ldr r0, ._1174 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._1180 @cond_branch\n\ + ldr r0, ._1174 + 8\n\ + ldr r2, ._1174 + 12\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ + b ._1180\n\ +._1175:\n\ + .align 2, 0\n\ +._1174:\n\ + .word gSharedMem\n\ + .word gLinkOpen\n\ + .word 0x6007de0\n\ + .word 0x600f000\n\ +._1146:\n\ + ldr r0, ._1178\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1180 @cond_branch\n\ +._1169:\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ +._1166:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._1180\n\ +._1179:\n\ + .align 2, 0\n\ +._1178:\n\ + .word gPaletteFade\n\ +._1147:\n\ + bl sub_80F170C\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1180 @cond_branch\n\ + ldr r0, ._1181\n\ + bl sub_80EBDBC\n\ +._1180:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._1182:\n\ + .align 2, 0\n\ +._1181:\n\ + .word sub_80EE06C+1"); +} +#else void sub_80EDEE4() { switch (ewram0_10.var304) @@ -2331,7 +6390,316 @@ void sub_80EDEE4() break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_80EE06C() +{ + asm("\ + push {r4, r5, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._1185\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r4, r1, #0\n\ + cmp r0, #0x8\n\ + bls ._1183 @cond_branch\n\ + b ._1248\n\ +._1183:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._1185 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._1186:\n\ + .align 2, 0\n\ +._1185:\n\ + .word gSharedMem\n\ + .word ._1187\n\ +._1187:\n\ + .word ._1188\n\ + .word ._1189\n\ + .word ._1190\n\ + .word ._1191\n\ + .word ._1192\n\ + .word ._1193\n\ + .word ._1194\n\ + .word ._1195\n\ + .word ._1196\n\ +._1188:\n\ + bl sub_80F15A8\n\ + ldr r1, ._1198\n\ + mov r5, #0xc1\n\ + lsl r5, r5, #0x2\n\ + add r1, r1, r5\n\ + b ._1221\n\ +._1199:\n\ + .align 2, 0\n\ +._1198:\n\ + .word gSharedMem\n\ +._1189:\n\ + ldr r2, ._1203\n\ + ldrh r1, [r2, #0x30]\n\ + mov r0, #0x40\n\ + and r0, r0, r1\n\ + add r3, r2, #0\n\ + cmp r0, #0\n\ + beq ._1201 @cond_branch\n\ + ldr r1, ._1203 + 4\n\ + add r0, r4, r1\n\ + mov r2, #0x0\n\ + ldsh r0, [r0, r2]\n\ + cmp r0, #0\n\ + beq ._1201 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + mov r0, #0x1\n\ + neg r0, r0\n\ + bl sub_80F6A4C\n\ + mov r5, #0xc1\n\ + lsl r5, r5, #0x2\n\ + add r1, r4, r5\n\ + b ._1221\n\ +._1204:\n\ + .align 2, 0\n\ +._1203:\n\ + .word gMain\n\ + .word 0x87dc\n\ +._1201:\n\ + ldrh r1, [r3, #0x30]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1206 @cond_branch\n\ + ldr r1, ._1208\n\ + add r0, r4, r1\n\ + ldr r2, ._1208 + 4\n\ + add r1, r4, r2\n\ + mov r5, #0x0\n\ + ldsh r2, [r0, r5]\n\ + mov r5, #0x0\n\ + ldsh r0, [r1, r5]\n\ + cmp r2, r0\n\ + bge ._1206 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + mov r0, #0x1\n\ + bl sub_80F6A4C\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r4, r0\n\ + b ._1221\n\ +._1209:\n\ + .align 2, 0\n\ +._1208:\n\ + .word 0x87dc\n\ + .word 0x8774\n\ +._1206:\n\ + ldrh r2, [r3, #0x2e]\n\ + mov r0, #0x1\n\ + and r0, r0, r2\n\ + cmp r0, #0\n\ + beq ._1210 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + mov r0, #0xb\n\ + bl sub_80EEFBC\n\ + ldr r0, ._1212\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + b ._1211\n\ +._1213:\n\ + .align 2, 0\n\ +._1212:\n\ + .word gSharedMem\n\ +._1210:\n\ + mov r0, #0x2\n\ + and r0, r0, r2\n\ + cmp r0, #0\n\ + bne ._1214 @cond_branch\n\ + b ._1248\n\ +._1214:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r0, ._1217\n\ + bl sub_80EBDBC\n\ + b ._1248\n\ +._1218:\n\ + .align 2, 0\n\ +._1217:\n\ + .word sub_80EE294+1\n\ +._1190:\n\ + bl sub_80F6AF0\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._1219 @cond_branch\n\ + b ._1248\n\ +._1219:\n\ + ldr r1, ._1222\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._1221\n\ +._1223:\n\ + .align 2, 0\n\ +._1222:\n\ + .word gSharedMem\n\ +._1191:\n\ + bl sub_8055870\n\ + add r1, r0, #0\n\ + cmp r1, #0\n\ + bne ._1248 @cond_branch\n\ + ldr r0, ._1226\n\ + mov r5, #0xc1\n\ + lsl r5, r5, #0x2\n\ + add r0, r0, r5\n\ + strh r1, [r0]\n\ + b ._1248\n\ +._1227:\n\ + .align 2, 0\n\ +._1226:\n\ + .word gSharedMem\n\ +._1192:\n\ + bl sub_80F3B00\n\ + ldr r1, ._1229\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ +._1221:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._1248\n\ +._1230:\n\ + .align 2, 0\n\ +._1229:\n\ + .word gSharedMem\n\ +._1193:\n\ + bl sub_80F3B58\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1248 @cond_branch\n\ + bl sub_80F1494\n\ + ldr r1, ._1233\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + bl sub_80EED9C\n\ + b ._1248\n\ +._1234:\n\ + .align 2, 0\n\ +._1233:\n\ + .word gSharedMem\n\ +._1194:\n\ + bl sub_80F68E8\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._1236 @cond_branch\n\ + cmp r0, #0x1\n\ + bne ._1236 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + bl sub_80F3B94\n\ + ldr r0, ._1238\n\ + mov r5, #0xc1\n\ + lsl r5, r5, #0x2\n\ + add r0, r0, r5\n\ + mov r1, #0x7\n\ + strh r1, [r0]\n\ + b ._1249\n\ +._1239:\n\ + .align 2, 0\n\ +._1238:\n\ + .word gSharedMem\n\ +._1236:\n\ + ldr r0, ._1242\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1248 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + bl sub_80F3B94\n\ + ldr r0, ._1242 + 4\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + mov r1, #0x8\n\ + strh r1, [r0]\n\ + b ._1248\n\ +._1243:\n\ + .align 2, 0\n\ +._1242:\n\ + .word gMain\n\ + .word gSharedMem\n\ +._1195:\n\ + bl sub_80F3BD4\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1248 @cond_branch\n\ + ldr r0, ._1246\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r0, r2\n\ +._1211:\n\ + mov r1, #0x4\n\ + strh r1, [r0]\n\ + b ._1248\n\ +._1247:\n\ + .align 2, 0\n\ +._1246:\n\ + .word gSharedMem\n\ +._1196:\n\ + bl sub_80F3BD4\n\ + lsl r0, r0, #0x18\n\ + lsr r4, r0, #0x18\n\ + cmp r4, #0\n\ + bne ._1248 @cond_branch\n\ + mov r0, #0x5\n\ + bl sub_80EEFBC\n\ + ldr r0, ._1250\n\ + mov r5, #0xc1\n\ + lsl r5, r5, #0x2\n\ + add r0, r0, r5\n\ + strh r4, [r0]\n\ +._1248:\n\ + ldr r0, ._1250 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._1249 @cond_branch\n\ + ldr r0, ._1250 + 8\n\ + ldr r1, ._1250 + 12\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + mov r1, #0x4\n\ + str r1, [sp]\n\ + mov r1, #0x1\n\ + mov r2, #0x4\n\ + mov r3, #0x2\n\ + bl debug_sub_8008264\n\ +._1249:\n\ + add sp, sp, #0x4\n\ + pop {r4, r5}\n\ + pop {r0}\n\ + bx r0\n\ +._1251:\n\ + .align 2, 0\n\ +._1250:\n\ + .word gSharedMem\n\ + .word gLinkOpen\n\ + .word gLink\n\ + .word 0xfbd"); +} +#else void sub_80EE06C() { switch (ewram0_10.var304) @@ -2417,7 +6785,204 @@ void sub_80EE06C() break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_80EE294() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._1254\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r0, r1, r2\n\ + ldrh r0, [r0]\n\ + add r4, r1, #0\n\ + cmp r0, #0x8\n\ + bls ._1252 @cond_branch\n\ + b ._1288\n\ +._1252:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._1254 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._1255:\n\ + .align 2, 0\n\ +._1254:\n\ + .word gSharedMem\n\ + .word ._1256\n\ +._1256:\n\ + .word ._1257\n\ + .word ._1258\n\ + .word ._1259\n\ + .word ._1260\n\ + .word ._1261\n\ + .word ._1262\n\ + .word ._1263\n\ + .word ._1264\n\ + .word ._1265\n\ +._1257:\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r3, #0x10\n\ + b ._1266\n\ +._1258:\n\ + ldr r0, ._1270\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1267 @cond_branch\n\ + b ._1288\n\ +._1267:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + bl sub_80EED0C\n\ + bl sub_80F3C2C\n\ + bl sub_80EEE08\n\ + ldr r1, ._1270 + 4\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1280\n\ +._1271:\n\ + .align 2, 0\n\ +._1270:\n\ + .word gPaletteFade\n\ + .word gSharedMem\n\ +._1259:\n\ + bl sub_80F6134\n\ + mov r0, #0x1\n\ + bl sub_80F0264\n\ + ldr r1, ._1274\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._1260:\n\ + bl sub_80F02A0\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1288 @cond_branch\n\ + ldr r1, ._1274\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1280\n\ +._1275:\n\ + .align 2, 0\n\ +._1274:\n\ + .word gSharedMem\n\ +._1261:\n\ + mov r0, #0x4\n\ + bl sub_80EEFBC\n\ + mov r0, #0x1\n\ + bl sub_80F3008\n\ + ldr r0, ._1277\n\ + bl SetVBlankCallback\n\ + ldr r1, ._1277 + 4\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r1, r2\n\ + b ._1280\n\ +._1278:\n\ + .align 2, 0\n\ +._1277:\n\ + .word sub_80EBD18+1\n\ + .word gSharedMem\n\ +._1262:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._1288 @cond_branch\n\ + ldr r1, ._1281\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1280\n\ +._1282:\n\ + .align 2, 0\n\ +._1281:\n\ + .word gSharedMem\n\ +._1263:\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ +._1266:\n\ + bl BeginNormalPaletteFade\n\ + mov r2, #0xc1\n\ + lsl r2, r2, #0x2\n\ + add r1, r4, r2\n\ +._1280:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._1288\n\ +._1264:\n\ + mov r0, #0x4\n\ + bl sub_80EED2C\n\ + ldr r1, ._1286\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + ldr r0, ._1286 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._1288 @cond_branch\n\ + ldr r0, ._1286 + 8\n\ + ldr r2, ._1286 + 12\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ + b ._1288\n\ +._1287:\n\ + .align 2, 0\n\ +._1286:\n\ + .word gSharedMem\n\ + .word gLinkOpen\n\ + .word 0x6007de0\n\ + .word 0x600f800\n\ +._1265:\n\ + ldr r0, ._1289\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1288 @cond_branch\n\ + ldr r0, ._1289 + 4\n\ + bl sub_80EBDBC\n\ +._1288:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._1290:\n\ + .align 2, 0\n\ +._1289:\n\ + .word gPaletteFade\n\ + .word sub_80EDDBC+1"); +} +#else void sub_80EE294() { switch (ewram0_10.var304) @@ -2468,7 +7033,293 @@ void sub_80EE294() break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_80EE3D8() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r0, ._1293\n\ + mov r1, #0xc1\n\ + lsl r1, r1, #0x2\n\ + add r0, r0, r1\n\ + ldrh r0, [r0]\n\ + cmp r0, #0xd\n\ + bls ._1291 @cond_branch\n\ + b ._1354\n\ +._1291:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._1293 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._1294:\n\ + .align 2, 0\n\ +._1293:\n\ + .word gSharedMem\n\ + .word ._1295\n\ +._1295:\n\ + .word ._1296\n\ + .word ._1297\n\ + .word ._1298\n\ + .word ._1299\n\ + .word ._1300\n\ + .word ._1301\n\ + .word ._1302\n\ + .word ._1303\n\ + .word ._1304\n\ + .word ._1305\n\ + .word ._1306\n\ + .word ._1307\n\ + .word ._1308\n\ + .word ._1309\n\ +._1296:\n\ + bl sub_80F1E84\n\ + mov r0, #0x0\n\ + bl sub_80F2D04\n\ + ldr r1, ._1311\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1344\n\ +._1312:\n\ + .align 2, 0\n\ +._1311:\n\ + .word gSharedMem\n\ +._1297:\n\ + bl sub_80F1F10\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._1313 @cond_branch\n\ + b ._1354\n\ +._1313:\n\ + mov r0, #0x9\n\ + bl sub_80EEFBC\n\ + ldr r1, ._1316\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1344\n\ +._1317:\n\ + .align 2, 0\n\ +._1316:\n\ + .word gSharedMem\n\ +._1298:\n\ + bl sub_80EEF34\n\ + lsl r0, r0, #0x18\n\ + lsr r2, r0, #0x18\n\ + cmp r2, #0\n\ + beq ._1318 @cond_branch\n\ + b ._1354\n\ +._1318:\n\ + ldr r4, ._1321\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + str r2, [sp]\n\ + mov r2, #0x0\n\ + mov r3, #0x10\n\ + bl BeginNormalPaletteFade\n\ + b ._1320\n\ +._1322:\n\ + .align 2, 0\n\ +._1321:\n\ + .word gSharedMem\n\ +._1299:\n\ + ldr r0, ._1326\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1323 @cond_branch\n\ + b ._1354\n\ +._1323:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + bl sub_80EED0C\n\ + bl sub_80EF814\n\ + bl sub_80EEE08\n\ + ldr r1, ._1326 + 4\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1344\n\ +._1327:\n\ + .align 2, 0\n\ +._1326:\n\ + .word gPaletteFade\n\ + .word gSharedMem\n\ +._1300:\n\ + bl sub_80F2620\n\ + ldr r1, ._1329\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1344\n\ +._1330:\n\ + .align 2, 0\n\ +._1329:\n\ + .word gSharedMem\n\ +._1301:\n\ + mov r0, #0x2\n\ + bl sub_80F0264\n\ + ldr r1, ._1334\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._1302:\n\ + bl sub_80F02A0\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._1331 @cond_branch\n\ + b ._1354\n\ +._1331:\n\ + ldr r1, ._1334\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1344\n\ +._1335:\n\ + .align 2, 0\n\ +._1334:\n\ + .word gSharedMem\n\ +._1303:\n\ + mov r0, #0x3\n\ + bl sub_80F2C80\n\ + ldr r1, ._1338\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ +._1304:\n\ + mov r0, #0x3\n\ + bl sub_80F2CBC\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1354 @cond_branch\n\ + ldr r1, ._1338\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1344\n\ +._1339:\n\ + .align 2, 0\n\ +._1338:\n\ + .word gSharedMem\n\ +._1305:\n\ + mov r0, #0x2\n\ + bl sub_80F3008\n\ + ldr r1, ._1341\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1344\n\ +._1342:\n\ + .align 2, 0\n\ +._1341:\n\ + .word gSharedMem\n\ +._1306:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._1354 @cond_branch\n\ + ldr r1, ._1345\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + b ._1344\n\ +._1346:\n\ + .align 2, 0\n\ +._1345:\n\ + .word gSharedMem\n\ +._1307:\n\ + bl sub_80F6F10\n\ + ldr r4, ._1348\n\ + mov r1, #0xc2\n\ + lsl r1, r1, #0x2\n\ + add r0, r4, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + mov r2, #0x0\n\ + str r2, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r0, ._1348 + 4\n\ + bl SetVBlankCallback\n\ +._1320:\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r4, r0\n\ +._1344:\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + b ._1354\n\ +._1349:\n\ + .align 2, 0\n\ +._1348:\n\ + .word gSharedMem\n\ + .word sub_80EBD68+1\n\ +._1308:\n\ + mov r0, #0x5\n\ + bl sub_80EED2C\n\ + ldr r1, ._1352\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r1, r1, r0\n\ + ldrh r0, [r1]\n\ + add r0, r0, #0x1\n\ + strh r0, [r1]\n\ + ldr r0, ._1352 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._1354 @cond_branch\n\ + ldr r0, ._1352 + 8\n\ + ldr r2, ._1352 + 12\n\ + mov r1, #0x0\n\ + mov r3, #0x4\n\ + bl debug_sub_8008218\n\ + b ._1354\n\ +._1353:\n\ + .align 2, 0\n\ +._1352:\n\ + .word gSharedMem\n\ + .word gLinkOpen\n\ + .word 0x6007de0\n\ + .word 0x600f800\n\ +._1309:\n\ + ldr r0, ._1355\n\ + ldrb r1, [r0, #0x7]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1354 @cond_branch\n\ + ldr r0, ._1355 + 4\n\ + bl sub_80EBDBC\n\ +._1354:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._1356:\n\ + .align 2, 0\n\ +._1355:\n\ + .word gPaletteFade\n\ + .word sub_80EE58C+1"); +} +#else void sub_80EE3D8() { switch (ewram0_10.var304) @@ -2544,7 +7395,143 @@ void sub_80EE3D8() break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_80EE58C() +{ + asm("\ + push {r4, r5, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r5, ._1361\n\ + mov r0, #0xc1\n\ + lsl r0, r0, #0x2\n\ + add r4, r5, r0\n\ + ldrh r0, [r4]\n\ + cmp r0, #0x1\n\ + beq ._1357 @cond_branch\n\ + cmp r0, #0x1\n\ + bgt ._1358 @cond_branch\n\ + cmp r0, #0\n\ + beq ._1359 @cond_branch\n\ + b ._1383\n\ +._1362:\n\ + .align 2, 0\n\ +._1361:\n\ + .word gSharedMem\n\ +._1358:\n\ + cmp r0, #0x2\n\ + beq ._1363 @cond_branch\n\ + b ._1383\n\ +._1359:\n\ + bl sub_80F5DD4\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + beq ._1365 @cond_branch\n\ + cmp r0, #0x2\n\ + beq ._1366 @cond_branch\n\ + ldr r0, ._1369\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1367 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r0, ._1369 + 4\n\ + bl sub_80EBDBC\n\ + b ._1384\n\ +._1370:\n\ + .align 2, 0\n\ +._1369:\n\ + .word gMain\n\ + .word sub_80EE658+1\n\ +._1365:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r1, ._1372\n\ + add r0, r5, r1\n\ + ldrb r0, [r0]\n\ + bl sub_80F0FFC\n\ + b ._1384\n\ +._1373:\n\ + .align 2, 0\n\ +._1372:\n\ + .word 0x876e\n\ +._1366:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldrh r0, [r4]\n\ + add r0, r0, #0x1\n\ + strh r0, [r4]\n\ + b ._1384\n\ +._1367:\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1383 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r0, ._1377\n\ + bl sub_80EBDBC\n\ + b ._1384\n\ +._1378:\n\ + .align 2, 0\n\ +._1377:\n\ + .word sub_80EE8F4+1\n\ +._1357:\n\ + bl sub_80F0718\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1383 @cond_branch\n\ + ldr r1, ._1381\n\ + add r0, r5, r1\n\ + ldrb r0, [r0]\n\ + bl sub_80F0FFC\n\ + bl sub_80F3264\n\ + ldrh r0, [r4]\n\ + add r0, r0, #0x1\n\ + b ._1380\n\ +._1382:\n\ + .align 2, 0\n\ +._1381:\n\ + .word 0x876e\n\ +._1363:\n\ + bl sub_8055870\n\ + cmp r0, #0\n\ + bne ._1383 @cond_branch\n\ +._1380:\n\ + strh r0, [r4]\n\ +._1383:\n\ + ldr r0, ._1385\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._1384 @cond_branch\n\ + ldr r0, ._1385 + 4\n\ + ldr r1, ._1385 + 8\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + mov r1, #0x4\n\ + str r1, [sp]\n\ + mov r1, #0x1\n\ + mov r2, #0x3\n\ + mov r3, #0x2\n\ + bl debug_sub_8008264\n\ +._1384:\n\ + add sp, sp, #0x4\n\ + pop {r4, r5}\n\ + pop {r0}\n\ + bx r0\n\ +._1386:\n\ + .align 2, 0\n\ +._1385:\n\ + .word gLinkOpen\n\ + .word gLink\n\ + .word 0xfbd"); +} +#else void sub_80EE58C() { switch (ewram0_10.var304) @@ -2588,6 +7575,7 @@ void sub_80EE58C() break; } } +#endif void sub_80EE658() { @@ -3018,6 +8006,108 @@ _080EEC0A:\n\ #endif // var6dad and var6dae must be s8 in this func +#if DEBUG +__attribute__((naked)) +bool8 sub_80EEC10() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r0, ._1563\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x40\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1559 @cond_branch\n\ + ldr r1, ._1563 + 4\n\ + add r3, r1, #1\n\ + add r2, r1, #5\n\ +._1561:\n\ + ldrb r0, [r1]\n\ + sub r0, r0, #0x1\n\ + strb r0, [r1]\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bge ._1560 @cond_branch\n\ + ldrb r0, [r3]\n\ + sub r0, r0, #0x1\n\ + strb r0, [r1]\n\ +._1560:\n\ + mov r0, #0x0\n\ + ldsb r0, [r1, r0]\n\ + add r0, r0, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._1561 @cond_branch\n\ + mov r0, #0x1\n\ + b ._1568\n\ +._1564:\n\ + .align 2, 0\n\ +._1563:\n\ + .word gMain\n\ + .word gSharedMem+0x6dad\n\ +._1559:\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1565 @cond_branch\n\ + ldr r1, ._1569\n\ + mov r4, #0x0\n\ + mov r2, #0x1\n\ + ldsb r2, [r1, r2]\n\ + add r3, r1, #5\n\ +._1567:\n\ + ldrb r0, [r1]\n\ + add r0, r0, #0x1\n\ + strb r0, [r1]\n\ + lsl r0, r0, #0x18\n\ + asr r0, r0, #0x18\n\ + cmp r0, r2\n\ + blt ._1566 @cond_branch\n\ + strb r4, [r1]\n\ +._1566:\n\ + mov r0, #0x0\n\ + ldsb r0, [r1, r0]\n\ + add r0, r0, r3\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._1567 @cond_branch\n\ + mov r0, #0x1\n\ + b ._1568\n\ +._1570:\n\ + .align 2, 0\n\ +._1569:\n\ + .word gSharedMem+0x6dad\n\ +._1565:\n\ + ldr r0, ._1572\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._1571 @cond_branch\n\ + ldr r0, ._1572 + 4\n\ + ldr r1, ._1572 + 8\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + mov r1, #0x4\n\ + str r1, [sp]\n\ + mov r1, #0x6\n\ + mov r2, #0xa\n\ + mov r3, #0x2\n\ + bl debug_sub_8008264\n\ +._1571:\n\ + mov r0, #0x0\n\ +._1568:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ +._1573:\n\ + .align 2, 0\n\ +._1572:\n\ + .word gLinkOpen\n\ + .word gLink\n\ + .word 0xfbd"); +} +#else bool8 sub_80EEC10() { if (gMain.newKeys & 0x40) @@ -3040,7 +8130,104 @@ bool8 sub_80EEC10() } return FALSE; } +#endif +#if DEBUG +__attribute__((naked)) +bool8 sub_80EEC90() +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r0, ._1577\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x40\n\ + and r0, r0, r1\n\ + lsl r0, r0, #0x10\n\ + lsr r3, r0, #0x10\n\ + cmp r3, #0\n\ + beq ._1574 @cond_branch\n\ + ldr r2, ._1577 + 4\n\ + ldr r0, ._1577 + 8\n\ + add r1, r2, r0\n\ + ldrb r0, [r1]\n\ + sub r0, r0, #0x1\n\ + strb r0, [r1]\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bge ._1580 @cond_branch\n\ + ldr r3, ._1577 + 12\n\ + add r0, r2, r3\n\ + ldrb r0, [r0]\n\ + sub r0, r0, #0x1\n\ + strb r0, [r1]\n\ + b ._1580\n\ +._1578:\n\ + .align 2, 0\n\ +._1577:\n\ + .word gMain\n\ + .word gSharedMem\n\ + .word 0x6dad\n\ + .word 0x6dae\n\ +._1574:\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1579 @cond_branch\n\ + ldr r0, ._1582\n\ + ldr r4, ._1582 + 4\n\ + add r2, r0, r4\n\ + ldrb r1, [r2]\n\ + add r1, r1, #0x1\n\ + strb r1, [r2]\n\ + add r4, r4, #0x1\n\ + add r0, r0, r4\n\ + lsl r1, r1, #0x18\n\ + asr r1, r1, #0x18\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x18\n\ + asr r0, r0, #0x18\n\ + cmp r1, r0\n\ + blt ._1580 @cond_branch\n\ + strb r3, [r2]\n\ +._1580:\n\ + mov r0, #0x1\n\ + b ._1581\n\ +._1583:\n\ + .align 2, 0\n\ +._1582:\n\ + .word gSharedMem\n\ + .word 0x6dad\n\ +._1579:\n\ + ldr r0, ._1585\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bne ._1584 @cond_branch\n\ + ldr r0, ._1585 + 4\n\ + ldr r1, ._1585 + 8\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + mov r1, #0x4\n\ + str r1, [sp]\n\ + mov r1, #0x6\n\ + mov r2, #0xa\n\ + mov r3, #0x2\n\ + bl debug_sub_8008264\n\ +._1584:\n\ + mov r0, #0x0\n\ +._1581:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ +._1586:\n\ + .align 2, 0\n\ +._1585:\n\ + .word gLinkOpen\n\ + .word gLink\n\ + .word 0xfbd"); +} +#else bool8 sub_80EEC90() { if (gMain.newKeys & 0x40) @@ -3057,6 +8244,7 @@ bool8 sub_80EEC90() } return FALSE; } +#endif void sub_80EED0C() { diff --git a/src/rom3.c b/src/rom3.c index 000de8356..7b3051b86 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -67,6 +67,10 @@ void sub_800B858(void) } } +#if DEBUG +extern u8 gUnknown_02023A14_50; +#endif + void setup_poochyena_battle(void) { s32 i; @@ -93,6 +97,16 @@ void setup_poochyena_battle(void) } gUnknown_020239FC = 0; gUnknown_02024C78 = 0; + +#if DEBUG + if (gUnknown_02023A14_50 & 0x80) + { + gSharedMem[0x160fd] = 0; + gSharedMem[0x160fe] = 0; + gSharedMem[0x160ff] = 0; + ((u32 *) gBattleBuffersTransferData)[64]++; + } +#endif } void sub_800B950(void) diff --git a/src/rom6.c b/src/rom6.c index 62fbc987c..06e84cc0f 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -1,4 +1,6 @@ #include "global.h" +#include "constants/map_objects.h" +#include "constants/songs.h" #include "rom6.h" #include "braille_puzzles.h" #include "field_effect.h" @@ -8,7 +10,6 @@ #include "pokemon_menu.h" #include "overworld.h" #include "script.h" -#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "task.h" @@ -116,6 +117,21 @@ static void sub_810B4CC(u8 taskId) DestroyTask(taskId); } +#if DEBUG +void debug_sub_8120968(void) +{ + if (npc_before_player_of_type(MAP_OBJ_GFX_BREAKABLE_ROCK) == TRUE) + { + gLastFieldPokeMenuOpened = 0; + sub_810B53C(); + } + else + { + ScriptContext2_Disable(); + } +} +#endif + bool8 SetUpFieldMove_RockSmash(void) { if (npc_before_player_of_type(0x56) == TRUE) diff --git a/src/roulette.c b/src/roulette.c index 41e8ef77f..ffdbc2c26 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -131,6 +131,12 @@ struct StructgUnknown_083F8D90 u32 var04; }; +#if DEBUG +u8 gUnknown_Debug_03005FB8; +#endif + +#define static + static void sub_81150FC(void); static void sub_8115124(void); static void sub_8115238(void); @@ -308,7 +314,10 @@ extern const u16 gUnknown_083FA632[]; extern const s8 gUnknown_083FA64A[0x2]; extern const s8 gUnknown_083FA64C[0x8][0x2]; - +#if DEBUG +EWRAM_DATA u8 unk_203955C[4] = { 0 }; +EWRAM_DATA u8 unk_2039560[4] = { 0 }; +#endif void sub_81150FC(void) @@ -570,6 +579,305 @@ void sub_8115238(void) } #endif +#if DEBUG +__attribute__((naked)) +void sub_8115384(void) +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._35\n\ + ldr r0, ._35 + 4\n\ + str r0, [r1]\n\ + ldr r1, ._35 + 8\n\ + ldr r2, ._35 + 12\n\ + add r0, r1, r2\n\ + ldrb r0, [r0]\n\ + add r2, r1, #0\n\ + cmp r0, #0x7\n\ + bls ._33 @cond_branch\n\ + b ._64\n\ +._33:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._35 + 16\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._36:\n\ + .align 2, 0\n\ +._35:\n\ + .word gUnknown_Debug_03005FB8\n\ + .word 0x2019000\n\ + .word gMain\n\ + .word 0x43c\n\ + .word ._37\n\ +._37:\n\ + .word ._38\n\ + .word ._39\n\ + .word ._40\n\ + .word ._41\n\ + .word ._42\n\ + .word ._43\n\ + .word ._44\n\ + .word ._45\n\ +._38:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + bl ScanlineEffect_Stop\n\ + bl ClearVideoCallbacks\n\ + bl sub_80F9368\n\ + ldr r1, ._47\n\ + ldr r3, ._47 + 4\n\ + add r0, r3, #0\n\ + strh r0, [r1]\n\ + sub r1, r1, #0x2\n\ + ldr r2, ._47 + 8\n\ + add r0, r2, #0\n\ + strh r0, [r1]\n\ + add r1, r1, #0x46\n\ + mov r3, #0x90\n\ + lsl r3, r3, #0x6\n\ + add r0, r3, #0\n\ + strh r0, [r1]\n\ + add r1, r1, #0x2\n\ + ldr r2, ._47 + 12\n\ + add r0, r2, #0\n\ + strh r0, [r1]\n\ + ldr r0, ._47 + 16\n\ + mov r1, #0xc0\n\ + lsl r1, r1, #0x13\n\ + bl LZ77UnCompVram\n\ + ldr r0, ._47 + 20\n\ + ldr r1, ._47 + 24\n\ + bl LZ77UnCompVram\n\ + ldr r1, ._47 + 28\n\ + ldr r3, ._47 + 32\n\ + add r1, r1, r3\n\ + b ._61\n\ +._48:\n\ + .align 2, 0\n\ +._47:\n\ + .word 0x400000c\n\ + .word 0x4686\n\ + .word 0x4401\n\ + .word 0x60a\n\ + .word gUnknown_08E8096C\n\ + .word gRouletteWheelTiles\n\ + .word 0x6004000\n\ + .word gMain\n\ + .word 0x43c\n\ +._39:\n\ + bl ResetPaletteFade\n\ + bl ResetSpriteData\n\ + bl ResetTasks\n\ + ldr r1, ._50\n\ + ldr r0, ._50 + 4\n\ + add r1, r1, r0\n\ + b ._61\n\ +._51:\n\ + .align 2, 0\n\ +._50:\n\ + .word gMain\n\ + .word 0x43c\n\ +._40:\n\ + ldr r0, ._53\n\ + bl Text_LoadWindowTemplate\n\ + ldr r0, ._53 + 4\n\ + bl InitMenuWindow\n\ + ldr r0, ._53 + 8\n\ + mov r2, #0xe0\n\ + lsl r2, r2, #0x1\n\ + mov r1, #0x0\n\ + bl LoadPalette\n\ + ldr r1, ._53 + 12\n\ + ldr r2, ._53 + 16\n\ + add r1, r1, r2\n\ + b ._61\n\ +._54:\n\ + .align 2, 0\n\ +._53:\n\ + .word gWindowTemplate_81E6C3C\n\ + .word gWindowTemplate_81E6CE4\n\ + .word gUnknown_083F86BC\n\ + .word gMain\n\ + .word 0x43c\n\ +._41:\n\ + bl sub_8115238\n\ + bl ClearBGTilemapBuffers\n\ + ldr r0, ._56\n\ + ldr r1, ._56 + 4\n\ + bl LZ77UnCompWram\n\ + ldr r0, ._56 + 8\n\ + ldr r1, ._56 + 12\n\ + bl LZ77UnCompVram\n\ + ldr r1, ._56 + 16\n\ + ldr r3, ._56 + 20\n\ + add r1, r1, r3\n\ + b ._61\n\ +._57:\n\ + .align 2, 0\n\ +._56:\n\ + .word gUnknown_083F88BC\n\ + .word 0x2018800\n\ + .word gUnknown_083F8A60\n\ + .word 0x6003000\n\ + .word gMain\n\ + .word 0x43c\n\ +._42:\n\ + mov r0, #0x0\n\ + bl sub_8117838\n\ + bl sub_811857C\n\ + bl sub_81184D8\n\ + bl sub_8117F2C\n\ + bl sub_8117900\n\ + bl sub_8117BBC\n\ + bl sub_8117DF4\n\ + ldr r1, ._59\n\ + ldr r0, ._59 + 4\n\ + add r1, r1, r0\n\ + b ._61\n\ +._60:\n\ + .align 2, 0\n\ +._59:\n\ + .word gMain\n\ + .word 0x43c\n\ +._43:\n\ + bl AnimateSprites\n\ + bl BuildOamBuffer\n\ + ldr r0, ._62\n\ + ldr r1, ._62 + 4\n\ + add r0, r0, r1\n\ + ldrh r0, [r0]\n\ + bl sub_81180F4\n\ + mov r0, #0x6\n\ + bl sub_81182F8\n\ + mov r0, #0x0\n\ + bl sub_811829C\n\ + mov r0, #0x0\n\ + bl sub_8117158\n\ + mov r0, #0x0\n\ + mov r1, #0xe\n\ + mov r2, #0x1d\n\ + mov r3, #0x13\n\ + bl Menu_DrawStdWindowFrame\n\ + ldr r0, ._62 + 8\n\ + mov r1, #0x1\n\ + mov r2, #0xf\n\ + bl Menu_PrintText\n\ + ldr r1, ._62 + 12\n\ + mov r2, #0x3c\n\ + neg r2, r2\n\ + add r0, r2, #0\n\ + strh r0, [r1]\n\ + ldr r1, ._62 + 16\n\ + mov r0, #0x0\n\ + strh r0, [r1]\n\ + ldr r1, ._62 + 20\n\ + ldr r3, ._62 + 24\n\ + add r1, r1, r3\n\ + b ._61\n\ +._63:\n\ + .align 2, 0\n\ +._62:\n\ + .word gSaveBlock1\n\ + .word 0x494\n\ + .word gUnknown_081C4157\n\ + .word gSpriteCoordOffsetX\n\ + .word gSpriteCoordOffsetY\n\ + .word gMain\n\ + .word 0x43c\n\ +._44:\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x13\n\ + ldr r3, ._65\n\ + add r0, r3, #0\n\ + strh r0, [r1]\n\ + ldr r0, ._65 + 4\n\ + add r1, r2, r0\n\ +._61:\n\ + ldrb r0, [r1]\n\ + add r0, r0, #0x1\n\ + strb r0, [r1]\n\ + b ._64\n\ +._66:\n\ + .align 2, 0\n\ +._65:\n\ + .word 0x1741\n\ + .word 0x43c\n\ +._45:\n\ + ldr r3, ._67\n\ + ldrh r2, [r3]\n\ + mov r0, #0x0\n\ + strh r0, [r3]\n\ + ldr r4, ._67 + 4\n\ + ldrh r0, [r4]\n\ + mov r1, #0x1\n\ + orr r0, r0, r1\n\ + strh r0, [r4]\n\ + strh r2, [r3]\n\ + ldr r2, ._67 + 8\n\ + ldrh r0, [r2]\n\ + mov r1, #0x8\n\ + orr r0, r0, r1\n\ + strh r0, [r2]\n\ + ldr r0, ._67 + 12\n\ + bl SetVBlankCallback\n\ + mov r0, #0x1\n\ + str r0, [sp]\n\ + mov r0, #0xff\n\ + mov r1, #0x0\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginHardwarePaletteFade\n\ + ldr r0, ._67 + 16\n\ + mov r1, #0x0\n\ + bl CreateTask\n\ + ldr r4, ._67 + 20\n\ + add r1, r4, #0\n\ + add r1, r1, #0xa4\n\ + strb r0, [r1]\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + ldr r2, ._67 + 24\n\ + lsl r1, r0, #0x2\n\ + add r1, r1, r0\n\ + lsl r1, r1, #0x3\n\ + add r1, r1, r2\n\ + mov r0, #0x6\n\ + strh r0, [r1, #0x14]\n\ + ldr r0, ._67 + 28\n\ + ldr r2, ._67 + 32\n\ + add r0, r0, r2\n\ + ldrh r0, [r0]\n\ + strh r0, [r1, #0x22]\n\ + ldr r0, ._67 + 36\n\ + mov r1, #0x1\n\ + bl CreateTask\n\ + add r4, r4, #0xa5\n\ + strb r0, [r4]\n\ + ldr r0, ._67 + 40\n\ + bl SetMainCallback2\n\ +._64:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._68:\n\ + .align 2, 0\n\ +._67:\n\ + .word 0x4000208\n\ + .word 0x4000200\n\ + .word 0x4000004\n\ + .word sub_8115124+1\n\ + .word sub_81156BC+1\n\ + .word 0x2019000\n\ + .word gTasks\n\ + .word gSaveBlock1\n\ + .word 0x494\n\ + .word sub_8115634+1\n\ + .word sub_81150FC+1"); +} +#else void sub_8115384(void) { u32 temp_IME; @@ -651,7 +959,120 @@ void sub_8115384(void) break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_8115634(u8 unused) +{ + asm("\ + push {r4, r5, r6, lr}\n\ + ldr r0, ._75\n\ + add r3, r0, #0\n\ + add r3, r3, #0x21\n\ + ldrb r1, [r3]\n\ + add r2, r1, #1\n\ + strb r2, [r3]\n\ + add r2, r0, #0\n\ + add r2, r2, #0x23\n\ + lsl r1, r1, #0x18\n\ + lsr r1, r1, #0x18\n\ + add r6, r0, #0\n\ + ldrb r2, [r2]\n\ + cmp r1, r2\n\ + bne ._70 @cond_branch\n\ + mov r0, #0x0\n\ + strb r0, [r3]\n\ + add r2, r6, #0\n\ + add r2, r2, #0x22\n\ + ldrb r1, [r2]\n\ + ldrh r0, [r6, #0x24]\n\ + sub r0, r0, r1\n\ + strh r0, [r6, #0x24]\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + bge ._70 @cond_branch\n\ + ldrb r1, [r2]\n\ + mov r2, #0xb4\n\ + lsl r2, r2, #0x1\n\ + add r0, r2, #0\n\ + sub r0, r0, r1\n\ + strh r0, [r6, #0x24]\n\ +._70:\n\ + add r4, r6, #0\n\ + ldrh r0, [r4, #0x24]\n\ + bl Sin2\n\ + lsl r0, r0, #0x10\n\ + lsr r5, r0, #0x10\n\ + ldrh r0, [r4, #0x24]\n\ + bl Cos2\n\ + lsl r0, r0, #0x10\n\ + lsr r1, r0, #0x10\n\ + lsl r0, r5, #0x10\n\ + asr r0, r0, #0x10\n\ + cmp r0, #0\n\ + bge ._71 @cond_branch\n\ + add r0, r0, #0xf\n\ +._71:\n\ + lsl r0, r0, #0xc\n\ + lsr r5, r0, #0x10\n\ + lsl r0, r1, #0x10\n\ + asr r0, r0, #0x10\n\ + cmp r0, #0\n\ + bge ._72 @cond_branch\n\ + add r0, r0, #0xf\n\ +._72:\n\ + asr r0, r0, #0x4\n\ + strh r0, [r6, #0x32]\n\ + strh r0, [r6, #0x2c]\n\ + strh r5, [r6, #0x2e]\n\ + lsl r0, r5, #0x10\n\ + asr r0, r0, #0x10\n\ + neg r0, r0\n\ + strh r0, [r6, #0x30]\n\ + ldr r0, ._75 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._74 @cond_branch\n\ + ldr r0, ._75 + 8\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._74 @cond_branch\n\ + ldr r2, ._75 + 12\n\ + add r0, r6, #0\n\ + add r0, r0, #0xa4\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x3\n\ + add r0, r0, r2\n\ + ldr r1, ._75 + 16\n\ + str r1, [r0]\n\ + ldr r0, ._75 + 20\n\ + bl m4aMPlayStop\n\ + ldr r0, ._75 + 24\n\ + bl m4aMPlayStop\n\ + ldr r0, ._75 + 28\n\ + bl m4aMPlayStop\n\ +._74:\n\ + pop {r4, r5, r6}\n\ + pop {r0}\n\ + bx r0\n\ +._76:\n\ + .align 2, 0\n\ +._75:\n\ + .word 0x2019000\n\ + .word unk_203955C\n\ + .word gMain\n\ + .word gTasks\n\ + .word sub_81157AC+1\n\ + .word gMPlay_SE1\n\ + .word gMPlay_SE2\n\ + .word gMPlay_SE3"); +} +#else void sub_8115634(u8 unused) { s16 sin; @@ -672,6 +1093,7 @@ void sub_8115634(u8 unused) eRoulette->var2C.b = sin; eRoulette->var2C.c = -sin; } +#endif void sub_81156BC(u8 taskid) { @@ -1593,7 +2015,69 @@ void sub_8116AB0(u8 taskid) gTasks[taskid].func = &sub_8116B40; } -void sub_8116B40(u8 taskid) // end oulette ? +#if DEBUG +__attribute__((naked)) +void sub_8116B40(u8 taskid) // end roulette ? +{ + asm("\ + push {r4, r5, r6, lr}\n\ + lsl r0, r0, #0x18\n\ + lsr r6, r0, #0x18\n\ + bl UpdatePaletteFade\n\ + lsl r0, r0, #0x18\n\ + lsr r5, r0, #0x18\n\ + cmp r5, #0\n\ + bne ._380 @cond_branch\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + ldr r0, ._381\n\ + mov r2, #0xbe\n\ + lsl r2, r2, #0x1\n\ + mov r1, #0x0\n\ + bl memset\n\ + ldr r1, ._381 + 4\n\ + ldr r0, ._381 + 8\n\ + mov r4, #0x0\n\ + strh r5, [r0]\n\ + strh r5, [r1]\n\ + bl sub_80F9368\n\ + bl FreeAllSpritePalettes\n\ + bl ResetPaletteFade\n\ + bl ResetSpriteData\n\ + bl ClearBGTilemapBuffers\n\ + ldr r0, ._381 + 12\n\ + strh r5, [r0]\n\ + add r0, r0, #0x2\n\ + strh r5, [r0]\n\ + add r0, r0, #0x2\n\ + strh r5, [r0]\n\ + ldr r1, ._381 + 16\n\ + ldr r0, ._381 + 20\n\ + str r0, [r1]\n\ + ldr r0, ._381 + 24\n\ + bl SetMainCallback2\n\ + add r0, r6, #0\n\ + bl DestroyTask\n\ + ldr r0, ._381 + 28\n\ + strb r4, [r0]\n\ +._380:\n\ + pop {r4, r5, r6}\n\ + pop {r0}\n\ + bx r0\n\ +._382:\n\ + .align 2, 0\n\ +._381:\n\ + .word 0x2019000\n\ + .word gSpriteCoordOffsetX\n\ + .word gSpriteCoordOffsetY\n\ + .word 0x4000050\n\ + .word gFieldCallback\n\ + .word sub_8080990+1\n\ + .word c2_exit_to_overworld_2_switch+1\n\ + .word unk_203955C"); +} +#else +void sub_8116B40(u8 taskid) // end roulette ? { if (UpdatePaletteFade() == 0) { @@ -1613,6 +2097,7 @@ void sub_8116B40(u8 taskid) // end oulette ? DestroyTask(taskid); } } +#endif void sub_8116BC0(u8 taskid) { @@ -2629,6 +3114,9 @@ void sub_811755C(u8 taskid) void sub_81175C0(u8 taskid) { +#if DEBUG + unk_203955C[0] = 0; +#endif Menu_EraseScreen(); ScriptContext2_Disable(); DestroyTask(taskid); @@ -2691,6 +3179,386 @@ void Task_Roulette_0(u8 taskid) } } +#if DEBUG + +__attribute__((naked)) +void debug_sub_812CDE4() +{ + asm("\ + push {r4, r5, lr}\n\ + lsl r0, r0, #0x18\n\ + lsr r3, r0, #0x18\n\ + add r4, r3, #0\n\ + ldr r0, ._575\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._572 @cond_branch\n\ + ldr r1, ._575 + 4\n\ + lsl r0, r3, #0x2\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x3\n\ + add r2, r0, r1\n\ + ldrh r0, [r2, #0x22]\n\ + add r0, r0, #0x1\n\ + strh r0, [r2, #0x22]\n\ + lsl r0, r0, #0x10\n\ + ldr r1, ._575 + 8\n\ + cmp r0, r1\n\ + bne ._573 @cond_branch\n\ + mov r0, #0x0\n\ + strh r0, [r2, #0x22]\n\ +._573:\n\ + ldr r0, ._575 + 12\n\ + mov r3, #0x22\n\ + ldsh r1, [r2, r3]\n\ + b ._584\n\ +._576:\n\ + .align 2, 0\n\ +._575:\n\ + .word gMain\n\ + .word gTasks\n\ + .word 0x27100000\n\ + .word gStringVar1\n\ +._572:\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._577 @cond_branch\n\ + ldr r1, ._580\n\ + lsl r0, r3, #0x2\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x3\n\ + add r2, r0, r1\n\ + ldrh r0, [r2, #0x22]\n\ + sub r0, r0, #0x1\n\ + strh r0, [r2, #0x22]\n\ + lsl r0, r0, #0x10\n\ + asr r0, r0, #0x10\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + cmp r0, r1\n\ + bne ._578 @cond_branch\n\ + ldr r0, ._580 + 4\n\ + strh r0, [r2, #0x22]\n\ +._578:\n\ + ldr r0, ._580 + 8\n\ + mov r3, #0x22\n\ + ldsh r1, [r2, r3]\n\ + b ._584\n\ +._581:\n\ + .align 2, 0\n\ +._580:\n\ + .word gTasks\n\ + .word 0x270f\n\ + .word gStringVar1\n\ +._577:\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._582 @cond_branch\n\ + ldr r1, ._585\n\ + lsl r0, r3, #0x2\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x3\n\ + add r2, r0, r1\n\ + ldrh r3, [r2, #0x22]\n\ + add r0, r3, #0\n\ + add r0, r0, #0xa\n\ + strh r0, [r2, #0x22]\n\ + lsl r0, r0, #0x10\n\ + ldr r1, ._585 + 4\n\ + cmp r0, r1\n\ + ble ._583 @cond_branch\n\ + ldr r1, ._585 + 8\n\ + add r0, r3, r1\n\ + strh r0, [r2, #0x22]\n\ +._583:\n\ + ldr r0, ._585 + 12\n\ + mov r3, #0x22\n\ + ldsh r1, [r2, r3]\n\ + b ._584\n\ +._586:\n\ + .align 2, 0\n\ +._585:\n\ + .word gTasks\n\ + .word 0x270f0000\n\ + .word 0xffffd8fb\n\ + .word gStringVar1\n\ +._582:\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._587 @cond_branch\n\ + ldr r0, ._590\n\ + lsl r1, r3, #0x2\n\ + add r1, r1, r3\n\ + lsl r1, r1, #0x3\n\ + add r1, r1, r0\n\ + ldrh r2, [r1, #0x22]\n\ + add r0, r2, #0\n\ + sub r0, r0, #0xa\n\ + strh r0, [r1, #0x22]\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + bge ._588 @cond_branch\n\ + ldr r3, ._590 + 4\n\ + add r0, r2, r3\n\ + strh r0, [r1, #0x22]\n\ +._588:\n\ + ldr r0, ._590 + 8\n\ + mov r2, #0x22\n\ + ldsh r1, [r1, r2]\n\ +._584:\n\ + mov r2, #0x1\n\ + mov r3, #0x4\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r4, ._590 + 12\n\ + ldr r1, ._590 + 16\n\ + add r0, r4, #0\n\ + bl StringExpandPlaceholders\n\ + add r0, r4, #0\n\ + mov r1, #0x9\n\ + mov r2, #0x1\n\ + bl MenuPrint_RightAligned\n\ + b ._596\n\ +._591:\n\ + .align 2, 0\n\ +._590:\n\ + .word gTasks\n\ + .word 0x2705\n\ + .word gStringVar1\n\ + .word gStringVar4\n\ + .word gOtherText_Coins\n\ +._587:\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._592 @cond_branch\n\ + ldr r0, ._594\n\ + ldr r2, ._594 + 4\n\ + lsl r1, r3, #0x2\n\ + add r1, r1, r3\n\ + lsl r1, r1, #0x3\n\ + add r1, r1, r2\n\ + ldrh r2, [r1, #0x22]\n\ + ldr r3, ._594 + 8\n\ + add r0, r0, r3\n\ + mov r5, #0x0\n\ + strh r2, [r0]\n\ + ldr r0, ._594 + 12\n\ + str r0, [r1]\n\ + ldr r0, ._594 + 16\n\ + mov r2, #0x22\n\ + ldsh r1, [r1, r2]\n\ + mov r2, #0x1\n\ + mov r3, #0x4\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r4, ._594 + 20\n\ + ldr r1, ._594 + 24\n\ + add r0, r4, #0\n\ + bl StringExpandPlaceholders\n\ + add r0, r4, #0\n\ + mov r1, #0x9\n\ + mov r2, #0x1\n\ + bl MenuPrint_RightAligned\n\ + ldr r0, ._594 + 28\n\ + strb r5, [r0]\n\ + b ._596\n\ +._595:\n\ + .align 2, 0\n\ +._594:\n\ + .word gSaveBlock1\n\ + .word gTasks\n\ + .word 0x494\n\ + .word Task_Roulette_0+1\n\ + .word gStringVar1\n\ + .word gStringVar4\n\ + .word gOtherText_Coins\n\ + .word unk_2039560\n\ +._592:\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._596 @cond_branch\n\ + ldr r0, ._597\n\ + ldr r2, ._597 + 4\n\ + lsl r1, r4, #0x2\n\ + add r1, r1, r4\n\ + lsl r1, r1, #0x3\n\ + add r1, r1, r2\n\ + ldrh r2, [r1, #0x22]\n\ + ldr r3, ._597 + 8\n\ + add r0, r0, r3\n\ + strh r2, [r0]\n\ + ldr r0, ._597 + 12\n\ + str r0, [r1]\n\ + ldr r0, ._597 + 16\n\ + mov r2, #0x22\n\ + ldsh r1, [r1, r2]\n\ + mov r2, #0x1\n\ + mov r3, #0x4\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r4, ._597 + 20\n\ + ldr r1, ._597 + 24\n\ + add r0, r4, #0\n\ + bl StringExpandPlaceholders\n\ + add r0, r4, #0\n\ + mov r1, #0x9\n\ + mov r2, #0x1\n\ + bl MenuPrint_RightAligned\n\ + ldr r1, ._597 + 28\n\ + mov r0, #0x1\n\ + strb r0, [r1]\n\ +._596:\n\ + pop {r4, r5}\n\ + pop {r0}\n\ + bx r0\n\ +._598:\n\ + .align 2, 0\n\ +._597:\n\ + .word gSaveBlock1\n\ + .word gTasks\n\ + .word 0x494\n\ + .word Task_Roulette_0+1\n\ + .word gStringVar1\n\ + .word gStringVar4\n\ + .word gOtherText_Coins\n\ + .word unk_2039560"); +} + +__attribute__((naked)) +void debug_sub_812CFE8() +{ + asm("\ + push {r4, r5, lr}\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + ldr r2, ._600\n\ + lsl r1, r0, #0x2\n\ + add r1, r1, r0\n\ + lsl r1, r1, #0x3\n\ + add r5, r1, r2\n\ + ldr r0, ._600 + 4\n\ + ldr r1, ._600 + 8\n\ + add r0, r0, r1\n\ + ldrh r0, [r0]\n\ + strh r0, [r5, #0x22]\n\ + bl Random\n\ + mov r1, #0x1\n\ + and r1, r1, r0\n\ + cmp r1, #0\n\ + beq ._599 @cond_branch\n\ + ldr r0, ._600 + 12\n\ + ldrh r1, [r0]\n\ + mov r2, #0x80\n\ + orr r1, r1, r2\n\ + strh r1, [r0]\n\ +._599:\n\ + ldr r0, ._600 + 16\n\ + mov r2, #0x22\n\ + ldsh r1, [r5, r2]\n\ + mov r2, #0x1\n\ + mov r3, #0x4\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r4, ._600 + 20\n\ + ldr r1, ._600 + 24\n\ + add r0, r4, #0\n\ + bl StringExpandPlaceholders\n\ + mov r0, #0x0\n\ + mov r1, #0x0\n\ + mov r2, #0x9\n\ + mov r3, #0x3\n\ + bl Menu_DrawStdWindowFrame\n\ + add r0, r4, #0\n\ + mov r1, #0x9\n\ + mov r2, #0x1\n\ + bl MenuPrint_RightAligned\n\ + mov r0, #0x0\n\ + mov r1, #0xe\n\ + mov r2, #0x1d\n\ + mov r3, #0x13\n\ + bl Menu_DrawStdWindowFrame\n\ + ldr r0, ._600 + 28\n\ + mov r1, #0x1\n\ + mov r2, #0xf\n\ + bl Menu_PrintText\n\ + ldr r0, ._600 + 32\n\ + str r0, [r5]\n\ + pop {r4, r5}\n\ + pop {r0}\n\ + bx r0\n\ +._601:\n\ + .align 2, 0\n\ +._600:\n\ + .word gTasks\n\ + .word gSaveBlock1\n\ + .word 0x494\n\ + .word gSpecialVar_0x8004\n\ + .word gStringVar1\n\ + .word gStringVar4\n\ + .word gOtherText_Coins\n\ + .word gUnknown_Debug_0842510D\n\ + .word debug_sub_812CDE4+1"); +} + +#endif + +#if DEBUG +__attribute__((naked)) +void PlayRoulette(void) +{ + asm("\ + push {lr}\n\ + bl ScriptContext2_Enable\n\ + ldr r1, ._604\n\ + mov r0, #0x0\n\ + strb r0, [r1]\n\ + ldr r0, ._604 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._602 @cond_branch\n\ + ldr r0, ._604 + 8\n\ + mov r1, #0x0\n\ + bl CreateTask\n\ + b ._603\n\ +._605:\n\ + .align 2, 0\n\ +._604:\n\ + .word unk_2039560\n\ + .word unk_203955C\n\ + .word debug_sub_812CFE8+1\n\ +._602:\n\ + ldr r0, ._606\n\ + mov r1, #0x0\n\ + bl CreateTask\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + ldr r2, ._606 + 4\n\ + lsl r1, r0, #0x2\n\ + add r1, r1, r0\n\ + lsl r1, r1, #0x3\n\ + add r1, r1, r2\n\ + ldr r0, ._606 + 8\n\ + ldr r2, ._606 + 12\n\ + add r0, r0, r2\n\ + ldrh r0, [r0]\n\ + strh r0, [r1, #0x22]\n\ +._603:\n\ + pop {r0}\n\ + bx r0\n\ +._607:\n\ + .align 2, 0\n\ +._606:\n\ + .word Task_Roulette_0+1\n\ + .word gTasks\n\ + .word gSaveBlock1\n\ + .word 0x494"); +} +#else void PlayRoulette(void) { u8 taskid; @@ -2698,6 +3566,7 @@ void PlayRoulette(void) taskid = CreateTask(&Task_Roulette_0, 0x0); gTasks[taskid].data[0xD] = gSaveBlock1.coins; } +#endif void sub_8117838(u8 r0) { @@ -3591,6 +4460,99 @@ void sub_8118D2C(struct Sprite *sprite) } } +#if DEBUG +__attribute__((naked)) +void debug_sub_812E698() +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + add r7, r0, #0\n\ + bl sub_8118724\n\ + mov r0, #0x0\n\ + strh r0, [r7, #0x32]\n\ + add r0, r7, #0\n\ + bl sub_81186B8\n\ + mov r0, #0x38\n\ + bl m4aSongNumStart\n\ + bl Random\n\ + mov r1, #0x1\n\ + and r1, r1, r0\n\ + cmp r1, #0\n\ + beq ._837 @cond_branch\n\ + ldr r4, ._839\n\ + add r1, r4, #0\n\ + add r1, r1, #0x8c\n\ + ldr r0, ._839 + 4\n\ + str r0, [r1]\n\ + add r0, r4, #0\n\ + add r0, r0, #0x7e\n\ + ldrb r0, [r0]\n\ + add r0, r0, #0x1\n\ + mov r1, #0xc\n\ + bl __modsi3\n\ + add r1, r4, #0\n\ + add r1, r1, #0x7f\n\ + strb r0, [r1]\n\ + add r1, r4, #0\n\ + ldr r4, ._839 + 8\n\ + b ._838\n\ +._840:\n\ + .align 2, 0\n\ +._839:\n\ + .word 0x2019000\n\ + .word 0x0\n\ + .word gUnknown_083F8DF4\n\ +._837:\n\ + ldr r6, ._841\n\ + add r5, r6, #0\n\ + add r5, r5, #0x8c\n\ + ldr r4, ._841 + 4\n\ + ldrb r0, [r6, #0x4]\n\ + lsl r0, r0, #0x1e\n\ + lsr r0, r0, #0x19\n\ + add r1, r4, #0\n\ + add r1, r1, #0x1c\n\ + add r0, r0, r1\n\ + ldr r1, [r0]\n\ + add r0, r1, #0\n\ + bl __addsf3\n\ + str r0, [r5]\n\ + add r0, r6, #0\n\ + add r0, r0, #0x7e\n\ + ldrb r0, [r0]\n\ + add r1, r6, #0\n\ + add r1, r1, #0x7f\n\ + strb r0, [r1]\n\ + add r1, r6, #0\n\ +._838:\n\ + mov r0, #0x1\n\ + strh r0, [r7, #0x2e]\n\ + ldrb r0, [r1, #0x4]\n\ + lsl r0, r0, #0x1e\n\ + lsr r0, r0, #0x19\n\ + add r0, r0, r4\n\ + ldrb r0, [r0, #0x2]\n\ + strh r0, [r7, #0x32]\n\ + add r1, r1, #0x98\n\ + ldr r0, ._841 + 8\n\ + str r0, [r1]\n\ + ldr r0, ._841 + 12\n\ + str r0, [r7, #0x1c]\n\ + mov r0, #0x5\n\ + strh r0, [r7, #0x30]\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._842:\n\ + .align 2, 0\n\ +._841:\n\ + .word 0x2019000\n\ + .word gUnknown_083F8DF4\n\ + .word 0x3dae147b\n\ + .word sub_8118D2C+1"); +} +#endif + #ifdef NONMATCHING void sub_8118DE4(struct Sprite *sprite) { @@ -3866,6 +4828,137 @@ _08118F88: .4byte sub_8118D2C\n\ } #endif +#if DEBUG +__attribute__((naked)) +void sub_8118F8C(struct Sprite *sprite) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6, r7}\n\ + add r6, r0, #0\n\ + bl sub_8118724\n\ + ldr r5, ._868\n\ + mov r0, #0x8c\n\ + add r0, r0, r5\n\ + mov r8, r0\n\ + ldr r0, [r0]\n\ + ldr r1, ._868 + 4\n\ + bl __gtsf2\n\ + cmp r0, #0\n\ + bgt ._874 @cond_branch\n\ + add r0, r6, #0\n\ + bl sub_81186B8\n\ + add r0, r6, #0\n\ + bl sub_81186E8\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + bne ._864 @cond_branch\n\ + add r1, r5, #0\n\ + add r1, r1, #0x90\n\ + ldr r0, ._868 + 8\n\ + str r0, [r1]\n\ + ldr r1, ._868 + 12\n\ + mov r9, r1\n\ + ldrb r0, [r5, #0x4]\n\ + lsl r7, r0, #0x1e\n\ + lsr r0, r7, #0x19\n\ + add r0, r0, r9\n\ + mov r4, #0x3\n\ + ldsb r4, [r0, r4]\n\ + add r0, r4, #0\n\ + bl __floatsisf\n\ + add r5, r0, #0\n\ + cmp r4, #0\n\ + bge ._865 @cond_branch\n\ + ldr r1, ._868 + 16\n\ + bl __addsf3\n\ + add r5, r0, #0\n\ +._865:\n\ + lsr r0, r7, #0x19\n\ + add r0, r0, r9\n\ + ldrb r0, [r0, #0x4]\n\ + add r0, r0, #0x1\n\ + bl __floatsisf\n\ + add r1, r0, #0\n\ + add r0, r5, #0\n\ + bl __divsf3\n\ + add r1, r0, #0\n\ + mov r2, r8\n\ + ldr r0, [r2]\n\ + bl __subsf3\n\ + mov r1, r8\n\ + str r0, [r1]\n\ + mov r0, #0x4\n\ + strh r0, [r6, #0x30]\n\ + ldr r0, ._868 + 20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._866 @cond_branch\n\ + ldr r0, ._868 + 24\n\ + str r0, [r6, #0x1c]\n\ + b ._874\n\ +._869:\n\ + .align 2, 0\n\ +._868:\n\ + .word 0x2019000\n\ + .word 0x3f000000\n\ + .word 0x0\n\ + .word gUnknown_083F8DF4\n\ + .word 0x43800000\n\ + .word unk_2039560\n\ + .word debug_sub_812E698+1\n\ +._866:\n\ + ldr r0, ._871\n\ + str r0, [r6, #0x1c]\n\ + b ._874\n\ +._872:\n\ + .align 2, 0\n\ +._871:\n\ + .word sub_8118DE4+1\n\ +._864:\n\ + add r6, r5, #0\n\ + add r6, r6, #0x90\n\ + ldr r0, [r6]\n\ + ldr r4, ._875\n\ + add r1, r4, #0\n\ + bl __nesf2\n\ + cmp r0, #0\n\ + beq ._874 @cond_branch\n\ + mov r2, r8\n\ + ldr r0, [r2]\n\ + add r1, r4, #0\n\ + bl __ltsf2\n\ + cmp r0, #0\n\ + bge ._874 @cond_branch\n\ + str r4, [r6]\n\ + mov r0, r8\n\ + str r4, [r0]\n\ + add r4, r5, #0\n\ + add r4, r4, #0x98\n\ + ldr r0, [r4]\n\ + bl __extendsfdf2\n\ + ldr r2, ._875 + 4\n\ + ldr r3, ._875 + 8\n\ + bl __divdf3\n\ + bl __truncdfsf2\n\ + str r0, [r4]\n\ +._874:\n\ + pop {r3, r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._876:\n\ + .align 2, 0\n\ +._875:\n\ + .word 0x0\n\ + .word 0x3ff33333\n\ + .word 0x33333333"); +} +#else void sub_8118F8C(struct Sprite *sprite) { sub_8118724(sprite); @@ -3896,6 +4989,7 @@ void sub_8118F8C(struct Sprite *sprite) } } } +#endif void sub_8119088(struct Sprite *sprite) { diff --git a/src/scene/berry_blender.c b/src/scene/berry_blender.c index 2cb68ccf1..24cbcb9c0 100644 --- a/src/scene/berry_blender.c +++ b/src/scene/berry_blender.c @@ -274,12 +274,12 @@ static void sub_8051B18(void); static void sub_805123C(void); static void sub_8050954(void); static bool8 Blender_PrintBlendingRanking(void); -static bool8 Blender_PrintBlendingResults(void); +bool8 Blender_PrintBlendingResults(void); static void sub_80510E8(void); static void sub_8050E30(void); static void sub_805197C(u16 a0, u16 a1); -static void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst); -static void sub_8052BD0(u8 taskID); +/*static*/ void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst); +/*static*/ void sub_8052BD0(u8 taskID); static void sub_8052AF8(void); static void sub_804F8C8(u8 taskID); static void sub_804F9F4(u8 taskID); @@ -2411,7 +2411,7 @@ static void BlenderDebug_CalculatePokeblock(struct BlenderBerry* berries, struct Blender_CalculatePokeblock(berries, pokeblock, playersNo, flavours, a4); } -static void sub_8050760(void) +/*static*/ void sub_8050760(void) { u32 frames = (u16)(gBerryBlenderData->gameFrameTime); u16 max_RPM = gBerryBlenderData->max_RPM; @@ -3270,13 +3270,13 @@ static void sub_8051C04(struct Sprite* sprite) sprite->pos2.y = -(gBerryBlenderData->field_146); } -static void Blender_TrySettingRecord(void) +/*static*/ void Blender_TrySettingRecord(void) { if (gSaveBlock1.berryBlenderRecords[gBerryBlenderData->playersNo - 2] < gBerryBlenderData->max_RPM) gSaveBlock1.berryBlenderRecords[gBerryBlenderData->playersNo - 2] = gBerryBlenderData->max_RPM; } -static bool8 Blender_PrintBlendingResults(void) +bool8 Blender_PrintBlendingResults(void) { u16 i; @@ -3395,6 +3395,11 @@ static bool8 Blender_PrintBlendingResults(void) Blender_CalculatePokeblock(gBerryBlenderData->blendedBerries, &pokeblock, gBerryBlenderData->playersNo, flavours, gBerryBlenderData->max_RPM); Blender_PrintMadePokeblockString(&pokeblock, gBerryBlenderData->stringVar); CreateTask(sub_8052BD0, 6); +#if DEBUG + ConvertIntToHexStringN(text[0], sub_8007E40(), 0, 4); + StringAppend(text[0], gUnknown_08216249); + StringAppend(gBerryBlenderData->stringVar, text[0]); +#endif MenuPrintMessage(gBerryBlenderData->stringVar, 1, 15); RemoveBagItem(gSpecialVar_ItemId, 1); sub_810CA34(&pokeblock); @@ -3411,7 +3416,7 @@ static bool8 Blender_PrintBlendingResults(void) return FALSE; } -static void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst) +/*static*/ void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst) { u8 text[12]; u8 flavourLvl, feel; @@ -3834,7 +3839,7 @@ void ShowBerryBlenderRecordWindow(void) } } -static void sub_8052BD0(u8 taskID) +/*static*/ void sub_8052BD0(u8 taskID) { if (gTasks[taskID].data[0] == 0) { diff --git a/src/scene/cable_car.c b/src/scene/cable_car.c index 7faa8d844..d81263f87 100644 --- a/src/scene/cable_car.c +++ b/src/scene/cable_car.c @@ -6,6 +6,7 @@ #include "palette.h" #include "random.h" #include "main.h" +#include "menu.h" #include "script.h" #include "task.h" #include "sound.h" @@ -103,6 +104,31 @@ static void sub_81248AC(u8); // .rodata +#if DEBUG + +u8 debug_sub_8138D74(void); +u8 debug_sub_8138D8C(void); +u8 debug_sub_8138C14(void); +u8 debug_sub_8138C34(void); +u8 debug_sub_810CD9C(void); + +const u8 Str_842DBD0[] = _("CABLE CAR U"); +const u8 Str_842DBDC[] = _("CABLE CAR D"); +const u8 Str_842DBE8[] = _("ROULETTE1"); +const u8 Str_842DBF2[] = _("ROULETTE3"); +const u8 Str_842DBFC[] = _("View a MAIL"); + +const struct MenuAction gUnkDebug4Menu[] = +{ + {Str_842DBD0, debug_sub_8138D74}, + {Str_842DBDC, debug_sub_8138D8C}, + {Str_842DBE8, debug_sub_8138C14}, + {Str_842DBF2, debug_sub_8138C34}, + {Str_842DBFC, debug_sub_810CD9C}, +}; + +#endif + static const u8 gCableCarMtChimneyTilemap[] = INCBIN_U8("graphics/misc/cable_car_mt_chimney_map.bin.lz"); static const u8 gCableCarTreeTilemap[] = INCBIN_U8("graphics/misc/cable_car_tree_map.bin.lz"); @@ -183,6 +209,158 @@ static const struct SpriteTemplate gSpriteTemplate_8401D40[] = { // .text +#if DEBUG + +__attribute__((naked)) +u8 debug_sub_8138C14(void) +{ + asm("\n\ + push {lr}\n\ + ldr r0, ._1\n\ + mov r1, #0x1\n\ + strb r1, [r0]\n\ + ldr r0, ._1 + 4\n\ + bl ScriptContext1_SetupScript\n\ + bl CloseMenu\n\ + mov r0, #0x1\n\ + pop {r1}\n\ + bx r1\n\ +._2:\n\ + .align 2, 0\n\ +._1:\n\ + .word unk_203955C\n\ + .word MauvilleCity_GameCorner_EventScript_1C407E"); +} + +__attribute__((naked)) +u8 debug_sub_8138C34(void) +{ + asm("\n\ + push {lr}\n\ + ldr r0, ._3\n\ + mov r1, #0x1\n\ + strb r1, [r0]\n\ + ldr r0, ._3 + 4\n\ + bl ScriptContext1_SetupScript\n\ + bl CloseMenu\n\ + mov r0, #0x1\n\ + pop {r1}\n\ + bx r1\n\ +._4:\n\ + .align 2, 0\n\ +._3:\n\ + .word unk_203955C\n\ + .word MauvilleCity_GameCorner_EventScript_1C40AC"); +} + +__attribute__((naked)) +u8 debug_sub_8138C54(void) +{ + asm("\n\ + push {r4, lr}\n\ + ldr r4, ._10\n\ + ldrh r0, [r4, #0x2e]\n\ + cmp r0, #0x40\n\ + bne ._5 @cond_branch\n\ + mov r0, #0x1\n\ + neg r0, r0\n\ + bl Menu_MoveCursor\n\ +._5:\n\ + ldrh r0, [r4, #0x2e]\n\ + cmp r0, #0x80\n\ + bne ._6 @cond_branch\n\ + mov r0, #0x1\n\ + bl Menu_MoveCursor\n\ +._6:\n\ + ldrh r1, [r4, #0x2e]\n\ + cmp r1, #0x1\n\ + beq ._7 @cond_branch\n\ + ldr r0, ._10 + 4\n\ + cmp r1, r0\n\ + bne ._8 @cond_branch\n\ + ldr r1, ._10 + 8\n\ + mov r0, #0x1\n\ + strh r0, [r1]\n\ +._7:\n\ + ldr r4, ._10 + 12\n\ + bl Menu_GetCursorPos\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x15\n\ + add r4, r4, #0x4\n\ + add r0, r0, r4\n\ + ldr r0, [r0]\n\ + bl _call_via_r0\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + b ._13\n\ +._11:\n\ + .align 2, 0\n\ +._10:\n\ + .word gMain\n\ + .word 0x101\n\ + .word gSpecialVar_0x8004\n\ + .word gUnkDebug4Menu\n\ +._8:\n\ + cmp r1, #0x2\n\ + beq ._12 @cond_branch\n\ + mov r0, #0x0\n\ + b ._13\n\ +._12:\n\ + bl CloseMenu\n\ + mov r0, #0x1\n\ +._13:\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1"); +} + +__attribute__((naked)) +u8 debug_sub_8138CC4(void) +{ + asm("\n\ + push {lr}\n\ + add sp, sp, #0xfffffff8\n\ + ldr r1, ._14\n\ + mov r0, #0x0\n\ + strh r0, [r1]\n\ + bl Menu_EraseScreen\n\ + mov r0, #0x13\n\ + mov r1, #0x0\n\ + mov r2, #0x1d\n\ + mov r3, #0xc\n\ + bl Menu_DrawStdWindowFrame\n\ + ldr r3, ._14 + 4\n\ + mov r0, #0x14\n\ + mov r1, #0x1\n\ + mov r2, #0x5\n\ + bl Menu_PrintItems\n\ + mov r0, #0x0\n\ + str r0, [sp]\n\ + mov r0, #0x8\n\ + str r0, [sp, #0x4]\n\ + mov r0, #0x0\n\ + mov r1, #0x14\n\ + mov r2, #0x1\n\ + mov r3, #0x5\n\ + bl InitMenu\n\ + ldr r1, ._14 + 8\n\ + ldr r0, ._14 + 12\n\ + str r0, [r1]\n\ + mov r0, #0x0\n\ + add sp, sp, #0x8\n\ + pop {r1}\n\ + bx r1\n\ +._15:\n\ + .align 2, 0\n\ +._14:\n\ + .word gSpecialVar_0x8004\n\ + .word gUnkDebug4Menu\n\ + .word gMenuCallback\n\ + .word debug_sub_8138C54+1"); +} + +#endif + static void CableCarTask1(u8 taskId) { if (!gPaletteFade.active) @@ -199,6 +377,46 @@ void CableCar(void) BeginNormalPaletteFade(-1, 0, 0, 16, 0); } +#if DEBUG + +__attribute__((naked)) +u8 debug_sub_8138D74(void) +{ + asm("\n\ + push {lr}\n\ + ldr r1, ._21\n\ + mov r0, #0x0\n\ + strh r0, [r1]\n\ + bl CloseMenu\n\ + bl CableCar\n\ + pop {r0}\n\ + bx r0\n\ +._22:\n\ + .align 2, 0\n\ +._21:\n\ + .word gSpecialVar_0x8004"); +} + +__attribute__((naked)) +u8 debug_sub_8138D8C(void) +{ + asm("\n\ + push {lr}\n\ + ldr r1, ._23\n\ + mov r0, #0x1\n\ + strh r0, [r1]\n\ + bl CloseMenu\n\ + bl CableCar\n\ + pop {r0}\n\ + bx r0\n\ +._24:\n\ + .align 2, 0\n\ +._23:\n\ + .word gSpecialVar_0x8004"); +} + +#endif + static void CableCarMainCallback_Setup(void) { u8 i; diff --git a/src/scene/cute_sketch.c b/src/scene/cute_sketch.c index 5317bc334..848249528 100644 --- a/src/scene/cute_sketch.c +++ b/src/scene/cute_sketch.c @@ -29,6 +29,350 @@ void sub_80FD1C8(u16); u16 sub_80FD39C(u16*); u16 sub_80FD68C(u16*, u16*, u16*); +#if DEBUG + +__attribute__((naked)) +void debug_sub_8110CCC(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, #0x0\n\ + mov r1, #0x0\n\ + ldr r2, ._5\n\ + ldr r6, ._5 + 4\n\ +._7:\n\ + lsl r0, r1, #0x3\n\ + add r4, r0, r2\n\ + ldrh r0, [r6, #0x1c]\n\ + ldrh r3, [r4, #0x4]\n\ + cmp r0, r3\n\ + bne ._1 @cond_branch\n\ + ldrh r0, [r4, #0x6]\n\ + bl FlagGet\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._4 @cond_branch\n\ + ldrb r0, [r6, #0x1f]\n\ + ldr r1, [r4]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + bl StringLength\n\ + mov r1, #0xc\n\ + sub r1, r1, r0\n\ + lsl r1, r1, #0x10\n\ + lsr r5, r1, #0x10\n\ + cmp r1, #0\n\ + bge ._3 @cond_branch\n\ + mov r5, #0x0\n\ +._3:\n\ + mov r7, #0x1\n\ + mov r0, #0x10\n\ + mov r1, #0xe\n\ + mov r2, #0x1d\n\ + mov r3, #0x13\n\ + bl Menu_DrawStdWindowFrame\n\ + add r0, r6, #0\n\ + add r0, r0, #0x8\n\ + mov r1, #0x11\n\ + mov r2, #0xf\n\ + bl Menu_PrintText\n\ + ldrb r0, [r6, #0x1f]\n\ + ldr r1, [r4]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + add r1, r5, #0\n\ + add r1, r1, #0x11\n\ + lsl r1, r1, #0x18\n\ + lsr r1, r1, #0x18\n\ + mov r2, #0x11\n\ + bl Menu_PrintText\n\ + b ._4\n\ +._6:\n\ + .align 2, 0\n\ +._5:\n\ + .word gUnknown_083E79C0\n\ + .word +0x2000000\n\ +._1:\n\ + add r0, r1, #1\n\ + lsl r0, r0, #0x10\n\ + lsr r1, r0, #0x10\n\ + cmp r1, #0\n\ + beq ._7 @cond_branch\n\ +._4:\n\ + cmp r7, #0\n\ + bne ._8 @cond_branch\n\ + mov r0, #0x10\n\ + mov r1, #0x10\n\ + mov r2, #0x1d\n\ + mov r3, #0x13\n\ + bl Menu_DrawStdWindowFrame\n\ + ldr r0, ._9\n\ + mov r1, #0x11\n\ + mov r2, #0x11\n\ + bl Menu_PrintText\n\ + mov r0, #0x10\n\ + mov r1, #0xe\n\ + mov r2, #0x1d\n\ + mov r3, #0xf\n\ + bl Menu_EraseWindowRect\n\ +._8:\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._10:\n\ + .align 2, 0\n\ +._9:\n\ + .word +0x2000008"); +} + +__attribute__((naked)) +void debug_sub_8110D84(void) +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r0, ._13\n\ + ldrh r0, [r0, #0x4]\n\ + cmp r0, #0x7\n\ + bls ._11 @cond_branch\n\ + b ._65\n\ +._11:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._13 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._14:\n\ + .align 2, 0\n\ +._13:\n\ + .word +0x2000000\n\ + .word ._15\n\ +._15:\n\ + .word ._16\n\ + .word ._17\n\ + .word ._18\n\ + .word ._19\n\ + .word ._20\n\ + .word ._21\n\ + .word ._22\n\ + .word ._23\n\ +._16:\n\ + mov r0, #0x1\n\ + neg r0, r0\n\ + mov r1, #0x0\n\ + str r1, [sp]\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginNormalPaletteFade\n\ + ldr r1, ._25\n\ + ldrh r0, [r1, #0x4]\n\ + add r0, r0, #0x1\n\ + b ._62\n\ +._26:\n\ + .align 2, 0\n\ +._25:\n\ + .word +0x2000000\n\ +._17:\n\ + bl UpdatePaletteFade\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._27 @cond_branch\n\ + b ._65\n\ +._27:\n\ + ldr r1, ._30\n\ + ldrh r0, [r1, #0x4]\n\ + add r0, r0, #0x1\n\ + b ._62\n\ +._31:\n\ + .align 2, 0\n\ +._30:\n\ + .word +0x2000000\n\ +._18:\n\ + bl sub_80FAB60\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x3\n\ + beq ._32 @cond_branch\n\ + cmp r0, #0x3\n\ + bgt ._33 @cond_branch\n\ + b ._65\n\ +._33:\n\ + cmp r0, #0x4\n\ + beq ._35 @cond_branch\n\ + cmp r0, #0x5\n\ + beq ._36 @cond_branch\n\ + b ._65\n\ +._35:\n\ + ldr r4, ._41\n\ + ldrb r0, [r4, #0x1e]\n\ + cmp r0, #0\n\ + bne ._38 @cond_branch\n\ + b ._65\n\ +._38:\n\ + mov r0, #0x5\n\ + bl m4aSongNumStart\n\ + ldr r1, ._41 + 4\n\ + add r0, r4, r1\n\ + mov r1, #0x1\n\ + strb r1, [r0]\n\ + ldr r0, ._41 + 8\n\ + bl sub_80FC244\n\ + b ._65\n\ +._42:\n\ + .align 2, 0\n\ +._41:\n\ + .word +0x2000000\n\ + .word 0xa6e\n\ + .word sub_80FC69C+1\n\ +._36:\n\ + mov r0, #0x5\n\ + bl m4aSongNumStart\n\ + mov r0, #0x1\n\ + neg r0, r0\n\ + mov r1, #0x0\n\ + str r1, [sp]\n\ + mov r2, #0x0\n\ + mov r3, #0x10\n\ + bl BeginNormalPaletteFade\n\ + ldr r1, ._44\n\ + ldrh r0, [r1, #0x4]\n\ + add r0, r0, #0x1\n\ + b ._62\n\ +._45:\n\ + .align 2, 0\n\ +._44:\n\ + .word +0x2000000\n\ +._19:\n\ + bl UpdatePaletteFade\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._65 @cond_branch\n\ + ldr r0, ._48\n\ + bl SetMainCallback2\n\ + b ._65\n\ +._49:\n\ + .align 2, 0\n\ +._48:\n\ + .word sub_805469C+1\n\ +._20:\n\ + bl sub_80FAB60\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._50 @cond_branch\n\ +._32:\n\ + bl debug_sub_8110CCC\n\ + b ._65\n\ +._50:\n\ + ldr r0, ._54\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._65 @cond_branch\n\ + bl sub_80FBCA0\n\ + bl sub_80FAEC4\n\ + ldr r1, ._54 + 4\n\ + ldrh r0, [r1, #0x4]\n\ + add r0, r0, #0x1\n\ + b ._62\n\ +._55:\n\ + .align 2, 0\n\ +._54:\n\ + .word gMain\n\ + .word +0x2000000\n\ +._21:\n\ + bl sub_80FAFC0\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._65 @cond_branch\n\ + mov r0, #0x0\n\ + mov r1, #0x0\n\ + bl CreateRegionMapCursor\n\ + ldr r1, ._58\n\ + ldrh r0, [r1, #0x4]\n\ + add r0, r0, #0x1\n\ + b ._62\n\ +._59:\n\ + .align 2, 0\n\ +._58:\n\ + .word +0x2000000\n\ +._22:\n\ + bl sub_80FAB60\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._60 @cond_branch\n\ + bl debug_sub_8110CCC\n\ +._60:\n\ + ldr r0, ._63\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._65 @cond_branch\n\ + bl sub_80FBCA0\n\ + bl sub_80FAEC4\n\ + ldr r1, ._63 + 4\n\ + ldrh r0, [r1, #0x4]\n\ + add r0, r0, #0x1\n\ + b ._62\n\ +._64:\n\ + .align 2, 0\n\ +._63:\n\ + .word gMain\n\ + .word +0x2000000\n\ +._23:\n\ + bl sub_80FAFC0\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._65 @cond_branch\n\ + mov r0, #0x0\n\ + mov r1, #0x0\n\ + bl CreateRegionMapCursor\n\ + ldr r1, ._66\n\ + mov r0, #0x3\n\ +._62:\n\ + strh r0, [r1, #0x4]\n\ +._65:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._67:\n\ + .align 2, 0\n\ +._66:\n\ + .word +0x2000000"); +} + +__attribute__((naked)) +void debug_sub_8110F28(void) +{ + asm("\ + push {lr}\n\ + bl CB2_InitFlyRegionMap\n\ + ldr r0, ._69\n\ + ldr r1, [r0, #0x4]\n\ + ldr r0, ._69 + 4\n\ + cmp r1, r0\n\ + bne ._68 @cond_branch\n\ + bl sub_80FBF94\n\ + ldr r0, ._69 + 8\n\ + bl sub_80FC244\n\ + bl debug_sub_8110CCC\n\ +._68:\n\ + pop {r0}\n\ + bx r0\n\ +._70:\n\ + .align 2, 0\n\ +._69:\n\ + .word gMain\n\ + .word CB2_FlyRegionMap+1\n\ + .word debug_sub_8110D84+1"); +} + +#endif + void sub_80FC7A0(struct Unk03005E20* info) { gUnknown_03005DEC = info->var_4; diff --git a/src/scene/new_game.c b/src/scene/new_game.c index 0279f99c6..e64dc91e3 100644 --- a/src/scene/new_game.c +++ b/src/scene/new_game.c @@ -1,4 +1,7 @@ #include "global.h" +#include "constants/maps.h" +#include "constants/species.h" +#include "clock.h" #include "new_game.h" #include "battle_records.h" #include "berry.h" @@ -20,6 +23,7 @@ #include "pokemon_storage_system.h" #include "random.h" #include "roamer.h" +#include "script_pokemon_80C4.h" #include "overworld.h" #include "rtc.h" #include "script.h" @@ -42,6 +46,18 @@ static const struct ContestWinner sEmptyMuseumPortrait = .trainerName = {EOS}, }; +#if DEBUG +const s8 gUnknown_Debug_0823C788[][2] = +{ + { MAP_GROUP(INSIDE_OF_TRUCK), MAP_NUM(INSIDE_OF_TRUCK) }, + { MAP_GROUP(OLDALE_TOWN_POKEMON_CENTER_2F), MAP_NUM(OLDALE_TOWN_POKEMON_CENTER_2F) }, + { MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN) }, + { MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F) } +}; + +const u8 gUnknown_Debug_0823C790[] = _("KRÖTE"); +#endif + void write_word_to_mem(u32 var, u8 *dataPtr) { dataPtr[0] = var; @@ -94,6 +110,30 @@ void ZeroBattleTowerData(void) CpuFill32(0, &gSaveBlock2.battleTower, sizeof(gSaveBlock2.battleTower)); } +#if DEBUG +void debug_sub_8052E04() +{ + u8 i; + + for (i = 0; i < 4; i++) + { + if (gUnknown_Debug_0823C788[i][0] == gSaveBlock1.location.mapGroup && + gUnknown_Debug_0823C788[i][1] == gSaveBlock1.location.mapNum) + { + break; + } + } + + i++; + if (i >= 4) + { + i = 0; + } + + Overworld_SetWarpDestination(gUnknown_Debug_0823C788[i][0], gUnknown_Debug_0823C788[i][1], -1, -1, -1); +} +#endif + void WarpToTruck(void) { Overworld_SetWarpDestination(25, 40, -1, -1, -1); // inside of truck @@ -109,6 +149,9 @@ void ClearSav2(void) void sub_8052E4C(void) { gDifferentSaveFile = 0; +#if DEBUG + gUnknown_020297ED = 0; +#endif sub_808C0A0(); ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); @@ -161,3 +204,33 @@ void NewGameInitData(void) WarpToTruck(); ScriptContext2_RunNewScript(gUnknown_0819FA81); } + +#if DEBUG +extern void debug_sub_80A3904(void); +extern void debug_sub_80A3714(void); +extern void debug_sub_8120F98(void); +extern void unref_sub_8070F90(void); + +void debug_sub_8057508(bool32 arg0) +{ + gUnknown_020297ED = 1; + NewGameInitData(); + gSaveBlock1.money = 999999; + FlagSet(FLAG_SYS_POKEMON_GET); + FlagSet(FLAG_SYS_POKEDEX_GET); + FlagSet(FLAG_SYS_POKENAV_GET); + FlagSet(FLAG_SYS_B_DASH); + ScriptGiveMon(SPECIES_TREECKO, 99, 0, 0, 0, 0); + + if (arg0 == TRUE) + SetMonData(&gPlayerParty[0], MON_DATA_NICKNAME, gUnknown_Debug_0823C790); + + debug_sub_80A3904(); + debug_sub_80A3714(); + debug_sub_8120F98(); + FlagSet(FLAG_SYS_HIPSTER_MEET); + sub_80EB8EC(); + unref_sub_8070F90(); + InitTimeBasedEvents(); +} +#endif diff --git a/src/scene/title_screen.c b/src/scene/title_screen.c index 202b752a6..a1c8e081d 100644 --- a/src/scene/title_screen.c +++ b/src/scene/title_screen.c @@ -8,6 +8,7 @@ #include "m4a.h" #include "main.h" #include "main_menu.h" +#include "overworld.h" #include "palette.h" #include "reset_rtc_screen.h" #include "sound.h" @@ -353,6 +354,9 @@ static void Task_TitleScreenPhase1(u8); static void Task_TitleScreenPhase2(u8); static void Task_TitleScreenPhase3(u8); static void CB2_GoToMainMenu(void); +#if DEBUG +static void CB2_GoToTestMenu(void); +#endif static void CB2_GoToClearSaveDataScreen(void); static void CB2_GoToResetRtcScreen(void); static void CB2_GoToCopyrightScreen(void); @@ -829,6 +833,13 @@ static void Task_TitleScreenPhase3(u8 taskId) BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); SetMainCallback2(CB2_GoToResetRtcScreen); } +#if DEBUG + else if (gMain.heldKeys == SELECT_BUTTON) + { + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + SetMainCallback2(CB2_GoToTestMenu); + } +#endif else { REG_BG2Y = 0; @@ -855,6 +866,14 @@ static void CB2_GoToMainMenu(void) SetMainCallback2(CB2_InitMainMenu); } +#if DEBUG +static void CB2_GoToTestMenu(void) +{ + if (!UpdatePaletteFade()) + SetMainCallback2(CB2_InitTestMenu); +} +#endif + static void CB2_GoToCopyrightScreen(void) { if (!UpdatePaletteFade()) diff --git a/src/strings.c b/src/strings.c index 06bbadb8f..0f599db72 100644 --- a/src/strings.c +++ b/src/strings.c @@ -173,7 +173,8 @@ const u8 gOtherText_None[] = _("NONE"); const u8 gOtherText_ThreeQuestions2[] = _("???"); -const u8 gOtherText_FiveQuestionsAndSlash[] = _("?????$/"); +const u8 gOtherText_FiveQuestions[] = _("?????"); +const u8 gOtherText_Slash[] = _("/"); const u8 gOtherText_OneDash[] = _("-"); const u8 gOtherText_TwoDashes[] = _("--"); @@ -267,7 +268,9 @@ const u8 gContestStatsText_Spicy[] = _("SPICY"); const u8 gContestStatsText_Dry[] = _("DRY"); const u8 gContestStatsText_Sweet[] = _("SWEET"); const u8 gContestStatsText_Bitter[] = _("BITTER"); -const u8 gContestStatsText_Sour[] = _("SOUR$TASTY$FEEL"); // tasty is unused, feel might not be +const u8 gContestStatsText_Sour[] = _("SOUR"); +const u8 gContestStatsText_Tasty[] = _("TASTY"); +const u8 gContestStatsText_Feel[] = _("FEEL"); const u8 gContestStatsText_StowCase[] = _("Stow CASE."); const u8 gContestStatsText_ThrowAwayPrompt[] = _("Throw away this\n{STR_VAR_1}?"); @@ -1096,7 +1099,8 @@ const u8 gOtherText_None[] = _("KEINES"); const u8 gOtherText_ThreeQuestions2[] = _("???"); -const u8 gOtherText_FiveQuestionsAndSlash[] = _("?????$/"); +const u8 gOtherText_FiveQuestions[] = _("?????"); +const u8 gOtherText_Slash[] = _("/"); const u8 gOtherText_OneDash[] = _("-"); const u8 gOtherText_TwoDashes[] = _("--"); @@ -1190,7 +1194,9 @@ const u8 gContestStatsText_Spicy[] = _("SCHARF"); const u8 gContestStatsText_Dry[] = _("TROCKEN"); const u8 gContestStatsText_Sweet[] = _("SÜSS"); const u8 gContestStatsText_Bitter[] = _("BITTER"); -const u8 gContestStatsText_Sour[] = _("SAUER$LECKER$WÜRZE"); +const u8 gContestStatsText_Sour[] = _("SAUER"); +const u8 gContestStatsText_Tasty[] = _("LECKER"); +const u8 gContestStatsText_Feel[] = _("WÜRZE"); const u8 gContestStatsText_StowCase[] = _("BOX verstauen."); const u8 gContestStatsText_ThrowAwayPrompt[] = _("{STR_VAR_1}\nwegwerfen?"); |