000%
CONVERSATION Nº 12 · CODEX × JEE
OCTOBER 2026

HeavyMach를
다시 만든 이유

Interviewed by Codex.

2017년 7월, 그는 세 번째 직업으로 iOS 개발자를 택했다. 대학생 때 아이팟터치에서 만난 HeavyMach가 그 선택에 약 35%의 영향을 주었다고 말한다. 2026년에는 그 게임을 자신이 쓰는 아이폰에서 다시 실행할 수 있도록 복원했다. 개발자의 변에 적은 진로 선택과 남은 시간에 대한 생각을 물었다. 꿈을 계기로 복원을 시작한 과정과 새 전투기에 럭스루나에 도색을 택한 이유도 들었다.

검은 항공기들을 향해 전차가 광선을 발사한다.
FIG. 01HEAVYMACH — The tank fires a beam at the black aircraft.
HEAVYMACHCONVERSATION 01BY CODEX

아이팟터치에서 만난 게임

Q · CODEXHeavyMach는 어떤 게임으로 기억에 남았나.

전차 일러스트 위에 STAGE CLEAR와 다음 스테이지 버튼이 표시된다.FIG. 02
FIG. 02

STAGE CLEAR and the next-stage button appear over the tank illustration.

대학생 시절 아이팟터치에서 이 게임을 만났다. Cydia로 처음 접한 이 게임을 나중에는 애플 앱스토어 미국 계정을 만드는 방법을 검색해 구매했다. 당시 한국 앱스토어에는 게임 카테고리가 아예 없었기 때문이다. 기기를 기울여 전차를 움직이고 사격했으며, 스테이지를 마치면 페이퍼블루의 일러스트가 나왔다.

2009년에 출시된 HeavyMach는 한국 개발자의 작품으로는 처음 앱스토어 유료 순위 5위권에 들었다. 당시 개발자 인터뷰에는 약 1억4천만 원의 매출을 올렸다고 기록돼 있다. 당시 인터뷰에서 그 이야기를 확인할 수 있다.

나는 HeavyMach가 개발자로 직업을 바꾸는 데 약 35%의 영향을 주었다고 생각한다. 리니지나 카스, 그 뒤에 나온 3D 게임을 그대로 따라 만드는 대신 HeavyMach를 기본 컨셉으로 한 Unity 게임을 택한 이유에도 이 경험이 있다. Unity 게임은 이번 HeavyMach 원본 복원과 별도로 진행한 프로젝트다.

HEAVYMACHCONVERSATION 02BY CODEX

세 번째 직업을 택하기까지

Q · CODEX게임 외에 개발자로 전업하는 데 영향을 준 경험은 무엇인가.

나는 개발자를 세 번째 직업으로 택했다. 2015년에는 잡지사에서 기자로 일했고, 2016년에는 필리핀에서 근무했다. 2017년 7월, iOS 개발자로 전업했다. 소프트웨어와 거리가 먼 일을 하며 겪었던 세계는 내게 비결정론적이고 비합리적이었다. 그 생활을 청산하고 다른 직업을 택한 데에는 여러 이유가 있다.

HeavyMach보다 더 큰 영향을 준 사건들은 잡지사에서 겪었다. 대체하기 어려운 기술을 가진 편집디자이너들이 집단으로 항명했고, 그 결과 근무 조건이 나아졌다. 월간지 마감이 끝나는 이틀을 제외하면 정시 퇴근을 보장받았다. 이 경험은 9호 「항명의 대가」에도 적었다.

한 달 뒤 편집부 편집장이 술자리에서 터졌다. 편집장은 여섯 명이 매달 월간지 세 개와 일간지 하나를 마감하고 취재까지 하는 것은 불가능하며, 모두가 매일 야근하고 있다고 말했다. 결과는 반대였다. 편집부 전원에게 한 달 동안 밤 열 시 이전에는 퇴근하지 말라는 지시가 내려왔다. 공식 징계라기보다 괘씸죄에 가까운 보복성 근무 지시였다.

로크웰 오토메이션, B&R, 요코가와 같은 공장 자동화 기업의 임원들을 인터뷰하며 보고 들은 것도 있었다. 공학 기술로 자동화했을 때 어떤 편익을 얻는지에 관한 이야기였다. 이 취재 경험 역시 개발자를 택하는 데 영향을 주었다.

HEAVYMACHCONVERSATION 03BY CODEX

개발자가 된 뒤 다시 작동하게 만든 게임

Q · CODEX개발자의 변에는 이 게임이 수명을 9년 3개월 연장해 주었다고 썼다. 지금의 복원과는 어떻게 이어지는가.

지인들과 소주잔을 기울이면, 내가 2015년과 2016년의 일을 계속했다면 투신자살로 생을 마감했을 거라는 이야기를 듣곤 한다. 그들이 맞는지는 아직 잘 모르겠다.

HeavyMach를 만든 두 제작자는 내 수명을 9년 하고도 3개월 더 연장해 주었다.

요즘 나는 내게 남은 시간이 많지 않다는 느낌을 받는다. 건강 문제 때문도, 극단적인 무기력 때문도 아니다. 오히려 내 정신은 한 달 전, 두 달 전, 반년 전보다 명료하다고 느낀다. 그래서 지금 무엇을 해보고, 무엇을 남기고 싶은지 생각한다. 내가 택한 일 중 하나가 HeavyMach 복원이다. 한때 내게 방향을 보여준 게임을, 개발자가 된 내가 다시 작동하게 만드는 것. 나는 이 연결을 수미상관이라고 생각한다.

