AoEはアセンブリで書かれていたのか? - これは本当なのか?!
- AoEとAoKのアセンブリコード作成: 約13,000行のx86 32ビットアセンブリコードが書かれた。大部分は「描画コア」にあたる約11,500行で、SLPスプライトをさまざまな方法で描画していた。
- アセンブリコードのコンパイル: Microsoft Macro Assembler 6.1を使用して、.asmファイルを.objファイルに「コンパイル」していた。
- C++コード内のインラインアセンブリ: コンパイラが「インラインアセンブリ」をサポートしており、関数内に
__asm { } キーワードでアセンブリコードブロックを追加していた。
- 描画コアの性能向上: アセンブリを使った描画コアは、C++の参照実装より約10倍高速なスプライト描画速度を提供した。
- アセンブリコードの技術設計: キャッシュアーキテクチャとUVパイプを考慮した設計で、Pentiumプロセッサの特性を活用していた。
- AoK:HD Editionでのアセンブリコード: AoK:HD Edition(32ビットゲーム)でもアセンブリコードを使用していた。
- Definitive EditionsでのC++への書き直し: 64ビットプログラムであるDefinitive Editionsでは、アセンブリ関数をC++に書き直した。
AoEコミュニティとリソース
- ライブストリーム: TwitchおよびFacebookでさまざまな言語で配信されるAoE関連ライブストリームの一覧。
- オンラインプレイ: SteamとMicrosoft Storeで、AoE2 Definitive Editionを含むさまざまなバージョンのゲームをプレイ可能。
- 現在のパッチ: 2023年7月26日に更新されたパッチ情報を提供。
- トーナメントとイベント: AoEZone、AoE2 Liquipedia、イベントカレンダーを通じてトーナメント情報を提供。
- コミュニティサイト: 公式Age of Empiresページ、フォーラム、Discord、AoK Heavenなど、さまざまなコミュニティサイトへのリンク。
- ユニットと建物の統計: ユニットやカウンター情報、バグ修正、ゲームのヒント、パッチ情報などを提供するWikiおよび資料リンク。
- YouTubeチャンネル: 公式チャンネルおよび有名なAoE2 YouTuberの一覧。
GN⁺の見解
- アセンブリコードの重要性: AoEシリーズ初期バージョンでは、アセンブリコードがゲーム性能に大きな影響を与えていた。特にグラフィック処理においては、現代の高級言語では達成しにくい最適化を実装していた。
- 技術発展の影響: 時間の経過とともに、64ビットコンパイラの発展とマルチコア処理の導入によって、アセンブリコードの必要性は低下した。これは、プログラミング言語とハードウェアの進化がソフトウェア開発にどのような影響を与えるかを示している。
- コミュニティの役割: AoEコミュニティは、ゲームの継続的な人気と発展に重要な役割を果たしている。多様なリソースと議論を通じて、ファンがゲームへの情熱を共有し、知識を分かち合えるプラットフォームを提供している。
1件のコメント
Hacker Newsの意見
あるHacker Newsユーザーは、1999年から2000年にかけてPSXからPCへコナミのゲームを移植した経験を共有した。C言語で書かれたコードにはインラインアセンブリを含む
#ifdefが多くあり、元のCコードが維持されていたという。この元のCコードが移植作業に大いに役立ったという。また、IntelのKatmaiプロセッサ向けソフトウェア開発でSIMD命令を使った経験や、アセンブリ最適化作業についても言及した。この過程でIntelのVTuneが大いに役立ったという。しかし、アセンブリで書いたコードがコンパイラ生成コードより遅い場合もあったと振り返った。別のユーザーは、現在ベルリンで開催中の『Age of Empires 2』(AoE2)の大規模トーナメントNAC5について言及し、関連リンクを共有した。
ある開発者インタビューを引用し、ゲームを発売する前からパッチが必要だと分かっているなら、そのゲームは発売すべきではないという意見を示した。
『Age of Empires』の高速化技術の1つが、id Softwareのプログラマーであり最適化の専門家でもあるマイケル・アブラッシュとの昼食中に議論された事実に触れ、インターネットによって失われた自由な相互交流への惜しさを表した。
アセンブリを使ったグラフィックコアでは、C++と比べておよそ10倍のスプライト描画速度向上を達成したという驚くべき事実が共有された。
マイケル・アブラッシュは、グラフィックの革新が起きる場所ならどこにでも現れるようだという意見が述べられた。
あるユーザーは、『Age of Empires 2: Definitive Edition』がなぜWine上で性能が低いのかを理解する手がかりになるかもしれないと述べた。
『Age of Empires 2: Definitive Edition』には、ゲームコードそのものではないものの、実行時にゲームコードを展開する手書きのアセンブリが依然として実行ファイル内に含まれているという。このため、すべてのコードが読み取り・書き込み・実行可能な状態(RWX)のままになっており、セキュリティ上きわめて脆弱だと指摘した。
ボーランドの歴史を読んでいるあるユーザーは、Turbo Pascalコンパイラの大部分がアセンブリで書かれており、Delphi 1.0でも使われていたと述べた。ボーランド社内では誰もそのコードに大きな変更を加えられなかったため、最終的にDelphi 2.0向けにコードを書き直したという。アセンブリ言語で複雑なCPU向けソフトウェアを書いたプログラマーには、独特の特性があると思うと語った。