Wave w1 landing, adversarially verified. exact: _animation_update. 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>
actor_firing_blindly (actors.h), player_aim_projectile (aim_assist.h), projectile_kill_tracer (projectiles.h), unit_adjust_projectile_ray (units.h) and the remaining weapon datum flag bits. Removes the verbatim duplicate collision_surface_polygon prototype from collision_bsp.h; without that cleanup the two added declarations regress units::_unit_preprocess_node_orientations (declaration-count sensitivity, bisected). Full build with the weapons body: 0 regressions, parks clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Header prerequisite; zero credit. weapons.h is the genuine owner of both
public weapons.c APIs. weapon_estimate_time_to_target is already defined in
weapons.c; weapon_aim is January's public _weapon_aim. Signatures follow
January's call sites in actor_combat_update (nine-argument weapon_aim pushes
with the linear flag read back; three-argument estimate) and the HCEX DIA
widths recorded in actor_combat_obj_caller_closure_api_boundary_20260905.md.
Consumer audit: 19 direct includers (actors, actor_combat, aim_assist,
game_engine, game_engine_ctf, game_engine_oddball, players, player_control,
first_person_weapons, hud, hud_draw, hud_weapon, interface, weapons, objects,
object_types, bipeds, units, unit_scripting_commands). Full shadow build
passes; strict stable diff against the merged tip: 0 gains / 0 regressions;
parks 465 active / 0 stale.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
+3 strict exact functions / 1,168 padded bytes: _projectile_set_action (32),
_projectile_effect_new (96) and _projectile_detonate (1,040), all previously
unwritten and emitted by their genuine January callers with the static names
from 2364150f9. Three previously unwritten bodies land as zero-credit fuzzy
source: _projectile_update (4064/179 vs 4064/179, allocator/frame-order tie),
_projectile_collision (2928/100, x87 home tie) and
_projectile_collision_test_line (496/10 vs 512/10; January's inline
point_from_line3d expansion would emit a forbidden COMDAT, so explicit math is
used).
The TU-private runtime projectile representation is preserved and no public
projectile_datum field or header changed. TU-local enums carry disclosure
comments, and the unreachable collision default uses match_vassert
(byte-identical). Adversarial review accepted all six; the three parks are
unchanged. projectiles: 24 exact / 6 residual / 0 unwritten.
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.