In 2010, Zipper Interactive shipped MAG on the PS3: 256 players on one map, organized into squads, platoons and companies with a working chain of command. Sony closed the studio in 2012 and turned the servers off in January 2014. Nothing has replaced it. OpenMAG is that game rebuilt from scratch, with the things that killed it fixed and a dedicated server you can run yourself, the way people run Minecraft servers.
8 soldiers make a squad, 4 squads a platoon, 4 platoons a company of 128. Squad leaders mark FRAGO objectives that pay double XP. Platoon leaders call scans and strikes. One Officer in Charge per side shapes the whole battle. Leader powers come from map assets you can destroy, so cutting the enemy's command is itself an objective. Every match feeds a persistent three-faction war.
MAG's gunplay, visuals and audio were "phoned in"; scale was its only hook. Faction lock split friends. Lone wolves drowned. Leader selection was opaque and vote-kick was abused. The population shrank and queues died. And when Sony switched the servers off, the game ceased to exist. OpenMAG puts gun feel before scale, lets parties pick a faction together, backfills with bots, and ships the server.
Full lore page → The Kessler Accord of 2031 bans nations from sending armed forces, manned or autonomous, beyond their borders. It says nothing about corporations. Three private military companies now fight each other off the map, under contract to the governments that outlawed war, over the three things that matter: compute, chip fabrication, and autonomy. Every match is a raid on a data center, a fab, or a drone works.
A defence-AI firm that bought an army. Low recoil, high rate of fire, light rounds, optics on everything. Many small, quiet drones. See first, shoot first; weak when the sensors go down.
Three national armies re-flagged as a corporation overnight. Heavy calibers, hard recoil, the widest roster. Few big armored drones. Close the distance, kill the sensors, make it a brawl.
The Pentagon's contractor, spun out. Balanced, reliable, by the book. One standard drone per platoon, always there. Strongest with vehicles and forward spawns.
Vehicle and drone availability scales with sector count. Small maps are pure infantry; big maps are combined arms. Every four-sector map also ships as a two-sector and a one-sector variant, so one map build serves three tiers. Drones are leader-called abilities and destroyable objectives, never something every player flies.
| Tier | Sectors | Players | Fight | Vehicles | Drones | Modes |
|---|---|---|---|---|---|---|
| Skirmish | 1 | 64 | infantry, one-on-one gunplay | none | none | Suppression, Sabotage |
| Battle | 2 | 128 | fronts, bunkers, asset belt | APCs | SL loitering munition, PL recon swarm | Acquisition, Interdiction |
| War | 4 | 256 | four sectors and a core, full command tree | APCs, helicopters, parachute plane, prototype vehicle | + PL strike, OIC heavy wing, jamming | Domination |
| Three-way | 3 | 96 | no assets, no strikes | spawn points only | none | Escalation |
MAG scored each mode separately, so a Sabotage win meant nothing to the big battle. In OpenMAG small-map wins feed big-map bonuses, and every week's skirmishes matter to Sunday's war.
XP, ribbons, one featured mode and map. Streaks. The reason to log in.
Win the 64 and 128 fights in a theatre and your faction enters that theatre's 256 battle next week with up to two strategic bonuses: a forward spawn pre-unlocked, an extra ability tier, the enemy's counter-drone battery already damaged. Capped, visible, decays. Never damage or health.
Only 256-player wins move map ownership. Standings reset each season; medals and veteran insignia carry; the story advances. The underdog faction gets an extra bonus slot until it wins a war.
Zipper built MAG's servers before its client. So do we, but the bots play the actual game: faction weapons with range falloff and reloads, buildings and walls that block shots, cover that bots dive behind when hit, 8-man squads following their leader's FRAGO, medics reviving, and objectives captured in MAG's order (burn-off towers → cooling towers → lettered objectives) that fill a damage bar and decide the match. Every run below is a real match from Harbor. Each one says what it was testing and what it found.
| Run | Added | Tested for | Found | Verdict |
|---|---|---|---|---|
| M1-1 | 256 bodies, hitscan, no cover | can the server carry it | 2 ms of a 33 ms tick, 126 kbps (snapshots were going out at 30 Hz by mistake) | load ok, bandwidth over |
| M1-2 | 20 Hz snapshot cadence | bandwidth target | 84 kbps per client at 256; 37 of 256 alive after a minute, bots far too lethal | M1 gate passed |
| M2-1 | weapons, cover, LOS, squads, medics, objectives | does a match get decided | 0 of 24 zones in 5 min: both sides stood on the same zone, capture netted to zero | stalemate |
| M2-2 | defenders hold 20 m behind the zone from cover; attackers form up inside the radius | same | 2 of 24 zones; attackers walk into defenders in cover and get farmed, 36 shots per down, 15% accuracy | attackers lose |
| M2-3 | real bullets: velocity, spread, line of sight, lag-compensated hit formula; bots use it too | server cost of ballistics; does combat still work | tick p99 0.5 ms after optimising the path test (15 ms before); 32% accuracy, TTK 0.7 s; still no captures | ballistics in |
| M2-4 | MAG spawn rules (bunkers break, rear spawn; attackers spawn on captured ground) + 15 min clock | does a match get decided | MINOR VICTORY for attackers at 12:57: 12 of 24 zones, 8 of 16 bunkers broken, 23% accuracy, TTK 0.2 s median. First bar tuning let one sector win alone at 7:23; now 4 zones take ~11 min | decided match |
| M2-5 | 3-D: capsule hitboxes with head / body / arms / legs (×1.8 / 1.0 / 0.7 / 0.75), aim pitch, bullet drop, 3-D line of sight, chest-high walls, faction armor and speed profiles | does the hit formula hold up in 3-D; what the client will get | First pass: 12% accuracy and legs everywhere, a hidden bug: weapon spread was 25 mrad (±3 m at 120 m). At 4–9 mrad: 46% accuracy, TTK 0.27 s (design target 0.3–0.5), probe zones head 6 / body 10 / arms 13 / legs 18, hit-reg 19 ms loopback. Match now undecided: accurate defenders behind chest-high walls stop every attack. Bandwidth 113 kbps at 20 Hz with z, delta compression is due | 3-D in · balance open |
| M2-6 | interiors: hollow buildings with doors and roof slabs, ladders onto roofs and bunkers, server halls with rack aisles as the lettered objectives (captured from inside), bots route through doors; client prediction; jump / sprint / crouch; first human playtests | does the map have places to go into and up onto, and does that unblock the stalemate | 15-min match: damage bar 75%, 6 of 24 zones (a whole sector including its hall), 4 of 16 bunkers broken, 34% accuracy, TTK 0.3 s. On the flat map the same bots sat at 0%. Ben played it: joined dead at first (fixed), shot his own squad (friendly-fire hint added), fired above the rifle's rate (rejected, matched) | match moves again |
What this is for: the bots exist to generate honest traffic, not to prove bots can beat bots. The next runs put the server on Harbor and real clients on the laptop, on Rome, and across the internet, and measure what matters for feel: round-trip time, jitter, packet loss, snapshot arrival, and how much of that prediction and lag compensation can hide. Those numbers go in this table next, per path.
This is the test that matters. A real UDP server runs the bot match; a probe client on another machine drives one soldier with inputs at 60 Hz and records what a player would feel: round trip from a key press to the snapshot that reflects it, the spacing of snapshots (jitter is what makes other players stutter), loss, and bandwidth. The server sits on Harbor. Probes run from Harbor itself, from this laptop over the LAN, and from Rome over the Nebula mesh, which crosses the real internet.
| Path | Round trip | What it stands for |
|---|---|---|
| laptop → Harbor | 4–6 ms | LAN. Best case; a player in the same house as the server. |
| laptop → Rome | 61–104 ms, avg 79 | Across the internet through the mesh. A normal player, with 20+ ms of jitter to hide. |
| Harbor → Rome | 54–101 ms, avg 70 | Same. If Rome is the front door, this is the hop it adds unless it only relays. |
| Run | Server | RTT p50 / p90 / p99 | Snapshot gap p50 / p99 | Jitter | Loss | kbps | Hit-reg p50 / p99 | Shots: hit / blocked / miss / rejected |
|---|---|---|---|---|---|---|---|---|
| loading probes.js… | ||||||||
Already public (Caddy, Docker, plabs.cloud). Serves this site, accounts, matchmaking and the war service, and is the address players connect to. It hands a match to a game server, on Harbor or anyone else's box. Rome never runs the simulation, so it stays cheap.
Where the server is built, benchmarked and run. Today's M1 ran here in WSL on one of 80 threads. It also carries Alexandria, the Minecraft servers and the model router, so the game gets a slice, not the box.
One Linux binary and one config file. Open a port and your friends join. If OpenMAG ever has official servers they run the same binary. If it never does, the game still works.
| # | Milestone | Done when | Status |
|---|---|---|---|
| M0 | Design + lore + engine decision | Ben signs off | v0.2, reviewers next |
| M1 | Server first: 256 bots, 4 sectors, relevance, telemetry | ≤100 kbps per client, 30 Hz with headroom | passed 2026-10-13 |
| M2 | Gun feel slice: 32v32 Suppression, one sector, 3 weapons per faction, Godot client on a real UDP link | playtest says shooting feels good | next |
| M3 | Sabotage 64 + squad layer, FRAGO, spawn waves, bunkers | a full match with win tiers | planned |
| M4 | Acquisition 128 + platoon layer, assets, APCs, forward spawns | two platoons per side | planned |
| M5 | Domination 256 + OIC, damage bar, helicopters, parachute | 256 humans and bots, one map | planned |
| M6 | Backend on Rome: accounts, progression, matchmaking with bots, war service, community server package | a stranger hosts a server and a party queues | planned |
| M7 | Alpha: 3 home maps per PMC (each in 3 tiers), Interdiction, Escalation | public test | planned |
Decided: Rust server, Godot 4 client, PC first, hostable by anyone, launch cap small and grown with the player base. Open: the license (no royalties), bot lethality and time-to-kill after humans play it, and the PMC names, which are placeholders.