Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Iron Curtain — Design Documentation

Iron Curtain Logo

Project: Rust-Native RTS Engine

Status: Pre-development (design phase)
Date: 2026-02-19
Codename: Iron Curtain
Author: David Krasnitsky

What This Is

A Rust-native RTS engine that supports OpenRA resource formats (.mix, .shp, .pal, YAML rules) and reimagines internals with modern architecture. Not a clone or port — a complementary project offering different tradeoffs (performance, modding, portability) with full OpenRA mod compatibility as the zero-cost migration path. OpenRA is an excellent project; IC explores what a clean-sheet Rust design can offer the same community.

Document Index

#DocumentPurposeRead When…
0101-VISION.mdProject goals, competitive landscape, why this should existYou need to understand the project’s purpose and market position
0202-ARCHITECTURE.mdCore architecture: crate structure, ECS, sim/render split, game loop, install & source layout, RA experience recreation, first runnable plan, SDK/editor architectureYou need to make any structural or code-level decision
02+architecture/gameplay-systems.mdExtended gameplay systems (RA1 module): power, construction, production, harvesting, combat, fog, shroud, crates, veterancy, superweaponsYou’re implementing or reviewing a specific RA1 gameplay system
0303-NETCODE.mdUnified relay lockstep netcode, sub-tick ordering, adaptive run-ahead, NetworkModel traitYou’re working on multiplayer, networking, or the sim/network boundary
03+netcode/match-lifecycle.mdMatch lifecycle: lobby, loading, tick processing, pause, disconnect, desync, replay, post-gameYou’re tracing the operational flow of a multiplayer match
0404-MODDING.mdYAML rules, Lua scripting, WASM modules, templating, resource packs, mod SDKYou’re working on data formats, scripting, or mod support
04+modding/campaigns.mdCampaign system: branching graphs, persistent state, unit carryover, co-opYou’re designing or implementing campaign missions and branching logic
04+modding/workshop.mdWorkshop: federated registry, P2P distribution, semver deps, modpacks, moderation, creator reputation, Workshop APIYou’re working on content distribution, Workshop features, mod publishing, or creator tools
0505-FORMATS.mdFile formats, original source code insights, compatibility layerYou’re working on asset loading, ic-cnc-content crate, or OpenRA interop
0606-SECURITY.mdThreat model, vulnerabilities, mitigations for online playYou’re working on networking, modding sandbox, or anti-cheat
0707-CROSS-ENGINE.mdCross-engine compatibility, protocol adapters, reconciliationYou’re exploring OpenRA interop or multi-engine play
0808-ROADMAP.md36-month development plan with phased milestonesYou need to plan work or understand phase dependencies
0909-DECISIONS.mdDecision index — links to 7 thematic sub-documents covering all 77 decisionsYou need to find which sub-document contains a specific decision
09adecisions/09a-foundation.mdDecisions: language, framework, data formats, simulation invariants, core engine identity, crate extractionYou’re questioning or extending a core engine decision (D001–D003, D009, D010, D015, D017, D018, D039, D063, D064, D067, D076)
09bdecisions/09b-networking.mdDecisions: network model, relay server, sub-tick ordering, community servers, ranked play, community server bundleYou’re working on networking or multiplayer decisions (D006–D008, D011, D012, D052, D055, D060, D074)
09cdecisions/09c-modding.mdDecisions: scripting tiers, OpenRA compatibility, UI themes, mod profiles, licensing, export, selective install, Remastered format compatYou’re working on modding, theming, or compatibility decisions (D004, D005, D014, D023–D027, D032, D050, D051, D062, D066, D068, D075)
09ddecisions/09d-gameplay.mdDecisions: pathfinding, balance, QoL, AI systems, render modes, trait-abstracted subsystems, asymmetric co-op, LLM exhibition modes, replay highlightsYou’re working on gameplay mechanics or AI decisions (D013, D019, D021, D022, D028, D029, D033, D041–D045, D048, D054, D070, D073, D077)
09edecisions/09e-community.mdDecisions: Workshop, telemetry, SQLite, achievements, governance, premium content, profiles, data portabilityYou’re working on community platform or infrastructure decisions (D030, D031, D034–D037, D046, D049, D053, D061)
09fdecisions/09f-tools.mdDecisions: LLM missions, scenario editor, asset studio, mod SDK, LLM config, foreign replay, skill libraryYou’re working on tools, editor, or LLM decisions (D016, D020, D038, D040, D047, D056, D057)
09gdecisions/09g-interaction.mdDecisions: command console, communication (chat, voice, pings), tutorial/new player experience, installation setup wizardYou’re working on in-game interaction systems (D058, D059, D065, D069)
1010-PERFORMANCE.mdEfficiency-first performance philosophy, targets, profilingYou’re optimizing a system, choosing algorithms, or adding parallelism
1111-OPENRA-FEATURES.mdOpenRA feature catalog (~700 traits), gap analysis, migration mappingYou’re assessing feature parity or planning which systems to build next
1212-MOD-MIGRATION.mdCombined Arms mod migration, Remastered recreation feasibilityYou’re validating modding architecture against real-world mods
1313-PHILOSOPHY.mdDevelopment philosophy, game design principles, design review, lessons from C&C creators and OpenRAYou’re reviewing design/code, evaluating a feature, or resolving a design tension
1414-METHODOLOGY.mdDevelopment methodology: stages from research through release, context-bounded work units, research rigor & AI-assisted design process, agent coding guidelinesYou’re planning work, starting a new phase, understanding the research process, or onboarding as a new contributor
1515-SERVER-GUIDE.mdServer administration guide: configuration reference, deployment profiles, best practices for tournament organizers, community admins, and league operatorsYou’re setting up a relay server, running a tournament, or tuning parameters for a community deployment
1616-CODING-STANDARDS.mdCoding standards: file structure, commenting philosophy, naming conventions, error handling, testing patterns, code review checklistYou’re writing code, reviewing a PR, onboarding as a contributor, or want to understand the project’s code style
1717-PLAYER-FLOW.mdPlayer flow & UI navigation: every screen, menu, overlay, and navigation path from first launch through gameplay, UX principles, platform adaptationsYou’re designing UI, implementing a screen, tracing how a player reaches a feature, or evaluating the UX

