MissionForge

Status: new, in development. Read directly from MissionForge.lua (read in full). For the design story — why it departs from ForgeCam the way it does, and two concrete bugs found and fixed along the way — see the MissionForge deep dive.

MissionForge is an in-game, walk-around authoring tool: place units, objectives, support call-ins, triggers, and AI orders directly in the world, then export a paste-ready dump for the web tool to turn into a finished Contract.Register({...}). It runs in the live, unpaused world — there’s no camera to fly, just your own character walking around.

Controls

Input Action
F7 Toggle MissionForge on/off
Walk around The drop point is always your character’s feet (shown by a ring + floating marker)
Up / Down Move the menu highlight
Left / Right Back out of / open into a branch (a faction, OBJECTIVES, SUPPORT/TRIGGERS, AI ORDERS)
P or Enter Place the current brush at your feet
Backspace Undo the last placement (a whole squad at once, if the last thing placed was one)
Delete Remove the placement nearest to you
, / . Shrink / grow the current objective/zone radius (hold to keep changing it)
T Cycle the active group tag (A, B, C, …)
End Export everything placed so far to lua_loader_printf.log

There’s deliberately no “clear everything” key — undo one at a time with Backspace instead, so a stray keypress can’t erase real progress.

The catalog

Highlighting a leaf in the menu sets it as the active brush; pressing P/Enter drops it. The menu is organized as:

  • One branch per faction (Guerilla / Allied / China / OC / Pirate / VZ), each with Infantry / Vehicles / Helicopters / Boats (and Emplacements for Allied) sub-branches, plus a SQUADS branch — preset unit compositions (Fire Team, Rifle Squad, Armor Platoon, up to a 24-unit Battle Group) that drop as a whole grid formation in one placement, sharing one undo step.
  • PROPS / MISC — cover objects and a couple of stray props.
  • OBJECTIVES — one entry per objective type (Destroy, Reach, Defend, Collect, Escort, Hold, Interact, Verify, Extract, Race Checkpoint, Survive, Chase), plus Player Spawn for the teleport-on-accept point.
  • SUPPORT / TRIGGERS — one entry per support effect type (artillery, airstrike flyby, bombing run, heli wave, reinforcement, music cue, explosion/VFX, scripted damage, voice-over) plus a generic Trigger Zone.
  • AI ORDERS (per group) — Move To, Patrol Point (drop several to build a route), Defend Area, Attack / Hunt, Hold Ground, Face Point — these command whichever group is currently active (cycle it with T first).
  • EXPORT PLACEMENTS — dumps everything to the log (same as pressing End).

Group tags

Units, objectives, support, triggers, and AI orders placed while the same group letter is active all share that tag. This is what lets the web tool auto-wire things on import — a trigger and a support call-in placed under the same group arrive already connected, and an AI order placed under a group commands whichever units share that same tag. Bump the group (T) when starting a new cluster; leave it alone to keep adding to the current one.

What gets placed vs. what gets recorded

Nothing MissionForge places is the real thing — every placement is an inert marker (a faction supply crate for infantry, an empty vehicle for vehicles, the bare prop for props, or an invisible zone anchor for objectives/support/triggers/orders). The real template name is recorded separately and is what actually ends up in the export and the generated contract. See the deep dive for why.

Exporting

Press End (or select EXPORT PLACEMENTS). A MISSIONFORGE_EXPORT = { ... } table prints to lua_loader_printf.log — copy the whole block (from MISSIONFORGE_EXPORT = { to the matching closing }) and paste it into the web tool’s first step.

Where to go next


Back to top

This site uses Just the Docs, a documentation theme for Jekyll.