Foxhole Combat Lab is an open-source armoured-combat research simulator for Foxhole. It combines a deterministic .NET simulation engine, Monte Carlo tank duels, a multilingual WPF desktop application, a standalone Blazor WebAssembly application, and an interactive penetration laboratory.
The goal is not to declare one tank universally “best.” The goal is to make combat assumptions explicit, repeatable, and easy to compare.
Important
This is an unofficial community project. It is not affiliated with or endorsed by Siege Camp. The current catalogue targets Foxhole 1.65.
| Area | Capabilities |
|---|---|
| Vehicle catalogue | 37 tanks for duel simulation plus 24 early armoured fighting vehicles, with health, Tank Armour, penetration range, resistance type, subsystems, mobility, repair, and weapon-installation data |
| Weapons and ammunition | 28 ammunition profiles, 12 damage types, three vehicle resistance profiles, independent weapon magazines, per-round or full-magazine reloads, fractional action timers, and weapon damage modifiers |
| Field weapons | 16 push guns available as penetration-lab shot sources |
| Duel simulation | 1 × 1 cross-faction battles with all mounted weapons firing independently |
| Mass comparison | One selected vehicle versus an entire opposing catalogue, across four configurable armour scenarios |
| Interactive laboratory | Live penetration chance, range and angle modifiers, damage, armour wear, expected shots, DPM, disable/destruction time, and subsystem critical chances |
| Built-in reference | Searchable tables for ammunition, resistances, tanks, mechanics, and links to the Official Foxhole Wiki |
| Localization | Russian, English, and Simplified Chinese with persisted application settings |
| Web application | Static, serverless Blazor WebAssembly build with duel, mass comparison, laboratory, reference, local settings, and CSV export |
Each duel advances through a configurable outer tick. Weapon events retain their fractional offsets inside that tick, so a 1.5-second firing cycle is not rounded to two seconds.
flowchart LR
A["Select tanks, weapons and armour"] --> B["Advance distance and weapon timers"]
B --> C["Schedule every ready weapon"]
C --> D["Calculate penetration chance"]
D --> E{"Penetrated?"}
E -- "No" --> B
E -- "Yes" --> F["Apply resistance and health damage"]
F --> G["Wear Tank Armour"]
G --> H{"Tank destroyed?"}
H -- "No" --> B
H -- "Yes" --> I["Aggregate duel statistics"]
For ammunition that interacts with Tank Armour, the implemented penetration model is:
P = clamp(M × max(Pbase, min(armour stripped %, Pmax)) + R + A, 0, 100)
Pbase— target vehicle's base penetration chance;Pmax— maximum armour-derived chance before external modifiers;M— ammunition penetration multiplier;R— close-range bonus, when the ammunition supports it;A— angle bonus, when the ammunition supports it.
A successful hit applies the target's damage resistance to raw damage. The result damages health and, for armour-degrading ammunition, wears Tank Armour. The next shot therefore observes the target's new armour state and may receive a higher penetration chance.
Damage resistance and Tank Armour are modelled independently. A target may be Unarmoured, Light Armour, or Heavy Armour and may have Tank Armour or no Tank Armour at all. The current reference catalogue uses this distinction for armoured cars, tankettes, landing APCs, half-tracks, and the armoured rocket platform. A Light Armour resistance profile therefore never implies that Tank Armour is absent.
Three half-track profiles have an empty detachable tripod mount instead of a fictional built-in weapon. Their compatible mounted weapons are stored explicitly, ready for a later configurable-loadout UI.
Every mounted weapon owns an independent runtime state:
Ready → Firing cooldown → Ready
└── empty/partial magazine → Reloading → Ready
The engine supports both complete-magazine reloads and per-round loading, which is required for weapons such as the Gallagher Brigand's magazine-fed cannon. Weapons sharing the same tank do not share cooldowns or magazines.
See Architecture and simulation notes for the detailed pipeline and modelling boundaries.
Choose one Warden and one Colonial vehicle, enable the weapons to include, set distance and angle variance, and run the same matchup across four saved armour scenarios. The default scenarios are:
- Warden 100% / Colonial 100%;
- Warden 100% / Colonial 60%;
- Warden 60% / Colonial 100%;
- Warden 60% / Colonial 60%.
If enabled, the tank with the longer selected primary range receives one free opening shot before the regular timeline begins.
Choose a subject faction, a subject vehicle, and an opponent catalogue:
- main battle tanks;
- Battle Tanks and Super Tanks;
- all armoured vehicles in the tank catalogue;
- Armoured Fighting Vehicles.
The simulator runs every cross-faction matchup and ranks the results by the subject tank's mean win rate. Opponents can be restricted to armoured-combat ammunition, excluding weapons such as Tremola launchers. The AFV roster instead uses every fixed weapon, including machine guns and light armament, because those damage its Light Armour targets. It contains 12 vehicles from the opposing faction (24 in total); base vehicles with an empty tripod mount or no fixed armament remain unarmed.
The laboratory is a live, single-shot analysis surface:
- rotate the attack direction around the target;
- move between front, side, and rear hit zones;
- adjust distance, target health, and remaining Tank Armour;
- fire a standalone ammunition type, a fixed vehicle weapon, or a field weapon;
- inspect the complete penetration breakdown;
- compare raw and resisted damage;
- estimate armour wear and the next-shot penetration chance;
- estimate penetrations, shots, DPM, and time to disable or destroy;
- inspect track, fuel, and turret/cannon critical chances.
The built-in Wiki window also exposes damage-type icons, sortable numeric tank data, canonical source links, and the complete local catalogue. The laboratory can use all 61 catalogued armoured vehicles as targets and the fixed weapons of all 56 armed profiles as shot sources. All 24 early AFVs can now participate in 1 × 1 duels. When the AFV mass roster is selected, its 12 same-faction AFVs are also added to the subject selector alongside the faction's tanks.
Download the newest version from GitHub Releases:
win-x64— recommended for nearly all Intel and AMD Windows computers;win-arm64— for Windows on ARM devices.
The ZIP packages are self-contained: extract the selected archive and run
FoxholeCombatLab.exe; a separate .NET installation is not required.
SHA256SUMS.txt contains checksums for verifying the downloads.
Note
The project is not code-signed yet, so Windows SmartScreen may show an “unknown publisher” warning. Download builds only from this repository and verify the SHA-256 checksum when authenticity matters.
- Windows 10 or Windows 11;
- .NET 8 SDK.
git clone https://github.com/stictt/Foxhole-Combat-Lab.git
cd Foxhole-Combat-Lab
dotnet build .\FoxholeCombatLab.sln -c Releasedotnet run --project .\src\FoxholeCombatSim.Desktop -c Releasedotnet run --project .\src\FoxholeCombatSim.Console -c Release
dotnet run --project .\src\FoxholeCombatSim.Console -c Release -- --iterations 1000
dotnet run --project .\src\FoxholeCombatSim.Console -c Release -- --tank "Silverhand"
dotnet run --project .\src\FoxholeCombatSim.Console -c Release -- --output C:\Reportsdotnet run --project .\src\FoxholeCombatSim.Web -c Release
.\tools\Publish-Web.ps1The packaging script creates
artifacts/packages/FoxholeCombatLab-Web-CloudflareDrop.zip. Its root contains
index.html, so the archive can be dropped directly onto
Cloudflare Drop. The application performs
all calculations in the browser, needs no API or database, stores settings in
localStorage, and never sends simulation inputs to a server.
dotnet run --project .\tests\FoxholeCombatSim.Tests -c Release
dotnet run --project .\tests\FoxholeCombatSim.Desktop.Tests -c ReleaseThe current suite contains 45 core simulation checks and 14 desktop, settings, localization, and catalogue checks.
The model is intended to be inspectable rather than opaque. Important current boundaries are documented instead of hidden:
- duel simulations do not yet apply subsystem-disable effects to behaviour;
- the distance control sets the start of the encounter; after the optional free range shot, the fight closes abstractly to the shorter-ranged armed vehicle's maximum range, while further movement and disengagement are not simulated;
- physical hitboxes and projectile travel are abstracted;
- the duel angle input is a penetration bonus range, while the laboratory's circular direction control is an approximation of hit-zone geometry;
- artillery deployment, fire damage over time, and the Tremola fuse are not simulated yet;
- detachable tripod weapons are represented as compatible empty mounts and cannot yet be selected as a vehicle loadout; their base vehicles therefore remain unarmed in duel and mass comparison;
- catalogue values can become stale after Foxhole updates.
Please treat results as research estimates, not guaranteed live-server outcomes. Corrections backed by reproducible sources are welcome.
src/
FoxholeCombatSim/ shared domain model, catalogues, simulation, reports
FoxholeCombatSim.Console/ command-line research wrapper
FoxholeCombatSim.Desktop/ WPF UI, localization, settings, Wiki and lab
FoxholeCombatSim.Web/ static Blazor WebAssembly UI
tests/
FoxholeCombatSim.Tests/ core mechanics checks
FoxholeCombatSim.Desktop.Tests/ desktop/catalogue/localization checks
docs/
ARCHITECTURE.md simulation and project architecture
The catalogue stores source URLs and verification metadata with vehicle profiles. Core reference pages include:
Corrections, new mechanics, tests, translations, and UI improvements are welcome. Read CONTRIBUTING.md before opening a pull request.
Original source code and project documentation are available under the MIT License. Foxhole names, data, and Wiki-derived assets retain their respective ownership and licensing terms. See THIRD_PARTY_NOTICES.md.



