![]() |
Routines |
| Prev: 62694 | Up: Map | Next: 63257 |
|
Used by the routine at RunHandlers.
|
|||||||
| Handler_Projectiles | 63135 | LD B,6 | B=6 (number of possible projectiles). | ||||
| 63137 | LD HL,54029 | HL=Table_Projectiles. | |||||
| Handler_Projectiles_Loop | 63140 | PUSH BC | Stash current projectile on the stack. | ||||
| 63141 | LD A,(HL) | Jump to Collision_Projectiles_Next if this projectile is not active. | |||||
| 63142 | AND A | ||||||
| 63143 | JR Z,Collision_Projectiles_Next | ||||||
|
This projectile is active so let's process it.
|
|||||||
| 63145 | INC A | Increment A by one. | |||||
| 63146 | LD (HL),A | Write A to *HL. | |||||
| 63147 | LD E,A | E=A. | |||||
| 63148 | INC HL | Increment HL by one. | |||||
| 63149 | LD B,(HL) | B=*HL. | |||||
| 63150 | PUSH HL | Stash HL on the stack. | |||||
| 63151 | INC HL | Increment HL by one. | |||||
| 63152 | LD C,(HL) | C=*HL. | |||||
| 63153 | CP 65 | Jump to Handler_Projectiles_0 if A is higher than 65. | |||||
| 63155 | JR NC,Handler_Projectiles_0 | ||||||
| 63157 | LD HL,51369 | HL=51369. | |||||
| 63160 | JR Handler_Projectiles_1 | Jump to Handler_Projectiles_1. | |||||
| Handler_Projectiles_0 | 63162 | LD HL,51350 | HL=51350. | ||||
| Handler_Projectiles_1 | 63165 | LD A,1 | Write 1 to *54271. | ||||
| 63167 | LD (54271),A | ||||||
| 63170 | LD A,E | A=E. | |||||
| 63171 | AND %00111111 | Keep only bits 0-5. | |||||
| 63173 | DEC A | Decrease A by one. | |||||
| 63174 | CALL 60250 | Call 60250. | |||||
| 63177 | EX AF,AF' | Exchange the AF register with the shadow AF register. | |||||
| 63178 | BIT 4,A | Jump to Handler_Projectiles_2 if bit 4 of A is not set. | |||||
| 63180 | JR Z,Handler_Projectiles_2 | ||||||
| 63182 | INC B | Increment B by one. | |||||
| Handler_Projectiles_2 | 63183 | XOR A | Write 0 to *54271. | ||||
| 63184 | LD (54271),A | ||||||
| 63187 | POP HL | Restore HL from the stack. | |||||
| 63188 | LD A,C | A=C. | |||||
| 63189 | CP 32 | Jump to RemoveProjectile if A is higher than 32. | |||||
| 63191 | JR NC,RemoveProjectile | ||||||
| 63193 | LD A,B | A=B. | |||||
| 63194 | CP 24 | Jump to RemoveProjectile if A is higher than 24. | |||||
| 63196 | JR NC,RemoveProjectile | ||||||
| 63198 | PUSH HL | Stash HL on the stack. | |||||
| 63199 | CALL GetSpriteID | Call GetSpriteID. | |||||
| 63202 | AND A | Jump to DrawProjectile if A is zero. | |||||
| 63203 | JR Z,DrawProjectile | ||||||
| 63205 | CP 193 | Jump to DrawProjectile if A is higher than 193. | |||||
| 63207 | JR NC,DrawProjectile | ||||||
| 63209 | AND %00111111 | Keep only bits 0-5. | |||||
| 63211 | CP 50 | Jump to DrawProjectile if A is higher than 50. | |||||
| 63213 | JR NC,DrawProjectile | ||||||
|
There's been a hit, find out which monster.
|
|||||||
| 63215 | LD A,(HL) | A=*HL. | |||||
| 63216 | CALL Convert_To_MonsterData | Call Convert_To_MonsterData. | |||||
|
Take off two hit points from the monsters energy.
|
|||||||
| 63219 | LD A,2 | A=2 (damage). | |||||
| 63221 | CALL Handler_DecreaseEnergy | Call Handler_DecreaseEnergy. | |||||
| 63224 | JR Audio_Projectiles_Hit | Jump to Audio_Projectiles_Hit. | |||||
|
Draw the projectile to the buffer.
|
|||||||
| DrawProjectile | 63226 | POP HL | Restore HL from the stack. | ||||
| 63227 | LD (HL),B | Update the co-ordinates in the projectile table data. | |||||
| 63228 | INC HL | ||||||
| 63229 | LD (HL),C | ||||||
| 63230 | PUSH HL | Stash HL on the stack. | |||||
| 63231 | LD A,246 | A=sprite ID 246.
|
|||||
| 63233 | CALL PrintSprite | Call PrintSprite. | |||||
| 63236 | POP HL | Restore HL from the stack. | |||||
| 63237 | JR Collision_Projectiles_Skip | Jump to Collision_Projectiles_Skip. | |||||
|
The projectile has either made a hit, or not, either way the journey is over - so remove it.
|
|||||||
| RemoveProjectile | 63239 | DEC HL | Decrease HL by one. | ||||
| 63240 | LD (HL),0 | Write 0 to the projectile state. | |||||
| 63242 | LD A,(54266) | Decrease *NumberProjectiles by one. | |||||
| 63245 | DEC A | ||||||
| 63246 | LD (54266),A | ||||||
| Collision_Projectiles_Next | 63249 | INC HL | Move onto the next projectile table data. | ||||
| 63250 | INC HL | ||||||
| Collision_Projectiles_Skip | 63251 | INC HL | |||||
| 63252 | POP BC | Restore projectile ID from the stack. | |||||
| 63253 | DEC B | Decrease projectile ID by one. | |||||
| 63254 | JR NZ,Handler_Projectiles_Loop | Jump to Handler_Projectiles_Loop until all projectiles have been processed. | |||||
| 63256 | RET | Return. | |||||
| Prev: 62694 | Up: Map | Next: 63257 |