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 

ついに獲得しました!




Source: https://habr.com/ru/post/J330940/


All Articles