Commit Graph
304 Commits
Author SHA1 Message Date
Stefan MaierandClaude Opus 5.5 2c32a7032c VR: own body at the wheel and the gun, gunner view back, clearer glass
Seated as a driver or gunner, the player's body is drawn (its hands on
the wheel or the gun's handles, as the seat animates them), its head
shrunk to nothing out of the eyes' way. A gunner's view is moved back from
the gun's sights (vr.gunner_camera_back). Glass tints and reflects half as
much (vr.glass_strength), which up close hid the view through the
Warthog's windscreen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 12:50:55 +02:00
MrBruh 1bcd57afe4 Merge branch 'bnunu:main' into main 2026-09-28 14:46:17 +13:00
Jonas Volman 59757f4263 Reconcile approved type ownership, static locals and source disclosures
Independently gate storage + K, OQ-4 P-a/P-b1, four static-local packets and comment-only disclosures. Preserve all 7641 exact owner rows, 71 valid parks and 1161 passing tests; code/data credit unchanged. G and game_engine admission remain held because current canonical loses populate_statistic_buffer. Existing collision static-local repair is not duplicated. No donor tree, held candidate, scorer or private asset imported.
2026-09-27 05:17:27 -07:00
MrBruh 5389a16360 Merge branch 'bnunu:main' into main 2026-09-27 23:57:12 +13:00
Jonas Volman 27c9736126 Reconcile hardware bitmap table ownership and structured upload loops 2026-09-27 03:00:10 -07:00
MrBruh 50eae19bac Native resolution fullscreen with F11 toggle 2026-09-27 20:42:09 +13:00
MrBruh b0e3bc96e3 Fix framerate-dependent timing 2026-09-27 19:23:44 +13:00
MrBruh 755f610025 Fix 128-player multiplayer issues 2026-09-27 18:17:24 +13:00
MrBruh 0f38fea378 Merge remote-tracking branch 'upstream/main' 2026-09-27 16:57:47 +13:00
Jonas VolmanandClaude Opus 5.5 a6d8572861 Reconcile exact bitmap allocation and biped autoaim topology
Independently verified donors 8202ac13 and a448c595. Natural single-exit bitmap tail and first-party-correlated outer-arm width stores yield 714 meaningful / 736 padded bytes with zero inherited exact losses. Retire precisely their two freshly exact scheduling parks. No whole-object admission, helper/storage changes or new policy exception.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 20:40:10 -07:00
Jonas Volman 7c0af5f029 Reconcile approved compiler-application code, data and owner repairs 2026-09-26 12:02:50 -07:00
MrBruh 4c764a02bf Fix black screen in fog 2026-09-26 20:05:32 +12:00
MrBruh e29125b50e Port decomp to Android 2026-09-26 16:16:00 +12:00
MrBruh ebb0eac50b Port decomp to Linux 2026-09-26 12:15:09 +12:00
Jonas VolmanandClaude Opus 5.5 9ae22cf40e rasterizer_lights: lens_flare_submit_for_cluster exact via /Od scope block
direction and up and their uses move into an inner block, following the
/Od declaration order. The retail witness and the debug build agree, and the
earlier "scheduler tie" reading is retired. +400 padded; the object stays
incomplete (parked lens_flares_draw, owner-held reset_for_new_map overrun).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 00:11:37 -07:00
Jonas VolmanandClaude Opus 5.5 3ee32a5cb5 R3 batch 2: owner rulings 1, 4, 7 - five objects complete
Owner rulings 2026-09-24:
- Q1 YES (04, not 04b): _actor_aim_grenade in its natural /Od body (no goto),
  keeping the BUG comment on January's vehicle-path read of the unassigned
  aim_vector. Header-inline helpers replace the TU redirects and the NODUP
  cross_product2d hand copy; the new COMDATs are identical to January's.
  Unlocks collision_features, real_math and path_smoothing (config 03A) and
  retires the stale collision_features rejection (04). The decals rejection,
  path_structure_bsp and path_obstacle_avoidance are untouched.
- Q4 YES (A2): _first_person_weapon_update without the two NULL guards,
  VALID_INDEX at all five /Od-attested sites, and the three magnitude
  redirects removed. The weapon-switch invariant is documented in source.
