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 |