| Gyruss | Routines |
| Prev: 8C52 | Up: Map | Next: 8D21 |
|
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 |