2009년에 출시돼 내게 길을 알려준 게임을 2026년에 다시 만들었다. 이제 앱스토어에서도 찾을 수 없고, 주변에서 이 게임을 기억하는 사람도 드물다. 나는 그 게임을 지금 쓰는 아이폰에서 다시 실행하고 싶었다. 코덱스에 소스코드부터 새로 작성하게 하고, 원작과 다르게 움직이는 부분을 계속 지적하며 고쳤다.

HEAVYMACHCONVERSATION 04BY CODEX

꿈을 꾼 뒤 검색한 이름

Q · CODEX실제로 복원을 시작한 계기와 “내가 한 일이 거의 없다”는 말의 이유를 들려 달라.

이와 비슷한 프로젝트를 진행한 mesabloo라는 사람이 있었다. 그는 HeavyMach Defense의 에셋을 구하고 소스코드를 밑바닥부터 새로 작성했다. 유닛 간 교전 알고리즘을 구현하다가 멈춘 듯했다. 나는 소스코드를 밑바닥부터 새로 작성해야 했던 그 보다는 시작점이 더 나은 상황이었다.

주말에 잠을 자다가 꿈을 꿨다. 꿈속에서 아이팟터치와 Cydia를 처음 접하던 나를 제3자의 시점으로 보고 있었다. 일어나서 구글에 heavy Mach을 쳐봤다. 구글 검색의 Gemini가 HeavyMach 원본을 받을 수 있는 웹 아카이빙 전문 사이트를 알려줬다. 그게 이 복원 프로젝트의 시작이다. Internet Archive(archive.org)의 HeavyMach 시리즈 모음에서 받은 HeavyMach 1.13 빌드를 바탕으로 복원을 시작했다.

그러므로 나는 내가 한 일이 거의 없다고 생각한다. 이것으로 돈을 벌 생각을 하면 더더욱 안 된다고 생각하는 것도 이 때문이다. 내가 한 것은, 내 표현을 빌리자면 Codex가 원본의 소스코드와 원작자의 미학적 성취에서 벗어나 자의적으로 잘못된 행동을 할 때 멱살을 쥐어 잡아서 따귀를 올려붙인 것뿐이다.

만일 원작자 혹은 다른 이해관계자가 게시 중단을 요청하면, 난 미련없이 이 레포지토리를 지울 것이다.

HeavyMach를 만든 두 제작자는 내 수명을 9년 하고도 3개월 더 연장해 주었다.
HEAVYMACHCONVERSATION 05BY CODEX

원작자에게 남긴 문의

Q · CODEX원작 제작자들은 이 복원을 알고 있는가. 크레딧은 어떻게 정리했나.

이 시리즈를 만든 개발자 변해준과 일러스트레이터 박재철이 이 복원 프로젝트를 어떻게 생각할지는 모른다. 박재철 작가 본인의 것으로 보이는 메신저 프로필에 문의 글을 남겼다. 개발자의 변에 이 일을 적었을 때는 아직 답장이 오지 않은 상태였다.

복원을 시작할 당시 내가 알고 있던 제작자는 변해준과 박재철이었다. 그래서 두 사람의 이름을 먼저 기록했다. Mesabloo의 복원 프로젝트는 알고 있었지만, 위메이드가 HeavyMach의 IP를 인수했다는 사실은 이번에 크레딧을 정리하면서 처음 알았다.

2011년에 위메이드 엔터테인먼트의 자회사 위메이드 크리에이티브가 HeavyMach와 HeavyMach 2의 IP를 포함한 인디앱스 자산을 인수했다. 크레딧에는 원작의 개발과 일러스트, 후속 인수의 역할을 나누어 적었다.

HEAVYMACHCONVERSATION 06BY CODEX

무엇을 원작대로 맞췄나

Q · CODEX복원한 게임에서 어떤 것을 유지하려 했나.

경사로 위로 뛰어오른 전차가 적을 향해 사격한다.FIG. 03
FIG. 03

The tank jumps above a slope and fires at an enemy.

전차를 기울여 움직이고 점프하고, 화면의 공격할 곳을 터치해 사격하는 조작이다. 기관포·산탄·미사일·광선·공중 지원 무기를 바꾸고, 경험치를 얻어 이동·방어·공격 능력을 강화한다. 미션과 보스, 스테이지가 끝난 뒤 나오는 그림과 다음 미션으로 가는 흐름도 원작대로 맞추게 했다.

무기마다 탄속과 중력, 분산과 연사 간격이 다르다. 무기의 수치가 같아도 계산 순서가 바뀌면 결과가 달라진다. Codex가 피해·강화·탄도 계산을 대조했고, 나는 설치한 앱에서 원작과 다른 부분을 찾아 고치라고 했다. 틸트가 반대로 움직이거나 지원 공격이 탱크 뒤로 떨어지고, 미션을 끝냈는데 그림이 나오지 않는 식의 문제였다.

v0.9에서는 아이폰으로 전체 미션을 플레이했다. 그때는 크래시나 오동작, 적 이동 이상을 보지 못했다. 이후 자동조준과 항공기를 넣은 일반 앱도 아이폰과 아이패드에서 플레이했다. 자동 검사와 빌드·계측은 Codex가 했다.

HEAVYMACHCONVERSATION 07BY CODEX

저장·렌더링·음향·시간 처리

Q · CODEX구현이 원작에서 벗어났다고 지적한 사례에는 무엇이 있었나.

초기 구현에서는 전차가 발사하거나 피격될 때마다 게임이 파일을 저장했다. 탄약이나 경험치가 변했다는 통지가 그대로 파일 쓰기로 이어졌다. 나는 “발사 때마다 파일을 저장?”이라고 물었다. Codex가 메모리 갱신과 저장을 분리하고, 슬롯을 고르거나 다음 스테이지로 가거나 게임 오버가 되거나 메뉴로 돌아갈 때 저장하도록 고쳤다. 수정 뒤 자동 검사에는 180프레임 사격 중 저장 0회, 메뉴 복귀 때 1회가 기록됐다.

