Shared-header prerequisite packet:
- real_math.h: distance2d/distance3d become square_root(distance_squared*(a,b))
(/Od build, no local); project_point2d takes short mapping locals and a
single ?: store (/Od-attested, equal to January's selected copy);
lock/unlock_global_random_seed move from the 2026-09-04 reconstruction
header random_math.h into real_math.h's existing RANDOM_MATH.C prototype
section (main.c calls them without random_math.h).
- action_vehicle, path_obstacles, decals drop their '#define x x_inline'
renames and hand-written NODUP helper copies; the header inlines now emit
byte-identical copies of January's selected sections.
- object_lights and players adopt the /Od caller spellings (0x5d0d50).
Full ninja + rename-stable 8,245-function diff: +2 exact
(_player_set_action_result, _convex_hull2d_perimeter; park retired),
0 regressions. _ai_test_line_of_sight park remeasured (size/relocations
unchanged, fuzzy 97.98 -> 97.92).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lane D refresh packet 3: HS, effects and structures, +6,896 padded bytes
strict exact (9 functions), zero stable-verdict regressions.
- hs_compile.c: _hs_add_script exact as a goto-free single-exit function.
The worker's discarded hs_function_get call in hs_compile_postprocess
(fuzzy only; the debug build shows a dead local, not a bare call) is not
landed.
- hs_runtime.c: _hs_global_reconcile_read/_write exact. The debug build
repeats the external/internal index test inside the external arm; it is
written with this file's own if/else index idiom instead of the worker's
invented macro name.
- contrails.c: _contrail_add_points exact (contrail_scale_value helper,
corrected indentation).
- particle_systems.c: _particle_system_new_particle_jet, _render and
_update_particle_default exact. The debug build attests the one-field
variables walk (RTC size 4), the render if-block scope and the two-argument
local_random_range call.
- structures.c: _structure_get_planar_fog exact (real scale_vector3d helper;
flags/screen assigned in both arms per the debug build).
- structure_visibility.c: _portal_hull_from_points exact, single exit, real
plane3d_distance_to_point helper. The unused BSP local stays a local
(debug build) rather than a bare call.
- New COMDATs (_scale_vector3d, _local_random_range,
_plane3d_distance_to_point) are byte-identical to January's single folded
copies (all-inlined admission class).
- parked.json: unpark the four newly exact parked functions.
Gate: ninja PASS, parks 140 active / 0 stale / 0 invalid, admission 0
contradicted / 0 revoked, fake scan 0 leads, castcheck clean.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Integrate verified source and data progress; exclude unproven COMMON ownership, held UB/asm forms, and address-named data credit. Stable sweep: 23 exact functions gained, zero lost.
- _particle_system_update: single state loop with in-loop state
definition, January's 16-bit particle cursor and post-delete next read,
pointer-walk variable lerp, match_assert with January's text/line; the
block-top NULL initializer of transition_state_variables follows the
admitted conditional-initializer form (laws_w2 A10), disclosed
- _load_symbol_table: loop-control flag instead of while(TRUE)/break,
natural fgets loop, per-arm error handling, January statement order
Rejected in review (point_from_line3d COMDAT hold): _infection_swarm_control,
_weather_particle_update_physics. Stable diff vs 9062b1e96: 0 regressions.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Reviewed reconstructions, each strict exact in its whole-TU gate with
zero inherited losses, guard passing and no new owners:
- _actor_move_initialize: short sense-ray index (as the sibling loop)
and direct indexed stores instead of per-iteration pointer aliases
- _decal_sprite_get_bounds: edge-relative (0.0f - registration) extents,
matching the adjacent (x1 - registration - x0) extent spelling
- _search_and_replace: single-exit result instead of an early return
- _projectile_accelerate: rotation axis/magnitude scoped to the spin
block (reopens its park)
Rejected in review: _render_ui_widgets and _render_ui_widgets_postgame
(exact only with duplicated identical should_render arms).
Stable diff vs 9062b1e96: 23 functions gained, 0 regressions; parks 261.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Both come from LAW M8, measured by the corpus-scale x87 study: for the
displacement-0 term of an inlined helper on &x->field arguments, VC7 loads first
the operand with the smaller IL-local ordinal (mod 8), so one real local too many
or too few flips it. The same study proved source operand order is INERT for a
bare product (p->a*p->b compiles identically to p->b*p->a), so the R3 operand
swap was never just inadmissible - it never worked. These fixes change the local
set, not the operand order.
- player_effects _player_effect_start (735, park reopened and removed): the three
field stores relative.i/j/k = dot_product3d(...) become one
set_real_vector3d(&relative, dot, dot, dot) call (laws_w2 A4 helper routing).
The park's criterion - natural same-compiler evidence for the final commutative
operand order - is satisfied by M8.
- actor_moving _actor_get_stopping_distances (449): the `long vehicle_driver_type`
local and its range test become a switch over the two driver enum constants
(M8, plus A9 switch width). Semantics are unchanged: _hovering_ground (2) and
_nondirectional_ground (3) are adjacent in actors.h, so the range and the two
cases select exactly the same values, and the same TU already switches on
actor->input.vehicle_driver_type at line 3190. M8 is the new law that lifts this
row's do-not-repeat tag.
Verified independently of the study: each whole-TU gate changes exactly one row
(residual -> EXACT) with every other exact row intact, the _point_from_line3d
guard passes, player_effects' other two parks are unchanged, and fake_match_scan
reports 0 leads. Full ninja, parks 272 active / 0 stale / 0 invalid, stable diff
vs scratch/opus5-next150-before.json: gained 10 / 8,528 padded, regressions 0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Wave w3d batch 1 (the structural retarget: census the frame, the [ebp+/-N] slots
and the relocations before proposing any shape).
- action_vehicle _action_vehicle_evaluate_seat (+976): the unit called
vehicle_specific_definition_get through a C4013 implicit declaration; including
its genuine owner units/vehicle_definitions.h fixes the call, and January's
single-exit shape puts the three seat points in the taken branch's own block
instead of behind an early return.
- input_xbox _input_update_analog_button_state (+48): park reopened and removed.
- effects _effect_allowed_by_environment and _effect_generate_particles: coupled
A8 callee/caller re-baseline, ZERO credit. Both are now January-exact in padded
size (and relocation count for the caller) and stay parked and fuzzy; the
remeasures carry dated evidence in config/parked.json.
Full ninja, parks 277 active / 0 stale / 0 invalid, stable diff vs
scratch/claude250k-start.json: gained 3 / 1,824 bytes, regressions 0; fake scan
0 leads.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
_player_effect_get_screen_flash (800) becomes strict exact by binding
effect->screen_flash to a local definition pointer used six times, which is the
A5 counter-law form: January re-reads the field through one base rather than
re-forming the address at each of the six uses.
particle_systems _particle_system_render is landed as a complete credible body at
ZERO credit (still residual); the rejected _particle_system_update hunks were
removed from the landable. Wave w3c batch 2 (8 groups, 31,392 spendable padded
bytes) produced no other strict gain; the s3tc _RGBToColor/_DecodeBlockRGB reopen
was rejected by the verifier.
Full ninja, parks 280/0/0, stable diff vs scratch/claude250k-start.json:
gained 1 / 800 bytes, regressions 0; fake scan 0 leads.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Packet P6 dependent: #include "bitmaps/bitmaps.h" gives weather_particle_systems.c the genuine rgb_colors_interpolate declaration (CL /Zs /W3 C4013 at HEAD; missing-prototype law A7). With the real_math.h named result, _weather_particle_system_new_particle (704) is strict exact. Full ninja build and stable sweep: 0 regressions.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Wave w1 Batch B (adversarially verified, held for config): _particle_system_new_particles (848) exact. The .rdata blob _rdata_0025a6b8 is split into January's HCEX-PDB-named file statics system_update_functions, particle_creation_functions, particle_update_functions and seconds_per_tick (layout and element counts identical; January relocations new_particles+0x2c7 -> +8, update+0xff -> +0, update+0x617 -> +0x14, jet -> _ground_error+4), with the PDB-public ground_error defined here. symbols.json lines edited in place. Full ninja build and stable sweep: 0 regressions.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Wave w1 landing, adversarially verified. park reopens: _decal_update. Full build of the combined batch: 54 strict gains / 29,440 padded, 0 regressions, parks 355/0/0. 1 park(s) removed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Wave w1 landing, adversarially verified. exact: _contrail_scale_random_value. Full build of the combined batch: 54 strict gains / 29,440 padded, 0 regressions, parks 355/0/0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Natural if/else polarity and result locals; generate_particles park re-measured after correcting its per-instance particle loop to January behaviour (evidence appended). 5 park(s) removed. Adversarially verified (wave D park re-investigation); full build of the combined wave D set: 0 regressions, parks 402/0/0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Retain 18 strict exact-function gains across Actions, Actor Combat, Decals, Game Engine, Object Lights, and Bipeds after removing donor bodies that regressed exact objects, emitted unowned code, or violated source-credibility rules. Name authenticated private symbols, move declarations to owner headers, record honest residual parks, and preserve units.obj at 189/189.