게임큐브 레지던트 이블 4, 원본과 바이트 일치하는 C/C++ 완전 디컴파일 공개
- 게임큐브판 레지던트 이블 4(G4BE08)를 원본과 바이트 단위로 같은 C/C++ 소스로 복원하는 디컴파일 저장소 adonis-singh/re4가 공개됨. 커밋 773개, 스타 215개, 포크 16개.
- 복원 작업은 유출된 디버그 빌드(G4BE08 debug, ProDG 빌드)와 Bio4.sym 심볼 및 분할 정보를 기준으로 진행됨.
- 컴파일러가 같은 레지스터 배치와 스케줄을 내도록 자연스러운 표기가 없을 때 COMPILER-DIFF 주석 644개를 붙여 빈 asm, 레지스터 고정, 패딩 문장으로 출력을 맞춤.
- 애니메이션 도구 motion_export.py는 양쪽 디스크의 모션 18961개 중 18946개를 바이트 일치로 내보내고 glTF/BVH로 변환하며, Dolphin으로 검증함.
- 해커뉴스에서는 README가 Claude가 쓴 문체라는 지적과 함께, 바이트 일치를 위한 컴파일러 꼼수가 원본 코드 이해를 해친다는 비판이 나옴.
Hacker News opinions
토큰 얼마나 썼고 어떤 모델 돌렸는지 궁금하다.
보존 관점에서는 활용도가 가장 낮은 디컴파일 중 하나임. 캡콤이 RE4를 온갖 기기에 이식하니까. 유출된 디버그 빌드랑 심볼로 만들었다는 점은 게임 보존 커뮤니티가 이런 자료를 모으고 배포하는 일이 얼마나 중요한지 보여줌. 근데 COMPILER-DIFF 주석 644개는 좀 꺼림칙함. 디컴파일의 가치는 바이트 재현 자체가 아니라 사람이 읽는 소스로 원본 게임에 대한 이해를 복원하는 데 있고, 컴파일러를 억지로 맞추려고 쓰레기를 붙이는 건 오히려 틀렸다는 신호임.
맞는 말임. 그건 정확히 못 맞춘 부분을 hack으로 메운 거고, 아니면 빌드 환경이 아예 다른 거임. 파일 레이아웃이나 변수 선언 순서, 컴파일 순서 같은 건 바이트 단위로 재현이 불가능하고, 그게 인라이닝이나 최적화 결정을 조금씩 바꿔서 바이트 일치를 어렵게 만듦.
난 이런 게 없는 게 낫다고 봄. 그래도 이런 작업을 한다면 대부분의 영역을 덮는 시점에 일단 공개하고 시간을 두고 다듬는 게 맞음. 누가 와서 조금씩 도와줄 수도 있고.
PS1 게임을 AI 에이전트로 디컴파일하는 중인데, 바이트를 맞추는 대신 에이전트가 C 코드랑 테스트 코드를 만들게 함. 하네스가 C를 컴파일해서 원본 함수 바이너리랑 테스트 스위트로 대조하고, 줄과 분기 커버리지 100%에 같은 입력에서 리턴값과 RAM 상태, MMIO 읽기/쓰기 순서가 같아야 통과임. MIPS 시뮬레이터로 돌리니까 테스트가 엄청 빠름. 컴파일러 버전이랑 인자 조합 찾아서 레지스터 배치 맞추는 작업이 너무 오래 걸려서, 에이전트가 어셈블리를 읽고 의미가 같은 C를 쓰는 쪽이 훨씬 빠르더라.
캡콤 이식 얘기 나와서 그런데, 스팀에서 RE 시리즈 보니까 전부 $5 이하더라. 불법 다운로드보다 편하게 만들어놨음.
이런 hack으로 함수 하나 맞추는 게 코드 이해를 크게 해치진 않음. 오히려 코드 전체가 원본과 일치한다는 걸 증명하는 도구로 쓸 만함. 아니면 증명하기가 어려움. 디컴파일은 이해 말고도 고급 모드나 번역 패치 만들 때도 쓰임. 구조체를 asm으로 건드리면 구조체 수정이 어려워지니까 순수 asm보다 정밀도가 올라가는 건 반가운 일임. 물론 컴파일러가 그렇게 동작하게 만든 원본 코드를 되찾는 게 최선이지만, 가끔 완전히 지워진 정보에서 나오기 때문에 정말 어려운 문제임.
OOT랑 MM 디컴파일에는 레지스터 할당이 맞을 때까지 줄 순서를 바꿔주는 bruteforcer 도구가 있었음.
byte-identical은 클로드가 즐겨 쓰는 표현 중 하나임.
README 전체가 클로드가 쓴 문체임. 문장마다 그 느낌이 남.
그게 뭐 어때서. AI는 나랑 다른 사람들 생산성을 엄청 올려줬음. 앞으로 더 좋아질 뿐임.
디컴파일 작업이 멋지긴 한데 죄다 초기 3D 콘솔 게임에 몰려 있는 게 아쉬움. Quake 팬으로서 말하자면 저해상도 텍스처에 뿌연 바이리니어 필터는 취향이 아님.
RE4는 초기 3D 게임이 아님. Quake보다 거의 10년 뒤 게임큐브 후기 타이틀임. 2D 디컴파일도 있는데 포켓몬 레드/블루가 제일 큼. 3D 콘솔 쪽이 오히려 게임을 어셈블리보다 높은 수준 언어로 짰으니까 디컴파일이 더 말이 된다고 봄.
레트로 게이밍 씬에서 AI를 싫어하는 분위기인데, 나는 이런 프로젝트랑 에뮬레이션이 반가움. 에뮬레이션은 원본 시스템과 최적화를 깊이 이해해야 하는 작업임.
그 혐오는 그냥 가려진 질투 같음. 이제 PM이나 TPM, 라인 매니저가 상당한 코드를 직접 넣을 수 있게 됐으니까. 25년 넘게 개발한 사람으로서 하는 말임. 예전엔 개발자를 기다려야 했던 이슈를 PM이 직접 고침. 화나는 건 알겠는데 이 도구들은 사라지지 않음.
저장소 파일 몇 개 훑어봤는데 주석 품질이 엄청 높음. 20년 전 개발팀이 만든 디컴파일 코드 백만 줄을 사람이 앉아서 문서화한다고 상상해보셈. 레트로 게이밍에서 AI를 싫어할 이유가 없음. 잘 돌아가면 누가 만들었든 상관없고, 오히려 클로드가 하는 게 낫다고 봄. 사람은 지루해하고 커뮤니티 분쟁에 휘말리고 사라지니까.