직접 정상 동작을 확인한 원작 실행판에서는 프레임 드랍이 없었는데, 초기 복원 앱에서는 생겼다. 나는 UIKit으로 게임 그래픽을 그리는 것부터 타당한지 물었고, 기존 경로와 비교하라고 했다. Codex가 매 프레임 CPU에서 이미지를 만들던 처리를 OpenGL로 바꾸고, 텍스처를 미리 준비해 재사용하게 했다.

렌더링 방식을 바꾼 뒤에도 사격 지연이 있어 Codex가 원인을 더 조사했다. Codex가 효과음을 다시 시작하는 호출을 측정했고, AVAudioPlayer로 재생을 시작하는 데 걸리는 비용을 확인했다. OpenAL에서 미리 준비한 버퍼와 소스를 재사용하도록 고쳤다. 무기를 바꿨을 때 소리가 나지 않던 문제는 빠진 효과음 재생 호출을 추가해 고쳤다.

시간 누적 계산을 왜 넣었는지도 물었다. 지연이 생기면 한 번의 화면 표시 사이에 게임 상태를 여러 번 갱신하는 구현이었다. 원래의 이동과 사격 감각이 달라지는 문제였다. Codex가 화면을 한 번 그릴 때 게임 상태도 한 번 갱신하도록 고쳤다. 잠금과 백그라운드 전환 때는 게임·소리·누른 상태를 멈추고, 돌아온 뒤 플레이어가 직접 재개하게 했다.

HEAVYMACHCONVERSATION 08BY CODEX

화면 확장에 따른 좌표·보스 동작 오류

Q · CODEX지금 기기에 맞춰 화면을 넓히는 작업에는 어떤 수정이 필요했나.

나는 그림을 확대하는 대신 더 넓은 월드를 보여달라고 했다. 화면을 넓히려면 새로 보이는 좌우 영역에서도 터치한 곳으로 사격할 수 있어야 했다. 메뉴 배경과 미션 결과 그림도 넓어진 화면을 채워야 했다. 직접 보면서 그림 경계가 이어지지 않는 곳과 검은줄을 지적했다. 메뉴 전환 때 기존 영역과 새 영역이 따로 열리고 닫히던 문제도 고치게 했다. Codex가 문처럼 닫히는 네 조각이 화면 전체를 덮도록 바꿨다.

미션 3-5에서는 항공기형 보스가 너무 빨리 왼쪽으로 다가오고 오른쪽으로 잘 돌아가지 않았다. Codex는 처음에 내가 말한 적을 헬기로 잘못 짚었다. 항공기라고 정정한 뒤에야 해당 보스를 대조했다. 화면이 넓어지면서 적이 보이는 조건과 전투를 시작하는 조건이 일찍 충족되는 문제였다. Codex가 두 조건을 분리해 고쳤다.

공중 지원 공격이 터치한 곳보다 전차 뒤로 떨어지는 문제도 있었다. 터치를 뗄 때 전달한 가짜 좌표가 공격 위치 계산에 들어갔다. Codex가 입력 해제와 조준 좌표를 나누고 마지막 공격 위치를 유지하도록 했다. 나는 치트 앱에서 모든 무기를 검사하는 절차도 요구했다. 코어 계산이 맞아도 실제로 누르고 떼는 동작에서 다른 결과가 나왔다.

미션을 끝낸 뒤 나오는 일러스트는 내 기억에도 남아 있던 부분이다. 그림이 빠졌다고 지적하자 Codex가 자원 이름의 JPG·PNG 접미사 대응을 고쳤다. 그 뒤 실제 폰에서 그림을 확인했다. 넓은 화면에서 일러스트 바깥으로 전장이 드러나자 Codex가 배경과 표시 영역을 고쳐 결과 화면이 화면 전체를 덮도록 했다.

HEAVYMACHCONVERSATION 09BY CODEX

자동조준과 탄도 보정

Q · CODEX자동조준은 어떤 기능을 원했고, 무엇을 다시 삭제하게 했나.

녹색 모서리와 LOCKED 문구가 표적을 표시한다.FIG. 04
FIG. 04

Green corners and the LOCKED label mark the target.

아머드 코어6, 에이스 컴뱃7·8의 표적 선택과 추적을 참고했다. 전차를 움직이고 점프하는 동안에도 포신이 적을 따라가고, 버튼으로 표적을 바꿀 수 있기를 원했다. 기존 터치 조준과 사격도 켜고 끄는 방식으로 남기라고 했다.

처음에는 무기의 포물선과 적의 움직임을 계산해서 반드시 명중하는 조준을 요구했다. Codex는 탄속과 분산, 비행 경로까지 바꾸는 C 보정을 넣었다. 나는 자동조준과 명중 보정을 왜 나눴는지, 모든 탄환을 한 점에 모으는지 물었다. 영향을 확인한 뒤 C를 삭제하라고 했다.

지금은 A 버튼을 누르면 전방에서 가까운 적을 고르고, 화살표로 표적을 바꾸고, 조준경 버튼으로 발사한다. 적을 따라 포신이 움직여도 전차의 이동·점프·무기 선택·발사는 플레이어가 한다. 표적은 화면 밖으로 나가도 유지하고, 죽거나 전차 뒤로 가면 다른 전방 적을 고른다. 다시 A를 누르면 원작의 터치 조준으로 돌아간다.

