Animal Crossing cho GameCube 24 năm tuổi thay hệ thống hội thoại bằng LLM nhờ hack bộ nhớ
(joshfonseca.com)- Một dự án thay các câu thoại lặp đi lặp lại trong game kinh điển Animal Crossing (GameCube, 2001) bằng hội thoại LLM chạy trên đám mây theo thời gian thực
- Không sửa mã game, dự án kết nối script Python bên ngoài và AI thông qua hack bộ nhớ và cơ chế bộ nhớ dùng chung (mailbox)
- Văn bản trong game không được xử lý như chuỗi ký tự đơn thuần mà là một ngôn ngữ mã điều khiển đặc biệt, nên tác giả đã giải quyết bằng cách tự viết bộ mã hóa/giải mã riêng
- Việc tạo thoại được tách thành Writer (viết thoại sáng tạo) và Director (thêm mã điều khiển và biểu cảm) để đảm bảo chất lượng
- Kết quả là các cư dân trong làng có thể tạo ra những cuộc hội thoại AI khó đoán, phản ánh cả tin tức, tin đồn lẫn châm biếm, qua đó mang lại sức sống mới cho tựa game cổ điển
- Mã nguồn dự án được công khai trên GitHub
Xác định vấn đề
- Animal Crossing rất cuốn hút nhưng cũng nổi tiếng vì các câu thoại lặp lại; sau 23 năm, nội dung hội thoại vẫn không đổi, nên tác giả tìm cách thay đổi điều đó một cách đột phá
- Vấn đề là GameCube là một môi trường khép kín với CPU 485MHz, RAM 24MB, không hỗ trợ mạng
- Game gốc phải được giữ nguyên, không chỉnh sửa mã nguồn
- Mục tiêu là dựng một cầu nối để thay thế lời thoại lặp lại bằng LLM hiện đại
Bước đầu tiên: hack hệ thống hội thoại
- Nhờ dự án decompile Animal Crossing của cộng đồng, tác giả có thể truy cập mã C
- Hook lời gọi hàm trong file
m_message.cvà đã thành công trong việc thay thế văn bản hội thoại - Tuy vậy, cách trao đổi dữ liệu AI bên ngoài theo thời gian thực vẫn là bài toán còn lại
Cơ chế mailbox trong bộ nhớ
- Một vùng cụ thể trong RAM của GameCube được dùng làm mailbox IPC
- Script Python ghi/đọc trực tiếp vào địa chỉ bộ nhớ → giao tiếp giữa game và AI
- Tác giả viết một trình quét bộ nhớ để tìm ra địa chỉ của tên người nói (0x8129A3EA) và bộ đệm hội thoại (0x81298360)
Ngôn ngữ mã điều khiển
- Khi chỉ truyền chuỗi ký tự đơn giản, game bị đóng băng
- Lý do: Animal Crossing sử dụng ngôn ngữ dựa trên mã điều khiển như
<End Conversation>,<Pause>,<Color Line> - Tác giả viết bộ mã hóa/giải mã bằng Python → chuyển đổi giữa văn bản thân thiện với con người và chuỗi byte mà game hiểu được
Xem xét các lựa chọn mạng
- GameCube có Broadband Adapter, nhưng Animal Crossing không có network stack
- Nếu dùng BBA thì phải bổ sung network stack và I/O bất đồng bộ, nên không hiệu quả
- Thay vào đó, tác giả kết luận rằng hack bộ nhớ trong trình giả lập đơn giản và ổn định hơn
Pipeline AI
- Ban đầu, tác giả để một LLM duy nhất đảm nhiệm cả sáng tác và mã điều khiển, nhưng chất lượng có vấn đề nên đã chọn chiến lược tách Writer-Director
- Writer: tạo thoại sáng tạo dựa trên tính cách nhân vật (sử dụng dữ liệu từ fan wiki)
- Director: đọc lời thoại và chèn mã điều khiển, biểu cảm, màu sắc, âm thanh phù hợp
- Pipeline LLM hai giai đoạn này tách biệt tính sáng tạo của AI với các yêu cầu kỹ thuật, tận dụng điểm mạnh của từng phần
- Nhờ phân tách vai trò, chất lượng được giữ ổn định
Kết quả và lan tỏa
- Khi đưa news feed vào, các cư dân sẽ phản ánh các tiêu đề trong những cuộc trò chuyện thường ngày
- Hệ thống tin đồn dựa trên bộ nhớ dùng chung → xuất hiện phong trào chống Tom Nook
- Vì phản ánh trực tiếp nguồn bên ngoài nên đôi khi cũng xuất hiện những câu thoại kỳ quặc và gây khó chịu
- Toàn bộ mã nguồn (giao diện bộ nhớ, bộ mã hóa/giải mã, logic prompt AI) đều được công khai trên GitHub
Ý nghĩa
- Một dự án thử nghiệm kết hợp hack console retro, tích hợp AI và bảo tồn game
- Kết nối AI năm 2025 với một trò chơi năm 2001 để tạo ra tương tác vượt qua nhiều thế hệ
- Trò chơi không còn chỉ là những đoạn hội thoại lặp lại, mà đã tiến hóa thành một thế giới ảo sống động
- Toàn bộ quá trình phát triển/video demo: Modern AI in a 24-Year-Old Game
7 bình luận
Wow.. thật sự rất thú vị đấy
Người làm được việc này mà nộp hồ sơ vào Nintendo thì chắc họ sẽ rước về ngay.
Chỉ nghĩ rằng nếu thời DOS xưa mà Ultima được làm như thế này thì chắc sẽ rất thú vị..
Cái này đúng là rất geek!
Dự án này vui ơi là vui luôn
Ý kiến trên Hacker News
Chia sẻ link mã nguồn của bản mod Animal Crossing LLM tại đây: github.com/vuciv/animal-crossing-llm-mod, và vì tò mò LLM chặn lời thoại trong game rồi giữ game ở trạng thái tạm dừng như thế nào cho tới khi tạo xong phản hồi, tôi đã đổ 40 nghìn token từ gitingest.com vào Claude Opus 4.1 để hỏi trực tiếp; đây là câu trả lời được chia sẻ trên claude.ai. Điểm cốt lõi là hàm
watch_dialogue()polling mỗi 0,1 giây và phản hồi bằng văn bản tạm thời xem vị trí mã cụ thể. Trên thực tế, người dùng sẽ thấy nút "Nhấn A để tiếp tục", và hệ thống kỳ vọng phản hồi của LLM sẽ xuất hiện trước thời điểm đó.Tôi đã ghi chép chi tiết hơn trên blog của mình: bài viết trên simonwillison.net
Buồn cười thật khi sau khi trao cho dân làng khả năng ‘suy nghĩ’, việc đầu tiên chúng muốn làm lại là lật đổ Tom Nook. Nếu làm được trên trình giả lập GameCube, tôi có cảm giác chắc chắn cũng có thể triển khai trên trình giả lập Switch.
Tôi cũng nghĩ tới chuyện thử làm bản Animal Crossing New Horizons.
Tôi cũng muốn lật đổ Tom Nook. Tom Nook nhốt bạn lại, đẩy toàn bộ cư dân trong thị trấn vào vòng xoáy nợ nần bất tận, và để làm hắn hài lòng thì cần tới hàng triệu bells.
Xét việc Tom Nook kiểm soát cả thị trấn như một ông trùm mafia, tôi nghĩ chẳng ai có thể trách họ nổi dậy.
Muốn làm trên bản Switch thì phải decompile mã game Animal Crossing. DRM bây giờ mạnh hơn thời GameCube rất nhiều. Về lý thuyết thì có thể, nhưng nếu tự tay triển khai chắc sẽ cực kỳ vất vả.
LLM phần lớn được huấn luyện dựa trên Reddit. Và câu đùa kiểu "Tom Nook là một nhà độc tài tư bản" là meme trên Reddit. Nhiều phản ứng của LLM thực ra gần với việc lặp lại hài hước hay quan điểm trên Reddit hơn là ‘suy nghĩ’ thật sự.
Tôi thấy kiểu ứng dụng này thực sự rất ngầu. Trong tương lai, thứ tôi mong chờ nhất là NPC dùng LLM trong game. Việc cứ phải nghe đi nghe lại cùng một câu thoại là một trong những yếu tố phá hỏng cảm giác nhập vai nhất.
Thành thật mà nói, tôi không chắc cách này thực tế hữu ích đến đâu! Khi NPC lặp lại cùng một câu, với người chơi đó cũng là tín hiệu rằng “đoạn hội thoại này kết thúc rồi”. Chắc chắn sẽ có các ứng dụng hay ho, nhưng thoại lặp thực ra cũng là một ‘tính năng’. Cứ phải chờ xem mọi thứ diễn biến ra sao xD
Những thử nghiệm kiểu này đã xuất hiện trong các game nhỏ hoặc trong những bản mod lớn của Skyrim rồi. Tôi đã nghịch một chút với bản mod Skyrim đó, và có rất nhiều vấn đề cần giải quyết. Trước hết, để tạo ra LLM cần một lượng văn bản huấn luyện khổng lồ, và việc xóa một nội dung cụ thể về sau là cực kỳ khó. Nếu người dùng chỉ nhập vai với AI trong Skyrim thì còn tạm ổn, nhưng NPC lại có thể nhắc tới các vấn đề y tế hoặc người nổi tiếng ngoài đời, như Taylor Swift hay Fox News. Với LLM hiện tại thì gần như không giải quyết được chuyện này. Ngoài ra LLM còn đưa ra những ‘lời hứa’ mà game không thể xử lý. Ví dụ NPC có thể nói rất thuyết phục kiểu "Hôm qua tôi đã đi dungeon đó rồi", nhưng trên thực tế địa danh hay sự kiện như vậy không hề tồn tại trong game. Đây cũng là một lĩnh vực mà LLM hiện tại chưa xử lý nổi. Để trải nghiệm những phần đó mượt mà, tôi nghĩ bản thân AI phải tiến thêm ít nhất một thế hệ nữa. Mod Mantella thì vui đấy, nhưng ở trạng thái hiện tại rất khó phổ biến rộng rãi như một sản phẩm chính thức.
Tôi nghĩ chỉ với local LLM thôi cũng đã đủ để làm đến mức này. Việc GPU phải bận suy luận LLM có thể là vấn đề, nhưng không phải thứ không thể vượt qua. Tôi sẽ không muốn dùng kiểu này cho các tiến trình cốt truyện chính, nhưng với hội thoại NPC nhẹ nhàng hay kịch bản RPG thì cực kỳ hợp. Và tôi không thích chuyện game chơi đơn lại phụ thuộc vào remote inference trên cloud; khi dịch vụ đóng cửa thì bản thân game cũng không chạy được nữa.
Tôi có thể tưởng tượng ra cảnh người dùng mê NPC dùng LLM trong MMORPG đến mức cày vàng 12 tiếng mỗi ngày rồi yêu đương với bạn gái AI — một kiểu kết hợp giữa ‘nghiện game + ảo giác AI’ có lẽ sắp thành hiện thực.
Tôi cũng từng ghét việc lặp đi lặp lại cùng một câu thoại, cho tới khi Skyrim có câu “I used to be an adventurer like you, then I took an arrow in the knee”.
Ý tưởng dùng LLM như một công cụ modding để trao ý nghĩa mới cho không gian ảo thật sự rất thú vị. Cách tiếp cận này khá giống với các công cụ plunderludic như Unity Hawk nên tôi nghĩ cũng phù hợp cho các can thiệp mang tính nghệ thuật. Link tham khảo: giới thiệu Unity Hawk
Việc thổi luồng sinh khí mới vào game cũ lúc nào cũng hấp dẫn và vui vẻ. Việc codebase của Animal Crossing đã được decompile thành mã C dễ đọc cũng rất thú vị. Giờ có nhiều cơ hội hơn để thoải mái vọc vạch.
Việc tìm ra cách triển khai bằng cách hack bộ nhớ dùng chung thực sự rất xuất sắc. Về mặt kỹ thuật, nó tiết kiệm một lượng thời gian khổng lồ, và việc đánh trúng đúng điểm như thế này mới là bản lĩnh thật sự của chuyên gia — đúng kiểu “10 đô để cầm búa, 5.000 đô để biết phải gõ vào đâu”.
Tôi có một câu hỏi kỹ thuật: cơ chế nào đảm bảo địa chỉ bộ nhớ đó là ổn định? Có phải điều kiện là việc cấp phát bộ nhớ trong game luôn xảy ra theo cùng một thứ tự không?
Kiểu dùng bộ nhớ chia sẻ này cũng khá phổ biến trong randomizer nhiều người chơi. Thường thì người ta dùng vùng nhỏ hơn, nhưng scratch memory được tận dụng như một message buffer giữa trình giả lập và mạng, hoặc giữa FXPakPro và mạng. Đây là một pattern cực kỳ hữu ích.
Khi trao cho từng nhân vật kiểu agency như vậy, việc cách họ ‘suy nghĩ về thế giới’ được tạo ra một cách tự nhiên là điều cực kỳ thú vị. Tùy vào mức độ LLM có thể đảm nhiệm vai trò này tới đâu, đây là một thí nghiệm kỳ lạ nhưng hấp dẫn để ước lượng con người thật sẽ hành xử thế nào trong một bối cảnh hư cấu.
Có thể tôi đang bỏ sót điều gì đó, nhưng cách này thực chất chỉ tạo văn bản mà không phản ứng gì với sự kiện trong game phải không? Có vẻ ngay cả quy trình offline hay batch process cũng có thể tạo ra đúng lượng văn bản tương tự. Suy luận LLM thời gian thực thì đúng là lạ và hay, nhưng không có vẻ thực sự cần thiết hay quan trọng. Nếu dùng lookup table thay vì polling thì có lẽ sẽ đơn giản hơn nhiều và hiệu năng cũng tốt hơn.
Bài viết có nói “Nintendo GameCube là console 24 năm tuổi với CPU PowerPC 485MHz, RAM 24MB, và không có mạng”, nhưng thực tế máy này từng có phụ kiện Ethernet chính thức là Broadband Adapter. Chỉ có vài game hỗ trợ, trong đó có Phantasy Star Online. Tôi cũng từng kết nối nó với PC để stream game hoặc ROM; cách làm là lợi dụng lỗ hổng bộ nhớ để nạp mã qua mạng, và tốc độ tải còn chậm hơn cả đọc từ đĩa.
Trước đây từng có dự án nghiên cứu biến The Sims hay Grim Fandango thành game học ngôn ngữ bằng cách thay thế các chuỗi đã bản địa hóa. Giờ đây, tôi nghĩ hội thoại sinh sinh theo ngữ cảnh và được điều chỉnh theo trình độ người học có thể trở thành một killer app cực mạnh cho việc học ngôn ngữ.
Tôi thật sự rất mong chờ chuyện này. Ai cũng muốn học ngoại ngữ, nhưng lại ghét việc học nhàm chán. Nếu tôi có thể chơi Grim Fandango và trực tiếp hỏi AI kiểu “Morte nghĩa là gì?”, rồi LLM dạy kèm cho tôi theo thời gian thực, thì tôi sẵn sàng trả tiền để dùng. Nếu thấy chán thì cứ quay lại chơi game tiếp, và nếu tôi đưa cho AI danh sách các từ mình đã biết, nó còn có thể tăng dần độ khó của từ vựng và câu để tạo ra trải nghiệm học tự nhiên hơn.
Ngay cả Duolingo cũng đã bắt đầu tích cực sử dụng AI.
Tom Nook là nhân vật 'Nook' trong game