Routines |
Prev: 57947 | Up: Map | Next: 58032 |
Used by the routine at 53403.
|
||||
Called from 53475 if byte 7 or 8 of missile data (27868/60317) is repelled by the active spell effect
Collision detection for SHIELD, PROTECT, DEFENCE and AMULET vs missile/bolt spells.
Because the shield effect flickers to Maroc's left and right, his 'hit boxes' are slightly wider than normal to accommodate this (vertical = 24 pixels at 58007, horizontal 48 pixels at 58018)
|
||||
57990 | LD A,(60116) | High byte of missile horizontal co-ordinate | ||
57993 | CP 0 | This byte is 0 if the item is visible on-screen | ||
57995 | JR NZ,58029 | If not, jump to the end of this routine | ||
Missile is on-screen. First a horizontal co-ordinate collision check:
|
||||
57997 | LD A,(60114) | Graphic's vertical pixel position | ||
58000 | LD C,A | Copy to C register | ||
58001 | LD A,(60097) | Maroc's vertical (Y-axis) screen position | ||
58004 | ADD A,12 | Move the target centre down 12 pixels (towards the bottom of Maroc's sprite). The vertical 'hit box' of 24 pixels will extend upwards from here | ||
58006 | SUB C | Subtract the missile's vertical position | ||
58007 | CP 24 | Is the missile within 24 pixels from this vertical position? | ||
58009 | JR NC,58029 | If margin is >=24 pixels, it's missed vertically so no need to run the horizontal check | ||
Horizontal check is within 'hit box'. Next, a vertical co-ordinate collision check:
|
||||
58011 | LD A,(60115) | Graphic's horizontal pixel position | ||
58014 | LD C,A | Copy to C register | ||
58015 | LD A,140 | Maroc's horizontal pixel position on screen doesn't change - this pixel position is at the barrier just to the right hand size of Maroc's sprite. The horizontal 'hit box' of 48 pixels extends to the left from here | ||
58017 | SUB C | Subtract the missile's horizontal pixel position | ||
58018 | CP 48 | Is the missile within 48 pixels from this horizontal position? | ||
58020 | JR NC,58029 | If it's outside this range, no collision | ||
The missile has collided with Maroc while he's protected by his shielding spell:
|
||||
58022 | LD A,8 | |||
58024 | LD (60246),A | Set the sound effect duration affecting length of 'crunching' sound as the missile strikes Maroc & his shield (duration = 8) This also acts as a non-zero collision flag value, indicating a positive collision check |
||
58027 | JR 58031 | ...and skip the next instruction, jump straight to RET | ||
No collision detected
|
||||
58029 | LD A,0 | Collision check flag value = 0 (no collision) | ||
58031 | RET |
Prev: 57947 | Up: Map | Next: 58032 |