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.
Optional patrol-vehicle content
Joint Light Tactical Vehicle (5C721177A220B42F) and HMMWV Variants (69F415A5B15EC350) are optional content sources for Stronghold jeep patrols. The vehicle catalog considers their armed variants only when creating a patrol and validates every prefab before it is used.
| Content | How it is used | Fallback |
|---|---|---|
| HMMWV Variants | Contributes the expanded armed US HMMWV/M1045/M1113/M1114/M1151/M1165 vehicle pool for RHS_USAF strongholds. | Stronghold tries the standard RHS HMMWV, Tactical Flava M1151, then the vanilla armed M1025. |
| Joint Light Tactical Vehicle | Contributes armed JLTV CROWS and OGPK variants to that same expanded RHS_USAF patrol-vehicle pool. | It moves on to the next valid vehicle candidate; no separate configuration is needed. |
Soft dependencies and optional mod support
STW Stronghold is designed to run with its vanilla content alone. The integrations below are detected at runtime: if the relevant mod or asset is absent, Stronghold keeps running and either uses an available fallback or skips only that optional feature. Load optional content on the server and in the scenario in the normal way; adding a faction key to configuration does not load its mod.
| Optional mod/content | What Stronghold uses | When it is unavailable |
|---|---|---|
RHS - Status Quo (RHS_USAF / RHS_AFRF) | RHS factions can supply the garrison, high-position shooters, patrol-jeep candidates, and faction-specific arsenal boxes. In faction discovery mode, RHS represents the corresponding US or USSR side when present. | Vanilla US and USSR remain usable. Missing RHS vehicle or arsenal prefabs are rejected before use, and Stronghold tries another suitable vehicle or its safe arsenal fallback. |
Plastic Bandits (PLASTICBANDIT) | Uses dedicated, vetted garrison and shooter pools because this faction's catalog names are randomized. The RPG character is deliberately excluded from normal garrison selection. | The faction is simply not offered. To enable it when loaded, add PLASTICBANDIT to supportedFactionKeys and restart the server. |
| Tactical Flava | Its armed M1151 is considered as an additional candidate for US-aligned jeep patrols. | Stronghold falls through to RHS or vanilla vehicle candidates. Jeep patrols are skipped only if no valid local road route and vehicle candidate are available. |
| STW Heavy Weapons | Provides the optional road-checkpoint creation API used by Generate Road Checkpoints. Stronghold passes the selected faction, road position, size, and optional guard-count override to it. | Core stronghold generation continues. Requested checkpoints are skipped and a server warning explains that Heavy Weapons may not be ready. |
General faction support: other loaded factions with a usable infantry catalog can also be discovered or allow-listed. They are content sources rather than named dependencies; for unfamiliar factions, Stronghold uses its role filtering and uses the FIA arsenal as the safe fallback when no dedicated arsenal is known.
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. |
preserveDeadBodiesOnDefeatOrExpiry | false | When true, killed Stronghold soldiers remain after soldier-loss defeat or time-to-live expiry for the scenario garbage system or manual cleanup. Surviving soldiers are still removed; Game Master removal still removes bodies. |
defaultPreviewFactionKey | USSR | Initial Game Master draft selection. It does not make an unloaded faction selectable. |
supportedFactionKeys | [] | Empty discovers every loaded faction with a usable infantry catalog. Add faction keys to make an explicit Game Master allow-list. |
deployAPMinesdeployATMinesperimeterAPMineQuotaperimeterATMineQuotaperimeterMineInnerExclusionRadiusMeterspreservePerimeterMinesOnDefeat | true / true / 12 / 4 / 35 m / false | Controls perimeter AP/AT mine deployment, the protected inner radius, and whether mines remain after defeat through soldier losses. |
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. |
defaultDeferCleanupWhilePlayersNearbydefaultRefreshTimeToLiveOnPlayerEntrypreserveDeadBodiesOnDefeatOrExpirydefaultPreviewFactionKeysupportedFactionKeysdebugLogging | true / true / false / USSR / [] / false | Player cleanup policy, GM factions (empty discovers loaded eligible 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 / [] / [] / [] / 100 / 95 / 90 / 85 / 75 / 60 / 50 / 40 | Diagnostics, filters, factions (empty discovers eligible loaded 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.
Stronghold arsenal parameters
A stronghold can include one faction arsenal box. Stronghold tries suitable interior positions across the analyzed local buildings, including buildings not selected for the garrison. It only places the box when it finds a clear, accessible space; an unavailable safe position skips the arsenal without failing the stronghold.
Game Master parameter
| Parameter | Default | Behaviour |
|---|---|---|
| Generate Arsenal | Off | Requests one arsenal for that manually generated stronghold. The generated box is an editable entity: Game Masters can select, move, or delete it. |
Server configuration parameters
| File | Parameter | Default | Behaviour |
|---|---|---|---|
STWStrongholdConfig.json | preserveArsenalOnDefeat | true | When a stronghold is removed because it reaches the soldier-loss threshold, keep its arsenal available. Set false to remove it with the defeated stronghold. Manual deletion and ordinary lifecycle cleanup remove the arsenal. |
STWAutoStrongholdConfig.json | arsenalProbabilityPercent | 15 | Percentage of automatic strongholds that request an arsenal. Set 0 to disable automatic arsenal requests or 100 to request one for every automatic stronghold. Valid range: 0–100. |
US, USSR, FIA, RHS USAF, and RHS AFRF use their faction arsenal prefab. Other factions use the FIA arsenal as a safe fallback. The arsenal itself is not an AI unit and does not consume the stronghold's unit budget.
preserveArsenalOnDefeat set to true; automatic configuration files are upgraded to version 5 with arsenalProbabilityPercent set to 15.Game Master Scenario Properties: STW tab
Open Scenario Properties in Game Master and select the STW tab. Its Automatic Stronghold Generation checkbox is a live, server-authoritative switch for the current running game.
| When the checkbox is changed | Result |
|---|---|
| Enabled | Starts automatic stronghold generation for the current session using the server's STWAutoStrongholdConfig.json settings. The initial 5–10 minute delay and normal candidate checks apply. |
| Disabled | Immediately removes every automatically generated stronghold and stops the automatic scheduler. Manually generated strongholds remain in place. |
| Next game / restart | The Scenario Properties choice is not saved to JSON. The next session returns to the enabled value in STWAutoStrongholdConfig.json. |
enabled setting when you want the server's default behaviour to persist across sessions.Current automatic-spawn defaults
| Setting | Current default | Behaviour |
|---|---|---|
maximumAutomaticAIUnits | 80 | Global budget for AI in automatic strongholds. Use -1 to disable this safeguard; any finite value is limited by finiteAutomaticAIUnitsCap (150). |
initialSpawnDelayMinimumMinutesinitialSpawnDelayMaximumMinutes | 5 / 10 | Random startup delay before the first automatic attempt. |
minimumCandidatesBeforeInitialSpawnminimumScanProgressBeforeInitialSpawnPercent | 12 / 10 | The first attempt can use the partial, progressively built candidate cache once both thresholds are met; it does not need to wait for a full map scan. |
showGameMasterDebugActions | false | When enabled for testing, Game Masters can view scheduler status and force an automatic-placement attempt. Keep it disabled on normal servers. |
Existing configuration files that still contain the previous stock 15–45 minute startup delay are automatically migrated to 5–10 minutes. Custom server-owner timing is preserved.
Jeep patrols and fuel support
Strongholds can add road-patrol jeeps independently of foot patrols. Each jeep uses two AI crew members from the shared unit budget and is skipped when there is no suitable local road route or enough remaining budget.
Game Master setting
| Parameter | Default | Behaviour |
|---|---|---|
| Number of Jeeps | 1 | Requests 0–4 vehicle patrols for this stronghold. Its initial value comes from defaultPatrollingJeeps. |
STWStrongholdConfig.json parameters
| Parameter | Default | Behaviour |
|---|---|---|
defaultPatrollingJeeps | 1 | Default request for new Game Master drafts; valid range: 0–4. |
preserveJeepPatrolsOnDefeat | false | On soldier-loss defeat, preserves its jeep and surviving crew as an independent patrol. Manual deletion and lifetime cleanup still remove them. |
jeepPatrolATMineInnerExclusionRadiusMeters | 0 m | AT-mine inner exclusion when a jeep patrol was generated. At 0, the covering radius is protected and AT mines are limited to the outer safe perimeter band; use 1–1000 m for a fixed exclusion radius. |
STWStrongholdJeepFuelConfig.json
This additional file is created at $profile:STW/Stronghold/STWStrongholdJeepFuelConfig.json. It applies only to Stronghold patrol jeeps and never refuels a jeep occupied by a player.
| Parameter | Default | Behaviour |
|---|---|---|
enabled | true | Enables automatic fuel support. |
checkIntervalMinutes | 20 | Fuel-check interval; valid range: 1–120 minutes. |
refuelThreshold | 0.35 | Refuels at or below this fuel fraction; valid range: 0–1. |
refillMinimumrefillMaximum | 0.45 / 0.80 | Random refill range. Both are 0–1 and the maximum cannot be below the minimum. |
Current parameter corrections
The current core configuration is version 14 and the automatic configuration is version 5. The server validates, upgrades, and rewrites older profile files at startup.
maximumAutomaticAIUnits default is 80, not 60. The current automatic startup delay is 5–10 minutes; the first attempt may use the partial candidate cache once the 12-candidate and 10% scan-progress thresholds are met.Checkpoint parameters
Stronghold-owned Heavy Weapons checkpoints use the Stronghold faction and are placed only on suitable surrounding roads. They are skipped when no valid road is found or STW Heavy Weapons is not ready.
| Parameter | Default | Behaviour |
|---|---|---|
| Generate Road Checkpoints (Game Master) | On | Enables or suppresses checkpoints for that manually generated stronghold. |
checkpointCount | 2 | Requested checkpoints per stronghold. Set 0 to disable them globally; valid range: 0–12. |
checkpointMinimumDistanceMeterscheckpointMaximumDistanceMeters | 350 m / 850 m | Road-search distance ring; valid range: 50–5000 m. Maximum cannot be lower than minimum. |
checkpointMinimumRoadWidthMeters | 6 m | Rejects narrower roads; valid range: 2–20 m. |
checkpointSize | 0 (MEDIUM) | 0 selects MEDIUM and 1 LARGE. Both currently use the US Medium physical layout. |
checkpointGuardCount | -1 | Guards passed to Heavy Weapons: -1 uses its default; valid override values are 0, 1, or 2. |
preserveCheckpointsOnDefeat | false | Retains checkpoints after soldier-loss defeat when true. Manual deletion and lifecycle cleanup still remove Stronghold-owned checkpoints. |
Captain Sprocket community

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