Skip to content

Faction System

cjcarw edited this page Jul 15, 2026 · 3 revisions

🏴 Faction System

The faction system decides who each BTR treats as an enemy — plain players, Expansion eAI bots, and other BTRs. It's what makes BTR-vs-BTR warfare possible: spawn two BTRs of opposing factions and they'll hunt and destroy each other.

Tip

Want the full step-by-step walkthrough (presets, routes, global config, balancing)? See Setting up a BTR War.

Everything lives in the Faction block of a preset (see the field table in Configuration Reference).

"Faction": {
    "Name": "Hostile",
    "AttackPlayers": 1,
    "AttackOtherBTRs": 1,
    "Enemies": ["ALL"],
    "Allies": []
}

🧠 How targeting is decided

For any potential target, the BTR asks: "is this thing hostile to me?" Here's the exact decision flow:

flowchart TD
    A(["👀 Potential target spotted"]) --> B{What is it?}
    B -->|"🧍 Plain player<br/>(no eAI faction)"| C{AttackPlayers = 1?}
    B -->|"🤖 eAI bot<br/>(Expansion faction)"| D{Same faction<br/>or in Allies?}
    B -->|"🚛 Another BTR"| E{AttackOtherBTRs = 1?}
    C -->|Yes| ATK(["🔴 ENGAGE"])
    C -->|No| IGN(["🟢 Ignore"])
    D -->|Yes| IGN
    D -->|No| F{"In Enemies?<br/>(empty / ALL = everyone)"}
    F -->|Yes| ATK
    F -->|No| IGN
    E -->|No| IGN
    E -->|Yes| G{Same Name<br/>or in Allies?}
    G -->|Yes| IGN
    G -->|No| F
    style ATK fill:#8b1a1a,color:#fff
    style IGN fill:#1a5c1a,color:#fff
Loading

The same rules in table form:

Target How its faction is read Hostile if…
Plain player No eAI faction (empty) AttackPlayers is 1
eAI bot Its Expansion group faction name that name is in Enemies (or Enemies is empty/ALL) and not in Allies
Another BTR That BTR's Faction.Name AttackOtherBTRs is 1, the names differ, and it's an enemy (not an ally)

Key rules:

  • A BTR never attacks its own faction (same Name) or anything in its Allies list.
  • Empty Enemies ([]) is treated the same as ["ALL"] — hostile to every other faction. This is the safe aggressive default.
  • Allies covers both bots and BTRs of that faction.

Note

Enemy BTRs are always scanned for, regardless of Combat.AggroWhilePatrolling. That flag only controls proactively aggroing players/bots while patrolling.


⚔️ Set up BTR-vs-BTR

To make two BTRs fight, give them different faction names in different presets, and make sure they see each other as enemies.

// preset A  (e.g. patrol_normal.json)
"Faction": {
    "Name": "East",
    "AttackPlayers": 1,
    "AttackOtherBTRs": 1,
    "Enemies": ["ALL"],
    "Allies": []
}
// preset B  (e.g. boss_airfield.json)
"Faction": {
    "Name": "West",
    "AttackPlayers": 1,
    "AttackOtherBTRs": 1,
    "Enemies": ["ALL"],
    "Allies": []
}

Then spawn one BTR from each preset near each other. Because East ≠ West and both list ALL as enemies, they'll engage on sight:

flowchart LR
    E["🚛 BTR East<br/><i>patrol_east.json</i>"]
    W["🚛 BTR West<br/><i>patrol_west.json</i>"]
    P["🧍 Players"]
    E <-. "⚔️ war" .-> W
    E -- "🔴 hunts" --> P
    W -- "🔴 hunts" --> P
    style E fill:#7a2020,color:#fff
    style W fill:#20477a,color:#fff
    style P fill:#555,color:#fff
Loading

Important

The #1 reason two BTRs don't fight: they share the same Name. Two presets both named "Hostile" (the default) are the same faction and will ignore each other. Faction names are free text — "Red"/"Blue", "USMC"/"RU", anything — they just have to differ.

Combat notes

  • BTRs are immune to bullets by default (Health.BulletDamageMultiplier: 0), so the coaxial MG does nothing to another BTR. Only the cannon (via its explosion) damages them — make sure Turret.ExplosiveCannon is 1. See Health and Damage.
  • How many shells a BTR survives depends on Health.MaxHealth and Health.ArmorMultiplier. Lower them if you want faster, more decisive duels.

🤝 Common setups

Free-for-all (any different faction fights): give every preset a unique Name, leave Enemies as ["ALL"].

Allied convoy — different factions that don't fight each other but still hunt players:

// East BTR — treats West as a friend
"Faction": {
    "Name": "East",
    "AttackPlayers": 1,
    "Allies": ["West"]
}
// West BTR — treats East as a friend
"Faction": {
    "Name": "West",
    "AttackPlayers": 1,
    "Allies": ["East"]
}
flowchart LR
    E["🚛 BTR East"] <-. "🤝 allied" .-> W["🚛 BTR West"]
    E -- "🔴 hunts" --> P["🧍 Players"]
    W -- "🔴 hunts" --> P
    style E fill:#7a2020,color:#fff
    style W fill:#20477a,color:#fff
    style P fill:#555,color:#fff
Loading

Fights enemy bots but never other BTRs:

"Faction": {
    "Name": "East",
    "AttackOtherBTRs": 0,
    "Enemies": ["ALL"]
}

Use this when you want distinct factions (for markers/identity) whose BTRs coexist, while still fighting each other's infantry. Allies can't express this — it would also spare the bots.

Only specific factions are enemies: list them explicitly — anything not listed (and not an ally) is left alone.

"Faction": {
    "Name": "East",
    "Enemies": ["Bandits", "West"]
}

🤖 Working with Expansion eAI

If you run DayZ-Expansion-AI, the BTR reads a bot's faction from its Expansion group. Put the exact Expansion faction name in Enemies/Allies/Name to line them up (e.g. "East", "West", "Raiders").

  • No Expansion-AI installed? The faction system still works for players (via AttackPlayers) and BTR-vs-BTR (via Name). Bot-faction matching simply isn't in play.
  • The defenders that spawn on the wreck have their own eAI faction field (Defenders[].ExpansionFaction) — that is separate from this Faction block. See the Defenders section in Configuration Reference.

⚠️ The self-heal caveat

When the mod adds a new field to an already-existing config block, DayZ's JSON loader can write it back as 0/empty instead of its intended default (explained in How the Config Works). Two things to check the first time after updating:

  • AttackOtherBTRs may land as 0 on a preset that already had a Faction block — set it to 1 if you want BTR-vs-BTR.
  • Enemies may come out as [] — that's fine, empty is treated as ALL.

🧩 Troubleshooting

Symptom Likely cause
Two BTRs ignore each other Same Name, or one lists the other in Allies, or AttackOtherBTRs: 0.
BTRs shoot but deal no damage Normal for the coaxial (bullet immunity). Confirm Turret.ExplosiveCannon: 1 so the cannon can damage them.
BTR ignores enemy eAI bots Expansion-AI not installed, or the bot's faction is in Allies / not in Enemies.
Duels never finish MaxHealth too high / ArmorMultiplier too low — lower them.

More in FAQ and Troubleshooting.

Clone this wiki locally