Commit Graph
110 Commits
Author SHA1 Message Date
MrBruh 8fb1647e18 Fix weapon swap crash and log spam 2026-10-01 16:20:28 +13:00
MrBruh 083eef0c42 Validate player and machine names 2026-10-01 13:45:46 +13:00
MrBruh c5fcfbd46a Kick speed hacks and add bans 2026-10-01 13:12:54 +13:00
MrBruh 71ae1f47bc Fix seventh netcode review 2026-10-01 12:03:52 +13:00
MrBruh e233e1c1bb Fix fifth netcode review 2026-10-01 09:12:07 +13:00
MrBruh 671cc9ed91 Fix fourth netcode review 2026-10-01 06:23:16 +13:00
MrBruh 4f3ce00a8e Fix third netcode review 2026-10-01 04:57:51 +13:00
MrBruh 0d548798e5 Fix second netcode review 2026-10-01 03:54:02 +13:00
MrBruh aad8719ffc Fix client flags in the second game 2026-10-01 02:37:43 +13:00
MrBruh e7d1ed3a67 Harden and fix the netcode 2026-10-01 01:22:46 +13:00
MrBruh a3ed50c56d Remove the lockstep netcode 2026-09-30 22:12:05 +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
MrBruh 30709dbf0f Fix late joiners missing players and crashing 2026-09-30 13:53:49 +13:00
MrBruh 2ff6516f02 Fix joining games in progress 2026-09-30 03:29:38 +13:00
MrBruh 84ed39e257 Fix crosshair sprite crash and client update spam 2026-09-30 01:00:43 +13: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 21714ac086 Name single-player machines after their player 2026-09-29 16:10:02 +13:00
MrBruh 5c867dc46e Fix teams and player slots for mid-match joins 2026-09-29 15:49:22 +13:00
MrBruh c0c86bda26 Allow joining games in progress 2026-09-29 13:53:13 +13:00
MrBruh 087c1f5685 Improve netcode, add network versions 2026-09-29 11:32:57 +13:00
MrBruh 8fcfe9e653 Finish distributed netcode 2026-09-29 00:27:28 +13:00
MrBruh 391e83b11f Add distributed netcode 2026-09-28 22:27:37 +13: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 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 755f610025 Fix 128-player multiplayer issues 2026-09-27 18:17:24 +13:00
Jonas VolmanandClaude Opus 5.5 5d93d24e87 Networking: keep a host of 128 machines responsive
Found by running a 128-machine session with tools/system_link_bots.py:

- The listen backlog was 32 connections, so machines joining at once were
  refused; it is now the machine limit.
- Socket buffers are at least 1 MB. A host's connection to a machine must
  hold every update the machine has not acknowledged, up to 128 ticks of
  3.9 KB with 128 players; a full buffer blocked the host for the write
  timeout. The host's connection to its own client must also hold all it
  sends in one frame.
- Each machine that finished loading logged a line for every machine
  still loading, 8,000 lines as 128 machines load; it now logs a count.
- Removing a machine dumped the whole server state to the log; when many
  machines left at once the host wrote dumps for minutes.
- Machines that had loaded heard nothing while the others loaded, and a
  client drops a connection that is silent for 15 seconds, less than the
  60 seconds the host waits for slow machines. The host now sends its
  pregame keep-alive every 5 seconds while machines load; a client in game
  ignores it.

All under HALO_LINUX; the MSVC build is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 10:18:07 -07:00
Jonas VolmanandClaude Opus 5.5 db207ea1a4 Networking: 128 players on up to 128 machines in the native builds
The Xbox game allows 16 players on 4 machines (4 split screen players
each). The native builds raise both limits to 128, keeping 4 players per
machine, and leave the byte-matching build unchanged: every change is
under HALO_LINUX (the MSVC objects compare identical).

- Limits: every local copy of the player and machine limits, and the
  bare 4s and 16s that stood for them, follow halo_port_limits.h. The
  player data array, the machine-to-player table (and its reset) and the
  per-tick update arrays grow with them.
