Pyjamarama | Routines |
Prev: B610 | Up: Map |
Used by the routine at Action14_Win.
|
|||||||
The fireworks are update by the use of a script, which holds the position and bitmap of every frame of the animation.
|
|||||||
Fireworks | B654 | LD B,$0A | Number of fireworks to display / update. | ||||
B656 | LD IX,firework_ptrs | Address of table that points to the current info on each firework. | |||||
Fireworks_0 | B65A | PUSH BC | |||||
B65B | LD E,(IX+$02) | Get the current frame for current firework, from the script. | |||||
B65E | LD D,(IX+$03) | ||||||
B661 | LD L,(IX+$04) | Get the end address of firework script. | |||||
B664 | LD H,(IX+$05) | ||||||
B667 | INC DE | Move address onto the next pair of firework info in the script. | |||||
B668 | INC DE | ||||||
B669 | INC DE | ||||||
B66A | INC DE | ||||||
B66B | INC DE | ||||||
B66C | INC DE | ||||||
B66D | OR A | See if address has reached the end of the script. | |||||
B66E | SBC HL,DE | Skip on if HL == DE | |||||
B670 | LD A,H | ||||||
B671 | OR L | ||||||
B672 | JP Z,firework_reset | ||||||
B675 | LD (IX+$02),E | Store new address for next time. | |||||
B678 | LD (IX+$03),D | ||||||
B67B | LD H,D | ||||||
B67C | LD L,E | ||||||
Fireworks_1 | B67D | LD A,(HL) | Get tile | ||||
B67E | INC HL | ||||||
B67F | LD E,(HL) | Get position | |||||
B680 | INC HL | ||||||
B681 | LD D,(HL) | ||||||
B682 | INC HL | ||||||
B683 | LD C,(IX+$06) | Get colour | |||||
B686 | CP $FE | Check for special commands in the tile value. | |||||
B688 | CALL Z,firework_explode | ||||||
B68B | CP $FD | ||||||
B68D | CALL Z,firework_erase | ||||||
B690 | CP $FB | ||||||
B692 | CALL Z,firework_split | ||||||
B695 | INC E | Position right by two cells and draw. | |||||
B696 | INC E | ||||||
B697 | CALL TileDraw | ||||||
B69A | LD A,(HL) | Get info for second of the pair in the script. | |||||
B69B | INC HL | ||||||
B69C | LD E,(HL) | ||||||
B69D | INC HL | ||||||
B69E | LD D,(HL) | ||||||
B69F | CP $FE | Check for special commands in the tile value. | |||||
B6A1 | CALL Z,firework_explode | ||||||
B6A4 | CP $FD | ||||||
B6A6 | CALL Z,firework_erase | ||||||
B6A9 | CP $FB | ||||||
B6AB | CALL Z,firework_split | ||||||
B6AE | INC E | Position right by two cells and draw. | |||||
B6AF | INC E | ||||||
B6B0 | CALL TileDraw | ||||||
B6B3 | LD DE,$0007 | Address of next firework. | |||||
B6B6 | ADD IX,DE | ||||||
B6B8 | LD BC,$0352 | ||||||
Fireworks_2 | B6BB | DEC BC | Pause | ||||
B6BC | LD A,B | ||||||
B6BD | OR C | ||||||
B6BE | JR NZ,Fireworks_2 | ||||||
B6C0 | POP BC | ||||||
B6C1 | DJNZ Fireworks_0 | ||||||
B6C3 | RET | Next. | |||||
Reset firework.
|
|||||||
firework_reset | B6C4 | LD A,R | Create a random colour other than 'Blue' | ||||
B6C6 | AND $07 | ||||||
B6C8 | CP $01 | ||||||
B6CA | JR Z,firework_reset | ||||||
B6CC | SET 6,A | ||||||
B6CE | LD (IX+$06),A | ||||||
B6D1 | LD A,(IX+$00) | Get start address of script and put into 'current' pointer. | |||||
B6D4 | LD (IX+$02),A | ||||||
B6D7 | LD L,A | ||||||
B6D8 | LD A,(IX+$01) | ||||||
B6DB | LD (IX+$03),A | ||||||
B6DE | LD H,A | ||||||
B6DF | PUSH HL | ||||||
B6E0 | PUSH BC | ||||||
B6E1 | PUSH DE | ||||||
B6E2 | LD BC,$320A | Make explosion noise. | |||||
B6E5 | LD DE,$0114 | ||||||
B6E8 | LD HL,$7698 | ||||||
B6EB | CALL Beep_Effect | ||||||
B6EE | POP DE | ||||||
B6EF | POP BC | ||||||
B6F0 | POP HL | ||||||
B6F1 | JP Fireworks_1 | Update firework. | |||||
Start explosion animation.
|
|||||||
firework_explode | B6F4 | LD A,$10 | Draws the two tiles that make up an exploding firework. | ||||
B6F6 | INC E | ||||||
B6F7 | INC E | ||||||
B6F8 | CALL TileDraw | ||||||
B6FB | INC A | ||||||
B6FC | INC E | ||||||
B6FD | CALL TileDraw | ||||||
B700 | INC A | ||||||
B701 | RET | ||||||
Erase firework frame.
|
|||||||
firework_erase | B702 | XOR A | Draw two blank tiles over the firework. | ||||
B703 | INC E | ||||||
B704 | INC E | ||||||
B705 | CALL TileDraw | ||||||
B708 | INC E | ||||||
B709 | CALL TileDraw | ||||||
B70C | RET | ||||||
Draw firework splitting into three.
|
|||||||
firework_split | B70D | LD A,$13 | Draws two tiles that show a firework splitting. | ||||
B70F | INC E | ||||||
B710 | INC E | ||||||
B711 | CALL TileDraw | ||||||
B714 | INC E | ||||||
B715 | INC A | ||||||
B716 | CALL TileDraw | ||||||
B719 | INC A | ||||||
B71A | RET |
Prev: B610 | Up: Map |