Economy & Zoning
Zoning is the player’s macro lever; RCI-style supply/demand drives growth.
Zoning
Residential/Commercial/Industrial zones are painted onto parcels (see 3D & Grids doc), with a density level set per block. Zoning is the primary player input into the macro simulation.
Prior Art
SimCity 4's RCI indicator is the reference point for our own zone color coding: green for Residential, blue for Commercial, yellow/orange for Industrial.
Color
The RCI colors above are player-feedback signals, used in the HUD's RCI demand meter, the zone overlay, and other data views — they do not color the generated building facades themselves. Buildings are colored by material family (per the 10-value, land-value-tiered enum) per the art-lighting policy; the zone signal travels separately, on the overlay.
Macro Loop
Supply/demand curves per zone type (jobs vs. workers, goods vs. demand) drive growth or decline — surfaced to the player as legible RCI-style demand meters, in the spirit of SimCity 4.
Land Value
A derived function of transport access, utility coverage (power/water), and amenities (parks, education) minus pollution/noise. Land value feeds back into growth rate and desirability.
landValue is computed per parcel using a multiplicative factor model, then clamped and rescaled to a [0, 1] fraction:
rawValue = baseValue * (1 + transportBonus + utilityBonus + amenityBonus - pollutionPenalty - noisePenalty)
landValue = clamp(rawValue / baseValueMax, 0, 1), where baseValueMax is a documented per-zone-type constant representing rawValue at all bonuses maxed (1.0) and no penalties. This keeps landValue a true 0–1 fraction regardless of how baseValue is tuned.
Each factor is a 0–1 value derived from the parcel's proximity to roads, utilities, parks, and pollution/noise sources. baseValue is a tunable constant per zone type.
landValueTier is bucketed from the landValue fraction:
- Tier 0: landValue < 0.33
- Tier 1: 0.33 ≤ landValue < 0.66
- Tier 2: 0.66 ≤ landValue < 1.0
- Tier 3: landValue = 1.0
landValue and landValueTier are not stored fields on Parcel — downstream systems (procedural buildings, growth simulation) compute them on demand from this formula, using the parcel's current zone type, density, and location.
Transport access is covered in Arc-Spline Transport.
Tax & Budget
Per-zone-type tax rate sliders feed a city ledger; the ledger funds utility and service upkeep, closing the budget loop.
Currency
The game uses a custom currency in place of dollars to match the warm, toylike feel of the naming brief.
Currency Options:
- Lots (Ⱡ) — Direct pun on parcel lots, ties the currency to the zoning mechanic. Risk: overlaps with "lots of" in ordinary sentences.
- Acres (₳) — Land-area pun, grounded and concrete without being too serious.
- Doubloons (đ) — Pirate/toylike, winking, excellent mouthfeel, but flavor-specific.
Current Selection: Acres (₳) — Fits the naming brief (warm, concrete, modern) while staying grounded in the game's land-management core.
Data Model
This doc owns the ZoneType enum — the set of zones players can paint onto a parcel:
enum ZoneType {
Residential = "residential",
Commercial = "commercial",
Industrial = "industrial",
Civic = "civic",
MixedUse = "mixed-use",
}
These are the same five values as Procedural Buildings' Building Classes table columns (R/C/I/Civic/Mixed-Use); that doc consumes this enum, it doesn't define it.
| Entity | Fields |
|---|---|
| Parcel | zoneType: ZoneType, density, landValue (derived) |
| City | ledger, taxRates[] |
Open Questions
- Macro sim tick rate.
- How the microscopic citizen sim (separate doc) aggregates back into demand signals.
Future Work
- Micro Citizen Simulation: Individual household pathfinding, budgeting, and routine schedules. Currently the macro RCI loop operates on citywide aggregates; a microscopic citizen layer will model foundational citizen needs (sleep/beds at home, income/jobs at workplaces) and recreational wants (shopping at commercial storefronts, leisure at parks and civic amenities), routing them over the multimodal transport graph and aggregating consumption decisions back into the macro economy.
- Dynamic Utility Flow Networks: Real-time fluid and electrical simulation. Currently modeled simply as proximity-coverage values (utility access as a 0–1 factor on land value); future work replaces this with actual power/water distribution networks and supply curves.
- Advanced Tax Brackets: Sliding tax rates based on parcel density tier or household income levels, replacing the current flat per-zone-type sliders. Enables richer fiscal policy modeling.
- Agent-Based Spatial Queries: The
GameStoreclass implements theWorld<ParcelId>interface from@chances/agents, butnearby()currently returns an empty iterable. Future work should wirenearby()to the transport network routing layer, so agents can query parcels reachable via walk/bike/transit within a travel-time budget — enabling local-market behaviors (households shopping at the closest commercial zone they can actually reach) and wealth-based mode choice (wealthier citizens can afford cars for faster access).