AI Sparkup

복잡한 AI 세상을 읽는 힘 ⚡

24년 된 게임큐브에 ChatGPT 심기: 동물의 숲 AI 대화 해킹 프로젝트

2002년 출시된 게임큐브의 ‘동물의 숲’에서 마을 주민들이 트럼프와 젤렌스키 뉴스를 논하고 대출 상환 부담을 호소한다면? 한 개발자가 메모리 해킹으로 24년 된 게임에 실시간 AI를 심어 만든 마법 같은 이야기입니다.

동물의 숲에서 AI가 생성한 대화 장면
쿠키가 “모든 게 게임 같다는 이상한 꿈을 꿨어!”라고 말하는 모습 (출처: Josh Fonseca)

불가능해 보였던 도전

조시 폰세카(Josh Fonseca)가 마주한 문제는 단순했습니다. 동물의 숲 주민들의 반복적인 대사에 지쳤다는 것. “안녕! 오늘 날씨 좋네!” 같은 말을 몇백 번 들으면 누구든 지겨워지겠죠.

하지만 해결책은 전혀 단순하지 않았어요. 게임큐브는 2001년 하드웨어입니다. 마치 20년 전 휴대폰에 최신 앱을 설치하려는 것과 같은 상황이었죠.

485MHz 프로세서와 24MB RAM. 요즘 스마트폰의 수천 분의 일 성능이에요. 게다가 인터넷 연결도 없습니다. 완전한 디지털 섬이었던 거죠.

그런데 여기에 클라우드 기반 ChatGPT를 연결해야 했습니다. 게임 코드는 한 줄도 바꾸지 않고 말이에요.

첫 번째 돌파구: 게임의 심장 찾기

다행히 좋은 소식이 있었어요. 동물의 숲 리버스 엔지니어링 커뮤니티가 최근 엄청난 작업을 완료했거든요. 게임의 원시 코드를 거의 해독한 거예요.

이건 마치 고대 이집트 상형문자를 현대어로 번역한 로제타 스톤을 발견한 것과 같았습니다. 이해할 수 없는 기계어 대신 읽을 수 있는 C 코드를 얻게 된 거죠.

m_message.c라는 파일에서 대화 시스템의 핵심을 찾았어요. 마치 게임 캐릭터들의 입을 움직이는 근육을 발견한 것 같았습니다. 이 함수를 가로채면 게임 속 대사를 마음대로 바꿀 수 있었거든요.

하지만 미리 준비된 대사를 바꾸는 것과 실시간으로 AI가 만든 대사를 넣는 건 완전히 다른 문제였어요.

네트워크 없는 세상에서 AI와 소통하기

첫 번째 아이디어는 게임에 인터넷 기능을 추가하는 것이었어요. 하지만 이건 마치 1920년대 자동차에 GPS를 설치하려는 것과 같았습니다. 엔진부터 계기판까지 모든 걸 새로 만들어야 했거든요.

두 번째 시도는 파일을 이용한 소통이었습니다. 게임이 “AI야, 이런 상황에서 뭐라고 말할까?”라고 파일에 적으면, AI가 답변을 다른 파일에 써주는 방식이요. 하지만 에뮬레이터의 보안 때문에 이것도 막혔어요.

메모리 우편함: 천재적 해결책

해답은 의외로 단순한 곳에 있었습니다. 바로 메모리를 우편함으로 쓰는 거예요.

이걸 쉽게 설명하면 이렇습니다. 게임큐브의 메모리를 큰 사물함이라고 생각해보세요. 그 사물함의 특정 번호(예: 123번 칸)를 AI와의 소통용으로 정해두는 거예요.

게임이 “누가 말하고 있는지”와 “지금 무슨 대화를 하는지”를 123번 칸에 적어둡니다. 외부에서 돌아가는 AI 프로그램이 0.1초마다 이 칸을 확인해요. 새로운 대화가 시작되면 ChatGPT에게 물어보고, 답변을 다시 123번 칸에 적어두죠.

# 마치 우편함에 편지를 넣고 빼는 것처럼 간단해요
def 게임에서_읽기(주소, 크기):
    """게임큐브 메모리에서 데이터를 읽어온다"""
    return 메모리.read(주소, 크기)

def 게임에_쓰기(주소, 데이터):
    """게임큐브 메모리에 데이터를 쓴다"""
    return 메모리.write(주소, 데이터)