LLM feature overview (optional / experimental): See Experimental LLM Modes & Plans for a consolidated overview of planned LLM gameplay modes, creator tooling, and external-tool integrations. The project is fully designed to work without any LLM configured.

Key Architectural Invariants

These are non-negotiable across the entire project:

  1. Simulation is pure and deterministic. No I/O, no floats, no network awareness. Takes orders, produces state. Period.
  2. Network model is pluggable via trait. GameLoop<N: NetworkModel, I: InputSource> is generic over both network model and input source. The sim has zero imports from ic-net. They share only ic-protocol. Within the lockstep family (all shipping implementations), swapping network backends touches zero sim code. Non-lockstep architectures (rollback, FogAuth) would also leave ic-sim untouched but may require game loop extension in ic-game.
  3. Modding is tiered. YAML (data) → Lua (scripting) → WASM (power). Each tier is optional and sandboxed.
  4. Bevy as framework. ECS scheduling, rendering, asset pipeline, audio — Bevy handles infrastructure so we focus on game logic. Custom render passes and SIMD only where profiling justifies it.
  5. Efficiency-first performance. Better algorithms, cache-friendly ECS, zero-allocation hot paths, simulation LOD, amortized work — THEN multi-core as a bonus layer. A 2-core laptop must run 500 units smoothly.
  6. Real YAML, not MiniYAML. Standard serde_yaml with inheritance resolved at load time.
  7. OpenRA compatibility is at the data/community layer, not the simulation layer. Same mods, same maps, shared server browser — but not bit-identical simulation.
  8. Full resource compatibility with Red Alert and OpenRA. Every .mix, .shp, .pal, .aud, .oramap, and YAML rule file from the original game and OpenRA must load correctly. This is non-negotiable — the community’s existing work is sacred.
  9. Engine core is game-agnostic. No game-specific enums, resource types, or unit categories in engine core. Positions are 3D (WorldPos { x, y, z }). System pipeline is registered per game module, not hardcoded.
  10. Platform-agnostic by design. Input is abstracted behind InputSource trait. UI layout is responsive (adapts to screen size via ScreenClass). No raw std::fs — all assets go through Bevy’s asset system. Render quality is runtime-configurable.

Crate Structure Overview

iron-curtain/
├── ic-cnc-content     # Wraps cnc-formats + EA-derived code; Bevy asset integration; MiniYAML auto-conversion pipeline (C&C-specific, keeps ra- prefix)
├── ic-protocol    # PlayerOrder, TimestampedOrder, OrderCodec trait (SHARED boundary)
├── ic-sim         # Deterministic simulation (Bevy FixedUpdate systems)
├── ic-net         # NetworkModel trait + implementations; RelayCore library (no ic-sim dependency)
├── ic-render      # Isometric rendering, shaders, post-FX (Bevy plugin)
├── ic-ui          # Game chrome: sidebar, minimap, build queue (Bevy UI)
├── ic-editor      # SDK: scenario editor, asset studio, campaign editor, Game Master mode (D038+D040, Bevy app)
├── ic-audio       # .aud playback, EVA, music (Bevy audio plugin)
├── ic-script      # Lua + WASM mod runtimes
├── ic-ai          # Skirmish AI, mission scripting, LLM-enhanced AI strategies (depends on ic-llm)
├── ic-llm         # LlmProvider trait, prompt infra, skill library, Tier 1 CPU inference (traits + infra only — no ic-sim)
├── ic-paths       # Platform path resolution: data dirs, portable mode, credential store
├── ic-game        # Top-level Bevy App, ties all game plugins together (NO editor code)
└── ic-server      # Unified server binary (D074): depends on ic-net (RelayCore) + optionally ic-sim (for FogAuth/relay-headless deployments)

License

All files in src/ and research/ are licensed under CC BY-SA 4.0. Engine source code is licensed under GPL v3 with an explicit modding exception (D051).

Trademarks

Red Alert, Tiberian Dawn, Command & Conquer, and C&C are trademarks of Electronic Arts Inc. Iron Curtain is not affiliated with, endorsed by, or sponsored by Electronic Arts.