Commit Graph
124 Commits
Author SHA1 Message Date
MrBruh 400d62bb76 Merge pull request #123 from startupfoundry/split-halo-android
Split HALO_ANDROID into HALO_ARM64_GUEST, HALO_GLES and HALO_ANDROID

Conflict resolved: main's render-target eviction and mip composites are kept, with the PR's HALO_GLES guard on the ES blit fallback after them.
2026-10-10 15:41:32 +13:00
xshxdex98 60cd1254d6 Fix the decompiled code's latent bugs, and say plainly what is kept
Uninitialised locals get values (debug vertex, datastore result, index
buffer, map tool direction, AI entry points, escape alignment, grenade aim
from a vehicle, game options descriptions, unreachable switch arms), the
AI's squad and platoon records move whole, a speech cause point is read,
the geosphere's out-of-memory path frees itself, a console cond clause
without a result is refused, and the crash reporter rejects truncated map
files. Gameplay the original game has, kept so it plays the same, is noted
in a line rather than a page.

(cherry picked from commit 75afc4a1e57af2ba697e8be0e33b2afeee7639f8)
2026-10-10 12:53:22 +13:00
xshxdex98 d5dedf19e0 Rotational particles: don't read past a bitmap's last sequence
Rotational sprites draw their edge-on view from the sequence after the state's. A particle bitmap on foundation has only one sequence, which halted the game in particle_system_render. Without that sequence the face-on sprite is drawn alone.

(cherry picked from commit d436a0c0c3abaf069dd34e4b8d761b49569311e6)
2026-10-10 12:53:22 +13:00
Paul Hontz fb9f03cf2c Split HALO_ANDROID into the guest's ABI, the ES renderer and the app
HALO_ANDROID meant three things at once. The port's code now names each:
HALO_ARM64_GUEST for the ILP32 AArch64 guest's code paths (the inline
assembly's C, the bss pragmas, the CRT's), HALO_GLES for the OpenGL ES
renderer (its GL header and function list, shaders and capabilities), and
HALO_ANDROID for the app alone (its display, input, files and lifecycle).

The Android build defines all three, so nothing changes for it, nor for
Linux and Windows, which define none. A build for another platform can
then take one part without the others: the ES renderer, or the guest's
ABI, without the Android app.

port/android/README.md also no longer says that the widescreen changes are
in #ifdef HALO_ANDROID: none have been since 50eae19b.
2026-10-09 09:05:44 -04:00
xshxdex98 1f7c5c9d5e Particles: a bitmap without the sequence drawn draws nothing
A particle state names its bitmap's sequence, which a Custom Edition map's
bitmap may not have, or may have with no sprites (Hornets Nest's). The
draw read past the bitmap's sequences, then took the sprite index modulo
a sprite count of zero. Such a particle is now skipped.

Found by ChupathingyCE (MrMilenko).
2026-10-07 20:52:23 -05:00
MrBruh d7efd3934a Validate map tags before loading 2026-10-07 12:01:09 +13:00
MrBruh 76addf661f Second hardening round 2026-10-07 00:01:28 +13: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 e7d1ed3a67 Harden and fix the netcode 2026-10-01 01:22:46 +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
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
MrBruh b0e3bc96e3 Fix framerate-dependent timing 2026-09-27 19:23:44 +13:00
MrBruh 0154ae9af5 Merge branch 'main' of https://github.com/cybersecurity/halo-ce-universal 2026-09-27 17:42:48 +13:00
MrBruh 0f38fea378 Merge remote-tracking branch 'upstream/main' 2026-09-27 16:57:47 +13:00
Jonas VolmanandClaude Opus 5.5 c03751048c effects: reconcile exact camera impulse comparison macro
Independently rebuilt and reviewed donor 06645ef4. Uses the existing authenticated realcmp macro; its site spelling remains inferred and VN effect disclosed. 738 meaningful / 752 padded bytes, no exact losses. Retires only the freshly exact scheduler park.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 19:35:22 -07:00
Jonas Volman 7c0af5f029 Reconcile approved compiler-application code, data and owner repairs 2026-09-26 12:02:50 -07:00
Jonas VolmanandClaude Opus 5.5 9a376181f5 Port: grow the game state and object pools for 128 players
The Xbox game state (0x345000 bytes at 0x80061000) ends exactly where the
map-linked tag cache begins and has 948 bytes free, so a 128-player
session cannot even allocate its player datums. The native builds now
place a 16 MB game state (CPU 0xFC0000, GPU 0x40000) at 0x81A00000, above
the tag cache and below everything the Xbox memory window hands out
top-down, and grow the pools that scale with the number of players:

- objects: 2048 -> 8192 headers, 1 MB -> 8 MB pool; the garbage limits
  keep January's proportions (5/10/20 % of the pool, 2.5/5/10 % of the
  headers, 75/50/30 active garbage objects per 16 players)
