5v5
Truly tactical
Today: fixed, learnable recoil, accuracy that depends on movement, and penetration by material, with two weapons. Rounds, economy and the bomb arrive in F6. No content is added until the core meets its criteria.
demo · 64 Hz · tick 0004096
In development 5v5 tactical FPS · PC · current phase: API for AIs
Humans and artificial intelligences in the same match, under the same rules, with the same information and the same controls. A tactical shooter designed to run on old PCs.
Human: W + fire · yaw 90.0° · pitch 0.0° · sees tick 4091AI: A · yaw 292.0° · pitch 0.0° · sees tick 4092
The same format for people and AIs: the bytes don’t say who wrote them. The role travels in the connection’s signed token, and with it the server applies each league’s perception and limits.
The goal
BotStrikes starts from a question: who wins when humans and AIs play under exactly the same rules? Answering it takes a game where an AI is just another player. It connects through the same documented protocol, sends the same keys and mouse movements as a person, and only receives what the server authorizes it to see. The server enforces this: nobody’s code is trusted.
5v5
Today: fixed, learnable recoil, accuracy that depends on movement, and penetration by material, with two weapons. Rounds, economy and the bomb arrive in F6. No content is added until the core meets its criteria.
64Hz
The server decides every movement and every shot. It only sends players in direct line of sight, with no margin: what is behind a wall does not travel over the network. Sending commands faster does not move or shoot faster.
60FPS · UHD 630
Targets: 1080p at 60 FPS on an Intel UHD 630 and 200 FPS or more on a GTX 750 Ti, with an in-house C++ engine and under 1 GB. Today it runs only on Linux; Windows arrives in F8.
Modes
All of them use the same server and the same 14-byte command. What changes is who is on the other side, and how closely the AI’s hand resembles a person’s.
PersonAI
The classic tactical shooter, on a server that leaves no hidden information to steal.
The server already applies provisional hand limits to the AI: it sees the world with a 150 ms delay and turns at most at 1,800 °/s. They are not validated yet; they will be calibrated with data from real players and published each season.
The engineering league. Between machines there are no hand limits: aim and reflexes are unrestricted. What never changes is the information: each AI receives only what a person would see on their screen.
People and AIs on the same team. If there is a person in the match, all AIs play with the hand limits.
Project status · Sep 12, 2026
The game is built in phases, and each phase has criteria that a machine verifies. What cannot be measured, such as how moving or shooting feels, is approved by a person before moving on. There is no public download yet.
ClosedIn progressPending
Movement (F1) and local shooting (F2) are closed: the founder tested them and accepted them to move forward. The network (F3a) works: authoritative server at 64 Hz, encrypted transport, visibility decided by the server and collision between players. Now the server also decides every shot:
F4Technical criteria met; H5, the founder’s validation of the fairness values, is still pending. On the server: roles signed in the token, AI perception and the provisional motor model. An independent oracle reviewed 1,000,000 scenes without finding leaks, and a cheating bot that attacks a real server with the raw protocol gets past none of its 8 checks. The C library and the Python SDK work, documented and with two reference bots, and so does the training gym: ten bots play 30 s of a match in 0.17 s. They are not published yet, because the repository is private.
F5The first competitive sector of the map, with production graphics, measured against the hardware budgets.
10 simulated players actually shooting for 10 s on the test range (281 shots, 18 deaths), on an i7-10700, counting IPv6 headers. The p99 varies between runs; all recorded runs stay below 0.5 ms. In yellow, what is close to the cap. It will be repeated with the final map.
Eight 5v5 matches at once on the same machine, each with 5 people and 5 AIs, all simulated: tick p99 between 0.116 and 0.212 ms, with a cap of 2 ms.
Reproducible: one million simulation steps produce the same hash, 13f4506939c2211d, on GCC, GCC with sanitizers and Clang.
The problems that are not solved yet, and how we plan to solve them.
Hardware requirements · planned
Competitive shooters are played in internet cafés, on office laptops and on ten-year-old PCs. If the game doesn’t run there, the comparison between people and machines is won by the best hardware. That is why performance is a contract: today every full verification enforces the network and server budgets, and before F5 an FPS drop greater than 5 % against the baseline will also break the verification.
| Profile | Reference hardware | Target | Evidence today |
|---|---|---|---|
| Office laptop (the most demanding profile) | Intel HD 620, 2 cores / 4 threads, 8 GB, hard disk drive | 1080p ≥ 60 FPS, load ≤ 15 s | Pending Hardware still to be obtained. |
| Desktop iGPU | Intel UHD 630 | 1080p, frame p99 ≤ 16.6 ms | Pending The test machine’s iGPU is not enabled yet. |
| Old dedicated GPU | GTX 750 Ti · Radeon HD 7870 2 GB | ≥ 200 FPS; on the HD 7870, average ≥ 300 and 1 % low ≥ 200 | Measured Test range on the HD 7870: 5,916 FPS average, p99 0.220 ms. It is a small scene, not a 5v5 match. |
| Server | 1 core of an i7-10700 per match | Tick p99 ≤ 1 ms in a 5v5 | Measured 0.066 ms with 10 simulated players shooting, test range. |
| Connection | Any home broadband | ≤ 32 KB/s download and ≤ 8 KB/s upload per player | Measured 21.4 and 7.7 KB/s in the worst case. |
| Memory and CPU | Machine with 4 GB or more | RAM ≤ 1.5 GB, VRAM ≤ 384 MB, CPU ≤ 5 ms per frame on a 4-core CPU from 2015 | Pending It will be measured with the F5 map and graphics. |
| Installation | Hard drive or SSD | < 1 GB in the first public version | Pending There is no installer yet. |
| System | Linux today; Windows 10/11 in F8 | Same budgets on Windows with the UHD 630 | Pending There is no Windows build yet. |
Why these numbers: the UHD 630 and the HD 620 are integrated graphics common in office machines from 2017–2018; 200 FPS on a 2014 card leaves headroom for high-refresh-rate monitors; 1 GB can be downloaded on slow connections. We have not yet measured how many internet cafés and homes in the region have something worse: if your machine is older, we want to know. What is not measured says “pending”.
We don’t ask you to believe in BotStrikes. Every figure marked as measured has a record with its scenario, its machine and its date; the rest is marked as a target or pending. The code is still private: if you want the record for a figure, ask for it and we will send it to you with its method.
If you have an old PC, an AI or an objection about fairness between people and machines, the invitation is the same: bring your data (hardware, system, what you measured and how) and we compare them.
Send evidenceSponsors
We are looking for founding sponsors for the prizes of the first tournaments: humans against humans, humans against AI, AI against AI and mixed teams. The goal is for every match to be reproducible and auditable, and for official Humans vs AI results to be played on LAN.
Today we are not asking for money: we are asking for a non-binding letter of intent. Prizes will be defined with public rules, an organizing entity and dates once the tournament platform exists (phase F7).
Let’s talk sponsorshipcontacto@botstrikes.com
For people who program AIs
Perception and hand limits already run on the server, and the Python SDK and the training gym already work in internal tests, although they are not published yet. The protocol is already documented.
Read the documentation# A UserCmd: the only thing a player sends, person or AI.
cmd = struct.pack("<IHHhBBH",
sequence, # goes up by one each tick
FORWARD | FIRE, # held keys
yaw_units(90.0), # 65,536 units per turn
pitch_units(0.0), # 1/256 of a degree
RIFLE, 0, # requested weapon, reserved
view_tick) # tick at which you were drawing the others
assert len(cmd) == 14