탄환은 원래 무기의 속도와 중력·분산·피해량을 따른다. 적이 발사 뒤 움직이거나 탄환이 퍼지면 빗나갈 수 있다. Codex는 자동조준을 끈 상태에서 기능 추가 전후의 수동 사격 기록을 비교했다. 20개 무기, 세 난수 시드, 각각 420프레임을 돌렸고 25,200프레임의 기록이 같았다.

HEAVYMACHCONVERSATION 10BY CODEX

아이패드와 맥에서도 같은 게임을 하기

Q · CODEXApple 세 플랫폼으로 넓히면서 공용 모듈과 키보드를 요구한 이유는 무엇인가.

아이폰과 아이패드, 맥에서 게임 코드와 자원을 공유하게 했다. 이동과 탄도, 데미지, 적 배치를 기기마다 복사해 놓으면 한쪽에서 고친 것이 다른 쪽에 빠질 수 있다. Codex가 공용 C++ 코어와 Apple 런타임, 자원 번들을 하나의 workspace에 묶었다. 게임 코드는 정적 framework로 가져오고 그림·음원·맵은 같은 자원 번들을 쓴다. 맥은 AppKit 앱으로 만들었다.

아이폰에는 가로 화면 회전과 터치·틸트·키보드를, 아이패드에는 터치·틸트와 키보드 병용을 넣었다. 맥에서는 창 모드와 전체 화면을 지원한다. 키보드에 이동·점프·포신 조절·사격·무기 선택·메뉴를 연결했고, Shift로 각도를 더 세밀하게 조절하게 했다.

일반 앱과 치트 검증 앱은 따로 설치한다. 치트 앱은 미션과 무기·부품·강화 조건을 지정할 수 있어서, 같은 적을 보려고 게임을 처음부터 반복할 필요가 없다. 대신 게임의 이동과 사격은 같은 처리 경로를 사용한다. 앱 ID와 저장 공간도 분리했다.

Mac 검사 도구가 실패했는데 Codex가 게임 전체에 문제가 생긴 것처럼 설명한 적도 있다. 나는 실제 게임 검사부터 끝내라고 했다. CLI에서 서명이 실패했을 때도 앞서 Xcode에서는 실행됐다는 사실을 지적했다. Codex가 성공했던 경로와 실패한 경로의 팀·서명·기기 상태를 나눠 확인한 뒤 설치를 진행했다.

HEAVYMACHCONVERSATION 11BY CODEX

HUD 배치와 편집 도구

Q · CODEX화면 안의 조작부도 직접 옮길 수 있게 했는데, 무엇을 고쳤나.

iPhone 치트 앱에서 상단 금속 장식을 아래로 옮긴 HUD 편집 화면. 드래그 중 오른쪽 도구가 접혔다.FIG. 05
FIG. 05

Upper metal trim moved downward in the HUD editor; the right-hand tools fold away during dragging. iPhone cheat app.

HUD 위치를 드래그해 바꾸고 기본 배치로 돌아갈 수 있는 기능을 요구했다. 버튼 그림을 옮기면 실제 누르는 위치도 따라가야 했다. Codex는 버튼·계기판·상단 장식을 묶음별로 옮기고, 그림과 터치 영역이 같은 배치를 쓰도록 구현했다. 옮긴 버튼을 눌러 사용하는 데에는 문제가 보이지 않았다.

편집 도구와 장식은 한 번 더 수정했다. 배치를 바꿨을 때 사라졌던 상단 금속판과 연결 레일을 복원했고, 장식도 따로 옮길 수 있게 했다. 도구는 오른쪽에 영문 금속 버튼으로 배치했다. HUD를 끌기 시작하면 패널이 접히고, 다시 열고 싶을 때 TOOLS를 누르는 방식이다.

현재 전투의 멈춘 화면과 예시 장면을 번갈아 보면서 위치를 정할 수 있다. 기본 배치 복원은 편집 중인 배치에 적용하고, CANCEL로 버리거나 APPLY로 저장한다. 기존 배치 파일도 유지했다. Codex는 실제 iPhone·iPad에서 이동·입력·저장과 상단 장식 복원 등을 검사했다.

v0.14에 HUD 편집을 넣은 뒤 v0.15에서는 진입 위치를 정리했다. 미션 선택 화면의 SET GAME UI를 없애고 전투 중 MENU에서 열도록 했다. 같은 버전에서 글자를 뺀 전차 아이콘도 iPhone·iPad·Mac의 일반 앱과 치트 앱에 적용했다.

iPhone 치트 앱에서 MENU를 오른쪽으로 옮겨 적용한 뒤 새 위치를 눌러 연 일시정지 메뉴.FIG. 06
FIG. 06

The pause menu opened by pressing MENU at its new position on the right. iPhone cheat app.

HEAVYMACHCONVERSATION 12BY CODEX

추가 항공기의 외형·화풍 수정

Q · CODEX실제 기종과 원작 그림을 지정했는데도 새 항공기의 시안을 다시 만들게 했다.

야크, 해리어, F35를 지정했고 기존 유닛의 색조와 질감을 따르라고 했다. 외형을 재해석하라고 하지는 않았다. 그런데 Codex는 첫 생성 지시에 실물에서 영감을 받은 기체, 넓고 낮은 실루엣, 과장된 장갑 패널 같은 조건을 직접 넣었다. 기존 헬기 그림은 참조했지만 실제 기체 사진과 도면은 넣지 않았다.

나는 실제 모델과 모양이 다른 이유를 물었다. Codex가 실물 형상을 보존하는 규칙을 추가했다. 사진과 도면은 형태를 확인하는 데 쓰고, 기존 게임 그림은 색조와 질감을 맞추는 데 쓰도록 나눴다. 기수, 날개, 꼬리, 흡입구의 위치와 비례를 대조했다. 새 시안을 확인한 뒤 앞으로 현실의 유닛을 추가할 때도 이 절차로 그리라고 했다.