- cluster partition reference lists 2048 -> 8192 (collideable and
  noncollideable objects, lights); a full list drops objects out of
  rendering, collision and sphere queries
- effects 256 -> 2048, effect locations 512 -> 4096
- particles 1024 -> 8192 (render_particles' visible list, filled without
  a bound check, follows), particle systems 64 -> 256, their particles
  512 -> 4096
- contrails 256 -> 1024, contrail points 1024 -> 8192
  (MAXIMUM_CONTRAIL_POINTS stays the pool size for the same reason)
- lights 896 -> 4096, object looping sounds 1024 -> 4096
- cached object render states and rendered objects 256 -> 1024
- script object-list references 128 -> 1024, objects one explosion can
  damage 64 -> 256

The values live in port/linux/include/halo_port_capacity.h, included by
halo_port_limits.h. With 128 player datums the CPU part holds 14,256,908
bytes (2,258,164 free). Saved games and cores grow to 16 MB. Every change
is under HALO_LINUX; the MSVC objects are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 10:18:07 -07:00
MrBruh 95881a5f91 Replace port assembly with C 2026-09-26 23:56:21 +12:00
MrBruh 95c1e19338 Merge branch 'bnunu:main' into main 2026-09-26 20:40:13 +12:00
Jonas Volman 7272341b78 decals: reconcile approved flag mask and genuine geometry helpers
Match _decal_clip_to_surface: 1768 meaningful bytes, 59 relocations. The ordinary byte flag set predicate is owner-approved. Three new shared-header COMDATs match January and selected providers; both link orders are duplicate-free. No inherited exact losses.
2026-09-26 00:38:14 -07:00
MrBruh e29125b50e Port decomp to Android 2026-09-26 16:16:00 +12: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 VolmanandClaude Opus 5.5 42125a520c 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 11:08:01 -07:00
Jonas VolmanandClaude Opus 5.5 931ed8dc2b Layer 2: /Od-attested real_math.h helper bodies and provider hand-copy removal
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>
2026-09-23 20:46:43 -07:00
Jonas VolmanandClaude Opus 5.5 bf937aac0f Batch 1: admit files_windows and objects; five exact functions
- files_windows: _file_get_size strict exact from the /Od single-exit
  result and file_error's named GetLastError() local; park retired.
- objects: Layer 1 helper-provider repair (action_charge, player_control,
  bored_camera, path_obstacles, decals use the genuine real_math.h
  inlines instead of hand-written NODUP copies; every provider row
  unchanged, emitted COMDATs byte-identical to January's selected copies,
  pair links pass both orders) plus the pinned objects_update data entry.
- Exact functions: _dead_camera_new, _actor_perception_refresh_danger_zone,
  _actor_look_idle_find_prop, _texture_cache_steal_memory.
- Zero-credit PDB/HCEX ownership corrections: profile, transport endpoint,
  actor_firing_position, game_engine, real_math, model_animations.

