immortal:creationlaw:rooms

Creation Law — Rooms

You know classic Diku redit. Neo has no redit. Instead you open a room draft in a personal workspace, set fields with @room … commands, review with @examine, then @save room to commit into the world database.

Hub: Creation Law. Room scripts: Script Law — Rooms.

Neo never drops you into a numbered OLC menu. @new room <vid> allocates one in-memory draft on your immortal. Until you @save or @clear, that draft is the only room editor you have open. A second @new room while a draft exists errors — finish or abandon first. That is the most common first-day mistake.

Your VID must lie in the room range on your immortality record (implementors assign ranges). Creating outside your range is rejected by the code.

1. Find a free VID (optional but wise):

> @find room
(lists unused room VID blocks)
> @find room 3
(unused blocks sized for 3 contiguous rooms)
>

2. Open the draft:

> @new room 1200
Okay.
>

If you see an error about an existing draft, run @examine room, then either @save room or @clear room and try @new again.

3. Set the title and description (writers open — type text, then finish the writer the same way you finish other multi-line immortal writers):

> @room proper
A quiet stone alcove
> @room general
Cool air pools here among worn flagstones.
Shadows cling to the corners.
>

proper is the one-line title players see in the prompt / look header. general is the multi-line room description. You set them as separate steps because they are separate fields on the prototype.

4. Sector and flags (why: sector drives movement/weather feel; flags gate magic, NPCs, healing, etc.):

> @room attrs sector inside
Okay.
> @room flags roomflags healing
Okay.
>

Coded attribute classes are Sector and SpecRoom. Flag class RoomFlags includes DARK, NO_NPC, NO_MAGIC, PRIVATE, HEALING, AIR, SILENCE, ARENA, DUMP, GOD, SAVE, RECALL, NO_TELEPORT_IN / OUT, …. Prefix with ! to clear a flag when the modifier supports it.

5. Review before you save:

> @examine room
--- Room ---
...
>

Check title, description, sector, flags, and any doors. Fix mistakes now — @save writes what you see.

6. Commit:

> @save room
Okay.
>

The draft is gone; the room lives in the world DB. @load room 1200 later if you need to edit again.

From ModifyStats.cmdCrRoom:

  • proper — one-line room title (writer)
  • general — multi-line description (writer)
  • attrs <class> <attr> — Sector, SpecRoom
  • flags <class> <flag> — RoomFlags (! to clear when supported)
  • door … — exits (next section)
  • extras … — extra descriptions (look keywords)
  • proc <name> — attach a room SpecProc after the script exists (Script rooms)
  • map <item> <x> <y> — map item / coordinates
  • stadium <value> — stadium linkage

Why doors are multi-step: you add an exit slot, point it at a destination room, then set type / flags / key. The destination room must already exist and lie in the zone VID range of the room you are editing — linking to a missing VID is a classic gotcha.

Syntax: @room door [add|delete|flags|general|key|keywords|proper|room|type|weight] <direction>

Directions from Direction (north, east, south, west, up, down, …). Door types (DoorType): PATH, GATE, OBJECT, WINDOW, STADIUM. Door flags (DoorFlags): CLOSED, SECRET, LOCKED, PICKPROOF, WIZLOCKED, KNOCKPROOF.

> @room door add east
Okay.
> @room door room east 1202
Okay.
> @room door type east gate
Okay.
> @room door flags east locked
Okay.
> @room door key east 3102
Okay.
> @room door keywords east add gate
Okay.
> @examine room
> @save room
Okay.
>

If @room door room … fails, confirm 1202 exists (goto 1202 / stat room) and sits in-range for this zone.

Why @dig exists: walking @new + manual two-way doors for every neighbor is tedious. @dig <direction> <room-vid> copies the room you stand in, creates the new VID, and links the exit (Immortality.createDigRoomDB.createCopy). Target VID must be in your room range.

> goto 1200
> @dig south 1203
Okay.
>

Then goto 1203, @load room 1203 (if needed), rewrite proper / general so the copy is not a clone of the parent, @examine, @save.

> @find room
> @find room 3
> index room midgaard
> goto 3001
> stat room
>

Build two connected rooms the way a new creator should the first week:

> @find room 2
> @new room 4500
Okay.
> @room proper
(east end of the quiet alley)
> @room general
(wet cobbles, a shuttered stall…)
> @room attrs sector city
Okay.
> @examine room
> @save room
Okay.
> goto 4500
> @dig east 4501
Okay.
> goto 4501
> @load room 4501
> @room proper
(west end — rewrite so it is not a clone)
> @room general
> @examine room
> @save room
Okay.
>

Common mistakes: forgetting to rewrite the dug copy; opening @new room while 4500's draft was never saved; wiring a door to a VID you have not created yet.

Next: put rooms under a zone top (Zones). For ENTER/UPDATE behavior, create the SpecProc first, then @room proc <name> (Script rooms). Attaching a proc name that does not exist yet is a frequent miss — index proc_room to verify.

  • No redit — workspace only.
  • One open room draft; @save or @clear before another @new room.
  • Exit targets must already exist and stay inside the zone VID range.
  • @dig destination must be in your assigned room range.
  • @wrap can reformat long general / extras text after writing.
  • Hard-coded room specials use SpecRoom via @room attrs (compiled), not a free-form script name — see Script rooms.
  • immortal/creationlaw/rooms.txt
  • Last modified: 2026/09/23 22:22
  • by 127.0.0.1