Prev: 8C52 Up: Map Next: 8D21
8C68: When wave is initiating
Called when there's still more outcoming enemies. Used by the routine at manage_waves.
handle_wave_outcoming 8C68 LD HL,wave_speed_counter Decrement wave speed counter
8C6B DEC (HL) ...
8C6C RET P Return if > 0
This entry point is used by the routine at start_new_wave.
handle_wave_outcoming_0 8C6D LD IY,(wave_data_address) Get wave data address
8C71 PUSH IY Save pointer
8C73 LD A,(IY+$02) Get byte 3
8C76 RLCA Shift bit 5-7 into 0-2
8C77 RLCA ...
8C78 RLCA ...
8C79 AND $07 And isolate them
8C7B PUSH AF
8C7C CALL stage_data_addr Get stage data address in IY
8C7F POP AF
8C80 ADD A,(IY+$00) Add 2 times stage speed
8C83 ADD A,(IY+$00) ...
8C86 LD (wave_speed_counter),A Store as new speed counter value
8C89 POP IY Restore wave data address
8C8B LD B,$0E Default sprite type (enemy)
8C8D LD A,(status_flags) Is it chance stage?
8C90 BIT 3,A ...
8C92 JR Z,handle_wave_outcoming_1 If not, skip ahead
8C94 LD A,(stage) Get stage
8C97 AND $FC Isolate planet index bits
8C99 LD HL,wave Add wave
8C9C ADD A,(HL) ...
8C9D LD HL,$8E0C Table at enemies_by_wave_table - 1
8CA0 RST $08 Add A (1-24) to HL
8CA1 LD B,(HL) Get table value
handle_wave_outcoming_1 8CA2 RST $28 Allocate sprite
8CA3 LD (IX+$00),B Set sprite type
8CA6 LD A,(IY+$03) Get wave data byte 3
8CA9 RRA Shift bits 4-7 to 0-3
8CAA RRA ...
8CAB RRA ...
8CAC RRA ...
8CAD AND $0F Isolate bits 0-3
8CAF LD (IX+$0B),A Set color
8CB2 LD A,(IY+$03) Get wave data byte 3
8CB5 AND $0F Isolate bits 0-3
8CB7 LD C,A BC = A = table offset (actually only 0 - 2)
8CB8 LD B,$00 ...
8CBA LD HL,wave_init_polar_y Table base address
8CBD ADD HL,BC Table address
8CBE LD A,(HL) Get table byte
8CBF LD (IX+$01),A Save as polar y
8CC2 LD A,(outcoming_enemies) Outcoming enemies
8CC5 LD C,(IY+$00) Get wave data byte 0
8CC8 BIT 0,A Even number of outcoming enemies?
8CCA JR Z,handle_wave_outcoming_2 Skip ahead if so
8CCC LD C,(IY+$01) Get wave data byte 1
handle_wave_outcoming_2 8CCF LD A,C A = wave data byte
8CD0 AND $7F Clear bit 7
8CD2 LD (IX+$02),A Save as polar x
8CD5 LD A,(IY+$02) Get wave data byte 2
8CD8 AND $1F Isolate bits 0-4
8CDA ADD A,A x2
8CDB LD C,A BC = offset
8CDC LD HL,wave_address_table Table base address
8CDF ADD HL,BC Table address
8CE0 LD A,(HL) Get LSB
8CE1 INC HL Next table address
8CE2 LD H,(HL) Get MSB
8CE3 LD L,A L = LSB
8CE4 LD (IX+$06),L Store in sprite data (pointer to path data?)
8CE7 LD (IX+$07),H ...
8CEA LD A,(HL) Get first byte
8CEB AND $F0 Isolate bits 4-7
8CED LD B,A Store in B
8CEE LD A,(outcoming_enemies) Outcoming enemies
8CF1 OR B OR bits 4-7
8CF2 LD (IX+$03),A Store in sprite data
8CF5 RST $30 Load sprite pattern
8CF6 LD HL,active_enemies Increment active enemies
8CF9 INC (HL) ...
8CFA LD HL,total_enemies Increment total enemies
8CFD INC (HL) ...
8CFE LD HL,outcoming_enemies Increment outcoming enemies
8D01 INC (HL) ...
8D02 LD B,$09 B = 9 enemies
8D04 LD A,(status_flags) Is it chance stage?
8D07 BIT 3,A ...
8D09 JR Z,handle_wave_outcoming_3 If not, skip ahead
8D0B LD B,$0A Else B = 10 enemies
handle_wave_outcoming_3 8D0D LD A,(HL) Increased outcoming enemies
8D0E CP B Compare with 9 or 10
8D0F RET NZ Return if all are not out
8D10 LD (HL),$00 Set outcoming enemies to 0
8D12 LD HL,other_flags Clear flag that was set
8D15 RES 6,(HL) when the wave started
8D17 CALL stage_data_addr Get stage data address in IY
8D1A LD A,(IY+$06) Set countdown
8D1D LD (countdown_to_wave),A ...
8D20 RET
Prev: 8C52 Up: Map Next: 8D21