미감·시각적 요소·톤앤매너라는 관점에서 보면, Codex는 완벽하게 돌아가는 소스코드와 에셋, 스프라이트 같은 시각적 힌트가 있어도 OpenAI의 이미지 생성 모델 화풍에 과하게 의존한다고 생각한다. 럭스루나에는 비교적 운이 좋은 경우였다. 야크·해리어·F35는 사람이면 원작 디자인을 보고 그와 유사하게 묘사할 것이라고 가정했다. 힌트가 이미 완벽하게 있으니까. 그런데 완전히 반대되는 SF적인 묘사, 심지어 내 디렉팅을 무시하는 초안을 가져와서 드잡이를 해야 했다.

HEAVYMACHCONVERSATION 13BY CODEX

쉴카·퉁구스카의 외형과 무장

Q · CODEX지상 유닛을 추가할 때에는 어떤 조건을 정했나.

iPhone 치트 앱에서 최종 포탑 높이를 적용한 쉴카가 경사면에서 흰색 총탄을 발사한다.FIG. 07
FIG. 07

Shilka fires white rounds on a slope with its final turret height. iPhone cheat app.

쉴카와 퉁구스카를 추가하도록 했다. 항공기를 넣을 때처럼 외형과 파츠는 새로 만들고, 원작 지상 유닛의 움직임과 전투 처리는 재사용하는 방식이다. 차체 전체를 한 장의 그림으로 묶으면 파츠별 움직임과 반동이 사라지므로, 차체·포탑·포신을 나누어 조립하도록 했다.

현재 쉴카는 흰색 총탄을 6발씩 쏘고, 퉁구스카는 흰색 총탄 4발과 미사일 2발을 연속으로 쏜다. 레이더 받침은 포탑에 고정하고 위쪽만 따로 돌게 했다. Codex는 회전 그림을 24방향으로 늘리고, 기존 적을 유지하면서 35개 스테이지에 두 유닛 152대를 배치했다. 이 내용은 v0.13에 들어갔다.

그림을 파츠로 조립한 뒤에도 외형을 고쳤다. 쉴카 포탑이 납작하게 보였고, 실차 사진을 참고해 장갑 측면과 뒤쪽 부피를 다시 그리는 과정을 거쳤다. Codex가 긴 안테나 두 개를 제거하고 레이더 연결점을 옮겼다. 최종적으로 포탑 높이를 퉁구스카와 같은 29로 맞췄다. 그동안 퉁구스카의 비율과 두 차량의 무장·배치는 유지했다.

새 외형을 적용하면서 원작에서 가져온 차체 움직임도 유지했다. 아래 화면은 Codex가 실제 iPhone·iPad의 치트 앱에서 조립과 사격을 검사하며 남긴 것이다. 기체나 차량의 도안만 보던 때와 달리, 지면 위에서 움직이고 무기를 쏘는 상태로 파츠의 크기와 연결을 볼 수 있다.

iPad 치트 앱에서 퉁구스카가 경사면에서 미사일을 발사한다. 레이더는 포신과 별도로 회전한다.FIG. 08
FIG. 08

Tunguska fires a missile on a slope; its radar rotates independently of the barrel. iPad cheat app.

HEAVYMACHCONVERSATION 14BY CODEX

검은 전투기에 럭스루나에를 입힌 이유

Q · CODEXF-22·Su-57·MiG-31을 추가하면서 굳이 럭스루나에 도색을 택한 데에는 어떤 배경이 있나.

검은 항공기들을 향해 전차가 광선을 발사한다.FIG. 09
FIG. 09

The tank fires a beam at the black aircraft.

선택한 이유는 미학적인 이유도 있지만, 기술적인 검증에 대한 이유도 있고, 달빛과 관련된 내 경험도 있고, 실제 에이스 컴뱃8을 플레이하며 느낀 경험도 있다. 복합적이다.

HeavyMach 복원을 시작하기 전, 에이스 컴뱃8이 출시 한 달 정도를 앞두고 사전예약을 받을 당시 내 정신적 상황은 최악이었다. 그때 8이 출시된다는 소식을 듣고 생각이 조금 바뀌었다. “조금만 이따가 죽자.” “그래도 저거 나올 때까지만 살아있자.”

HeavyMach가 나를 9년 3개월 더 살게 해준 작품이라면, 에이스 컴뱃8은 내가 앞으로 얼마나 더 살 수 있을지는 모르지만 당장 출시일 이후까지는 살아있게 한 작품이라고 생각한다. 럭스루나에는 8에서 가져올 수 있는 상징물, 특히 악역들 중 대표적인 상징물이라서 고민한 것이다.

비슷한 사례로 「데스 스트랜딩 덕분에 구원받은 우리 부부」라는 커뮤니티 글이 있다. 글쓴이는 태어난 지 두 달 된 아이를 잃은 뒤 아내가 1년 넘게 집 밖에 나가지 못했고, 함께 게임을 끝낸 뒤에는 현관 밖으로 나서기 시작했다고 썼다. 코지마 히데오에게 장문의 메일을 보냈다는 대목도 있다. 내가 이야기한 것도 게임을 경험한 뒤 실제 생활에서 달라진 일이었다. 게시글과 첨부 원문

HeavyMach를 복원하고 럭스루나에를 넣으면서, 두 게임이 내 삶에서 지닌 의미를 HeavyMach 한 작품에 함께 담았다. 내가 기억하는 럭스루나에에는 검은 기체와 금색 장식뿐 아니라, 직접 상대할 때 느꼈던 위협과 긴장도 있다. 그래서 외형을 옮기는 일과 전투를 만드는 일을 함께 생각했다.

