NPCs & Bevölkerung

Jeder Sektor hat eine simulierte Bevölkerung mit echten NPCs — nicht abstrakte Zahlen, sondern benannte Personen mit Stelle, Wohnsitz, Familienstatus und Stundenplan. Die Stadt hat 10.000 bis 40.000 NPCs, die jeden Tag geboren werden, sterben, kündigen, abwandern und beobachten was du tust. Wer das System ignoriert, verliert die Kontrolle über sein Imperium.


NPC-Typen (Roles)

Aus engine/internal/population/types.go:

Role Bedeutung
Owner Ein NPC pro Nicht-Landmark-Building. Eigentümer.
Staff Angestellte in Commercial/Industrial-Buildings. Mit Wage.
Resident Wohnt in Residential, ohne Job. Birth-Pool für neue Owner/Staff.
Unemployed Aktiv arbeitslos (z.B. nach Quit, vor Replacement).

Phase-6+ Spezialitäten (Server-Roadmap, teilweise im Pool reserviert): Auditor, Judge, Doctor, Teacher, Cop, CorpSec, Journalist, Lawyer, Guard.


NPC-Attribute (0-100)

Jeder NPC hat sechs psychologische + ökonomische Werte:

Attribut Bedeutung
Wealth 0-100+ (kann darüber hinaus). Bestimmt Wealth-Tier (low/mid/high).
Corruption 0-100. Bribe-Anfälligkeit — hoch = leicht zu kaufen.
Fear 0-100. Reaktion auf Intimidation. Hoher Fear = quittet eher.
Loyalty 0-100. Treue zu Arbeitgeber/Familie. < 20 = Informant-Flag.
Observance 0-100. Zeugen-Klarheit. < 20 = bezeugt nichts.
Productivity 0-100. Job-Output-Modifier.

Stundenplan (StateAt)

Jeder NPC hat einen deterministischen Stundenplan als Pure-Function:

ShiftStart  = Minute-of-Day, default 540 (09:00)
ShiftEnd    = default 1020 (17:00)
Commute     = 10 (gleicher Sektor) | 30 (adjacent) | 60 (weit)

States: Home → CommutingOut → Working → CommutingIn → Home → OffDuty | Sick | Imprisoned | Grieving.

StateAt(tick) ist O(1) — du kannst zu jeder Tageszeit fragen “wo ist NPC X gerade?”. Wichtig für Witness-Mechanik (siehe unten).


Witness-System (Zeugen)

NPCs am Tatort beobachten Verbrechen. Per NPC ein Ring-Buffer von 10 Events:

WitnessEvent = {
  Day, EventType, ActorPlayerIdx, NodeID, SectorID,
  Fidelity (0-100, Decay -10/Tag)
}

Gates:

Decay: −10 Fidelity/Tag. Bei 0 → Event wird aus Buffer gepruned.

Fog-of-War: Andere Spieler sehen ActorPlayerIdx als −1 (unbekannt) — nur du selbst (oder Building-Owner) siehst, wer das Verbrechen begangen hat.

Dedup: Gleicher (EventType, Actor, Node) → existierender Eintrag wird auf Fidelity 100 refreshed, statt Duplikat.

Spieler-Counter-Aktionen gegen Zeugen (volle Einträge in Aktionen):


Informant-Mechanik

Wenn Staff.Loyalty ≤ 20:
  Staff.Informant = true (sticky — flippt nicht zurück bei Loyalty-Recovery)

Informanten leaken Witness-Events an die Polizei — das ist ein Hauptweg, wie deine Verbrechen in Investigations enden.

Reset: Nur via Phase-3.F-Action explizit clearbar. Sonst: NPC entlassen oder ersetzen.

Sichtbar: Building-Owner sieht den Informant-Flag im Exact-Attribute-View, andere Spieler nicht.


Bribe-Effekt auf NPCs

bribe-Action auf NPC:


