HullShroud
GamesIndoor FPS

Shroud

They learn from you. An indoor shooter whose AI squad evolves from your past matches. Porting it moved its whole shell into the engine.

Shroud: a firefight in a desert yard, the player aiming over a low wall at two squad members, HUD with health and ammo
Shroud, mid firefight

The game

Shroud is a first-person shooter where the enemy squad is bred from the squads that did best against you. Traits evolve with a genetic algorithm, tactics come from a utility AI, combat moves from NEAT networks, and a player model records where you camp and how you strafe.

It was the first game on the engine. Its control port, offscreen capture, perf overlay and session log moved into the engine, and its dark theme and arena sun became the engine defaults.

from 13,467to 7,833
lines of game code, before and after the port
3
sub-states of its own under InGame: Playing, Evolving, Debrief

Where the line falls

From the engine

  • App shell and statesBoot, MainMenu and InGame from the engine; Shroud adds Playing, Evolving and Debrief as sub-states.
  • Menus, settings and pauseMain menu, match setup screen, pause header with the score, the whole settings screen.
  • FpsControllerWalk 5, sprint 8, jump 6.5, crouch to 1.2 m, eye at 1.65 m. Weapon systems run after FpsSet::Move.
  • DevtoolsControl port, offscreen capture, perf overlay, session log and trace. Shroud deleted its own copies.
  • AudioSoundLibrary variants for every sound effect, an ambience loop, muting in test runs.

In Shroud

  • The brainA pure Rust crate with no Bevy: arena and navigation, the trait genome, NEAT, the player model, utility AI and a 2D trainer sim.
  • Its lookExposure, AgX tone mapping, distance fog and atmosphere on its own camera. The engine only sets quality, MSAA and FOV.
  • Its settings sectionDifficulty, map, crosshair colour, crosshair size and squad callouts, as FieldDefs on Gameplay and HUD tabs.
  • Its game commandsgame.state, player.*, enemy.*, ai.* and sim.* stay in Shroud; old names are aliased to the engine’s.

Screens

What the render budget does here

  • Nothing, at HighArenas are small, so at High nothing is far enough to change. On Low (×0.6) props fade past 36 m and big blocks go flat past 48 m.
  • Two tags recommendedTag the player and enemy roots Actor, so an enemy standing still in its first second is never treated as scenery.