08 — Development Roadmap (36 Months)
Phase Dependencies
Phase 0 (Foundation)
└→ Phase 1 (Rendering + Bevy visual pipeline)
└→ Phase 2 (Simulation) ← CRITICAL MILESTONE
├→ Phase 3 (Game Chrome)
│ └→ Phase 4 (AI & Single Player)
│ └→ Phase 5 (Multiplayer)
│ └→ Phase 6a (Core Modding + Scenario Editor + Full Workshop)
│ └→ Phase 6b (Campaign Editor + Game Modes)
│ └→ Phase 7 (LLM Missions + Ecosystem + Polish)
└→ [Test infrastructure, CI, headless sim tests]
Phase 0: Foundation & Format Literacy (Months 1–3)
Goal: Read everything OpenRA reads, produce nothing visible yet.
Deliverables
ic-cnc-contentcrate: parse.mixarchives, SHP/TMP sprites,.audaudio,.palpalettes,.vqavideo- Parse OpenRA YAML manifests, map format, rule definitions
cnc-formatsCLI tool — Phase 0 subcommands:identify(content-based format sniffing via magic bytes),validate(structural correctness check),inspect(dump archive contents and format metadata,--jsonfor machine-readable output),convert(extensible--format/--toformat conversion; text:--format miniyaml --to yamlbehindminiyamlfeature; binary: SHP↔PNG, SHP↔GIF, AUD↔WAV, VQA↔AVI, VQA→MKV, WSA↔PNG/GIF, TMP→PNG, PAL→PNG, FNT→PNG behindconvertfeature; text sprites:--to ist/--format istbehindistfeature flag)- Runtime MiniYAML loading (D025): MiniYAML files load directly at runtime — auto-converts in memory, no pre-conversion required
- OpenRA vocabulary alias registry (D023): Accept OpenRA trait names (
Armament,Valued, etc.) as YAML key aliases alongside IC-native names - OpenRA mod manifest parser (D026): Parse OpenRA
mod.yamlmanifests, map directory layout to IC equivalents - Extensive tests against known-good OpenRA data
Key Architecture Work
- Define
PlayerOrderenum inic-protocolcrate - Define
OrderCodectrait (for future cross-engine compatibility) - Define
CoordTransform(coordinate system translation) - Study OpenRA architecture: Game loop, World/Actor/Trait hierarchy, OrderManager, mod manifest system
Community Foundation (D037)
- Code of conduct and contribution guidelines published
- RFC process documented for major design decisions
- License decision finalized (P006)
Legal & CI Infrastructure
- SPDX license headers on all source files (
// SPDX-License-Identifier: GPL-3.0-or-later) deny.toml+cargo deny check licensesin CI pipeline- DCO signed-off-by enforcement in CI
Implementation Repo Template (Engine Repos Only)
- Publish a GitHub template repository (
iron-curtain/ic-template) that engine implementation repos are instantiated from. Non-engine repos (relay, tools, prototypes) use generic templates. - Template contains: pre-filled
AGENTS.md(referencing this design-docs repo as canonical design authority),CODE-INDEX.mdskeleton,deny.toml, CI workflows (clippy, fmt,cargo deny, DCO check), SPDX headers,.github/copilot-instructions.md, Cargo workspace scaffold matching AGENTS.md crate structure - The template
AGENTS.mdpins a design-doc revision (tag or commit hash) and encodes the no-silent-divergence rule, design-change escalation workflow, and milestone/G*alignment requirements — all derived fromtracking/external-project-agents-template.mdandtracking/ic-engine-agents.md - See
tracking/external-code-project-bootstrap.mdfor the full bootstrap process
Player Data Foundation (D061)
- Define and document the
<data_dir>directory layout (stable structure for saves, replays, screenshots, profiles, keys, communities, workshop, backups) - Platform-specific
<data_dir>resolution (Windows:%APPDATA%\IronCurtain, macOS:~/Library/Application Support/IronCurtain, Linux:$XDG_DATA_HOME/iron-curtain/) IC_DATA_DIRenvironment variable and--data-dirCLI flag override support
Release
Open source cnc-formats (MIT/Apache-2.0) early. Useful standalone for any C&C tool or modding project, builds credibility and community interest. ic-cnc-content (GPL) wraps it with EA-derived details and Bevy asset integration.
Exit Criteria
- Can parse any OpenRA mod’s YAML rules into typed Rust structs
- Can parse any OpenRA mod’s MiniYAML rules into typed Rust structs (runtime conversion, D025)
- Can load an OpenRA mod directory via
mod.yamlmanifest (D026) - OpenRA trait name aliases resolve correctly to IC components (D023)
- Can extract and display sprites from .mix archives
- Can convert MiniYAML to standard YAML losslessly
- Can convert
.shp + .palto IST and back losslessly (cnc-formats convert --to ist/--format ist, behindistfeature flag — see D076) - Code of conduct and RFC process published (D037)
- SPDX headers present on all source files;
cargo deny check licensespasses - GitHub template repo published; new engine repo instantiated from template has passing CI and a working
AGENTS.mdpointing to the design docs - Generic non-engine templates (
external-project-agents-template.md,source-code-index-template.md) exist and produce validAGENTS.md+CODE-INDEX.mdwhen filled in
Phase 1: Rendering Slice (Months 3–6)
Goal: Render a Red Alert map faithfully with units standing on it. No gameplay. Classic isometric aesthetic.
Deliverables
- Bevy-based isometric tile renderer with palette-aware shading
- Sprite animation system (idle, move, attack frames)
- Shroud/fog-of-war rendering
- Camera: smooth scroll, zoom, minimap
- Load OpenRA map, render correctly
- Render quality tier auto-detection (see
10-PERFORMANCE.md§ “Render Quality Tiers”) cnc-formatsCLI expansion:extract(decompose.mixarchives) andlist(quick archive inventory)- Optional visual showcase: basic post-processing (bloom, color grading) and shader prototypes (chrono-shift shimmer, tesla coil glow) to demonstrate modding possibilities
Key Architecture Work
- Bevy plugin structure:
ic-renderas a Bevy plugin reading from sim state - Interpolation between sim ticks for smooth animation at arbitrary FPS
- HD asset pipeline: support high-res sprites alongside classic 8-bit assets
Release
“Red Alert map rendered faithfully in Rust at 4K 144fps” — visual showcase generates buzz.
Exit Criteria
- Can load and render any OpenRA Red Alert map
- Sprites animate correctly (idle loops)
- Camera controls feel responsive
- Maintains 144fps at 4K on mid-range hardware
Phase 2: Simulation Core (Months 6–12) — CRITICAL
Goal: Units move, shoot, die. The engine exists.
Gap acknowledgment: The ECS component model currently documents ~9 core components (Health, Mobile, Attackable, Armament, Building, Buildable, Harvester, Selectable, LlmMeta). The gap analysis in
11-OPENRA-FEATURES.mdidentifies ~30+ additional gameplay systems that are prerequisites for a playable Red Alert: power, building placement, transport, capture, stealth/cloak, infantry sub-cells, crates, mines, crush, guard/patrol, deploy/transform, garrison, production queue, veterancy, docking, radar, GPS, chronoshift, iron curtain, paratroopers, naval, bridge, tunnels, and more. These systems need design and implementation during Phase 2. The gap count is a feature of honest planning, not a sign of incompleteness — the11-OPENRA-FEATURES.mdpriority assessment (P0/P1/P2/P3) provides the triage order.
Deliverables
- ECS-based simulation layer (
ic-sim) - Components mirroring OpenRA traits: Mobile, Health, Attackable, Armament, Building, Buildable, Harvester
- Canonical enum names matching OpenRA (D027): Locomotor (
Foot,Wheeled,Tracked,Float,Fly), Armor (None,Light,Medium,Heavy,Wood,Concrete), Target types, Damage states, Stances - Condition system (D028):
Conditionscomponent,GrantConditionOn*YAML traits,requires:/disabled_by:on any component field - Multiplier system (D028):
StatModifiersper-entity modifier stack, fixed-point multiplication, applicable to speed/damage/range/reload/cost/sight - Full damage pipeline (D028): Armament → Projectile entity → travel → Warhead(s) → Versus table → DamageMultiplier → Health
- Cross-game component library (D029): Mind control, carrier/spawner, teleport networks, shield system, upgrade system, delayed weapons (7 first-party systems)
- Fixed-point coordinate system (no floats in sim)
- Deterministic RNG
- Pathfinding:
Pathfindertrait +IcFlowfieldPathfinder(D013),RemastersPathfinderandOpenRaPathfinderported from GPL sources (D045) - Order system: Player inputs → Orders → deterministic sim application
LocalNetworkandReplayPlaybackNetworkModel implementations- Sim snapshot/restore for save games and future rollback
Key Architecture Work
- Sim/network boundary enforced:
ic-simhas zero imports fromic-net NetworkModeltrait defined and proven with at leastLocalNetworkimplementation- System execution order documented and fixed
- State hashing for desync detection
- Engine telemetry foundation (D031): Unified
telemetry_eventsSQLite schema shared by all components;tracingspan instrumentation on sim systems; per-system tick timing; gameplay event stream (GameplayEventenum) behindtelemetryfeature flag;/analytics status/inspect/export/clearconsole commands; zero-cost engine instrumentation when disabled - Highlight analysis events (D077): 6 new Analysis Event types in the
.icrepevent stream —EngagementStarted,EngagementEnded,SuperweaponFired,BaseDestroyed,ArmyWipe,ComebackMoment— observation-only events emitted during match recording for post-match highlight detection - Client-side SQLite storage (D034): Replay catalog, save game index, gameplay event log, asset index — embedded SQLite for local metadata; queryable without OTEL stack
ic backupCLI (D061):ic backup create/restore/list/verify— ZIP archive with SQLiteVACUUM INTOfor consistent database copies;--exclude/--onlycategory filtering; ships alongside save/load system- Automatic daily critical snapshots (D061): Rotating 3-day
auto-critical-N.zipfiles (~5 MB) containing keys, profile, community credentials, achievements, config — created silently on first launch of the day; protects all players regardless of cloud sync status - Screenshot capture with metadata (D061): PNG screenshots with IC-specific
tEXtchunks (engine version, map, players, tick, replay link); timestamped filenames in<data_dir>/screenshots/ - Mnemonic seed recovery (D061): BIP-39-inspired 24-word recovery phrase generated alongside Ed25519 identity key;
ic identity seed show/ic identity seed verify/ic identity recoverCLI commands; deterministic key derivation via PBKDF2-HMAC-SHA512 — zero infrastructure, zero cost, identity recoverable from a piece of paper - CredentialStore infrastructure (D052/D061):
CredentialStoreinic-paths— OS keyring (Tier 1), vault passphrase with Argon2id KDF (Tier 2); DEK management;Zeroizing<T>memory protection; identity key AEAD encryption at rest;vault_metatable. WASM session-only tier (Tier 3) and LLM credential column encryption (D047) ship in Phase 7 (M11). Seeresearch/credential-protection-design.md - Virtual asset namespace (D062):
VirtualNamespacestruct — resolved lookup table mapping logical asset paths to content-addressed blobs (D049 CAS); built at load time from the active mod set; SHA-256 fingerprint computed and recorded in replays; implicit default profile (no user-facing profile concept yet) - Centralized compression module (D063):
CompressionAlgorithmenum (LZ4) andCompressionLevelenum (fastest/balanced/compact);AdvancedCompressionConfigstruct (21 raw parameters for server operators); all LZ4 callsites refactored through centralized module;compression_algorithm: u8byte added to save and replay headers;settings.tomlcompression.*andcompression.advanced.*sections; decompression ratio caps and security size limits configurable per deployment - Server configuration schema (D064):
server_config.tomlschema definition with typed parameters, valid ranges, and compiled defaults; TOML deserialization with validation and range clamping; relay server reads config at startup; initial parameter namespaces:relay.*,protocol.*,db.*
Release
Units moving, shooting, dying — headless sim + rendered. Record replay file. Play it back.
Exit Criteria
Hard exit criteria (must ship):
- Can run 1000-unit battle headless at > 60 ticks/second
- Replay file records and plays back correctly (bit-identical)
- State hash matches between two independent runs with same inputs
- Condition system operational: YAML
requires:/disabled_by:fields affect component behavior at runtime - Multiplier system operational: veterancy/terrain/crate modifiers stack and resolve correctly via fixed-point math
- Full damage pipeline: projectile entities travel, warheads apply composable effects, Versus table resolves armor-weapon interactions
- OpenRA canonical enum names used for locomotors, armor types, target types, stances (D027)
- Compression module centralizes all LZ4 calls; save/replay headers encode
compression_algorithmbyte;settings.tomlcompression.*andcompression.advanced.*levels take effect;AdvancedCompressionConfigvalidation and range clamping operational (D063) - Server configuration schema loads
server_config.tomlwith validation, range clamping, and unknown-key detection; relay parameters (relay.*,protocol.*,db.*) configurable at startup (D064)
Stretch goals (target Phase 2, can slip to early Phase 3 without blocking):
- All 7 cross-game components functional: mind control, carriers, teleport networks, shields, upgrades, delayed weapons, dual asset rendering (D029)
Note: The D028 systems (conditions, multipliers, damage pipeline) are non-negotiable — they’re the foundation everything else builds on. The D029 cross-game components are high priority but independently scoped; any that slip are early Phase 3 work, not blockers.
Phase 3: Game Chrome (Months 12–16)
Goal: It feels like Red Alert.
Deliverables
- Sidebar UI: build queues, power bar, credits display, radar minimap
- Radar panel as multi-mode display: minimap (default), comm video feed (RA2-style), tactical overlay
- Unit selection: box select, ctrl-groups, tab cycling
- Build placement with validity checking
- Audio: EVA voice lines, unit responses, ambient, music (
.audplayback)- Audio system (P003 resolved — Kira via
bevy_kira_audio):.audIMA ADPCM decoding pipeline; dynamic music state machine (combat/build/idle transitions — original RA had this); music-as-Workshop-resource architecture; investigate loading remastered soundtrack if player owns Remastered Collection
- Audio system (P003 resolved — Kira via
- Custom UI layer on
wgpufor game HUD eguifor dev tools/debug overlays- UI theme system (D032): YAML-driven switchable themes (Classic, Remastered, Modern); chrome sprite sheets, color palettes, font configuration; shellmap live menu backgrounds; first-launch theme picker
- Per-game-module default theme: RA1 module defaults to Classic theme
Exit Criteria
- Single-player skirmish against scripted dummy AI (first “playable” milestone)
- Feels like Red Alert to someone who’s played it before
Stretch goals (target Phase 3, can slip to early Phase 4 without blocking):
- Replay highlight detection & POTG (D077): Four-dimension scoring pipeline (engagement/momentum/anomaly/rarity) over recorded Analysis Event Stream; Play-of-the-Game viewport on post-game screen; per-player highlight library in SQLite; main menu highlight background option;
/highlightconsole commands; highlight camera AI - Screenshot browser (D061): In-game screenshot gallery with metadata filtering (map, mode, date), thumbnail grid, and “Watch replay” linking via
IC:ReplayFilemetadata - Data & Backup settings panel (D061): In-game Settings → Data & Backup with Data Health summary (identity/sync/backup status), backup create/restore buttons, backup file list, cloud sync status, and Export & Portability section
- First-launch identity + backup prompt (D061): New player flow after D032 theme selection — identity creation with recovery phrase display, cloud sync offer (Steam/GOG), backup recommendation for non-cloud installs; returning player flow includes mnemonic recovery option alongside backup restore
- Post-milestone backup nudges (D061): Main menu toasts after first ranked match, campaign completion, tier promotion; same toast system as D030 Workshop cleanup; max one nudge per session; three dismissals = never again
- Chart component in
ic-ui: Lightweight Bevy 2D chart renderer (line, bar, pie, heatmap, stacked area) for post-game and career screens - Post-game stats screen (D034): Unit production timeline, resource curves, combat heatmap, APM graph, head-to-head comparison — all from SQLite
gameplay_events - Career stats page (D034): Win rate by faction/map/opponent, rating history graph, session history with replay links — from SQLite
matches+match_players - Achievement infrastructure (D036): SQLite achievement tables, engine-defined campaign/exploration achievements, Lua trigger API for mod-defined achievements, Steam achievement sync for Steam builds
- Product analytics local recording (D031): Comprehensive client event taxonomy — GUI interactions (screen navigation, clicks, hotkeys, sidebar, minimap, build placement), RTS input patterns (selection, control groups, orders, camera), match flow (pace snapshots every 60s with APM/resources/army value, first build, first combat, surrender point), session lifecycle, settings changes, onboarding steps, errors, performance sampling; all offline in local
telemetry.db;/analytics exportfor voluntary bug report attachment; detailed enough for UX analysis, gameplay pattern discovery, and troubleshooting - Contextual hint system (D065): YAML-driven gameplay hints displayed at point of need (idle harvesters, negative power, unused control groups); HintTrigger/HintFilter/HintRenderer pipeline;
hint_historySQLite table; per-category toggles and frequency settings in D033 QoL panel;/hintsconsole commands (D058) - New player pipeline (D065): Self-identification gate after D061/D032 first-launch flow (“New to RTS” / “Played some RTS” / “RA veteran” / “Skip”); quick orientation slideshow for veterans; Commander School badge on campaign menu for deferred starts; emits
onboarding.steptelemetry (D031) - Progressive feature discovery (D065): Milestone-based main menu notifications surfacing replays, experience profiles, Workshop, training mode, console, mod profiles over the player’s first weeks; maximum one notification per session;
/discoveryconsole commands (D058)
Note: Phase 3’s hard goal is “feels like Red Alert” — sidebar, audio, selection, build placement. The stats screens, chart component, achievement infrastructure, analytics recording, and tutorial hint system are high-value polish but depend on accumulated gameplay data, so they can mature alongside Phase 4 without blocking the “playable” milestone.
Phase 4: AI & Single Player (Months 16–20)
Goal: Complete campaign support and skirmish AI. Unlike OpenRA, single-player is a first-class deliverable, not an afterthought.
Deliverables
- Lua-based scripting for mission scripts
- WASM mod runtime (basic)
- Basic skirmish AI: harvest, build, attack patterns
- Campaign mission loading (OpenRA mission format)
- Branching campaign graph engine + strategic layer (D021): campaigns as directed graphs of missions with named outcomes, multiple paths, and convergence points; Enhanced Edition campaigns can wrap that graph in a phase-based War Table with operations, enemy initiatives, Requisition, and Command Authority
- Persistent campaign state: unit roster carryover, veterancy across missions, equipment persistence, story flags, campaign phases, operation availability, enemy initiatives, and arms-race / tech-ledger state — serializable for save games
- Lua Campaign API:
Campaign.complete(),Campaign.get_roster(),Campaign.get_flag(),Campaign.set_flag(), etc. - Continuous campaign flow: briefing → mission → debrief → next mission (no exit-to-menu between levels)
- Campaign select, mission map, and War Table UI: visualize campaign graph, show current position, replay completed missions, surface operation cards, enemy initiatives, urgency, and arms-race readouts
- Operations as a distinct campaign content tier: main missions, SpecOps, theater branches, and generated operations share one graph / state model
- Enemy Initiatives system: authored strategic threats that advance between operations and resolve with concrete downstream effects if uncountered
- Expiring opportunity nodes: optional missions with
expires_in_phasestimers,on_expireconsequences, and map beacons so the world moves without the player - Arms race / tech acquisition-denial tracking: campaign-visible ledger that determines which prototypes, support powers, and enemy programs reach later missions
- Adaptive difficulty via campaign state: designer-authored conditional bonuses/penalties based on cumulative performance
- Subfaction system — campaign theater bonuses (proposed — contingent on subfaction adoption): Allied campaign operations grant temporary theater bonuses echoing country passives (Greece → partisans, North Sea → UK naval bonus); Soviet missions carry institutional flavor (NKVD suppression → conscripts, GRU intelligence → recon assets). Uses the same YAML bonus definitions as multiplayer subfactions. See
research/subfaction-country-system-study.md - Campaign dashboard (D034): Roster composition graphs per mission, veterancy progression for named units, campaign path visualization, performance trends — from SQLite
campaign_missions+roster_snapshots ic-aireads player history (D034): Skirmish AI queries SQLitematches+gameplay_eventsfor difficulty scaling, build order variety, and counter-strategy selection between games- Player style profile building (D042):
ic-aiaggregatesgameplay_eventsintoPlayerStyleProfileper player;StyleDrivenAi(AiStrategy impl) mimics a specific player’s tendencies in skirmish; “Challenge My Weakness” training mode targets the local player’s weakest matchups;player_profiles+training_sessionsSQLite tables; progress tracking across training sessions - FMV cutscene playback between missions (original
.vqabriefings and victory/defeat sequences) - Full Allied and Soviet campaigns for Red Alert, playable start to finish
- Commander School tutorial campaign (D065): 6 branching Lua-scripted tutorial missions (combat → building → economy → shortcuts → capstone skirmish → multiplayer intro) using D021 campaign graph; failure branches to remedial missions;
TutorialLua global API (ShowHint, WaitForAction, FocusArea, HighlightUI); tutorial AI difficulty tier below D043 Easy; experience-profile-aware content adaptation (D033); skippable at every point; unit counters, defense, tech tree, and advanced tactics left for player discovery through play - Skill assessment & difficulty recommendation (D065): 2-minute interactive exercise measuring selection speed, camera use, and combat efficiency; calibrates adaptive pacing engine and recommends initial AI difficulty for skirmish lobby;
PlayerSkillEstimatein SQLiteplayer.db - Post-game learning system (D065): Rule-based tips on post-game stats screen (YAML-driven pattern matching on
gameplay_events); 1–3 tips per game (positive + improvement); “Learn more” links to tutorial missions; adaptive pacing adjusts tip frequency based on player engagement - Campaign pedagogical pacing (D065): Allied/Soviet mission design guidelines for gradual mechanic introduction; tutorial EVA voice lines for first encounters (first refinery, first barracks, first tech center); conditional on tutorial completion status
- Tutorial achievements (D065/D036): “Graduate” (complete Commander School), “Honors Graduate” (complete with zero retries)
Key Architecture Work
- Lua sandbox with engine bindings
- WASM host API with capability system (see
06-SECURITY.md) - Campaign graph loader + validator: parse YAML campaign definitions, validate graph connectivity (no orphan nodes, all outcome targets exist)
- Strategic-layer resolver: phase budgets, operation reveals, enemy-initiative advancement, and tech-ledger updates between missions
CampaignStateserialization: roster, flags, equipment, path taken, phase state, operation state, enemy initiatives, and arms-race ledger — full snapshot support- Unit carryover system: 5 modes (
none,surviving,extracted,selected,custom) - Veterancy persistence across missions
- Mission select / War Table UI with campaign graph visualization, operation cards, enemy-initiative lane, urgency indicators, and difficulty indicators
icCLI prototype:ic mod init,ic mod check,ic mod run— early tooling for Lua script development (full SDK in Phase 6a)ic profileCLI (D062):ic profile save/list/activate/inspect/diff— named mod compositions with switchable experience settings; modpack curators can save and compare configurations; profile fingerprint enables replay verification- Minimal Workshop (D030 early delivery): Central IC Workshop server +
ic mod publish+ic mod install+ basic in-game browser + auto-download on lobby join. Simple HTTP REST API, SQLite-backed. No federation, no replication, no promotion channels yet — those are Phase 6a - Standalone installer (D069 Layer 1): Platform-native installers for non-store distribution — NSIS
.exefor Windows,.dmgfor macOS,.AppImagefor Linux. Handles binary placement, shortcuts, file associations (.icrep,.icsave,ironcurtain://URI scheme), and uninstaller registration. Portable mode checkbox createsportable.marker. Installer launches IC on completion → enters D069 First-Run Setup Wizard. CI pipeline builds installers automatically per release.
Exit Criteria
- Can play through all Allied and Soviet campaign missions start to finish
- Campaign branches work: different mission outcomes lead to different next missions
- Unit roster persists across missions (surviving units, veterancy, equipment)
- Enhanced Edition strategic layer works: phases, operations, enemy initiatives, and arms-race state all persist and affect downstream missions
- Save/load works mid-campaign with full state preservation
- Skirmish AI provides a basic challenge
Phase 5: Multiplayer (Months 20–26)
Goal: Deterministic lockstep multiplayer with competitive infrastructure. Not just “multiplayer works” — multiplayer that’s worth switching from OpenRA for.
Deliverables
EmbeddedRelayNetworkimplementation (listen server — host embedsRelayCore)RelayLockstepNetworkimplementation (dedicated relay with time authority)- Desync detection and server-side debugging tools (killer feature)
- Lobby system, game browser, NAT traversal via relay
- Replay system (already enabled by Phase 2 architecture)
CommunityBridgefor shared server browser with OpenRA and CnCNet- Foreign replay import (D056):
OpenRAReplayDecoderandRemasteredReplayDecoderinic-cnc-content;ForeignReplayPlaybackNetworkModel;ic replay importCLI converter; divergence tracking UI; automated behavioral regression testing against foreign replay corpus - Ranked matchmaking (D055): Glicko-2 rating system (D041), 10 placement matches, YAML-configurable tier system (Cold War military ranks for RA: Conscript → Supreme Commander, 7+2 tiers × 3 divisions = 23 positions), 3-month seasons with soft reset, dual display (tier badge + rating number), faction-specific optional ratings, small-population matchmaking degradation, map veto system
- Subfaction selection in multiplayer lobby (proposed — pending formal adoption via D019): Allies pick a nation (England, France, Germany, Greece), Soviets pick an institution (Red Army, NKVD, GRU, Science Bureau) — each with one thematic passive + one tech tree mod. Classic preset uses RA1’s original 5-country 10% passives. Starts as casual/skirmish only; promoted to ranked after one full season of balance telemetry confirms no subfaction exceeds 55% win rate. Community subfactions via YAML Workshop. See
research/subfaction-country-system-study.md - Leaderboards: global, per-faction, per-map — with public profiles and replay links
- Observer/spectator mode: connect to relay with configurable fog (full/player/none) and broadcast delay
- Tournament mode: bracket API, relay-certified
CertifiedMatchResult, server-side replay archive - Competitive map pool: curated per-season, community-nominated
- Anti-cheat: relay-side behavioral analysis (APM, reaction time, pattern entropy), suspicion scoring, community reports
- “Train Against” opponent mode (D042): With multiplayer match data, players can select any opponent from match history → pick a map → instantly play against
StyleDrivenAiloaded with that opponent’s aggregated behavioral profile; no scenario editor required - Competitive governance (D037): Competitive committee formation, seasonal map pool curation process, community representative elections
- Competitive achievements (D036): Ranked placement, league promotion, season finish, tournament participation achievements
Legal & Operational Prerequisites
- Legal entity formed (foundation, nonprofit, or LLC) before server infrastructure goes live — limits personal liability for user data, DMCA obligations, and server operations
- DMCA designated agent registered with the U.S. Copyright Office (required for safe harbor under 17 U.S.C. § 512 before Workshop accepts user uploads)
- Optional: Trademark registration for “Iron Curtain” (USPTO Class 9/41)
Key Architecture Work
- Sub-tick timestamped orders (CS2 insight)
- Relay server anti-lag-switch mechanism
- Signed replay chain
- Order validation in sim (anti-cheat)
- Matchmaking service (lightweight Rust binary, same infra as tracking/relay servers)
CertifiedMatchResultwith Ed25519 relay signatures- Spectator feed: relay forwards tick orders to observers with configurable delay
- Behavioral analysis pipeline on relay server
p2p-distributestandalone crate (D076 Tier 3): Purpose-built P2P engine for Workshop/lobby/server content delivery; core engine + config + peer discovery start M8 (parallel with main sim); IC integration wires intoworkshop-coreandic-serverWorkshop capability; seeresearch/p2p-distribute-crate-design.mdfor full design and build-vs-adopt rationale- Server-side SQLite telemetry (D031): Relay, tracking, and workshop servers record structured events to local
telemetry.dbusing unified schema; server event taxonomy (game lifecycle, player join/leave, per-tick processing, desync detection, lag switch detection, behavioral analysis, listing lifecycle, dependency resolution);/analyticscommands on servers; same export/inspect workflow as client; no OTEL infrastructure required for basic server observability - Relay compression config (D063): Advanced compression parameters (
compression.advanced.*) active on relay servers via env vars and CLI flags; relay compression config fingerprinting in lobby handshake; reconnection-specific parameters (reconnect_pre_compress,reconnect_max_snapshot_bytes,reconnect_stall_budget_ms) operational; deployment profile presets (tournament archival, caster/observer, large mod server, low-power hardware) - Full server configuration (D064): All ~200
server_config.tomlparameters active across all subsystems (relay, match lifecycle, pause, penalties, spectator, vote framework, protocol limits, communication, anti-cheat, ranking, matchmaking, AI tuning, telemetry, database, Workshop/P2P, compression); environment variable override mapping (IC_RELAY_*,IC_MATCH_*, etc.); hot reload via SIGHUP and/reload_config; four deployment profile templates (tournament LAN, casual community, competitive league, training/practice) ship with relay binary; cross-parameter consistency validation - Optional OTEL export layer (D031): Server operators can additionally enable OTEL export for real-time Grafana/Prometheus/Jaeger dashboards;
/healthz,/readyz,/metricsendpoints; distributed trace IDs for cross-component desync debugging; pre-built Grafana dashboards;docker-compose.observability.yamloverlay for self-hosters - Backend SQLite storage (D034): Relay server persists match results, desync reports, behavioral profiles; matchmaking server persists player ratings, match history, seasonal data — all in embedded SQLite, no external database
ic profile export(D061): JSON profile export with embedded SCRs for GDPR data portability; self-verifying credentials import on any IC install- Platform cloud sync (D061): Optional sync of critical data (identity key, profile, community credentials, config, latest autosave) via
PlatformCloudSynctrait (Steam Cloud, GOG Galaxy); ~5–20 MB footprint; sync on launch/exit/match-complete - First-launch restore flow (D061): Returning player detection — cloud data auto-detection with restore offer (shows identity, rating, match count); manual restore from backup ZIP, data folder copy, or mnemonic seed recovery; SCR verification progress display during restore
- Backup & data console commands (D061/D058):
/backup create,/backup restore,/backup list,/backup verify,/profile export,/identity seed show,/identity seed verify,/identity recover,/data health,/data folder,/cloud sync,/cloud status - Lobby fingerprint verification (D062): Profile namespace fingerprint replaces per-mod version list comparison in lobby join; namespace diff view shows exact asset-level differences on mismatch; one-click resolution (download missing mods, update mismatched versions);
/profileconsole commands - Multiplayer onboarding (D065): First-time-in-multiplayer overlay sequence (server browser orientation, casual vs. ranked, communication basics); ranked onboarding (placement matches, tier system, faction ratings); spectator suggestion for players on losing streaks (<5 MP games, 3 consecutive losses); all one-time flows with “Skip” always available; emits
onboarding.steptelemetry
Exit Criteria
- Two players can play a full game over the internet
- Desync, if it occurs, is automatically diagnosed to specific tick and entity
- Games appear in shared server browser alongside OpenRA and CnCNet games
- Ranked 1v1 queue functional with ratings, placement, and leaderboard
- Spectator can watch a live game with broadcast delay
Sub-Pages
| Section | Topic | File |
|---|---|---|
| Phases 6a-7 | Phase 6a (Core Modding + Scenario Editor), Phase 6b (Campaign Editor + Game Modes), Phase 7 (LLM Missions + Ecosystem + Polish), post-Phase 7 vision, risk matrix | phases-6-7.md |