21 Commits

Author SHA1 Message Date
vtroc7 a2f189df10 Scope match lifetimes and restore gameplay and menu presentation
Prepare progression and loading through Bevy scheduling, preserve round HUD and bombsite props, restore grenade and T5 shadow presentation, and keep menus usable while classes load. Report update progress and continue startup after update failures.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 23:01:34 +03:00
JohnM e6a658bf33 Keep the baked bot navigation when only weapon or class data changes
The baked walk graph is reused in memory and cached on disk under the
world's content_digest, which also folds in the weapon tables (combat,
penetration, admission, camouflage, equipment) and the class catalog.
The walk never reads those: it traces clip geometry and script-model
collision from the spawns and objectives. So any weapon or class change,
including installing or removing a game that donates weapons, sent every
map back through a cold bake on its next load, one of the longest steps
of a first map load.

The graph is now keyed on the `map` (spawns and clip brushes) and
`models` (script-model collision) content components only, and
NAV_SCHEMA goes to 9 so graphs cached under the old key are not
reused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 03:40:04 +08:00
JohnM d934e6ea33 Keep bots inside the 18 player slots instead of colliding with corpses
A bot took the next unused client id with no upper bound, and the roster
only capped bots at MAX_HOST_BOTS (20). The lobby's Enemy and Friendly
Bots rules plus a `bot add`, or two `bot add` commands, could therefore
make more than 17 bots beside the host. Client ids are also entity
numbers, and the corpse ring starts at entity 18
(PLAYER_CORPSE_ENTITY_BASE), so bots 18 and up shared an entity number
with a corpse: the net layer rejected the snapshot entity as a
centity-number gap, and the end-of-match client data overran its 18 rows
(setclientmatchdata IndexOutOfRange).

Bots now claim ids 1..17 only, wrapping around to reuse freed ids, and
adding stops when every slot is taken.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 03:40:04 +08:00
vtroc7 7eff9406fb Connect native soldier hands and finalize match rule integration 2026-10-07 12:52:50 +03:00
neptune 682f714148 Add Constant Radar, Enemy Bots and Friendly Bots game rules
Constant Radar (Gameplay Options) keeps every player's radar constant
unless an EMP blocks it, and the compass shows every living enemy each
frame, Cold-Blooded or not. Enemy Bots (0-9) and Friendly Bots (0-8, team
modes only) under Team Options add that many bots when the match starts;
a sided bot waits for the local player's team, then answers the team menu
with it or the other one. Free-for-all ignores the friendly count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 16:36:47 -04:00
vtroc7 f026f5fca0 Improve runtime readiness, rendering, audio and Linux game discovery 2026-10-05 23:41:16 +03:00
vtroc7 65052d3f51 Add native T5 audio, Black Ops II maps, independent movement, late join, skill ratings and varied bot loadouts
Decode Black Ops audio natively and load Black Ops II worlds, faction
models, equipment, materials, lighting and weapon camouflage.

Rework capsule collision, solid recovery, penetration, recoil, effects
and sentry placement; synchronize late joins and player event delivery.
Keep local skill ratings and signed player accounts.

Show the selected community and master ping on the main menu. Add twenty
asset-filtered class presets across IW4, IW5, T5 and T6, plus fifty-two
unique player-style names shared by AI bots and dummies. Honor the chosen
dev descriptor in the two-client approved scenario and credit contributors
and weapon, map and attachment QA testers.

Validated with the approved gameplay lifecycle and two-client dev-master
scenarios, installed class-asset audit, bot-name uniqueness checks and
Linux IW4/IW5/T5/T6 gameplay smoke runs. Foreign-weapon match-stat schema
coverage remains incomplete.
2026-10-05 13:13:28 +03:00
neptune 818ba83cc8 Run Black Ops II equipment as Black Ops II does
Tactical insertion: under IW4 rules offhands are bridged by name only, so
the upstream slot stand-ins no longer hand the scripts a flash for it (it
plants and sets the spawn again); hidden entities stay usable, so its
owner picks it back up.

Equipment stats: read T6 detonate delay/time, damage cone, forward and
view-relative up speed, the detonator flag (C4 detonates) and the
retrievable flag (owner pickup only where T6 allows it).