- Records: the copies of struct network_game agree on the larger layout
  and check it against halo_port_limits.h; maximum_player_count becomes
  a byte (128 does not fit a signed char); network_player_is_valid
  checks the machine against the machine limit, not the split screen
  one; a machine's input carries MAXIMUM_LOCAL_PLAYERS actions (16/4
  would have become 128/128).
- Protocol: a message holds at most 4095 bytes (its header has a 12-bit
  length), so the 13 KB game settings record is sent in 3.5 KB pieces
  that clients reassemble; the per-tick update of 128 players (3,857
  bytes) fits. Buffers and the packet codec's limits grow to match, and
  the game search uses protocol version 2 so these builds and the Xbox
  game never see each other's games.
- Connections: the host accepts a client connection per machine (the
  split screen count stood in for it), FD_SETSIZE is 256, stream writes
  send all of a message or drop a peer that stops reading instead of
  corrupting the stream, and the input and update queues are larger.
- Host: lobby changes are sent at most every 250 ms instead of on every
  change (a full lobby would otherwise send ~650 MB), in-game joins wait
  in a queue instead of being dropped, the random name and colour
  pickers stop looping forever once names or colours run out, machines
  get 60 s to load a map, and the debug dump lists only the slots in
  use (128 empty slots took seconds to log).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 10:18:07 -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 VolmanandClaude Opus 5.5 f7cd2e722e Batch 4a: admit player_ui and sound_manager with their shared-header packets