- Q7 YES: _uncompress_int32_to_real_vector3d stages the conversion through a
  real temp with a declaration-time initialiser (debug exact; verbatim in
  Oct-2001 2276P and the Sept-2001 cache.exe).

Full gate: 383 -> 388 / 468 Halo objects, +3 functions (+2,211 meaningful
code), 0 regressions, parks 82 -> 80, admission 0 contradicted / 0 revoked,
fake-match leads 26, pytest 1,161 passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 00:04:10 -07:00
Jonas VolmanandClaude Opus 5.5 b993052102 R2 batch 3: first-party function names and storage from the completeness-critic routes
Zero credit; every packet was independently adversarially reviewed (22/22 approved).
- critic_3: 72 renames of placeholder/invented static function names across 20
  objects to first-party names. Each rename has Sept-2001 linker-map alignment
  (cachebeta xbe / retail cache exe, several also Aug-2001), relocation-masked
  body identity and matching callers; cachebeta publics show every row was a
  January static. hs's radiosity_hack_{start,save,find_point}_evaluate pairing
  is proven by the Sept .rdata hs_function_definition pointers; players'
  create_weapon also matches HCEX.pdb. Objects: ai_debug (reviewer-amended: a
  dead stub removed, its comment re-attached), transport_endpoint_winsock,
  transport_endpoint_set_winsock (+ parked.json key renames), profile,
  progress_bar, network_connection, saved_game_files, rasterizer_xbox_profile,
  xbox_sound_cache, game_engine_king, players, hs, hs_runtime, main, decals,
  rasterizer_lights, rasterizer_xbox_dynavobgeom,
  rasterizer_xbox_environment_fog, rasterizer_xbox_hardware_bitmaps,
  render_cameras.
- hs_compile: whitespace_characters, eol_characters and hs_type_primitive_parsers
  are external (cachebeta publics, HCEX DataIsGlobal); hs_compile_finish is
  static with a TU-local prototype (no public; HCEX static function).
- bink_playback: bink_playback_idle -> bink_playback_update__internal
  (first-party). The bink_decompress_audio_frame rename is NOT landed: it needs
  an added call whose position is unattested, the same class canonical held for
  hardware_geometry in 4d1ebf17.

Gate (full ninja, objdiff 3.3.1): objects 383, code 1,577,237, data 2,586,915
(all unchanged); stable diff 0 regressions; parks 83/0/0; admission 11/0/2/0;
fake scan 26; pytest 1161 passed; diff --check clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 16:59:40 -07:00
Jonas Volman 4d1ebf1790 Reconcile round-two checkpoint and hold unproven hardware call 2026-09-24 15:19:46 -07:00
Jonas VolmanandClaude Opus 5.5 1cd5e4ede2 R2 batch 2: reviewed zero-credit ownership/storage packets; two '$'-defect data entries
All packets passed a precedent audit and an independent adversarial review.
No object changes status.
- Storage per cachebeta publics (source static + symbols.json rows):
  - bink_playback: four globals;
  - weapons: 11 rows + weapon_magazine_finish_reload;
  - object_lights: 4 helpers; should_render_lights is the /Od-attested call and
    its prototype leaves the public header;
  - vehicles: _update_turret_physics;
  - weather_particle_systems: one_over_char_max is external (cachebeta public,
    HCEX Global); its globals are static;
  - rasterizer_xbox_debug: 8 D3DINLINE wrapper rows (already Matching: audit
    FAIL(8) -> PASS, pdb 8 -> 0).
