🧠 Dev Log: The Power of Interfaces — How Modularity Set Us Free
“I didn’t really understand interfaces when I started this project. But now, I realize they’re not just a tool — they’re the architecture of freedom.”
When we began building Colonies: Genesis of E.D.E.N., the focus was simple:
Build a systemic simulation that spans from Paleolithic Earth to interstellar civilization.
What followed was anything but simple. Modeling that kind of scope meant facing rapid complexity growth — not just in data, but in behaviors, interactions, and time.
What saved us?
Interfaces.
🧩 Interfaces as Simulation Grammar
As the system evolved, we leaned on C# interfaces — and they became the foundation of the simulation.
Not just because they enforce contracts in code.
But because they unlock something much deeper:
- ✅ Interoperability between unrelated systems
- ✅ Emergence through clean abstraction
- ✅ Composable behavior without inheritance hell
Here are the key interfaces that shaped our architecture:
✅ IDefinition
The data backbone. All content — planets, facilities, contracts — is defined declaratively.
- Enables procedural worldgen
- Powers modding and content packs
- Cleanly separates data from logic
✅ ITickable
The timekeeper of the simulation.
- Every system that evolves over time implements this
- Centralized tick scheduling and profiling
- Simulation time is no longer hardwired — it’s orchestrated
✅ ICapability
The engine of agency.
- Adds behavior at runtime, rather than encoding it into base classes
- Encourages composability over inheritance
- Facilities, factions, agents: all get their abilities through capability injection
✅ IContract
The verb layer of the simulation.
- Defines intent (build, trade, research, sabotage…)
- Unifies player actions, AI behavior, logistics, and diplomacy
- Supports delegation, simulation, fulfillment, and chainable task design
✅ ISelectable
/ IInspectable
How the simulation speaks to the player.
- Generic UI can inspect any simulation object
- Enables modular panels, debug tools, and editor overlays
- Keeps UI decoupled from game logic
🧨 What Would It Look Like Without Interfaces?
Imagine a version of Colonies without interfaces:
// Monolithic ticking
foreach (var planet in planets)
planet.UpdatePlanet();
foreach (var faction in factions)
faction.ManuallyTickLogic();
// Hardcoded behavior
if (facility.canSmelt)
Smelt();
if (facility.canGrow)
GrowCrops();
// UI mess
temperatureText.text = tile.Temperature.ToString();
It’s rigid. Brittle. Bloated. And ultimately: non-emergent.
No clean simulation loop.
No late-binding behavior.
No modding.
No clarity.
You become the glue — and the glue breaks.
🌌 What Interfaces Gave Us
Interfaces turned Colonies into a composable simulation:
- A tile can be selected, ticked, rendered, and inspected — with zero coupling.
- A contract can be fulfilled by any capable entity — including AI, factions, or drones.
- A UI panel can inspect any object — as long as it speaks the
IInspectable
language.
This is what makes the simulation feel alive.
🧭 Final Reflection
When we package and release this framework — a simulation-first toolkit built by Emergent Dynamics — the community won’t just inherit code.
They’ll inherit a philosophy.
A world where:
- Behavior is injected, not inherited.
- Data is declared, not hardcoded.
- Time is orchestrated, not looped.
- Actions are structured, not scripted.
Everything in this world knows what it can do — and how to say so.
– Emergent Dynamics
Architects of Worlds Yet To Be
This content is restricted to site members. If you are an existing user, please log in. New users may register below.