ゲームの1つであるStrike Commanderを作成するのに4年と100万時間以上かかりました。 有名なフライトシミュレータにはRealSpaceと呼ばれる独自の3Dエンジンがあり、今日では当然のことながら、テクスチャマッピング、Gouroシェーディング、ディテールレベルの変更、ディザリングカラーなどのテクノロジーが登場しました。
私の昔の夢は、仮想現実のヘルメットで遊ぶことでした。 Oculus Riftのおかげで、このファンタジーは現実に一歩近づきました。
しかし、判明したように、ゲームのソースコードは失われ、リリースされることはありませんでしたので、逆の開発を行うことにしました。
この記事の公開時点では、私のプロジェクトはまだ完了していませんが、これから作成できる技術を共有したいと思います。

これ

...そして、おそらく誰かが私の冒険に参加するよう促します。
ストライクコマンダー前
90年代前半、フライトシミュレータは優れていましたが、 Falcon 3.0またはFlight Simulator 4.0は、美しい視覚化ではなく、フライトモデルの精度に重点を置いていました。


市場には多くのフライトシミュレータがあり、1990年にOrigin Systemsが新しいゲームの作成を発表したことに気づいた人はほとんどいませんでした。 しかし、デモが上映されたシカゴでのCES 1991以降、すべてが変わりました。 ゲームには、空軍のフライトシミュレーターにのみ存在する要素(テクスチャマッピング、グーローシェーディング、フォグなど)があるとは信じられませんでした。 スクリーンショットは、競合他社をはるかに上回る技術を示しています。




1991年以降、多くの人がゲームを待ち始めました。 素晴らしいエンジンとエキサイティングなプロットだけでなく、RealSpaceは当初、フライトシミュレーターのファンにとって望ましい追加機器、非常に高価で壊れやすいアクセサリーをサポートしていました-THRUSTMASTER WEAPON CONTROL SYSTEMおよびTHRUSTMASTER FLIGHT CONTROL SYSTEM:


THRUSTMASTER RUDDERを接続することもできます。

しかし、それだけではありませんでした。ゲームは仮想コックピットをサポートしていました。 4方向のThrustMasterミニジョイスティックを使用すると、仮想現実ヘルメットを必要とせずにパイロットの頭を動かし、地上目標/敵機を監視できます。


1993:最初の連絡
このゲームとその3次元エンジンは単純に「脳を吹き飛ばす」が、信じられないほど強力なマシンが必要だった。
- IBM PC 486-DX2 66 MHz
- 4 MBのRAM
- 少なくとも38 MBのハードディスク空き容量
- ゲームは、それぞれ1.44 MBの11枚のフロッピーディスクで配信されました。
現代の技術レベルから類推すると、推奨される構成は次のようになります。
- 8コアと16 GBのRAMを備えたCPU。
- 2つのNvidia Titanビデオプロセッサ。
- 1000 GBの必須インストール。
- ゲームは5つのBluRayで提供されます。
そして、ゲームを購入するだけでは不十分であり、インストールプロセスを実行する必要がありました。 箱を開けると、ユーザーは8枚のフロッピーディスク(Speech Packの場合は+3)を見ました。


興味深い事実:ポスターには1991年のクリスマスのリリース日が示されていることに注意してください。 このゲームは、クリス・ロバートが「今日のコンピューターゲームの黙示録」と呼んだ長いプロセスを経て、1993年に完成しました。
フロッピーからハードドライブにゲームを展開し、13個のディスクを交換するのに30分かかりました。 そして、すでに終わったと思ったとき、ゲームはすべてのカードを生成し始めました。 ゲームのサイズは24 MBから38 MBに増加しました。これは当時の他のゲームの4倍の大きさでした。