- draw_string: the invented external draw_string_globals aggregate (pads, blob,
  #define aliases) becomes four HCEX-attested file statics in /Od declaration
  order with = { 0 } (a595bbc2 precedent); typed multitexture params.
- render_debug: three rule-6 hand expansions become real point_from_line3d
  calls (ruling #1/#2); the opaque vehicle view gives way to struct
  vehicle_datum + vehicle_datum_try_and_get; the six debug_* toggles become
  tentative definitions (COMMON evidence).
- vehicles: the TU-wide REAL_MATH_EXTERNAL_POINT_FROM_LINE3D define is gone and
  the pathfinding hand expansion becomes the genuine call (ruling #1).
- rasterizer_xbox_profile V1R (reviewer-amended): byte-inert /Od parameter
  order, the BUG marker comment, detail_objects via the rasterizer_xbox.h API,
  and a rejection text that keeps the SDK-table policy question open.
- semantic_data_matches.json: single-section '$'-defect entries with
  allow_incomplete_unit for projectiles _projectile_update_section (1,548 B) and
  object_lights _lights_section (1,541 B) (leaf_map / editor_flying_camera /
  race precedents).

Gate (full ninja, objdiff 3.3.1): objects 384 (unchanged), code unchanged,
data +3,089; stable diff 0 regressions; parks 83/0/0; admission 10/0/2/0; fake
scan 26; pytest 1159 passed; diff --check clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 15:12:09 -07:00
Jonas VolmanandClaude Opus 5.5 fcbc6c48cb R2 batch 1b: admit hardware_geometry and actors; render_debug_trigger_volumes exact
- rasterizer_xbox_hardware_geometry (admission): the no-op MoveResourceMemory
  wrapper pair is spelled D3DVertexBuffer_MoveResourceMemory, as the first-party
  2001-09-25 linker maps (atlas 6455066470 / 7eacac85) name it with January's
  exact spacing. This settles the round-1 owner pick A vs B without a ruling. The
  six hand-written placeholder stubs become their XDK names, 13 wrapper rows go
  static, and the call's argument/position are disclosed as byte-inert and
  unattested.
- actors (new code): _actor_input_update (2384) and _actors_spawn_from_unit (672)
  exact in the complete /Od named-local shape and declaration order; parks
  retired.
- hs_runtime: _render_debug_trigger_volumes (1088) exact in the /Od helper form,
  with the reviewer-amended /Od declaration order (matrix first; escape-law block
  for center/ray/result); park retired. 12 typecast converters are static per
  cachebeta publics (provider link FAIL(12) -> PASS). The object stays blocked by
  the retired begin_random tie.

Gate (full ninja, objdiff 3.3.1): Halo objects 381 -> 384; stable diff +3 strict /
4,144 padded, 0 regressions; parks 83/0/0; admission 9/0/2/0; fake scan 26;
pytest 1159 passed; diff --check clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 15:12:09 -07:00
Jonas Volman f6d00a8c1d Reconcile Claude fifty-object lane with canonical
Merge verified source, data and owner corrections from 4e84c212. Resolve overlapping HS/path symbols against canonical, retain the dynavobgeom ownership rejection, document Layer 2/P7 source-shape decisions, and preserve held research. Verified 14 exact functions, 17 new Halo objects, zero regressions under objdiff 3.3.1.
2026-09-24 07:20:01 -07:00
Jonas VolmanandClaude Opus 5.5 cdc8ebd3fe Batch 5b: reviewed zero-credit storage and provider hygiene
- geometry: drop the NODUP hand copy of plane2d_distance_to_point, so the
  header inline is used (selection byte only; removes a latent
  collision_bsp<->geometry LNK2005).
- collision_bsp: collision_bsp_usage_times is file-static (cachebeta publics).
- rasterizer_lights P1: HCEX file statics with January's .bss layout (the
  load-bearing `= {0}` follows the VC7 initialised-statics law and precedent);
  lands atomically with its 6 symbols.json rows.
- motion_sensor: .bss symbol layout fix (object_audit 44/2 -> 44/0).
- rasterizer_xbox_models: five D3D wrapper rows static.

All byte- and credit-neutral (gated with batch 5a); objects stay incomplete
on residual functions and held owner items.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 04:58:59 -07:00
Jonas VolmanandClaude Opus 5.5 466698b85a Batch 5a: admit hud_unit via a hud_draw.h check_stack_buffer header inline
January's 26 stack-sentinel sites in hud_draw, hud_unit, hud_nav_points,
hud_weapon and motion_sensor share one inlined shape. Both asserts at each site
carry one line literal (a macro). January's 48-byte _check_stack_buffer has no
relocations anywhere, and the Sept-2001 map flags the helper as an inline COMDAT
('i hud_draw.obj'). hud_draw.h now carries the STACK_BUFFER constants, the
unchanged check_stack_buffer body as a header __inline, and the sentinel macro
match_assert_stack_frame (descriptive name: neither the /Od build nor HCEX has
the sentinel). The invented corrupt_stack_found/stack_buffer_checked gotos in
hud_unit are gone, and hud_nav_points and hud_weapon use the macro too (exact
callers). motion_sensor keeps its copy: its sentinel callers are residual, so a
new COMDAT there would break rule (i).

hud_unit (reviewer-amended 01RS + 02-04R): first-party names and storage; the
_fast_ftol rejection is retired (identical copy, pair links pass both ways).

DISCLOSED for an owner ruling: P7 drops rasterizer_xbox_models' dead
#include "interface/hud_draw.h" (project commit 635bd83d; no name used; raw-
and warning-inert). It is load-bearing only as declared-name shielding: the
inline adds ~9 names, which flips __rasterizer_model_transparent_geometry_submit.

Gate (full ninja, objdiff 3.3.1, 23 hud_draw.h consumers): Halo objects 378 ->
379; stable diff unchanged, 0 regressions; parks 86/0/0; admission 11/0/2/0;
pytest 1157 passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 04:58:59 -07:00
Jonas VolmanandClaude Opus 5.5 6e3e2d35e4 Batch 4b: admit rasterizer_xbox_dynavobgeom; object_damage_body exact; reviewed storage packets
- rasterizer_xbox_dynavobgeom (admission, reviewer-amended): genuine shared
  declarations replace the caller-local debug-options, window and pixel-shader
  views; /Od-attested vector_from_points3d/dot_product3d calls and HCEX locals
  in the unlit draw; the HCEX function-static `warned` latch; MAX() for the
  /Od ?: store; nine D3DINLINE wrappers static per cachebeta; rejection retired.
- damage (reviewer B+): _object_damage_body exact (1360); four statics per
  cachebeta; park retired. The AOE header-helper form (patch A) stays held.
- players: January-static storage (3 rows) plus the COMMON tentative
  definitions of players_globals/team_data (January linker_common records).
- hs: 839 January-static storage flags and the /Od-attested static helper
  hs_enumerate_scenario_data replacing 11 hand expansions (reviewer-amended;
  the real_random_range cleanup stays held with the P1 class).
- hs_scenario_definitions: first-party static byte_swap_script_syntax_data.
- player_profile (HCEX profile_color_table) and main (/Od main_exit shape):
  reviewed zero-credit packets; three parks re-baselined.

Gate (full ninja, objdiff 3.3.1): Halo objects 377 -> 378; stable diff +1
strict / 1,360 padded, 0 regressions; parks 86/0/0; admission 11/0/3/0; fake
scan 26; pytest 1157 passed; diff --check clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 02:26:05 -07:00
Jonas VolmanandClaude Opus 5.5 b9a8d587a0 Batch 3: admit twelve objects; four exact functions; verified storage and data fixes
Objects admitted (Halo 363 -> 375), each with an independent adversarial review:
units (first-party names incl. the reviewer-corrected unit_vectors_are_valid, 49
static flags, '$'-defect data entry), collision_debug (/Od helper calls),
render_objects (b807f9f6 provider packet), editor_flying_camera
(_editor_camera_set_position_and_roll 432, storage + grouped entry re-pin),
rasterizer_xbox_shadows (shadow_model_draw 688), cache_files_windows
(open_cache_files 752), light_volumes (light_volume_render 912, reviewer-amended
/Od declaration order), actor_firing_position, path, biped_limp_noodle (HCEX file
statics), leaf_map and model_animations (/Od helper calls replace hand expansions).

Zero-credit/data: path_structure_bsp HCEX tables (+200 data), hud_nav_points
storage, first_person_weapons patch A (park re-baselined).

Gate (full ninja, objdiff 3.3.1): stable diff +4 strict / 2,784 padded, 0
regressions; parks 89/0/0; admission 11/0/5/0; fake scan 26 (new lead is the
/Od-attested empty then-arm in the still-parked fpw update); pytest 1157 passed;
diff --check clean. Ledger: docs/object_matching_logs/claude_fifty_objects_20260925.md
(adds the Layer 2 owner-ruling disclosure, tallies and held items).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 23:53:28 -07:00
Jonas Volman 641e146696 Reconcile dynavobgeom owner types and count fastcall functions 2026-09-23 20:54:37 -07:00
Jonas Volman ed3e308af0 bitmaps: restore exact ARGB inline color helper and owner API 2026-09-23 15:54:31 -07:00
Jonas Volman b0992d0ebe Admit nine verified Halo object closures 2026-09-23 14:25:38 -07:00
Jonas Volman 7222f2fd53 Reconcile Claude structural lane into canonical 2026-09-23 07:50:16 -07:00
Jonas VolmanandClaude Opus 5.5 70e1a15b69 Return uncompressed vectors by value and match reload/index-buffer code
Structural lane batch 6: +1,632 padded / +1,590 meaningful bytes strict
exact (4 functions), zero stable-verdict regressions across the full
board (the header consumer sweep).

- rasterizer_geometry.h/.c: uncompress_int32_to_real_vector3d returns
  real_vector3d by value. The debug build shows the struct-return copy
  at all 16 call sites, and HCEX lists a single parameter. Callers in
  rasterizer.c, rasterizer_lights.c and rasterizer_xbox_lights.c assign
  the result directly and drop their scratch buffers. Exact:
  _compress_real_vector3d_to_int32 and _clamp. The parked
  _rasterizer_sun_glow_draw is re-measured (same size, fuzzy
  95.815 -> 95.817).
- game/players.h: declare players_debug_render(void), a public players.c
  function that render_debug.c called undeclared (C4013). Disclosure: the
  by-value prototype drops one declared name, which alone flips
  _rasterizer_frame_statistics_draw's field-load order. This genuine
  missing prototype restores that TU's name count. Both edits are
  independently evidenced and landed together; the full build shows no
  regression.
- weapons.c: _weapon_magazine_finish_reload reads magazine->rounds_loaded
  (/Od 0x6a4590).
- rasterizer_xbox_hardware_geometry.c: _rasterizer_triangle_buffer_new
  follows the debug build (0x7eaca0), including the index-buffer Unlock
  with its HRESULT check. This removes the _ReadWriteBarrier/pragma/goto
  steering.
- parked.json: unpark the three newly exact parked functions.

Gate: ninja PASS, parks 109/0/0, admission 0 contradicted/0 revoked,
provider link PASS, casts and fake scan unchanged, pytest 1152 passed /
5 skipped / 26 subtests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 06:36:08 -07:00
Jonas VolmanandClaude Opus 5.5 cfa201763e Match active camouflage, particle and shadow-begin rendering
Structural lane batch 3: +4,128 padded / +4,101 meaningful bytes strict
exact (3 functions), zero stable-verdict regressions.

- rasterizer_xbox_active_camouflage.c: _rasterizer_active_camouflage_draw.
  The debug build (0x7cd9c0) writes each normal/hyper-stealth blend as one
  (1-p)*base + p*hyper expression. The texture-animation vertex constants
  are a block-scoped aggregate initializer, so both constant arrays share
  a slot as in January.
- render_particles.c: _render_particles. The draw pass indexes
  group_particle_counts[group_index] with a short loop, and the inner loop
  is while (particle_count-- > 0), advancing the particle at the body end
  and before the delete-path continue (/Od 0x84f800).
- rasterizer_xbox_shadows.c: __rasterizer_environment_shadow_begin. The
  debug build's boolean success = TRUE is returned once, and the
  translation terms use dot_product3d (/Od 0x80d870; HCEX array name
  vsh_constants__screenproj).

Rule-24 disclosure (owner per-site admission, 2026-09-21): two new
(real_vector3d const *)&shadow_matrix->position casts, one per
dot_product3d call. The /Od build calls dot_product3d at 0x80db50 and
0x80dbc2 with the matrix position. Deleting both casts leaves the
function strict exact, and point/vector share the three-real layout.

parked.json: unpark _render_particles and __rasterizer_environment_shadow_begin.
The owner packet gains the aggregate 3D->2D view-copy question.

Gate: ninja PASS, parks 112/0/0, admission 0 contradicted/0 revoked,
provider link PASS, fake scan unchanged, pytest 1152 passed / 5 skipped
/ 26 subtests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 05:28:15 -07:00
Jonas Volman 7d3c53c83d Admit five Halo objects after ownership checks 2026-09-23 04:13:22 -07:00
Jonas Volman 575e5a6c77 Admit five more exact Halo objects with owner cleanup 2026-09-23 01:16:04 -07:00
Jonas Volman 71d3507b31 Admit five exact Halo objects with rasterizer ownership cleanup 2026-09-23 00:54:07 -07:00
Jonas Volman 4f4c85021d Reconcile Lane C with canonical house-rule audit
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.
2026-09-22 23:12:40 -07:00
Jonas Volman 6130661c95 Reconcile final Astra campaign (+4073 bytes) 2026-09-20 10:52:50 -07:00
Jonas Volman 9d155f1d60 Admit ten verified exact objects 2026-09-19 15:56:43 -07:00
Jonas Volman 389126d5a7 Reconcile Claude two-block exact-match campaign 2026-09-19 13:44:32 -07:00
Jonas VolmanandClaude Opus 5 2f24377a5a Wave 19: six parks reopened as strict exact (collision_bsp, comms, caches)
- _collision_bsp_test_vector_recursive: reads the leaf flags through the
  typed tag-block macro inline (HCEA spelling)
- _collision_surface_find_closest_point2d: vector_from_points2d and
  cross_product2d replace hand-expanded math, as the exact sibling
  collision_surface_test_point2d does
- _ai_communication_update_speech_timers: includes the owner header
  cseries/errors.h for error() and names the timer label
- _cached_map_file_read_header: the exact wait helper snapshots the
  completion flag before returning, reproducing January's double volatile
  load at both inlined sites; the still-parked _cache_files_open_cache_files
  is re-measured (closer, non-exact)
- _update_client_local_ticks: countdown tick loop and a machine_index
  local passed to both server calls (January calls the build helper out of
  line, which a literal 0 argument does not reproduce; disclosed)
- _rasterizer_sort_external: plain indexed loops; the object's eight
  file-private globals are static, as only this object uses them

Stable diff: 0 regressions; admission 28 candidates / 0 contradicted;
active parks 201 -> 195.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 22:11:55 -07:00
Jonas VolmanandClaude Opus 5 af9f444aa3 Wave 17: six functions strict exact (five parks, progress bar noise texture)
- _shader_transparent_chicago_create: per-map shader_map_verify(map,
  map_index) call as in the exact generic sibling (January's inlined
  TRUE-returning verify leaves its store in the loop tail) (park reopen)
- _complete_key_exchange: plain short packet locals replace a long/short
  union type-pun (park reopen)
- _debug_realloc: parameter-home reuse and a block-local old_header,
  both proven by January's frame (park reopen)
- _lra_allocate: single-exit size check and a conditional round-up
  `size = (size & 3) ? (size | 3) + 1 : size` (disclosed) (park reopen)
- _game_state_open_persistent_storage: single-exit success flag (park reopen)
- _progress_bar_create_noise_texture: symbols.json renames _code_000d16d0
  in place (static) to the name the 2001-09-25 Xbox linker maps give; an
  empty static step called from progress_bar_setup (call position
  inferred from map order; the call is required for emission)

Stable diff: 0 regressions; active parks 206 -> 201.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 21:27:45 -07:00
Jonas VolmanandClaude Opus 5 dcede5fd11 Wave 13: four functions strict exact (rasterizer_text complete, ai_script)
- _rasterizer_draw_string / _rasterizer_draw_unicode_string: geometry
  parameter and bounds locals declared at the top of the debug block
- _ai_scripting_renew: real_math.h random_range replaces the hand-written
  seed_random_range(get_global_random_seed_address(), ...) (select-any
  _random_range COMDAT, a genuine January function; A4 class)
- _ai_index_from_string: single-exit success flag with one reference store

Rejected: _light_volume_render (point_from_line3d COMDAT).
Wave 14 (second pass over actor_moving, physics, decals, projectiles,
hud_weapon, ui_widget, encounters, weapons) closed nothing.
Stable diff: 0 regressions.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 19:44:31 -07:00
Jonas VolmanandClaude Opus 5 64fd27d28c Nest shader radiosity/physics properties: transparent group draw strict exact
shader_definitions.h: struct shader_base holds a radiosity block (flags,
detail level, power, emitted and tint colors) and a physics block (flags,
material type) at unchanged offsets. January's assert literals spell
shader_transparent_generic->shader.radiosity.flags and the chicago twin.
shaders.c follows the rename at its two lit-flag tests.

_rasterizer_transparent_geometry_group_draw (15,120 B) is strict exact:
widget groups via the NULL-shader render_proc union, stage-lerp component
loops, the chicago extra-layer loop kept as January's never-advancing
loop under a BUG comment, match_vassert defaults. Owner flag: two colour
component loops (debug rescale, external colour) are code-neutral where
they sit and were chosen to match the glass texscale operand order;
component loops are proven elsewhere in the same function.

Board-wide: full ninja + stable diff, +1 function, 0 regressions. The one
drift is the fuzzy park __rasterizer_model_transparent_geometry_submit
(non-exact before and after, objdiff 89.129 -> 89.008), re-measured.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 13:59:48 -07:00
Jonas VolmanandClaude Opus 5 c2593b885a Wave 3: eight functions strict exact (screen_effect object complete)
Reviewed reconstructions, each strict exact in its whole-TU gate with
zero inherited losses, guard passing and no new owners:
- rasterizer_xbox_screen_effect (13/13): complete per-arm shader setups,
  load-before-call locals, January assert texts, PIN clamp; screen_flash
  projection spelling and the defined inverse-pixel default arm
- hs_compile: _hs_parse_begin (per-branch result type; January's extra
  sprintf name argument kept with a BUG comment), _hs_parse_cond_recursive
  (single exit; January's always-true negation test kept with a BUG
  comment, byte-proven and recorded in HCEA)
- geometry: definitions in January object order (assert lines ascend),
  duplicate prototype removed, _get_edge_vertex single exit
- render_cameras: view_to_screen and build_frustum_bounds simplifications
- sound_manager: _sound_dispose_from_old_map loop-exit flag

Rejected in review: _encounter_test_rule (redundant default stores),
_render_camera_mirror (point_from_line3d COMDAT), _sound_set_definition_end
(prototype contradicting its definition).
Stable diff vs 9062b1e96: 0 regressions; parks 255 -> 250.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 13:06:38 -07:00
Jonas VolmanandClaude Opus 5 51c94f13e5 Harvest per-function donor bodies: 11 functions strict exact
Per-function transplant of historical and worktree donor bodies into the
current tree (whole-blob mining had rejected them for unrelated losses).
Each landing is the minimum hunk, strict exact in its whole-TU gate with
zero inherited losses, and reviewed for house rules and hard holds:
- helper spellings replace hand-expanded math (_device_frontfacing,
  _point_in_triangle3d, _actor_look_valid_aim/look_vector)
- _pill_test_vector3d normalizes directly into the output normal
- natural control-flow/declaration forms reopen five parks
  (_structure_cluster_mark/unmarked, __rasterizer_widget_draw_sprite2d,
  _rasterizer_set_model_skinning, _ai_handle_editing)
- two byte-proven non-UB original bugs kept under the documented
  original-bug policy with BUG comments (_ai_handle_editing unscaled
  csmemmove counts, _ai_scripting_follow_target_ai repeated name)

Stable diff vs 9062b1e96: +11 functions, 0 regressions; parks 268 -> 263.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 10:37:04 -07:00
Jonas VolmanandClaude Opus 5 26601453ef Land the final Tier B wave: three structural park reopens (+477 meaningful)
The owner-authorized final implementation wave worked only the ten Tier B
functions of the research campaign, each a structural defect confirmed by two
independent lenses; census first, five evidence-driven shapes at most, stop at
allocation, scheduling or x87 ties. Three closed, seven did not.

- hud _temporary_hud_draw_reticle: January does a SIGNED `% 16` (`and eax,
  0x8000000f; jns; dec; or -16; inc`) where ours did `and eax,0xf`. NUMBEROF
  yields size_t, so `next_point_index % NUMBEROF(points)` was an unsigned modulo;
  a signed named count NUMBER_OF_TEMPORARY_HUD_RETICLE_POINTS sizes the array and
  bounds the loop. It fixes the type, not a cast. The three point stores become
  one set_real_point3d call (laws_w2 A4).
- weapons _weapon_can_be_fired: single-exit form (A3). It writes `result = FALSE`
  in two arms, which I tested against the identical-fake-branch prohibition: the
  merged `if (age >= 1.0f || chain)` spelling is residual, while January emits a
  SEPARATE physical FALSE exit for the age test (`jne; pop edi; xor al,al; pop esi;
  pop ebp; ret` at 0x35-0x3c) before game_engine_running is ever called. Two
  distinct rejection blocks is laws_w3 A26's admission criterion, unlike the
  rejected _bink_query_analog_controller_buttons, whose edges share one block.
- rasterizer_transparent_geometry _rasterizer_transparent_geometry_initialize:
  single exit `success = success && aux_buffer()`. Semantics are unchanged; the
  error block is the last statement before the call, so the short-circuit sits
  exactly where the early return did.

All three parks removed. Not closed and reported in the wave ledgers:
_path_state_traverse, _flag_update, _bitmap_2d_sharpen, _light_volume_render,
_actor_stimulus_prop_acknowledged, _stack_memory_pool_allocate,
_particle_system_new_particle_jet.

Full ninja, parks 268 active / 0 stale / 0 invalid, stable diff vs
scratch/opus5-next150-before.json: gained 15 / 9,504 padded, regressions 0;
fake_match_scan 0 leads on all three files, matching HEAD.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 08:49:04 -07:00
Jonas VolmanandClaude Opus 5 75e3c4b95a rasterizer_text: 1 function(s) strict exact
Wave w3 landing, adversarially verified. exact: _cache_hardware_format_character. Full ninja build and per-function stable_verdicts sweep: 0 regressions.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 14:45:21 -07:00
Jonas VolmanandClaude Opus 5 858bde2b53 rasterizer_xbox: 1 function(s) strict exact
Wave w2 landing, adversarially verified. park reopens: __rasterizer_window_begin. Requires in-place config/symbols.json linkage/label lines (included in this commit); full ninja build and per-function stable_verdicts sweep: 0 regressions. symbols.json: _suppress_window_begin_end and _previous_window_index gain "static": true (file-local globals no longer defeat alias analysis). 1 park(s) removed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 07:48:16 -07:00
Jonas VolmanandClaude Opus 5 a25da8b810 rasterizer_cinematics: 4 function(s) strict exact
Wave w2 landing, adversarially verified. park reopens: _rasterizer_screen_effects_initialize_for_new_map, _rasterizer_screen_effect_set_convolution, _rasterizer_screen_effect_set_filter, _rasterizer_screen_effect_set_video. Requires in-place config/symbols.json linkage/label lines (included in this commit); full ninja build and per-function stable_verdicts sweep: 0 regressions. symbols.json: _cinematic_screen_effect_globals gains "static": true. 4 park(s) removed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 07:48:14 -07:00
Jonas VolmanandClaude Opus 5 b0d1f32181 rasterizer_xbox_widgets: 2 function(s) strict exact
Wave w2 landing, adversarially verified. exact: __rasterizer_widget_submit_occlusion_test; park reopens: __rasterizer_widget_begin. Full ninja build and per-function stable_verdicts sweep: 0 regressions. 1 park(s) removed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 07:39:53 -07:00
Jonas VolmanandClaude Opus 5 23e55289f6 rasterizer_xbox_water: 1 function(s) strict exact
Wave w2 landing, adversarially verified. park reopens: _rasterizer_water_draw. Full ninja build and per-function stable_verdicts sweep: 0 regressions. 1 park(s) removed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 07:39:52 -07:00