Prev: 26097 Up: Map Next: 26225
26154: Bullet and alien collision check, X axis
Check whether the bullet's X axis position matches an alien's location. We already know that the Y axis matches one, so if this does too we have a hit.
This function is also used to see if a suggested new alien bullet lines up with an alien. If it doesn't then that alien bullet isn't generated.
Used by the routines at generate_alien_bullets and bullet_alien_coll_yaxis.
Input
A Bullet X pos in pixels
IX Pointer to alien structure which has y-axis collision
Output
A 0 for no collision, 1 for collision
bullet_alien_coll_xaxis 26154 LD (_TEMP_A_STORE),A Save bullet xpos
26157 CALL prep_alien_row_data Work out this row's left side space, the width of the horde, and the right side space.
26160 LD IX,_ALIEN_ROW_PTR IX points to the alien data structure
26164 LD A,(_TEMP_A_STORE) Pick up bullet xpos again
26167 LD B,A B holds the player bullet xpos in chars
26168 SRL A x2
26170 SRL A x4
26172 SRL A x8, now A holds the player bullet xpos in px
26174 LD (_EXPLOSION_CX_CY),A That's the explosion cx value (we've not yet determined it's needed, but there it is)
26177 SUB (IX+4) Alien row left margin
26180 JR C,no_xpos_hit Left of leftmost alien, no hit
26182 BIT 0,A A is cx, if it's an even value the bullet is on the left half of the 2 char alien which means the bullet is hitting
26184 JR Z,bullet_alien_coll_xaxis_0
26186 BIT 2,B B is x in px, check bit 2
26188 JR NZ,no_xpos_hit If that one is set the bullet is going through the 2 pixel gap to the right of the alien graphic
bullet_alien_coll_xaxis_0 26190 CP (IX+5) Compare with width of alien row
26193 JR NC,no_xpos_hit If the bullet has gone up the right side, no hit
If we arrive here the alien is hit in the x axis. A contains row xchar location of hit (so if the leftmost alien is hit A contains 0 or 1, regardless of where the row is on screen)
26195 AND 254 Reset cx lowest bit, so left half of alien
26197 ADD A,(IX+4) Add to row's left margin
26200 LD (_EXPLOSION_CX_CY),A That's where the explosion needs to go
26203 SUB (IX+2) Next draw is from this cx
26206 LD (_CX_OFFSET_HIT_ALIEN),A
26209 LD C,A Pick up leftmost cx,cy of alien row and add hit alien's offset
26210 LD B,0
26212 LD IX,(_ALIEN_ROW_PTR)
26216 ADD IX,BC
26218 LD A,(IX+2) A goes back with cx
Collision exit point
26221 OR A Flag collision
26222 RET
No collision exit point
no_xpos_hit 26223 XOR A Flag no collision
26224 RET
Prev: 26097 Up: Map Next: 26225