1 điểm bởi GN⁺ 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Dự án reverse engineering binary gốc của game F-15 Strike Eagle II năm 1989 để tái dựng mã nguồn C đã bước vào giai đoạn thử nghiệm chơi thực tế
  • Mã và dữ liệu của mọi tệp thực thi, bao gồm egame, end, đã được chuyển sang C, và phần lớn mã chỉ có ở assembly đã có bản thay thế bằng C
  • Bản phát hành mới nhất v0.9.1 có thể được dùng để thay thế tệp thực thi gốc trong game bản 451.03bản mở rộng Desert Storm để thử nghiệm
  • Tệp thực thi mới bỏ qua màn hình thiết lập và giả định MCGA/VGA, tắt âm thanh, không có joystick, nhưng phần briefing nhiệm vụ, bay và debriefing phải hoạt động
  • Vì mục tiêu là tái dựng bug-for-bug để giữ lại cả các lỗi như bản gốc, nên những hành vi vốn đã tồn tại trong bản gốc hiện không thuộc phạm vi báo lỗi

Tiến độ của dự án tái dựng C

  • Việc tái dựng F-15 Strike Eagle II là một dự án sở thích nhằm reverse engineering binary gốc để tạo lại mã nguồn C của game năm 1989
  • Chỉ hơn một tháng trước, việc chuyển tệp thực thi thứ hai egame sang C vẫn có vẻ sẽ còn mất thêm vài năm, và tệp thực thi thứ ba end cũng vẫn còn lại
  • Hiện tại đã đạt đến các bước sau
    • Hoàn tất tái dựng mã C cho mọi tệp thực thi
    • Chuyển toàn bộ dữ liệu từ assembly sang C
    • Viết các bản thay thế C tương đương về chức năng cho phần lớn mã chỉ có ở assembly
    • Đặt tên có ý nghĩa cho phần lớn các routine và cấu trúc dữ liệu
    • Đang xem xét tách nhánh kho lưu trữ cho dự án port trong thời gian gần
  • Việc opcode được tái dựng có trung thành với bản gốc hay không được kiểm tra bằng công cụ, nhưng chưa thể bắt hết mọi lỗi liên quan đến bố cục dữ liệu
  • Giờ đây không chỉ cần xác nhận opcode khớp, mà còn phải duy trì một bản game thực sự chạy được, nên cần thử nghiệm từ bên ngoài

Cách thử nghiệm và các vấn đề cần báo cáo

  • Đối tượng thử nghiệm là bản phát hành mới nhất v0.9.1
  • Chỉ cần đặt tệp thực thi mới vào thư mục game có bản gốc 451.03 và bản mở rộng Desert Storm để thay thế các tệp thực thi gốc
    • Cần sao lưu trước khi thay thế
    • Có thể cần xóa f15.com gốc để tránh việc f15.com gốc chạy thay cho f15.exe mới
  • Tệp thực thi mới không vào màn hình thiết lập
    • Giả định màn hình MCGA/VGA
    • Không có âm thanh
    • Không có joystick
  • Nếu gặp vấn đề trong lúc thử nghiệm, có thể báo qua GitHub Issues
    • Crash
    • Lỗi hiển thị đồ họa
    • Phím bấm không hoạt động
    • Nếu cần, đính kèm ảnh chụp màn hình chụp bằng Ctrl+F5 trong dosbox
    • Ghi lại bạn đã thực hiện những thao tác gì trước khi lỗi xảy ra sẽ giúp tái hiện và sửa lỗi
  • Dự án này đặt mục tiêu tái dựng bug-for-bug, nên các hành vi cũng xuất hiện trong game gốc cần được giữ nguyên
    • Bản gốc có các lỗi như vật thể 3D biến mất, hoặc máy bay rơi lên phía bầu trời khi hết nhiên liệu trong lúc bị lật ngược
    • Trước khi báo cáo, nên kiểm tra xem vấn đề tương tự có xảy ra trong bản gốc hay không

