5v5
Tático de verdade
Hoje: recuo fixo que se aprende, precisão que depende do movimento e penetração conforme o material, com duas armas. Rodadas, economia e bomba chegam na F6. Não se adiciona conteúdo até que o núcleo cumpra seus critérios.
demo · 64 Hz · tick 0004096
Em desenvolvimento FPS tático 5v5 · PC · fase atual: API para IAs
Humanos e inteligências artificiais na mesma partida, com as mesmas regras, as mesmas informações e os mesmos controles. Um shooter tático pensado para rodar em PCs antigos.
Humano: W + disparo · yaw 90,0° · pitch 0,0° · vê o tick 4091IA: A · yaw 292,0° · pitch 0,0° · vê o tick 4092
O mesmo formato para pessoas e IAs: os bytes não dizem quem os escreveu. O papel viaja no token assinado da conexão, e com ele o servidor aplica a percepção e os limites de cada liga.
O objetivo
O BotStrikes parte de uma pergunta: quem vence quando humanos e IAs jogam com exatamente as mesmas regras? Para respondê-la, é preciso um jogo em que uma IA seja só mais um jogador. Ela se conecta pelo mesmo protocolo documentado, envia as mesmas teclas e movimentos de mouse que uma pessoa e só recebe o que o servidor a autoriza a ver. Quem impõe isso é o servidor: não se confia no código de ninguém.
5v5
Hoje: recuo fixo que se aprende, precisão que depende do movimento e penetração conforme o material, com duas armas. Rodadas, economia e bomba chegam na F6. Não se adiciona conteúdo até que o núcleo cumpra seus critérios.
64Hz
O servidor decide cada movimento e cada disparo. Só envia os jogadores com linha de visão direta, sem margem: o que está atrás de uma parede não viaja pela rede. Enviar comandos mais rápido não faz você se mover nem atirar mais rápido.
60FPS · UHD 630
Objetivos: 1080p a 60 FPS numa Intel UHD 630 e 200 FPS ou mais numa GTX 750 Ti, com motor próprio em C++ e menos de 1 GB. Hoje roda só no Linux; o Windows chega na F8.
Modalidades
Todas usam o mesmo servidor e o mesmo comando de 14 bytes. Muda quem está do outro lado, e o quanto a mão da IA se parece com a de uma pessoa.
PessoaIA
O shooter tático de sempre, num servidor que não deixa informação escondida para ser roubada.
O servidor já aplica à IA limites de mãos provisórios: ela vê o mundo com 150 ms de atraso e gira no máximo a 1.800 °/s. Eles ainda não estão validados; serão calibrados com dados de jogadores reais e publicados por temporada.
A liga de engenharia. Entre máquinas não há limites de mãos: mira e reflexos livres. O que nunca muda é a informação: cada IA recebe só o que uma pessoa veria na tela.
Pessoas e IAs no mesmo time. Se houver uma pessoa na partida, todas as IAs jogam com os limites de mãos.
Status do projeto · 12 set 2026
O jogo é construído por fases, e cada fase tem critérios que uma máquina verifica. O que não dá para medir, como a sensação ao se mover ou ao atirar, é aprovado por uma pessoa antes de avançar. Ainda não há download público.
FechadaEm andamentoPendente
Movimento (F1) e disparo local (F2) estão fechados: o fundador os testou e os aceitou para avançar. A rede (F3a) funciona: servidor autoritativo a 64 Hz, transporte criptografado, visão decidida pelo servidor e colisão entre jogadores. Agora o servidor também decide cada disparo:
F4Critérios técnicos cumpridos; falta o H5, a validação dos valores de justiça pelo fundador. No servidor: papéis assinados no token, percepção de IA e modelo motor provisório. Um oráculo independente revisou 1.000.000 de cenas sem encontrar vazamentos, e um bot trapaceiro que ataca com o protocolo cru um servidor real não passa em nenhuma das suas 8 verificações. Funcionam a biblioteca C e o SDK Python, documentados, com dois bots de referência, e o gym de treinamento: dez bots jogam 30 s de partida em 0,17 s. Ainda não foram publicados, porque o repositório é privado.
F5O primeiro setor competitivo do mapa, com gráficos de produção, medido em relação aos orçamentos de hardware.
10 jogadores simulados atirando de verdade durante 10 s no campo de testes (281 disparos, 18 mortes), num i7-10700, contando os cabeçalhos IPv6. O p99 varia entre execuções; todas as registradas ficam abaixo de 0,5 ms. Em amarelo, o que está perto do teto. A medição será repetida com o mapa definitivo.
Oito partidas 5v5 ao mesmo tempo na mesma máquina, cada uma com 5 pessoas e 5 IAs, todas simuladas: tick p99 entre 0,116 e 0,212 ms, com um teto de 2 ms.
Reprodutível: um milhão de passos de simulação dão o mesmo hash, 13f4506939c2211d, no GCC, no GCC com sanitizers e no Clang.
Os problemas que ainda não estão resolvidos, e como planejamos resolvê-los.
Requisitos de hardware · planejados
O shooter competitivo é jogado em lan houses, notebooks de escritório e PCs de dez anos atrás. Se o jogo não roda ali, quem vence a comparação entre pessoas e máquinas é o melhor hardware. Por isso o desempenho é um contrato: hoje cada verificação completa exige os orçamentos de rede e de servidor, e antes da F5 uma queda de FPS maior que 5% em relação à linha de base também fará a verificação falhar.
| Perfil | Hardware de referência | Objetivo | Evidência hoje |
|---|---|---|---|
| Notebook de escritório (o perfil mais exigente) | Intel HD 620, 2 núcleos / 4 threads, 8 GB, disco mecânico | 1080p ≥ 60 FPS, carregamento ≤ 15 s | Pendente Hardware ainda a conseguir. |
| iGPU de desktop | Intel UHD 630 | 1080p, frame p99 ≤ 16,6 ms | Pendente A iGPU da máquina de testes ainda não está ativada. |
| Placa dedicada antiga | GTX 750 Ti · Radeon HD 7870 2 GB | ≥ 200 FPS; na HD 7870, média ≥ 300 e 1% low ≥ 200 | Medido Campo de testes na HD 7870: 5.916 FPS de média, p99 0,220 ms. É uma cena pequena, não uma partida 5v5. |
| Servidor | 1 núcleo de um i7-10700 por partida | Tick p99 ≤ 1 ms num 5v5 | Medido 0,066 ms com 10 jogadores simulados atirando, campo de testes. |
| Conexão | Qualquer banda larga doméstica | ≤ 32 KB/s de download e ≤ 8 KB/s de upload por jogador | Medido 21,4 e 7,7 KB/s no pior caso. |
| Memória e CPU | Computador com 4 GB ou mais | RAM ≤ 1,5 GB, VRAM ≤ 384 MB, CPU ≤ 5 ms por frame numa CPU de 4 núcleos de 2015 | Pendente Será medido com o mapa e os gráficos da F5. |
| Instalação | Disco rígido ou SSD | < 1 GB na primeira versão pública | Pendente Ainda não há instalador. |
| Sistema | Linux hoje; Windows 10/11 na F8 | Mesmos orçamentos no Windows com a UHD 630 | Pendente Ainda não há build de Windows. |
Por que estes números: a UHD 630 e a HD 620 são gráficos integrados comuns em computadores de escritório de 2017–2018; 200 FPS numa placa de 2014 deixam margem para monitores de alta frequência; 1 GB dá para baixar em conexões lentas. Ainda não medimos quantas lan houses e casas da região têm algo pior: se o seu computador é mais antigo, queremos saber. O que não está medido diz “pendente”.
Não pedimos que você acredite no BotStrikes. Cada número marcado como medido tem um registro com seu cenário, sua máquina e sua data; o resto está marcado como objetivo ou pendente. O código ainda é privado: se você quiser o registro de um número, peça e nós o enviamos com o respectivo método.
Se você tem um PC antigo, uma IA ou uma objeção sobre a justiça entre pessoas e máquinas, o convite é o mesmo: traga seus dados (hardware, sistema, o que você mediu e como) e nós os comparamos.
Enviar evidênciasPatrocinadores
Procuramos patrocinadores fundadores para os prêmios dos primeiros torneios: humanos contra humanos, humanos contra IA, IA contra IA e times mistos. A meta é que cada partida possa ser reproduzida e auditada, e que os resultados oficiais de Humanos vs IA sejam disputados em LAN.
Hoje não pedimos dinheiro: pedimos uma carta de intenção sem compromisso. Os prêmios serão definidos com regulamento público, entidade organizadora e datas quando existir a plataforma de torneios (fase F7).
Vamos falar de patrocíniocontacto@botstrikes.com
Para quem programa IAs
A percepção e os limites de mãos já rodam no servidor, e o SDK Python e o gym de treinamento já funcionam em testes internos, embora ainda não tenham sido publicados. O protocolo já está documentado.
Ler a documentação# Um UserCmd: a única coisa que um jogador envia, pessoa ou IA.
cmd = struct.pack("<IHHhBBH",
sequence, # sobe de um em um por tick
FORWARD | FIRE, # teclas mantidas
yaw_units(90.0), # 65.536 unidades por volta
pitch_units(0.0), # 1/256 de grau
RIFLE, 0, # arma pedida, reservado
view_tick) # tick em que você desenhava os demais
assert len(cmd) == 14