-
Notifications
You must be signed in to change notification settings - Fork 1
SiegeSmith World Builder Guide
This is the reference manual for the SiegeSmith World Builder: every panel, every control, what it writes, and how to use it. In a hurry? How do I…? answers the common questions in one line each. For the guided tour — building a playable game from nothing — read Making a Game from Scratch; for the main window (tank browsing, viewers, mod packaging) see the Studio Guide.
Open it from the main window: World → Open World Builder… (non-modal — keep it open next to the Tank Explorer). Press F1 inside the World Builder at any time for the hotkey cheat sheet. The status bar narrates every action — when in doubt, read the bottom line.
Contents: Layout · Camera · Number fields · Terrain · Objects · Multi-select · Effects · Lights · Triggers & commands · Dialogue · Quests · Outliner & overlays · Graph · Undo & QoL · Region tab · Map tab · World tab · Run & ship · Custom tab
| Area | What lives there |
|---|---|
| Toolbar (top) | Left: Textured/Wireframe, FX live/static, Reset view, Ortho/Perspective, fly Speed, 15° rot snap, Undo/Redo. Right: search everything (Ctrl+F), Save region, Validate, Test terrain ▶, Play ▶, ⟲ Sync game. |
| Palette (left) | Tabs: Nodes · Objects · Effects · Lights · Logic · Custom. |
| Viewport (center) | The live preview — it 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 page carries a "→ writes file" hint naming the gas file it authors. |
| Bottom tabs | Region (load/save, mod identity, mood & music, atmosphere) · Graph (logic graph views) · World (multi-region stitching) · Map (map name, quests, validation). |
| Status bar | Explains every action, names packed file paths, and coaches you when something can't happen yet. |
- Left-drag orbit · right-drag pan · middle-drag spin · wheel zoom. Deep zoom is allowed — you can dive close enough to inspect a single prop, and clicking stays accurate all the way in.
- W A S D fly, Q / E down/up — Shift = 3× fast, Ctrl = slow; the toolbar Speed combo (0.25×–4×) scales all of it. Flying works while the cursor is over the viewport and you're not typing.
- F — focus: jump the camera to the selection (object, marker, or node).
- Ctrl+1…4 save camera bookmarks, 1…4 recall them (pan, angles, and zoom round-trip).
- Orthographic / Perspective toggle — picking uses the same projection, so clicks stay accurate in both.
- The axis gizmo in the viewport corner is clickable — snap the view to an axis. Reset view reframes everything.
- Left-click priority: view-gizmo → active brush (paint/scatter/patrol) → grab a piece → select the node under the cursor → orbit.
Every numeric Inspector field is scrubbable. The ⇔ cursor over an unfocused box means: drag horizontally to change the value live — the viewport follows the drag. A plain click focuses the box for typing, as usual.
- Shift while dragging = fine steps (×0.1) · Ctrl = coarse (×10).
- Each field has a sensible per-pixel step and clamp (yaw scrubs in half-degrees, emitter count in whole numbers, scale can't reach zero).
- A whole drag is one undo step, no matter how far you scrub.
- Scrubbing the fog fields with the audition on is a live fog slider.
DS1 terrain is a graph of siege nodes — reusable meshes joined door-to-door. The data contains no world coordinates; a node's position derives from walking the door graph from the anchor node. Terrain writes terrain_nodes/nodes.gas.
- Search filters the install's full SNO catalogue. The ★ button stars the selection into a persistent FAVORITES section (kept between sessions); everything you place lands in RECENT automatically.
- A thumbnail of the selected mesh renders under the list.
- Place as anchor — the first node; everything chains from it.
- Connect to selected node — the precise way: pick the new mesh's door in DOORS ON PALETTE MESH, pick a free door on the selected node (Inspector's node page), Connect. Use it when the exact pairing matters.
- 🖌 Paint terrain — the fast way: tick it, then click or click-drag the terrain. Each step chains the selected mesh onto the free door nearest the cursor — the joining door is auto-picked by door-width match, 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 a mesh from the palette into the viewport: on an empty region it becomes the anchor; afterwards each drop paints one node at the drop point.
- Link existing doors (Inspector, node page) — connect two already-placed nodes' free doors to close a loop; no geometry is added, only the adjacency.
- Replace mesh on selected node — swaps the mesh in place: guid, door edges, texture set, and everything anchored to the node survive. Requires matching door ids; the status bar names the offenders when they don't.
- Texture set (Inspector, node page) — re-skin the node with any set used in the region; the preview updates live.
- Delete node removes it and severs its door edges.
- The Bounds overlay draws every node's box — the fastest way to spot overlaps and gaps.
- The Mode button flips between Props (inert scenery →
objects/non_interactive.gas) and Actors (NPCs/monsters →objects/actor.gas; they animate, fight, and die). -
Search + a tag filter (template-name families like
tree,barrel,krug— derived from your install, so mods included) + ★ favorites + recents + a model thumbnail narrow thousands of templates to the one you want.
- Place on selected node drops the template at the node's center.
- Drag-drop a template into the viewport — it lands exactly where you drop it and becomes the selection.
- 🌿 Scatter — the brush: tick it, set × (copies per click), r (radius in world units — the same ground area at any zoom), and gap (minimum spacing, with collision avoidance against existing placements and the batch itself), optionally Random facing. Click or drag to sprinkle grass, rocks, forests, crowds, monster packs. One click = one undo.
- Click selects (a bright base puck marks the selected object — the software renderer can't outline a textured mesh, so the puck is the indicator and an extra grab handle). Drag slides along the node's floor; Shift-drag rotates (toolbar 15° rot snap for exact angles).
- The Inspector's object page: editable node-local X/Y/Z and Yaw° (scrub or type), plus a read-only world-space line naming the anchor node.
- Ctrl+D duplicate · Del delete · Ctrl+C / Ctrl+V copy/paste — pasting with a different node selected recreates the piece there (cross-region moves).
These write into this one placement's block — the template stays untouched, and the engine honors them at spawn:
- Life — hit points for this placement only. One krug becomes a 500-life boss; its species stays stock.
- Scale × — visual size multiplier (retail 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, additive to the template's own loot roll.
Select a placed actor → tick 🚶 Draw patrol route → click waypoints on the terrain in order → untick. The loop closes (DS1 patrols cycle), the placement gets [mind] initial_command, and the actor walks the route in Play — the exact retail mechanism. The blue ribbons in the viewport are the route (every next_scid chain draws one). The whole route is one undo.
- Ctrl+click pieces — objects, emitters, decals, point lights, triggers, commands, any mix — to build a set; every member lights up. Click empty terrain to deselect.
- Drag any member → the whole group moves. Shift-drag → the group rotates about its center (objects also spin individually; 15° snap applies).
- Ctrl+D duplicates the entire set (the copies become the new selection); Del deletes it — each as one undo step.
- The Inspector's Selection page: Align X / Align Y (move members to the group's average — straightens a row), Distribute X / Distribute Y (space evenly; the two outermost stay put), Set template from palette (batch-swap every selected placement's template in one undo), and 💾 Save prefab (name it first — see the Custom tab).
The tab's legend maps marker colors: fire orange · smoke grey · trigger teal · command blue · decal amber · light yellow — selected = brighter. Markers are the grab handles for things with no mesh of their own.
-
Add fire emitter / Add smoke emitter →
objects/emitter.gas, playable in SiegeFX. In the preview they render as live soft particles (fire = glowing core in a soft halo, ember-shading with age; smoke = expanding grey puffs). The toolbar FX: live/static toggle pauses the animation on huge regions; while live, the emitter's cube shrinks to a small base handle.- Inspector fields: Smoke plume checkbox (fire ⇄ smoke), Count (particles per burst, 1–500), Size, Fade (particle lifetime in seconds), Growth (expansion as particles rise). All scrubbable with the preview following live.
- Add ground decal → a textured quad projected on the surface (scorch marks, signs, carpets). Give it a texture name and it previews as the real art — clicking the art selects it. H/V extents size it; a marker cube stands in only while the texture doesn't resolve.
-
Sound emitter — type a sound-emitter template name and Add →
objects/sound.gas. Retail DS1 plays these; the SiegeFX test player currently doesn't (the tooltip says so too).
- Add sun (directional) — shades the whole preview live and reaches the engine renderer. Inspector: color (hex), intensity, and a world direction X/Y/Z (all scrubbable).
- Add point light on selected node — a node-anchored marker you drag like anything else; color, intensity, and inner/outer radii ship to the engine. The Radii overlay draws each point light's reach as ground discs in the light's own color.
- Lights write
lights/lights.gas.
A trigger is a condition→action machine anchored to a node (drag its teal marker to position it; the Volumes overlay draws its activation box, sized from its bounding-box condition).
Inspector structure:
-
Template — must resolve (e.g.
trigger_generic); a typo silently never fires, and validation checks it. -
Rows — add/delete; each row is an independent condition-set → action-set. Row flags: single_shot (fires once), start_active (false = dormant until a
we_trigger_activatemessage arms it), flip_flop (parsed, author-only in SiegeFX), and an optional occupants_group. -
Conditions (ANDed) — pick a verb, type the args, optionally when_false, a group, and a delay (seconds). Verbs:
receive_world_message·actor_within_sphere·party_member_within_sphere·go_within_sphere·party_member_within_bounding_box·party_member_within_node·party_member_entered_trigger_group·party_member_left_trigger_group. -
Actions (sequential) — verb + args + group/delay. Verbs:
send_world_message·mood_change·set_interest_radius·fade_node/fade_nodes/fade_nodes_global·change_quest_state·call_sfx_script. - Args are written exactly as gas expects — e.g. condition
party_member_within_bounding_boxargs2,2,2, actionsend_world_messageargs"we_req_activate",0x04000002.
AI orders and cinematic steps. Kinds: cmd_ai_patrol, cmd_ai_dojob, cmd_ai_t_attack_object, cmd_animation_command, cmd_enter_nis, cmd_camera_command, cmd_camera_waypoint, cmd_leave_nis. Fields: next_scid (chains the next step — chains render as blue ribbons in the viewport), target1/target2, client_scid (the actor the command drives), duration, and an optional order string. The patrol editor (§5) authors cmd_ai_patrol chains for you.
Add conversation (Logic tab) → conversations/conversations.gas. In the Inspector:
-
Key —
conversation_prefix is added automatically. - Bind to selected placed actor — wires the conversation into the actor selected in the Outliner's Objects group; the engine plays it on talk.
-
Lines — add/delete; each line has order (the sequence), screen text, an optional voice sample, a choice kind (blank ·
more·potential_member), quest_dialog and nis flags, and activate_quest — starting a quest when the line is spoken. The activate_quest box suggests the shipped catalog's keys plus this map's own quests.
On the Map tab: Chapter title and chapter intro (the journal's story panel), then Add quest entries. Select a quest (list or Outliner) to edit its key, screen name, and description in the Inspector. Quests write the retail quests/quests.gas shape into the map, the engine merges them, and your journal shows in-game — dialogue starts them via activate_quest, triggers advance them via change_quest_state. Validation confirms every referenced key resolves.
- The Outliner is one tree over everything placed — Nodes, Objects, Emitters, Decals, Lights, Triggers, Commands, Conversations, Quests, Nav flags — with color dots matching the viewport markers. Clicking an item selects it everywhere.
- Visibility eyes on the spatial families (objects, emitters, decals, lights, triggers, commands): hidden families neither render nor pick — hide the logic layer while you decorate.
- Overlay checkboxes above the tree: Volumes (trigger activation boxes) · Radii (light reach discs) · Nav (green cubes on nav-flagged nodes) · Bounds (node bounding boxes). All translucent, never clickable, never affect the camera framing.
-
Nav flags (added from the Map tab) write
logical_flags.gas— they toggle passability of an already-walkable node grouping (the walkable geometry itself is baked into the SNO art).
Read-the-wiring views over the real data — the editors stay the source of truth, and clicking any box selects that piece in the Inspector. Pick a view, ⟳ Refresh rebuilds from the live region:
-
Trigger flow — triggers and commands as boxes; every SCID an action or command field references becomes a labeled arrow (
send_world_message,next,target,client). Referenced ids that nothing owns appear as grey "(unknown scid)" stubs — dangling wiring is visible instead of silently dead. -
Dialogue — each conversation's ordered line chain, with
activatesarrows into shared quest boxes. - Quest flow — the chapter fanning out to its quests and every dialogue line that activates one.
- Ctrl+Z / Ctrl+Y cover everything: terrain, placements, effects, lights, trigger rows/conditions/actions, dialogue lines, quests, nav flags, brush strokes, prefab placements, group operations, scrub drags — each gesture is one step.
-
Autosave packs the whole region (the same pipeline as Play) into
%APPDATA%\SiegeSmith\autosaveevery 3 minutes when something changed. Crash recovery = load the newest autosave. - Ctrl+F — search everything: one box over every family including dialogue text and quest names; picking a result selects it and jumps the camera there.
- F1 — the hotkey cheat sheet overlay.
- Load a region from the game — pick any shipped region by name (SiegeSmith knows the install) and it opens in the editor; …or open a nodes.gas file browses anywhere. Save nodes.gas… writes the terrain graph to disk.
-
Mod identity — author, version, one-line description → written into every packed map as
siegesmith_mod.txt, so a distributed file says what it is and who made it. - Mood & music — the interior flag (reverb) and the ambient / standard / battle tracks. Battle music switches in when hostiles engage; standard resumes after.
- Atmosphere — Fog (near → far meters + hex color), Rain (drops/second + Lightning), Snow (flakes/second), Wind (m/s + 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 — scrub the distances and watch it move.
-
Startable map — the map name (a
map_prefix is added automatically) and region name; these become the tank name and folder tree. Add nav flag for selected node lives here too. - Quests — the journal editor (§11).
- Validation checklist — filled by Validate (toolbar) and by Play's automatic pre-flight: contents statistics, anchored placements, template resolution (offenders named), duplicate SCIDs across all families, dialogue quest references, decal texture resolution, stitch health, and more. Green = fine, red names exactly what to fix.
- 📸 Baseline / Diff — snapshot the region at any moment; Diff then lists per family what was added / removed / moved since, plus the terrain node delta. "What did this session change?" before you save or ship.
- Dependencies — everything the region reaches for: every distinct template and decal texture with resolution status (unresolved flagged), audio tracks, quests, the custom-asset folder.
Multi-region worlds: each region keeps its own files; stitches record door pairs across region boundaries, and the engine walks the player from one region into the next.
- The world mini-map draws every region as a box (accent border = the primary region or an unreachable one) with stitch lines between them — dashed red = dangling (one side missing). The diagnostics readout above it explains problems.
- Import sibling region (nodes.gas)… adds a neighbour to the world; the sibling list shows each with its free-door count.
- To connect: pick a free door on this region (left list) and a free door on the sibling (right list), then Create reciprocal stitch. Existing stitches are listed; Delete selected stitch unpicks one.
- Validation includes stitch health, and packed maps carry
editor/stitch_helper.gasso the engine's world layout composes the regions.
- Validate — run the checklist first; it names exactly what to fix (§16).
-
Test terrain ▶ — packs a
.dsmapand launches the SiegeFX engine on the terrain alone (works from the first node). - Play ▶ — packs the playable map — start position, seed player, everything you authored — and launches the engine: walk it, fight your monsters, talk to your NPC, watch the journal fill.
- ⟲ Sync game — while a Test/Play session runs, one click closes it, repacks the region with your current state, and relaunches the same mode. The edit→see loop is a single button.
- The status bar names the packed
.dsmappath after every launch — that self-contained file (terrain, placements, logic, dialogue, quests, moods, your custom art/audio/templates, the identity manifest) is your distributable game. Players run it with the SiegeFX engine; for retail-game folder-mods use the studio's Build Tank flow instead (Studio Guide).
Set an assets folder first (Open jumps to it). It mirrors tank layout and bundles into every map you pack — the reason a SiegeSmith map can be an entirely new game.
-
Import mesh (OBJ / glTF) → .asp — converts a modern static model to a DS1 mesh (Y-up→Z-up corrected), verifies it against the engine reader, and drops it in
art/meshes. - Import texture (PNG / JPG…) → .raw — any image becomes a DS1 texture (BGRA, power-of-two ≤512, full mip chain), engine-verified. Used by decals, custom tiles, and templates.
-
Import audio (WAV / MP3) — WAV (engine-verified PCM) →
sound/for cues; MP3 →music/for the mood tracks. -
Prefabs — the shelf for groups saved from the Selection page. Stored per-user (
%APPDATA%\SiegeSmith\prefabs), so they work across regions and maps. Place prefab on selected node re-anchors every piece there with fresh ids — trigger rows intact — and hands the copies back as the multi-selection, ready to drag as one. 🗑 deletes from the library. - Custom templates — the guided creator specializes a shipped template: pick Weapon / Armor / Monster / NPC, name it, set the identity and stats (damage, defense, life); 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 tile — author a terrain tile of your own: Flat or Ramp, size, subdivisions, rise, walkable flag, your texture — with generated collision and pathfinding data, placeable like any shipped tile.