Prev: 6EBC Up: Map Next: 6F63
6EC8: Process and render all active explosions
Iterates through the explosions set at exploding_fragments via pointer exploding_fragments_ptr. Each explosion has 6 animation frames before being removed. Adjusts Y position based on scroll speed.
render_explosions 6EC8 LD HL,($5F62) Load 3-byte entry from set: C=X, B=Y offset, D=frame. Advance pointer exploding_fragments_ptr.
6ECB LD C,(HL)
6ECC INC HL
6ECD LD B,(HL)
6ECE INC HL
6ECF LD D,(HL)
6ED0 INC HL
6ED1 LD ($5F62),HL
6ED4 LD A,C Skip empty entries, continue to next.
6ED5 CP $00
6ED7 JP Z,render_explosions
6EDA CP $FF If end-of-set marker, jump to reset_explosions_pointer to reset pointer.
6EDC JP Z,reset_explosions_pointer
6EDF LD A,($5F64) Add scroll speed (state_speed) to Y offset, store back.
6EE2 ADD A,B
6EE3 DEC HL
6EE4 DEC HL
6EE5 LD (HL),A
6EE6 LD A,D Extract frame number (bits 0-6), increment. If frame == 7, entry complete.
6EE7 AND $7F
6EE9 INC A
6EEA CP $07
6EEC JP Z,remove_explosion_entry
6EEF LD A,D Increment frame counter and store back.
6EF0 INC A
6EF1 INC HL
6EF2 LD (HL),A
6EF3 LD A,B Check if Y position is off-screen (AND $88 == $88). Skip if so.
6EF4 AND $88
6EF6 CP $88
6EF8 JP Z,render_explosions
6EFB LD A,B Check if Y position is off-screen (AND $90 == $90). Skip if so.
6EFC AND $90
6EFE CP $90
6F00 JP Z,render_explosions
6F03 LD A,(HL) Get frame number. Load sprite for frame 1.
6F04 AND $7F
6F06 CP $01
6F08 CALL Z,ld_sprite_explosion_f1 Load sprite for frame 2.
6F0B CP $02
6F0D CALL Z,ld_sprite_explosion_f2 Load sprite for frame 3.
6F10 CP $03
6F12 CALL Z,ld_sprite_explosion_f3 Load sprite for frame 4 (same as 2).
6F15 CP $04
6F17 CALL Z,ld_sprite_explosion_f2 Load sprite for frame 5 (same as 1).
6F1A CP $05
6F1C CALL Z,ld_sprite_explosion_f1 Load erasure sprite for frame 6.
6F1F CP $06
6F21 CALL Z,ld_sprite_explosion_erasure
6F24 LD A,(HL) Set up sprite rendering: store sprite pointer, set collision mode to none, configure rendering parameters.
6F25 LD HL,$82C5
6F28 LD ($8B0E),HL
6F2B LD ($8B10),DE
6F2F LD D,A
6F30 LD A,$00
6F32 LD ($5EF5),A
6F35 LD A,$02
6F37 LD ($8B1A),A
6F3A LD A,D
6F3B LD DE,$080C
6F3E LD ($8B0A),BC
6F42 LD ($8B0C),BC
6F46 LD BC,$0000 Check bit 7 of frame. If set, skip first render call.
6F49 BIT 7,A
6F4B JP NZ,render_explosions_next
6F4E PUSH DE
6F4F PUSH BC
6F50 PUSH AF
6F51 PUSH HL
6F52 LD A,$02 Call first sprite rendering pass.
6F54 CALL set_sprite_attributes
6F57 POP HL Restore registers from stack.
6F58 POP AF
6F59 POP BC
6F5A POP DE
render_explosions_next 6F5B LD A,$02 Call second sprite rendering pass, loop to next entry.
6F5D CALL render_object_entry
6F60 JP render_explosions
Prev: 6EBC Up: Map Next: 6F63