| Chase H.Q. | Routines |
| Prev: B848 | Up: Map | Next: B9F4 |
|
Called from read_map
|
||||||||
| update_road_level | B8D2 | LD A,($A25A) | BC = var_a25a -- set by scroll_horizon | |||||
| B8D5 | LD B,A | |||||||
| B8D6 | LD C,$00 | |||||||
| B8D8 | LD A,($A258) | Load incline ($FD..$03 = climbing..descending) | ||||||
| B8DB | OR A | Set flags | ||||||
| B8DC | JP P,url_incline_set | Jump if road descending (positive incline) | ||||||
|
Otherwise road climbing (negative incline).
|
||||||||
| B8DF | NEG | A = -A -- make positive ($FD..$FF => 3..1) | ||||||
| B8E1 | INC C | C++ -- C becomes 1 | ||||||
| url_incline_set | B8E2 | SUB B | Jump if (A-B) == 0 (B is copy of var_a25a, not used again) | |||||
| B8E3 | JR Z,url_read_road_height | |||||||
| url_incline_was_nonzero | B8E5 | RR C | 9-bit rotate right through carry -- C can be 0 or 1? | |||||
| B8E7 | LD B,$00 | BC = C | ||||||
| B8E9 | JR NC,url_alter_horizon_level | Jump if no carry | ||||||
|
Otherwise negative?
|
||||||||
| B8EB | NEG | A = -A -- invert incline | ||||||
| B8ED | DEC B | B = $FF | ||||||
| url_alter_horizon_level | B8EE | LD HL,($A171) | Point HL at horizon_level | |||||
| B8F1 | LD C,A | C = A | ||||||
| B8F2 | ADD HL,BC | HL += BC | ||||||
| B8F3 | LD ($A171),HL | Store horizon_level | ||||||
| url_read_road_height | B8F6 | LD A,($A240) | Load road_buffer_offset into A | |||||
| B8F9 | ADD A,$22 | Add (32+2) so it's the height data | ||||||
| B8FB | LD H,$EE | Point HL at road buffer height data | ||||||
| B8FD | LD L,A | |||||||
| B8FE | XOR A | Zero var_a25b and var_a25a | ||||||
| B8FF | LD ($A25B),A | |||||||
| B902 | LD ($A25A),A | |||||||
| B905 | LD A,(HL) | A = (height byte) >> 1 | ||||||
| B906 | SRA A | |||||||
| B908 | JP P,url_positive | Jump if positive (or zero?) | ||||||
| B90B | INC A | A++ | ||||||
| url_positive | B90C | LD ($A258),A | incline = A | |||||
| B90F | DEC L | Step back 2 in the height data (frontmost height byte?) | ||||||
| B910 | DEC L | |||||||
| B911 | LD A,(HL) | Read height byte | ||||||
| B912 | LD C,A | Copy to C | ||||||
| B913 | OR A | Set flags | ||||||
| B914 | LD B,$00 | B = 0 | ||||||
| B916 | JR Z,url_ge_3 | Jump if height was zero | ||||||
| B918 | LD B,$06 | B = 6 | ||||||
| B91A | JP P,url_another_positive | Jump if positive | ||||||
|
Else negative.
|
||||||||
| B91D | NEG | A = -A | ||||||
| B91F | LD B,$03 | B = 3 | ||||||
| url_another_positive | B921 | CP $03 | Jump if A >= 3 | |||||
| B923 | JR NC,url_ge_3 | |||||||
| B925 | LD B,$00 | B = 0 | ||||||
| url_ge_3 | B927 | LD A,B | A = B | |||||
| B928 | LD ($B5B0),A | Self modify 'ADD A,x' @ B5AF | ||||||
| B92B | LD HL,$A259 | Address of var_a259 | ||||||
| B92E | LD A,(HL) | Read var_a259 | ||||||
| B92F | AND A | Set flags | ||||||
| B930 | JP P,url_potato | Jump if positive | ||||||
|
Else negative or zero.
|
||||||||
| B933 | BIT 7,C | Test bit 7 | ||||||
| B935 | JR NZ,url_potato | Jump if non-zero | ||||||
|
Else zero.
|
||||||||
| B937 | NEG | A = -A - 2 | ||||||
| B939 | SUB $02 | |||||||
| B93B | JR C,url_potato | Jump if carry (-A < 2) | ||||||
|
Else ?
|
||||||||
| B93D | LD B,A | B = A | ||||||
| B93E | LD A,($B064) | Load jump counter | ||||||
| B941 | AND A | Set flags | ||||||
| B942 | JR NZ,url_potato | Jump if non-zero | ||||||
| B944 | LD DE,($A24A) | DE = speed | ||||||
| B948 | RR D | 9-bit rotate right via carry | ||||||
| B94A | LD A,E | A = E | ||||||
| B94B | RLA | 9-bit rotate left via carry | ||||||
| B94C | RLA | |||||||
| B94D | AND $03 | D = ~(A & 3) + 4 | ||||||
| B94F | CPL | |||||||
| B950 | ADD A,$04 | |||||||
| B952 | LD D,A | |||||||
| B953 | LD A,B | A = B - D | ||||||
| B954 | SUB D | |||||||
| B955 | JR C,url_potato | Jump if <= | ||||||
| B957 | JR Z,url_potato | |||||||
| B959 | PUSH HL | Preserve HL | ||||||
| B95A | RLCA | HL = B057 + A*2 -- 1-indexed pointer into table_b059 [sampled A: 3,2,4] | ||||||
| B95B | LD E,A | |||||||
| B95C | LD D,$00 | |||||||
| B95E | LD HL,$B057 | |||||||
| B961 | ADD HL,DE | |||||||
| B962 | LD E,(HL) | E = *HL++ (loads one of 2/4/6/8/10) | ||||||
| B963 | INC HL | |||||||
| B964 | LD A,(HL) | Load new jump value [sampled: $B060] (loads one of 8/6/4/2/0) | ||||||
| B965 | LD ($B064),A | Set jump counter | ||||||
| B968 | LD HL,$B045 | HL = hero_car_jump_table + E -- points into jump values table | ||||||
| B96B | ADD HL,DE | |||||||
| B96C | LD ($B07A),HL | Self modify mhc_midair (mhc_midair) | ||||||
| B96F | POP HL | Restore HL (which is what?) | ||||||
| url_potato | B970 | LD (HL),C | *HL = C | |||||
| B971 | LD A,($A25C) | Load current_curvature into A | ||||||
| B974 | EX AF,AF' | Preserve it | ||||||
| B975 | LD A,($A240) | Load road_buffer_offset into A | ||||||
| B978 | LD H,$EE | Point HL at road buffer curvature data | ||||||
| B97A | LD L,A | |||||||
| B97B | LD A,($A265) | Test fork_visible | ||||||
| B97E | AND A | |||||||
| B97F | LD A,(HL) | Load a curvature byte | ||||||
| B980 | JR Z,url_fork_not_visible | Jump if fork_visible was zero | ||||||
|
Forked road is visible.
|
||||||||
| url_fork_visible | B982 | LD A,($A269) | Jump if fork_in_progress is zero [set while the road forks] | |||||
| B985 | AND A | |||||||
| B986 | JR Z,url_fork_not_visible | |||||||
| B988 | LD A,($A249) | Check fork_taken | ||||||
| B98B | AND A | |||||||
| B98C | LD A,(HL) | Load a curvature byte again | ||||||
| B98D | JR Z,url_fork_not_visible | Jump if left fork was taken | ||||||
| B98F | NEG | Negate if right fork was taken | ||||||
| url_fork_not_visible | B991 | LD ($A25C),A | Store new curvature value to current_curvature | |||||
| B994 | AND A | Set flags | ||||||
| B995 | LD E,A | E = A | ||||||
| B996 | JR Z,url_b9c2 | Jump if curvature byte was zero | ||||||
| B998 | LD E,$01 | E = 1 | ||||||
| B99A | JP P,url_b9a1 | Jump if positive | ||||||
|
Otherwise negative
|
||||||||
| B99D | RL E | |||||||
| B99F | NEG | A = -A -- make positive | ||||||
| url_b9a1 | B9A1 | LD D,A | D = A | |||||
| B9A2 | ADD A,A | A *= 4 | ||||||
| B9A3 | ADD A,A | |||||||
| B9A4 | LD ($A25D),A | horizon_a25d = A | ||||||
| B9A7 | LD B,A | B = A | ||||||
| B9A8 | LD A,($A25E) | Jump if horizon_a25e is non-zero | ||||||
| B9AB | AND A | |||||||
| B9AC | JR NZ,url_b9c5 | |||||||
| B9AE | LD HL,($A24A) | Load speed into HL | ||||||
| B9B1 | LD A,L | Speed low byte | ||||||
| B9B2 | RR H | Bottom bit of H moves to carry (H now unused) | ||||||
| B9B4 | RLA | A = (A << 3) & 6 | ||||||
| B9B5 | RLA | |||||||
| B9B6 | RLA | |||||||
| B9B7 | AND $06 | |||||||
| B9B9 | ADD A,B | A += B | ||||||
| B9BA | LD C,A | BC = A | ||||||
| B9BB | LD B,$00 | |||||||
| B9BD | LD HL,$B828 | HL = horizon_table + BC | ||||||
| B9C0 | ADD HL,BC | |||||||
| B9C1 | LD A,(HL) | A = *HL | ||||||
| url_b9c2 | B9C2 | LD ($A25E),A | horizon_a25e = A | |||||
| url_b9c5 | B9C5 | LD A,($A262) | A = var_a262 | |||||
| B9C8 | LD B,A | BC = A | ||||||
| B9C9 | LD C,$00 | |||||||
| B9CB | EX AF,AF' | |||||||
| B9CC | AND A | Set flags | ||||||
| B9CD | JP P,url_b9d3 | Jump if positive | ||||||
|
Otherwise negative
|
||||||||
| B9D0 | NEG | A = -A -- make positive | ||||||
| B9D2 | INC C | C++ | ||||||
| url_b9d3 | B9D3 | SUB B | A -= B | |||||
| B9D4 | JR C,url_b9ec | Jump if <= | ||||||
| B9D6 | JR Z,url_b9ec | |||||||
| B9D8 | LD B,A | B = A | ||||||
| B9D9 | ADD A,A | A = A * 4 | ||||||
| B9DA | ADD A,A | |||||||
| B9DB | SRL B | B >>= 1 | ||||||
| B9DD | ADD A,B | A += B | ||||||
| B9DE | RR C | |||||||
| B9E0 | LD B,$00 | B = 0 | ||||||
| B9E2 | JR NC,url_set_hz_adjust | Jump if no carry | ||||||
| url_b9e4 | B9E4 | DEC B | B-- | |||||
| B9E5 | NEG | A = -A | ||||||
| url_set_hz_adjust | B9E7 | LD C,A | C = A | |||||
| B9E8 | LD ($A25F),BC | Set horizontal_adjust to BC (this shifts the car left/right if +ve/-ve) | ||||||
| url_b9ec | B9EC | XOR A | A = 0 | |||||
| B9ED | LD ($A261),A | var_a261 = 0 | ||||||
| B9F0 | LD ($A262),A | var_a262 = 0 | ||||||
| B9F3 | RET | Return | ||||||
| Prev: B848 | Up: Map | Next: B9F4 |