fix(physics): match live tangent response transitions
Correct the common projection to spin*0.4 + normal_velocity*response_tangent and seal line/circle behavior against current Wine one-substep traces. Preserve record-two's in-response special-respawn continuation, producing the live (16698,21191)/(-302,-1809) state after publishing (17000,23000)/(0,3040), and update the readable C evidence. Test Plan: - bash original/tools/test_reconstructed_c.sh - python3 original/tools/audit_reconstruction.py --require-complete - cargo test --all-targets - cargo clippy --all-targets --all-features -- -D warnings - rumdl check original/C_RECONSTRUCTION_FINAL_AUDIT.md tdkpin-rs/CHANGELOG.md tdkpin-rs/RECONSTRUCTION.md tdkpin-rs/README.md - live Wine record 2 trace: /tmp/original-special-respawn.csv - live Wine object 155 trace: /tmp/original-circle155-after.csv - git diff --check
This commit is contained in:
@@ -321,6 +321,21 @@ static void test_circle_and_segment_collisions(void)
|
||||
win16_far_add_offset(g_window, 0x0bae)) == 0);
|
||||
assert((int32_t)win16_read_u32(win16_dgroup_pointer(0x07d7)) == 100000);
|
||||
|
||||
prepare_fixture();
|
||||
set_ball(100000, 100000, 0, 1000);
|
||||
segment = base_record(2);
|
||||
segment.point1_x_milli = 50000;
|
||||
segment.point1_y_milli = 101000;
|
||||
segment.point2_x_milli = 150000;
|
||||
segment.point2_y_milli = 101000;
|
||||
segment.response_tangent = (BorlandReal48){{0x7d,0xcd,0xcc,0xcc,0xcc,0x4c}};
|
||||
write_record(1, &segment);
|
||||
tdkpin_simulate_ball_and_dispatch_collision(0x0300);
|
||||
assert((int32_t)win16_read_u32(
|
||||
win16_far_add_offset(g_window, 0x0baa)) == -100);
|
||||
assert((int32_t)win16_read_u32(
|
||||
win16_far_add_offset(g_window, 0x0bae)) == 0);
|
||||
|
||||
prepare_fixture();
|
||||
set_ball(100000, 100000, 1000, 0);
|
||||
circle = base_record(1);
|
||||
|
||||
Reference in New Issue
Block a user