| Chase H.Q. | Routines |
| Prev: A7E7 | Up: Map | Next: A89C |
|
Used by the routines at main_loop and cpu_driver. Return and don't spawn anything if perp_caught_phase or stop_car_spawning flags are set.
|
||||
| spawn_cars | A7F3 | LD A,($A230) | ||
| A7F6 | LD C,A | |||
| A7F7 | LD A,($A225) | |||
| A7FA | OR C | |||
| A7FB | RET NZ | |||
|
Return and don't spawn anything if allow_spawning is zero.
|
||||
| A7FC | LD A,($A254) | |||
| A7FF | AND A | |||
| A800 | RET Z | |||
| A801 | NEG | A = <self modified> - allow_spawning (can be 1 or 2) | ||
| A803 | ADD A,$14 | |||
| A805 | LD ($A804),A | Self modify above | ||
| A808 | RET C | Return if carry set -- when's it set? | ||
|
Start spawning cars.
Call rng and take the bottom four bits of the result. Put it in C
|
||||
| A809 | CALL rng | |||
| A80C | AND $0F | |||
| A80E | LD C,A | |||
| A80F | LD A,($A22E) | Load and test sighted_flag | ||
| A812 | AND A | |||
| A813 | LD A,($5D1A) | Load car_spawn_rate | ||
| A816 | JR Z,sc_set | Jump (don't boost) if sighted_flag was zero | ||
|
Perp was sighted.
|
||||
| sc_boost | A818 | ADD A,$19 | Boost rate by 25 when perp sighted | |
| sc_set | A81A | ADD A,C | Add random factor (0..15) in C to rate | |
| A81B | LD ($A804),A | Self modify spawn value above | ||
| A81E | LD BC,$0500 | B = 5 iterations; C = 0 - a flag? | ||
| A821 | LD IX,$A19C | Point IX at hazards[1] | ||
| A825 | LD DE,$0014 | Stride of hazards is 20 bytes | ||
| sc_loop | A828 | RLC (IX+$00) | If the hazard is not active jump to sc_fill_in | |
| A82C | JR NC,sc_fill_in | |||
| A82E | LD A,(IX+$0F) | A = IX[15] -- what are we reading here? | ||
| A831 | RLA | Shift a bit out left into carry flag | ||
| A832 | JP NC,sc_continue | Continue if clear | ||
| A835 | RL C | Shift carry into C | ||
| sc_continue | A837 | ADD IX,DE | Advance to next hazard | |
| A839 | DJNZ sc_loop | Loop to sc_loop while B > 0 | ||
| A83B | RET | Return | ||
| sc_fill_in | A83C | BIT 2,C | test bit 2 of ? | |
| A83E | RET NZ | Return if set? | ||
| A83F | PUSH IX | DE = IX | ||
| A841 | POP DE | |||
| A842 | LD BC,$0014 | BC = 20 | ||
| A845 | LD HL,$A623 | Point HL at hazard_template | ||
| A848 | LDIR | Copy hazard_template | ||
| A84A | LD C,$14 | Buffer offset of 20 for get_spawn_lanes | ||
| A84C | CALL get_spawn_lanes | Call get_spawn_lanes -- Gets car spawning positions (B = min, C = max?) | ||
| A84F | CALL rng | Call rng | ||
| A852 | AND $03 | A = (A & 3) + B | ||
| A854 | ADD A,B | |||
| A855 | CP C | If A >= C A = C | ||
| A856 | JR C,sc_a859 | |||
| A858 | LD A,C | |||
| sc_a859 | A859 | LD (IX+$11),A | IX[17] = A | |
| A85C | LD (IX+$12),A | IX[18] = A | ||
| A85F | LD HL,$A7E6 | A = $A7E6[A] | ||
| A862 | LD B,$00 | |||
| A864 | LD C,A | |||
| A865 | ADD HL,BC | |||
| A866 | LD A,(HL) | |||
| A867 | LD (IX+$05),A | IX[5] = A | ||
| A86A | LD A,($A22E) | Load sighted_flag | ||
| A86D | AND A | Set flags | ||
| A86E | LD A,$04 | A = 4 | ||
| A870 | JR Z,sc_a873 | |||
| A872 | ADD A,A | A <<= 1 | ||
| sc_a873 | A873 | LD C,A | HL += A | |
| A874 | ADD HL,BC | |||
| A875 | LD A,(HL) | IX[13] = *HL | ||
| A876 | LD (IX+$0D),A | |||
| A879 | CALL rng | Call rng | ||
| A87C | AND $06 | C = A & 6 | ||
| A87E | LD C,A | |||
| A87F | LD A,($A22E) | Load sighted_flag | ||
| A882 | AND A | Set flags | ||
| A883 | JR Z,sc_a88c | |||
| A885 | LD A,$06 | A = 6 | ||
| A887 | CP C | |||
| A888 | JR NZ,sc_a88c | |||
| A88A | DEC C | C-- | ||
| A88B | DEC C | |||
| sc_a88c | A88C | LD B,$00 | B = 0 | |
| A88E | LD HL,$5D12 | HL = &lods_vehicles (first of the generic car LODs) | ||
| A891 | ADD HL,BC | HL += BC | ||
| A892 | LD A,(HL) | wordat(IX+9) = HL | ||
| A893 | INC HL | |||
| A894 | LD (IX+$09),A | |||
| A897 | LD A,(HL) | |||
| A898 | LD (IX+$0A),A | |||
| A89B | RET | Return | ||
| Prev: A7E7 | Up: Map | Next: A89C |