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>
2.4 KiB
World entities and the funnel
There is one funnel
human ─┐
bot ├─→ TickInput ─→ sim::step ─→ Snapshot ─→ client / theater / demo
replay ┘
pub fn step(world: &mut SimWorld, tick: Tick, input: &TickInput,
msec: i32, reason: StepReason) -> Snapshot;
Headless, prediction and replay call exactly this one.
msec is the step length; time enters only as an argument. The shape of
the funnel is SIM-STEP.md, the code crates/sim/src/lib.rs.
What can be an entity at all — fixed by the data (entity_iw4)
The wiring is ours, the taxonomy comes with the data. The crate neither
serializes nor orders fields "for the network": it pins the layout it reads,
and leaves transport to net.
EntityState |
replicated snapshot slot, stride 0x100 |
Centity |
client-side slot, stride 0x204 (pose plus snapshot anchors) |
ClientState |
per-client slot, stride 0x7c (command, name[16]) |
CorpseInfo |
server-side corpse slot, stride 0x53c, 8 of them |
ET_PLAYER / ET_PLAYER_CORPSE / ET_ITEM / ET_MISSILE |
|
Trajectory |
evaluate_trajectory: gravity 400, delta 800 |
| events | the entity-event ring, an 11-bit wrapper |
ENTITYNUM_NONE |
0x7FF |
playerstate_iw4 |
player and input: the two ends of the funnel |
Where everything else lives
sim/—gentity spawn world snapshot damage bullet* missile item corpse match_state score rules world_objects identities(ScriptModelIdis the one identity of a script model; a rawu32is not a second one);frame—AppScreen,RuntimeRole,LaunchIdentityandScopePlugin: match/round states, scoped resource registration and entity retirement;session— standing the match up and tearing it down throughScopeControl;net— wire, deltas, prediction;bots— host-only controllers that observe through a sensor adapter, walk a ClipMap-baked graph and enter the sameTickInput.
net/transport/meta_wire.rs encodes and parses metadata messages. The pure
world_object_wire.rs codec validates complete world-object updates;
world_sync.rs owns mutable baselines and periodic full synchronization.
Frame decoding commits its prepared world update after reliable and service
sections succeed, so a refused frame leaves the world baseline intact.
Snapshots publish the semantics of DObj composition, never runtime trees or
posed vertices (ANIM.md).