player_ui (header prerequisite + admission; reviewer-amended):
- game_engine.h: the opaque game_variant view becomes the recovered January
  layout (universal/ctf/slayer/oddball/king/race variant members, HCEX names
  where January's offsets attest them); member renames across the game
  engine variants, network managers and playlist_profile.
- player_ui.h: player_ui_get_edit_playlist_profile returns struct game_variant *;
  ui_widget_game_data_input_functions adopts it (reviewer patch 07 removes the
  two C4133 warnings the worker's packet introduced).
- player_ui.c drops its partial playlist_profile view; symbols.json names
  player1_profile_path; rejection retired; status Matching.

sound_manager (shared header sound_definitions.h, 18 consumers):
- sound_definition_find_pitch_range_by_pitch takes HCEX `short old_range_index`
  with the /Od 0x877810 single-exit body (prototype and definition together).
- update_channel_for_looping_sound (1360) and sound_set_definition_end (208) are
  exact in the /Od-attested shape; 45 static flags per cachebeta publics; parks
  retired; status Matching.

Gate (full ninja, objdiff 3.3.1): Halo objects 375 -> 377; stable diff +2
strict / 1,568 padded, 0 regressions across both header consumer sets; parks
87/0/0; admission 11/0/4/0; fake scan 26 (unchanged); pytest 1157 passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 02:21:50 -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 VolmanandClaude Opus 5 6be078ec96 Wave 20: seven functions strict exact (encounters, network_connection, stack walk)
- encounters: _encounter_update_status (stay_active flag, direct
  accumulations in January's store order), _encounters_test_activation
  (January's non-short-circuit activation OR chain, HCEA-corroborated;
  bound parent and link locals), and park reopens
  _encounter_compute_activation_cluster_bit_vector (named parent locals,
  store-once dormant desire) and _encounter_update_respawn (bounded
  respawn while loop)
- network_connection: _network_connection_write (real
  notify_traffic_event calls replace a hand copy; January's double
  would-block loop test; single exit) and _network_connection_new
  (single-exit success flag replaces the goto teardown; January assert
  texts) - both park reopens
- _symbol_name_from_address: reads through symbol_table directly

Stable diff vs 9062b1e96: 0 regressions; active parks 195 -> 191.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 22:32:21 -07:00
Jonas VolmanandClaude Opus 5 4d6c7f99c3 Wave 5: eleven functions strict exact (vehicles, networking)
Owner-unblocked units, reviewed reconstructions, each strict exact in its
whole-TU gate with zero inherited losses, guard passing, no new owners:
- vehicles: _vehicle_update with cross/dot helpers on the object fields
  (removes two invented static carriers), vehicle-type switch, PIN
- network_connection: read_unreliable/read_reliable single-exit bodies
  with January's literals (including the '#d' typo) and a reset flag,
  read assert text, get_address per-path clears, idle and
  idle_server_reliable_endpoint (six park reopens)
- transport_endpoint_winsock: connect_endpoint_async, write_to_endpoint,
  read_from_endpoint single-exit results (three park reopens)
- transport_endpoint_set_winsock: remove_endpoint_from_set single exit

Rejected: _poll_endpoint_set (negative-result clamp chosen to steer block
order), _add_endpoint_to_set (identical FD_SET branches),
_action_obey_command_begin (redundant store), _actor_action_try_to_dive
(units.h prototype contradicting its definition).
Stable diff vs 9062b1e96: 0 regressions; parks 250 -> 240.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 13:55:03 -07:00
Jonas VolmanandClaude Opus 5 42f5730143 Unblocked reserved units: six networking functions strict exact
Owner lifted the reservation on the concurrent-work units for this
isolated lane. Per-function donor harvest (upstream punpckhdq PR50 and
the unmerged root/publish-opus5-safe-20260913 reconciliation), each
landed as a house-rule-clean minimum body, strict exact in its whole-TU
gate with zero inherited losses:
- transport_network_available: boolean result declared and initialized
  from the link-status mask (January masks the byte result)
- transport_nonce_is_equal: boolean comparison of the memcmp result,
  keeping the owner void const * prototype
- winsock_error_to_string: January's switch case order
- read_endpoint: single-exit result with one error store
- network_connection_connected/disconnect: boolean expressions over the
  client-flag and endpoint tests

Donor steering forms were not imported (boolean truncation casts,
byte * parameters). Stable diff vs 9062b1e96: 0 regressions; parks
261 -> 255.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 11:44:16 -07:00
Jonas VolmanandClaude Opus 5 94654d61fc network_server_message_handler: 2 function(s) strict exact
Wave w2 landing, adversarially verified. park reopens: _network_game_server_handle_message_client_ping, _network_game_server_handle_datagram. 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:46 -07:00
Jonas Volman f472b6fcb7 Admit exact network manager objects 2026-09-13 03:49:13 -07:00
Jonas Volman 5d3444f799 Reconcile eighth 10K exact source batch 2026-09-13 02:47:59 -07:00
Jonas Volman 105d9acaac Reconcile 10K exact-byte Claude batch 2026-09-09 00:07:34 -07:00
Jonas Volman 303c1d55a7 Reconcile Bink UI network HS and sound graphs 2026-09-08 12:49:14 -07:00
Jonas Volman 458ba910cc Reconcile PlayerProfile and S3TC with honest fuzzy retention 2026-09-07 21:38:50 -07:00
Jonas Volman 883e7c0621 Restore defined countdown increment with runtime regression coverage 2026-09-06 17:24:34 -07:00
Jonas Volman 2b2589b5cb Expose verified server idle protocol prerequisites 2026-09-06 17:01:01 -07:00
Jonas Volman 52612df62d Reconstruct server creation and rejection with safe disposal 2026-09-06 16:25:54 -07:00
Jonas Volman 8549cb79af Reconstruct server reset and playlist setup with verified owner contracts 2026-09-06 15:39:13 -07:00
Jonas Volman d574f4ff45 Restore five source-attested network server functions 2026-09-06 11:04:14 -07:00
Jonas Volman cf41012e58 Reconstruct natural Network write path with typed owner APIs 2026-09-04 23:53:57 -07:00
Jonas Volman 7aecaa1824 Reconcile typed network idle cluster and timeout-global ownership 2026-09-04 23:15:43 -07:00
Jonas Volman a5c2c50ab1 Reconstruct endpoint-set operations and reconcile Telnet API ownership 2026-09-04 20:36:07 -07:00
Jonas Volman 4795da4089 Recover device, input, HUD and game leaves without exact regressions 2026-09-04 15:43:51 -07:00