GTA Chinatown Wars

이 게임은 Rockstar Games에서 만든 명작 게임입니다. 다른 시리즈와 다르게, 휴대용 콘솔 게임으로 나온게 특징입니다.
옛날 초딩때 NDS를 가지고 놀던 시절에 이 게임을 정말 재밌게 했던 기억이 있네요.
그랬기에, 이 게임을 모딩하고 한글화 하고 싶단 생각을 많이 했었습니다. 하지만 복잡한 압축 구조 알고리즘때문에 포기했던 많은 게임 중 하나입니다.
하지만, 2026년 AI가 판치는 요즘, 과연 AI로 이 게임을 한글화 할 수 있는 수준까지 끌어올릴 수 있을지 확인하고 싶어 다시 도전해 봤습니다.
한글화 개요 및 게임 파일 구조
이 게임은 사실 모바일 버전으로 한글패치 가 있습니다. 하지만, 이 한글패치는 모바일 버전에서만 적용되는 패치이고, 다른 콘솔에서는 적용하지 못합니다.
모바일과 NDS 버전의 게임 구조가 매우 다르고, 그렇기에 모바일 모딩을 하면서 다른 사람이 만든 도구는 NDS에서 쓸 수 없었기에, 독자적인 구조를 만들 수 밖에 없습니다.
이것 때문에 큰 골칫거리가 생기는데, 후술하도록 하겠습니다.

이 게임의 NDS버전은 game.pak, ROM.WAD, ROM.TOC 로 이루어져 있습니다. game.pak 은 게임 데이터를 압축한 파일이고, ROM.WAD 와 ROM.TOC 는 게임 리소스를 압축한 파일입니다.
당연히 압축이 되어있기 때문에, 크리스탈타일2나 HxD같은 상용 헥스에디터/뷰어로는 리소스 데이터가 보이지 않고, arm9 코드를 까 뒤집어보면서 언패킹 구조를 이해해야됩니다.
큰 구조는 ROM.TOC 가 리소스 테이블이고 ROM.WAD가 리소스 데이터인데, 이 리소스 데이터에서 GXT 라는 각종 데이터들을 추출해내어 이것저것 번역하고, 리소스 추출하고, 폰트 편집하고.. 등이 가능했습니다.
MCP를 이용해 AI와 게임 분석 연동하기
주로 리버싱을 할 때 제가 쓰는 툴은 IDA입니다. 다행히도 IDA에서 쓸 수 있는 매우 좋은 MCP 도구를 누군가 구현해놔서, 쉽게 연동을 할 수 있었습니다.

