Engine open source roda Counter-Strike a 60 FPS no PSP
A PocketJS disponibilizou no GitHub o OpenStrike , um FPS open-source que reproduz a jogabilidade de Counter-Strike no hardware do PSP , lançado em 2004. O projeto, licencia…

A PocketJS disponibilizou no GitHub o OpenStrike, um FPS open-source que reproduz a jogabilidade de Counter-Strike no hardware do PSP, lançado em 2004.
O projeto, licenciado sob MIT, entrega combate por rounds com bots, recuo de armas, tracers e suporte a mapas do formato GoldSrc, tudo em um único arquivo compatível com o Memory Stick do portátil.
O executável ocupa aproximadamente 6 MB, e o pico de uso de memória durante as partidas atinge entre 10 MB e 12 MB.
A versão 0.1 do OpenStrike permanece como projeto single-player com bots e rodadas de eliminação, mas ainda não inclui networking, fase de compra, múltiplas armas e outros recursos básicos.
Onde encontrar o projeto e como executá-lo
O código está no repositório pocket-stack/open-strike e oferece build para desktop via cargo run, além do arquivo EBOOT.PBP pronto para PSP com firmware personalizado (ou seja, desbloqueado) ou emuladores como o PPSSPP.
O projeto não distribui mapas nem texturas protegidos por direitos autorais da Valve, exigindo que o jogador forneça seus próprios arquivos BSP e WAD.
O time de desenvolvimento testou o funcionamento com 8 mapas clássicos da era GoldSrc, e qualquer mapa nesse formato funcionou corretamente.

O motor híbrido que combina Rust, TypeScript e SolidJS no portátil
O OpenStrike funciona por meio de três camadas diferentes. O motor pesado roda em Rust e cuida da física, colisões, inteligência artificial dos bots e renderização por meio do Pocket3D.
As regras de round, pontuação, tabelas de armas e o comportamento tático dos bots são executados em TypeScript. E, por último, mas não menos importante, o HUD inteiro é um componente construído com SolidJS e Tailwind, inspecionável via DevTools durante a execução.
O interpretador QuickJS, selecionado por ser mais leve, processa esse código web moderno diretamente no PSP.
Rust e JavaScript se comunicam uma vez por frame: o motor envia o estado atual e os eventos, e o lado interpretado responde com comandos.
O tempo de processamento do JavaScript ficou em torno de 2 ms por quadro depois que os sinais do Solid foram ajustados para atualizar apenas os elementos modificados na interface.
| Especificação | Dado técnico |
|---|---|
| Plataforma alvo | PSP-1000 (hardware original) |
| CPU e clock | MIPS a 333 MHz (sem JIT) |
| Memória total | 32 MB |
| Memória disponível para o programa | 24 MB |
| Pico de uso de memória em jogo | 10 MB a 12 MB |
| Tamanho do executável | Aproximadamente 6 MB |
| Resolução nativa | 480 x 272 pixels |
| GPU | Função fixa, sem shaders programáveis |
| Taxa de quadros | 60 FPS travados |
| Custo do JavaScript por frame | Cerca de 2 ms |
| Formato de mapa suportado | BSP da era GoldSrc |
| Formato de textura após conversão | CLUT8 (paleta de 8 bits) |
| Licença | MIT |
Como o projeto cabe nos 32 MB de RAM do PSP
O processo de conversão de mapas aplica otimizações agressivas em tempo de build. Um cooker transforma as texturas originais no formato CLUT8 com paleta de 8 bits, projeta a iluminação diretamente nas cores dos vértices e quantiza posições para 16 bits.
A estrutura de visibilidade pré-calculada dos mapas BSP, tecnologia de 1999 conhecida como PVS, continua sendo usada para evitar o processamento de geometria fora do campo de visão. O renderizador tira proveito do hardware gráfico de função fixa do portátil.

Leia mais
- Jogo de PSP foi central no sucesso do Manchester United, afirma Wayne Rooney
- Novo portátil para emulação da GameMT parece um PSP e vem com “dial” de performance
- Portátil retrô GameMT E3 emula até PSP e suporta cartuchos originais do Game Boy Advance!
Sistema de mods acessível para quem já escreveu React ou Solid
As regras do jogo estão no arquivo rules.ts e o HUD no arquivo hud.tsx. Alterar qualquer um desses arquivos pode ser considerado como um mod, já que o motor não concede privilégios ao código base que não estejam disponíveis para modificações externas.
Qualquer pessoa familiarizada com React ou Solid consegue modificar comportamentos do jogo sem recompilar o componente em Rust.
Para finalizar, ressaltamos que o blog do PocketJS documenta o processo completo de desenvolvimento, abordando desde as decisões sobre o loop de 16,7 ms até as técnicas que permitiram a um código JavaScript interpretado ser compatível com um aparelho de 2004, e isso sem degradar o desempenho.
E aí? O que achou da novidade? Compartilhe o seu ponto de vista nesta publicação e continue acompanhando o Adrenaline!
Fontes: GitHub | X (Antigo Twitter) |
