1 điểm bởi GN⁺ 2025-10-20 | 1 bình luận | Chia sẻ qua WhatsApp
  • Duke Nukem: Zero Hour là dự án mã nguồn mở giới thiệu việc decompile hoàn toàn ROM Nintendo 64 của game này
  • Kho lưu trữ này đã đạt được mục tiêu khôi phục toàn bộ mã nguồn gốc của phần mềm game ở mức 100%
  • Người dùng phải sở hữu ROM của chính game; việc build và kiểm thử toàn bộ có thể thực hiện qua ROM US hoặc bản Pháp gốc
  • So với các dự án decompile đã có trước đó, dự án này có lợi thế kỹ thuật nhờ sự tương thích chức năng hoàn hảo và hỗ trợ công cụ debug
  • Dự án này là tài nguyên rất có giá trị cho nghiên cứu, biến đổi, porting và phân tích engine game

Ý nghĩa và lợi thế cạnh tranh

  • Duke Nukem: Zero Hour là một tựa game hành động nổi tiếng, phát hành độc quyền trên nền tảng Nintendo 64
  • Dự án mã nguồn mở này đã decompile toàn bộ ROM của game bằng C, Python, v.v., tái cấu trúc ở cấp độ mã nguồn
  • Khác với các dự án decompile N64 khác, nó đạt sự tương thích hoàn hảo, cho phép build và chạy ROM ổn định, debug dựa trên mã nguồn, cùng hỗ trợ đa phiên bản
  • Dự án có giá trị tài liệu xuất sắc cho nghiên cứu cấu trúc engine game và kinh nghiệm phát triển game console thập niên 1990
  • Nhiều công cụ phân tích/decompile tự động (asm-differ, mips2c, splat, decomp-permuter, v.v.) đã được tích hợp để tối ưu hiệu suất làm việc cho nhà phát triển

Chức năng chính và kiến trúc

Cấu trúc tổng thể

  • Dự án được xây dựng đa ngôn ngữ, gồm các phần bằng C (trên 95%), Python, Roff, C++, Makefile, Shell, v.v.
  • Thư mục chính:
    • .github/workflows: Cài đặt CI và tự động hóa
    • include, libs, src: Mã nguồn game, thư viện và quản lý header
    • tools: Công cụ phân tích, trích xuất, chuyển đổi
    • versions: Cơ chế hỗ trợ đồng thời nhiều phiên bản game như US/FR
  • Được duy trì rất tích cực với khoảng gần 370 lần commit

Tóm tắt build và cách sử dụng

  • Hỗ trợ môi trường Ubuntu 20.04 và Docker
  • Hỗ trợ trích xuất ROM, so sánh theo từng bit, và chế độ NON_MATCHING
  • Hỗ trợ cả ROM bản Phápbản Mỹ, cho phép chỉ định tùy chọn theo nhu cầu người dùng
  • Tận dụng môi trường Docker và Mutagen Extension để đảm bảo tương thích trên nhiều OS (WIN/Mac/Linux)

Công cụ debug và phát triển

  • Hỗ trợ debug cấp mã nguồn dựa trên gdb và mupen64plus (hiện tại ưu tiên Windows)
  • Hỗ trợ tích hợp với Visual Studio Code và Native Debug Extension
  • Các công cụ tự động hóa và phân tích cốt lõi:
    • asm-differ: So sánh source/target ở mức assembly
    • decomp-permuter: Sắp xếp lại mã và tự chấm điểm
    • mips2c: Chuyển mã từ assembly MIPS sang C
    • splat: Công cụ phân tích cấu trúc ROM

Ứng dụng

  • Khả năng tận dụng mã nguồn cho nghiên cứu reverse engineering game, porting, phân tích engine, cũng như dự án cải tiến game cổ điển
  • Cũng rất phù hợp cho mục tiêu bảo tồn lịch sử và nghiên cứu giáo dục
  • Việc bảo trì và cập nhật cho nhiều nền tảng và phiên bản đang diễn ra rất tích cực

Kết luận

  • Dự án mã nguồn mở này là một trong rất ít trường hợp đã thực hiện phát hành đầy đủ mã nguồn phần mềm game console classic những năm 1990
  • Đây là tài nguyên giá trị cho các nhà nghiên cứu reverse engineering game và console, lập trình viên trẻ, cũng như người làm porting và tạo fangame

