-
Notifications
You must be signed in to change notification settings - Fork 1
SiegeSmith World Builder Guide
This page documents the SiegeSmith World Builder feature by feature. If you want the guided tour instead — building a playable game from nothing — read Making a Game from Scratch and come back here when you need depth on a specific tool.
Open the World Builder from SiegeSmith's main window. It is non-modal: keep it open next to the Tank Explorer and flip between them.
Press F1 inside the World Builder at any time for the hotkey cheat sheet.
| Area | What lives there |
|---|---|
| Toolbar (top) | View toggles (Textured/Wireframe/Live FX/Ortho), camera speed, 15° rotation snap, Undo/Redo on the left; search-everywhere, Save region, Validate, Test terrain ▶, Play ▶, ⟲ Sync game on the right. |
| Palette (left) | Tabs: Nodes (terrain meshes), Objects (props & actors), Effects, Lights, Logic, Custom (imports, template creator, prefabs). |
| Viewport (center) | The live preview. Renders the exact nodes.gas the builder saves, through the engine's own region-layout code. |
| Outliner (right, top) | One tree of everything placed, grouped by family with color dots, visibility eyes, and the overlay toggles. |
| Inspector (right, bottom) | Properties of whatever is selected — every panel says which gas file it writes ("→ writes …"). |
| Bottom tabs | Region (node ops, save/load), World (multi-region stitching), Map (identity, start point, quests, mood, atmosphere, validation list), Graph (logic/dialogue/quest graph views). |
| Status bar | Every action explains itself here — when in doubt, read the status line. |
- Left-drag orbit · right-drag pan · middle-drag spin · wheel zoom — deep zoom is allowed: you can get close enough to inspect a single prop, and picking stays accurate all the way in.
- W A S D fly, Q / E down/up — hold Shift for 3× speed, Ctrl for slow. The Speed combo in the toolbar scales all of it. Flying works whenever the cursor is over the viewport and you're not typing in a text box.
- F — focus the selection: the camera jumps to whatever is selected (object, marker, or node).
- Ctrl+1…4 save camera bookmarks; 1…4 recall them. Pan, angles, and zoom all round-trip.
- Orthographic / Perspective toolbar toggle — picking uses the same projection, so clicks stay accurate in both modes.
- The axis gizmo (viewport corner) is clickable — snap the view to an axis.
- Reset view frames the whole region at the default angle.
DS1 terrain is a graph of siege nodes — reusable meshes that join door-to-door. There are no world coordinates in the data; a node's position derives from walking the door graph from the anchor. The World Builder makes that model fast to work with:
- The Nodes palette lists every SNO in your install. Search filters it; the ★ button stars the selected mesh into a persistent FAVORITES section, and everything you place lands in RECENT automatically.
- A thumbnail of the selected mesh renders under the list, so you know what you're about to place.
- Place as anchor — the first node. Everything else chains from it.
- Connect to selected node — the precise way: pick the new mesh's door (palette side), pick a free door on the selected node (Inspector side), connect. Use it when the exact door pairing matters.
- 🖌 Paint terrain — the fast way. Tick the checkbox, then click terrain (or click-drag): each step chains the selected mesh onto the free door nearest the cursor. The joining door is auto-picked by matching door width, the new node inherits the source node's texture set, and every step is one undo. Drag along the ground to lay a corridor in seconds.
- Drag-drop — drag a mesh from the palette straight into the viewport. On an empty region it becomes the anchor; afterwards each drop paints one node at the drop point.
- Link existing doors — connect two already-placed nodes' free doors to close a loop (a ring of rooms meeting back on itself). No geometry is added; only the adjacency is recorded.
- Replace mesh on selected node — swaps the node's mesh in place: same guid, same door connections, same texture set, and everything anchored to the node (objects, emitters, lights…) survives. Works when the new mesh has matching door ids; when it doesn't, the status bar names the offending doors.
- Texture set (Inspector, node page) — re-skin a node with any texture set used in the region; the preview updates live.
- Delete node removes the node and severs its door edges.
- The Bounds overlay (above the Outliner) draws every node's bounding box — the quickest way to spot overlaps and gaps.
- The Objects tab lists placeable templates from your install (plus your custom ones). The Mode button flips between Props (scenery →
non_interactive.gas) and Actors (NPCs/monsters →actor.gas— they animate, fight, and die). -
Search, a tag filter (template-name families like
tree,barrel,krug, derived from your install), ★ favorites, recents, and a model thumbnail all narrow the list.
- Place on selected node drops the template at the node's center.
- Drag-drop any template into the viewport — it lands exactly where you drop it.
- 🌿 Scatter — the foliage/crowd brush. Tick it, then click (or drag) terrain: each click sprinkles ×N copies within radius r, keeping at least gap world-units from existing placements and each other, optionally with random facing. Grass, rocks, forests, krug packs — one click each, one undo each.
- Click selects (the bright base puck marks the selected object). Drag slides it along its node's floor. Shift-drag rotates; turn on 15° rot snap in the toolbar for exact right angles.
- The Inspector shows the node-local X/Y/Z and Yaw° as editable numbers plus a read-only world-space line.
- Ctrl+D duplicates, Del deletes, Ctrl+C / Ctrl+V copy/paste — paste onto a different selected node to move content across the region.
- Ctrl+click pieces (objects, emitters, decals, lights, triggers, commands — any mix) to build a selection set. Every member lights up.
- Drag any member to move the whole group. Shift-drag rotates the group about its center (objects also spin individually).
- The Inspector's Selection page offers Align X/Y (straighten a row), Distribute X/Y (space evenly, outermost stay put), Set template from palette (batch-swap every selected placement's template in one undo), and Save prefab.
- Ctrl+D duplicates the whole set; Del deletes it — each as one undo step. Click empty terrain to deselect.
On the placed-object Inspector page, Instance overrides write values into this placement's block — the template stays untouched, and the engine honors them at spawn:
- Life — hit points for this one placement. Make a single krug a 500-life boss while the rest stay stock.
- Scale × — visual size multiplier (retail DS1 uses this itself — the breakable farmhouse door ships 1.5).
-
Drop — a guaranteed item template (e.g.
potion_health_small): dropped on death for actors, found inside for chests/barrels, on top of the template's own loot roll.
Select a placed actor, tick 🚶 Draw patrol route, then click waypoints on the terrain in order. Unticking closes the loop and assigns it — the placement gets a [mind] initial_command pointing at a chain of cmd_ai_patrol gizmos, exactly the retail mechanism, and the actor walks the route in Play. The blue ribbons in the viewport are the route. Ctrl+Z removes the whole thing.
-
Fire / smoke emitters (Effects tab) land on the selected node and preview as live animated particles (toolbar FX: live/static toggle pauses them on huge regions). The Inspector edits count, particle size, fade, and growth; the marker cube shrinks to a small grab handle while FX are live. →
objects/emitter.gas. -
Decals are textured quads projected on surfaces — scorch marks, signs, carpets. Give one a texture name and it previews as the real art (clicking the art selects it); extents and axes are editable. →
art/decals.gassemantics via the region's decal file. -
Placed sounds write
objects/sound.gas(retail DS1 reads these; the SiegeFX test player is currently silent for them — the tooltip says so).
- Directional lights shade the whole preview live (and the engine terrain). Point lights carry color, intensity, and inner/outer radii — the Radii overlay draws them as ground discs in the light's own color.
- Mood & music (Map tab): the interior flag (reverb), plus ambient / standard / battle music tracks. Battle music switches in when hostiles engage.
- Atmosphere (Map tab): fog (near/far meters + hex color), rain (drops/second + lightning), snow, wind (velocity + direction in degrees). These write retail-shaped mood blocks the engine's weather system applies in Play. Audition fog in viewport applies your fog to the editor preview live, so you tune distances and color without launching anything.
-
Triggers (Logic tab) are condition→action machines: each trigger holds rows, each row has conditions (e.g.
party_member_within_bounding_box(2,2,2)) and actions (e.g.send_world_message("we_req_activate", 0x04000002)), edited structurally in the Inspector. →objects/special.gas. -
Command gizmos are AI orders and cinematic steps (
cmd_ai_patrol,cmd_animation_command, …) chained vianext_scid— chains render as blue ribbons in the viewport. →objects/command.gas. - The Volumes overlay draws every trigger's activation box (sized from its bounding-box condition).
- The Graph tab's Trigger flow view draws the whole wiring as boxes and labeled arrows — who fires what, ending where. Referenced ids that nothing owns appear as grey "(unknown scid)" stubs, so dangling wiring is visible instead of silently dead. Click any box to select and edit it.
-
Conversations (Logic tab → Inspector) are keyed line lists: each line has order, screen text, optional voice sample, a choice kind, and flags. Bind a conversation to a placed NPC and the engine plays it on talk. →
conversations/conversations.gasplus a[conversation]block on the actor's placement. - A line's activate_quest starts a quest when spoken — that's how journals begin.
-
Quests (Map tab) form your journal: a chapter name + intro, then per-quest key, screen name, and description. They write the retail
quests/quests.gasshape and the engine merges them, so your custom journal shows in-game. Validation checks that everyactivate_questreference resolves. - The Graph tab's Dialogue view draws each conversation's line chain and the quests it activates; Quest flow shows the chapter fanning out to its quests and everything that activates them.
Logical flags (logical_flags.gas) toggle passability of already-walkable node groupings (the walkable geometry itself is baked into the SNO art). Add one from the Logic tab; the Nav overlay marks flagged nodes with a green cube.
- The Outliner is one tree over everything placed, grouped by family with color dots matching the viewport markers. Clicking an item selects it everywhere.
- Visibility eyes: spatial families (objects, emitters, decals, lights, triggers, commands) each have a show/hide toggle. Hidden families neither render nor pick — hide the trigger layer while you decorate.
- Overlay checkboxes above the tree: Volumes (trigger boxes), Radii (light discs), Nav (flag cubes), Bounds (node boxes). All translucent, never clickable, never affect the camera framing.
- Every Inspector page carries a "→ writes file" hint, so you always know which gas file you're authoring.
- Every number field is scrubbable (the ⇔ cursor shows it): drag horizontally on the box to change the value live — the viewport follows the drag — or click once to type. Shift = fine steps, Ctrl = coarse. A whole drag is one undo step. Scrubbing the fog distances retunes the viewport audition in real time.
- Undo/Redo (Ctrl+Z / Ctrl+Y) covers everything: terrain, placements, effects, lights, trigger rows/conditions/actions, conversations and their lines, quests, nav flags, brush strokes, prefab placements, group operations — each gesture is one step.
-
Autosave packs the whole region (same pipeline as Play) into
%APPDATA%\SiegeSmith\autosaveevery 3 minutes when something changed. Crash recovery = open the newest autosave. - Search everywhere (Ctrl+F) — one box that hits every family, including dialogue text and quest names. Picking a result selects it and jumps the camera to it.
- F1 — the hotkey cheat sheet overlay.
All three land in the Map tab's checklist:
- Validate (toolbar) — the pre-launch checklist: region contents statistics, anchored placements, template resolution (unknown templates named), duplicate SCID detection across every family, quest references from dialogue, decal texture resolution, stitch health, and more. Play ▶ runs the blocking subset automatically.
- 📸 Baseline / Diff — snapshot the region at any moment, then Diff lists per family what was added / removed / moved since (plus the terrain node delta). "What did this session actually change?" before you save or ship.
- Dependencies — everything the region reaches for: every distinct template and decal texture with resolution status (unresolved ones flagged), audio tracks, quests, and your custom-asset folder.
Any multi-selection can be saved as a prefab — a named, reusable group (campfire + logs + light + trigger…):
- Ctrl+click the pieces, type a name on the Selection page, 💾 Save prefab.
- Prefabs live per-user (
%APPDATA%\SiegeSmith\prefabs), so they work across regions and maps. - Place one from the Custom tab: every piece lands centered on the selected node with fresh ids, trigger rows intact, already grouped — drag any member to position the whole thing. One undo removes it.
Set an assets folder first — it mirrors tank layout and bundles into every map you pack.
- Import mesh (OBJ / glTF) → .asp — converts a modern model to a DS1 mesh (axis-corrected), verified against the engine reader, placeable immediately.
- Import texture (PNG/JPG…) → .raw — converts any image to DS1's texture format (power-of-two, full mip chain), verified by the engine reader. Usable by decals, custom terrain, and templates.
- Import audio (WAV / MP3) — WAV (engine-verified PCM) for sound cues; MP3 for mood music tracks.
- Custom templates — the guided creator specializes a shipped template: pick weapon / armor / monster / NPC, name it, set the stats; the base supplies mesh, animations, sounds, and AI. Syntax-checked before writing; monsters/NPCs with a resolvable base appear in the Objects palette immediately, and the engine loads them from the packed map.
- Custom .sno tiles — author a flat terrain tile with your own texture, with generated collision and pathfinding data.
- Prefabs shelf — see above.
- Validate — run the checklist first; it names exactly what to fix.
-
Test terrain ▶ — packs a
.dsmapand launches the SiegeFX engine on the region's terrain (works from the first node). - Play ▶ — packs a playable map: start position, seed player, everything you authored — and launches the engine so you can walk it as a PC, fight your monsters, talk to your NPC, and watch your journal fill in.
- ⟲ Sync game — while a Test/Play session is running: one click closes it, repacks the region with your latest edits, and relaunches the same mode. The edit→see loop is a single button.
-
Mod identity (Map tab) — author/version/description write a
siegesmith_mod.txtmanifest into the packed tank, so a distributed map says what it is and who made it. - The status bar names the packed
.dsmappath after every launch — that file is your distributable map. For classic folder-mods, use the studio's Build Tank from Folder / Build & Install instead.
Stitch multiple regions into one continuous world: import a sibling region, pair free doors across the boundary, and the engine walks the player from one region to the next. Each region keeps its own files; stitches record the door pairs.