興味深い事実:マップは、擬似乱数生成アルゴリズムに挿入された1つのシード(整数)から生成されました。 これは、インストール後にカードを生成することにより、ディスク上のデータ量の増加を回避する巧みな手法でした。 このトリックの詳細に興味がある場合は、 The Backroom Boysの本とゲームFrontier Eliteの章を読むことをお勧めします。
386番目のPCでは、カードの生成に1時間かかりました。 しかし、Origin Systemsは、2012年のゲーム世界の暗い環境の中で、 ゲームボックスに優れた1ページの雑誌を提供するというアイデアを思いつきました。 Sudden Deathのおかげで、プロセス全体の痛みが軽減されました(38ページに、2013年のクリスマスまでにStrike Commanderをリリースすることを約束する偽の広告があることに注意してください)。
ストライクコマンダー!
最後に、これらの手順の後、プレーヤーはゲームを楽しむことができました... 1993年4月! ゲームが2年間遅れたという事実にもかかわらず、Originが約束したすべてのものがあり、非常に売れました。 ゲームは次のようになっているはずですが、多くの人が長い夜をかけて戦いました。

...最小設定では、次のようになりました。

一般に、これはパイロットを惹きつけ、良い思い出を作るのに十分でした。
失われたソースコード
Oculus Riftのリリース後、Strike Commanderへの関心が再び高まりました。適切なハードウェアが登場しました。 ゲームが20年前だったので、ソースコードは既にリリースされていると思っていましたが、すぐにOrigin Systemsが枯れているという悲しい話についての話に出会いました。
1992年9月、Origin SystemsはElectronic Artsに買収され、1999年頃、Ultima 9の販売が低調だったため、すべてのプロジェクトがキャンセルされました。同社は、先駆者であるMMORPG Ultima Online 多くの人々は、完成したすべてのゲームの「ゴールド」のソースコードとバージョンは、EAリポジトリの深層のどこかに保存されていると考えています。 しかし、 Wing Commander CICの人々に連絡した後、会社が閉鎖された後、すべてのソースコードが消えたことがわかりました。
今日は信じがたいですが、当時は開発者や企業は「古いもの」を保存するよりも新しいゲームに興味があり、懐かしさはまだありませんでした。現代のGood Old Gamesのようなファンやストアの大規模なベースはありませんでした 多くのストーリーはソース管理の「原始性」のレベルを説明できますが、おそらく最高のストーリーは15分14秒の「ZAP SC」です。
作業の初日、1人の開発者が900 MBのStrike Commanderソースツリー全体を削除しました。 IT部門は72時間をかけて開発マシンからすべてを復元しました。 インタビューでは、Wing Commander 1および2のコードがフロッピーディスクで転送されたということも述べています。StrikeCommanderの前にはネットワークがありませんでした。
興味深い事実:予期せぬイベントの変化-ソースコードの一部は、以前のOrigin開発者によって最近発見されました。WingCommander CICは、 Wing Commander IおよびWing Commander IIIのソースコードを格納するオフラインアーカイブを格納します。 Ultima 8の開発者は、Ultima 8:Paganのソースコードを提供されました(ただし拒否されました)。 ストライク司令官に関しては、誰も彼と一緒にいると聞いたことがありません。
リバースエンジニアリング:可能ですか?
長年にわたり、多くのチームがOrigin Systemsのゲームに取り組むことができ、素晴らしい結果を達成しました:
- Underworld II Revialは、 Ultima Underworld II:Labyrinth of Worldsを再現しました。
- ExultはUltima VII:The Glack Gateを再作成しました。
- PentagramはUltima VIII:Paganを再作成しました(コードをご覧になることをお勧めします。カーネル内のプロセスであるアクターに基づく設計は美しいです)。
どれくらい長くて難しいですか? Another Worldのほぼすべてのリバース開発を行ったGregory Montoirと話をした後、夕方に1時間作業すると、1か月で10 KBのアセンブラーコードをCに戻すことができることに気付きました。 Strike Commanderには多くの実行可能ファイルがあり、最初の推奨されない時間は次のとおりです。
INSTALL.EXE 7 793 : 2
MKTERR.EXE 203 744 : 1,5
SC.EXE 20 000 : 1
MKGAME.EXE 131 696 : 1
OPTTEST.EXE 870 528 : 7
STRIKE.EXE 746 304 : 6
=============================================
15 , 7 2 . -.
1993年に仕事を始めた人は6年前に仕事を終えていたでしょうし、
git clone
を作れば十分でしょう! しかし、 IDAを起動してファイルを少し調べることで、すべてを元に戻す必要があるわけではないことに気付きました。3Dエンジンは完全にSTRIKE.EXEにあり、小さなチームが妥当な時間で処理できます。
ロードマップ
ストライクコマンダーのリバースエンジニアリングのために最初に描いたロードマップは次のとおりです。
- できるだけ多くのドキュメントを収集します。
- Strike Commanderのグローバルアーキテクチャを理解する。
- ゲームリソースの開発を逆にします。
- ステージ3の文書化と外挿(視覚表面の決定、詳細レベルなど)
- 3Dエンジンを再実装し、
NEO_STRIKE.EXE
をビルドしNEO_STRIKE.EXE
- Oculus Rift VRデバイスのサポートを追加します。
そして仕事に取り掛かりました。
パート2.アーキテクチャとドキュメント、
建築
Strike Commanderは、単一のモノリシック実行可能ファイルで構成されていません。 6つの実行可能ファイルが連携してゲームプレイを提供します。 基本的な考え方は、 セカンドリアリティコードレビューに似ています 。 複数の.exeファイルの使用は、さまざまな方法で説明できます。
- チーム内のコラボレーションの最適化(各従業員は他の従業員に影響を与えることなく自分の側で作業できます)。
- 実際のDOSモードのため、プログラムは640キロバイトのRAMに制限されていました。 大きなモノリシック実行可能ファイルは、ディスクとのデータ交換の増加につながるか、まったくロードされません。
IDAで調査した結果、各実行可能ファイルはDOS 21hシステムコールを使用して他の
.EXE
をロードおよび実行することが判明しました。 たとえば、ダイアログとシネマティック挿入の処理を提供するストーリーモードは
OPTTEST.EXE
です。 RAMから自分自身を削除し、3Dモードが必要なときに
STRIKE.EXE
をロード/起動します。
Strike Commanderの各部分を担当するコンポーネントの研究と研究のために、DosBOXは非常に有用であることが証明されました。 現在実行中の実行可能ファイルの名前は、ウィンドウタイトルに表示されます。
実行可能ファイル
| スクリーンショット
| 注釈
|
---|---|---|
INSTALL.EXE
| ![]() | MKGAME.EXEを開始するモジュール
|
MKGAME.EXE
| ![]() ![]() | 実際のインストーラー:
|
MKTERR.EXE
| ![]() ![]() ![]() | すべてのマップ要素を作成し、それらをPAKにグループ化するマップジェネレーター:
|
OPTTEST.EXE
| ![]() ![]() ![]() | ゲーム内のすべてのダイアログ、映画の挿入、メニュー、格納庫での武器の選択、オブジェクトの表示を担当しています。
|
SC.EXE
| ![]() | ゲームの開始方法。 通常、 OPTTEST.EXE
ダウンロードして実行し OPTTEST.EXE
。 |
STRIKE.EXE
| ![]() | 三次元エンジンRealSpace。 ゲームプレイのアクティブフェーズを担当します。
|
注: PAKマップアーカイブを削除すると、
STRIKE.EXE
不足しているファイル
STRIKE.EXE
検出し、
MKTERR.EXE
を自動的に起動してマップを生成します。 つまり、ほとんどの作業は
OPTTEST.EXE
および
STRIKE.EXE
ます。 しかし、パラメーターがパラメーター間でどのように渡されるかはまだわかりません。 DOS 21hシステムコールを使用すると、コマンドラインパラメーターを使用したり、特定のメモリページにデータを保存したり、ゲームの状態をハードドライブに保存したりできます。 IDAは、私たちの場合の状況を教えてくれます。
重要なファイルのリスト
ゲームで使用される重要なファイル:
//
16 -rw-r--r-- 1 fabiensanglard staff 7,793 17 Jan 03:02 INSTALL.EXE
264 -rw-r--r-- 1 fabiensanglard staff 131,696 17 Jan 03:02 MKGAME.EXE
400 -rw-r--r-- 1 fabiensanglard staff 203,744 17 Jan 03:03 MKTERR.EXE
1704 -rw-r--r-- 1 fabiensanglard staff 870,528 17 Jan 03:02 OPTTEST.EXE
16 -rw-r--r-- 1 fabiensanglard staff 7,793 17 Jan 03:09 SC.EXE
1464 -rw-r--r-- 1 fabiensanglard staff 746,304 17 Jan 03:03 STRIKE.EXE
//
19832 -rw-r--r-- 1 fabiensanglard staff 10,150,560 17 Jan 03:03 GAMEFLOW.TRE
952 -rw-r--r-- 1 fabiensanglard staff 485,877 17 Jan 03:02 MISC.TRE
1304 -rw-r--r-- 1 fabiensanglard staff 665,456 17 Jan 03:02 MISSIONS.TRE
13544 -rw-r--r-- 1 fabiensanglard staff 6,932,708 17 Jan 03:02 OBJECTS.TRE
1760 -rw-r--r-- 1 fabiensanglard staff 899,145 17 Jan 03:02 SOUND.TRE
3288 -rw-r--r-- 1 fabiensanglard staff 1,681,738 17 Jan 03:02 TEXTURES.TRE
//
2040 -rw-r--r-- 1 fabiensanglard staff 1,042,674 17 Jan 03:05 ALASKA.PAK
2040 -rw-r--r-- 1 fabiensanglard staff 1,042,570 17 Jan 03:04 ANDMAL1.PAK
2040 -rw-r--r-- 1 fabiensanglard staff 1,042,960 17 Jan 03:09 ANDMAL2.PAK
2048 -rw-r--r-- 1 fabiensanglard staff 1,046,382 17 Jan 03:09 ARENA.PAK
2040 -rw-r--r-- 1 fabiensanglard staff 1,043,268 17 Jan 03:06 CANYON.PAK
2032 -rw-r--r-- 1 fabiensanglard staff 1,038,716 17 Jan 03:05 EGYPT.PAK
2024 -rw-r--r-- 1 fabiensanglard staff 1,033,096 17 Jan 03:07 EUROPE.PAK
656 -rw-r--r-- 1 fabiensanglard staff 333,464 17 Jan 03:02 MAPDATA.PAK
2040 -rw-r--r-- 1 fabiensanglard staff 1,044,396 17 Jan 03:03 MAURITAN.PAK
2032 -rw-r--r-- 1 fabiensanglard staff 1,037,798 17 Jan 03:04 QUEBEC.PAK
2040 -rw-r--r-- 1 fabiensanglard staff 1,043,840 17 Jan 03:08 RHODEI.PAK
2048 -rw-r--r-- 1 fabiensanglard staff 1,046,316 17 Jan 03:06 SANFRAN.PAK
2048 -rw-r--r-- 1 fabiensanglard staff 1,045,766 17 Jan 03:08 TURKEY.PAK
//
80 -rw-r--r-- 1 fabiensanglard staff 37,732 17 Jan 03:02 MSFILES.PAK
// 3D-
8 -rw-r--r-- 1 fabiensanglard staff 1,806 17 Jan 03:02 PALETTE.IFF
Strike Commanderに関連するドキュメント
- PAKアーカイブ形式( wc1g.txt )。
- TREアーカイブ形式( wc1g.txt )。
- RLE、画像とアニメーションのランレングスエンコーディング( wc1g.txt )。
- IFF形式( IFF.txtおよびIFF.txt の簡単な紹介 )。
- Creative Voice(VOC)オーディオ形式( Creative Voice(VOC)ファイルformat.txt )。
- 音楽フォーマットExtended MIDI(XMIDI)。 この形式のソースコードは、作成者のJohn Miles( AIL2.ZIPおよびXMIDI.TXT )によって開かれました。
- Borland DOS C ++開発システム( Borland C ++ Power Programming Book and Disk Programming_.pdf )。
- Art of Assembly Language DOS 16ビット版( Webサイト )。
- IDAの無料バージョン( IDA5.0をダウンロード )。
- Origin PlayerTester Guide(航空機の損傷エリアの詳細) Strike Commander Playtesters Guide(1998)(Origin Systems).pdf
- ジェット機の空力特性、Wayne Sykes、Game Developer Magazine、1994年12月( GDM_December_1994.pdf )。
- Sudden Death Magazine( StrikeCommanderManual.pdf )。
- Strike Commanderの戦略ガイド( StrikeCommanderStrategyGuide.pdf )。
- 技術レポート( Origin_Software_Technogoly_Entertainment_Report.pdf )。
- ブライアンフック、「Creating a 3D C ++ Game Engine」:Thrust Master Driver Programming( AST3D.zip )。
パート3.リバースリソース開発。
アーカイブシステム
PAKおよびTRE形式は、マリオの仕様のおかげで100%明確です。
libRealSpaceのTreArchiveとPakArchviveを使用すると、アーカイブを簡単に管理/解凍できます。
飛行機
航空機は、IFFアーカイブの完全なファイルに保存されます。 95%は理解可能です。 4つの重要な部分で構成されます。
- 空力特性。
- ダメージシステムとライフポイント
- 武器システム
- 外観
- 3Dデータ
- テクスチャー
JET形式の仕様を参照してください。
カード
マップは95%理解可能です。 これらは
X.PAK
に保存されますが、
TEXTURES.TRE
テクスチャも参照します。 カード形式の仕様を参照してください。
マップテクスチャフォーマットの仕様を参照してください。
メニュー
メニューは50%理解できます(視覚化ですが、ロジックではありません)。
まだ仕様はありません。
アニメーション
アニメーションは50%明確です:
- 個々のレイヤーをレンダリングして再生することができます。
- 使用するパレットの選択は明確です。
- レイヤーを結合するコレクターは不明です。
アニメーション形式の仕様を参照してください。
パレット
パレットは100%明確です: パレット形式の仕様を参照してください。
AI /ゲームロジック
今のところ、彼らは彼らに取り組んでいない。 それらはおそらくすべてexeに含まれています。
プレイテスターマニュアルに記載されている時間とドキュメントを考慮すると、単純な決定木は存在しないと思います。 おそらく階層的な有限状態マシン。
Arctificial Intelligence for Gamesのすべてのテクニックの詳細な説明を参照してください。
ゲームを保存する
保存されたゲームの形式は75%理解できます。 保存されたゲームの形式の仕様を参照してください。
パート4.ゲームを再び開始します。
Strike Commanderの書き換えプロジェクトが開始されました。 完全なソースコードはGitHubにあります 。
git clone https://github.com/fabiensanglard/libRealSpace
エンジン

航空機/オブジェクト




メニュー

地図ビューア


グラフィックス形式


アニメーションビューア


ゲームビューア
まだ何もありません! ゲームでSCUMMスタイルの仮想マシンを使用することを強く期待しました。 この部分は
OPTTEST.EXE
によって実行され
OPTTEST.EXE
パレット
パレットの効果を再現するのはおそらく難しいでしょう。パイロットが過負荷になると、画面が灰色に変わります(Gが大きくなると暗くなります)。 これは、パレット間を補間することにより実装されます。 ここでシェーダーが役立ちます。


Oculus Riftのサポート
Oculus Riftの統合に関する作業はまだ開始されていません。 [約。 レーン:Githubでのプロジェクトの最後のコミットは昨年10月であるため、悲しいかな...]