- Com o ambiente open source AthenaEnv, agora é possível executar código JavaScript no PlayStation 2
- Esse ambiente incorpora o motor QuickJS para interpretar JavaScript e fornece APIs para desenvolvimento de jogos como renderização, entrada, som e manipulação de arquivos
- O desenvolvedor pode criar um jogo apenas com a estrutura básica de arquivos como main.js, athena.ini e athena.elf, e executá-lo no emulador PCSX2
- O projeto finalizado pode ser empacotado como um arquivo .iso e distribuído como um único arquivo, com um processo de conversão de zip → iso apresentado para isso
- É um caso que mostra a combinação entre desenvolvimento para consoles retrô e tecnologias web, sugerindo a expansão das possibilidades de desenvolvimento de jogos com JavaScript
Visão geral do projeto AthenaEnv
- O AthenaEnv é um ambiente de execução de JavaScript para PS2, oferecendo um ambiente de desenvolvimento centrado em APIs, e não um engine de jogo tradicional
- Internamente, ele modifica e incorpora o QuickJS para interpretar código JavaScript
- Foi estruturado para que um programa nativo de PS2 (escrito em C) execute código JavaScript
- As APIs fornecidas incluem renderização, carregamento de assets, tratamento de entrada, entrada e saída de arquivos e reprodução de som
- O nível de abstração é semelhante ao de p5.js ou Raylib, então itens como detecção de colisão e gerenciamento de cena precisam ser implementados manualmente
Como executar jogos em JavaScript no PS2
- A execução usa o emulador PCSX2, e é necessário ativar a opção “Enable host filesystem” nas configurações
- A pasta do projeto inclui os seguintes arquivos
athena.elf: executável do Athena
athena.ini: configuração do ponto de entrada (main.js) e de elementos como o logo de boot
main.js, src/, assets/: código do jogo e recursos
- Ao executar
athena.elf no emulador, o jogo inicia, e alterações no código JavaScript podem ser aplicadas imediatamente com um reset
Procedimento para gerar um arquivo .iso
- É explicado como reunir o projeto em uma única imagem ISO para distribuição
- Arquivos obrigatórios:
athena.elf, athena.ini, main.js, src/, ATHA_000.01, SYSTEM.CNF
- Selecione todos os arquivos, compacte em zip e depois use o site mconverter.eu para converter em iso
- Depois da conversão, é possível executar sem a opção “Enable host filesystem”
- Para automatizar a conversão, é apresentada a ferramenta de linha de comando GENISO, baseada em Python (https://github.com/scottvr/GENISO)
- Ela permite converter zip em iso sem dependências externas
Exemplo Hello World
- No exemplo básico, são implementados carregamento de fonte e imagem, estrutura do loop do jogo, animação de sprites, tratamento de entrada e renderização de texto
- São usados módulos embutidos do Athena como
Screen, Font, Image e Pads
- O método
Screen.display() executa o loop quadro a quadro
Pads.get(0) detecta a entrada do controle
- Propriedades do sprite como
startx e endx controlam a animação por frame
font.print() exibe FPS ou textos
- A inversão do sprite é feita atribuindo um valor negativo à width, e é necessário calcular um offset para corrigir a posição
Suporte a 3D e desenvolvimento futuro
- O Athena suporta tanto 2D quanto 3D, mas a versão v4, focada em 3D, está em desenvolvimento
- Atualmente, predominam exemplos voltados a 2D, com alguns demos em 3D
- O código e materiais de apoio são fornecidos pelo repositório oficial no GitHub e pela comunidade no Discord
Conclusão
- O AthenaEnv é um ambiente inovador que permite criar jogos de PS2 usando apenas JavaScript
- Ele permite que até desenvolvedores web acessem o desenvolvimento de jogos para consoles retrô, mostrando um caso de expansão e compatibilidade do ecossistema JavaScript
1 comentários
Comentários no Hacker News
Parece que os projetos criados por Fabrice Bellard têm um impacto realmente abrangente
É incrível que, graças ao QuickJS, tenha sido possível reviver homebrews em sistemas antigos como o PS2 por meio do AthenaEnv
Em algum ponto da cadeia de dependências de inúmeros projetos FOSS, há código dele
Ao ver o autor mencionar o incômodo de usar um site que converte ZIP em ISO, fiz eu mesmo um script Python multiplataforma sem dependências externas
Dá para ver em ZIP2ISO.py
Achei impressionante ele ter sido “vibe-coded” com Gemini3 Pro sem nem ler a especificação ISO9660
O AthenaEnv é interessante. Parece ser estruturado usando o QuickJS como interpretador de JS e encapsulando as bibliotecas nativas do sistema do PS2
Fiquei curioso se existe algum projeto parecido para consoles modernos (Switch/2, PS5, Xbox) que permita distribuir jogos JS Canvas (WebGPU/WebGL)
Como os SDKs de console estão sob NDA, quase não há informação pública, e a maioria dos jogos usa Unreal ou Unity
No PC ou no mobile, é relativamente simples porque dá para rodar facilmente com Electron ou WebView
O applet de navegador WebKit do Switch tem o JIT desativado, então serve só para usos limitados, como o e-manual
Fiquei me perguntando se, para rodar isso em um console de verdade, seria preciso gravar a ISO em um disco
Um projeto parecido usando QuickJS é o nx.js para Nintendo Switch
Só que trocar um motor v8/JIT por QuickJS provavelmente traria uma grande perda de desempenho
Agora nem mesmo o PS2 consegue escapar das garras do JavaScript
AthenaEnv é o sucessor do Enceladus, baseado em Lua, feito pelo mesmo desenvolvedor
Ele é muito usado não só para jogos, mas também para apps homebrew; no Enceladus há exemplos como RETROLauncher e POPSLoader, e no Athena há o OSD-XMB
Pensei se não seria possível criar um navegador web para PS2 e abrir o jogo como se fosse um site
Era esse tipo de coisa que eu estava procurando, projeto muito legal, obrigado
As pessoas fazem de tudo para não usar .gdscript ou Godot