| Prev: 6136 | Up: Map | Next: 61BB |
615E: Handle COLLISION_MODE_FIGHTER collision detection
|
Used by the routine at collision_dispatcher.
|
||||
|
Checks if the player's missile has collided with a fighter aircraft. Uses bounding box collision detection by comparing the missile coordinates (from state_plane_missile_y) with the fighter's coordinates (from object_coordinates).
The collision box is 6 pixels wide (horizontally) and uses vertical bounds of +10 and +1 pixels.
If no collision is detected (any boundary check fails), jumps to no_collision_exit to reset collision mode and return.
On collision: removes the fighter from the viewport, triggers two explosion fragments, awards POINTS_FIGHTER, and continues to post-collision processing at finalize_collision.
|
||||
| handle_collision_mode_fighter | 615E | LD BC,($5EF3) | Load missile coordinates from state_plane_missile_y and fighter coordinates from object_coordinates. | |
| 6162 | LD DE,($8B0C) | |||
|
Y-axis collision check.
|
||||
| 6166 | LD A,B | Check if missile_Y + 6 >= fighter_Y; exit to no_collision_exit if not. | ||
| 6167 | ADD A,$06 | |||
| 6169 | SUB D | |||
| 616A | JP M,no_collision_exit | |||
| 616D | LD A,D | Check if fighter_Y + 6 >= missile_Y; exit to no_collision_exit if not. | ||
| 616E | ADD A,$06 | |||
| 6170 | SUB B | |||
| 6171 | JP M,no_collision_exit | |||
|
X-axis collision check.
|
||||
| 6174 | LD H,$00 | Check if fighter_X + 10 >= missile_X; exit to no_collision_exit if not. | ||
| 6176 | LD A,E | |||
| 6177 | ADD A,$0A | |||
| 6179 | LD L,A | |||
| 617A | LD B,$00 | |||
| 617C | OR A | |||
| 617D | SBC HL,BC | |||
| 617F | JP M,no_collision_exit | |||
| 6182 | LD H,$00 | Check if missile_X + 1 >= fighter_X; exit to no_collision_exit if not. | ||
| 6184 | LD BC,($5EF3) | |||
| 6188 | LD A,C | |||
| 6189 | INC A | |||
| 618A | LD L,A | |||
| 618B | LD B,$00 | |||
| 618D | LD C,E | |||
| 618E | OR A | |||
| 618F | SBC HL,BC | |||
| 6191 | JP M,no_collision_exit | |||
|
Collision detected - process hit.
|
||||
| 6194 | POP DE | Clean up stack (3x POP DE). | ||
| 6195 | POP DE | |||
| 6196 | POP DE | |||
| 6197 | LD A,D | Store fighter Y coordinate to state_collision_y. | ||
| 6198 | LD ($5EF6),A | |||
| 619B | LD HL,($5F60) | Get object coordinates from viewport and mark slot as empty. | ||
| 619E | DEC HL | |||
| 619F | DEC HL | |||
| 61A0 | LD B,(HL) | |||
| 61A1 | DEC HL | |||
| 61A2 | LD C,(HL) | |||
| 61A3 | LD (HL),$00 | |||
| 61A5 | LD D,$00 | Spawn two explosion fragments (second offset by X-6). | ||
| 61A7 | CALL spawn_explosion_fragment | |||
| 61AA | DEC C | |||
| 61AB | DEC C | |||
| 61AC | DEC C | |||
| 61AD | DEC C | |||
| 61AE | DEC C | |||
| 61AF | DEC C | |||
| 61B0 | CALL spawn_explosion_fragment | |||
| 61B3 | LD A,$10 | Award POINTS_FIGHTER to player. | ||
| 61B5 | CALL add_points | |||
| 61B8 | JP finalize_collision | Finalize collision. | ||
| Prev: 6136 | Up: Map | Next: 61BB |