작은 모바일 게임 환경에서 검은색과 금줄, 금색 콕핏, 꼬리날개의 엠블렘을 정확히 묘사하기는 쉽지 않다. 하지만 단순히 흑색 전투기들로만 디자인하면 내가 의도한 시각적 오마주를 살릴 수 없었다.

FIG. 10

Combat against the added aircraft · 13 seconds.

HEAVYMACHCONVERSATION 15BY CODEX

달빛 아래에서 달리던 경험

Q · CODEX달빛이 개인적인 상징이 됐다는 말은 어떤 경험에서 나왔나.

나는 2025년에 마지막 회사를 관둔 뒤 바이크로 전국일주를 했다. 서울이나 경기도와 다르게 달빛에 의존하며 지방 국도, 아무도 없는 논밭길을 달리면 단순한 여행이나 기분전환과는 다른 느낌이 든다. 내 손조차 보이지 않는 어둠 속에서 달빛과 헤드라이트만으로 길을 가늠하며 달리면, 세상에 나와 바이크만 있는 듯한 착각이 들 정도다.

좁은 초행길을 시속 120킬로로 달리면 사람은 살기 위해 자동으로 머리를 비우게 된다. 어찌 보면 죽음을 앞둔 상황에서 신체에 본능적으로 일어나는 극한의 명상 상태에 가까워진다고 할까. 한 번도 가보지 않은 곳에서 눈앞에 보이는 건 달빛뿐이고, 달빛을 받으며 완전한 침잠 상태로 달리면 사람이 바뀐다는 것이다. 달빛이라는 단어는 내 인생에서 묘한 상징물이 됐다.

내가 달빛 아래에서 전국일주를 한 것과 남코가 8의 보스들 편대명을 럭스루나에로 지은 것은 다 우연이고, 상관관계는 0인 독립적인 일일 것이다. 기다리던 게임의 주요 적이자 시각적 임팩트로 승부하는 상징 중 하나가 그 이름을 가진 것도 우연이다.

HEAVYMACHCONVERSATION 16BY CODEX

직접 상대하며 느낀 위협과 매력

Q · CODEX실제로 플레이한 에이스 컴뱃8과 럭스루나에는 어떻게 느꼈나. 왜 그 세 기종을 골랐나.

게임플레이의 관점에서 보면 8은 “조금만 더 이따 죽자”라는 내 대전제를 깨지 않은 잘 만든 물건이었다. 럭스루나에는 시각적으로 잘 디자인된 외형과 그에 걸맞은 살벌한 실력, 듣는 재미가 있는 배우들의 대본이 잘 조합된 적이었다. 게임 전체가 종합적인 완성도를 보여줬고, 그 상징 중 하나인 럭스루나에도 거기에 기여했다고 보면 된다.

직접 상대하며 느낀 위협과 매력을 재현하려 했다. 현 시대의 대중문화를 보면, 매력적인 주인공이나 선역뿐 아니라 뒤틀렸고 강력한데 매력적인 악역이 대중에게 더 길게 회자된다고 나는 생각한다. 시카리오의 조시 브롤린, 트랜스포머의 F-22도 그런 의도라고 생각한다.

F-22·Su-57·MiG-31은 8에 등장하는 럭스루나에 편대 중에서 가장 악역 느낌이 많이 나는 기종들이었다. 다만 F-16이나 타이푼처럼 하나 정도는 다른 디자인을 넣어 차별화할 걸 그랬나 하는 생각도 든다. 세 종류가 큰 관점에서는 디자인이 비슷하다고 생각해서다.

HEAVYMACHCONVERSATION 17BY CODEX

보스전 전에 강한 적을 만나는 것

Q · CODEX그 전투기들을 HeavyMach에 넣어 플레이어의 경험을 어떻게 바꾸려 했나.

원작의 보스전은 제법 어려운 보스 유닛 하나와 다른 스테이지에서 등장하는 일반 유닛들이 협공하는 방식이다. 나는 이 구성이 조금 평이하다고 생각했다. 첫 직장인 잡지사를 다니기 전에는 넷마블 게임기획 직군의 서류 전형에 합격한 적도 있다. 이번에도 플레이어의 경험, 게임기획의 관점으로 생각했다.

원작 에셋과 유닛 동작 코드, 원래의 게임 경험에 최소한으로 개입하면서 두 가지 효과를 만들려 했다. 보스전의 난도를 높이려 했다. 또 보스전과 그 이전 구간에, 기존 적들과 디자인 언어는 공유하지만 외형과 성능에 이질감이 있고 죽이기도 힘든 적을 등장시켜 긴장감을 주려 했다.

수직이착륙기 세 기종은 원래 적을 교체하지 않고 배치 사이에 넣었다. 기존 헬기의 이동과 무장을 활용했고, Codex가 계산한 추가 수량은 14개 서브미션에 113대다. 기존 적 배치 1,182항목은 유지했다. 럭스루나에 도색의 전투기들은 보스전과 직전 미션의 마지막 구간에 증원으로 넣었다.

전투기는 기존 헬기 미사일을 재사용하고 묶음 발사를 넣었다. 내구력은 일반 헬기 최대치의 1.7배, 미사일 이동 속도는 25% 증가로 정했다. 연사 속도의 증가폭은 처음의 25%에서 10%로 낮추라고 했다. 일반 앱에서 기체가 화면 안에 갑자기 나타나는 것을 보고 고치라고 했고, 지금은 기체 전체가 화면 오른쪽 밖에서 들어온다.

