Codex를 사용해 1995년작 고전 핀볼 게임 'Pro Pinball - The Web'을 부활시켰습니다
I used Codex to revive Pro Pinball - The Web (1995)
핵심 요약
AI를 활용해 90년대 고전 핀볼 게임을 현대 PC 환경에서 완벽하게 구동되도록 리버스 엔지니어링하고 개선했습니다.
- 게임 부활 — Codex를 활용해 1995년작 핀볼 게임을 현대 환경으로 이식함
- 기술적 개선 — 1020Hz 물리 엔진을 최적화하고 고해상도 스케일링을 적용함
- 오픈 소스 — 누구나 즐길 수 있도록 깃허브에 소스 코드와 바이너리를 공개함
- 사용자 피드백 — 원작 팬들의 추억을 자극하며 개선 사항에 대한 의견을 구함
AI로 이것저것 리버스 엔지니어링해서 다시 만든다는 글들을 보고 나도 내 인생 게임인 핀볼 명작 "Pro Pinball - The Web" (1995)을 현세대기로 이식해보는 프로젝트를 시작해보기로 했다.
예전에 진짜 시간 가는 줄 모르고 했던 게임이라, 그 느낌 다시 살려보겠다고 윈도우 98 깔린 레트로 PC까지 세팅해봤었다.
근데 윈98 머신에서도, DosBox에서도 도무지 제대로 돌아가질 않더라.
그래서 그래, Codex(Sol 6.1 High)를 써서 이 게임을 리버스 엔지니어링해보기로 했다. 내 인생 최고의 게임 중 하나를 부활시키겠다는 일념으로 말이지.
과정은 꽤 직관적이었다. 비교적 작은 단위로 쪼개서 Codex한테 분석하고 재구현해달라고 시켰다. 물리 엔진부터 시작해서 애니메이션, 그리고 첫 플레이 가능한 데모까지... 제대로 구현됐는지 확인하려고 테스트 플레이에만 엄청난 시간을 쏟아부었다.
첫 플레이 버전은 해상도가 1024x768로 고정되어 있었는데, 요즘 PC에서 돌리기엔 너무 작아서 전체 화면 스케일링을 구현했다. 그랬더니 도트 매트릭스 디스플레이가 ***처럼 보이더라. Codex가 그걸 그냥 늘리지 말고 새로 그리자는 기가 막힌 아이디어를 내줘서, 지금은 아주 깔끔하고 끝내주게 나온다.
Codex가 쓴 방법론이 진짜 인상적이었는데, 에뮬레이터에서 돌아가는 코드 조각들을 디스어셈블해서 단위 테스트를 만들고, 무엇보다 게임 플레이 시뮬레이션을 엄청나게 돌려서 원본 게임이랑 프레임 단위로 비교하는 방식이었다.
게임이 원본이랑 완전히 똑같이 돌아가는 상태가 된 다음에는, 좀 거슬리던 부분들을 고친 개선판을 만들기로 했다. 예를 들면 미션 중에 다른 이벤트가 터지면 끊기던 거나, 게임 중에 시작 버튼 누르면 아무 말 없이 재시작되던 거 같은 문제들 말이다. 무엇보다 엔진을 뜯어고쳐서 17 마이크로스텝이 들어간 60Hz 게임 루프(그러니까 1995년에 무려 1020Hz 물리 엔진을 썼다는 거다!)가 프레임 싱크를 써서 필요할 때마다 현재 상태를 바로 그리게 만들었다.
진짜 175Hz로 돌아가는 이 게임은 차원이 다르다. 이 고생을 한 보람이 있더라!
문제도 몇 개 있긴 했다. 가끔 Codex가 멍청하게 굴 때가 있었는데, 예를 들어 프레임 싱크 관련해서는 내가 직접 설명해줘야 했다. 17개 마이크로스텝을 한 번에 다 계산할 필요 없이, 딱 필요한 시점까지만 계산해서 우리가 *can* 효과적으로 FPS를 올릴 수 있게 하라고 말이다.
개선판의 DMD 메뉴 흐름도 아직 좀 삐걱거리는 감이 있는데, 이건 내가 귀찮아서 제대로 명시를 안 해줬더니 좀 느낌이 묘하게 돌아간다.
그리고 윈98에서 왜 그렇게 안 돌아갔는지도 깨달았다. 처음 만든 데모에서도 똑같은 문제가 있었는데, 윈도우 타이머 지터(jitter)가 너무 심해서 그런 거였다. 그래도 Codex가 내가 징징대니까 금방 원인 찾아서 고쳐주더라. 게임패드 지원 추가하고 나서 생긴 1초마다 한 번씩 끊기는 버그도 똑같이 해결했고.
결과물은 무료 오픈 소스로 풀었고, 윈도우랑 리눅스에서 바로 실행 가능한 바이너리도 올려놨다. 다만 원본 게임 데이터 파일이 필요한데, 그건 archive.org에서 구할 수 있다.
소스랑 바이너리는 여기 있다:
https://github.com/rnatau/theweb
혹시 예전에 The Web 좀 해봤던 사람 있으면 소감 좀 알려줘라. 직접 해보고 피드백 주면 진짜 환영이다! 아마 평생 미완성 프로젝트로 남겠지만 말이야 ;-)