이제 문제는 메모리 속에서 정확한 우편함 주소를 찾는 거였어요. 2400만 개의 칸 중에서 대화가 저장되는 정확한 위치를 찾아야 했거든요.

메모리 탐정 되기: 바늘 찾기의 고행

메모리 스캐너를 직접 만들어서 지루한 탐정 작업을 시작했습니다.

과정은 이랬어요. 게임 속 토끼 캐릭터와 대화를 시작합니다. “안녕하세요!”라는 말이 화면에 뜨는 순간 게임을 일시정지시켜요. 그리고 2400만 개 메모리 칸을 모두 뒤져서 “안녕하세요!”라는 글자가 어디에 저장되어 있는지 찾는 거죠.

마치 도서관에서 특정 문장이 적힌 책을 찾는 것과 같아요. 하지만 도서관에 책이 2400만 권 있다고 상상해보세요. 게다가 같은 문장이 여러 책에 있을 수도 있고요.

그래서 다른 캐릭터와도 대화해보고, 다른 문장도 찾아보면서 진짜 “활성 대화창”이 어디에 있는지 확인해야 했어요. 몇 시간의 끈질긴 탐정 작업 끝에 드디어 두 개의 중요한 주소를 찾아냈습니다.

0x8129A3EA – 누가 말하고 있는지 저장하는 곳
0x81298360 – 실제 대화 내용이 저장되는 곳

이제 게임이 뭘 하고 있는지 엿볼 수 있고, 더 중요하게는 AI가 만든 대사를 게임에 주입할 수 있게 됐어요.

게임만의 비밀 언어 해독하기

“Hello World”를 대화 칸에 써넣고 의기양양하게 기다렸는데… 게임이 얼어붙었어요. 캐릭터들은 여전히 움직이는데 대화가 진행되지 않더라고요.

문제는 제가 평범한 한글로 말했다는 거였어요. 동물의 숲은 평범한 언어를 쓰지 않거든요. 마치 외계인들만의 특별한 언어가 있는 것처럼요.

이걸 쉽게 비유하면 이렇습니다. HTML을 생각해보세요. 웹페이지에 “안녕하세요”라고 쓰고 싶다면 그냥 “안녕하세요”라고 쓰면 안 돼요. <p>안녕하세요</p> 같은 특별한 형식으로 써야 브라우저가 이해하죠.

동물의 숲도 마찬가지예요. “잠깐 기다려”라고 하고 싶으면 특별한 코드를 써야 해요. “텍스트를 빨갛게 만들어”라고 하고 싶어도 특별한 코드가 필요하고요.

# 동물의 숲만의 특별한 언어 사전
특별한_명령어들 = {
    0x00: "대화 끝!",
    0x03: "잠깐 멈춰!",        
    0x05: "이 글자는 빨갛게!",     
    0x09: "캐릭터 표정 바꿔!", 
    0x59: "효과음 틀어!",         
    0x1A: "플레이어 이름 넣어!",
}

특히 “대화 끝!” 명령어를 빼먹으면 게임이 영원히 기다려요. 마치 전화 통화에서 “그럼 끊을게”라고 말하지 않으면 상대방이 계속 기다리는 것처럼요.

게임만의 특별한 언어 번역기를 만들어서 다시 시도했더니, 드디어 성공했습니다!

미치가 유럽 지도자들의 트럼프, 젤렌스키 만남에 대해 언급하는 장면
미치: “뉴스 말인데? 유럽 지도자들이 트럼프와 젤렌스키를 만날 계획이래!” (출처: Josh Fonseca)

AI 팀워크: 작가와 감독의 분업

처음엔 ChatGPT 하나가 모든 일을 다 하게 했어요. 재미있는 대화도 만들고, 캐릭터 성격도 맞추고, 게임의 특별한 언어로 번역도 하고요.

하지만 결과는 엉망이었어요. 마치 한 사람이 동시에 소설 쓰기, 연기, 무대 연출을 모두 담당하려는 것과 같았거든요. 모든 걸 다 하려다 보니 아무것도 제대로 못하게 된 거죠.

그래서 일을 둘로 나눴어요. 작가 AI감독 AI로요.

