diff --git a/engine/pinball_game/ball_init/ball_init_red_field.asm b/engine/pinball_game/ball_init/ball_init_red_field.asm index 3e4e4c5..d146cab 100644 --- a/engine/pinball_game/ball_init/ball_init_red_field.asm +++ b/engine/pinball_game/ball_init/ball_init_red_field.asm @@ -13,12 +13,12 @@ InitBallRedField: ; 0x3007d xor a ld [wEnableBallGravityAndTilt], a ld [wd580], a - ld a, [wd7ad] + ld a, [wRedStageStructureBackup] bit 7, a jr z, .asm_300ae ld a, [wStageCollisionState] res 0, a - ld [wd7ad], a + ld [wRedStageStructureBackup], a .asm_300ae ld a, [wStageCollisionState] and $1 diff --git a/engine/pinball_game/ball_loss/ball_loss_red_field.asm b/engine/pinball_game/ball_loss/ball_loss_red_field.asm index 752f582..ff91a53 100644 --- a/engine/pinball_game/ball_loss/ball_loss_red_field.asm +++ b/engine/pinball_game/ball_loss/ball_loss_red_field.asm @@ -91,7 +91,7 @@ ConcludeSpecialMode_RedField: ; 0xddfd ld [wFramesUntilSlotCaveOpens], a callba ConcludeMapMoveMode .setCollisionState - ld a, [wd7ad] + ld a, [wRedStageStructureBackup] ld c, a ld a, [wStageCollisionState] and $1 diff --git a/engine/pinball_game/evolution_mode.asm b/engine/pinball_game/evolution_mode.asm index 011425b..dcb7de6 100644 --- a/engine/pinball_game/evolution_mode.asm +++ b/engine/pinball_game/evolution_mode.asm @@ -633,7 +633,7 @@ StartEvolutionMode_RedField: ; 0x10ebb ld [wLeftAlleyCount], a call CloseSlotCave_ ld a, $2 - ld [wd7ad], a + ld [wRedStageStructureBackup], a ld de, MUSIC_CATCH_EM_BLUE ; Either MUSIC_CATCH_EM_BLUE or MUSIC_CATCH_EM_RED. They have the same id in their respective audio Banks. call PlaySong call SetPokemonSeenFlag @@ -769,7 +769,7 @@ StartEvolutionMode_BlueField: ; 0x11061 ld [wLeftAlleyCount], a callba CloseSlotCave ld a, $2 - ld [wd7ad], a + ld [wRedStageStructureBackup], a ld de, MUSIC_CATCH_EM_BLUE ; Either MUSIC_CATCH_EM_BLUE or MUSIC_CATCH_EM_RED. They have the same id in their respective audio Banks. call PlaySong call SetPokemonSeenFlag diff --git a/engine/pinball_game/map_move.asm b/engine/pinball_game/map_move.asm index d17095c..3735a88 100644 --- a/engine/pinball_game/map_move.asm +++ b/engine/pinball_game/map_move.asm @@ -119,7 +119,7 @@ Func_311b4: ; 0x311b4 ld [wStageCollisionMap + $103], a callba CloseSlotCave_ ld a, $4 - ld [wd7ad], a + ld [wRedStageStructureBackup], a ld de, MUSIC_HURRY_UP_BLUE ; Either MUSIC_HURRY_UP_BLUE or MUSIC_HURRY_UP_RED. They have the same id in their respective audio Banks. call PlaySong ld a, [wCurrentStage] diff --git a/engine/pinball_game/object_collision/red_stage_resolve_collision.asm b/engine/pinball_game/object_collision/red_stage_resolve_collision.asm index d76729b..0fa1ca5 100644 --- a/engine/pinball_game/object_collision/red_stage_resolve_collision.asm +++ b/engine/pinball_game/object_collision/red_stage_resolve_collision.asm @@ -1455,7 +1455,7 @@ HandleThirdRightAlleyTrigger_RedField: ; 0x15990 UpdateFieldStructures_RedField: ; 0x159c9 ; The Red field's top half has some dynamic strucutres, such as Ditto, the lightning bolt guard rail, and the roof over the 3 Voltorbs. - ld a, [wd7ad] + ld a, [wRedStageStructureBackup] bit 7, a ret nz ld c, a @@ -1464,7 +1464,8 @@ UpdateFieldStructures_RedField: ; 0x159c9 or c ld [wStageCollisionState], a ld a, $ff - ld [wd7ad], a + ; setting 7th bit of [wStageCollisionStateBitsToSet] to 1 will cause this method to be skipped, or in this case 0xff, but only the 7th bit matters + ld [wRedStageStructureBackup], a callba LoadStageCollisionAttributes call LoadFieldStructureGraphics_RedField ld a, $1 @@ -2097,7 +2098,7 @@ DoSlotLogic_RedField: ; 0x16352 cp EVOLUTION_MODE_SLOT_REWARD ret nz callba StartEvolutionMode - ld a, [wd7ad] + ld a, [wRedStageStructureBackup] ld c, a ld a, [wStageCollisionState] and $1 diff --git a/engine/pinball_game/stage_init/init_red_field.asm b/engine/pinball_game/stage_init/init_red_field.asm index 4eceab7..84d0a68 100644 --- a/engine/pinball_game/stage_init/init_red_field.asm +++ b/engine/pinball_game/stage_init/init_red_field.asm @@ -34,7 +34,7 @@ InitRedField: ; 0x30000 ld [wInitialNextBonusStage], a ; BONUS_STAGE_ORDER_DIGLETT ld a, $4 ld [wStageCollisionState], a - ld [wd7ad], a + ld [wRedStageStructureBackup], a ld a, $80 ld [wIndicatorStates], a ld [wIndicatorStates + 3], a diff --git a/wram.asm b/wram.asm index 56b6a7d..a0265f8 100644 --- a/wram.asm +++ b/wram.asm @@ -1733,7 +1733,9 @@ wDisableHorizontalScrollForBallStart:: ; 0xd7ac ; 0 = Enable the scrolling ds $1 -wd7ad:: ; 0xd7ad +wRedStageStructureBackup:: ; 0xd7ad +; The ditto state on red stage is heavily reliant on this value being initialized to 0b100, +; A value of 0xff will cause this var to be ignored and treated as no changes. ds $1 wLeftFlipperState:: ; 0xd7ae