9 pontos por GN⁺ 2025-11-22 | 1 comentários | Compartilhar no WhatsApp
  • 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

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

 
GN⁺ 2025-11-22
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

    • Eu não tenho quase nenhuma habilidade com Photoshop, então não fiz, mas queria colocar no meme do xkcd 2347 algo como “implementado por Fabrice Bellard meio dormindo só para provar que dava”
      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

    • Parece que também daria para fazer a mesma coisa com mkisofs
  • 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

    • Há o caso de Cross Code, um jogo feito em JS que foi portado para consoles. O processo está detalhado neste post de blog
    • Lembro que os SDKs do Nintendo 3DS e do Wii U tinham um framework semelhante ao Electron baseado em tecnologias web, mas isso foi descontinuado no Switch
      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

    • Parece que isso seria possível se combinado com FreeDVDBoot
    • A combinação FreeMcBoot no memory card + pendrive USB é um método popular. Também ajuda a reduzir o desgaste da unidade óptica
    • Para gravar um disco e rodar, é preciso hackear o console, mas também dá para usar USB. Talvez alguém só queira gravar pelo clima de disco de verdade
    • Também houve quem opinasse que seria melhor usar emulação de unidade óptica em vez de disco físico
  • Um projeto parecido usando QuickJS é o nx.js para Nintendo Switch

    • Atualmente esse projeto suporta apenas canvas2d, mas em teoria parece possível criar uma camada que converta jogos WebGPU ou WebGL para o 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

    • Mas como o requisito mínimo de memória do Chrome é 4 GB, para caber nos 32 MB de RAM do PS2 teria que ser reduzido para um centésimo e vinte e oito
  • 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

    • Eu gosto de Godot, mas ele não consegue rodar no PS2
    • Na verdade, compilar com Godot e exportar para PS2 não é algo simples