작가 AI는 순수하게 글쓰기만 담당해요. 동물의 숲 캐릭터들의 성격표를 미리 학습하고, 상황에 맞는 재미있는 대화를 써주는 거죠. 마치 드라마 작가가 대본만 쓰는 것처럼요.

감독 AI는 작가가 쓴 평범한 대화를 받아서 “연출”을 담당해요. “여기서 잠깐 멈춰서 긴장감을 주자”, “이 단어는 빨갛게 강조하자”, “여기서 웃는 표정을 짓게 하자” 같은 결정을 내리는 거죠.

이렇게 역할을 나누니까 훨씬 자연스럽고 재미있는 대화가 나왔어요. 전문가들이 각자 잘하는 일에만 집중하니까 결과가 좋아진 거죠.

예상 못한 재미: AI들이 만든 소동

가벼운 마음으로 뉴스 피드를 연결했어요. “AI들이 가끔 현실 얘기도 하면 재미있겠지?”라는 생각이었거든요.

그런데 몇 분 만에 게임 속 주민들이 트럼프와 젤렌스키 뉴스를 자연스럽게 잡담으로 끌어들이기 시작했어요. 아무도 그렇게 하라고 시키지 않았는데 말이에요. 마치 동네 카페에서 아줌마들이 뉴스 얘기하는 것처럼요.

그다음엔 “주민들끼리 서로 뭔 얘기했는지 기억하게 해보자”고 생각했어요. 작은 메모장을 하나 만들어준 거죠.

결과는 예측 가능했어요. 주민들이 서로 험담을 시작했거든요. 특히 대출업자 톰 누크에 대한 불만이 폭발했어요.

쿠키가 톰 누크가 모든 벨을 가져간다고 불평하는 장면
쿠키: “마을은 잘 돌아가고 있지만, 가끔 톰 누크가 모든 벨을 가져가는 것 같아!” (출처: Josh Fonseca)

그런데 여기서 실수를 했어요. 뉴스 소스로 Fox News를 연결했거든요. 결과는…

쿠키가 폭력적인 뉴스를 언급하는 장면
쿠키: “한 여성이 파란 도시에서 강도 사건으로 사망했대!” (출처: Josh Fonseca)

귀여운 동물 게임이 갑자기 사회 비판 드라마가 되어버렸어요. 이상하고, 재미있고, 약간 섬뜩하기도 했죠.

이 프로젝트가 보여주는 것들

이 프로젝트는 단순한 재미있는 장난감 그 이상이에요. 몇 가지 중요한 메시지를 담고 있거든요.

옛날 것도 새롭게 만들 수 있다는 걸 보여줘요. 20년 전 게임이라고 해서 낡은 건 아니에요. 현대 기술과 만나면 완전히 새로운 경험을 만들 수 있거든요. 마치 클래식 자동차에 최신 오디오 시스템을 달아서 새로운 재미를 찾는 것처럼요.

때로는 돌아가는 길이 지름길이라는 것도 증명했어요. 복잡한 네트워크 시스템을 만드는 대신 단순한 메모리 우편함을 선택한 게 결국 성공의 열쇠였거든요.

팀워크의 힘도 보여줍니다. 하나의 AI가 모든 걸 처리하려다 실패했지만, 역할을 나눈 두 AI가 협력하니까 훨씬 좋은 결과가 나왔어요. 사람도 마찬가지죠. 혼자 모든 걸 다 잘하려 하기보다는 각자 잘하는 걸 하는 게 낫잖아요.

가장 재미있는 건 AI의 예측 불가능함이에요. 단순히 대화만 만들어달라고 했는데, AI들이 알아서 정치 토론을 시작하고 경제 불평을 하기 시작했거든요. 마치 키우던 애완동물이 갑자기 철학을 논하기 시작한 것 같은 기분이었을 거예요.

마무리

조시 폰세카는 모든 코드를 GitHub에 공개했어요. 누구든 다운받아서 직접 해볼 수 있거든요. 그가 말했듯이 “지금까지 해본 것 중 가장 도전적이면서 보람 있는 프로젝트”였다고 하네요.

24년 전 게임과 최신 AI의 만남. 불가능해 보였던 다리를 놓은 한 개발자의 창의력이 만들어낸 작은 기적이었습니다.


참고자료:


AI Sparkup 구독하기

최신 게시물 요약과 더 심층적인 정보를 이메일로 받아 보세요! (무료)

Comments