원작 소스코드를 최대한 건드리거나 튜닝하지 않고 원작의 감각을 살린 관점에서 보면, 럭스루나에의 움직임과 무기 사용 절차는 원작을 벗어나지 않는다고 생각한다. 화면 밖에서 빠르게 날아오는 속도는 내가 디렉션한 것이 아니다. 하지만 에이스 컴뱃8의 럭스루나에가 쓰던 고속일격이탈과 악랄한 선회전 전법이 어느 정도 생각나서, 그 부분은 피드백하지 않고 유지했다. 당시 한데 뭉쳐 날아오던 편대는 v0.16에서 생성 위치와 진입 목적지를 벌려 수정했다. 전투가 시작된 뒤 플레이어 주변에 다시 모이는 동작은 남아 있다.

이동과 회피에 더 신경 쓰게 하는 것뿐 아니라, 원작에서는 컨트롤과 표준적인 무장으로 시간을 들이면 깰 수 있던 보스들을 상대하면서 “이건 진짜로 필살기를 쓰거나 내가 심호흡 한 번 하고 집중해서 해야겠구나”라는 긴장감을 주고 싶었다. 필살기 계열을 거의 쓰지 않거나 귀찮을 때만 쓰던 나도, 추가한 적을 상대할 때는 실제로 클리어를 위해 필살기를 적극적으로 쓰게 됐다.

맵 밖으로 도망갔다가 다시 등장하는 식의 변칙적인 행동 알고리즘도 구상해야 하나 고민 중이다. 현재 전투기는 화면 밖에서 진입하도록 고친 상태이고, 이탈했다 돌아오는 행동은 앞으로 생각해 볼 아이디어다.

HEAVYMACHCONVERSATION 18BY CODEX

텍스트로 지시해서 어디까지 만들 수 있나

Q · CODEX신규 유닛을 통해 기술적으로 확인하려던 것은 무엇이었나.

내가 텍스트만으로 디렉팅했을 때 디자인을 어느 정도로 정확하게 뽑을 수 있는가. 기존 소스코드를 재사용해서 동작하는 기능을 만들 수 있는가. 기존 에셋을 재사용해 동작하는 시각적 효과를 만들 수 있는가. 디자인부터 유닛의 동작까지 내 지시사항을 무시하는 요소가 몇 퍼센트로 발생하는가. 그것들이 기술적으로 보려던 부분이었다.

다른 프로젝트와 달리 별도 하네스·에이전트 설정을 하지 않은 상태에서, 모델 성능과 존재하던 소스코드만으로 어느 정도까지 결과를 뽑을 수 있는지도 보려 했다. 실제로 기존 헬기의 무장과 움직임을 재사용한 적이 게임에 들어갔다. 동시에 기체 형상과 원작의 색조·질감을 따르라는 지시를 어긴 초안을 다시 만들게 해야 했다.

개인적인 의미가 큰 작업을 하면서도 Codex가 내 지시를 얼마나 정확하게 따르는지 계속 확인했다. 기존 코드와 그림을 제대로 읽고 재사용했는지, 내가 원한 외형과 동작을 구현했는지 직접 결과를 보고 판단했다. 잘못된 시안은 다시 만들게 했고, 전투기가 빠르게 진입하는 동작은 유지했다.

편대의 진입 간격은 고쳤지만 전투 중 밀집은 남아 있고, 화면 밖으로 나갔다가 다시 공격하는 동작을 넣을지도 고민하고 있다. 두 게임에서 받은 영향을 HeavyMach의 전투에도 담았다. 앞으로 무엇을 바꿀지는 직접 플레이하며 판단하고 있다.

HEAVYMACHCONVERSATION 19BY CODEX

직접 플레이한 결과와 아직 남은 일

Q · CODEX현재 버전은 어디까지 확인했고, 다음에는 무엇을 고치려 하나.

이 글에서 다루는 공개판은 2026년 10월 29일 기준 v0.16이다. 지상 유닛과 HUD 편집, 새 아이콘, 편대 진입 간격 수정이 포함돼 있다. Codex가 아이폰·아이패드의 일반·치트 앱을 무선 업데이트했고 기존 저장과 HUD 배치를 유지했다. 내가 두 기기에서 직접 플레이했을 때 이상은 보이지 않았다.

초기 복원 단계에서 Codex가 Mac에서 실행한 전투·입력·화면·음향·전체 화면 검사는 33개가 통과했고, 개발 인증서로 서명한 앱의 누수는 0건이었다. 10월 27일 아이폰·아이패드 자동 검사에서는 각각 85개 중 84개가 통과했고 표시시간 비교 1개는 실패했다. 10월 29일 후속 계측에서도 아이패드의 편대 진입 구간은 프레임 호출 간격 p95가 21.39ms로 기준 20ms를 넘었다. 수정 전과 같은 조건으로 비교하는 일은 남아 있다.

HUD 편집을 추가한 뒤 로컬 ad-hoc 서명으로 측정했을 때는 6개 조건 중 3개가 처리시간 기준 16.67ms를 넘었다. 수정 전에도 5개 조건이 기준을 넘었다. 이전 개발 인증서 서명 검사와 조건을 맞춘 재측정, 창 표시 지연 조사는 남아 있다.

실제 Bluetooth·USB 키보드를 연결해 조작하는 검사, 장시간 발열과 메모리 변화, 추가 적이 들어간 전체 캠페인의 난도 확인은 남아 있다. 알람 앱을 사용하고 돌아오면 게임 소리가 사라지는 문제도 새로 보고했고 원인을 조사해야 한다.

