私は1992年のWolfenstein 3Dソースコードを研究しました。 25年前であり、最新のプラットフォームでは完全に時代遅れになっていますが、環境を再作成すればコンパイルできます。
これには以下のみが必要です。
- Wolfenstein 3Dのソースコード。
- DosBox
- コンパイラBorland C ++ 3.1。
- Wolfenstein 3Dシェアウェア(リソースを借りる)。
ファイルシステムのセットアップ
コマンドラインを開き、必要なDOSディスクごとに1つずつ、2つのフォルダーを作成します。
cd ~ mkdir system cd system mkdir c mkdir a cd ~
ファイルをダウンロードする
-
system/a
Borland 3.1をダウンロードsystem/a
ます。 -
system/c
でWolfenstein 3Dソースコードをダウンロード -
system/c
VGAファイルをダウンロードします(記事の最後で、なぜこれが必要なのかを説明します)。
cd system/a curl -O http://fabiensanglard.net/Compile_Like_Its_1992/tools/BCPP31.zip cd ../c curl -O http://fabiensanglard.net/Compile_Like_Its_1992/tools/wolfsrc.zip curl -O http://fabiensanglard.net/Compile_Like_Its_1992/tools/vgafiles.zip
これで、すべてのファイルがファイルシステムに格納されました。 確認するために、以下を紹介します。
cd .. find ~/system
次のものが必要です。
/Users/fabiensanglard/system /Users/fabiensanglard/system/a /Users/fabiensanglard/system/a/BCPP31.zip /Users/fabiensanglard/system/c /Users/fabiensanglard/system/c/vgafiles.zip /Users/fabiensanglard/system/c/wolfsrc.zip
すべてを開梱
cd ~/system/a unzip BCPP31.zip cd ~/system/c unzip vgafiles.zip unzip wolfsrc.zip
ドスボックス
DosBoxをダウンロードして実行します 。
マウント
ファイルシステムをマウントします。ディスクごとに1つのフォルダーがあります。
Z:/> mount c ~/system/c Z:/> mount a ~/system/a
コンパイラーをインストールする
次は、Borland C ++ 3.1をインストールします。
Z:\> a: A:\> cd BCPP31 A:\> install
ソースディスクを選択するときにEnterキーを押します(ドライブAを選択する必要があります)
すべてのデフォルト設定のままにして、「インストールを開始」を選択します。
通知では、Microsoft Windowsフォルダーが見つからないことを警告していますが、必要ないため、「Enter」を押してください。
Wolfenstein 3Dソースコードをインストールする
システムは機能し、コンパイラがあります。ソースコードを(再び)アンパックするときです。
A:\> c: C:\> cd\ C:\> install
「C」を入力
デフォルトのパスを残します:
\WOLFSRC
ディレクトリの作成を確認(「Y」)します。
インストール中です!
コンパイル中
Borland C ++ 3.1を起動します。
C:\> cd\ C:\> cd borlandc C:\> cd bin C:\> bc.exe
[OK]をクリックした後、マウスまたはホットキーを使用して[プロジェクト]→[プロジェクトを開く]を選択します
..\..\WOLFSRC\WOLF3D.PRJ
:
オプション→ディレクトリを選択し、次のように値を変更します。
Include Directories: C:\BORLANDC\INCLUDE Library Directories: C:\BORLANDC\LIB Ouptput Directories: OBJ Source Directories: C:\WOLFSRC
コンパイルしてみましょう:コンパイル->すべてビルド
「実行可能なTASMが見つかりません」というエラーが表示されます
Borland C ++を終了するとき、PATHを設定する必要があります。
C:\> CD .. C:\> PATH=C:\BORLANDC\BIN C:\> BC.EXE
繰り返しますが、コンパイルしてみてください(コンパイル->すべてビルド):
コンパイルは成功しましたが、プロジェクトのSIGNON.OBJとGAMEPAL.OBJへのパスが正しくないため、レイアウトエラーが発生しました:「OBJファイルが見つかりません」。
C:\SOURCE\WOLF\
マークされています:
プロジェクトからそれらを削除します(Projext→アイテムの削除を選択します)。 [プロジェクト]→[アイテムの追加...]で再度追加します。
WOLFSRC\OBJ\SIGNON.OBJ
および
WOLFSRC\OBJ\GAMEPAL.OBJ
もう一度コンパイルしてみましょう(コンパイル->すべてビルド)
うまくいきました! しかし、ゲームは開始されますか?
リソースを取得します
シェアウェアバージョンをダウンロードするか、さらに良い方法として、フルWolfenstein 3Dバージョンとして購入します。
cd ~/system/c curl -O http://fabiensanglard.net/Compile_Like_Its_1992/tools/1wolf14.zip unzip 1wolf14.zip
DosBoxに戻り、ゲームを
C:\WOLF3D
ます。
C:\> c: C:\> cd \ C:\> cd 1wolf14 C:\1WOLF14> install
ゲームをインストールした後、コンパイルしたばかりの.EXEファイルをゲームフォルダーにコピーし、
C:\> c: C:\> cd wolf3d C:\WOLF3D> copy WOLF3D.EXE WOLF3D.OLD C:\WOLF3D> copy ../WOLRSRC/WOLF.EXE
ゲームを開始する
実行してみましょう:
C:\> cd wolf3d C:\WOLF3D> copy WOLF3D.EXE WOLF3D.OLD C:\WOLF3D> copy ../WOLRSRC/OBJ/WOLF3D.EXE . C:\WOLF3D> WOLF3D.EXE
うーん、変だね...
ああ...
なに?
ゲームがそうだったことを覚えていません...
だから、どこかにエラーがありました!
どうした
ポイントは、ゲームの制作パイプラインと、それがエンジンによってどのように使用されたかです。 Adrian CarmackとKevin Cloudがすべてのグラフィックファイルの作業を終えたとき、彼らはIGRABedツールを使用してそれらをパッケージ化しました。 結果は3 + 2ファイルです。
- VGAHEAD.WL1
- VGAGRAPH.WL1
- VGADICT.WL1
VGAHEADファイルは、ハフマンアルゴリズムによって圧縮されたデータを格納するVGAGRAPHへのポインターを含むインデックスです。 VGADICTには、データを解凍するためのハフマン辞書が含まれています。
他の2つの作成ファイル:
- GRE.H
- GRE.EQU
次の図に示すように、エンジンにコンパイルされます。
.H
および
.EQU
ファイルとは何ですか? つまり、名前によるアクセスを許可します。 IGRABedがすべてのファイルを収集すると、対応するインデックスを持つ列挙型も作成されます。
GRE.H
enum{ H_WOLFLOGOPIC GETPSYCHEDPIC L_GUYPIC . . } graphicnums
GRE.EQU
H_WOLFLOGOPIC = 0 GETPSYCHEDPIC = 1 L_GUYPIC = 2
したがって、エンジンが目的のリソースを要求するとき、「マジックナンバー」(2)ではなく論理名(L_GUYPIC)を使用できます。
これは、VGAファイルにハードコードされた画像インデックスを使用してエンジンがリリースされたことを意味します。 wolf3Dシェアウェア(Spear of Destiny)のリリース後にリソースとコードベースが進化したため、新しくコンパイルされたゲームインデックスはソースリソースファイルの場所と一致しません。
ゲームを実行する(もう一度)
幸いなことに、この問題には簡単な解決策があります。誰かがVGAリソースを再生成し、ソースコードでリリースされた.Hおよび.EQUファイルのインデックスと一致するようにします。 これらのファイルをコピーするだけです(シェアウェアバージョンのリソースを使用する場合は、ファイル拡張子を.WL6から.WL1に変更する必要があります)。
C:\> copy C:\vgafiles\VGADICT.WL6 C:\WOLF3D\VGADICT.WL1 C:\> copy C:\vgafiles\VGAGRAPH.WL6 C:\WOLF3D\VGAGRAPH.WL1 C:\> copy C:\vgafiles\VGAHEAD.WL6 C:\WOLF3D\VGAHEAD.WL1
もう一度試してみましょう。
C:\WOLF3D> WOLF3D.EXE
うまくいく!
しかし、まだ完了していません!
VGAフレームバッファーと画面アスペクト比
これは、元のゲームを見たことがない人には明らかではないかもしれませんが、DosBoxからの上の写真は、プレーヤーが1992年に見たものと完全には一致しません。 VGAフレームバッファーのサイズは320x200でしたが、CRTモニターのアスペクト比は4:3です。 これは、モニターに送信されるときにフレームバッファーが垂直方向に引き伸ばされたことを意味します。 DosBoxには、これを補正するオプションがあります。
vi ~/Library/Preferences/DOSBox\ 0.74\ Preferences [render] # frameskip: , DOSBox . # aspect: . , ! # scaler: / . # 'forced', scaler , . # : none, normal2x, normal3x, advmame2x, advmame3x, advinterp2x, advinterp3x, ... frameskip=0 aspect=false scaler=normal2x
aspectの値をtrueに変更します 。
もう一度試してみましょう。
C:\WOLF3D> WOLF3D.EXE
ついに獲得しました!