1992年のようにコンパイルします

画像



私は1992年のWolfenstein 3Dソースコードを研究しました。 25年前であり、最新のプラットフォームでは完全に時代遅れになっていますが、環境を再作成すればコンパイルできます。



これには以下のみが必要です。





ファイルシステムのセットアップ



コマンドラインを開き、必要なDOSディスクごとに1つずつ、2つのフォルダーを作成します。



cd ~ mkdir system cd system mkdir c mkdir a cd ~
      
      





ファイルをダウンロードする





  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ファイルは、ハフマンアルゴリズムによって圧縮されたデータを格納するVGAGRAPHへのポインターを含むインデックスです。 VGADICTには、データを解凍するためのハフマン辞書が含まれています。



他の2つの作成ファイル:





次の図に示すように、エンジンにコンパイルされます。







.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
      
      





ついに獲得しました!
















All Articles