Commit Graph
1060 Commits
Author SHA1 Message Date
Jonas Volman c801d5ec6e Match game engine nondeterministic update cluster 2026-07-25 21:52:27 -07:00
Jonas Volman 5d7fd76ea6 Match game engine nav point rendering 2026-07-25 21:49:14 -07:00
Jonas Volman 14028884e1 Match player device action selection 2026-07-25 21:48:43 -07:00
Jonas Volman 579a81f221 Match game engine nonplayer post rasterize 2026-07-25 21:45:10 -07:00
Jonas Volman 341df109e4 Match player minor powerup handling 2026-07-25 21:41:58 -07:00
Jonas Volman 60314bc1f2 Match game engine vehicle remapping 2026-07-25 21:41:21 -07:00
Jonas Volman 484fb94158 Match player teleport debug rendering 2026-07-25 21:39:34 -07:00
Jonas Volman d276afc9ee Match game engine pickup dispatch 2026-07-25 21:34:32 -07:00
Jonas Volman 172cffa233 Match player spawn handling 2026-07-25 21:32:58 -07:00
Jonas Volman 49237466e7 Match player BSP reconnection 2026-07-25 21:29:30 -07:00
Jonas Volman 84889947c5 Match actor swarm sense-position selection 2026-07-25 21:25:35 -07:00
Jonas Volman 0c2ea667f5 Match game engine weapon fired hook 2026-07-25 21:19:59 -07:00
Jonas Volman fbd3ae7eac Match players equipment and powerup helpers 2026-07-25 21:19:59 -07:00
Jonas Volman a5e4031a7b Match game engine spawn distance rating 2026-07-25 21:13:03 -07:00
Jonas Volman 539517be38 Match game engine map initialization 2026-07-25 21:13:03 -07:00
Jonas Volman 91aa11ee23 Match actor flee-with-friends evaluation 2026-07-25 21:05:51 -07:00
Jonas Volman de011931d7 Match players starting location and unit helpers 2026-07-25 21:02:23 -07:00
Jonas Volman 3888a30f09 Match game engine man-out gate 2026-07-25 21:00:08 -07:00
Jonas Volman 57aa09755d Match killer prop lookup 2026-07-25 20:53:15 -07:00
Jonas Volman 03d06fb051 Match recent damaging prop lookup 2026-07-25 20:51:35 -07:00
Jonas Volman 047860ae91 Match players lane 2 predicates and math leaves 2026-07-25 20:46:55 -07:00
Jonas Volman c8a6ed6dda Match custom motion sensor goals 2026-07-25 20:35:06 -07:00
Jonas Volman 09031a9a45 Match players lane 1 functions 2026-07-25 20:34:09 -07:00
Jonas Volman fbde70888c Match game engine goal and color getters 2026-07-25 20:28:23 -07:00
Jonas Volman c19220761d Match actor expected acknowledgement 2026-07-25 20:17:17 -07:00
Jonas Volman c861adcc34 Match actor perception knowledge query 2026-07-25 20:11:45 -07:00
Jonas Volman a7047c1158 Reconstruct actor perception targeting leaves 2026-07-25 20:11:45 -07:00
Jonas Volman 69e845216e Match named game variant lookup 2026-07-25 20:11:37 -07:00
Jonas Volman ac9bc75f9e Match default game winner evaluation 2026-07-25 20:02:31 -07:00
Jonas Volman 2ec5e0a636 Reconstruct actor perception lifecycle predicates 2026-07-25 19:53:25 -07:00
Jonas Volman 87209fe0e7 Match game engine post-rasterize dispatch 2026-07-25 19:53:25 -07:00
Jonas Volman 23429c1137 Match Unicode game time formatting 2026-07-25 19:51:43 -07:00
Jonas Volman 4c769166f3 Match LRA cache validation and access cluster 2026-07-25 19:47:53 -07:00
Jonas Volman e63e2e963e Reconstruct actor perception leaves 2026-07-25 19:38:42 -07:00
Jonas Volman cf20559e0a Match dropped object cleanup pass 2026-07-25 19:37:14 -07:00
Jonas Volman 964b3636fd Match game engine live biped filter 2026-07-25 19:31:11 -07:00
Jonas Volman 2e7a5b4881 Match game engine flag policy and reset 2026-07-25 19:29:47 -07:00
Jonas Volman e42991ed51 Match empty game engine callback 2026-07-25 19:26:38 -07:00
Jonas Volman 1be1c4e700 Match statistic buffer comparator 2026-07-25 19:23:45 -07:00
Jonas Volman b964a94d6f Match game engine stealth weapon predicate 2026-07-25 19:11:48 -07:00
Jonas Volman 92e215e5c6 Match game engine playlist selection 2026-07-25 19:09:38 -07:00
Jonas Volman 9bd6db1d48 Match game engine math and flag leaves 2026-07-25 19:01:32 -07:00
Jonas Volman dd0b2c87fb Match scenario object ownership 2026-07-25 18:51:02 -07:00
Jonas Volman 136e297008 Document deferred game_engine_man_out schedule tie
Full logic recovered (all player_datum/game_statistics/game_variant fields
mapped, 7 relocations and both datum_get calls match) but January keeps the
conditional fallback code_00097250() call expanded (112B) where our CL
compacts it to 96B -- same optimiser-determinism class as atmospheric_fog.
Recorded in-source next to get_goal_position for a later schedule pass.
2026-07-25 18:44:31 -07:00
Jonas Volman e7fc71bb9b Match game_engine_initialize
Byte-exact (96 bytes / 8 relocations): zeroes game_engine_globals, clears
postgame_state, and when given a variant with an engine type copies it into
global_variant, runs game_engine_variant_cleanup, and points game_engine at
the matching handler table in game_engines[]. Adds the game_engines[] extern
and a forward prototype for game_engine_variant_cleanup (signature inferred
from this call site: takes struct game_variant *). game_engine exact 57 -> 58.
2026-07-25 18:44:31 -07:00
Jonas Volman d9f394bdd8 Match game_engine_display_team_indicators
Byte-exact (48 bytes / 3 relocations): returns whether team indicators
should display -- game_engine present, a game_variant flag set, and teams
enabled. Follows the game_engine_has_teams donor shape (if (game_engine)
result = <expr>;) rather than a flat && chain, which reproduces the
January register schedule (has_teams read into the AL result register).

