openvibers/openvibe.games ROADMAP.md
ROADMAP.md
Roadmap
Status legend: done = playable and tested, partial = real but
incomplete, next = current development target, future = not started.
A system is never "done" because a schema exists — it must have at least one
real playable vertical implementation.
Phase 0 — Vertical slice ✅ done
Proved every major system cooperates end-to-end (verified by
apps/server/scripts/sliceTest.ts on every change): authoritative server,
Babylon client (WebGPU/WebGL), Source-style predicted movement, interest-
managed replication, physics props with sleep-aware snapshotting, gathering,
inventory, data-driven crafting, physgun building, persistence across
restart, zone rules, logs//metrics//healthz.
Phase 0.5 — City, skills, tools, protection ✅ done
Scrap City safe city (map-authored, zone-enforced), tool capability system,
gathering professions with respawning typed nodes, 6 skills with XP/levels/
recipe gates, building content, prop protection with persistent trust,
weld constraint foundation (engine + persistence — no player-facing tool).
Phase 0.75 — Survival & sandbox life ✅ done (was undocumented)
Shipped after 0.5, ahead of the old roadmap: hunger/thirst/stamina/health
vitals with eating/drinking, food items + burn-barrel cooking, fall damage,
death/respawn; melee PvP with weapon capability, knockback, zone gating;
container props (storage box) with trusted access; hinged doors; planter
farming prototype (berry seeds, timestamp growth); merchant trades (bottle
caps); supply-drop crates (hardcoded event v1); day/night clock; guest
identity + openvibe.network SSO ranks; map editor as a mature authoring subsystem
with live world reconciliation.
Phase 1 — Sandbox depth ✅ done (Stage 2)
- Player-facing constraint toolset on a clean ConstraintDefinition/Record/
Service architecture: weld, rope, hinge, slider, spring, axis, motor - Constraint visuals (endpoints, ropes), two-click tool UX, unweld/cut
- Constraint islands: settled structures sleep as units; island metrics
- Placement ghost preview + optional surface/grid snapping (free placement
stays; modifier for precise unrestricted placement) - Physgun precision polish (snap angles, translation snap)
- Prop health/damage/repair capability (melee + impact; zone-gated
destruction; repair materials; destroy loot) - Hostile-input tests for every new message
Phase 2 — Item, container & survival depth ✅ done (Stage 3)
- Container domain module shared by boxes/machines/vehicles/merchants;
quick transfer, split, sort; container-to-container - Equipment slots + stack metadata (durability, instances) where gameplay
needs it — no speculative fields - Temperature (environment/wetness/shelter/clothing/heat sources) with
understandable rules; generic timed status-effect framework - Server-authoritative environment state: time of day, weather
(clear/cloudy/rain/storm/fog), temperature — client renders, gameplay
consumes
Phase 3 — Farming, utilities & production ✅ done (Stage 4)
- Data-driven crop definitions (several materially different crops:
stages, water/fertility needs, temperature ranges, regrow) — timestamp
progression, never per-tick - Irrigation/fertilizer/farm props via logical utility connections
- Generic utility networks: power (producer/consumer/storage), fuel
(items), water (tanks/pipes/pumps) — cheap when sleeping - Machine production chains: inputs → machine + time (+power/fuel/water/
skill) → outputs; crop processing feeds the same crafting economy
Phase 4 — Combat foundation ✅ done (Stage 5; hitscan pistol, armor, medical)
- Generic damage pipeline (source/target/type/amount/position/impulse);
blunt/cutting/projectile/explosive/environment/fall types; zone gating - Server-authoritative ranged weapons (fire intent → validate equipped/
ammo/cadence/direction → server raycast); small test weapon set - Armor/clothing damage reduction; bandage/medical consumables
Phase 5 — Spatial world foundation ✅ done (Stage 6)
- Uniform spatial hash replacing the linear interest scan and prop
proximity scans (workstations, shops); one index, many consumers - Region/cell activation concept (players, active NPCs, awake physics per
region) — the seam for simulation LOD and later streaming
Phase 6 — NPCs ✅ done (Stage 7; straight-line nav v1)
- Server-authoritative NPC domain: composition capabilities (npc, health,
inventory, faction, perception, combat, merchant, job) — no subclass
towers - Archetypes: civilian, city guard, merchant, bandit/scavenger, wildlife
(content-defined loadout/behavior/loot/importance) - NavigationService boundary (request path/waypoints/repath/invalidation)
- Modular perception: vision (distance/FOV/LOS), hearing (bounded sound
events from gameplay), threat - Behavior state modules (idle/wander/patrol/investigate/trade/guard/
chase/attack/retreat/return) — deterministic/testable - Simulation LOD tiers: full / simplified / abstract (no engine objects
far from players); persistence of abstract state
Phase 7 — Factions, reputation, economy ✅ done (Stage 8)
- Data-driven factions + relations; persistent player reputation with
thresholds (stock, prices, jobs, access) - Markets generalizing the fixed trade sheet (stock, restock, pricing,
reputation requirements) behind a transactional economy API - Production chains as player businesses, legal and underground, on the
same machinery; player specialization emerges from skills/machines/
geography — never class locks
Phase 8 — World events & extraction ✅ done (Stage 9)
- Generic server-owned event engine (scheduled/announced/active/
completed/cleanup); supply drops migrated onto it as proof - Extraction events: countdown, capacity, in-zone validation, contest
rules; explicit at-risk vs secured loot semantics owned by the server - High-risk regions via zone/event rules (better loot, hostile NPCs,
hazards)
Phase 9 — Progression & jobs ✅ done (Stage 10)
- Skills unlock capabilities (constraint tools, machines, crops,
components), not just recipes - Blueprint/discovery: persistent unlock state fed by skill, merchants,
jobs, found blueprints, dangerous regions, extraction, reputation - Job/contract foundation (deliver/gather/transport/kill/repair/escort)
with data-driven objectives and rewards
Phase 10 — Vehicles ✅ done (Stage 11; scrap cart prototype)
- Modular vehicle prototype from the SAME item + physics + constraint
architecture: chassis/wheels/suspension/engine/seat/storage/lights - Assembly recognition + activation; server-authoritative driving; fuel;
cargo containers; damage/repair; persistence + replication
Phase 11 — Scale 🔜 next (Stage 12)
ADR-0007 M4 now covers several rooms of one place in one process, PostgreSQL
leases, in-process transfer, cell interest and a socketless load probe. This
phase still covers streaming, multi-host routing and larger load profiles.
- Region persistence/streaming when the authored world justifies it
- Network measurement first (bytes/client, snapshot sizes, entity counts);
binary snapshot codec only when measurements demand it - Synthetic load tests: hundreds of sessions/props/constraints/NPCs —
hunting algorithmic scaling problems, not benchmark vanity
Phase 12 — Content & hardening (Stage 13)
- Interconnected content web (forest→sawmill→lumber; mine→forge→
components; farm→processing→trade), geography with economic meaning - Cross-system acceptance scenario (farm → process → haul → job → combat
→ extraction → sell → blueprint → restart-verified persistence) - Hostile-client test sweep across every network action
Platform integration (network roadmap Wave 12) — partial
- done: canonical Network subjects as account keys;
gamesservice
principal; durable events via outbox; Media copies of map-editor assets;
mod manifest validation, registry (install / grant / enable / disable /
revoke, audit) and the capability-checked runtime seam for declarative
games-content@1packs - waiting on the platform: mod principals and grants in OpenVibe.Network;
sandboxed executable mods (OpenVibe.Host Stage C);games.progress.summary
user-module writes are granted but not implemented
Standing engineering rules
- The slice test must stay green; new systems extend it
- Content changes never require engine changes
- No system may read another's internals — protocol/events/repositories only
- The map editor is load-bearing infrastructure: run
pnpm audit:editor
andpnpm test:editorwhen map/content schemas change - Plants, machines and networks progress by timestamp/state transition,
never per-tick simulation - Every new network action ships with hostile-input tests