Prev: A7E7 Up: Map Next: A89C
A7F3: Spawns cars
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