다만, IDA를 NDS에서 로드할수있도록 loader가 필요하였는데, 이것도 당연히 누군가 만들어 놓은 로더를 사용하여 쉽게 로딩할 수 있었습니다. 다만, 이 로더는 버전이 7.X시절을 목표로 만들어서 작동이 잘 안되서, Fork를 한 뒤 9.0 이상 버전에서 쓸 수 있도록 개선하였습니다 (물론 AI로요)
프롬프트 개선하여 분석 진행하기
이런 콘솔게임 한글화를 하면서, 필요한 정보들은 통상적으로 이런게 있었습니다
- 폰트 확인 및 편집 - 폰트 위치 알아내고 글리프를 한국어로 수정 1-2. 폰트 테이블 확보 및 한글 테이블 교체 1-3. 필요한 경우 폰트 확장
- 게임 텍스트 추출 및 입출력툴 구현
- 게임 이미지 추출 및 입출력툴 구현
이걸 에이전트에 100% 제대로 때려박아줘야 됩니다. 그냥 "한글화 해줘" 라고 하면 당연히 헛발질 하다 토큰만 씁니다..
여기에서 사람이 개입해야되는 부분은, 추출해서 번역, 이미지 추출, 폰트 생성 등이 있겠습니다.
그렇기에, 저같은경우 이런식으로 짰습니다 (운나쁘게도 원본 프롬프트는 사라졌습니다)
이 게임은 GTA Chinatown Wars 라는 닌텐도 게임이야. 나는 이 게임을 한글화하려고 해
한글화를 돕기위해, 게임을 분석해서 아래와 같은 정보를 얻고, 파이썬 스크립트와 설명서를 md파일로 작성해줘. 내가 문서만 읽고도 번역부터 게임 실행까지 완벽하게 가능하도록 코드와 문서를 작성해줘.
1. 먼저 리소스 언팩이 필요하다면, 리소스 패커/언패커 루틴을 찾아서 그걸 구현해줘
2. 리소스 중에서 게임 텍스트를 추출하고, 내가 쉽게 편집할수 있도록 입출력툴을 만들어줘
3. 폰트의 위치를 찾아주고, 폰트 추출을 하는 도구를 만들어줘. 한글화 시 폰트를 직접 추가해야되므로, 폰트 글리프와 관련된 루틴을 찾아서 리소스에 추가할 수 있도록 파이썬 도구를 작성해줘
4. 게임 이미지를 추출하고, png로 변환해서 내가 편집해서 바로 삽입까지 가능하도록 구현해줘
내가 NDS 파일을 이미 언팩해서 unpack_us에 넣어놨으니 이걸 참고해주고, IDA MCP로 코드를 열어놨으니 이걸 참고해줘. 중간중간 테스트를 위해 나오는 임시 경로의 경우 ./tmp 경로 아래에 작성해서 확인해주고, 중간중간 IDA MCP의 rename을 해주고, 문서를 작성해줘
중요한점은, 중간중간 문서를 작성해줘 부분입니다. 리버싱 특성상 코드를 굉장히 많이읽고, 토큰을 많이쓰는데 진도를 나가다가 토큰이 다되서 컨텍스트가 다 날라가는거 금방이더라고요 (...)
AI의 성능, Gemini vs Codex vs Claude
해당 작업을 진행하면서 많은 에이전트를 써봤는데, 느낀점은 이렇습니다.
-
Gemini (3.0 Pro): 대학생 1년 무료라서 써봤는데, 쉬운 작업할땐 정말정말 좋지만 코드 읽을땐 아니더라고요. ROM.WAD 언패킹은 했는데, 이후 텍스트 추출을 못했습니다. 특히 추출하려고할떄 테이블이 필요했는데, 테이블을 자꾸 구글링해서 얻어내려고 하고, 그러다보니 전혀 이상한 테이블을 가져오려고 하더라고요. 이후에도 폰트 글리프 추출을 하려고 하는데, 자꾸 1bpp로 추출해서 틀리다 틀리다 계속 삽질하다 결국 실패했습니다 (결론: 폰트 추출 텍스트 추출 둘다 실패)
-
Claude (Opus 4.6): 코드 읽을때 굉장히 많은 토큰을 썼는데, 결국 조용히 하다가 한번에 추출을 하고 폰트까지 잘뽑고 텍스트까지 잘 추출해내더라고요 (?) 사실 이건 Gemini를 써보면서 프롬프트 엔지니어링을 좀 해서 좋은 성과를 얻은걸수도 있는데, 아무튼 코드 읽는 성능 이런건 정말 지금당장은 Claude가 좋은거같습니다. 대신 토큰이 정말 제한적이여서 이거 하고 다고 다른거 하니까 일주일치 rate limit이 바로 걸리더라고요.. 하지만 그래픽은 추출이 잘 안됐습니다. 그래픽 읽는 실력이 없어서 엉뚱하게 추출했는데도 제대로 추출했다고 생각하더라고요. (결론: 폰트 추출, 텍스트 추출 성공, 그래픽 추출 실패)
-
Codex: 사실 이건 안써봤습니다. 카카오 ChatGPT Pro를 사놨는데 Claude 토큰 정말 싹싹 긁어 썼을때쯤 등록해서 써보지 않을까 싶네요.
결론적으로 말하면, Claude만 성공했고, 토큰만 충분하다면 Claude를 리버싱할때 계속 사용하고 싶네요.
결론

그래서 결국 추출에 성공했습니다. 번역하기 쉽게 텍스트는 추출해서 csv로 만들어줬고, 여기에서 필요한 폰트 목록만 긁어줘서 폰트 생성하는 도구도 만들어줬습니다. 돌려보진 않았지만 다시 ROM.TOC, ROM.WAD로 리빌딩 해주는 기능도 구현해줬고요.
이 작업을 하면서 진짜로 IDA에서 분석을 하고 크리스탈타일2로 바이너리를 열어볼 일이 없다는게 정말 신기했습니다. 지금도 성능과 데이터가 계속 개선되고있는데, 나중엔 정말 특이점이 오지 않을까 싶을 정도네요.
그럼에도 불구하고 사람 공수가 필요했던건 프롬프트 작성이었습니다. 어셈블리(의사코드)와 한글화의 특성상, 정말 필요한 기능만 분석하면 되는데, AI에게 프롬프트 하나 잘못 던져준다면 헛다리 짚다가 토큰 다써버리고 슬롯머신에서 꽝 나온것처럼 끝나는 일이 부지기수였습니다.
그랬기에, 한글화를 해보고 어떤걸 필요로 하는지 알고 그걸 AI에게 잘 줘야 되는게 결국 이번 프로젝트의 핵심이었던 것 같습니다.
혹시 저처럼 분석에 관심 많은데 난이도때문에 하지 못했던 분이 있었다면, 제 글이 도움이 되었길 바라겠습니다. 감사합니다.
(분석된 스크립트는 수동으로 검수 후 Github 등에 올릴 예정입니다.)