how_to_build
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| how_to_build [2026/06/26 18:27] – appledog | how_to_build [2026/07/10 04:20] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 2: | Line 2: | ||
| Building is how the world grows: you **dig** new rooms, **describe** them, and | Building is how the world grows: you **dig** new rooms, **describe** them, and | ||
| - | **commit** them to make them permanent. These commands need the **worldbuilder** | + | **open** them to players. These commands need a builder role: **worldbuilder** or |
| - | or **implementor** | + | **implementor** |
| + | been assigned). Ask an admin to grant one. | ||
| In-game, the authoritative lists are always **help room** and **help zone** (and | In-game, the authoritative lists are always **help room** and **help zone** (and | ||
| **help topics** shows which topics you can see). This page mirrors them. | **help topics** shows which topics you can see). This page mirrors them. | ||
| - | == Drafts | + | == Closed |
| - | When you dig a room it starts as a **draft**: it exists and you can walk into it, | + | A newly dug room is born **closed** — under construction. A closed room can't be |
| - | but it's flagged unfinished until you commit it. Its // | + | entered by players through its exits, and its // |
| - | **[draft room]** note. Run **room commit** once you're happy with it, and the | + | Builders who can edit a room may simply |
| - | room, together with its exits and the way back, becomes permanent. | + | to keep working. When it's ready, **room open** (alias **room commit**) opens it to |
| + | players; **room close** (alias **room draft**) closes it again for maintenance. | ||
| == Digging rooms | == Digging rooms | ||
| - | * **dig //dir//** — dig a new room to the // | + | * **dig //dir//** — dig a new, unnamed |
| + | * **dig //dir// //name//** — open a passage to an existing room called //name//, or dig a **new** one with that name and step in. | ||
| + | * **dig //dir// //id//** — open a passage to the existing room with that //id//. | ||
| + | * **dig new //name//** — a room with **no** exits (also: **dig -** / **dig .** / **dig noexit**). | ||
| - | When you dig, a **two-way** passage | + | Digging a **new** room makes a **two-way** passage |
| - | you, so the exits work in both directions. The new room also inherits the **zone** | + | steps you through; |
| - | of the room you dug from. It opens with a placeholder name and description. You can set | + | **existing** room leaves you put and only adds the exit (the return exit too, if that |
| - | those next. | + | room's facing slot is free). |
| == Editing the current room | == Editing the current room | ||
| * **room name //name//** — name the room | * **room name //name//** — name the room | ||
| - | * **room desc //text//** — set the room' | + | * **room desc //text//** — set the description (what players read on //look//) |
| - | * **room | + | * **room |
| - | * **room | + | * **room info** — its id, zone, exits (with target ids), and open/closed |
| + | * **room | ||
| + | * **room delete //id//** — delete a **closed** room (asks you to confirm; it goes to trash and inbound exits are stripped) | ||
| + | |||
| + | == Editing exits directly | ||
| + | |||
| + | **dig** always makes a //two-way// passage. To set or clear a //single// (one-way) | ||
| + | exit, edit it directly — like every **room** command, on the room you stand in: | ||
| + | |||
| + | * **room exit //dir// // | ||
| + | * **room noexit //dir//** — remove this room's //dir// exit | ||
| + | |||
| + | These are one-way, so the far room is untouched. To fix the matching exit, **goto** | ||
| + | that room and edit it there. | ||
| + | |||
| + | An exit can also be **unlisted**: | ||
| + | or a **hidden** exit sealed until a lever opens it. Both are set with room-data flags -- | ||
| + | see **[[Advanced Building]]** (// | ||
| + | |||
| + | == Getting around | ||
| + | |||
| + | **goto** teleports you straight to a room — handy for editing the far end of a | ||
| + | one-way exit, or any room you can build in. | ||
| + | |||
| + | * **goto //id//** — by number | ||
| + | * **goto //name//** — by name (or a room **keyword**), | ||
| + | * **goto //name// //zone//** — prefer a given zone (by name or id) | ||
| + | |||
| + | You can only **goto** (and walk into closed) rooms in zones you're allowed to build in. | ||
| == Zones | == Zones | ||
| Zones group rooms into areas — a town, a forest, a dungeon. Every room belongs to | Zones group rooms into areas — a town, a forest, a dungeon. Every room belongs to | ||
| - | exactly one zone. | + | exactly one zone. A zone has an **internal name** (used in commands) and optional |
| + | **display** info shown to players. | ||
| - | * **zone create //name//** — create a new zone (it tells you the new zone' | + | * **zone create //name//** — create a new zone (internal name; tells you its id) |
| - | * **zone list** — list every zone and how many rooms it holds | + | * **zone list** |
| - | * **room zone // | + | * **rooms //[zone]//** — list rooms in the current zone, or a named/ |
| + | * **room zone // | ||
| + | * **zone name // | ||
| + | * **zone desc //text//** — set the zone's description | ||
| + | * **zone suggested //lo// //hi//** — set the zone's suggested level range | ||
| + | |||
| + | The **zones** list reads: //#id internal - Display | ||
| + | part shown only once you've set it. | ||
| + | |||
| + | == Items and creatures | ||
| + | |||
| + | Builders also stock the world with **items** (a sword, a lamp, a sign) and | ||
| + | **mobiles** (creatures and NPCs). Those have their own guides: | ||
| + | |||
| + | * **[[All about Items]]** — create, describe, keyword, equip, and blueprint items (the item factory) | ||
| + | * **[[All about Mobiles]]** — create creatures, give them data, and simple reactions | ||
| + | * **[[Shops]]** — turn a mobile into a shopkeeper that buys and sells | ||
| + | |||
| + | Zones also **reset** about once an hour, repopulating any registered spawns; the | ||
| + | //zone setspawn// (mobiles) and //zone setitem// (items) commands live in those two guides. | ||
| == A worked example | == A worked example | ||
| Line 45: | Line 98: | ||
| dig north | dig north | ||
| room name Kitchen | room name Kitchen | ||
| - | room desc A cramped kitchen. A fan turns slowly on the ceiling and the linoleum | + | room desc A cramped kitchen. A fan turns slowly on the ceiling and the linoleum squeaks underfoot. |
| + | room keywords kitchen cook | ||
| room info | room info | ||
| - | room commit | + | room open |
| + | }}} | ||
| + | |||
| + | You dug a room north, named, described and keyworded it, checked it over, and opened | ||
| + | it to players. Walk **south** to come back — that return exit was made for you. | ||
| + | |||
| + | == Custom Commands | ||
| + | A very common thing you want to do is add a way to create a custom command; either to show a custom flavortext or to cause something to happen. This section will detail ways that you can create a custom command such as "move painting" | ||
| + | |||
| + | === A command on the room itself -- **cmd_// | ||
| + | |||
| + | The simplest custom command needs no item at all -- you hang it on the **room**. A room-data field named **cmd_// | ||
| + | |||
| + | {{{ | ||
| + | room data cmd_examine_keyhole exa You examine the keyhole. It is unusually small. It must require an unusually small key! | ||
| + | }}} | ||
| + | |||
| + | Now typing **examine keyhole** in that room prints that line. A room command **pre-empts everything** -- it fires even when the word is normally a built-in (// | ||
| + | |||
| + | To print more than one line, add numbered continuations -- **cmd_// | ||
| + | |||
| + | {{{ | ||
| + | room data cmd_examine_keyhole exa The keyhole is unusually small. | ||
| + | room data cmd_examine_keyhole_2 exa It must require an unusually small key! | ||
| + | }}} | ||
| + | |||
| + | //The slug is the whole typed phrase.// " | ||
| + | |||
| + | === Verbs on an object -- **do //word// to // | ||
| + | |||
| + | A custom command can also live on an **item** -- a prop -- and there it can do more than print. Give the prop a **verb hook** and any player who types "// | ||
| + | |||
| + | {{{ | ||
| + | item rug data verb_move A trapdoor is revealed beneath the rug! | ||
| + | item rug data verb_move_reveal trapdoor | ||
| + | }}} | ||
| + | |||
| + | Now **move rug** prints that line //and// clears the // | ||
| + | |||
| + | === Commands that reach across a zone -- flags and gates | ||
| + | |||
| + | A verb hook fires in one room. When a custom command should reach //across// an area -- light three braziers scattered through the sewers and a stone door grinds open somewhere else -- the prop raises a flag on the shared **zone blackboard**, | ||
| + | |||
| + | {{{ | ||
| + | item brazier data verb_light_zoneflag brazier_a | ||
| }}} | }}} | ||
| - | You dug a room to the north, named and described | + | Lighting each brazier sets its own flag (one-way, and cleared on a zone reset so the puzzle re-arms); the gate room lists the flags it needs and un-seals a hidden exit once they are all raised. The full recipe -- flags, requiring a tool in hand, and building the gate -- is in **[[Advanced Building]]** (// |
| - | permanent. Walk **south** to come back; that return exit was created for you. | + | |
| == Builder help topics | == Builder help topics | ||
| - | * **help room** | + | * **help room** |
| - | * **help zone** | + | * **help zone** |
| - | * **help worldbuilder** //and// **help implementor** — your role's overview | + | * **help item** // and // **help mob** — items and creatures |
| + | * **help worldbuilder** // and // **help implementor** — your role's overview | ||
how_to_build.1782498441.txt.gz · Last modified: by appledog
