Commit Graph
321 Commits
Author SHA1 Message Date
MrBruh f823a18d59 Load, check and run Halo Custom Edition and OpenSauce maps 2026-10-07 19:02:01 +13:00
MrBruh 43dc11f224 Skip a cloaked model's skinned draw without node matrices
From TwistedFlog's PR #104: with the rasterizer's memory pool full, a partially cloaked model was skinned from NULL node matrices.
2026-10-07 15:27:17 +13:00
MrBruh d7efd3934a Validate map tags before loading 2026-10-07 12:01:09 +13:00
MrBruh 3dba558e4f Per-pixel model lighting
display.per_pixel_lighting (off by default) lights the models for each
pixel by the same ambient, distant and point lights the model lighting
programs (9, 10, 17 and 27) sum for each vertex. The normal and position
are found in each program's instructions and the program is checked to
light as the pixel shader does; the lights come in a small uniform of
their own, and a shader that fails falls back to per-vertex lighting.

Based on #48 by Tyberious.
2026-10-06 15:08:32 +13:00
MrBruh 1dc533fe18 Shadow map resolution setting
display.shadow_resolution (128 by default, as on the Xbox; 256, 512 or
1024) draws the two shadow maps larger. The blur's taps move to half a
texel of the larger map and two passes more for each doubling widen it
to the Xbox's tent, so the shadows keep their softness.

Based on #47 by Tyberious.
2026-10-06 14:59:21 +13:00
MrBruh 5a35ea2b20 Network version 18
Fixups for #99 and #112: the version raised for the object message's
shader permutation, NETCODE.md brought up to date, a networked glass
break's sound placed where it broke, a frame scratch pool that runs out
logged once, and the new comments marked as the port's.
2026-10-06 13:39:26 +13:00
justinfilip d9c43e3478 Keep a networked glass break from reading the scenario as a damage effect.
The host's notice of a broken surface carries no damage effect. The client filled a damage record with zeros and then read tag 0, which is the scenario, and halted. Shards still spawn. They skip the kick from an effect this machine never received.

The frame scratch pool was still the Xbox size after the particle pool grew eight times, so a busy level spent it every frame. It now grows with that particle pool, and a frame that still runs out is logged once.

A console line longer than the buffer halted inside the error printer, before the reason was written to the log. Long lines are cut to fit, and the reason is written first.
2026-10-05 17:19:35 -05:00
xshxdex98 8194c5a00b Online co-op: play the campaign together over LAN and the internet
Hosting a co-op level from the Map screen (CO-OP CAMPAIGN, a level and its
difficulty, then Server Setup) makes a network game on the campaign map
with no game engine, which is what co-op is. Only the host runs the
scripts and the AI; port/linux/game/network_coop.c sends clients what the
scripts do (cutscenes, camera, fades, HUD, sounds, devices, named objects,
animations), and network_actors.c drives the host's AI units on every
machine. Players spawn beside each other, respawn beside a safe teammate,
and spectate while dead or waiting. Skipping a cutscene is a vote.
Players can join a game in progress at any time.
2026-10-05 00:31:30 -05:00
MrBruh d1c7243cb2 Rework the multiplayer scoreboard 2026-10-03 01:16:09 +13:00
MrBruh f2ba71d9af Show player names above heads in multiplayer 2026-10-02 15:24:40 +13:00
MrBruh 0182da8172 Add high-res text and OpenCE titles 2026-10-02 13:39:17 +13:00
MrBruh bfbac35761 Fix text glyph edge artifacts 2026-10-01 16:57:38 +13:00
MrBruh 4adc3a87a5 Remove matching tooling and HALO_LINUX ifdefs 2026-09-30 21:49:46 +13:00
MrBruh a17d89c6f1 Merge bnunu/halo-1 main 2026-09-30 18:13:05 +13:00
Jonas Volman 6bfd956737 Reconcile approved Halo fidelity packets and bounded data credit
Recover transparent geometry submit (+1,285 meaningful code, zero exact losses); reconcile COMMON ownership and Q10 85+EXT1 credit, actions/main data, and separately disclosed denominator corrections. Preserve canonical-only repairs and all held research. C09 is ordinary disclosed cleanup, not a claim of proven scaffolding intent. Clean rebuild, 1,663 tests, parks, audits, provider links and independent EXT1 check pass. Local reconciliation only.
2026-09-29 13:52:37 -07:00
Jonas Volman f3aadeab98 Reconcile five Halo functions and approved declaration batches
Integrate coherent B3, P2/K17 prerequisites, completed K1-K16 + S, and the independent profile/effects rulings. Five gains and two explicitly approved B3 debits: net +3 strict functions, +2770 meaningful/+2800 padded bytes (+2774 progress credit). No additional losses; Halo objects 394 to 396 and data unchanged.

Clean rebuild, identical 8252-row stable sweep, 68 valid parks, admission/provider checks, 467-unit warning comparison, unchanged fake scan, and 1318 tests passed. Preserve canonical helper recoveries and unrelated work. Full evidence and disclosures in docs/object_matching_logs/astra_five_function_reconciliation_20260928.md.
2026-09-28 23:17:10 -07:00
MrBruh 1bcd57afe4 Merge branch 'bnunu:main' into main 2026-09-28 14:46:17 +13:00
Jonas Volman 709bfc3a3c Reconcile approved frontier ownership and admission packets
Import only independently reviewed production changes. Preserve canonical physics and virtual-keyboard repairs; keep B3 and all unresolved holds out.

Record exactly four approved canary debits (6987 meaningful bytes), six Halo admissions and two revocations. Keep vendor ioinit/storage work separate. Full build, 8252-row sweep, 1318 tests, park/admission/fake audits and 621-object binding pass within approved debit bounds.

Do not publish donor research dumps or private assets. README and unrelated user research remain untouched. See frontier_publication_reconciliation_20260927.md for complete evidence limits and accounting.
2026-09-27 17:12:48 -07:00
Jonas VolmanandClaude Opus 5.5 e59d5ca926 Correct stale vertex-shader initializer matching comment
Owner-approved f0941b08 comment-only reconciliation. Rebuilt object unchanged in every nondebug section, resolved relocation and symbol including line-derived literals. Zero credit/status changes.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 16:38:04 -07: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