Lebenszyklus pro Tick (End-of-Day)

In jedem Tick laufen folgende Population-Phasen:

Mortality (Altersdes Tod)

< 360 Monate (30 Jahre)         → 0% chance
360-720 Monate (30-60 Jahre)    → linear 0.001%/Monat-Excess
> 720 Monate (60+ Jahre)        → linear 0.003%/Monat-Excess (3× Multiplier)

Birth (Geburten)

Emigration (Auswanderung)

Quit (freiwilliger Job-Verlust für Staff/Owner)

Drei unabhängige Channels:

Retirement (altersbedingt)

Replacement (Death/Quit → neuer NPC)

  1. Promotion: Lokaler Adult-Resident (20-40 Jahre, passende Wealth-Tier) → Staff/Owner
  2. Fresh Spawn: Wenn kein Kandidat → frischer NPC mit Baseline-50-Attributen

Immigration (Zuzug)

Loyalty-Regen


Sektor-Aggregate

Jeder Sektor trackt 20+ Counter (Births, Deaths-By-Cause, Quits, Hires, etc.) als Lifetime + Today-Werte plus 7-Tage-Rolling-History (für UI-Sparklines).

Health-Tier (demographisch)

Tier Trigger
Thriving Births − Emigration > 5
Stable Default
Declining Emigration − Births > 5
Collapsing DeathsByViolence ≥ 10 ODER (Emigration ≥ 10 UND Births/Emigration < 0.33)

Economy-Tier (wirtschaftlich)

Tier Trigger
Booming WealthInflow ≥ 200 + Inflow/Outflow ≥ 3:1
Stable Default
Stagnating LaborSupply ≥ 5 + Supply/Demand ≥ 2:1
Recession Outflow ≥ 200 + Outflow/Inflow ≥ 3:1

Beide Tiers sind unabhängig — ein Sektor kann gleichzeitig Thriving (demografisch) UND Recession (wirtschaftlich) sein. “Brain-Drain”-Marker.


Was du als Spieler siehst (Fog-of-War)

Position Was sichtbar ist
Unscouted Sector Nur Aggregate (Population, Labor, Migration, Avg-Wealth). Keine individuellen NPCs.
Scouted Sector Owner/Staff-Listen mit gehinten Attributen (“very_corrupt”, “very_loyal”). Keine exakten Werte.
Eigenes Building Staff mit exakten 0-100-Werten + Informant-Flag + Witness-Events (eigene Crimes mit ActorPlayerIdx, fremde mit −1).
Admin Kein Fog.

NPCDTO Felder

Aus engine/internal/fixture/population.go:

NPCDTO {
  ID, Name, Surname, AgeYears
  Role                                // "owner" | "staff" | "resident" | "unemployed"
  HomeBuildingID, WorkBuildingID
  WealthTier                          // "low" | "mid" | "high"
  CorruptionHint, FearHint, LoyaltyHint   // gehinted, kategorisch
  Wage, TenureDays
  State, CurrentNode, ShiftStart, ShiftEnd, NextTransition
  Exact?: {                           // nur Owner/Admin
    Corruption, Fear, Loyalty, Observance, Productivity, Wealth
    Informant, BribedByRequester
    WitnessedEvents[]
  }
}

Sektor-Population-DTO

SectorPopulationDTO {
  Total, Cap                          // Population + Housing
  LaborDemand, LaborSupply, MigrationFlag  // +1 Inflow / -1 Outflow / 0 Stable
  AvgWealth, AvgOwnerFear, AvgStaffLoyalty
  InformantCount                      // Anzahl ohne Identitäten
  AvgStaffProductivity
}

Strategische Konsequenzen

Vertiefung: Sobald du Gebäude organisierst, greift das Belegschaft & Streiks-Arbeitssystem — chronische Mustererkennung, Federal-Heat-Strafen, Crisis-Stufen und Bot-Adaption laufen mit.


Quellen