1 bình luận

 
GN⁺ 2025-10-20
Ý kiến trên Hacker News
  • Thật thú vị khi dự án đã được decompile 100% sang C, nhưng vẫn còn nhiều phần tên hàm và biến được tạo tự động nên việc gắn nhãn vẫn chưa hoàn chỉnh. Nếu có ai đó thử port nó vào lúc này thì chắc sẽ rất vui
    • Không rõ LLM sẽ hiệu quả đến đâu trong việc gắn nhãn. Hơi lo rằng nó có thể làm mất thời gian vì gắn nhãn sai
    • Giờ các công cụ như Ghidra đã được cung cấp miễn phí, nên cảm giác “decompile 100% sang C” không còn quá ghê gớm nữa
    • Mã nguồn của Build engine đã được công khai cho mục đích phi thương mại, nên tự hỏi liệu nó có thể giúp ích trong việc mapping tên hàm và biến hay không
  • Có vẻ Gillou68310 đã tự làm tới 99%, thật sự là một sự cống hiến đáng nể. Dự án The Legend of Zelda: Twilight Princess cũng đang tiến triển tốt https://decomp.dev/zeldaret/tp
    • Nhân tiện cũng muốn cổ vũ dự án decompile Castlevania: Symphony of the Night. Nó đang tiến triển khá tốt (dù vẫn còn nhiều việc phải làm) https://github.com/Xeeynamo/sotn-decomp
  • Zero Hour là một trong những tựa game không thể bỏ qua của thời N64, và là một game hiếm hoi thật sự hay trong giai đoạn sau của series Duke Nukem. Dù có yếu tố platforming khá thử thách và vài màn chơi khá khó chịu, game vẫn gây ấn tượng nhờ môi trường được xây dựng vững vàng và nỗ lực tái hiện sức hút của Duke 3D. Bản port Perfect Dark gần đây rất xuất sắc, nên hy vọng bản decompile lần này cũng sẽ được xử lý với chất lượng tương tự
  • Tò mò không hiểu vì sao lại chọn đúng Duke Nukem: Zero Hour
    • Zero Hour là một viên ngọc bị lãng quên. Các game Duke Nukem trên Playstation chỉ là bản bắt chước Tomb Raider và cũng không được đánh giá cao, còn Zero Hour thì dựa trên Build engine giống Duke Nukem 3D gốc. Dù chưa đạt tới tầm đó, vẫn có thể xem đây là game Duke Nukem hay nhất không do 3D Realms làm. Điểm trừ là góc nhìn bị đổi sang third-person (có chế độ first-person chưa hoàn thiện, mở bằng cheat) và cảm giác điều khiển không tốt. Nhưng giờ đã có mã nguồn nên những vấn đề này cũng có thể được sửa
    • Câu hỏi hay đấy. Chỉ tiếc là không có screenshot để chia sẻ với bạn bè. Hồi xưa chơi cùng bạn bè thì đúng là thiên đường hỗn loạn
  • Tò mò vì sao có người (hoặc cả nhóm) lại bỏ thời gian và công sức vào những dự án decompile như thế này. Không biết đó có phải là nhóm game thủ thích thú với các tựa game mình yêu thích, hay là vì mục đích bảo tồn số
    • Tôi là người từng reimplement Cosmo's Cosmic Adventure (DOS, 1992). Lý do rất đơn giản: tôi tò mò cách game này thực hiện những thủ thuật đồ họa ấn tượng trên phần cứng yếu như IBM AT. Không hẳn vì game xuất sắc đến mức nào, mà vì nó là một ký ức quan trọng của tuổi thơ tôi nên tôi có sự gắn bó với nó. Nhờ trải nghiệm này tôi hiểu thêm về nền tảng PC, hệ sinh thái C của thập niên 80, và cả sở thích của chính mình https://github.com/smitelli/cosmore https://cosmodoc.org/
    • Tôi đã dành rất nhiều thời gian để reverse engineer firmware của các synthesizer cổ điển (đơn giản hơn game hiện đại). Ví dụ, tôi từng chú thích ROM của các synth Yamaha DX7 và DX9, và quá trình đó đã mở rộng kỹ năng kỹ thuật của tôi rất nhiều. Nó cũng rất vui, và còn cho tôi cơ hội gặp nhiều người cực kỳ thông minh. Cảm giác như chơi trò ghép hình kỹ thuật. Quá trình này cũng dẫn tới một số firmware mod thú vị chú thích DX7 chú thích DX9 DX97 và tôi cũng viết một bài hướng dẫn về quá trình reverse engineering hướng dẫn Nó cũng giống khảo cổ học ở chỗ có thể nhìn thoáng qua cách nghĩ của những kỹ sư đi trước. Tôi nhớ N64 cũng là một nền tảng khá khó phát triển vào thời đó
    • Có thể đơn giản chỉ là vì yêu game. Hồi nhỏ tôi thật sự rất quý Mega Man Battle Network 2, và chính nhờ game đó mà tôi học được tiếng Anh rồi trở thành lập trình viên. Tôi còn giữ tới hai cartridge bản vật lý. Thỉnh thoảng tôi dùng IDA để phân tích và cố gắng hiểu game thêm từng chút một, dù không có kỹ năng hay thời gian như cộng đồng ROM hacking thực thụ nhưng vẫn đang thử
    • Theo tôi thì đó là những người muốn tự mình làm thử hoặc có tinh thần thử thách khác thường
    • Năm nay tôi đã có một buổi nói chuyện tại Game On Expo về dự án decompile Castlevania: Symphony of the Night https://github.com/xeeynamo/sotn-decomp. Phần lớn những người tham gia các công việc như vậy đều được thúc đẩy bởi tình yêu quá lớn dành cho game. Sau đó mới đến các lý do như porting, modding, học hỏi, nhu cầu bảo tồn, v.v. Cá nhân tôi cũng thấy vui vì tính thử thách của nó (na ná giải đố toán học). Muốn làm lâu dài thì cần hiểu cả lịch sử compiler, lý thuyết, cũng như áp lực kinh doanh và kỹ thuật vào thời điểm game được tạo ra. Qua đó đôi khi cũng hiểu ra vì sao một số phần của game lại được làm như vậy. Tôi cũng stream quá trình làm SotN, nếu có câu hỏi gì thì cứ thoải mái hỏi trên chat https://m.twitch.tv/madeupofwires/home
  • Dự án rất tuyệt! Nhưng mà… nền tảng là GitHub nên hơi đáng lo. Sợ là sắp nhận thông báo gỡ xuống
    • Xem lướt repo thì có vẻ không chứa tài liệu có bản quyền. Chỉ có code dùng để thực hiện việc decompile thôi
    • Các dự án decompile game Nintendo vẫn đang công khai trên GitHub, nên không hiểu vì sao cái này lại phải bị gỡ xuống
  • Nhấn mạnh rằng có dòng hướng dẫn: “Đây là bản decompile Duke Nukem Zero Hour N64. Lưu ý: bạn phải có cartridge game để sử dụng repo này”
  • Tò mò liệu LLM có phù hợp cho kiểu reverse engineering này không
    • Có thể tự động hóa khá nhiều việc gắn nhãn bằng LLM. Có lẽ cũng làm được kiểu “lặp lại chỉnh sửa cho tới khi khớp với binary”, nhưng tôi chưa thấy ví dụ thực tế nào được hoàn thiện như vậy. Tham khảo thêm dự án decompai, đi theo hướng gần giống (dù không hoàn toàn giống dự án này). Tôi đã thử chạy nó, và nếu đã có sẵn một ít thông tin thì nó khá hữu ích trong việc đoán tên biến. Đặc biệt hiệu quả với những việc nhàm chán lặp đi lặp lại như đặt tên counter hoặc biến tạm. Tên hàm cũng có thể suy ra khi nhìn vào pattern của thuật toán
    • Tôi không biết EFF đã đưa ra lập trường chính thức nào về việc dùng LLM hay chưa, nhưng tôi nghĩ về mặt bản quyền thì có rủi ro pháp lý. Decompile có thể chấp nhận được vì nó tạo ra một tác phẩm mới, còn LLM thì dễ bị lập luận là tạo ra kết quả mang tính phái sinh hoặc phi sáng tạo. Việc các công ty AI trả số tiền khổng lồ cho license dữ liệu huấn luyện càng khiến tình hình phức tạp hơn. Tôi có lẽ sẽ tránh dùng nó vì rủi ro bản quyền này. Nhưng nếu decompile bằng LLM thật sự trở nên quá dễ, có lẽ sớm muộn cũng sẽ xuất hiện án lệ mới
    • Tôi thấy nó khá dùng được. Không hoàn hảo nhưng tiết kiệm thời gian đáng kể. Đặc biệt trong việc nhận diện hàm thư viện hay thuật toán nổi tiếng thì chính xác đến mức con người khó theo kịp. Nó vẫn nhận ra được ngay cả trong phần code đã bị biến dạng qua quá trình compile rồi decompile
    • Tôi đang dùng agent để port game. Dù đã có mã nguồn nhưng nhiều khi vẫn không suôn sẻ. LLM thường không muốn port nhiều thư viện, nên thay vì giảm bớt công việc lặp lại thì lại tạo ra một đống stub và giả định khiến toàn bộ công việc bị rối tung lên nhiều lần
    • Tôi chưa từng dùng, nhưng nghĩ nó sẽ hữu ích cho những cải thiện cục bộ như đổi tên biến hoặc tên hàm
  • Cố tình nhắc lại lưu ý “phải sở hữu cartridge game mới được dùng repo”
    • Người dùng máy chơi game cầm tay retro của Trung Quốc thì phải tự dump ROM mới hợp pháp. Nhưng nếu mua bản giá rẻ kèm bó 10.000 game thì kỳ diệu thay mọi thứ lại hợp pháp. Dĩ nhiên hầu như chẳng ai thực sự bị xử phạt, nên mấy dòng cảnh báo như vậy trông khá buồn cười
    • Thực tế thì tôi dùng tốt mà không cần có cartridge game. Tôi nghĩ dòng cảnh báo đó là sai
    • Đây thực ra chỉ là một lời cảnh báo pháp lý, không phải điều kiện áp dụng thực tế
  • Tôi vẫn đang mòn mỏi chờ Duke Nukem Forever. Thậm chí còn không nhớ đã chờ bao lâu nữa