# Function addresses for crates/hst-oracle tests: name hexaddr (boot program or GAME overlay, US 1.00).
atan2f 111b60
atanf 115970
powf 1121f0
sinf 115fb8
cosf 115d18
tanf 1160a0
acosf 111398
asinf 1117c0
# AI run estimate (a0 player, a1 spot x,y,z): hst_sim::ai::Runner::frames_to
ai_run_frames 35bc50
# Instant replay decision (a0 = match object; the point message): hst_sim::instant::decide
instant_replay 325cd0
# Scoreboard point award (a0 = scoreboard), stubbed in the instant replay test (hst_sim::score::Score::point)
score_award 38b820
# Ball-hit obstacle box test (a0 other's matrix, a1 obstacle's matrix, a2 type): hst_sim::npc::boxes_overlap
obstacle_box 3f8380
# Ball speed in km/h (a0 ball, its last move at +0x140): hst_sim::npc::ball_kmh
ball_kmh 375cb0
# Walking spectator's tick (a0 = walker): hst_sim::npc::Walker::tick; its animation tick and set-animation
# (stubbed in the test, ported as Walker::step / set_anim)
walker_tick 39f160
walker_animate 39e8b0
walker_set_anim 39e3a0
# Court + props sphere sweep (a1 hit record, a2 start {pos, r}, a3 end): hst_sim::mesh::World::sweep, hooked in
world_sweep 32f690
# Overhead serve/smash contact IK (a0 player, a1 table 1 = serve, 0 = smash; contact +0x3fb0, position +0x3d70):
# hst_sim::serve::overhead_solve; underhand serve (a0 player): hst_sim::serve::underhand_solve
overhead_arm_solve 358ba0
underhand_arm_solve 359ec0
# C9 (crates/hst-oracle/tests/float_steps.rs). TParam.csv row parser (a0 = row offset into the record table; its
# strtok/atoi/strcmp/memset/decimal-reader calls are hooked): hst_sim::player::Stats::new's speed = SPE / 10
tparam_row 18b5e0
tparam_strtok 120ac8
tparam_strtok_r 120ae8
tparam_atoi 11aae8
tparam_strcmp 1202e0
tparam_memset 11e4e0
tparam_atof 1b32b0
# Shot table lookup (a0 shot block, a1..a3 out elevation/speed/frames, t0..t3 table keys, stack: hit, target
# pointers); its table-pointer and axis-bounds helpers are hooked: hst_sim::shot::lookup
shot_lookup 37dbf0
shot_table 37c750
shot_bounds 37c9a0
# Pad read (a0 = pad struct) and the human run direction (a0 player, a1 out vec4, a2/a3 out words); camera-side
# flag read stubbed: hst_sim::player::pad_dir
pad_read 188880
pad_dir 348ff0
pad_dir_flip 18a470
# the lookup's last frames step: the truncation after its final madd (hooked to read the operands)
shot_frames_trunc 38176c
pad_mode 189f40
pad_motor 18a480
# R4 (crates/hst-oracle/tests/rng.rs). newlib rand() (state: the reentrancy struct's +0xa8; the struct's pointer
# at newlib_impure_ptr): hst_sim::ps2_rand::Rand::next
newlib_rand 11f840
newlib_impure_ptr 1b80f0
# MT19937 object (0x9d0 bytes: words at +4, index +0x9c4, {0, 0x9908b0df} at +0x9c8): seed (a0 object, a1 seed)
# and draw (a0 object): hst_sim::ps2_rand::Mt::new / next
mt_seed 19f4f0
mt_next 19f5c0
# T2 (crates/hst-oracle/tests/rotation.rs). Swept sphere vs plane (a0 hit record, a1 start {pos, r at +0x10},
# a2 end, a3 plane point, t0 normal): hst_sim::contact::sweep; contact point (a0 out, a1 hit record, a2 start,
# a3 end): hst_sim::contact::contact_point
plane_sweep 328ed0
contact_point 12fc30
# Matrix → quaternion (a0 out, a1 matrix), quaternion → re-orthonormalized matrix (a0 out, a1 quat):
# hst_sim::quat::from_matrix / to_matrix; slerp (f12 t, a0 out, a1 from, a2 to) and its bare VU0 micro call
# (same arguments, `vcallms` of the micro program at 0x51 × 8): hst_sim::quat::slerp / micro_slerp
quat_from_matrix 12d620
quat_to_matrix 12d340
quat_slerp 12d860
quat_micro_slerp 175d80
# T3: the VIF0 DMA chain (refe tag → MPG of 251 instructions at 0) the boot code starts at boot to fill VU0's micro
# memory; hst_oracle::hst runs it so `vcallms` finds the programs (data address, not a function)
vu0_boot_chain 1beb00
# Contact dive slide (a0 player: matrix +0x3d40, dive arm +0x3060/+0x30a0; a1 ball, a2 direction, a3/t0 out):
# hst_sim::swing::arm_slide
dive_arm_slide 3509e0
# Rally/smash aim pull inside the court (f12 launch blend, a0 table set, a1 out vec4 = delta to add, a2 class, a3 kind,
# t0 character group = character + 3, t1 hit vec4, t2 aim vec4): hst_sim::shot::Margins::inside (P117)
court_pull 37f740
# Special shot effect check (a0 table set, a1 class, a2 kind, a3 group; t0/t1/t2 out bend, curve, turn; returns
# bend or curve non-zero): shot::special + shot::effect's row (P117)
special_effect_check 37e240
# Timing error setup at the swing (a0 player, a1 contact record, its height at +4, a2 side bits) and its read at the
# launch (a0 player; a1, a2, a3 out side, depth, blend): swing::timing_error / smash_scatter, timing_launch (P117)
timing_error_setup 35b030
timing_error_read 35b640
