feat(engine): add rng_seed to ObserverSnapshot for deterministic replay (#527)

Add rng_seed: Option<u64> to ObserverSnapshot (protocol v10). Populated
from SimRng state each tick. Completes the WRONG button capture loop —
seed.txt now writes a valid u64 instead of "unavailable", enabling
deterministic replay from bug reports.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-19 13:34:14 +01:00
co-authored by Claude Opus 4.6
parent 0f5a990f82
commit 9ea9fd2a74
3 changed files with 12 additions and 1 deletions
+3
View File
@@ -21,6 +21,7 @@ use crate::simulation::interaction::NearbyInteractionBuffer;
use crate::simulation::inventory::{CarriedBy, InventorySlot, ItemName};
use crate::simulation::monologue::{MonologueBuffer, SprintAnomalyQueue};
use crate::simulation::movement::{PlayerCharacter, TilePosition, WalkabilityMap};
use crate::simulation::rng::SimRng;
use crate::simulation::stance::Stance;
use crate::simulation::time::SimulationTime;
@@ -81,6 +82,7 @@ pub fn compute_observer_snapshot(
)>,
inventory_items: Query<(Entity, &CarriedBy, &ItemName, &InventorySlot)>,
mut buffer: ResMut<SnapshotBuffer>,
sim_rng: Option<Res<SimRng>>,
) {
let Ok((
observer_entity,
@@ -215,6 +217,7 @@ pub fn compute_observer_snapshot(
dialogue_response,
blocked_entities,
scan_events,
rng_seed: sim_rng.as_deref().map(|r| r.seed()),
});
}