01/11/2026 Patch Notes - Wireframe and Exits updates
Posted: Sun Jan 11, 2026 1:08 pm
This is a backend tooling update for creative staff to more easily wireframe new areas with in-game commands instead of manually creating the xml templates. These changes SHOULD be invisible to players but if anyone notices any exit wonkiness, particularly around saving rooms like inn rooms and instanced land, let us know immediately.
Updates to the wireframe command:
Updates to the wireframe command:
- Expand wireframe direction parsing to support full movement set: 8 compass + up/down/out/fore/aft/port/starboard (with short aliases)
- Treat any non-cardinal token as an Exit (OtherExit) type so builders can wireframe door|gate|arch|stairs|...
- Auto-create a reverse exit when creating a new room:
- Cardinals use the opposite direction (north↔south, up↔down, fore↔aft, port↔starboard, ne↔sw, etc.)
- Other exits mirror the same keyword back (door ↔ door, arch ↔ arch, etc.)
- Don’t overwrite Area/Brief when linking to an existing room; only add exits (and reverse exit if missing)
- Add optional quoted args to set room title metadata on newly created rooms only: wireframe <dir/exit> [file] "Area" "Brief"
- Preserve current behavior of moving the builder into the destination room after creation/linking, then save updated room(s)
- Stop writing legacy Room.XmlExits <Exits><string>...exit#.xml</string></Exits> format (keep backward-compatible load)
- Serialize room exits inline by implementing getters for exit buckets (CardinalExits, Doors, MagicDoors, RestrictedExits, etc.)
- Ensure OtherExits only emits plain Exit instances (avoid derived-type duplication/serializer issues)
- Persist ExitOpeners in Room (add backing storage + real getter so <ExitOpeners> survives resaves)
- Make ExitOpener fields round-trip by reading/writing through SecretExits[0] (SecretExit, disappear/reveal messages, exit location)
- Prevent <SecretExits> output drift via ShouldSerializeSecretExits(); add ShouldSerialize* helpers to suppress empty tags
- Harden secret-exit serialization ([XmlIgnore] on OpenerExit.ContainedExit, null-safe Activated)