summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2017-04-09 11:53:44 -0700
committerMarcus Huderle <huderlem@gmail.com>2017-04-09 11:53:44 -0700
commit49d6e93427024bb863164d3b0b653a41520c278e (patch)
tree9c4728db338ece8f383ab65616326aec2d6a93f1 /engine
parente3009671c3ad7d534575a5ec4094e70afd12bae3 (diff)
Split out game object collision routines/data
Diffstat (limited to 'engine')
-rwxr-xr-xengine/collision/blue_stage_game_object_collision.asm134
-rwxr-xr-xengine/collision/red_stage_game_object_collision.asm152
2 files changed, 286 insertions, 0 deletions
diff --git a/engine/collision/blue_stage_game_object_collision.asm b/engine/collision/blue_stage_game_object_collision.asm
new file mode 100755
index 0000000..d88c174
--- /dev/null
+++ b/engine/collision/blue_stage_game_object_collision.asm
@@ -0,0 +1,134 @@
+CheckBlueStageTopGameObjectCollisions: ; 0x1c520
+ call CheckBlueStageShellderCollision
+ call CheckBlueStageSpinnerCollision
+ call CheckBlueStageBoardTriggersCollision
+ call CheckBlueStageSlowpokeCollision
+ call CheckBlueStageCloysterCollision
+ call CheckBlueStagePinballUpgradeTriggersCollision
+ call CheckBlueStageEvolutionTrinketCollision
+ ret
+
+CheckBlueStageBottomGameObjectCollisions: ; 0x1c536
+ ld a, [wBallYPos + 1]
+ cp $56
+ jr nc, .lowerHalfOfScreen
+ call CheckBlueStageWildPokemonCollision
+ call CheckBlueStagePsyduckPoliwagCollision
+ call CheckBlueStageBonusMultiplierCollision
+ call CheckBlueStageSlotCollision
+ call CheckBlueStageEvolutionTrinketCollision
+ ret
+
+.lowerHalfOfScreen
+ call CheckBlueStageBumpersCollision
+ call CheckBlueStagePikachuCollision
+ call CheckBlueStageCAVELightsCollision
+ call CheckBlueStageLaunchAlleyCollision
+ ret
+
+CheckBlueStageShellderCollision: ; 0x1c55a
+ ld de, BlueStageShellderCollisionData
+ ld hl, BlueStageShellderCollisionAttributes
+ ld bc, wWhichShellder
+ and a
+ jp HandleGameObjectCollision
+
+CheckBlueStageSpinnerCollision: ; 0x1c567
+ ld de, BlueStageSpinnerCollisionData
+ ld bc, wSpinnerCollision
+ scf
+ jp HandleGameObjectCollision
+
+CheckBlueStageBumpersCollision: ; 0x1c571
+ ld de, BlueStageBumpersCollisionData
+ ld hl, BlueStageBumpersCollisionAttributes
+ ld bc, wWhichBumper
+ and a
+ jp HandleGameObjectCollision
+
+CheckBlueStageBoardTriggersCollision: ; 0x1c57e
+ ld de, BlueStageBoardTriggersCollisionData
+ ld bc, wWhichBoardTrigger
+ scf
+ jp HandleGameObjectCollision
+
+CheckBlueStageCloysterCollision: ; 0x1c588
+ ld de, BlueStageCloysterCollisionData
+ ld bc, wCloysterCollision
+ scf
+ jp HandleGameObjectCollision
+
+CheckBlueStageSlowpokeCollision: ; 0x1c592
+ ld de, BlueStageSlowpokeCollisionData
+ ld bc, wSlowpokeCollision
+ scf
+ jp HandleGameObjectCollision
+
+CheckBlueStagePikachuCollision: ; 0x1c59c
+ ld de, BlueStagePikachuCollisionData
+ ld bc, wWhichPikachu
+ scf
+ jp HandleGameObjectCollision
+
+CheckBlueStageBonusMultiplierCollision: ; 0x1c5a6
+ ld de, BlueStageBonusMultiplierCollisionData
+ ld hl, BlueStageBonusMultiplierCollisionAttributes
+ ld bc, wWhichBonusMultiplierRailing
+ and a
+ jp HandleGameObjectCollision
+
+CheckBlueStagePsyduckPoliwagCollision: ; 0x1c5b3
+ ld de, BlueStagePsyduckPoliwagCollisionData
+ ld hl, BlueStagePsyduckPoliwagCollisionAttributes
+ ld bc, wWhichPsyduckPoliwag
+ and a
+ jp HandleGameObjectCollision
+
+CheckBlueStagePinballUpgradeTriggersCollision: ; 0x1c5c0
+ ld de, BlueStagePinballUpgradeTriggersCollisionData
+ ld bc, wWhichPinballUpgradeTrigger
+ scf
+ jp HandleGameObjectCollision
+
+CheckBlueStageCAVELightsCollision: ; 0x1c5ca
+ ld de, BlueStageCAVELightsCollisionData
+ ld bc, wWhichCAVELight
+ scf
+ jp HandleGameObjectCollision
+
+CheckBlueStageSlotCollision: ; 0x1c5d4
+ ld de, BlueStageSlotCollisionData
+ ld bc, wSlotCollision
+ scf
+ jp HandleGameObjectCollision
+
+CheckBlueStageWildPokemonCollision: ; 0x1c5de
+ ld de, BlueStageWildPokemonCollisionData
+ ld hl, BlueStageWildPokemonCollisionAttributes
+ ld bc, wWildMonCollision
+ and a
+ jp HandleGameObjectCollision
+
+CheckBlueStageEvolutionTrinketCollision: ; 0x1c5eb
+ xor a
+ ld [wd578], a
+ ld a, [wd551]
+ and a
+ ret z
+ ld a, [wCurrentStage]
+ bit 0, a
+ jr nz, .asm_1c601
+ ld hl, BlueTopEvolutionTrinketCoords
+ jp PinballCollidesWithPoints
+
+.asm_1c601
+ ld hl, BlueBottomEvolutionTrinketCoords
+ jp PinballCollidesWithPoints
+
+CheckBlueStageLaunchAlleyCollision: ; 0x1c607
+ ld de, BlueStageLaunchAlleyCollisionData
+ ld bc, wPinballLaunchAlley
+ scf
+ jp HandleGameObjectCollision
+
+INCLUDE "data/collision/game_objects/blue_stage_game_object_collision.asm"
diff --git a/engine/collision/red_stage_game_object_collision.asm b/engine/collision/red_stage_game_object_collision.asm
new file mode 100755
index 0000000..341726d
--- /dev/null
+++ b/engine/collision/red_stage_game_object_collision.asm
@@ -0,0 +1,152 @@
+CheckRedStageTopGameObjectCollisions: ; 0x143e1
+ call CheckRedStageVoltorbCollision
+ call CheckRedStageSpinnerCollision
+ call CheckRedStageBoardTriggersCollision
+ call CheckRedStageTopStaryuCollision
+ call CheckRedStageBellsproutCollision
+ call CheckRedStageDittoSlotCollision
+ call CheckRedStagePinballUpgradeTriggersCollision
+ jp CheckRedStageEvolutionTrinketCollision
+
+CheckRedStageBottomGameObjectCollisions: ; 0x143f9
+ ld a, [wBallYPos + 1]
+ cp $56
+ jr nc, .lowerHalfOfScreen
+ call CheckRedStageWildPokemonCollision
+ call CheckRedStageBottomStaryuCollision
+ call CheckRedStageDiglettCollision
+ call CheckRedStageBonusMultiplierCollision
+ call CheckRedStageSlotCollision
+ jp CheckRedStageEvolutionTrinketCollision
+
+.lowerHalfOfScreen
+ call CheckRedStageBumpersCollision
+ call CheckRedStagePikachuCollision
+ call CheckRedStageCAVELightsCollision
+ jp CheckRedStageLaunchAlleyCollision
+
+CheckRedStageEvolutionTrinketCollision: ; 0x1441e
+ xor a
+ ld [wd578], a
+ ld a, [wd551]
+ and a
+ ret z
+ ld a, [wCurrentStage]
+ ld hl, RedStageEvolutionTrinketCoordinatePointers
+ ld c, a
+ ld b, $0
+ sla c
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp PinballCollidesWithPoints
+
+CheckRedStageDittoSlotCollision: ; 0x14439
+ ld de, RedStageDittoSlotCollisionData
+ ld bc, wDittoSlotCollision
+ scf
+ jp HandleGameObjectCollision
+
+CheckRedStageSlotCollision: ; 0x14443
+ ld de, RedStageSlotCollisionData
+ ld bc, wSlotCollision
+ scf
+ jp HandleGameObjectCollision
+
+CheckRedStageWildPokemonCollision: ; 0x1444d
+ ld de, RedStageWildPokemonCollisionData
+ ld hl, RedStageWildPokemonCollisionAttributes
+ ld bc, wWildMonCollision
+ and a
+ jp HandleGameObjectCollision
+
+CheckRedStageBonusMultiplierCollision: ; 0x1445a
+; There are two small railings above the Digletts. If you hit them, you get a bonus
+; multiplier. I can't think of a good name for these two obsjects.
+ ld de, RedStageBonusMultipliersCollisionData
+ ld hl, RedStageBonusMultipliersCollisionAttributes
+ ld bc, wWhichBonusMultiplierRailing
+ and a
+ jp HandleGameObjectCollision
+
+CheckRedStageDiglettCollision: ; 0x14467
+ ld de, RedStageDiglettCollisionData
+ ld hl, RedStageDiglettCollisionAttributes
+ ld bc, wWhichDiglett
+ and a
+ jp HandleGameObjectCollision
+
+CheckRedStageVoltorbCollision: ; 0x14474
+ ld de, RedStageVoltorbCollisionData
+ ld hl, RedStageVoltorbCollisionAttributes
+ ld bc, wWhichVoltorb
+ and a
+ jp HandleGameObjectCollision
+
+CheckRedStageBumpersCollision: ; 0x14481
+ ld de, RedStageBumpersCollisionData
+ ld hl, RedStageBumpersCollisionAttributes
+ ld bc, wWhichBumper
+ and a
+ jp HandleGameObjectCollision
+
+CheckRedStageLaunchAlleyCollision: ; 0x1448e
+ ld de, RedStageLaunchAlleyCollisionData
+ ld bc, wPinballLaunchAlley
+ scf
+ jp HandleGameObjectCollision
+
+CheckRedStageSpinnerCollision: ; 0x14498
+ ld de, RedStageSpinnerCollisionData
+ ld bc, wSpinnerCollision
+ scf
+ jp HandleGameObjectCollision
+
+CheckRedStageCAVELightsCollision: ; 0x144a2
+ ld de, RedStageCAVELightsCollisionData
+ ld bc, wWhichCAVELight
+ scf
+ jp HandleGameObjectCollision
+
+CheckRedStagePinballUpgradeTriggersCollision: ; 0x144ac
+ ld de, RedStagePinballUpgradeTriggerCollisionData
+ ld bc, wWhichPinballUpgradeTrigger
+ scf
+ jp HandleGameObjectCollision
+
+CheckRedStageBoardTriggersCollision: ; 0x144b6
+ ld de, RedStageBoardTriggersCollisionData
+ ld bc, wWhichBoardTrigger
+ scf
+ jp HandleGameObjectCollision
+
+CheckRedStageTopStaryuCollision: ; 0x144c0
+ ld de, RedStageTopStaryuCollisionData
+ ld hl, RedStageTopStaryuCollisionAttributes
+ ld bc, wStaryuCollision
+ and a
+ jp HandleGameObjectCollision
+
+CheckRedStageBottomStaryuCollision: ; 0x144cd
+; Staryu collision can actually be hit via the bottom screen, despite the fact
+; that the Staryu is located on the (bottom of the) top screen.
+ ld de, RedStageBottomStaryuCollisionData
+ ld hl, RedStageBottomStaryuCollisionAttributes
+ ld bc, wStaryuCollision
+ and a
+ jp HandleGameObjectCollision
+
+CheckRedStageBellsproutCollision: ; 0x144da
+ ld de, RedStageBellsproutCollisionData
+ ld bc, wBellsproutCollision
+ scf
+ jp HandleGameObjectCollision
+
+CheckRedStagePikachuCollision:
+ ld de, RedStagePikachuCollisionData
+ ld bc, wWhichPikachu
+ scf
+ jp HandleGameObjectCollision
+
+INCLUDE "data/collision/game_objects/red_stage_game_object_collision.asm"