01/11/2026 Patch Notes - Wireframe and Exits updates

Running changelog and bug tracker.
Post Reply
User avatar
Martaigne
Site Admin
Posts: 138
Joined: Sun Jan 12, 2025 10:02 pm

01/11/2026 Patch Notes - Wireframe and Exits updates

Post by Martaigne »

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:
  • 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)
Updates to XML room template saving/loading logic:
  • 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)
Sir Martaigne, Knight of the Crown, Champion of Thine, Favored of Fair Hearts.
Endyce, Administrator of Chaos, Hobo Coder, Shatterer of Dreams.
Two sides of the same coin — slightly tarnished and worse for wear, but still valid currency.
Post Reply