Skip to main content.
// 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