The tested flag is bit 1 of game_variant.flags, which had no name in the
enum; added as _game_variant_unknown1_bit = 1 (honest placeholder, matching
the codebase unused/unknown convention). game_engine exact 56 -> 57.
2026-07-25 18:44:31 -07:00
Jonas Volman 57708b65b0 Document deferred game_engine_get_goal_position schedule tie
get_goal_position reconstructs to the exact size (96 bytes) and relocations
(6) but the trailing real_point3d copy has a residual instruction-schedule
difference (January reuses ESI with redundant pointer moves; our builds
schedule tighter through EDX). ~8 source shapes tried. Recorded as an
in-source note at its January-order position for a later typed-local-alias
pass; representative of the getter-tuning tier (man_out, get_starting_
location_rating).
2026-07-25 18:44:31 -07:00
Jonas Volman 120941d994 Match game_engine message and statistics dispatchers
game_engine_statistics_append, game_engine_handle_client_message and
game_engine_handle_server_message: vtable tail-call dispatchers at handler
offsets 0x20/0x24/0x28, byte-exact (32 bytes / 1 relocation each). Total
game_engine exact 53 -> 56.

Each passes a single argument through to the handler, which is what forces
the /Oy- frame pointer that the no-argument dispatchers (e.g. game_ending)
omit. The argument type/count is byte-identical for any single 4-byte value
and is not constrained by any in-tree caller yet; typed as a best-effort
inference (long statistic / void *message).
2026-07-25 18:44:31 -07:00
Jonas Volman d8f386b509 Match scenario atmospheric fog
Complete scenario.obj: _scenario_get_atmospheric_fog is now byte-exact
(816/816 bytes, 38/38 relocations; all 56 section symbols match).

XDK 3911 CL tail-merges the default-sky lookup with the else-branch
scenario_get_sky() lookup, where the January binary keeps them separate.
Around forty barrier-free source shapes, plus TU-context, register-pressure,
branch-order, hoisted-NULL, parameter-type and second-expansion variants,
failed to reproduce the split tails. Two zero-byte _ReadWriteBarrier()
intrinsics do: one in site-1 blocks the tail-merge, one in the else restores
the je jump-thread. Matches the object_shadows.c precedent; full rationale
is in the source comment.
2026-07-25 18:44:31 -07:00
Jonas Volman 82c66de87e Document scenario atmospheric fog scheduler tie 2026-07-25 18:44:31 -07:00