// Building
Building Properties
Building properties -- the admin walkthrough
This entry walks you from a blank world to a working
neighbourhood. The property system has four moving pieces:
Zone a neighbourhood (key + display name +
price multiplier). Every deed bought
here is scaled by the multiplier.
Plot one in-world room marked as developable.
Belongs to a zone, has a capacity (max
number of properties), a street name, and
a list of allowed deeds.
Deed a property-type entry in the catalogue
(studio, one_br, loft, two_br, penthouse
are seeded; shops, offices, anything else
can be added). Carries a price, monthly
tax basis-points, and a grid layout used
when a player builds it.
Property a built unit: rooms + entrance door +
owner + trust roster + tax record. Each
one is identified by a numeric id.
# Setup checklist (from a fresh world)
## 1. Create at least one zone
@zone/create midtown=Midtown
@zone/multiplier midtown=1.0 (default is 1.00)
@zone/list
Conventional cyberpunk-tier multipliers: Lowtown 0.5,
Midtown 1.0, the Spires 2.0. You can change them later;
it affects new builds and future tax cycles, not already-
owned properties' stored prices.
## 2. Pick a developable room and plot it
Stand in the room you want to make developable, then:
@plot/create midtown=4
@plot/street Eighth Avenue
@plot/deeds studio,one_br
@plot/info
capacity is the max simultaneous properties.
street is baked into auto-generated addresses
("Apt 12, Eighth Avenue"). deeds is a comma-separated
list of deed keys that players may build here -- omit a
key and that tier becomes unavailable in this neighbourhood.
Optional plot tweaks:
@plot/format <fmt> interior room title format
(default "Apt {n}, {street}")
@plot/exitformat <fmt> plot-side door key
(default "A{n}")
By default, building on plot "Main Plaza Avenue" produces
a plot-side door keyed A1 with destination room titled
Apt 1, Main Plaza Avenue. Players type A1 to enter.
## 3. (optional) Author a custom deed
The seeded catalogue (studio, one_br, loft, two_br,
penthouse) covers most housing cases. To add a new type
(a shop, a vault, whatever):
@deed/create cabin=Cabin
@deed/price cabin=80000
@deed/initialrooms cabin=2
See "Layout authoring" below for the grid editor.
## 4. Watch it work
@property/list every property in town
@property/info <id> admin detail
@plot/list every plot in town
@plot/list midtown filter by zone
# Layout authoring (the visual editor)
A layout is a graph of rooms on a 3D grid. Each room has
an id (slug, builder-side only), coordinates (x, y,
optionally z), and an optional hint (a note you can read
with /show -- never seen by players).
## Coordinate system
x and y are the 9x9 floor plan: 1..9 each axis. z is the
floor: integer, defaults to 1 if you omit it. Above
ground is z >= 1, basements use z = 0, -1, -2, ...
## Single-floor example (2-room cabin)
@deed/layout/show cabin
@deed/layout/addroom cabin main 3,3=Main Hall
@deed/layout/addroom cabin bed 2,3=Bedroom
@deed/layout/connect cabin main west bed
@deed/layout/entrance cabin main
@deed/layout/show cabin
## Multi-floor example (townhouse with basement)
@deed/create townhouse=Townhouse
@deed/price townhouse=400000
@deed/initialrooms townhouse=4
@deed/layout/addroom townhouse hall 3,3,1=Front hall
@deed/layout/addroom townhouse living 4,3,1=Living
@deed/layout/addroom townhouse bed 3,3,2=Master bed
@deed/layout/addroom townhouse cellar 3,3,0=Cellar
@deed/layout/connect townhouse hall east living
@deed/layout/connect townhouse hall up bed
@deed/layout/connect townhouse hall down cellar
@deed/layout/entrance townhouse hall
@deed/layout/show townhouse
## /show output
Floors render top-down (high z on top, basements on
bottom) so the page reads like an elevation drawing.
Each floor is a 2D grid with letter markers for rooms.
Cardinal connections (n/s/e/w/ne/nw/se/sw) draw inline
on the grid; up/down connections appear in a separate
"Vertical connections" block below.
Use @deed/layout/show <key> <floor> to view just one
floor when stacked gets too tall.
## Connection rules
- Cardinals (n/s/e/w/ne/nw/se/sw) must stay on the same
floor. Cross-floor cardinals are rejected.
- up/down must connect rooms at the same (x, y), z
differing by exactly 1. Diagonal stairs need a landing
room.
- Reverse direction is implied -- you only declare the
edge once.
## All layout sub-commands
@deed/layout/show <key> [floor]
@deed/layout/addroom <key> <id> <x>,<y>[,<z>][=<hint>]
@deed/layout/rmroom <key> <id>
@deed/layout/move <key> <id> <x>,<y>[,<z>]
@deed/layout/hint <key> <id>=<text>
@deed/layout/entrance <key> <id>
@deed/layout/connect <key> <a> <dir> <b>
@deed/layout/disconnect <key> <a>=<b>
@deed/layout/reset <key>
@deed/layout/validate <key>
/show always prints the current map with a [valid] or
[invalid: reason] footer. Intermediate states save
fine (you can addroom before connecting); only the final
property build run enforces full connectivity, so an
unfinished deed shouldn't be on any plot's allowed list.
# Managing built properties
@property/list [zone] every property (or by zone)
@property/info <id> full detail incl. private_name
@property/forfeit <id> force into eviction state.
Wipes interior, clears the
owner, auto-lists at base
price. Tax script destroys
it next month if unsold.
@property/destroy <id> immediate removal. Frees the
plot's capacity. No listing
window.
@property/address <id>=<str> override the auto-generated
address (e.g. after a street
rename).
Catalogue cleanup:
@zone/delete <key> refused if any plot uses it
@deed/delete <key> refused if any property
was built from it
# The tax cycle (automated, but know it exists)
One global script (house_tax) ticks once per in-game
hour. For each property it checks:
current tax_due_at passed?
- autopay on + funds OK: deduct + advance
- else: -> delinquent + auto-list
delinquent 1 in-game month overdue?
- yes: wipe interior + clear owner
-> evicted
evicted 3 total in-game months overdue?
- yes: delete property + rooms + entrance
door pair
Players pay manually with property pay <id> at any
time to short-circuit the cycle.
# Troubleshooting
*I created a plot but players can't build anything.*
Check @plot/info -- "Allowed deeds" must include
at least one deed key. Use @plot/deeds to set.
*Layout /show says [invalid].*
Read the reason in the footer. Common causes:
- duplicate (x, y, z) -- two rooms in the same cell.
- cardinal connection crosses floors -- swap for up/
down or move a room.
- up/down between rooms at different (x, y) -- align
the coordinates or insert a landing room.
*Players inside a property get evicted unexpectedly.*
The tax tick has wiped it. Check @property/info
for tax_status. Stop house_tax while debugging
with @scripts/stop house_tax.
*Where did the evicted player's stuff go?*
The system room Unclaimed Storage. Teleport in
with @tel Unclaimed Storage; items there are
tagged unclaimed_from:<property_id>.
See also: help properties (player-facing),
help decorate (player customisation), help property
taxes (tax detail).
// Building