summaryrefslogtreecommitdiff
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
parente3009671c3ad7d534575a5ec4094e70afd12bae3 (diff)
Split out game object collision routines/data
-rwxr-xr-xdata/collision/game_objects/blue_stage_game_object_collision.asm138
-rwxr-xr-xdata/collision/game_objects/red_stage_game_object_collision.asm166
-rwxr-xr-xengine/collision/blue_stage_game_object_collision.asm134
-rwxr-xr-xengine/collision/red_stage_game_object_collision.asm152
-rwxr-xr-xmain.asm590
5 files changed, 592 insertions, 588 deletions
diff --git a/data/collision/game_objects/blue_stage_game_object_collision.asm b/data/collision/game_objects/blue_stage_game_object_collision.asm
new file mode 100755
index 0000000..6a4dd1f
--- /dev/null
+++ b/data/collision/game_objects/blue_stage_game_object_collision.asm
@@ -0,0 +1,138 @@
+BlueStageBumpersCollisionAttributes:
+ db $00 ; flat list
+ db $34, $3F, $39, $3C, $38, $37, $3F, $33, $32, $3E, $3D, $3B, $3A, $3E, $36, $35, $31, $30
+ db $FF ; terminator
+
+BlueStageBumpersCollisionData:
+ db $06, $0B ; x, y bounding box
+ db $01, $30, $66 ; id, x, y
+ db $02, $6F, $66 ; id, x, y
+ db $FF ; terminator
+
+BlueStageShellderCollisionAttributes:
+ db $00 ; flat list
+ db $5E, $5F, $60, $61, $62, $63, $64, $65, $98, $66, $67, $68, $69, $6A, $6B, $99, $6C, $6D, $6E, $6F
+ db $FF ; terminator
+
+BlueStageShellderCollisionData:
+ db $0E, $0E ; x, y bounding box
+ db $03, $3A, $56 ; id, x, y
+ db $04, $4F, $45 ; id, x, y
+ db $05, $64, $56 ; id, x, y
+ db $FF ; terminator
+
+BlueStageSpinnerCollisionData:
+ db $08, $04 ; x, y bounding box
+ db $06, $92, $6A ; id, x, y
+ db $FF ; terminator
+
+BlueStageBoardTriggersCollisionData:
+ db $09, $09 ; x, y bounding box
+ db $07, $15, $43 ; id, x, y
+ db $08, $8B, $43 ; id, x, y
+ db $09, $10, $8C ; id, x, y
+ db $0A, $8F, $8C ; id, x, y
+ db $FF ; terminator
+
+BlueStageCloysterCollisionData:
+ db $06, $05 ; x, y bounding box
+ db $0B, $73, $78 ; id, x, y
+ db $FF ; terminator
+
+BlueStageSlowpokeCollisionData:
+ db $06, $05 ; x, y bounding box
+ db $0C, $2C, $78 ; id, x, y
+ db $FF ; terminator
+
+BlueStagePikachuCollisionData:
+ db $03, $05 ; x, y bounding box
+ db $0D, $0E, $7C ; id, x, y
+ db $0E, $92, $7C ; id, x, y
+ db $FF ; terminator
+
+BlueStageBonusMultiplierCollisionAttributes:
+ db $00 ; flat list
+ db $56, $59, $58, $57, $1C, $5A, $5B, $5C, $5D, $1D
+ db $FF ; terminator
+
+BlueStageBonusMultiplierCollisionData:
+ db $09, $08 ; x, y bounding box
+ db $0F, $2C, $20 ; id, x, y
+ db $10, $74, $20 ; id, x, y
+ db $FF ; terminator
+
+BlueStagePsyduckPoliwagCollisionAttributes:
+ db $00 ; flat list
+ db $5E, $5F, $24, $25
+ db $FF ; terminator
+
+BlueStagePsyduckPoliwagCollisionData:
+ db $08, $0C ; x, y bounding box
+ db $11, $22, $3E ; id, x, y
+ db $12, $7D, $3D ; id, x, y
+ db $FF ; terminator
+
+BlueStagePinballUpgradeTriggersCollisionData:
+ db $06, $05 ; x, y bounding box
+ db $13, $37, $34 ; id, x, y
+ db $14, $4F, $2F ; id, x, y
+ db $15, $67, $35 ; id, x, y
+ db $FF ; terminator
+
+BlueStageCAVELightsCollisionData:
+ db $05, $03 ; x, y bounding box
+ db $16, $0E, $65 ; id, x, y
+ db $17, $1E, $65 ; id, x, y
+ db $18, $82, $65 ; id, x, y
+ db $19, $92, $65 ; id, x, y
+ db $FF ; terminator
+
+BlueStageSlotCollisionData:
+ db $04, $04 ; x, y bounding box
+ db $1A, $50, $16 ; id, x, y
+ db $FF ; terminator
+
+BlueStageWildPokemonCollisionAttributes:
+ db $00 ; flat list
+ db $D0, $D1, $D2, $D3, $D4, $D5, $D6, $D7, $D8, $D9, $DA, $DB, $DC, $DD, $DE, $DF
+ db $FF ; terminator
+
+BlueStageWildPokemonCollisionData:
+ db $1A, $1A ; x, y bounding box
+ db $1B, $50, $40 ; id, x, y
+ db $FF ; terminator
+
+BlueTopEvolutionTrinketCoords: ; 0x1c6d7
+; First byte is just non-zero to signify that the array hasn't ended.
+; Second byte is x coordinate.
+; Third byte is y coordinate.
+ db $01, $44, $11
+ db $01, $23, $1B
+ db $01, $65, $1B
+ db $01, $0D, $2E
+ db $01, $7A, $2E
+ db $01, $05, $48
+ db $01, $44, $88
+ db $01, $83, $48
+ db $01, $02, $6E
+ db $01, $2E, $88
+ db $01, $59, $88
+ db $01, $85, $6E
+ db $00
+
+BlueBottomEvolutionTrinketCoords: ; 0x1c6fc
+; First byte is just non-zero to signify that the array hasn't ended.
+; Second byte is x coordinate.
+; Third byte is y coordinate.
+ db $01, $33, $1B
+ db $01, $55, $1B
+ db $01, $29, $1F
+ db $01, $5F, $1F
+ db $01, $1D, $35
+ db $01, $6B, $35
+ db $00
+
+BlueStageLaunchAlleyCollisionData:
+ db $08, $08 ; x, y bounding box
+ db $1C, $A8, $98 ; id, x, y
+ db $FF ; terminator
diff --git a/data/collision/game_objects/red_stage_game_object_collision.asm b/data/collision/game_objects/red_stage_game_object_collision.asm
new file mode 100755
index 0000000..6ff62b4
--- /dev/null
+++ b/data/collision/game_objects/red_stage_game_object_collision.asm
@@ -0,0 +1,166 @@
+RedStageDiglettCollisionAttributes:
+ db $00 ; flat list
+ db $64, $65, $68, $69
+ db $FF ; terminator
+
+RedStageDiglettCollisionData:
+ db $08, $0C ; x, y bounding box
+ db $01, $20, $40 ; id, x, y
+ db $02, $80, $40 ; id, x, y
+ db $FF ; terminator
+
+RedStageVoltorbCollisionAttributes:
+ db $00 ; flat list
+ db $E0, $E1, $E2, $E3, $E4, $E5, $E6, $E7, $E8, $E9, $EA, $EB, $EC, $ED, $EE, $EF, $F0, $F1, $F2, $F3, $F4, $F5
+ db $FF ; terminator
+
+RedStageVoltorbCollisionData:
+ db $0E, $0E ; x, y bounding box
+ db $03, $42, $66 ; id, x, y
+ db $04, $5A, $5C ; id, x, y
+ db $05, $55, $78 ; id, x, y
+ db $FF ; terminator
+
+RedStageBumpersCollisionAttributes:
+ db $00 ; flat list
+ db $32, $3F, $37, $3C, $34, $31, $3E, $36, $3B, $3D
+ db $FF ; terminator
+
+RedStageBumpersCollisionData:
+ db $06, $0B ; x, y bounding box
+ db $06, $30, $66 ; id, x, y
+ db $07, $6F, $66 ; id, x, y
+ db $FF ; terminator
+
+RedStageLaunchAlleyCollisionData:
+ db $08, $08 ; x, y bounding box
+ db $08, $A8, $98 ; id, x, y
+ db $FF ; terminator
+
+RedStageSpinnerCollisionData:
+ db $08, $04 ; x, y, bounding box
+ db $09, $90, $6C ; id, x, y
+ db $FF ; terminator
+
+RedStageCAVELightsCollisionData:
+ db $05, $03 ; x, y bounding box
+ db $0A, $0E, $65 ; id, x, y
+ db $0B, $1E, $65 ; id, x, y
+ db $0C, $82, $65 ; id, x, y
+ db $0D, $92, $65 ; id, x, y
+ db $FF ; terminator
+
+RedStagePinballUpgradeTriggerCollisionData:
+ db $06, $05 ; x, y bounding box
+ db $0E, $3A, $53 ; id, x, y
+ db $0F, $50, $48 ; id, x, y
+ db $10, $66, $49 ; id, x, y
+ db $FF ; terminator
+
+RedStageBoardTriggersCollisionData:
+ db $09, $09 ; x, y bounding box
+ db $11, $1C, $3C ; id, x, y
+ db $12, $2A, $44 ; id, x, y
+ db $13, $25, $63 ; id, x, y
+ db $14, $12, $7A ; id, x, y
+ db $15, $26, $84 ; id, x, y
+ db $16, $7C, $44 ; id, x, y
+ db $17, $8E, $7A ; id, x, y
+ db $18, $7F, $39 ; id, x, y
+ db $FF ; terminator
+
+RedStageTopStaryuCollisionAttributes:
+ db $00 ; flat list
+ db $10, $11, $12
+ db $FF ; terminator
+
+RedStageTopStaryuCollisionData:
+ db $08, $06 ; x, y bounding box
+ db $19, $40, $90 ; id, x, y
+ db $FF ; terminator
+
+RedStageBottomStaryuCollisionAttributes:
+ db $00 ; flat list
+ db $56, $5B, $5C
+ db $FF ; terminator
+
+RedStageBottomStaryuCollisionData:
+ db $08, $06 ; x, y bounding box
+ db $1A, $40, $08 ; id, x, y
+ db $FF ; terminator
+
+RedStageBellsproutCollisionData:
+ db $06, $05 ; x, y bounding box
+ db $1B, $7B, $76 ; id, x, y
+ db $FF ; terminator
+
+RedStagePikachuCollisionData:
+ db $03, $05 ; x, y bounding box
+ db $1C, $0E, $7C ; id, x, y
+ db $1D, $92, $7C ; id, x, y
+ db $FF ; terminator
+
+RedStageWildPokemonCollisionAttributes:
+ db $00 ; flat list
+ db $D0, $D1, $D2, $D3, $D4, $D5, $D6, $D7, $D8, $D9, $DA, $DB, $DC, $DD, $DE, $DF
+ db $FF ; terminator
+
+RedStageWildPokemonCollisionData:
+ db $1A, $1A ; x, y bounding box
+ db $1E, $50, $40 ; id, x, y
+ db $FF ; terminator
+
+RedStageDittoSlotCollisionData:
+ db $03, $03 ; x, y bounding box
+ db $1F, $12, $24 ; id, x, y
+ db $FF ; terminator
+
+RedStageSlotCollisionData:
+ db $04, $04 ; x, y bounding box
+ db $20, $50, $16 ; id, x, y
+ db $FF ; terminator
+
+RedStageBonusMultipliersCollisionAttributes:
+ db $00 ; flat list
+ db $4C, $4B, $48, $47, $4D, $4A
+ db $FF ; terminator
+
+RedStageBonusMultipliersCollisionData:
+ db $07, $07 ; x, y bounding box
+ db $21, $2C, $20 ; id, x, y
+ db $22, $74, $20 ; id, x, y
+ db $FF ; terminator
+
+RedStageEvolutionTrinketCoordinatePointers: ; 0x145d2
+ dw RedStageTopEvolutionTrinketCoords
+ dw RedStageBottomEvolutionTrinketCoords
+
+RedStageTopEvolutionTrinketCoords: ; 0x156d6
+; First byte is just non-zero to signify that the array hasn't ended.
+; Second byte is x coordinate.
+; Third byte is y coordinate.
+ db $01, $44, $14
+ db $01, $2A, $1A
+ db $01, $5E, $1A
+ db $01, $11, $2D
+ db $01, $77, $2D
+ db $01, $16, $3E
+ db $01, $77, $3E
+ db $01, $06, $6D
+ db $01, $83, $6D
+ db $01, $41, $82
+ db $01, $51, $82
+ db $01, $69, $82
+ db $00 ; terminator
+
+RedStageBottomEvolutionTrinketCoords: ; 0x145fb
+; First byte is just non-zero to signify that the array hasn't ended.
+; Second byte is x coordinate.
+; Third byte is y coordinate.
+ db $01, $35, $1B
+ db $01, $53, $1B
+ db $01, $29, $1F
+ db $01, $5F, $1F
+ db $01, $26, $34
+ db $01, $62, $34
+ db $00 ; terminator
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"
diff --git a/main.asm b/main.asm
index 7eb7073..e5764ac 100755
--- a/main.asm
+++ b/main.asm
@@ -14196,323 +14196,7 @@ Func_14377: ; 0x14377
callba Func_30256
ret
-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
-
-RedStageDiglettCollisionAttributes:
- db $00 ; flat list
- db $64, $65, $68, $69
- db $FF ; terminator
-
-RedStageDiglettCollisionData:
- db $08, $0C ; x, y bounding box
- db $01, $20, $40 ; id, x, y
- db $02, $80, $40 ; id, x, y
- db $FF ; terminator
-
-RedStageVoltorbCollisionAttributes:
- db $00 ; flat list
- db $E0, $E1, $E2, $E3, $E4, $E5, $E6, $E7, $E8, $E9, $EA, $EB, $EC, $ED, $EE, $EF, $F0, $F1, $F2, $F3, $F4, $F5
- db $FF ; terminator
-
-RedStageVoltorbCollisionData:
- db $0E, $0E ; x, y bounding box
- db $03, $42, $66 ; id, x, y
- db $04, $5A, $5C ; id, x, y
- db $05, $55, $78 ; id, x, y
- db $FF ; terminator
-
-RedStageBumpersCollisionAttributes:
- db $00 ; flat list
- db $32, $3F, $37, $3C, $34, $31, $3E, $36, $3B, $3D
- db $FF ; terminator
-
-RedStageBumpersCollisionData:
- db $06, $0B ; x, y bounding box
- db $06, $30, $66 ; id, x, y
- db $07, $6F, $66 ; id, x, y
- db $FF ; terminator
-
-RedStageLaunchAlleyCollisionData:
- db $08, $08 ; x, y bounding box
- db $08, $A8, $98 ; id, x, y
- db $FF ; terminator
-
-RedStageSpinnerCollisionData:
- db $08, $04 ; x, y, bounding box
- db $09, $90, $6C ; id, x, y
- db $FF ; terminator
-
-RedStageCAVELightsCollisionData:
- db $05, $03 ; x, y bounding box
- db $0A, $0E, $65 ; id, x, y
- db $0B, $1E, $65 ; id, x, y
- db $0C, $82, $65 ; id, x, y
- db $0D, $92, $65 ; id, x, y
- db $FF ; terminator
-
-RedStagePinballUpgradeTriggerCollisionData:
- db $06, $05 ; x, y bounding box
- db $0E, $3A, $53 ; id, x, y
- db $0F, $50, $48 ; id, x, y
- db $10, $66, $49 ; id, x, y
- db $FF ; terminator
-
-RedStageBoardTriggersCollisionData:
- db $09, $09 ; x, y bounding box
- db $11, $1C, $3C ; id, x, y
- db $12, $2A, $44 ; id, x, y
- db $13, $25, $63 ; id, x, y
- db $14, $12, $7A ; id, x, y
- db $15, $26, $84 ; id, x, y
- db $16, $7C, $44 ; id, x, y
- db $17, $8E, $7A ; id, x, y
- db $18, $7F, $39 ; id, x, y
- db $FF ; terminator
-
-RedStageTopStaryuCollisionAttributes:
- db $00 ; flat list
- db $10, $11, $12
- db $FF ; terminator
-
-RedStageTopStaryuCollisionData:
- db $08, $06 ; x, y bounding box
- db $19, $40, $90 ; id, x, y
- db $FF ; terminator
-
-RedStageBottomStaryuCollisionAttributes:
- db $00 ; flat list
- db $56, $5B, $5C
- db $FF ; terminator
-
-RedStageBottomStaryuCollisionData:
- db $08, $06 ; x, y bounding box
- db $1A, $40, $08 ; id, x, y
- db $FF ; terminator
-
-RedStageBellsproutCollisionData:
- db $06, $05 ; x, y bounding box
- db $1B, $7B, $76 ; id, x, y
- db $FF ; terminator
-
-RedStagePikachuCollisionData:
- db $03, $05 ; x, y bounding box
- db $1C, $0E, $7C ; id, x, y
- db $1D, $92, $7C ; id, x, y
- db $FF ; terminator
-
-RedStageWildPokemonCollisionAttributes:
- db $00 ; flat list
- db $D0, $D1, $D2, $D3, $D4, $D5, $D6, $D7, $D8, $D9, $DA, $DB, $DC, $DD, $DE, $DF
- db $FF ; terminator
-
-RedStageWildPokemonCollisionData:
- db $1A, $1A ; x, y bounding box
- db $1E, $50, $40 ; id, x, y
- db $FF ; terminator
-
-RedStageDittoSlotCollisionData:
- db $03, $03 ; x, y bounding box
- db $1F, $12, $24 ; id, x, y
- db $FF ; terminator
-
-RedStageSlotCollisionData:
- db $04, $04 ; x, y bounding box
- db $20, $50, $16 ; id, x, y
- db $FF ; terminator
-
-RedStageBonusMultipliersCollisionAttributes:
- db $00 ; flat list
- db $4C, $4B, $48, $47, $4D, $4A
- db $FF ; terminator
-
-RedStageBonusMultipliersCollisionData:
- db $07, $07 ; x, y bounding box
- db $21, $2C, $20 ; id, x, y
- db $22, $74, $20 ; id, x, y
- db $FF ; terminator
-
-RedStageEvolutionTrinketCoordinatePointers: ; 0x145d2
- dw RedStageTopEvolutionTrinketCoords
- dw RedStageBottomEvolutionTrinketCoords
-
-RedStageTopEvolutionTrinketCoords: ; 0x156d6
-; First byte is just non-zero to signify that the array hasn't ended.
-; Second byte is x coordinate.
-; Third byte is y coordinate.
- db $01, $44, $14
- db $01, $2A, $1A
- db $01, $5E, $1A
- db $01, $11, $2D
- db $01, $77, $2D
- db $01, $16, $3E
- db $01, $77, $3E
- db $01, $06, $6D
- db $01, $83, $6D
- db $01, $41, $82
- db $01, $51, $82
- db $01, $69, $82
- db $00 ; terminator
-
-RedStageBottomEvolutionTrinketCoords: ; 0x145fb
-; First byte is just non-zero to signify that the array hasn't ended.
-; Second byte is x coordinate.
-; Third byte is y coordinate.
- db $01, $35, $1B
- db $01, $53, $1B
- db $01, $29, $1F
- db $01, $5F, $1F
- db $01, $26, $34
- db $01, $62, $34
- db $00 ; terminator
+INCLUDE "engine/collision/red_stage_game_object_collision.asm"
Func_1460e: ; 0x1460e
call ResolveVoltorbCollision
@@ -22678,277 +22362,7 @@ Func_1c4b6: ; 0x1c4b6
callba Func_30256
ret
-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
-
-BlueStageBumpersCollisionAttributes:
- db $00 ; flat list
- db $34, $3F, $39, $3C, $38, $37, $3F, $33, $32, $3E, $3D, $3B, $3A, $3E, $36, $35, $31, $30
- db $FF ; terminator
-
-BlueStageBumpersCollisionData:
- db $06, $0B ; x, y bounding box
- db $01, $30, $66 ; id, x, y
- db $02, $6F, $66 ; id, x, y
- db $FF ; terminator
-
-BlueStageShellderCollisionAttributes:
- db $00 ; flat list
- db $5E, $5F, $60, $61, $62, $63, $64, $65, $98, $66, $67, $68, $69, $6A, $6B, $99, $6C, $6D, $6E, $6F
- db $FF ; terminator
-
-BlueStageShellderCollisionData:
- db $0E, $0E ; x, y bounding box
- db $03, $3A, $56 ; id, x, y
- db $04, $4F, $45 ; id, x, y
- db $05, $64, $56 ; id, x, y
- db $FF ; terminator
-
-BlueStageSpinnerCollisionData:
- db $08, $04 ; x, y bounding box
- db $06, $92, $6A ; id, x, y
- db $FF ; terminator
-
-BlueStageBoardTriggersCollisionData:
- db $09, $09 ; x, y bounding box
- db $07, $15, $43 ; id, x, y
- db $08, $8B, $43 ; id, x, y
- db $09, $10, $8C ; id, x, y
- db $0A, $8F, $8C ; id, x, y
- db $FF ; terminator
-
-BlueStageCloysterCollisionData:
- db $06, $05 ; x, y bounding box
- db $0B, $73, $78 ; id, x, y
- db $FF ; terminator
-
-BlueStageSlowpokeCollisionData:
- db $06, $05 ; x, y bounding box
- db $0C, $2C, $78 ; id, x, y
- db $FF ; terminator
-
-BlueStagePikachuCollisionData:
- db $03, $05 ; x, y bounding box
- db $0D, $0E, $7C ; id, x, y
- db $0E, $92, $7C ; id, x, y
- db $FF ; terminator
-
-BlueStageBonusMultiplierCollisionAttributes:
- db $00 ; flat list
- db $56, $59, $58, $57, $1C, $5A, $5B, $5C, $5D, $1D
- db $FF ; terminator
-
-BlueStageBonusMultiplierCollisionData:
- db $09, $08 ; x, y bounding box
- db $0F, $2C, $20 ; id, x, y
- db $10, $74, $20 ; id, x, y
- db $FF ; terminator
-
-BlueStagePsyduckPoliwagCollisionAttributes:
- db $00 ; flat list
- db $5E, $5F, $24, $25
- db $FF ; terminator
-
-BlueStagePsyduckPoliwagCollisionData:
- db $08, $0C ; x, y bounding box
- db $11, $22, $3E ; id, x, y
- db $12, $7D, $3D ; id, x, y
- db $FF ; terminator
-
-BlueStagePinballUpgradeTriggersCollisionData:
- db $06, $05 ; x, y bounding box
- db $13, $37, $34 ; id, x, y
- db $14, $4F, $2F ; id, x, y
- db $15, $67, $35 ; id, x, y
- db $FF ; terminator
-
-BlueStageCAVELightsCollisionData:
- db $05, $03 ; x, y bounding box
- db $16, $0E, $65 ; id, x, y
- db $17, $1E, $65 ; id, x, y
- db $18, $82, $65 ; id, x, y
- db $19, $92, $65 ; id, x, y
- db $FF ; terminator
-
-BlueStageSlotCollisionData:
- db $04, $04 ; x, y bounding box
- db $1A, $50, $16 ; id, x, y
- db $FF ; terminator
-
-BlueStageWildPokemonCollisionAttributes:
- db $00 ; flat list
- db $D0, $D1, $D2, $D3, $D4, $D5, $D6, $D7, $D8, $D9, $DA, $DB, $DC, $DD, $DE, $DF
- db $FF ; terminator
-
-BlueStageWildPokemonCollisionData:
- db $1A, $1A ; x, y bounding box
- db $1B, $50, $40 ; id, x, y
- db $FF ; terminator
-
-BlueTopEvolutionTrinketCoords: ; 0x1c6d7
-; First byte is just non-zero to signify that the array hasn't ended.
-; Second byte is x coordinate.
-; Third byte is y coordinate.
- db $01, $44, $11
- db $01, $23, $1B
- db $01, $65, $1B
- db $01, $0D, $2E
- db $01, $7A, $2E
- db $01, $05, $48
- db $01, $44, $88
- db $01, $83, $48
- db $01, $02, $6E
- db $01, $2E, $88
- db $01, $59, $88
- db $01, $85, $6E
- db $00
-
-BlueBottomEvolutionTrinketCoords: ; 0x1c6fc
-; First byte is just non-zero to signify that the array hasn't ended.
-; Second byte is x coordinate.
-; Third byte is y coordinate.
- db $01, $33, $1B
- db $01, $55, $1B
- db $01, $29, $1F
- db $01, $5F, $1F
- db $01, $1D, $35
- db $01, $6B, $35
- db $00
-
-BlueStageLaunchAlleyCollisionData:
- db $08, $08 ; x, y bounding box
- db $1C, $A8, $98 ; id, x, y
- db $FF ; terminator
+INCLUDE "engine/collision/blue_stage_game_object_collision.asm"
Func_1c715: ; 0x1c715
call ResolveShellderCollision