What STW Stronghold adds
STW Stronghold analyzes a selected building or location for viable interior garrison positions, elevated firing positions, and patrol routes. It generates faction-aligned AI that is owned by the stronghold, so the whole encounter can be managed through its marker and cleaned up safely.
Garrison
Populate eligible buildings with a limited number of faction soldiers, avoiding unsuitable specialist roles for ordinary garrison slots.
Defensive patrols
Create nearby and surrounding patrol groups which cycle through inner and outer routes around the defended area.
Lifecycle control
Use a time to live, player protection, optional lifetime refresh on entry, and soldier-loss cleanup to keep active encounters alive without leaving AI behind forever.
soldierLossRemovalPercentage of 85, it removes the stronghold and its remaining STW-owned AI. Set the value from 1 to 100 in STWStrongholdConfig.json; only generated soldiers count.Game Master: create and manage a stronghold
Quick workflow
- Open Game Master and use the STW Stronghold placement/context workflow to create a draft fist marker at the building or location to defend.
- Open the draft's STW Generate Stronghold dialog. Select a faction from the available choices.
- Set the desired garrison, patrol, shooter, area, lifetime, and room-guard values.
- Select GENERATE. The authoritative server analyzes the area and creates the stronghold only if it finds eligible positions.
- Use the resulting fist marker for management. Deleting it removes STW-owned AI and the marker, but preserves any entity a player controls.
Dialog settings
| Control | What it changes |
|---|---|
| Faction | The loaded, configured faction used for generated AI. |
| Max buildings / units per building | How many suitable buildings are occupied and each building's garrison density. |
| Room guards (%) | The percentage of each building's interior garrison assigned to hold its room/post. Room guards are selected from the highest available interior posts first. |
| Room guard radius (m) | How far a room guard may move autonomously from its defend anchor while fighting. A tight radius keeps defenders from chasing attackers out of the building. |
| Nearby / surrounding patrols | Patrol groups on inner and outer routes around the defended location. |
| Roof / high-position shooters | Whether elevated positions are used when the area supports them. |
| Max shooters / total units | Caps elevated defenders and the total generated force. |
| Covering radius | The area used for analysis and patrol generation. |
| Time to live | When normal cleanup can begin; player-protection settings can defer or refresh expiry. |
Requests are validated: 1–10 buildings, 1–12 units per building, 0–8 nearby/surrounding patrols, 0–12 shooters, 0–100% room guards, a 1–30 m room-guard radius, 1–80 total units, a 50–1000 m radius, and a 0.25–168 hour lifetime. The server-wide total-unit cap can reduce a request further.
Supported factions
The default configuration supports US, USSR, FIA, RHS_USAF, and RHS_AFRF. A faction appears in the Game Master selector only when its key is in supportedFactionKeys and that faction is loaded in the active scenario. RHS selections therefore appear only when their content is present.
PLASTICBANDIT when the Plastic Bandits faction mod is loaded. It uses explicit vetted pools for garrison soldiers and high-position shooters, so the supplied RPG asset is not selected. It is not in the default allow-list: add it to supportedFactionKeys in STWStrongholdConfig.json and restart the server.For other configured factions, Stronghold selects combat-capable characters from the faction's loaded character catalog. Regular garrisons exclude AT/RPG, engineer, medic, grenadier, pilot, driver, and crew roles. Elevated shooters preferentially use marksman, sniper, DMR, or sharpshooter roles.
Server setup
- Install and enable STW Stronghold, then start the scenario once on the authoritative server.
- The core configuration is created at
$profile:STW/Stronghold/STWStrongholdConfig.json. - Stop the server before changing JSON. Restart afterwards; invalid values are normalized and saved.
- Automatic spawning is enabled by default; set
enabledtofalseinSTWAutoStrongholdConfig.jsonif you want a manual-only server.
Using STWStrongholdConfig.json
This is the core policy file for every manually generated stronghold. It is created automatically at $profile:STW/Stronghold/STWStrongholdConfig.json. Stop the server before editing it. The server validates the configuration during startup and writes the validated result back.
| Setting | Default | Practical use |
|---|---|---|
enabled | true | Set false to disable the core Stronghold system without uninstalling the mod. |
maximumActiveStrongholds | 3 | Cap for all active strongholds. Valid range: 1–32. |
maximumTotalGeneratedUnits | 45 | Server-side ceiling for one stronghold request. Game Masters can choose fewer units but cannot exceed it. |
defaultPlayerProtectionRadiusMeters | 750 m | Default player-protection distance used by lifecycle behavior. Minimum: 100 m. |
defaultMarkerZoomThreshold | 0 | Default marker zoom filter. Zero means markers are not hidden by zoom; increase it for a closer-view-only marker. |
soldierLossRemovalPercentage | 85 | Removes a stronghold when this percentage of its originally generated soldiers has been lost. The server checks every five minutes; valid range: 1–100. Only soldiers count. |
guardedRoomDefenderPercentage | 50 | Default room-guard percentage for new GM dialogs and automatic strongholds. GMs can override it per stronghold; valid range: 0–100. |
guardedRoomDefenderAutonomousRadiusMeters | 8 m | Default autonomous movement radius for room guards in new GM dialogs and automatic strongholds. GMs can override it per stronghold; valid range: 1–30 m. |
defaultDeferCleanupWhilePlayersNearby | true | Defers normal expiry cleanup while players are inside the protected area. |
defaultRefreshTimeToLiveOnPlayerEntry | true | Refreshes the lifetime when a player enters, allowing an active encounter to persist. |
defaultPreviewFactionKey | USSR | Initial Game Master draft selection. It does not make an unloaded faction selectable. |
supportedFactionKeys | US, USSR, FIA, RHS_USAF, RHS_AFRF | The faction allow-list. Add PLASTICBANDIT when its mod is loaded; remove any key you do not want Game Masters to use. |
debugLogging | false | Use only for diagnosis, then turn it off for normal operation. |
Enable PLASTICBANDIT
Add the faction key to the existing JSON array:
"supportedFactionKeys": ["US", "USSR", "FIA", "RHS_USAF", "RHS_AFRF", "PLASTICBANDIT"]
After restart, PLASTICBANDIT appears only if the scenario has actually loaded that faction. Adding the key does not load a missing mod.
Current configuration reference
STWStrongholdConfig.json
| Setting | Default | Meaning |
|---|---|---|
enabledmaximumActiveStrongholdsmaximumTotalGeneratedUnits | true / 3 / 45 | Core switch and manual limits. |
defaultPlayerProtectionRadiusMetersdefaultMarkerZoomThresholdsoldierLossRemovalPercentageguardedRoomDefenderPercentageguardedRoomDefenderAutonomousRadiusMeters | 750 m / 0 / 85 / 50 / 8 m | Lifecycle and defender defaults. |
defaultDeferCleanupWhilePlayersNearbydefaultRefreshTimeToLiveOnPlayerEntrydefaultPreviewFactionKeysupportedFactionKeysdebugLogging | true / true / USSR / US, USSR, FIA, RHS_USAF, RHS_AFRF / false | Player policy, GM factions, and diagnostics. |
deployAPMinesdeployATMinesperimeterAPMineQuotaperimeterATMineQuotaperimeterMineInnerExclusionRadiusMeterspreservePerimeterMinesOnDefeat | true / true / 12 / 4 / 35 m / false | Perimeter mine deployment. Enable preservation to keep a defeated stronghold's perimeter mines. |
STWAutoStrongholdConfig.json
| Setting | Default | Meaning |
|---|---|---|
enabledautomaticTimeToLiveHoursstrongholdsPerEnabledFactionmaximumAutomaticStrongholdsmaximumCombinedStrongholdsmaximumAutomaticAIUnitsfiniteAutomaticAIUnitsCapminimumAutomaticGarrisonUnits | true / 4 / 1 / 10 / 10 / 80 / 150 / 4 | Automatic spawning and budget limits. |
playerSpawnExclusionRadiusMetersautomaticStrongholdSeparationMetersrecentLocationExclusionRadiusMetersrecentLocationExclusionHoursminimumCandidateFootprintSquareMetersminimumCandidateHeightMeterscandidateCooldownHours | 1200 m / 1000 m / 1500 m / 6 / 30 m² / 4 m / 24 | Location safety and candidate requirements. |
initialSpawnDelayMinimumMinutesinitialSpawnDelayMaximumMinutesminimumCandidatesBeforeInitialSpawnminimumScanProgressBeforeInitialSpawnPercentreplacementDelayMinimumHoursreplacementDelayMaximumHoursdestroyedStrongholdReplacementMinimumMinutesdestroyedStrongholdReplacementMaximumMinutes | 5 / 10 / 12 / 10 / 2 / 6 / 15 / 45 | Startup and replacement pacing. |
fullScanIntervalHoursscanTileSizeMetersscanBatchIntervalSecondsscanTilesPerBatchdifficultyPreset | 6 / 500 m / 5 / 1 / STANDARD | Scanner pacing and difficulty choice. |
lightMinimumBuildings/lightMaximumBuildingsstandardMinimumBuildings/standardMaximumBuildingsheavyMinimumBuildings/heavyMaximumBuildings | 1–2 / 1–3 / 2–5 | Built-in preset building ranges. |
customMaximumUnitsPerBuildingcustomMaximumBuildingscustomMaximumNearbyPatrolscustomMaximumSurroundingPatrolscustomMaximumShooterscustomMaximumTotalUnits | 7 / 1 / 2 / 1 / 2 / 20 | Exact values used by CUSTOM. |
showGameMasterDebugActionsdebugLoggingenabledFactionKeyslocationBlacklistTokenslocationWhitelistTokensmilitaryWeightairfieldWeightcommandWeightdefenceWeightlogisticsWeightindustrialWeighttownWeightvillageWeight | false / false / US, USSR / [] / [] / 100 / 95 / 90 / 85 / 75 / 60 / 50 / 40 | Diagnostics, filters, factions, and candidate weights. |
Automatic strongholds
Automatic spawning is separate from Game Master drafts and is enabled by default. Its file is $profile:STW/Stronghold/STWAutoStrongholdConfig.json. The server scans the map incrementally for substantial destructible buildings, ranks the safe candidates, then makes strongholds for configured loaded factions.
Schedule and safeguards
| Setting | Default | What it does |
|---|---|---|
enabled | true | Turns the automatic scheduler on or off. Set false for a Game-Master-only server. |
initialSpawnDelayMinimumMinutesinitialSpawnDelayMaximumMinutes | 15 / 45 | Random delay before the first attempt. The full candidate scan must finish before normal automatic placement begins. |
replacementDelayMinimumHoursreplacementDelayMaximumHours | 2 / 6 | Random wait after a completed attempt before the next scheduled attempt. |
destroyedStrongholdReplacementMinimumMinutesdestroyedStrongholdReplacementMaximumMinutes | 15 / 45 | Random delay before the next automatic scheduler attempt after an automatic stronghold is defeated through its soldier-loss threshold. It schedules an attempt, not a guaranteed spawn; valid range: 0–240 minutes. |
automaticTimeToLiveHours | 4 | Lifetime for automatic strongholds. The core player-entry refresh policy still applies when enabled. |
strongholdsPerEnabledFaction | 1 | Target number for each faction in enabledFactionKeys that is loaded in the scenario. |
maximumAutomaticStrongholdsmaximumCombinedStrongholds | 10 / 10 | Caps automatic strongholds and the combined manual-plus-automatic total. |
maximumAutomaticAIUnits | 60 | Global automatic-AI budget. Use -1 to disable this safeguard; otherwise it is bounded by finiteAutomaticAIUnitsCap (150). |
minimumAutomaticGarrisonUnits | 4 | Rejects an otherwise-created automatic stronghold if too few usable interior defenders were actually generated. |
Location safety and scanning
The default safety distances are 1200 m from connected players and 1000 m from other automatic strongholds. A successfully used location is remembered for 6 hours within 1500 m, while a failed candidate cools down before another attempt. A defeat-triggered attempt still requires the scan and all normal candidate, player-distance, recent-location, faction, active-stronghold, and AI-budget checks to pass. These automatic-only checks never restrict manual Game Master strongholds.
Use scanTileSizeMeters (500 m), scanTilesPerBatch (1), scanBatchIntervalSeconds (5), and fullScanIntervalHours (6) to balance scanning speed against server load. Leave their defaults alone unless a particular terrain needs deliberate tuning.
Difficulty presets
| Preset | Default automatic request |
|---|---|
LIGHT | 1–2 buildings, 4–6 units each, 7–10 total units; no surrounding patrols. |
STANDARD | 1–3 buildings, 6–9 units each, 12–18 total units. |
HEAVY | 2–5 buildings, 10–14 units each, 25–30 total units. |
CUSTOM | Uses the exact customMaximum… values for buildings, units per building, both patrol types, shooters and total units. |
The three built-in building ranges are independently editable through lightMinimumBuildings/lightMaximumBuildings, standardMinimumBuildings/standardMaximumBuildings, and heavyMinimumBuildings/heavyMaximumBuildings. Automatic strongholds never occupy more than five buildings.
Choose the sort of places it finds
Category weights cover military, airfield, command, defence, logistics, industrial, town and village candidates. A weight of 0 disables that category. locationWhitelistTokens limits candidates to prefab names containing at least one listed token; locationBlacklistTokens excludes matching prefab names. Tokens are case-insensitive.
The normal replacementDelayMinimumHours/replacementDelayMaximumHours pacing still applies after a successful automatic creation, ordinary retries, lifetime expiry, or Game Master deletion of an automatic fist marker. Game Master-created strongholds never use the shorter defeat-replacement delay.
Keep showGameMasterDebugActions and debugLogging off during normal operation. The former exposes scheduler diagnostics to Game Masters; the latter adds useful but noisy server-log detail while testing.
Captain Sprocket community

Captain Sprocket
Arma Reforger server: STW Reforger
Community: https://discord.gg/T2AZp6GGMJ
More STW manuals: STW Online Manuals