1 bình luận

 
Ý kiến trên Hacker News
  • bản DOS có thể chơi được
    Bước đầu tiên là dịch ngược toàn bộ sang assembler, và bước thứ hai là thay assembler bằng mã C đã biên dịch sao cho giống nhị phân. Công việc này sẽ tiếp tục trên DOS cho đến khi không còn mã assembler nào nữa, sau đó sẽ bắt đầu port sang Linux và Windows
    Dịch ngược rất dễ kéo theo lỗi mới, và không dễ tìm hết mọi lỗi trong đoạn mã dịch ngược cũ như thế này, nhưng đến giờ có vẻ mọi thứ đều hoạt động
    Nếu bạn có F-15 bản 451.03 và có Dosbox hoặc DOS thật, hãy thử tìm các lỗi còn mở
    Có thể tải bản phát hành DOS mới nhất tại đây: https://github.com/neuviemeporte/f15se2-re/releases
    Tệp f15_se2-*.zip chứa file thực thi thay thế cho game DOS
    Air Force needs YOU!

    • Tôi là cựu binh USAF. Tôi lớn lên cùng F-15 Strike Eagle II, và tiếc là bản sao của tôi đã hỏng từ rất lâu rồi. Thấy dự án này thực sự làm tôi rất vui
      Chỉ có một chi tiết rất nhỏ và mang tính cá nhân khiến các quân chủng khác có cớ để nói về việc tôi yêu cái ghế của mình đến mức nào
      Air Force là hai từ
    • Làm rất tốt
      Có lẽ không cần quá áp lực về bản port Linux. Hỗ trợ từ trình giả lập đã quá tốt và được dùng rất rộng rãi, nên nếu chạy được ở đó thì cũng có thể xem là thành công rồi
      Tôi dùng Lutris(https://lutris.net/) vì nó tiện
      Nhưng bạn có vẻ là kiểu người thích đào sâu tầng thấp, nên bản thân việc này có khi cũng là một nhiệm vụ riêng, hơn là chỉ để chơi một game retro hay
    • Tôi cũng đang dịch ngược vài game lúc này. Dạo này nhờ AI mà việc này dễ hơn khá nhiều
      Nhưng tôi vẫn lo không biết xét tổng thể thì điều này có ổn về mặt pháp lý không. Muốn nghe suy nghĩ của mọi người về chuyện đó
  • Câu hỏi của người mới. Mong là không nghe tiêu cực
    Tôi thấy thật tuyệt khi bỏ thời gian để làm cho game cũ chạy được, nhưng tôi thắc mắc vì sao lại decompile một game vốn có thể giả lập bằng DOSbox. Với game cũ đến mức này thì chẳng phải nó vẫn chạy rất tốt trên phần cứng cấu hình cực thấp sao?

    • Mấu chốt không phải là chạy được game, mà là mở nó ra để có thể chỉnh sửa. Vá một game ở dạng nhị phân thì khó đến mức phi lý, và làm gì đó vượt quá sửa lỗi đơn giản thì gần như bất khả thi
      Nếu có mã nguồn, bạn có thể thêm hẳn tính năng mới, port sang Windows 10, làm 4K HDR, texture, model mới, nhiệm vụ mới. Giới hạn gần như không còn
      Ngoài ra, phân tích game chỉ dựa trên các lệnh assembly với offset dữ liệu được hardcode là cực kỳ khó. Nếu là mã C thì bạn có thể đọc trực tiếp hành vi của nó, hoặc chèn mã đo đạc/gỡ lỗi để hiểu rõ hơn
    • Vài năm trước khi thử dịch ngược một game thời DOS, tôi có nhiều lý do
      Tôi muốn tài liệu hóa định dạng file, lục dữ liệu để tìm media không dùng đến, xác định rồi sửa các lỗi nghiêm trọng, tạo công cụ mod, và hiểu xem thứ đã in sâu trong ký ức tuổi thơ mình được làm ra bằng những kỹ thuật nào
      Tôi cũng muốn giảm ma sát khi chạy nó trên hệ thống hiện đại, đồng thời cho phép các cải tiến tùy chọn như độ phân giải cao hơn hay thay texture
      Cuối cùng tôi không đủ kiên nhẫn để hoàn thành, nhưng giờ thì tôi nghĩ có lẽ mình làm được
    • Nhiều game chạy từ đĩa mềm có mẫu chống sao chép đĩa tận dụng các hành vi không được tài liệu hóa của ổ đĩa thời đó. Vì vậy mới cần các công cụ như Greaseweazle để dựng lại toàn bộ bản đồ từ thông của đĩa mềm đã được lưu trữ
      Ngoài ra, các game như vậy thường được làm để chạy trên nhiều loại phần cứng đồ họa/âm thanh khác nhau, nên về cơ bản driver đã được biên dịch sẵn vào trong game
      [0] https://github.com/keirf/greaseweazle
  • Đây là game tôi chơi rất nhiều khi còn nhỏ. Tôi cũng chơi F-19 Stealth Fighter và F-117A Nighthawk Stealth Fighter, và hôm nay mới biết hai game đó ra đời trước và sau game này. Tôi cũng chơi F-14 Tomcat một chút
    Nếu tôi đọc đúng thì để chạy được cái này cần có file game gốc. Vì vậy có lẽ tôi sẽ đọc nhật ký phát triển hơn là thực sự lái lại chiếc máy bay này

    • F-19 là một game tuyệt vời, và là một trong những tựa Sid Meier tôi thích nhất
      Tôi vẫn nhớ đã mua nó ở Electronics Boutique vào cuối những năm 1980 và chơi trên chiếc Packard Bell 286 ở nhà. Chống sao chép của nó là bắt bạn tìm và nhận diện máy bay trong sách hướng dẫn, và kết quả là tôi thuộc lòng toàn bộ số máy bay xuất hiện trong game
      Tôi còn mua cả joystick Gravis Analog để chơi, và đến giờ vẫn còn giữ lớp phủ bàn phím
      Tôi rất muốn thấy một bản reboot hiện đại của game này
    • Đây có phải là game cho phép chơi co-op với bạn bè theo vai ghế trước/ghế sau không, hay là bản III?
      Tôi đã gọi điện bàn dây cho bạn mình rất lâu để chỉnh cấu hình modem, rồi bảo cậu ấy gọi lại, sau đó vào game, rồi lại bị ngắt, rồi lại gọi nhau xem lần này có chuyện gì xảy ra
      Khi cuối cùng cũng chạy được thì chúng tôi chơi liên tục đến mức mẹ của cậu ấy cấm chơi qua modem vì chiếm đường dây điện thoại duy nhất hàng tiếng đồng hồ
      Tôi rất muốn tìm lại kiểu multiplayer tương tự trong các game mô phỏng bay hoặc mô phỏng không gian khác, và cũng muốn làm cho game này chạy lại để câu bạn mình bằng ký ức xưa
    • Blog phát triển thuộc hàng hay nhất trong các nhật ký dịch ngược retro. Đọc rất thích
    • Những cái tên như thế này chẳng phải đều đã đăng ký thương hiệu rồi sao? Có vẻ Lockheed cũng có thể bán quyền để kiếm thêm thu nhập phụ
  • Dạo này việc port game dễ đến mức khó tin
    https://robin.tooclever.org mất chưa tới một ngày tính theo thời gian API

    • Hay đấy. Có nơi nào lập chỉ mục riêng cho các game được port kiểu này hoặc các bản port mã nguồn mở không?
  • Tôi thắc mắc liệu AI có phù hợp để suy ra cấu trúc của một dự án decompile khi không có tên symbol hay không
    Đây không phải lĩnh vực của tôi, nhưng tôi đã ngạc nhiên khi thấy AI nắm bắt khá tốt ý đồ cấu trúc của JavaScript không có source map

    • AI có khả năng đọc và hiểu assembly ở mức siêu phàm. Nó gần như không quá quan tâm việc mã đã decompile hay có symbol hay chưa, nếu không có thì chỉ chậm hơn một chút thôi
      Trong một số trường hợp, nó thậm chí có thể tự hiểu luồng điều khiển bị làm rối rất nặng mà không cần công cụ
    • Đúng vậy, rất hữu ích
  • Câu chuyện này giờ đã lên YouTube: https://youtu.be/aIPKkOpIiF8

    • Video rất hay, nhưng giọng đọc AI hơi khó chịu
  • Tôi có một người bạn từng lái F15 nên đã gửi cái này cho anh ấy

  • Những cộng đồng game cũ kiểu này làm được những điều đáng kinh ngạc để giành lấy bốn quyền tự do cho các tựa game họ yêu thích, và điều đó thực sự truyền cảm hứng

  • Tôi chưa chơi game này, nhưng đã chơi Jane's F/A-18 và đó là một game tuyệt vời

    • Và còn có cả Jane's USAF nữa!
  • Tôi đã dành rất nhiều thời gian để chồng bản đồ Doppler trong lúc bay nhằm dùng cho việc phóng SLAM
    Đây là một trình mô phỏng xuất sắc cùng với Tornado của Digital Integrations, và Tornado thì thực sự cần một bản reboot