Skip to content

Economy

A simple, mostly-closed internal economy. Not the focus of the game — but it grounds the simulation in realism.

TL;DR

NPCs have wallets. They get paid. They buy things. That's it.

The player has no economic interaction with the world. The economy exists to make NPC behavior feel grounded, not to give the player something to do.


Currency

Unit: Ash (₳)

In-world fictional currency. Not tied to any real currency. Internal to the simulation.


Wallets

Every NPC has a wallet record in D1:

ts
interface Wallet {
  npcId: string;
  balance: number;        // in Ash
  lastPayday: number;    // tick timestamp
  dailySpendAvg: number; // rolling 7-day average
}

Default starting balance: ₳500 (enough to last ~2 weeks without income).


Income

Salaries (Daily)

ProfessionDaily Wage
Doctor₳120
Pharmacist₳90
Nurse₳80
Teacher₳70
Police officer₳70
Baker / Shop owner₳60
Mayor / Principal₳100
Publican₳75 (tips add ~₳20)
Market traders₳50–₳80 (variable)
Children / Retirees₳0

Pay is delivered once per in-game day, at 17:00.

Bonuses (Emergent)

Occasionally, an NPC receives a bonus — a small ₳20–₳50 payment for:

  • Working overtime
  • Covering a sick colleague
  • A "thank you" gift from another NPC (rare)

Spending

Daily Necessities

Every NPC has a needs profile that drives purchases:

  • 🍞 Food — daily, ₳5–₳15/day
  • 🍺 Drink — 2–3x/week, ₳3–₳8/visit
  • 🏥 Medical — only when sick/injured
  • 🛒 Misc goods — weekly, ₳10–₳30

Locations That Accept Money

  • Bakery
  • General Store
  • Market stalls
  • Pharmacy
  • Pub
  • Café

Locations That Don't

  • Hospital (free, publicly funded)
  • Police Station
  • School
  • Town Hall
  • Church

Purchasing Flow

If balance < price, the NPC does not buy and may decide to go home instead.


Stock

Each commercial location tracks stock:

ts
interface Stock {
  locationId: string;
  items: Record<ItemId, number>;
  restockSchedule: RestockRule[];
}

Stock depletes with purchases and is restocked daily (typically at 06:00 by the owner NPC). Out-of-stock events occasionally emerge as mini-stories.


Bankruptcy

If an NPC's balance drops below ₳50, they enter "financial stress" state. This:

  • Increases their need priority for "money"
  • May cause them to ask for favors from friends
  • May show up in their diary

If balance hits ₳0:

  • The NPC will prioritize finding any work
  • They may sell possessions (v2 feature)

There is no "game over". The simulation adapts.


What the Player Sees

The player does not see wallet balances directly. They might infer financial stress from diary entries:

"Worried about the rent again. Skipped the pub tonight."

This is by design. Money is part of the world's interior life, not a player-facing stat.


Why It's Simple

A complex economy would:

  • Distract from the AI / narrative focus
  • Require balancing
  • Open exploits

A simple economy:

  • Provides a constraint that produces emergent storytelling
  • Has no balancing burden
  • Cannot be exploited by the player (because the player doesn't interact with it)

v2+ Plans

  • Trade routes between towns
  • NPC-initiated loans
  • Player-suggested investments (very limited)

Last updated:

Released under the MIT License.