Equipment behaviour: iw4l_t6/equipment ports T6's bouncing betty, shock
charge, trophy system, sensor and EMP grenades onto IW4's scripts, plus
T6's one-of-each counts, claymore grace and respawn cleanup. The engine
reports those items under their own names, tags thrown grenades with
nativename/weaponmodel, keeps sensors planted, drops the claymore laser
from betty and trophy, and lets objective_team address one player (sensor
pings, drawn in FFA too; protocol 103).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 16:12:02 -04:00
vtroc7 3694c35041 Audio control runtime, typed player accounts, self-updates, thermal and shellshock screens, third person, guided killstreak HUD, player cards, a lobby cheats toggle and god mode
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:57:27 +03:00
Bulat Fatykh b7f04c53f3 Remove unused runtime code and dependencies 2026-09-30 07:53:22 +03:00
vtroc7 1a0daffd18 Play T5 and IW5 maps under IW4 match rules 2026-09-28 20:48:06 +03:00
vtroc7 38aa9cf741 Run IW4 match flow, menus and killstreaks from the game scripts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 18:35:44 +03:00
vtroc7 72ee2098da Improve killcams, combat effects, and asset presentation 2026-09-25 00:05:20 +03:00
vtroc7 69cf9ff9fa Prepare weapon presentation and add alternate modes, device feedback and collision fixes 2026-09-24 05:30:17 +03:00
vtroc7 94e3983bfc Shared common content, prepared weapon families, and one way out of a session
- One common set per content profile, shared by every match and the loadout
  menu; a restart over the same map keeps its images and static geometry.
- Weapons resolve as families: attachments are chosen from each game's own
  tables, checked, and composed into prepared configurations with their
  first-person skeleton assembled once.
- Sessions end through one teardown and one process exit; retired resources
  are dropped on a worker, not the frame.
- Sound is captured by the walks that already read each zone.
- A loading screen that reports what the load is doing.
- Tests live only in crates/approved_tests (heavy_gameplay_lifecycle);
  publish-check refuses them anywhere else.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 17:10:02 +03:00
vtroc7 52d31f1ee2 A loading screen that says what the load is doing, and a first-person rig prepared once per composition
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 23:28:55 +03:00
vtroc7 bca31343e5 Bots that fight and take objectives, and glass that cracks into real shards
Host bots bake a navigation graph off the clip map and walk it — drop and
break-glass edges, routes that resume across ticks under a shared per-tick
query budget, firing positions chosen from baked supports rather than a ring
around the bot. They pick a weapon, reload or switch when the magazine runs
out, and plant, defuse and claim flags on their own.

A broken pane now builds a planar crack graph and emits shards carrying their
holes and open cracks, so tessellation and repeated hits read the stored
geometry instead of assuming a convex fan from vertex zero.

Sun cascades are clipped to the view. Class select and the options menu match
the layout players expect. Weapon definitions load from IW5 and T5 fastfiles.

The test suite is removed: it had grown into scaffolding for the dig rather
than a description of the runtime, and new tests will be written against the
behaviour that stayed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 02:49:55 +03:00
vtroc 3da14468fd Keep the two-bot Domination clip off the default test run.
`mp_boneyard_dom_and_two_bots` ends with the flag still mid-progress: one bot
holds the capture alone while the other reports `BudgetExhausted` on its path,
and the 500 ticks the test allows run out before the flag turns over. It fails
on every run and takes about a minute of the suite to do it.

It is `#[ignore]`d rather than deleted — the walk, the sight and the fight it
covers are real, and the run is one `--ignored` away.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 13:05:37 +03:00
vtroc 311c8fa336 Time a whole run in one process, and keep a hitch from ending the session.
`make bench` is one recipe over one run now. `IW4L_BENCH=1` arms an in-process
recorder on the spans that already feed Perfetto, and at exit the run prints
two independent reports and writes them to `iw4l-artifacts/bench/<stamp>.txt`:
the waterfall from the shell command to a playable map, carrying the time each
load stage held the pool alone, and frame time as a span tree whose nesting is
recorded rather than declared. Neither needs a trace file or Trace Processor,
and either can be MISS while the other stands. `bench-demo` and `bench-load`
are gone — a goal after `bench` is a demo, `ZONE=` is a live map.

A bot is no longer minted onto an id a real client already owns. The roster
steps over the ids the authority and the local player hold, and a slot that
still lands on the local player is retired, because `is_bot` would otherwise
claim the player and nothing could drive the slot anyway.

A stretch with no authority ack re-adopts the next snapshot and counts one
stall; three of them still fail the link. Failing on the first turned every
long frame into a permanent disconnect.

The loading overlay comes down once the world is installed rather than waiting
on the class-select hop, which a replay never makes — it was playing the whole
demo behind `UiLayer::Loading`, with map ambience held back.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013bHwyKwUjaYmtVG1F3Ttku
2026-09-15 14:56:07 +03:00
vtroc a7c0958668 Shatter glass, finish ordinary fire, walk host bots on the clip, and run radiation's authored toys.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 19:29:22 +03:00
vtroc 0f387098e7 IW4L 2026-09-13 13:52:33 +03:00