AoE có được viết bằng assembly không? - Điều này có thật không?!
- Viết mã assembly cho AoE và AoK: Khoảng 13.000 dòng mã assembly x86 32-bit đã được viết. Phần lớn trong số đó, khoảng 11.500 dòng, thuộc về "lõi dựng hình", dùng để vẽ sprite SLP theo nhiều cách khác nhau.
- Biên dịch mã assembly: Sử dụng Microsoft Macro Assembler 6.1 để "biên dịch" các tệp
.asm thành các tệp .obj.
- Assembly nội tuyến trong mã C++: Trình biên dịch hỗ trợ "assembly nội tuyến", cho phép thêm các khối mã assembly vào trong hàm bằng từ khóa
__asm { }.
- Cải thiện hiệu năng của lõi dựng hình: Lõi dựng hình dùng assembly cho tốc độ vẽ sprite nhanh hơn khoảng 10 lần so với bản triển khai tham chiếu bằng C++.
- Thiết kế kỹ thuật của mã assembly: Được thiết kế có tính đến kiến trúc cache và pipeline UV, tận dụng các đặc tính của bộ xử lý Pentium.
- Mã assembly trong AoK:HD Edition: Vẫn sử dụng mã assembly trong AoK:HD Edition (trò chơi 32-bit).
- Viết lại sang C++ trong Definitive Editions: Các hàm assembly đã được viết lại bằng C++ trong Definitive Editions, là chương trình 64-bit.
Cộng đồng và tài nguyên AoE
- Phát trực tiếp: Danh sách các buổi phát trực tiếp liên quan đến AoE trên Twitch và Facebook với nhiều ngôn ngữ khác nhau.
- Chơi trực tuyến: Có thể chơi nhiều phiên bản game, bao gồm AoE2 Definitive Edition, trên Steam và Microsoft Store.
- Bản vá hiện tại: Cung cấp thông tin về bản vá được cập nhật vào ngày 26 tháng 7 năm 2023.
- Giải đấu và sự kiện: Cung cấp thông tin giải đấu thông qua AoEZone, AoE2 Liquipedia và lịch sự kiện.
- Các trang cộng đồng: Liên kết đến nhiều trang cộng đồng như trang Age of Empires chính thức, diễn đàn, Discord, AoK Heaven, v.v.
- Chỉ số đơn vị và công trình: Liên kết đến wiki và các tài liệu cung cấp thông tin về đơn vị, khắc chế, sửa lỗi, mẹo chơi và thông tin bản vá.
- Kênh YouTube: Danh sách kênh chính thức và các YouTuber AoE2 nổi tiếng.
Ý kiến của GN⁺
- Tầm quan trọng của mã assembly: Trong các phiên bản đầu của series AoE, mã assembly đã có ảnh hưởng lớn đến hiệu năng của trò chơi. Đặc biệt trong xử lý đồ họa, nó đã hiện thực hóa những tối ưu hóa mà các ngôn ngữ bậc cao hiện đại khó đạt được.
- Tác động của tiến bộ công nghệ: Theo thời gian, với sự phát triển của trình biên dịch 64-bit và sự xuất hiện của xử lý đa lõi, nhu cầu dùng mã assembly đã giảm đi. Điều này cho thấy sự phát triển của ngôn ngữ lập trình và phần cứng tác động đến quá trình phát triển phần mềm như thế nào.
- Vai trò của cộng đồng: Cộng đồng AoE đóng vai trò quan trọng trong sự phổ biến và phát triển bền vững của trò chơi. Thông qua nhiều tài nguyên và thảo luận khác nhau, họ cung cấp một nền tảng để người hâm mộ chia sẻ đam mê và kiến thức về trò chơi.
1 bình luận
Ý kiến trên Hacker News
Một người dùng Hacker News chia sẻ trải nghiệm port game Konami từ PSX sang PC vào giai đoạn 1999-2000. Mã viết bằng C có rất nhiều
#ifdefchứa inline assembly, và mã C gốc vẫn được giữ lại. Theo người này, chính mã C gốc đó đã giúp ích rất nhiều cho công việc port. Người này cũng nhắc đến kinh nghiệm dùng lệnh SIMD trong quá trình phát triển phần mềm cho bộ xử lý Intel Katmai, cùng các công việc tối ưu bằng assembly. Trong quá trình đó, Intel VTune đã hỗ trợ rất nhiều. Tuy vậy, họ cũng nhớ lại rằng đôi khi mã tự viết bằng assembly lại chậm hơn mã do compiler tạo ra.Một người dùng khác nhắc đến NAC5, giải đấu quy mô lớn của 'Age of Empires 2' (AoE2) đang diễn ra tại Berlin, và chia sẻ các liên kết liên quan.
Trích dẫn một cuộc phỏng vấn với nhà phát triển, có ý kiến cho rằng nếu biết game sẽ cần bản vá trước khi phát hành thì không nên phát hành nó.
Có người nhắc lại rằng một trong những kỹ thuật tăng tốc của 'Age of Empires' đã được bàn tới trong một bữa trưa với Michael Abrash, lập trình viên của id Software và chuyên gia tối ưu hóa, đồng thời bày tỏ sự tiếc nuối về kiểu tương tác tự do mà Internet đã làm mất đi.
Một người chia sẻ thông tin đáng kinh ngạc rằng trong trường hợp lõi đồ họa dùng assembly, tốc độ vẽ sprite đã tăng khoảng 10 lần so với C++.
Có ý kiến cho rằng Michael Abrash dường như xuất hiện ở bất cứ nơi nào có đổi mới về đồ họa.
Một người dùng nói đây có thể là cơ hội để hiểu vì sao 'Age of Empires 2: Definitive Edition' chạy kém hiệu năng trên Wine.
Theo một ý kiến, 'Age of Empires 2: Definitive Edition' tuy không còn chứa chính mã game theo cách đó, nhưng file thực thi vẫn bao gồm handwritten assembly dùng để giải nén mã game trong lúc chạy. Vì vậy, toàn bộ mã bị giữ ở trạng thái có thể đọc, ghi và thực thi (RWX), khiến nó rất dễ bị tấn công về mặt bảo mật.
Một người dùng đang đọc về lịch sử của Borland cho biết compiler Turbo Pascal phần lớn được viết bằng assembly và vẫn được dùng trong Delphi 1.0. Vì trong Borland gần như không ai có thể thay đổi lớn đối với đoạn mã đó, cuối cùng họ đã phải viết lại nó cho Delphi 2.0. Người này nói rằng họ nghĩ các lập trình viên từng viết phần mềm cho những CPU phức tạp bằng ngôn ngữ assembly có một tố chất rất đặc biệt.