Narrative ops

Switching a server between rolling combat ops objectives and authored narrative content.

What this is

A server running ATG Scenario is normally in combat ops: objectives appear continuously and the faction score moves as they are completed. That state looks after itself, which is what a server with nobody watching should be doing.

A narrative op is the other state. A Game Master switches the server over, the objectives are cleared, and content you have authored in advance — characters, vehicles, a scene — appears in their place. Switching back removes it again.

The point of the design is that authored content is absent during combat ops. Players cannot wander into next week’s story, and the ground it occupies stays available for objectives in the meantime.

Dev documentation. This is on a development branch. It has been exercised in a Workbench session but not on a live server with connected clients, and none of it has been through a multiplayer test.

What you need

ATG Commands, loaded before ATG Scenario in your mod list. That is what provides the chat commands below. Without it the mode switch still works, but has no chat interface and can only be left in whichever mode the config sets.

Commands

CommandWho can run itWhat it does
/atg statusany server roleCurrent mode, score, and how much authored content is loaded
/atg op <minutes>session adminSchedule a narrative op and announce it to players
/atg op nowsession adminSwitch immediately
/atg op cancelsession adminCancel a scheduled op
/atg combat [rise] [fall]session adminReturn to combat ops

Scheduling announces the op to everyone and adds reminders at 30 and 10 minutes where the lead time allows. Below ten minutes there is no room for a reminder, so the single announcement tells players to return to base now. The confirmation you get back states which of those actually happened, so you don’t have to work it out from the number you typed.

Controlling the tier ladder

/atg combat takes the tier ladder’s freedom as arguments, because combat ops runs unsupervised. Left uncapped, a faction comes back from a quiet week several tiers down, or climbs several while nobody was watching — either way you have lost control of the story.

So the balance still moves freely, but the tier is confined to a band anchored to whichever tier the faction held when combat ops began:

  • /atg combat — locked, and the safe default
  • /atg combat rise — may climb one rung
  • /atg combat fall — may drop one rung
  • /atg combat rise fall — either

At most one rung of movement between narrative ops, and only in the directions you allowed. The band is lifted during a narrative op — what a story beat is worth is your decision, and the band exists to bound the stretch nobody is supervising.

The mode is not saved. A server always restarts into combat ops, because a restart mid-op would otherwise come back half-loaded with no Game Master present.

Authoring content for a narrative op

1. Place a root

Authored content lives beneath an ATG_Narrative prefab, found under Prefabs/ScenarioFramework/. Place it in the world wherever you like.

One root per area of the map is the tidy arrangement, because content records its position relative to its root — a root placed far from its content still works, it is just harder to read. All roots come and go together, so several roots is a way of organising, not a way of switching parts of the map independently.

2. Convert your content into it

Build your scene as ordinary world entities first and get it looking right. Then select it and run Plugins → ATG → Convert to narrative.

Each selected entity becomes a slot beneath the root, named after whatever it spawns, and the original is removed. Revert from narrative does the reverse, turning a slot back into an ordinary entity.

The whole conversion is a single undo step, so a run that goes wrong is one Ctrl+Z.

What the converter will refuse

It names the offending entity in the log rather than failing the whole run:

“is not a prefab instance” — a slot spawns a prefab, so it cannot take a composition you assembled in place. Save it as a prefab first, then convert that.

“has World Editor override(s)” — you changed something on this particular copy, and those changes live on the copy rather than in the prefab. Because the slot respawns the prefab cleanly, the changes would be lost. Either apply them to the prefab itself, or make a variant prefab that carries them and convert that instead.

Moving, rotating and scaling are not treated as overrides — placing something is a transform change, and the slot records the position itself.

Spawn points that belong to one mode

Anything that must exist during combat ops cannot be authored as narrative content, because narrative content does not exist until a Game Master calls an op — and combat ops is the state a server starts in.

For spawn points there is a component instead. Add ATG_ScenarioModeSpawnPoint to a spawn point and choose which mode it is enabled in; it is disabled in the other. The spawn point itself is always present in the world — only its availability changes.

That also means a server where this mod is switched off is left with a working spawn point rather than a missing one.

Configuration

SettingDefaultWhat it does
m_bModeSwitchEnabledtrueMaster switch. Off leaves the server permanently in combat ops, and registers none of the chat commands it would only refuse.
m_eDefaultTierMovementLOCKEDWhat the tier ladder may do after a restart, before anyone has said otherwise.

Both are set the same way as everything else — see Configuration. In the JSON file, booleans are written true and false; enums are written by name.

If a switch doesn’t do what you expected

/atg status reports how many roots are loaded, which is the quickest way to tell “the switch didn’t fire” from “the switch fired and there is nothing to spawn”.

The server log reports each switch, and names any root that failed to bring its content up:

[ATG_Scenario] 8 narrative root(s) registered
[ATG_Scenario] Narrative: brought in 8 of 8 root(s)
[ATG_Scenario] Narrative: despawned 8 of 8 root(s)

Those messages appear a few seconds after the switch rather than instantly, which is normal — content is spawned in stages.

If a switch reports success but nothing appears, the thing to check is whether the slots are actually pointing at a prefab. An empty slot still reports a healthy spawn, so it looks converted from every angle except the map.