| Pyjamarama | Routines |
| Prev: F518 | Up: Map |
|
Used by the routines at Update_Room00 and Invaders_Loop.
|
|||||||
| Inv_BulletUpdate | F51A | LD HL,(Inv_BulletX) | See if a bullet exists, if not then do nothing. | ||||
| F51D | LD A,L | ||||||
| F51E | CP $FF | ||||||
| F520 | RET Z | ||||||
| F521 | EX DE,HL | ||||||
| F522 | LD HL,Invaders_Data | Run through the data of each invader. | |||||
| F525 | LD B,$18 | ||||||
| Inv_BulletUpdate_0 | F527 | LD A,(HL) | Only do anything if invader is active. If it is check for collision. | ||||
| F528 | CP $FE | ||||||
| F52A | JR NZ,Inv_BulletUpdate_4 | ||||||
| Inv_BulletUpdate_1 | F52C | INC HL | Move onto next invaders. | ||||
| Inv_BulletUpdate_2 | F52D | INC HL | |||||
| F52E | DJNZ Inv_BulletUpdate_0 | ||||||
|
Update bullet.
|
|||||||
| F530 | LD HL,(Inv_BulletX) | ||||||
| F533 | LD (BitmapX),HL | ||||||
| F536 | LD A,$BF | Erase Knife and Fork | |||||
| F538 | CALL Bitmap16Draw | ||||||
| F53B | LD A,H | Decrease Y pos by three pixels. | |||||
| F53C | DEC A | ||||||
| F53D | DEC A | ||||||
| F53E | DEC A | ||||||
| F53F | CP $30 | See if at top of screen. | |||||
| F541 | JR C,Inv_BulletUpdate_3 | ||||||
| F543 | LD (Inv_BulletY),A | Store new position. | |||||
| F546 | LD (BitmapY),A | ||||||
| F549 | LD A,$BF | Draw Knife and Fork | |||||
| F54B | CALL Bitmap16Draw | ||||||
| F54E | RET | ||||||
|
Disable bullet.
|
|||||||
| Inv_BulletUpdate_3 | F54F | LD A,$FF | |||||
| F551 | LD (Inv_BulletX),A | ||||||
| F554 | RET | ||||||
|
Check collision.
HL - Invader position.
DE - Bullet position.
|
|||||||
| Inv_BulletUpdate_4 | F555 | LD A,E | See if bullet Y is within range of invader. | ||||
| F556 | SUB (HL) | ||||||
| F557 | SUB $10 | ||||||
| F559 | CP $E0 | ||||||
| F55B | JR C,Inv_BulletUpdate_1 | Next invader if not. | |||||
| F55D | INC HL | Check against X position of bullet. | |||||
| F55E | LD A,D | ||||||
| F55F | SUB (HL) | ||||||
| F560 | SUB $10 | ||||||
| F562 | CP $E0 | ||||||
| F564 | JR C,Inv_BulletUpdate_2 | Next invader if not. | |||||
|
Hit.
|
|||||||
| F566 | DEC HL | ||||||
| F567 | LD (BitmapX),DE | Update position of bullet. | |||||
| F56B | LD A,$FF | Set as disabled. | |||||
| F56D | LD (Inv_BulletX),A | ||||||
| F570 | LD A,$BF | Erase image. | |||||
| F572 | CALL Bitmap16Draw | ||||||
| F575 | LD E,(HL) | GEt X position of invader. | |||||
| F576 | LD (HL),$FE | Set as disabled as well. | |||||
| F578 | INC HL | Get y position. | |||||
| F579 | LD D,(HL) | ||||||
| F57A | LD (BitmapX),DE | Set position for draw. | |||||
| F57E | DEC HL | See if draw needs to current frame or the next frame by checking where pointer is within the invaders data. | |||||
| F57F | LD DE,(Inv_DataPtr) | ||||||
| F583 | DEC DE | ||||||
| F584 | AND A | ||||||
| F585 | SBC HL,DE | If its before the current position use the next frame, if same or after use current frame. | |||||
| F587 | JR NC,Inv_BulletUpdate_5 | ||||||
| F589 | LD A,(Inv_NextFrame) | ||||||
| F58C | JR Inv_BulletUpdate_6 | ||||||
| Inv_BulletUpdate_5 | F58E | LD A,(Inv_CurrentFrame) | |||||
| Inv_BulletUpdate_6 | F591 | CALL Bitmap16Draw | Erase invader. | ||||
| F594 | LD HL,(BitmapX) | ||||||
| F597 | CALL Arcade_CreateExplosions | Special effects. | |||||
| F59A | LD HL,Invaders_PauseValue | Speed up invaders slightly. | |||||
| F59D | DEC (HL) | ||||||
| F59E | RET NZ | ||||||
| F59F | CALL Invaders_NextStage | Carry on if invaders left. | |||||
| F5A2 | LD SP,$0000 | ||||||
| F5A5 | JP Invaders_Loop | ||||||
| Prev: F518 | Up: Map |