diff options
-rw-r--r-- | data/roulette.s | 7 | ||||
-rw-r--r-- | src/battle/battle_controller_safari.c | 231 | ||||
-rw-r--r-- | src/engine/save_failed_screen.c | 192 | ||||
-rw-r--r-- | src/field/party_menu.c | 64 |
4 files changed, 490 insertions, 4 deletions
diff --git a/data/roulette.s b/data/roulette.s index d19508fc3..b9d096ac4 100644 --- a/data/roulette.s +++ b/data/roulette.s @@ -133,6 +133,13 @@ gUnknown_083F8EE8:: @ 83F8EE8 gUnknown_083F8EF4:: @ 83F8EF4 .byte 0, 3, 4, 6, 12 +.if DEBUG +@ Could also be after English-only graphics +gUnknown_Debug_0842510D:: @ 0x842510D + .string "Set COIN and Press START\n" + .string "Aーp1 Bーm1 R:Lー×10$" +.endif + .ifdef ENGLISH .align 2 RouletteSpritePalette_01: diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 0d193d68f..4af8adbbb 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -207,6 +207,236 @@ void SafariBufferRunCommand(void) } } +#if DEBUG +__attribute__((naked)) +void bx_battle_menu_t6_2(void) +{ + asm("\ + push {r4, r5, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r0, ._94\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r2, #0x1\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._89 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + bl DestroyMenuCursor\n\ + ldr r1, ._94 + 4\n\ + ldr r0, ._94 + 8\n\ + ldrb r0, [r0]\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + beq ._90 @cond_branch\n\ + cmp r0, #0x1\n\ + bgt ._91 @cond_branch\n\ + cmp r0, #0\n\ + beq ._92 @cond_branch\n\ + b ._101\n\ +._95:\n\ + .align 2, 0\n\ +._94:\n\ + .word gMain\n\ + .word gActionSelectionCursor\n\ + .word gActiveBank\n\ +._91:\n\ + cmp r0, #0x2\n\ + beq ._96 @cond_branch\n\ + cmp r0, #0x3\n\ + beq ._97 @cond_branch\n\ + b ._101\n\ +._92:\n\ + mov r0, #0x1\n\ + mov r1, #0x5\n\ + b ._100\n\ +._90:\n\ + mov r0, #0x1\n\ + mov r1, #0x6\n\ + b ._100\n\ +._96:\n\ + mov r0, #0x1\n\ + mov r1, #0x7\n\ +._100:\n\ + mov r2, #0x0\n\ + bl Emitcmd33\n\ + b ._101\n\ +._97:\n\ + mov r0, #0x1\n\ + mov r1, #0x8\n\ + mov r2, #0x0\n\ + bl Emitcmd33\n\ +._101:\n\ + bl SafariBufferExecCompleted\n\ + b ._129\n\ +._89:\n\ + mov r3, #0x20\n\ + add r0, r3, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._103 @cond_branch\n\ + ldr r5, ._107\n\ + ldr r4, ._107 + 4\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r1, [r0]\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._104 @cond_branch\n\ + b ._129\n\ +._104:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r0, [r0]\n\ + bl nullsub_8\n\ + ldrb r1, [r4]\n\ + add r1, r1, r5\n\ + ldrb r0, [r1]\n\ + mov r2, #0x1\n\ + b ._111\n\ +._108:\n\ + .align 2, 0\n\ +._107:\n\ + .word gActionSelectionCursor\n\ + .word gActiveBank\n\ +._103:\n\ + mov r0, #0x10\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._109 @cond_branch\n\ + ldr r5, ._112\n\ + ldr r4, ._112 + 4\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r1, [r0]\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._129 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r0, [r0]\n\ + bl nullsub_8\n\ + ldrb r1, [r4]\n\ + add r1, r1, r5\n\ + ldrb r0, [r1]\n\ + mov r2, #0x1\n\ + b ._111\n\ +._113:\n\ + .align 2, 0\n\ +._112:\n\ + .word gActionSelectionCursor\n\ + .word gActiveBank\n\ +._109:\n\ + mov r0, #0x40\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._114 @cond_branch\n\ + ldr r5, ._117\n\ + ldr r4, ._117 + 4\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r1, [r0]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._129 @cond_branch\n\ + b ._116\n\ +._118:\n\ + .align 2, 0\n\ +._117:\n\ + .word gActionSelectionCursor\n\ + .word gActiveBank\n\ +._114:\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._119 @cond_branch\n\ + ldr r5, ._122\n\ + ldr r4, ._122 + 4\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r1, [r0]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._129 @cond_branch\n\ +._116:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r0, [r0]\n\ + bl nullsub_8\n\ + ldrb r1, [r4]\n\ + add r1, r1, r5\n\ + ldrb r0, [r1]\n\ + mov r2, #0x2\n\ +._111:\n\ + eor r0, r0, r2\n\ + strb r0, [r1]\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r0, [r0]\n\ + mov r1, #0x0\n\ + bl sub_802E3E4\n\ + b ._129\n\ +._123:\n\ + .align 2, 0\n\ +._122:\n\ + .word gActionSelectionCursor\n\ + .word gActiveBank\n\ +._119:\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._124 @cond_branch\n\ + ldr r0, ._127\n\ + ldrb r2, [r0]\n\ + lsl r0, r2, #0x1\n\ + add r0, r0, r2\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._127 + 4\n\ + add r0, r0, r1\n\ + ldrb r1, [r0]\n\ + add r0, r3, #0\n\ + and r0, r0, r1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._129 @cond_branch\n\ + str r0, [sp]\n\ + add r0, r2, #0\n\ + add r1, r2, #0\n\ + mov r3, #0x4\n\ + bl move_anim_start_t3\n\ + b ._129\n\ +._128:\n\ + .align 2, 0\n\ +._127:\n\ + .word gActiveBank\n\ + .word +0x2017810\n\ +._124:\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._129 @cond_branch\n\ + bl sub_804454C\n\ +._129:\n\ + add sp, sp, #0x4\n\ + pop {r4, r5}\n\ + pop {r0}\n\ + bx r0"); +} +#else void bx_battle_menu_t6_2(void) { if (gMain.newKeys & A_BUTTON) @@ -273,6 +503,7 @@ void bx_battle_menu_t6_2(void) } } } +#endif void sub_812B65C(void) { diff --git a/src/engine/save_failed_screen.c b/src/engine/save_failed_screen.c index 74a1e9612..421cd0779 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 gMysteryEventScriptCmdTableEnd+0x2d64\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/field/party_menu.c b/src/field/party_menu.c index e26b801bc..b76710a2d 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -107,6 +107,69 @@ EWRAM_DATA u8 gUnknown_0202E8F6 = 0; EWRAM_DATA u16 gUnknown_0202E8F8 = 0; EWRAM_DATA u8 gPartyMenuType = 0; +#if 0 +const u16 TMHMMoves[] = +{ + 0x5016, + 0x030D, + 0x3DFF, + MOVE_CALM_MIND, + MOVE_ROAR, + MOVE_TOXIC, + MOVE_HAIL, + MOVE_BULK_UP, + MOVE_BULLET_SEED, + MOVE_HIDDEN_POWER, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_ICE_BEAM, + MOVE_BLIZZARD, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_GIGA_DRAIN, + MOVE_SAFEGUARD, + MOVE_FRUSTRATION, + MOVE_SOLAR_BEAM, + MOVE_IRON_TAIL, + MOVE_THUNDERBOLT, + MOVE_THUNDER, + MOVE_EARTHQUAKE, + MOVE_RETURN, + MOVE_DIG, + MOVE_PSYCHIC, + MOVE_SHADOW_BALL, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_REFLECT, + MOVE_SHOCK_WAVE, + MOVE_FLAMETHROWER, + MOVE_SLUDGE_BOMB, + MOVE_SANDSTORM, + MOVE_FIRE_BLAST, + MOVE_ROCK_TOMB, + MOVE_AERIAL_ACE, + MOVE_TORMENT, + MOVE_FACADE, + MOVE_SECRET_POWER, + MOVE_REST, + MOVE_ATTRACT, + MOVE_THIEF, + MOVE_STEEL_WING, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_OVERHEAT, + MOVE_CUT, + MOVE_FLY, + MOVE_SURF, + MOVE_STRENGTH, + MOVE_FLASH, + MOVE_ROCK_SMASH, + MOVE_WATERFALL, + MOVE_DIVE, +}; +#else const u16 TMHMMoves[] = { MOVE_FOCUS_PUNCH, @@ -168,6 +231,7 @@ const u16 TMHMMoves[] = MOVE_WATERFALL, MOVE_DIVE, }; +#endif //FIXME //const u8 *unrefTileBuffer = gTileBuffer; |