한국정보기술진흥원
한국정보기술신문
thumbnail

정보기술 · 실감형콘텐츠 ·

자바스크립트로 PS2 게임 개발 가능해져...오픈소스 'AthenaEnv' 주목

발행일
읽는 시간2분 56초

고전 게임기용 게임을 웹 언어로 제작할 수 있는 환경 등장, 개발 진입장벽 낮춰

[한국정보기술신문] 플레이스테이션2(PS2) 게임을 자바스크립트로 개발할 수 있는 오픈소스 프로젝트가 개발자들 사이에서 화제를 모으고 있다. 기존에는 C나 C++ 같은 저수준 언어로만 개발이 가능했던 PS2 게임을 웹 개발에 주로 사용되는 고급 언어인 자바스크립트로 제작할 수 있게 되면서, 고전 콘솔 게임 개발의 진입장벽이 크게 낮아질 전망이다.

웹 게임 개발자인 JSLegend가 최근 자신의 블로그를 통해 소개한 AthenaEnv 프로젝트는 PS2에서 자바스크립트 코드를 실행할 수 있는 환경을 제공한다. 이 프로젝트는 개발자가 1년 전 자바스크립트로 제작한 소닉 무한 러너 게임이 PS2로 포팅된 것을 계기로 발견됐다. 당시 itch.io 플랫폼에서 Dev Will이라는 사용자가 해당 게임의 PS2 버전을 만들어 깃허브 저장소를 공유하면서 프로젝트가 알려지기 시작했다.

AthenaEnv의 작동 원리

AthenaEnv는 일반적인 게임 엔진이 아닌 PS2용 게임과 애플리케이션을 제작할 수 있는 자바스크립트 API를 제공하는 환경이다. 이 프로젝트는 QuickJS라는 경량 자바스크립트 엔진을 내장하고 있으며, C로 작성된 PS2 네이티브 프로그램이 자바스크립트 코드를 QuickJS 엔진을 통해 해석하고 실행하는 방식으로 작동한다.

AthenaEnv가 제공하는 API는 게임 개발에 필요한 핵심 기능들을 포함하고 있다. 스프라이트, 텍스트, 도형 등을 화면에 표시하고 게임 루프를 통해 애니메이션을 구현하는 렌더링 기능, 이미지와 사운드, 폰트 등의 에셋 로딩 기능, 컨트롤러나 마우스, 키보드 등의 입력 처리 기능, 세이브 파일 작성 등의 파일 처리 기능, 사운드 재생 기능 등을 지원한다.

다만 제공되는 추상화 수준은 p5.js나 HTML 캔버스 API, Raylib와 유사한 수준으로, 충돌 감지나 씬 관리 같은 기능은 개발자가 직접 구현해야 한다.

개발 환경 구축 및 워크플로우

개발자들은 PCSX2라는 PS2 에뮬레이터를 사용해 제작한 게임을 테스트할 수 있다. 에뮬레이터 설정에서 호스트 파일시스템 활성화 옵션을 체크하면 Athena가 게임에 필요한 에셋 폴더와 소스 코드에 접근할 수 있게 된다.

개발 과정은 비교적 간단하다. athena.elf 실행 파일, athena.ini 설정 파일, 메인 자바스크립트 파일과 소스 코드를 포함한 프로젝트 폴더를 VSCode 같은 코드 에디터로 열고 에뮬레이터에서 athena.elf 파일을 실행한다. 코드를 수정한 후 PCSX2의 시스템 탭에서 리셋을 클릭하면 변경사항을 즉시 확인할 수 있다. 웹 개발의 핫 리로딩만큼 원활하지는 않지만 상대적으로 빠른 반복 개발이 가능하다.

배포를 위해서는 프로젝트 파일들을 ISO 파일로 변환해야 한다. athena.elf, athena.ini, 자바스크립트 진입점 파일, 소스 코드, 그리고 부팅에 필요한 ATHA_000.01과 SYSTEM.CNF 파일을 하나의 압축 파일로 만든 후 ISO로 변환하는 과정을 거친다. 이렇게 만들어진 단일 ISO 파일은 다른 PS2 게임처럼 에뮬레이터에서 바로 실행할 수 있어 배포가 편리하다.

실제 게임 개발 사례

JSLegend는 간단한 헬로 월드 예제를 통해 AthenaEnv의 기본 기능들을 시연했다. 이 예제에서는 폰트와 이미지 같은 에셋 로딩, 매 프레임마다 실행되는 게임 루프 설정, 스프라이트 애니메이션, 텍스트 렌더링, 플레이어 입력 처리를 통한 스프라이트 이동 등의 기능을 구현했다.

특히 화면 크기는 Screen 모듈의 getMode 메서드로 얻을 수 있으며, 안정적인 프레임 레이트와 정확한 FPS 카운팅을 위해 setVSync와 setFrameCounter 메서드를 사용한다. 에셋 로딩은 Font와 Image 클래스를 통해 간단히 처리할 수 있으며, 컨트롤러 입력은 Pads 모듈로 처리한다.

스프라이트 애니메이션의 경우 스프라이트시트에서 각 프레임의 위치를 지정하는 방식으로 구현되며, 스프라이트의 startx, endx, starty, endy 속성을 조정해 표시할 부분을 결정한다. 텍스트 렌더링은 Font 객체의 print 메서드를 사용하며, Screen.getFPS 메서드를 통해 정확한 프레임 레이트를 화면에 표시할 수 있다.

3D 개발과 향후 전망

현재 AthenaEnv는 2D 게임 개발에 초점이 맞춰져 있지만, 3D 기능도 지원한다. 다만 3D 기능을 강화한 버전 4가 현재 개발 중이어서 안정화된 후에 본격적인 3D 게임 개발이 가능할 것으로 보인다. 프로젝트는 이미 몇 가지 3D 데모를 공개한 상태다.

개발자 커뮤니티에서는 이 프로젝트에 대해 긍정적인 반응을 보이고 있다. PS2의 하드웨어 제약과 자바스크립트의 유연성을 결합한 혁신적인 시도라는 평가와 함께, 레트로 게임을 현대적인 방식으로 제작할 수 있는 전환점이 될 수 있다는 의견도 나오고 있다.

AthenaEnv 프로젝트는 깃허브에 오픈소스로 공개되어 있으며, 공식 디스코드 채널을 통해 개발자들이 정보를 교환하고 지원을 받을 수 있다. 웹 개발에 익숙한 개발자들이 별도의 저수준 프로그래밍 학습 없이도 고전 콘솔 게임 개발에 도전할 수 있는 길이 열렸다는 점에서 향후 레트로 게임 개발 생태계에 미칠 영향이 주목된다.

한국정보기술신문 정보기술분과 강민규 기자 news@kitpa.org