From 49d6e93427024bb863164d3b0b653a41520c278e Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 9 Apr 2017 11:53:44 -0700 Subject: Split out game object collision routines/data --- .../blue_stage_game_object_collision.asm | 138 +++++ .../red_stage_game_object_collision.asm | 166 ++++++ .../collision/blue_stage_game_object_collision.asm | 134 +++++ .../collision/red_stage_game_object_collision.asm | 152 ++++++ main.asm | 590 +-------------------- 5 files changed, 592 insertions(+), 588 deletions(-) create mode 100755 data/collision/game_objects/blue_stage_game_object_collision.asm create mode 100755 data/collision/game_objects/red_stage_game_object_collision.asm create mode 100755 engine/collision/blue_stage_game_object_collision.asm create mode 100755 engine/collision/red_stage_game_object_collision.asm 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 -- cgit v1.2.3