Halo objects 361 -> 363, code +2,769 meaningful bytes, data +1,530,
stable diff +5 functions / 0 regressions, parks 94/0/0, pytest green.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 20:42:50 -07:00
Jonas Volman d90c9508a6 effects: recover weather particle physics inline helper calls 2026-09-23 16:28:41 -07:00
Jonas Volman f2f880f9c0 physics: match breakable surface effect with authentic inline helpers 2026-09-23 15:40:32 -07:00
Jonas Volman b0992d0ebe Admit nine verified Halo object closures 2026-09-23 14:25:38 -07:00
Jonas Volman 5e81dabff0 Close five Halo objects with verified shared-helper ownership 2026-09-23 10:38:14 -07:00
Jonas VolmanandClaude Opus 5.5 0a571b3398 Match script, particle and structure functions
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>
2026-09-23 01:07:36 -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 37d513310b Reconcile evidence-backed 10K exact batch 2026-09-19 23:12:42 -07:00
Jonas VolmanandClaude Opus 5 efb4624aa0 Wave 4: two functions strict exact (particle_systems, stack_walk_windows)
- _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>
2026-09-16 13:17:35 -07:00
Jonas VolmanandClaude Opus 5 d6df15102d Wave 1: four functions strict exact (moving, decals, ui_widget, projectiles)
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>
2026-09-16 11:36:32 -07:00
Jonas VolmanandClaude Opus 5 417fc10e48 Land the research campaign's two Tier A closures (+1,184 meaningful)
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>
2026-09-16 03:36:41 -07:00
Jonas VolmanandClaude Opus 5 ae10935da6 Match action_vehicle seat evaluation and reopen the input_xbox analog park
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>
2026-09-15 20:14:01 -07:00
Jonas VolmanandClaude Opus 5 1881e718b7 Match player_effects screen flash and complete a particle system render body
_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>
2026-09-15 18:05:56 -07:00
Jonas VolmanandClaude Opus 5 6555f3d0e6 particles: 2 function(s) strict exact
Wave w3 landing, adversarially verified. exact: _particle_update_physics; park reopens: _particle_next_frame. 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 14:45:19 -07:00
Jonas VolmanandClaude Opus 5 ec177ec2fc decals: retain verified credible source at zero credit
Wave w3 landing, adversarially verified. zero-credit fuzzy: _decal_new_from_collision. Full ninja build and per-function stable_verdicts sweep: 0 regressions.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 13:01:57 -07:00
Jonas VolmanandClaude Opus 5 7fe3891c3e weather_particle_systems: 1 function(s) strict exact
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>
2026-09-14 08:59:15 -07:00
Jonas VolmanandClaude Opus 5 789e992a6c particle_systems: 1 function(s) strict exact
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>
2026-09-14 07:53:16 -07:00
Jonas VolmanandClaude Opus 5 36021342d7 effects: 2 function(s) strict exact
Wave w2 landing, adversarially verified. park reopens: _effect_get_node_matrix, _effect_evaluate_function_integral. Full ninja build and per-function stable_verdicts sweep: 0 regressions. 2 park(s) removed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 07:39:38 -07:00
Jonas VolmanandClaude Opus 5 8e5976ae92 decals: 1 function(s) strict exact
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>
2026-09-14 02:50:56 -07:00
Jonas VolmanandClaude Opus 5 06304f8175 contrails: 1 function(s) strict exact
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>
2026-09-14 02:50:55 -07:00
Jonas VolmanandClaude Opus 5 2e81aa9596 effects: reopen corpse test, effect scale, disposition filter, generate_parts and effect_update exact
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>
2026-09-13 23:09:08 -07:00
Jonas VolmanandClaude Opus 5 828625092c Match decal_insert and motion_sensor assert/literal text to January .rdata
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 19:19:56 -07:00
Jonas VolmanandClaude Opus 5 4e20e8c9af Match four particle system state and creation functions
+4 strict exact functions / 992 padded bytes:
_particle_system_next_particle_state_index, _particle_system_next_type_state_index
(cseries PIN bounce clamp), _randomize_particle_variables (one
real_local_random_range draw per variable in January's seed order, as in
HCEA), and _particle_system_new_attached (single exit; per-component
TICKS_PER_SECOND scaling, dropping a candidate-only scale_vector3d owner).
particle_systems: 20 exact / 5 residual.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 11:03:12 -07:00