Home Economic Map Zones

Economic Map Zones

Tax, property, and growth are segment overlays — axis-aligned zones on the same map layout as terrain and resources. They are not biomes and not terrain surface tiles. Biomes, adjacency, and cultivation live in 38 — Biomes, adjacency & terrain transitions.

Related: 10 — Economy & markets, 40 — Property plots & farming, 40b — Cultivation depth, 23 — Harvest, 08 — Inventory & storage, 21 — World content schemas.


4.1 Fields

Field Type Meaning
id string Stable id
rects list Coverage
z_order int Stack within tax overlays
rate_bps int Tax in basis points of harvest copper value (e.g. 500 = 5%)
flat_copper int Optional flat copper added to the tax bill (default 0)
market_sales_tax_bps int Basis points of market-hall sale total sunk to crown (default 0)
market_sales_flat_copper int Optional flat copper per market-hall purchase (default 0)
label string? Designer / UI label

Market hall sales use market_sales_* on the tax zone covering the listing hall (not harvest rate_bps). Tax is sunk from seller proceeds; buyer pays the listed line total (10).

4.2 Harvest tax runtime

On harvest complete:

  1. Resolve tax_zone_at(x, y).
  2. Compute bill = flat_copper + floor(harvest_value_copper * rate_bps / 10000).
  3. Apply owner / tenant discount when the cell lies on a property plot (40).
  4. Deduct min(bill, player_copper) — soft deduct. Ledger: LedgerCategory::Taxes.
  5. Credit plot owner tax share from tax actually paid (owner_tax_share_bps). Credit the remainder to the town treasury. Off-plot tax credits the treasury in full.
  6. Never cancel the harvest for insufficient funds.

Hall sales tax (market_sales_*) credits the same treasury. NPC buys debit it. The opening balance is town.opening_treasury_copper in server settings; the live balance persists on the region snapshot. After dawn, boundary-zone daily_budget_copper raises the treasury back to that floor when the balance is lower (43).

Workers harvesting for an employer: tax follows employer / acting-character policy (default: character that receives the items).


5.1 Fields

Field Type Meaning
id string Zone id
rects list Claimable footprint
z_order int Stack within property overlays
crown_price_copper int Base price for entire zone area (pro-rated per plot)
max_area_m2 float? Optional cap on a single claim
upkeep_copper_per_day int Base daily upkeep for entire zone (pro-rated)
upkeep_grace_days int Days unpaid before the upkeep notice is worded as overdue. Unpaid upkeep does not reclaim the plot
owner_tax_discount_bps int Cap for owner / tenant harvest tax discounts
label string? UI label

Runtime plots + deeds live in worker persistence. Segment YAML is geometry + crown terms only.

5.2 Player ownership

Players claim fractional plots inside the zone (40): buy, deed, upkeep (bank-first, including offline), sellback, reclaim. Farm access and tax share are plot-scoped.


6.1 Fields

Field Type Meaning
id string Zone id
rects list Coverage
z_order int Stack within growth overlays
fertility float >= 1.0 shortens wild plant respawn and speeds farm crop growth
crop_tags string[] Tags that receive fertility bonus; empty = all plant nodes in zone
cultivate_ticks u32? Till channel duration in this zone; unset → server default
cultivate_stamina_mult float Multiplies cultivate stamina (default 1.0)
fallow_revert_ticks u32? Empty tilled revert; unset → farming.default_fallow_revert_ticks
allowed_kinds string[] Terrain kinds allowed for farm tiles / cultivate gates
allowed_biomes string[] Biome ids for farming rules
label string? UI label

6.2 Wild respawn formula

At harvest-complete when entering cooldown:

base = node.respawn_ticks
zone = growth_zone_at(node.x, node.y)
if zone matches node (crop_tags empty OR intersection with node/item tags):
  effective = base / fertility * weather_mult
else:
  effective = base * weather_mult_outside
until_tick = tick + max(1, ceil(effective))

weather_mult defaults to 1.0 until regional weather exists.

6.3 Farm till / fallow

Cultivate and fallow sample the same covering growth zone (40b). Fertility still speeds growth, not till duration.


7. Sampling helpers

  • tax_zone_at(segment, x, y)
  • property_zone_at(...) / property_zones_covering(...)
  • growth_zone_at(...) / farm-zone tuning helpers

Mirror terrain_zone_at overlap rules within each family.


8. content editor Map layout

Capability Detail
Draw Brush or rect tool for tax / property / growth
Select / drag / delete Same patterns as terrain and nodes
Property panel Kind-specific fields above (including growth cultivate / fallow)
Labels Prefer zone label; id secondary
Validate Overlap warnings; property area vs max_area_m2; unknown crop tags
Save PUT map-layout → segment YAML

Native flatland-editor may visualize overlays; web Map layout is primary for large-scale placement.


9. Settings knobs

economy_zones:
  tax_soft_deduct: true
  default_owner_tax_discount_bps: 0
  property_sellback_bps: 5000
  growth_fertility_min: 1.0
  growth_fertility_max: 3.0
  weather_mult_default: 1.0

property_plots:   # see plan 40
  tax_premium_weight: 0.5
  owner_tax_share_bps: 2500
  cultivate_ticks: 600

farming:          # see plan 40b
  wither_on_reclaim: true
  default_fallow_revert_ticks: 1620000

10. Example (starter-plains sketch)

tax_zones:
  - id: plains-crossroads-tax
    z_order: 0
    rate_bps: 400
    market_sales_tax_bps: 250
    rects:
      - { x0: 118, y0: 128, x1: 155, y1: 148 }

property_zones:
  - id: crown-plot-a
    z_order: 0
    crown_price_copper: 5000
    upkeep_copper_per_day: 25
    upkeep_grace_days: 3
    owner_tax_discount_bps: 2500
    rects:
      - { x0: 130, y0: 135, x1: 145, y1: 145 }

growth_zones:
  - id: mill-fields
    z_order: 0
    fertility: 1.4
    crop_tags: [carrot, potato, vegetable]
    cultivate_ticks: 450
    cultivate_stamina_mult: 1.0
    fallow_revert_ticks: 1620000
    allowed_kinds: [grass, tilled]
    allowed_biomes: [temperate_plains]
    rects:
      - { x0: 125, y0: 120, x1: 150, y1: 135 }

11. Non-goals

  • Biome climate, adjacency, procedural fill → 38
  • Market hall list/buy UX detail → 10
  • Deed / farm access / plot claim UX → 40
  • Bank chests keyed to parcels (future housing hook)