diff options
author | Marcus Huderle <huderlem@gmail.com> | 2017-04-09 11:53:44 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2017-04-09 11:53:44 -0700 |
commit | 49d6e93427024bb863164d3b0b653a41520c278e (patch) | |
tree | 9c4728db338ece8f383ab65616326aec2d6a93f1 | |
parent | e3009671c3ad7d534575a5ec4094e70afd12bae3 (diff) |
Split out game object collision routines/data
-rwxr-xr-x | data/collision/game_objects/blue_stage_game_object_collision.asm | 138 | ||||
-rwxr-xr-x | data/collision/game_objects/red_stage_game_object_collision.asm | 166 | ||||
-rwxr-xr-x | engine/collision/blue_stage_game_object_collision.asm | 134 | ||||
-rwxr-xr-x | engine/collision/red_stage_game_object_collision.asm | 152 | ||||
-rwxr-xr-x | main.asm | 590 |
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"
@@ -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 |