동물의 숲 대화를 실시간 LLM으로 교체한 GameCube 메모리 해킹 사례

1 month ago 17

  • 고전 게임 동물의 숲(GameCube, 2001) 의 반복적인 대사를 실시간 클라우드 기반 LLM 대화로 바꾸는 프로젝트
  • 게임 코드를 수정하지 않고, 메모리 해킹과 공유 메모리(mailbox) 방식을 통해 외부 Python 스크립트와 AI를 연결
  • 게임의 텍스트는 단순 문자열이 아닌 특수 제어 코드 언어로 처리되어, 별도의 인코더·디코더를 구현해 해결
  • 대사 생성은 Writer(창의적 대사 작성)Director(제어 코드·표현 추가) 로 분리해 품질을 확보
  • 결과적으로 마을 주민들이 뉴스, 소문, 풍자까지 반영한 예측 불가한 AI 대화를 펼치며 고전 게임에 새로운 생명력을 부여
  • 프로젝트 코드는 GitHub에 공개

문제 정의

  • 동물의 숲은 매력적이지만 반복적인 대사로 유명하지만, 23년이 지나도 대사는 변하지 않아, 이를 혁신적으로 바꿀 방법을 고안
  • 문제는 GameCube가 485MHz CPU, 24MB RAM, 네트워크 미지원의 폐쇄적 환경이라는 것
  • 원본 게임은 코드 수정 없이 그대로 유지해야 했음
  • 반복적 대사를 현대 LLM으로 대체하는 브릿지 구축이 목표

첫 단계: 대화 시스템 해킹

  • 커뮤니티의 Animal Crossing 디컴파일 덕분에 C 코드 접근 가능
  • m_message.c 파일의 함수 호출을 후킹해 대사 텍스트 교체 성공
  • 그러나 외부 AI 데이터를 실시간으로 주고받는 방법이 과제로 남음

메모리 메일박스 방식

  • GameCube RAM의 특정 영역을 IPC 메일박스로 활용
  • Python 스크립트가 메모리 주소에 직접 쓰기/읽기 → 게임과 AI 간 교신
  • 메모리 스캐너를 작성해 화자 이름(0x8129A3EA), 대사 버퍼(0x81298360) 주소 확보

제어 코드 언어

  • 단순 문자열 전송 시 게임이 프리징 발생
  • 이유: 동물의 숲은 <End Conversation>, <Pause>, <Color Line> 등 제어 코드 기반 언어 사용
  • Python으로 인코더/디코더 작성 → 인간 친화적 텍스트 ↔ 게임이 이해하는 바이트 시퀀스 변환

네트워크 대안 검토

  • GameCube Broadband Adapter가 존재하지만, Animal Crossing은 네트워크 스택이 없음
  • BBA를 쓰려면 네트워킹 스택과 비동기 I/O를 추가해야 하므로 비효율적
  • 대신 에뮬레이터 메모리 해킹이 단순하고 안정적이라고 판단

AI 파이프라인

  • 초기에는 단일 LLM에 창작과 제어 코드를 모두 책임지게 했으나, 품질 문제가 커서 Writer-Director 분리 전략을 선택
    • Writer: 캐릭터 성격 기반으로 창의적 대사 생성 (팬 위키 데이터 활용)
    • Director: 대사를 읽고 적절한 제어 코드, 표정, 색상, 사운드 삽입
  • 2단계 LLM 파이프라인은 AI 창의성과 기술적 요구사항을 분리해, 각각의 강점을 살리는 구조임
  • 역할 분리 덕분에 안정적인 품질 확보

결과와 확산

의의

  • 레트로 콘솔 해킹, AI 통합, 게임 보존이 결합된 실험적 프로젝트
  • 2001년 게임에 2025년 AI를 연결하여 세대를 넘는 인터랙션 구현
  • 게임은 더 이상 반복적 대화가 아니라, 살아있는 가상 세계로 진화
  • 전체 개발 과정/데모 영상: Modern AI in a 24-Year-Old Game

Read Entire Article