![]() |
Routines |
Prev: 99D1 | Up: Map | Next: 9AE1 |
Used by the routine at 9470.
|
||||
99E3 | LD IY,$9CFD | Set IY to the address for explosion data position and index graphic data | ||
99E7 | LD B,$10 | Set B the number of explosions | ||
99E9 | PUSH BC | Save BC | ||
99EA | LD A,(IY+$00) | Set A the index of explosion graphic data | ||
99ED | OR A | if index = 0 jump forward to configure explosion position | ||
99EE | JP Z,$9A6B | |||
99F1 | LD B,A | Multiply index number by 72 (length of graphic data explosion) | ||
99F2 | LD DE,$0048 | |||
99F5 | CALL $C95B | |||
99F8 | LD DE,$8490 | Set A1CD to the address point for the current graphic data explosion | ||
99FB | ADD HL,DE | |||
99FC | LD ($A1CD),HL | |||
99FF | LD A,(IY+$01) | Set A248 the x-position for the explosion | ||
9A02 | LD ($A248),A | |||
9A05 | LD A,(IY+$02) | Set A the y-position for the explosion | ||
9A08 | CP $A8 | Jump forward to configure (x-y) position if y-position is greater than 168 or less than 24 | ||
9A0A | JP NC,$9A6B | |||
9A0D | CP $18 | |||
9A0F | JP C,$9A6B | |||
9A12 | LD ($A249),A | Set A249 the y-position of explosion | ||
9A15 | LD A,$03 | Set A24A the width in bytes for the sprite | ||
9A17 | LD ($A24A),A | |||
9A1A | LD A,$18 | Set A24B the height in pixels of the sprite | ||
9A1C | LD ($A24B),A | |||
9A1F | LD A,$FF | Set A1CC the entity type for explosion | ||
9A21 | LD ($A1CC),A | |||
9A24 | XOR A | Set A the facing direction to right | ||
9A25 | CALL $9AE5 | Draw the explosion | ||
9A28 | LD A,(IY+$01) | Set A248 the x-position for the explosion | ||
9A2B | LD ($A248),A | |||
9A2E | LD A,(IY+$02) | Set A249 the y-position of explosion | ||
9A31 | LD ($A249),A | |||
9A34 | CALL $9B4D | Compute address into attribute file based on (x,y) position | ||
9A37 | LD A,(IY+$00) | Increment index of explosion | ||
9A3A | INC A | |||
9A3B | LD (IY+$00),A | |||
9A3E | CP $09 | Jump forward and process next explosion if index is less than 9 | ||
9A40 | JP NZ,$9A51 | |||
9A43 | LD (IY+$00),$00 | Set index to 0 | ||
9A47 | LD HL,($A22C) | Set HL to the address into the attribute file for the explosion | ||
9A4A | LD DE,($A22E) | Set DE to the address into the attribute buffer for the explosion | ||
9A4E | CALL $BBEA | Reset attribute color when explosion ended | ||
handle next explosion
|
||||
9A51 | LD DE,$0003 | Point IY to the next explosion data | ||
9A54 | ADD IY,DE | |||
9A56 | POP BC | Restore BC | ||
9A57 | DJNZ $99E9 | Jump back and process next explosion | ||
9A59 | LD A,($A269) | Decrement explosion counter | ||
9A5C | DEC A | |||
9A5D | LD ($A269),A | |||
9A60 | CP $82 | If explosion counter is 130 then decrement data pairs for offset position | ||
9A62 | CALL Z,$9CBC | |||
9A65 | CP $64 | If explosion counter is 100 then jump to draw final windows | ||
9A67 | JP Z,$9AD5 | |||
9A6A | RET | |||
configure explosion position
|
||||
9A6B | LD A,($A269) | If explosion counter is less than 120 then jump to process next explosion | ||
9A6E | CP $78 | |||
9A70 | JP C,$9A51 | |||
9A73 | CALL $A51D | If generated random number is less than 150 then jump to process next explosion | ||
9A76 | CP $96 | |||
9A78 | JP C,$9A51 | |||
computes x-position of explosion
|
||||
9A7B | LD HL,($A26A) | Set HL to the address into table offset for compute explosion location | ||
9A7E | LD A,$68 | Substract x-offset to x-position of FINAL BOSS (104) | ||
9A80 | SUB (HL) | |||
9A81 | LD E,A | Set E the x-position for explosion | ||
9A82 | CALL $A530 | Set A a pseudo random number | ||
9A85 | LD HL,($A26A) | Increment address into explosion data offsets | ||
9A88 | INC HL | |||
9A89 | AND (HL) | And pattern for random number | ||
9A8A | SLA A | Multiply by 8 this number and add to the previous partial computed position x-position of explosion = x-position of FINAL BOSS - offset #1 + (random & offset #2)*8 | ||
9A8C | SLA A | |||
9A8E | SLA A | |||
9A90 | ADD A,E | |||
9A91 | AND $F8 | Set new position grid fixed | ||
9A93 | CP $F0 | If x-position of explosion is greater than 230 jump forward and handle next explosion | ||
9A95 | JP NC,$9A51 | |||
9A98 | LD (IY+$01),A | Set the new x-position into explosion data buffer | ||
9A9B | LD ($A248),A | Set A248 the x-position of the explosion | ||
computes y-position of explosion
|
||||
9A9E | LD A,$68 | Substract y-offset to y-position of FINAL BOSS (104) | ||
9AA0 | LD HL,($A26A) | |||
9AA3 | SUB (HL) | |||
9AA4 | LD E,A | Set E the x-position for explosion | ||
9AA5 | CALL $A530 | Set A a pseudo random number | ||
9AA8 | LD HL,($A26A) | Increment address into explosion data offsets | ||
9AAB | INC HL | |||
9AAC | AND (HL) | And pattern for random number | ||
9AAD | SLA A | Multiply by 8 this number and add to the previous partial computed position y-position of explosion = y-position of Rex - offset #1 + (random & offset #2)*8 | ||
9AAF | SLA A | |||
9AB1 | SLA A | |||
9AB3 | ADD A,E | |||
9AB4 | AND $F8 | Set new position grid fixed | ||
9AB6 | LD (IY+$02),A | Set the new y-position into explosion data buffer | ||
9AB9 | LD ($A249),A | Set A249 the y-position of the explosion | ||
9ABC | LD (IY+$00),$01 | Increment graphic data index of explosion | ||
configure sound explosion
|
||||
9AC0 | CALL $A51D | Generate a random number between 1 and 3 for channel sound | ||
9AC3 | AND $03 | |||
9AC5 | OR A | |||
9AC6 | JP Z,$9AC0 | |||
9AC9 | LD ($D528),A | Set the random channel used for explosion | ||
9ACC | LD DE,$D528 | Set DE to address for explosion sound | ||
9ACF | CALL $D37F | Configure sound channel and mixer register | ||
9AD2 | JP $9A51 | Jump back and process next explosion | ||
Draw final windows
|
||||
9AD5 | LD IX,$AB6E | Set IX tht text definition for end game text | ||
9AD9 | LD B,$05 | Set B the number of lines to drae | ||
9ADB | CALL $A2E6 | Draws end game windows | ||
9ADE | JP $9ADE | Infinite loop |
Prev: 99D1 | Up: Map | Next: 9AE1 |