diff options
author | Marcus Huderle <huderlem@gmail.com> | 2017-07-14 10:29:47 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2017-07-14 10:29:47 -0700 |
commit | 8887222e60f6af052e1da709851254cc63e6625f (patch) | |
tree | c6aa8a196b66bbabbd33e392869d6644ba65a73a | |
parent | 37eb934ee355fecf853cc1f085299529ab03b55b (diff) |
Label Bonus Stage transition stuff
26 files changed, 70 insertions, 53 deletions
diff --git a/constants.asm b/constants.asm index f91532d..b4349bc 100644 --- a/constants.asm +++ b/constants.asm @@ -3,6 +3,7 @@ INCLUDE "vram.asm" INCLUDE "gbhw.asm" INCLUDE "constants/ball_types.asm" +INCLUDE "constants/bonus_stage_order_constants.asm" INCLUDE "constants/diglett_stage_constants.asm" INCLUDE "constants/evolution_line_constants.asm" INCLUDE "constants/evolution_type_constants.asm" diff --git a/constants/bonus_stage_order_constants.asm b/constants/bonus_stage_order_constants.asm new file mode 100755 index 0000000..dd226a5 --- /dev/null +++ b/constants/bonus_stage_order_constants.asm @@ -0,0 +1,6 @@ +; See wNextBonusStage
+BONUS_STAGE_ORDER_GENGAR EQU 0
+BONUS_STAGE_ORDER_MEWTWO EQU 1
+BONUS_STAGE_ORDER_MEOWTH EQU 2
+BONUS_STAGE_ORDER_DIGLETT EQU 3
+BONUS_STAGE_ORDER_SEEL EQU 4
diff --git a/constants/stage_constants.asm b/constants/stage_constants.asm index 600abf9..7f4cd73 100644 --- a/constants/stage_constants.asm +++ b/constants/stage_constants.asm @@ -4,6 +4,8 @@ STAGE_RED_FIELD_BOTTOM EQU $1 ; XXX EQU $3 STAGE_BLUE_FIELD_TOP EQU $4 STAGE_BLUE_FIELD_BOTTOM EQU $5 + +FIRST_BONUS_STAGE EQU $6 ; STAGE_GENGAR_BONUS EQU $6 ; buggy STAGE_GENGAR_BONUS EQU $7 ; STAGE_MEWTWO_BONUS EQU $8 ; buggy diff --git a/engine/pinball_game.asm b/engine/pinball_game.asm index 66ff1de..466a01f 100644 --- a/engine/pinball_game.asm +++ b/engine/pinball_game.asm @@ -224,12 +224,12 @@ GameScreenFunction_EndBall: ; 0xdab2 ld a, [wGameOver]
and a
jp nz, TransitionToHighScoresScreen
- ld a, [wd495]
+ ld a, [wGoingToBonusStage]
and a
- jr nz, .asm_dae6
- ld a, [wd496]
+ jr nz, .goingToBonusStage
+ ld a, [wReturningFromBonusStage]
and a
- jr nz, .asm_db28
+ jr nz, .returningFromBonusStage
call FadeOut
ld a, [wUpdateAudioEngineUsingTimerInterrupt]
and a
@@ -243,7 +243,7 @@ GameScreenFunction_EndBall: ; 0xdab2 ld [wScreenState], a
ret
-.asm_dae6
+.goingToBonusStage
ld de, $0000
call PlaySong
ld bc, $0004
@@ -264,13 +264,13 @@ GameScreenFunction_EndBall: ; 0xdab2 ld a, [wNextStage]
ld [wCurrentStage], a
xor a
- ld [wd496], a
- ld [wd495], a
+ ld [wReturningFromBonusStage], a
+ ld [wGoingToBonusStage], a
ld a, $0
ld [wScreenState], a
ret
-.asm_db28
+.returningFromBonusStage
ld de, $0000
call PlaySong
ld bc, $0004
diff --git a/engine/pinball_game/ball_init/ball_init_blue_field.asm b/engine/pinball_game/ball_init/ball_init_blue_field.asm index c2142e2..9728be0 100644 --- a/engine/pinball_game/ball_init/ball_init_blue_field.asm +++ b/engine/pinball_game/ball_init/ball_init_blue_field.asm @@ -1,5 +1,5 @@ InitBallBlueField: ; 0x1c08d
- ld a, [wd496]
+ ld a, [wReturningFromBonusStage]
and a
jp nz, StartBallAfterBonusStageBlueField
ld a, $0
@@ -78,7 +78,7 @@ StartBallAfterBonusStageBlueField: ; 0x1c129 ld [wBallYVelocity + 1], a
ld [wBallXVelocity], a
ld [wBallXVelocity + 1], a
- ld [wd496], a
+ ld [wReturningFromBonusStage], a
ld [wSCX], a
ld [wd7be], a
ld a, [wBallTypeBackup]
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 34d94b5..c37e21c 100644 --- a/engine/pinball_game/ball_init/ball_init_red_field.asm +++ b/engine/pinball_game/ball_init/ball_init_red_field.asm @@ -1,5 +1,5 @@ InitBallRedField: ; 0x3007d
- ld a, [wd496]
+ ld a, [wReturningFromBonusStage]
and a
jp nz, StartBallAfterBonusStageRedField
ld a, $0
@@ -83,7 +83,7 @@ StartBallAfterBonusStageRedField: ; 0x30128 ld [wBallYVelocity + 1], a
ld [wBallXVelocity], a
ld [wBallXVelocity + 1], a
- ld [wd496], a
+ ld [wReturningFromBonusStage], a
ld [wSCX], a
ld [wd7be], a
ld a, [wBallTypeBackup]
diff --git a/engine/pinball_game/ball_loss/ball_loss_diglett_bonus.asm b/engine/pinball_game/ball_loss/ball_loss_diglett_bonus.asm index 6827c19..b4e341f 100644 --- a/engine/pinball_game/ball_loss/ball_loss_diglett_bonus.asm +++ b/engine/pinball_game/ball_loss/ball_loss_diglett_bonus.asm @@ -6,9 +6,9 @@ HandleBallLossDiglettBonus: ; 0xe056 lb de, $00, $0b
call PlaySoundEffect
xor a
- ld [wd495], a
+ ld [wGoingToBonusStage], a
ld a, $1
- ld [wd496], a
+ ld [wReturningFromBonusStage], a
ld a, $2
ld [wd4c8], a
xor a
diff --git a/engine/pinball_game/ball_loss/ball_loss_gengar_bonus.asm b/engine/pinball_game/ball_loss/ball_loss_gengar_bonus.asm index 4c37222..59bc3d3 100644 --- a/engine/pinball_game/ball_loss/ball_loss_gengar_bonus.asm +++ b/engine/pinball_game/ball_loss/ball_loss_gengar_bonus.asm @@ -32,9 +32,9 @@ HandleBallLossGengarBonus: ; 0xdf1a .asm_df57
xor a
- ld [wd495], a
+ ld [wGoingToBonusStage], a
ld a, $1
- ld [wd496], a
+ ld [wReturningFromBonusStage], a
ld a, $2
ld [wd4c8], a
xor a
diff --git a/engine/pinball_game/ball_loss/ball_loss_meowth_bonus.asm b/engine/pinball_game/ball_loss/ball_loss_meowth_bonus.asm index 1bc7035..05d731b 100644 --- a/engine/pinball_game/ball_loss/ball_loss_meowth_bonus.asm +++ b/engine/pinball_game/ball_loss/ball_loss_meowth_bonus.asm @@ -38,9 +38,9 @@ HandleBallLossMeowthBonus: ; 0xdfe2 ld [wTimeRanOut], a
ld [wTimerActive], a
xor a
- ld [wd495], a
+ ld [wGoingToBonusStage], a
ld a, $1
- ld [wd496], a
+ ld [wReturningFromBonusStage], a
ld a, $2
ld [wd4c8], a
xor a
diff --git a/engine/pinball_game/ball_loss/ball_loss_mewtwo_bonus.asm b/engine/pinball_game/ball_loss/ball_loss_mewtwo_bonus.asm index 07a51f0..949f8a8 100644 --- a/engine/pinball_game/ball_loss/ball_loss_mewtwo_bonus.asm +++ b/engine/pinball_game/ball_loss/ball_loss_mewtwo_bonus.asm @@ -32,9 +32,9 @@ HandleBallLossMewtwoBonus: ; 0xdf7e .asm_dfbb
xor a
- ld [wd495], a
+ ld [wGoingToBonusStage], a
ld a, $1
- ld [wd496], a
+ ld [wReturningFromBonusStage], a
ld a, $2
ld [wd4c8], a
xor a
diff --git a/engine/pinball_game/ball_loss/ball_loss_seel_bonus.asm b/engine/pinball_game/ball_loss/ball_loss_seel_bonus.asm index 59d4bd7..ee2e41a 100644 --- a/engine/pinball_game/ball_loss/ball_loss_seel_bonus.asm +++ b/engine/pinball_game/ball_loss/ball_loss_seel_bonus.asm @@ -37,9 +37,9 @@ HandleBallLossSeelBonus: ; 0xe08b xor a
ld [wTimerActive], a
ld [wTimerActive], a ; duplicate instruction
- ld [wd495], a
+ ld [wGoingToBonusStage], a
ld a, $1
- ld [wd496], a
+ ld [wReturningFromBonusStage], a
ld a, $2
ld [wd4c8], a
xor a
diff --git a/engine/pinball_game/draw_sprites/draw_red_field_sprites.asm b/engine/pinball_game/draw_sprites/draw_red_field_sprites.asm index cc57f8d..17f1d2c 100644 --- a/engine/pinball_game/draw_sprites/draw_red_field_sprites.asm +++ b/engine/pinball_game/draw_sprites/draw_red_field_sprites.asm @@ -102,7 +102,7 @@ DrawTimerDigit: ; 0x17627 Func_1762f: ; 0x1762f
lb de, $60, $0c
ld a, [wCurrentStage]
- cp STAGE_BLUE_FIELD_BOTTOM + 1
+ cp FIRST_BONUS_STAGE
ret nc
lb de, $00, $00
bit 0, a
diff --git a/engine/pinball_game/load_stage_data/load_blue_field.asm b/engine/pinball_game/load_stage_data/load_blue_field.asm index de5c455..f9eb138 100644 --- a/engine/pinball_game/load_stage_data/load_blue_field.asm +++ b/engine/pinball_game/load_stage_data/load_blue_field.asm @@ -435,7 +435,7 @@ Func_1c4b6: ; 0x1c4b6 ld a, [wOpenedSlotByGetting3Pokeballs]
and a
jr z, .asm_1c4d2
- ld a, [wd498]
+ ld a, [wNextBonusStage]
add $15
callba LoadBillboardTileData
ret
diff --git a/engine/pinball_game/load_stage_data/load_red_field.asm b/engine/pinball_game/load_stage_data/load_red_field.asm index 51a00c9..f195f92 100644 --- a/engine/pinball_game/load_stage_data/load_red_field.asm +++ b/engine/pinball_game/load_stage_data/load_red_field.asm @@ -441,7 +441,7 @@ Func_14377: ; 0x14377 ld a, [wOpenedSlotByGetting3Pokeballs]
and a
jr z, .asm_14393
- ld a, [wd498]
+ ld a, [wNextBonusStage]
add $15
callba LoadBillboardTileData
ret
diff --git a/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm b/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm index e2ac723..8d80360 100644 --- a/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm +++ b/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm @@ -2620,9 +2620,9 @@ DoSlotLogic_BlueField: ; 0x1e830 xor a
ld [wBonusStageSlotRewardActive], a
ld a, $1
- ld [wd495], a
+ ld [wGoingToBonusStage], a
ld [wMoveToNextScreenState], a
- ld a, [wd498]
+ ld a, [wNextBonusStage]
ld c, a
ld b, $0
ld hl, BonusStages_BlueField
@@ -2726,7 +2726,7 @@ OpenSlotCave_BlueField: ; 0x1e9c0 ld a, [wOpenedSlotByGetting3Pokeballs]
and a
jr z, .asm_1e9dc
- ld a, [wd498]
+ ld a, [wNextBonusStage]
add $15
jr .asm_1e9e3
diff --git a/engine/pinball_game/object_collision/diglett_bonus_resolve_collision.asm b/engine/pinball_game/object_collision/diglett_bonus_resolve_collision.asm index 738010d..bf48d71 100644 --- a/engine/pinball_game/object_collision/diglett_bonus_resolve_collision.asm +++ b/engine/pinball_game/object_collision/diglett_bonus_resolve_collision.asm @@ -672,7 +672,7 @@ Func_1ab30: ; 0x1ab30 call InitAnimation
xor a
ld [wDugrioState], a
- ld [wd498], a
+ ld [wNextBonusStage], a ; BONUS_STAGE_ORDER_GENGAR
ld a, $1
ld [wCompletedBonusStage], a
call FillBottomMessageBufferWithBlackTile
diff --git a/engine/pinball_game/object_collision/gengar_bonus_resolve_collision.asm b/engine/pinball_game/object_collision/gengar_bonus_resolve_collision.asm index 10afcd3..0ddb3c4 100644 --- a/engine/pinball_game/object_collision/gengar_bonus_resolve_collision.asm +++ b/engine/pinball_game/object_collision/gengar_bonus_resolve_collision.asm @@ -999,8 +999,8 @@ Func_189af: ; 0x189af ret nz
ld a, $1
ld [wd6a8], a
- ld a, $1
- ld [wd498], a
+ ld a, BONUS_STAGE_ORDER_MEWTWO
+ ld [wNextBonusStage], a
ld a, $1
ld [wCompletedBonusStage], a
call FillBottomMessageBufferWithBlackTile
diff --git a/engine/pinball_game/object_collision/meowth_bonus_resolve_collision.asm b/engine/pinball_game/object_collision/meowth_bonus_resolve_collision.asm index 85b4598..95cd4b5 100644 --- a/engine/pinball_game/object_collision/meowth_bonus_resolve_collision.asm +++ b/engine/pinball_game/object_collision/meowth_bonus_resolve_collision.asm @@ -188,12 +188,12 @@ ResolveMeowthBonusGameObjectCollisions: ; 0x2442a ld a, [wd712]
cp $2
jr nc, .asm_24498
- ld a, [wd498]
- cp $4
+ ld a, [wNextBonusStage]
+ cp BONUS_STAGE_ORDER_SEEL
ret z
- ld a, $4
+ ld a, BONUS_STAGE_ORDER_SEEL
ld [wd712], a
- ld [wd498], a
+ ld [wNextBonusStage], a
ld a, $96
ld [wd739], a
ld de, $0000
diff --git a/engine/pinball_game/object_collision/mewtwo_bonus_resolve_collision.asm b/engine/pinball_game/object_collision/mewtwo_bonus_resolve_collision.asm index 17e0b0b..119ffa3 100644 --- a/engine/pinball_game/object_collision/mewtwo_bonus_resolve_collision.asm +++ b/engine/pinball_game/object_collision/mewtwo_bonus_resolve_collision.asm @@ -339,8 +339,8 @@ Func_19638: ; 0x19638 ret nz
ld a, $1
ld [wd6b3], a
- ld a, [wd499]
- ld [wd498], a
+ ld a, [wInitialNextBonusStage]
+ ld [wNextBonusStage], a
ld a, [wNumMewtwoBonusCompletions]
cp $2 ; only counts up to 2. Gets reset to 0 when Mew is encountered in Catch 'Em Mode.
jr z, .asm_1965e
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 7d9774e..8134d0e 100644 --- a/engine/pinball_game/object_collision/red_stage_resolve_collision.asm +++ b/engine/pinball_game/object_collision/red_stage_resolve_collision.asm @@ -2066,9 +2066,9 @@ DoSlotLogic_RedField: ; 0x16352 xor a
ld [wBonusStageSlotRewardActive], a
ld a, $1
- ld [wd495], a
+ ld [wGoingToBonusStage], a
ld [wMoveToNextScreenState], a
- ld a, [wd498]
+ ld a, [wNextBonusStage]
ld c, a
ld b, $0
ld hl, BonusStages_RedField
@@ -2178,7 +2178,7 @@ OpenSlotCave_RedField: ; 0x164e3 ld a, [wOpenedSlotByGetting3Pokeballs]
and a
jr z, .asm_164ff
- ld a, [wd498]
+ ld a, [wNextBonusStage]
add $15
jr .asm_16506
diff --git a/engine/pinball_game/object_collision/seel_bonus_resolve_collision.asm b/engine/pinball_game/object_collision/seel_bonus_resolve_collision.asm index 39e8044..df40da0 100644 --- a/engine/pinball_game/object_collision/seel_bonus_resolve_collision.asm +++ b/engine/pinball_game/object_collision/seel_bonus_resolve_collision.asm @@ -7,8 +7,8 @@ ResolveSeelBonusGameObjectCollisions: ; 0x25c5a ld a, [wd794]
cp $2
jr nc, .asm_25c98
- ld a, $1
- ld [wd498], a
+ ld a, BONUS_STAGE_ORDER_MEWTWO
+ ld [wNextBonusStage], a
ld de, $0000
call PlaySong
ld a, $1
diff --git a/engine/pinball_game/slot.asm b/engine/pinball_game/slot.asm index 11998fa..0cf52d2 100644 --- a/engine/pinball_game/slot.asm +++ b/engine/pinball_game/slot.asm @@ -219,7 +219,7 @@ Func_eef9: ; 0xeef9 cp $d
ret nz
push hl
- ld hl, wd498
+ ld hl, wNextBonusStage
add [hl]
pop hl
ret
diff --git a/engine/pinball_game/stage_init/init_blue_field.asm b/engine/pinball_game/stage_init/init_blue_field.asm index 0200f2d..ed624c5 100644 --- a/engine/pinball_game/stage_init/init_blue_field.asm +++ b/engine/pinball_game/stage_init/init_blue_field.asm @@ -30,9 +30,9 @@ InitBlueField: ; 0x1c000 ld a, $3
ld [wd49e], a
ld [wd610], a
- ld a, $2
- ld [wd498], a
- ld [wd499], a
+ ld a, BONUS_STAGE_ORDER_MEOWTH
+ ld [wNextBonusStage], a
+ ld [wInitialNextBonusStage], a
ld a, $80
ld [wIndicatorStates], a
ld [wIndicatorStates + 3], a
diff --git a/engine/pinball_game/stage_init/init_red_field.asm b/engine/pinball_game/stage_init/init_red_field.asm index a40ace1..82778c3 100644 --- a/engine/pinball_game/stage_init/init_red_field.asm +++ b/engine/pinball_game/stage_init/init_red_field.asm @@ -30,8 +30,8 @@ InitRedField: ; 0x30000 ld a, $3
ld [wd49e], a
ld [wd610], a
- ld [wd498], a
- ld [wd499], a
+ ld [wNextBonusStage], a ; BONUS_STAGE_ORDER_DIGLETT
+ ld [wInitialNextBonusStage], a ; BONUS_STAGE_ORDER_DIGLETT
ld a, $4
ld [wStageCollisionState], a
ld [wd7ad], a
diff --git a/engine/pinball_game/stage_init/init_stages.asm b/engine/pinball_game/stage_init/init_stages.asm index 5e26639..621a828 100644 --- a/engine/pinball_game/stage_init/init_stages.asm +++ b/engine/pinball_game/stage_init/init_stages.asm @@ -53,7 +53,7 @@ ResetDataForStageInitialization: ; 0x8388 ret
.asm_8398
ld a, [wCurrentStage]
- cp STAGE_BLUE_FIELD_BOTTOM + 1
+ cp FIRST_BONUS_STAGE
ret nc ; Check if bonus stage
ld hl, wPartyMons
ld bc, $0170
@@ -159,20 +159,28 @@ wd489:: ; 0xd489 wd48f:: ; 0xd48f ds $6 -wd495:: ; 0xd495 +wGoingToBonusStage:: ; 0xd495 +; Set to 1 when the player's pinball enters the Slot cave to go to a Bonus Stage. ds $1 -wd496:: ; 0xd496 +wReturningFromBonusStage:: ; 0xd496 +; Set to 1 when a bonus stage is is finished. This is used when the main field logic is determining +; where to start the ball, since it falls out of the Slot cave after a bonus stage. ds $1 wNextStage:: ; 0xd497 ; Holds the id of the next stage to go to. Used for transitioning between bonus stage and the main red/blue field. ds $1 -wd498:: ; 0xd498 +wNextBonusStage:: ; 0xd498 +; Holds id of the next Bonus Stage the player is eligible to go to. +; This is not the raw stage id (e.g. STAGE_MEOWTH_BONUS), rather, its the id in the order the STAGE constants are defined. +; See constants/bonus_stage_order_constants.asm for list of values. ds $1 -wd499:: ; 0xd499 +wInitialNextBonusStage:: ; 0xd499 +; Holds the id of the first Bonus Stage for the current field. This is used to "wrap around" back to the start of the bonus stages +; after defeating the Mewtwo stage. See wNextBonusStage. ds $1 wCompletedBonusStage:: ; 0xd49a |