====== 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: [[immortal:creationlaw|Creation Law]]. Room scripts: [[immortal:scriptlaw:rooms|Script Law — Rooms]]. ===== Why a workspace? ===== Neo never drops you into a numbered OLC menu. ''@new room '' 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. ===== Step-by-step: first room ===== **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. ===== ''@room'' field commands ===== From ''ModifyStats.cmdCrRoom'': * ''proper'' — one-line room title (writer) * ''general'' — multi-line description (writer) * ''attrs '' — Sector, SpecRoom * ''flags '' — RoomFlags (''!'' to clear when supported) * ''door …'' — exits (next section) * ''extras …'' — extra descriptions (look keywords) * ''proc '' — attach a room SpecProc **after** the script exists ([[immortal:scriptlaw:rooms|Script rooms]]) * ''map '' — map item / coordinates * ''stadium '' — stadium linkage ===== Exits / doors ===== 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] '' 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. ===== Dig a linked copy ===== Why ''@dig'' exists: walking ''@new'' + manual two-way doors for every neighbor is tedious. ''@dig '' copies the room you **stand in**, creates the new VID, and links the exit (''Immortality.createDig'' → ''RoomDB.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''. ===== Finding free room VIDs and getting around ===== > @find room > @find room 3 > index room midgaard > goto 3001 > stat room > ===== Full linked-rooms walkthrough ===== 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 ([[immortal:creationlaw:zones|Zones]]). For ENTER/UPDATE behavior, create the SpecProc **first**, then ''@room proc '' ([[immortal:scriptlaw:rooms|Script rooms]]). Attaching a proc name that does not exist yet is a frequent miss — ''index proc_room'' to verify. ===== Room caveats ===== * 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 [[immortal:scriptlaw:rooms|Script rooms]]. ===== Related ===== * [[immortal:creationlaw|Creation Law]] — hub * [[immortal:creationlaw:zones|Zones]] — place content and reset * [[immortal:scriptlaw:rooms|Script Law — Rooms]] — room SpecProcs