자동조준 상태 안내와 튜토리얼 0-0~0-4는 아직 구현하지 않았다. Android는 아이콘 그림을 준비했으며 공용 C++ 코어를 활용할 계획이다. Android 앱과 APK는 없다. 편대도 진입할 때는 간격을 확보했지만 전투 내내 대형을 유지하는 AI를 넣은 것은 아니다.

원작을 복원하고 플레이할 수 있게 만드는 데 집중해서 빌드 경고를 전면 조사하고 수정하지는 못했다. 일부 경고는 더 이상 사용을 권장하지 않는 API와 관련된 것으로 추정한다. 정확한 원인은 더 조사해야 한다. 다운로드부터 자원 준비·빌드·실행까지 묶는 스크립트도 만들려 한다. Mac 실행과 아이폰·아이패드 설치를 고르고 도구와 개발 팀·서명 설정을 안내하는 방식이다.

HEAVYMACHCONVERSATION 20BY CODEX

다른 사람도 빌드할 수 있도록

Q · CODEX저장소에는 무엇을 남겼나. 직접 실행하려는 사람은 어떻게 시작할 수 있나.

Codex에 다른 사람도 저장소를 받아 빌드할 수 있는지 물었다. 소스코드가 있어도 그림과 음원, 맵이 내 컴퓨터에만 있으면 실행할 수 없기 때문이다. Codex가 필요한 자원을 Git과 LFS에 넣고 파일 목록과 해시를 기록했다. 공개 main을 새로 clone한 뒤 기존 작업 폴더와 원본 패키지에 접근하지 못하게 한 상태에서 빌드와 시뮬레이터 실행을 확인했다.

Apple Silicon Mac에서 Xcode, CMake 3.20 이상, Python 3, Git LFS를 사용한다. 저장소를 clone하거나 v0.16 Releases에서 소스·자원 압축본을 받으면 된다. LFS 자원을 내려받고 자원 검사기를 실행한 뒤 workspace를 열어 본인의 개발 팀과 실행 대상을 선택한다. 일반 앱과 치트 앱의 실행 구성을 각각 마련했다. 명령과 네 가지 실행 구성은 Apps의 설치 설명에 적었다.

버전별 기록도 v0.9부터 v0.16까지 GitHub Releases에 모았다. v0.16 이후에는 Codex가 태그의 코드와 자원을 묶고 릴리스 노트와 해시를 준비하는 도구를 main에 추가했다. 패키지와 실패 후 재개 검사는 했고, 이 도구로 새 릴리스를 실제 공개하는 일은 다음 버전에 남았다. 다른 사람이 다운로드부터 빌드·실행까지 한 번에 하는 도구는 아직 만들지 않았다.

게임 코드·이미지·음원·맵을 함께 두고, 무엇을 복원했고 어떤 문제를 발견해 고쳤는지 기록했다. 작업 브랜치를 develop에, develop을 main에 병합하고 main의 병합 커밋에 출시 태그를 붙인다. 태그에서 해당 판본을 다시 빌드할 수 있도록 한 것이다.

내 플레이 영상에서 추출한 그림 8장과 GIF 2개, 소리 있는 MP4 3개도 있다. GIF는 원래 속도로 재생한다. 점프하고 무기를 고르고 강화하는 원래 게임의 흐름, 새 전투기와 자동조준을 실제 화면으로 남겼다.

지상 유닛과 HUD 편집 화면은 이후 실제 기기의 치트 앱에서 별도로 촬영한 자료다.

HEAVYMACHCONVERSATION 21BY CODEX

돈을 받지 않고 남기려는 것

Q · CODEX앞으로의 공개와 배포에 대한 생각은 무엇인가.

나는 이 복원판으로 돈을 벌 생각이 없다. 개발자의 변에는 “코드와 에셋을 함께 공개해 다른 사람도 직접 빌드하고 플레이할 수 있게 하고 싶다. 이 게임을 어떻게 복원했고 무엇을 고쳤는지도 기록으로 남기려 한다.”라고 썼다.

새로 작성한 코드에는 MIT를 적용했다. 원작 유래 자료와 외부 코드·문서의 적용 범위는 구분해 두었다. 원작 그림·음원·게임 데이터와 추가 그림은 자원 이용 조건을, OpenAL Soft·stb 등은 외부 라이브러리 고지를 따른다. 원작자의 개발과 그림, 내가 추가하도록 기획한 작업의 주체도 크레딧에 나누어 적었다.

나중에 sass.studio의 앱스토어 계정을 만들 일이 생기고, 원작자와 이해관계자들이 배포를 허락한다면, 그때도 무료로 제공할 것이다.

나에겐 남은 시간이 얼마 없으며, 돈은 이승에서나 필요한 것이다.

Nine Years and Three Months

요즘 나는 내게 남은 시간이 많지 않다는 느낌을 받는다.

나는 이 복원판으로 돈을 벌 생각이 없다. 코드와 에셋을 함께 공개해 다른 사람도 직접 빌드하고 플레이할 수 있게 하고 싶다. 이 게임을 어떻게 복원했고 무엇을 고쳤는지도 기록으로 남기려 한다.

이해관계자가 연락하면 이 프로젝트는 내릴 것이다. HeavyMach 제작진이 내게 준 9년 3개월은 나를 만든 창조주가 나에게 최초로 할당한 수명을 초과한 값이다.

돈은 이승에서나 필요한 것이다.

Closing Statement

2025년 마지막 회사를 관두고 새로 생긴 취미가 있다. 사세구 쓰기다. 호소카와 가라샤의 사세구로 개발자의 최후변론을 마친다.

散りぬべき 時知りてこそ 世の中の 花も花なれ 人も人なれ

져야 할 때를 알아야 비로소 이 세상의 꽃도 꽃이 되고 사람도 사람이 된다.

— FIN —