September 12, 2026 at 12:00:00 AM UTC
Liminalia progression loop research
liminalia
Research on implementing the core progression loop.
existing systems that form the loop
Every piece is already in the codebase — what's missing is the connection between them into a single cycle:
| System | What it produces | Progression role |
|---|---|---|
AgingService |
Birthdays, retirements, deaths | Population turnover |
EducationService |
Educated citizens (level 1-3) | Skilled workforce pipeline |
LabourService |
Employed citizens at businesses | Economic production |
BusinessService |
Revenue, daily operations | Economic growth |
CrimeService |
Crime pressure from distress | Challenge escalation |
HealthService |
Illness from hunger/exhaustion | Challenge escalation |
FireService |
Random building fires | Challenge escalation |
Economy |
Treasury, UBI, taxes | City resources |
proposed progression loop
founding (5 households, 48 citizens)
↓
simulate (citizens age, work, study, spend)
↓
economic growth (revenue → tax → treasury)
↓
challenge emergence (crime, illness, fire scale with population)
↓
player response (build police, hospital, fire station, school)
↓
maturation (population 30+, skilled workforce, stable)
↓
flourishing (complex economy, high tax base, sophisticated challenges)
↓
(cycle continues, difficulty scales with population)
citizen lifecycle
The loop is driven by citizen lifecycles:
- Child (0-6): depends on household, no productivity
- Student (7-18): attends school, gains education, no income
- Worker (18-65): employed, earns wages, spends, pays taxes
- Retiree (65+): depends on household, no labour market value
- Death (age 90 or illness): estate settled, household vacancy
Education gates job quality: Engineers/Doctors/Teachers require secondary+ education. This creates a feedback loop: school investment → educated workers → better jobs → more tax revenue → more school investment.
challenge scaling
Crime pressure, illness rate, and fire risk all scale with:
- Population density (more citizens = more problems)
- Economic distress (poverty, debt, unemployment)
- Lack of civic infrastructure (no police = crime thrives)
This creates the player's core engagement: build the right institutions before problems overwhelm the city.
implementation direction
- Population counter: track total citizens (
world.Citizens.Count). - Difficulty multiplier in CrimeService, HealthService, FireService, tied to population milestones:
- 0-30: founding (1x)
- 31-60: growth (1.5x)
- 61-100: maturation (2x)
- 100+: flourishing (3x)
- Multiplier applies to:
- Crime pressure rate (
CrimeService.AccumulatePressure) - Illness onset rate (
HealthService.Accumulate) - Fire ignition chance (
FireService.StartFires)
- Crime pressure rate (
- Treasury as progress metric: treasury balance shows city health. Below 0 = city deficit (emergency).
- Day cycle: each simulated day = one full service tick. Player reviews city state daily and issues commands.
data model for progression
Add to SimulationWorld:
public int Population => Citizens.Count;
public double CityDifficulty => Population switch
{
<= 30 => 1.0,
<= 60 => 1.5,
<= 100 => 2.0,
_ => 3.0
};
The difficulty multiplier applies to:
- Crime pressure rate (
CrimeService.AccumulatePressure) - Illness onset rate (
HealthService) - Fire ignition rate (
FireService)
This creates a natural difficulty curve: the bigger the city, the harder it is to maintain.
vertical slice test
A single test that validates the full progression cycle:
- Seed world with 48 citizens and treasury
- Fast-forward 30 simulated days
- Assert: citizens aged (some birthdays), educated (school-age attended), employed (labour hired)
- Assert: crime occurred (pressure crossed threshold), some resolved (police response)
- Assert: treasury changed (taxes collected, UBI paid, business revenue)
- Assert: population adjusted (deaths from aging/illness, retirements)
what to build first
- Population milestone display (trivial — count citizens)
- Difficulty multiplier in CrimeService, HealthService, FireService
- Progression milestone events (founding → growth → maturation → flourishing)
- Vertical slice test
what NOT to build yet
- Tech tree / era progression (out of scope — the citizen-driven progression IS the progression)
- City rating / score (treasury + population are sufficient metrics)
- Migration / immigration (citizens only enter via birth, leave via death/retirement)
all entries