- AthenaEnv adlı açık kaynaklı ortam sayesinde PlayStation 2 üzerinde JavaScript kodu çalıştırmak mümkün hale geliyor
- Bu ortam, QuickJS motorunu gömülü olarak kullanarak JavaScript'i yorumluyor ve render, girdi, ses, dosya işleme gibi oyun geliştirme API'leri sunuyor
- Geliştiriciler, yalnızca main.js, athena.ini, athena.elf gibi temel dosya yapısıyla oyun yazabiliyor ve bunu PCSX2 emülatöründe çalıştırabiliyor
- Tamamlanan proje, .iso dosyası olarak paketlenip tek dosya halinde dağıtılabiliyor; bunun için zip→iso dönüştürme süreci de anlatılıyor
- Bu, retro konsol geliştirme ile web teknolojilerinin birleşimini gösteren bir örnek ve JavaScript tabanlı oyun geliştirmenin genişleme potansiyeline işaret ediyor
AthenaEnv proje özeti
- AthenaEnv, PS2 için bir JavaScript çalıştırma ortamı olup geleneksel bir oyun motorundan ziyade API merkezli bir geliştirme ortamı sunuyor
- İçeride QuickJS değiştirilip gömülü hale getirilerek JavaScript kodu yorumlanıyor
- PS2 yerel programı (C ile yazılmış), JavaScript kodunu çalıştıracak şekilde yapılandırılmış
- Sunulan API'ler arasında render, varlık yükleme, girdi işleme, dosya giriş/çıkışı, ses oynatma bulunuyor
- Soyutlama seviyesi p5.js ya da Raylib düzeyinde; çarpışma algılama veya sahne yönetimi gibi kısımların ayrıca uygulanması gerekiyor
PS2'de JavaScript oyunu çalıştırma süreci
- Çalıştırmak için PCSX2 emülatörü kullanılıyor ve ayarlarda “Enable host filesystem” seçeneğinin etkinleştirilmesi gerekiyor
- Proje klasöründe şu dosyalar yer alıyor
athena.elf: Athena çalıştırılabilir dosyası
athena.ini: giriş noktası (main.js) ve açılış logosu ayarı gibi yapılandırmaları içerir
main.js, src/, assets/: oyun kodu ve kaynaklar
- Emülatörde
athena.elf çalıştırıldığında oyun başlıyor; JavaScript kodu değiştirildikten sonra reset atarak anında yansıtmak mümkün
.iso dosyası oluşturma süreci
- Dağıtım için projenin tek bir ISO imajı halinde paketlenme yöntemi anlatılıyor
- Gerekli dosyalar:
athena.elf, athena.ini, main.js, src/, ATHA_000.01, SYSTEM.CNF
- Tüm dosyalar seçilip zip olarak sıkıştırıldıktan sonra mconverter.eu sitesi kullanılarak iso'ya dönüştürülüyor
- Dönüştürmeden sonra “Enable host filesystem” ayarı olmadan da çalıştırmak mümkün
- Dönüştürmeyi otomatikleştirmek için Python tabanlı CLI aracı GENISO (https://github.com/scottvr/GENISO) tanıtılıyor
- Harici bağımlılık olmadan zip'i iso'ya dönüştürebiliyor
Hello World örneği
- Temel örnekte font ve görsel yükleme, oyun döngüsü kurma, sprite animasyonu, girdi işleme, metin render etme uygulanıyor
- Athena'nın yerleşik
Screen, Font, Image, Pads modülleri kullanılıyor
Screen.display() metodu ile kare bazlı döngü çalıştırılıyor
Pads.get(0) ile kontrolcü girdisi algılanıyor
- Sprite'ın
startx, endx gibi özellikleriyle kare bazlı animasyon kontrol ediliyor
font.print() ile FPS veya metin çıktısı veriliyor
- Sprite'ı ters çevirmek, width değerine negatif bir sayı vererek yapılıyor; konumu düzeltmek için offset hesabı gerekiyor
3D desteği ve sonraki geliştirmeler
- Athena, hem 2D hem 3D destekliyor, ancak 3D odaklı v4 sürümü geliştiriliyor
- Şu anda çoğunlukla 2D odaklı örnekler bulunuyor ve bazı 3D demolar da mevcut
- Resmî GitHub deposu ve Discord topluluğu üzerinden kod ve destek materyalleri sunuluyor
Sonuç
- AthenaEnv, yalnızca JavaScript ile PS2 oyunu üretmeyi mümkün kılan yenilikçi bir ortam
- Web geliştiricilerinin de retro konsollar için oyun geliştirmeye erişebilmesini sağlıyor ve
JavaScript ekosisteminin genişleyebilirliğini ve uyumluluğunu gösteren bir örnek sunuyor
1 yorum
Hacker News yorumları
Fabrice Bellard'ın yaptığı projelerin gerçekten çok geniş bir etkisi var gibi görünüyor
QuickJS sayesinde PS2 gibi eski sistemlerde bile AthenaEnv üzerinden homebrew'un yeniden canlanabilmesi harika
Birçok FOSS projesinin bağımlılık zincirinin bir yerinde onun kodu var
Yazarın ZIP'i ISO'ya dönüştüren bir web sitesini kullanmanın zahmetinden bahsettiğini görünce, dış bağımlılığı olmayan çapraz platform bir Python betiği yazdım
Buna ZIP2ISO.py üzerinden bakabilirsiniz
ISO9660 spesifikasyonunu okumadan bunu Gemini3 Pro ile “vibe-coded” yapmış olması dikkat çekiciydi
AthenaEnv ilginç görünüyor. QuickJS'yi JS yorumlayıcısı olarak kullanıp PS2'nin yerel sistem kütüphanelerini saran bir yapı gibi duruyor
Modern konsollarda da (Switch/2, PS5, Xbox) JS Canvas(WebGPU/WebGL) oyunlarını dağıtabileceğiniz benzer bir proje olup olmadığını merak ediyorum
Konsol SDK'ları NDA altında olduğu için kamuya açık bilgi neredeyse yok ve çoğu oyun Unreal ya da Unity kullanıyor
PC veya mobilde ise Electron ya da WebView ile çalıştırmak kolay olduğu için iş görece daha basit
Switch'in WebKit tarayıcı applet'inde JIT devre dışı, bu yüzden yalnızca e-manuel gibi sınırlı amaçlar için kullanılıyor
Gerçek bir konsolda çalıştırmak için ISO'yu diske yazdırmak gerekip gerekmediğini merak ettim
QuickJS kullanan benzer bir proje olarak Nintendo Switch için nx.js var
Ancak v8/JIT motorundan QuickJS'ye geçilirse performans kaybı büyük olur
Artık PS2 bile JavaScript'in pençesinden kaçamıyor
AthenaEnv, aynı geliştiricinin yaptığı Lua tabanlı Enceladus'un devamı niteliğinde bir proje
Yalnızca oyunlarda değil, homebrew uygulamalarında da çok kullanılıyor; Enceladus tarafında RETROLauncher ve POPSLoader, Athena tarafında ise OSD-XMB örnek verilebilir
PS2 için bir web tarayıcısı yapıp oyunu bir web sitesi olarak açmak da mümkün olmaz mı diye düşündüm
Böyle bir şey arıyordum, gerçekten harika bir proje, teşekkürler
İnsanlar .gdscript ya da Godot kullanmamak için akla gelmedik şeyler yapıyor