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 |