Repository navigation
Configuration Reference
Every setting in a preset file (presets/<name>.json).
Important
Booleans use 1 / 0 in this config (not true / false). 1 = on, 0 = off.
Each preset file has this top-level shape:
{
"Difficulty": "normal",
"Settings": {
"Event": { ... },
"Health": { ... },
"Movement": { ... },
"Turret": { ... },
"Grenade": { ... },
"Combat": { ... },
"Faction": { ... },
"Markers": { ... },
"Notifications": { ... },
"Effects": { ... },
"SmokeScreen": { ... },
"Loot": { ... },
"Defenders": { ... }
},
"PatrolRoutes": [ ... ]
}| Top-level field | Description |
|---|---|
Difficulty |
Base template: easy, normal, hard, or boss. See Difficulty Templates. Your Settings values override it. |
Settings |
All the BTR's behavior (documented below). |
PatrolRoutes |
One or more named routes with waypoints. See Patrol Routes. |
Tip
Want a complete, filled-in file to copy? See Example Preset. Ammo and item class names? See Ammunition and Class Names.
| ⚙️ Event | ❤️ Health | 🚜 Movement |
| 🎯 Turret | 💣 Grenade | ⚔️ Combat |
| 🏴 Faction | 🗺️ Markers | 🔔 Notifications |
| ✨ Effects | 💨 Smoke Screen | 📦 Loot |
| 🛡️ Defenders | 🧭 PatrolRoutes |
"Event": {
"BTRClassName": "BS_BTR_Patrol",
"WreckClassName": "BS_BTR_Wreck",
"MinPlayersToSpawn": 1,
"SpawnCheckInterval": 60.0,
"RespawnDelay": 900.0,
"PatrolDuration": 3600.0,
"WreckLifetime": 900.0
}| Field | Default | Description |
|---|---|---|
BTRClassName |
BS_BTR_Patrol |
Which BTR skin spawns. Must be a valid class — see BTR Skins. |
WreckClassName |
BS_BTR_Wreck |
Wreck class spawned on death. Leave as-is unless you have a custom wreck. |
MinPlayersToSpawn |
1 |
Per-preset minimum players (the global file also has one). |
SpawnCheckInterval |
60.0 |
Per-preset spawn check interval (seconds). |
RespawnDelay |
900.0 |
Per-preset respawn delay (seconds). |
PatrolDuration |
3600.0 |
Max event lifetime (seconds). After this the BTR despawns even if never killed. |
WreckLifetime |
900.0 |
How long the wreck (and its crates) lasts before despawning (seconds). |
💡 Example — Autumn-camo BTR that despawns after 30 min, wreck lasts 10
"Event": {
"BTRClassName": "BS_BTR_Patrol_Camo2",
"PatrolDuration": 1800.0,
"WreckLifetime": 600.0
}The BTRClassName must be one of the exact strings from BTR Skins (e.g. BS_BTR_Patrol_Urban). A typo here = nothing spawns.
"Health": {
"MaxHealth": 5000.0,
"ArmorMultiplier": 1.0,
"BulletDamageMultiplier": 0.0,
"ExplosionRadius": 15.0,
"DeathExplosionAmmo": "Explosion_40mm_Ammo"
}| Field | Default | Description |
|---|---|---|
MaxHealth |
5000.0 |
Total HP of the BTR. |
ArmorMultiplier |
0.3* |
Global damage-taken multiplier. 1.0 = full damage, 0.3 = takes 30%, 0.0 = invulnerable. The single armor knob. |
BulletDamageMultiplier |
0.0 |
Bullet (FIRE_ARM) damage multiplier. 0.0 = immune to bullets (explosives/grenades only), 1.0 = bullets do full damage. |
ExplosionRadius |
15.0 |
Radius (m) of the explosion when it dies. |
DeathExplosionAmmo |
Explosion_40mm_Ammo |
Ammo class used for the death explosion. See Ammunition and Class Names. |
* The shipped example presets override ArmorMultiplier to 1.0. See Difficulty Templates.
Note
Want every weapon to damage it? Set BulletDamageMultiplier to 1.0 and keep ArmorMultiplier at 1.0 (default 0.0 makes it immune to bullets).
💡 Examples — squishy vs. explosives-only
Squishy tank any rifle can take down:
"Health": {
"MaxHealth": 2500.0,
"ArmorMultiplier": 1.0,
"BulletDamageMultiplier": 1.0
}Explosives-only armored beast:
"Health": {
"MaxHealth": 12000.0,
"ArmorMultiplier": 1.0,
"BulletDamageMultiplier": 0.0
}More setups in Recipes.
"Movement": {
"PatrolSpeed": 8.0,
"CombatSpeed": 5.0,
"MaxSpeed": 12.0,
"Acceleration": 3.0,
"Deceleration": 5.0,
"TerrainSampleDistance": 15.0,
"MaxSlopeAngle": 35.0,
"EnableObstacleAvoidance": 0,
"ObstacleCheckDistance": 20.0,
"WaypointReachDistance": 20.0,
"PlowThroughVegetation": 1,
"CrushEntities": 1,
"CrushMinSpeed": 2.0
}| Field | Default | Description |
|---|---|---|
PatrolSpeed |
8.0 |
Speed while patrolling (m/s). |
CombatSpeed |
5.0 |
Speed in combat (m/s). |
MaxSpeed |
12.0 |
Absolute speed cap (m/s). |
Acceleration |
3.0 |
Acceleration (m/s²). |
Deceleration |
5.0 |
Braking (m/s²). |
TerrainSampleDistance |
15.0 |
How far ahead it samples terrain height (m). |
MaxSlopeAngle |
35.0 |
Max traversable slope (degrees). |
EnableObstacleAvoidance |
0 |
0 = drives straight at waypoints (best performance; keep routes clear). 1 = tries to steer around obstacles. |
ObstacleCheckDistance |
20.0 |
Obstacle detection distance (m), only used if avoidance is on. |
WaypointReachDistance |
20.0 |
How close (m) counts as reaching a waypoint. |
PlowThroughVegetation |
1 |
Drives through bushes and trees without slowing or steering. |
CrushEntities |
1 |
Roadkill — kills players/infected/animals driven over at speed. |
CrushMinSpeed |
2.0 |
Minimum speed (m/s) for roadkill to be lethal. |
💡 Example — slow, menacing patrol that flattens everything
"Movement": {
"PatrolSpeed": 5.0,
"PlowThroughVegetation": 1,
"CrushEntities": 1,
"CrushMinSpeed": 1.5
}"Turret": {
"YawSpeed": 60.0,
"PitchSpeed": 40.0,
"MaxYaw": 180.0,
"MaxPitch": 90.0,
"MinPitch": -10.0,
"FireCooldown": 0.3,
"Accuracy": 0.5,
"MissAngle": 3.0,
"MaxRange": 400.0,
"CoaxAccuracy": 0.35,
"CoaxMissAngle": 4.0,
"CoaxMaxRange": 250.0,
"AmmoClass": "Bullet_762x39",
"DamageMultiplier": 1.5,
"BurstSize": 8,
"ReloadTime": 3.0,
"StopToShoot": 1,
"CoaxOnly": 0,
"ExplosiveCannon": 1,
"CannonExplosionAmmo": "Explosion_40mm_Ammo",
"FellTreesRadius": 6.0
}| Field | Default | Description |
|---|---|---|
YawSpeed |
60.0 |
Turret rotation speed (deg/s). |
PitchSpeed |
40.0 |
Turret elevation speed (deg/s). |
MaxYaw |
180.0 |
Rotation range (± degrees). |
MaxPitch |
90.0 |
Max elevation (degrees). |
MinPitch |
-10.0 |
Min depression (degrees). |
FireCooldown |
0.3 |
Time between cannon shots (s). Lower = faster fire. |
Accuracy |
0.25* |
Cannon hit probability (0.0–1.0). |
MissAngle |
3.0 |
Cannon spread of a missed shot (degrees). |
MaxRange |
300.0* |
Cannon max range (m). Also sets the overall engagement/suppression range. |
CoaxAccuracy |
0.35 |
Coaxial MG hit probability (0.0–1.0), independent of the cannon. |
CoaxMissAngle |
4.0 |
Coaxial MG spread of a missed shot (degrees). |
CoaxMaxRange |
250.0 |
Coaxial MG max range (m). |
AmmoClass |
Bullet_762x39 |
Ammo class for direct-hit damage. See Ammunition and Class Names. |
DamageMultiplier |
1.5 |
Damage multiplier vs. players. |
BurstSize |
8 |
Shots per burst (reference). |
ReloadTime |
3.0 |
Pause between bursts (s). |
StopToShoot |
1 |
Brake the BTR when it has line of sight to fire. |
CoaxOnly |
0 |
1 = the BTR only ever fires the coaxial machine gun — the cannon never fires. For a lighter, less lethal patrol. Note: this does not disable the grenade (see Grenade.Enabled). |
ExplosiveCannon |
1 |
1 = cannon explodes on impact (splash damage, blast FX/sound, fells nearby trees). 0 = direct-hit only — no splash, no explosion visual/sound, no tree felling (impacts show a bullet ricochet instead). |
CannonExplosionAmmo |
Explosion_40mm_Ammo |
Explosion on environment impact — only when ExplosiveCannon is 1. |
FellTreesRadius |
6.0 |
Radius (m) a cannon impact fells vegetation. 0 = off. Only applies when ExplosiveCannon is 1. |
* The shipped presets override Accuracy and MaxRange per difficulty (e.g. normal = 0.50 / 400m).
Warning
Setting CannonExplosionAmmo to a bullet class does not stop the explosion — only ExplosiveCannon: 0 does.
💡 Examples — precise non-explosive vs. hard-hitting explosive
Precise, fast-firing 7.62 cannon, NO explosion (pure direct hits):
"Turret": {
"AmmoClass": "Bullet_762x39",
"Accuracy": 0.65,
"FireCooldown": 0.2,
"MaxRange": 450.0,
"ExplosiveCannon": 0
}Hard-hitting explosive 40mm cannon (default style, more punch):
"Turret": {
"ExplosiveCannon": 1,
"CannonExplosionAmmo": "Explosion_40mm_Ammo",
"DamageMultiplier": 2.0,
"Accuracy": 0.5
}Deadly-accurate cannon, but a sloppy short-range coaxial:
"Turret": {
"Accuracy": 0.8,
"MaxRange": 500.0,
"CoaxAccuracy": 0.2,
"CoaxMaxRange": 150.0
}The cannon and coaxial now have fully independent accuracy and range.
Indirect-fire lob. Off by default — turn it on only if you want it.
"Grenade": {
"Enabled": 0,
"Cooldown": 4.0,
"Range": 150.0,
"MinRange": 30.0,
"Speed": 700,
"ExplosionAmmo": "Explosion_40mm_Ammo",
"FellTreesRadius": 6.0
}| Field | Default | Description |
|---|---|---|
Enabled |
0 |
Master switch for the grenade system. 0 = off, 1 = on. |
Cooldown |
4.0 |
Cooldown between grenades (s). |
Range |
150.0 |
Max range (m). |
MinRange |
30.0 |
Min range, to avoid self-damage (m). |
Speed |
700 |
Grenade projectile speed. |
ExplosionAmmo |
Explosion_40mm_Ammo |
Explosion ammo for the grenade. See Ammunition and Class Names. |
FellTreesRadius |
6.0 |
Radius (m) the grenade fells vegetation. 0 = off. |
Note
The grenade and the cannon are separate weapons. If you're getting explosions with Grenade.Enabled: 0, those are the cannon (ExplosiveCannon / CannonExplosionAmmo), not the grenade.
💡 Example — enable lobbed grenades to flush out campers
"Grenade": {
"Enabled": 1,
"Cooldown": 6.0,
"Range": 180.0,
"MinRange": 40.0,
"ExplosionAmmo": "Explosion_40mm_Ammo"
}"Combat": {
"DetectionRadius": 250.0,
"EngageRadius": 200.0,
"DisengageRadius": 350.0,
"LostSightTimeout": 15.0,
"OrbitRadius": 80.0,
"OrbitSpeed": 4.0,
"AggroWhilePatrolling": 1,
"PatrolAggroRange": 150.0,
"PatrolScanInterval": 1.0,
"EnableSuppression": 1,
"SuppressionSpread": 6.0,
"SuppressionDuration": 4.0,
"ChasePlayers": 0,
"CloseRangeAutoLOS": 0.0,
"IgnoreGodmodePlayers": 1,
"SnapDistance": 4.0
}| Field | Default | Description |
|---|---|---|
DetectionRadius |
250.0 |
Player detection radius (m). |
EngageRadius |
200.0 |
Radius to enter combat (m). |
DisengageRadius |
350.0 |
Radius at which it loses the target (m). |
LostSightTimeout |
15.0 |
Seconds without seeing the target before disengaging. |
OrbitRadius |
80.0 |
Combat orbit radius (m). |
OrbitSpeed |
4.0 |
Speed while orbiting (m/s). |
AggroWhilePatrolling |
1 |
1 = proactively attack players/bots seen while patrolling. 0 = passive until shot (still defends itself). Note: enemy BTRs are always detected regardless of this setting — see Faction System. |
PatrolAggroRange |
150.0 |
Aggro range while patrolling (m). |
PatrolScanInterval |
1.0 |
Scan frequency while patrolling (s). |
EnableSuppression |
1 |
Fire near a player even without clean line of sight. |
SuppressionSpread |
6.0 |
Spread of suppression fire (degrees). |
SuppressionDuration |
4.0 |
Seconds it suppresses after losing LOS (then stays alert until LostSightTimeout). |
ChasePlayers |
0 |
1 = drives after the player. 0 = holds position and fires from where it is. |
CloseRangeAutoLOS |
0.0 |
0 = off. If >0: within that distance (m) it "sees" you through cover (will fire through walls at close range). |
IgnoreGodmodePlayers |
1 |
1 = ignores players in godmode/invincibility (admins in invisibility usually have godmode). |
SnapDistance |
4.0 |
Bullet snap — if a shot passes within this distance (m) of a player, a bullet fly-by/crack sound plays right next to them (that "under fire" feel). 0 = off. |
💡 Examples — passive patrol vs. relentless hunter
Passive — only fights back when attacked:
"Combat": {
"AggroWhilePatrolling": 0,
"ChasePlayers": 0
}Aggressive hunter that chases and never lets go:
"Combat": {
"AggroWhilePatrolling": 1,
"ChasePlayers": 1,
"DetectionRadius": 300.0,
"LostSightTimeout": 30.0
}Controls who this BTR treats as an enemy — players, Expansion eAI bots, and other BTRs. This is what powers BTR-vs-BTR warfare. Full guide with examples: Faction System.
"Faction": {
"Name": "Hostile",
"AttackPlayers": 1,
"AttackOtherBTRs": 1,
"Enemies": ["ALL"],
"Allies": []
}| Field | Default | Description |
|---|---|---|
Name |
Hostile |
This BTR's own faction (free text). Give two presets different names to make their BTRs fight each other. For eAI, use the Expansion faction name (e.g. East). |
AttackPlayers |
1 |
1 = plain players (no eAI faction) are enemies. 0 = ignores factionless players. |
AttackOtherBTRs |
1 |
1 = attacks enemy-faction BTRs. 0 = never fights other BTRs (still attacks enemy players/bots). |
Enemies |
["ALL"] |
Factions this BTR attacks. Empty [] or ["ALL"] = every faction that isn't its own or an ally. Or list specific names, e.g. ["East","Bandits"]. |
Allies |
[] |
Factions it never attacks — applies to both bots and BTRs of that faction (its own name is always allied). |
Important
Two BTRs only fight if their Name values differ. Two presets both named Hostile are the same faction and ignore each other. Also confirm AttackOtherBTRs reads 1 after the config self-heals a new field (it can land as 0 — see How the Config Works).
💡 Examples — BTR-vs-BTR, and allied convoys
Two warring factions (put in two different presets):
// preset A
"Faction": {
"Name": "East",
"Enemies": ["ALL"],
"Allies": []
}// preset B
"Faction": {
"Name": "West",
"Enemies": ["ALL"],
"Allies": []
}Different factions that do NOT fight each other (allied convoy), but still hunt players:
"Faction": {
"Name": "East",
"AttackPlayers": 1,
"Allies": ["West"]
}Attacks enemy bots but never other BTRs:
"Faction": {
"Name": "East",
"AttackOtherBTRs": 0,
"Enemies": ["ALL"]
}"Markers": {
"EnableMapMarker": 1,
"Enable3DMarker": 1,
"Enable2DMarker": 1,
"ShowHealthOnMarker": 1,
"Name": "Hostile BTR-82A",
"IconName": "BTR BS",
"IconPath": "BTR_82A/icon/iconbtr.paa",
"KeepMarkerOnWreck": 0,
"MarkerColor": "255,255,50,0",
"WreckMarkerColor": "255,140,140,140"
}| Field | Default | Description |
|---|---|---|
EnableMapMarker |
1 |
Master switch for the map marker. |
Enable3DMarker |
1 |
3D world marker (needs Expansion-Navigation). |
Enable2DMarker |
1 |
2D map marker (needs Expansion-Navigation). |
ShowHealthOnMarker |
1 |
1 = append the BTR's remaining health % to the marker label, e.g. Hostile BTR-82A [67%], so players can see how worn-down it is. 0 = name only. |
Name |
Hostile BTR-82A |
Marker label shown on the map. |
IconName |
BTR BS |
Expansion icon name (registered in the mod). |
IconPath |
BTR_82A/icon/iconbtr.paa |
.paa path for LBmaster-style maps. |
KeepMarkerOnWreck |
0 |
1 = the marker stays on the map over the wreck until it despawns, so players can find the remains. 0 = marker is removed when the BTR is destroyed. |
MarkerColor |
"255,255,50,0" |
Patrolling marker color. Accepts three formats — see below. Default red. |
WreckMarkerColor |
"255,140,140,140" |
Wreck marker color, same formats. Default grey. Only used when KeepMarkerOnWreck is 1. |
Color formats — all three are accepted, use whichever you like:
| Format | Example | Notes |
|---|---|---|
| Hex |
"#FF3232" or "#FF3232CC"
|
Web-style. Copy straight from any color picker. Without alpha = fully opaque. |
| RGBA | "rgba(255,50,50,1.0)" |
Standard web order. Alpha as 0.0–1.0 (CSS style) or 0–255. |
| Legacy | "255,255,50,50" |
"alpha,red,green,blue", each 0–255. Kept for backward compatibility with existing configs. |
ShowHealthOnMarker in action — the label updates live as the BTR takes damage:
| Fresh spawn | After taking hits |
|---|---|
![]() |
![]() |
💡 Examples — rename & recolor the marker
Rename per preset (e.g. for a boss):
"Markers": {
"Name": "⚠ BTR-82A BOSS — Airfield"
}Purple patrol marker + green wreck marker that stays on the map (hex format):
"Markers": {
"MarkerColor": "#A000FF",
"KeepMarkerOnWreck": 1,
"WreckMarkerColor": "#00C800"
}Same thing in rgba:
"Markers": {
"MarkerColor": "rgba(160,0,255,1.0)",
"KeepMarkerOnWreck": 1,
"WreckMarkerColor": "rgba(0,200,0,1.0)"
}All three color formats (hex / rgba / legacy ARGB) work in both fields.
Requires @CF. Uses localization keys (#STR_...); you can replace them with plain text.
"Notifications": {
"Enable": 1,
"Title": "#STR_BS_BTR_notif_title",
"SpawnMsg": "#STR_BS_BTR_spawn",
"DestroyedMsg": "#STR_BS_BTR_destroyed",
"DespawnMsg": "#STR_BS_BTR_despawn",
"Icon": "BTR_82A/icon/iconbtr.paa",
"EnablePlayerKilled": 1,
"ShowVictimName": 1,
"PlayerKilledMsg": "#STR_BS_BTR_player_killed",
"PlayerKilledNoNameMsg": "#STR_BS_BTR_player_killed_anon",
"ShowKillerName": 1,
"DestroyedByMsg": "#STR_BS_BTR_destroyed_by"
}| Field | Default | Description |
|---|---|---|
Enable |
1 |
Master switch for notifications. |
Title |
#STR_BS_BTR_notif_title |
Notification title. |
SpawnMsg |
#STR_BS_BTR_spawn |
Message when a patrol spawns. |
DestroyedMsg |
#STR_BS_BTR_destroyed |
Message when the BTR is destroyed. |
DespawnMsg |
#STR_BS_BTR_despawn |
Message when it despawns (timed out). |
Icon |
BTR_82A/icon/iconbtr.paa |
Notification icon path. |
EnablePlayerKilled |
1 |
Announce when the BTR kills a player. |
ShowVictimName |
1 |
1 = show the victim's name, 0 = anonymous. |
PlayerKilledMsg |
#STR_BS_BTR_player_killed |
Killed message (%1 = victim). |
PlayerKilledNoNameMsg |
#STR_BS_BTR_player_killed_anon |
Anonymous killed message. |
ShowKillerName |
1 |
1 = show who destroyed the BTR. |
DestroyedByMsg |
#STR_BS_BTR_destroyed_by |
Destroyed-by message (%1 = killer). |
💡 Example — plain custom text instead of localization keys
"Notifications": {
"Enable": 1,
"Title": "ARMORED PATROL",
"SpawnMsg": "A hostile BTR-82A has been deployed!",
"DestroyedMsg": "The BTR-82A has been destroyed.",
"ShowVictimName": 1
}"Effects": {
"EnableWheelDust": 1
}| Field | Default | Description |
|---|---|---|
EnableWheelDust |
1 |
Wheel dust trail while moving. 0 = off (slightly cheaper). |
A defensive smoke screen the BTR deploys around itself when it takes heavy damage — a cloud that envelops the hull to break line of sight and buy time. Full guide: Smoke Screen.
"SmokeScreen": {
"Enabled": 1,
"TriggerAtHealth": 0.65,
"RepeatEvery": 0.20,
"MaxDeployments": 3,
"Cooldown": 12.0,
"Duration": 16.0,
"EmitterCount": 5,
"HunkerDown": 1,
"AccuracyWhileSmoked": 0.35
}| Field | Default | Description |
|---|---|---|
Enabled |
1 |
Master switch for the defensive smoke screen. |
TriggerAtHealth |
0.65 |
Deploys the first screen when health drops below this fraction (0.65 = 65%). |
RepeatEvery |
0.20 |
Deploys another every time health drops a further X (0.20 → 65%, 45%, 25%…). 0 = deploy only once. |
MaxDeployments |
3 |
Total number of smoke screens available (limited "smoke grenades"). |
Cooldown |
12.0 |
Minimum seconds between deployments. |
Duration |
16.0 |
How long each smoke cloud lasts (s). |
EmitterCount |
5 |
Emitters spread along the hull. Higher = denser cloud but more FPS cost. 5 is a good balance. |
HunkerDown |
1 |
1 = while smoked it brakes and fires blind at reduced accuracy (it can't see through its own smoke either). |
AccuracyWhileSmoked |
0.35 |
Accuracy multiplier while inside the smoke (only used when HunkerDown is 1). |
💡 Examples — one panic screen vs. disabled
A single smoke screen at 50% health, then never again:
"SmokeScreen": {
"Enabled": 1,
"TriggerAtHealth": 0.5,
"RepeatEvery": 0,
"MaxDeployments": 1
}Turn the smoke screen off entirely:
"SmokeScreen": {
"Enabled": 0
}Two modes: crate loot (burning crates you loot after the wreck cools) or flat death loot. Toggle with UseCrateLoot.
"Loot": {
"UseCrateLoot": 1,
"CrateBurningTimeMin": 20,
"CrateBurningTimeMax": 40,
"CrateSpawnRadiusMin": 5.0,
"CrateSpawnRadiusMax": 8.0,
"CratesMin": 1,
"CratesMax": 2,
"CrateClasses": [ "BS_Tank_Box1", "BS_Tank_Box2_Black" ],
"LootCategories": { ... },
"LootCrates": [ ... ],
"DeathLoot": [ ... ]
}| Field | Default | Description |
|---|---|---|
UseCrateLoot |
1 |
1 = spawn burning loot crates. 0 = use the flat DeathLoot list instead. |
CrateBurningTimeMin / Max
|
20 / 40
|
Crate burning duration range (s). Can't be opened while burning. |
CrateSpawnRadiusMin / Max
|
5.0 / 8.0
|
Distance from the wreck where crates drop (m). |
CratesMin / Max
|
1 / 2
|
Number of crates spawned (random between the two). |
CrateClasses[] |
BS_Tank_Box1, BS_Tank_Box2_Black
|
Pool of crate models; one picked at random per crate. Empty = use the ClassName from each LootCrates entry. See Loot Crates. |
LootCategories{} |
(see below) | Named loot pools with min/max counts and per-item spawn chances. |
LootCrates[] |
(see below) | Which categories each crate fills. |
DeathLoot[] |
(see below) | Flat loot list, only used when UseCrateLoot is 0. |
📂 LootCategories — named loot pools (click to expand)
Each category has Min/Max (how many items to roll) and an Items list. All class names must be valid item classes — see Ammunition and Class Names.
"LootCategories": {
"Weapons": {
"Min": 1,
"Max": 2,
"Items": [
{
"LootClass": "AKM",
"LootAttachments": ["Mag_AKM_30Rnd", "AK_WoodBttstck", "AK_WoodHndgrd"],
"SpawnChance": 1.0
},
{
"LootClass": "SVD",
"LootAttachments": ["Mag_SVD_10Rnd", "PSO1Optic"],
"SpawnChance": 0.4
}
]
},
"Ammo": {
"Min": 2,
"Max": 4,
"Items": [
{
"LootClass": "Ammo_762x39",
"LootAttachments": [],
"SpawnChance": 1.0
},
{
"LootClass": "Mag_AKM_Drum75Rnd",
"LootAttachments": [],
"SpawnChance": 0.5
}
]
}
}| Item field | Description |
|---|---|
LootClass |
Item class name (e.g. AKM, Ammo_762x39, PlateCarrierVest). |
LootAttachments |
Attachments created on the item (mags, optics, parts). Empty [] for none. |
SpawnChance |
0.0–1.0 chance this item is picked when rolled. 1.0 = always. |
📂 LootCrates — which categories each crate fills
"LootCrates": [
{
"ClassName": "BS_Tank_Box1",
"LBPresetName": "",
"Presets": ["Weapons", "Ammo"]
},
{
"ClassName": "BS_Tank_Box2_Black",
"LBPresetName": "",
"Presets": ["Medical", "Gear"]
}
]| Field | Description |
|---|---|
ClassName |
Crate model (ignored if the CrateClasses pool is non-empty). See Loot Crates. |
LBPresetName |
LBmaster loot preset name. Empty "" = use the internal Presets. |
Presets |
Which LootCategories this crate fills. |
📂 DeathLoot — flat list (only if UseCrateLoot: 0)
"DeathLoot": [
{
"ClassName": "AKM",
"Quantity": 1,
"SpawnChance": 0.8
},
{
"ClassName": "Mag_AKM_30Rnd",
"Quantity": 3,
"SpawnChance": 1.0
},
{
"ClassName": "Ammo_762x39",
"Quantity": 2,
"SpawnChance": 0.9
},
{
"ClassName": "PlateCarrierVest",
"Quantity": 1,
"SpawnChance": 0.5
}
]| Field | Description |
|---|---|
ClassName |
Item class name. |
Quantity |
How many to spawn. |
SpawnChance |
0.0–1.0 chance it spawns. |
AI that guards the wreck after the BTR dies. Supports both vanilla infected and Expansion-AI bots.
"Defenders": {
"EnableDefenders": 1,
"DespawnRadius": 800.0,
"DespawnCheckInterval": 60.0,
"Defenders": [
{
"ClassName": "ZmbM_SoldierNormal",
"Count": 5,
"AdditionalNight": 2,
"SpawnRadius": 25.0,
"IsExpansionBot": 0,
"ExpansionFaction": "",
"ExpansionLoadout": "",
"ExpansionUnlimitedAmmo": 0,
"ExpansionCanBeLooted": 1,
"DamageMultiplier": 1.0,
"DamageReceivedMultiplier": 1.0
}
]
}| Field | Default | Description |
|---|---|---|
EnableDefenders |
1 |
Master switch for wreck defenders. |
DespawnRadius |
800.0 |
If no player is within this radius (m), defenders despawn. |
DespawnCheckInterval |
60.0 |
How often the despawn check runs (s). |
Each Defenders entry:
| Field | Default | Description |
|---|---|---|
ClassName |
— | Class to spawn (vanilla infected, or eAI bot). See Ammunition and Class Names. |
Count |
— | Base count. |
AdditionalNight |
— | Extra spawns at night. |
SpawnRadius |
25.0 |
Spawn radius around the wreck (m). |
IsExpansionBot |
0 |
1 = spawn as a DayZ-Expansion-AI bot. |
ExpansionFaction |
"" |
eAI faction (e.g. West, East). |
ExpansionLoadout |
"" |
Expansion loadout XML name. |
ExpansionUnlimitedAmmo |
0 |
1 = infinite reloads for the bot. |
ExpansionCanBeLooted |
1 |
1 = the bot's body can be looted. |
DamageMultiplier |
1.0 |
Damage this defender deals (2.0 = double, 0.5 = half). Works for both bots and infected. |
DamageReceivedMultiplier |
1.0 |
Damage this defender receives (0.5 = twice as tanky, 2.0 = fragile). Works for both bots and infected. |
Note
Per-defender difficulty. These two multipliers let a boss preset field genuinely harder guards than an easy one. Notes: a value of 0 (or missing, e.g. after config self-heal — see How the Config Works) is treated as 1.0; for a nearly harmless / nearly immune defender use 0.1, not 0. DamageReceivedMultiplier can't save a defender from a single hit that exceeds its total HP (e.g. a point-blank headshot).
💡 Examples — vanilla infected vs. Expansion-AI bots
Vanilla infected defenders (no extra mods needed):
"Defenders": {
"EnableDefenders": 1,
"Defenders": [
{
"ClassName": "ZmbM_SoldierNormal",
"Count": 6,
"AdditionalNight": 3,
"SpawnRadius": 25.0,
"IsExpansionBot": 0
},
{
"ClassName": "ZmbM_PatrolNormal",
"Count": 3,
"AdditionalNight": 1,
"SpawnRadius": 20.0,
"IsExpansionBot": 0
}
]
}Expansion-AI armed bots (requires DayZ-Expansion-AI):
"Defenders": {
"EnableDefenders": 1,
"Defenders": [
{
"ClassName": "eAI_SurvivorF_Gabi",
"Count": 4,
"AdditionalNight": 2,
"SpawnRadius": 30.0,
"IsExpansionBot": 1,
"ExpansionFaction": "East",
"ExpansionLoadout": "SoldierLoadout.json",
"ExpansionUnlimitedAmmo": 0,
"ExpansionCanBeLooted": 1,
"DamageMultiplier": 1.5,
"DamageReceivedMultiplier": 0.5
}
]
}See Patrol Routes.
🏠 Home · ⚙️ Configuration · 🧩 Recipes · 📖 Class Names · ❓ FAQ · 💬 Discord
🛡️ BS Patrol Tank — © 2026 cjcarw · Repacking prohibited
🚀 Getting Started
⚙️ Configuration
⚔️ Combat & Systems
📖 Reference
🧰 Help & More

