このチュートリアルでは、Visual C++ 2010 Expressを使ってGLDoom2007(V1.7)をビルド する方法を説明してみたいと思います。OSには一応Windows 7(64bit)を使って いますが、XP以降のWindowsならばVisual C++ 2010 Expressは動作すると思います。
もし、ただ単にソースコードをビルドするだけならば、Visual C++ 2010 Express用の プロジェクトが入ったフォルダを提供して、その中のプロジェクトファイルを Visual C++ 2010 Expressで読み込めばいいだけですが、それではほとんどやることが 無いので、ここではソースファイルだけを提供して、プロジェクトを一から作る 方法を解説します。その方が、将来的に開発環境が変わっても臨機応変に対応する事が 出来るようになると思います。
GLDoom2007のプログラム面での特徴は、C言語オンリーで書かれている事と、
DirectX SDKなどの特別な開発環境を必要としない事です。OpenGLは使っていますが、
OpenGLに関するヘッダやライブラリなどは、通常のWin32 APIの開発環境(Platform SDK)
には必ず付いています。サウンド面においてもWindows標準のマルチメディア関数しか
使っていません。
従って、Win32 APIの開発環境さえあればいいのですが、Visual C++ 2005以降からは、
無償のExpress版でもPlatform SDKが(インストール時のオプションを外さない限り)
付いてきます。
またこのチュートリアルでは、読者のプログラミングに関する知識は想定していません ので、Visual C++の使い方やC言語などに関する知識は無くても構いません。それ故、 ある程度プログラミングに慣れた方には、説明が冗長に聞こえる場合があると思いますが、 その点は御了承下さい。
まずはこちら のサイトからVisual C++ 2010 Expressを選んでインストールして下さい。また、 Visual C++ 2010の入門用の書籍などにもExpress版のインストールDVDが付いている事が ありますから、もちろんそれらを利用しても構いません。
インストール時には何ら登録の手続きをする必要はありませんが、実際には、30日を
超えて使い続けるには製品登録が必要になります。
これは、使用していると時々その旨を知らせるダイアログが開きますし、また30日を
超えてから起動すると製品登録をするように促されますので、それからでも遅くは
ないでしょう。
登録の手続きは、まずWindows Live IDというものを取得してから、製品登録キーを入手
する事になります。
では、プロジェクトを新規作成するところから始めたいと思います。
Visual C++ 2010 Expressを起動したら、『スタートページ』の中の
『新しいプロジェクト...』をクリックして下さい。(ツールバーの『新しいプロジェクト』
ボタンや、『ファイル(F)』メニューの『新規作成(N)』-『プロジェクト(P)...』を
選んでも同じです)
すると、『新しいプロジェクト』ダイアログが開きます。
ここで表示されるテンプレートの数は、インストール時のオプションの付け方で変わって
きますが、その中から『空のプロジェクト』という項目を探して選択して下さい。
次に『名前(N):』の欄に入力しますが、基本的に、ここで入力されるプロジェクト名が
出来上がった実行ファイルのファイル名にもなりますので、○○DOOMなど自分の
好きな名前を入力して下さい。(私自身は今回はGLDoom2007Expressと名付けました)
ちなみに、このダイアログで『ソリューションのディレクトリを作成』チェックボックス を外すとプロジェクトのフォルダ構成が多少シンプルにはなりますが、その代わり、 出来上がった実行ファイルが入るReleaseフォルダとDebugフォルダの中に、他に生成される 中間ファイルなどが全て入りますので、一概にスッキリするとは言えません。この チュートリアルでは、『ソリューションのディレクトリを作成』チェックボックスは付けた ままで進めます。
最後に『OK』ボタンを押してダイアログボックスを閉じて下さい。
これで、まだファイルが一つも無い状態のプロジェクトが出来上がります。
今回は空のプロジェクトを作りましたが、通常のアプリケーションを作る時は、
用意されているテンプレートの中から適切なものを選んで、ウィザード形式で
プロジェクトの設定をある程度まで決めておく事になります。すると大抵いくつかの
ソースファイルが自動生成されます。
しかし、ゲームのような特殊なプログラム(特に全画面を占有するようなもの)では、
用意されているテンプレートに合う事はまずありませんし、自動生成される最小限の
ひな形のソースコードでも使えない場合が多いので、空のプロジェクトから始めるのが
一番いいと思います。
次の作業に入る前に、まずはGLDoom2007(V1.7)で使われている全てのソースファイルが
入ったこちらのファイルをダウンロードして下さい。
このZIPファイルを展開すると、srcという名前のフォルダが一つだけ入っていると
思います。
さて、先程プロジェクトを新規に作成しましたが、その時、同時にこのプロジェクト
を管理するための専用のフォルダが作られているはずです。デフォルトでは
ドキュメント(マイ ドキュメント)フォルダの中のVisual Studio 2010フォルダの
中のProjectsフォルダの中に先程付けたプロジェクト名と同じ名前のフォルダがある
はずです。このフォルダが一応『ソリューションのディレクトリ』という事になると
思います。そしてその中にもう一つ同じ名前のフォルダがあるはずです。こちらの方が
『プロジェクトのディレクトリ』という事になると思います。
そこで先程取り出したsrcフォルダを、フォルダごとこのプロジェクトディレクトリの
中に入れて下さい。
次に、srcフォルダの中に入っている全てのファイルをプロジェクトに追加します。
まずは、『ソリューションエクスプローラ』と書かれているウィンドウの中の
『ソリューション'<名前>'(1プロジェクト)』という文字の真下にあるプロジェクト名が
選択されている事を確認して下さい。
次に、『プロジェクト(P)』メニューの中の『既存項目の追加(G)...』を選択して下さい。
(ソリューションエクスプローラの中のプロジェクト名を右クリックして、コンテクスト
メニューの中の『追加(D)』-『既存の項目(G)...』を選んでも同じです)
すると『既存項目の追加』ダイアログが現れますので、ファイルフィルターが
『すべてのファイル(*.*)』になっているのを確認してから、フォルダ内の全てのファイル
を選択して、『追加(A)』ボタンを押して下さい。
ファイルの読み込みが終わると、ソリューションエクスプローラ内の『ソースファイル』、
『ヘッダーファイル』、『リソースファイル』といったグループに、それぞれのファイル
が種類によって振り分けられていると思います。
ここからプロジェクトの設定に入りますが、まず始めに、ツールバーの中に『Debug』と
書かれているテキストボックスがあるのを確認して下さい。マウスカーソルを乗せると
『ソリューション構成』と書かれたツールチップが出ます。
ここでドロップダウンリストから『Release』を選んで下さい。
通常、アプリケーションを作成する時は、開発中はDebug構成を使い、最終的に配布
出来るようなプログラムをビルドする時にRelease構成を使います。
しかし、プロジェクトの設定は、DebugとReleaseとで別々に設定しなければならない
という面倒なところがあります。そこで今回は、最初からRelease構成のみを使います。
それでは、ソリューションエクスプローラの中のプロジェクト名が選択されているのを
確認してから、メニューの『プロジェクト(P)』-『プロパティ(P)』を選択して下さい。
(ソリューションエクスプローラの中のプロジェクト名を右クリックして、コンテクスト
メニューの中の『プロパティ(R)』を選んでも同じです)
すると、『<プロジェクト名> プロパティ ページ』と書かれたダイアログが開きます。
まず最初に、『構成プロパティ』と書かれたノードを展開して、『全般』という項目を
選択して下さい。そして、右側の『文字セット』という欄に
『マルチ バイト文字セットを使用する』と書かれている事を確認して下さい。もし、
ここに『Unicode 文字セットを使用する』などと書かれていた場合は、ドロップダウン
リストから『マルチ バイト文字セットを使用する』に変更して下さい。
ここでの設定は、明示的に示さない限りマルチバイト文字が使われると指示するだけで、
決してユニコードが使えなくなるという訳ではありません。
次に、『構成プロパティ』ノード内にある『C/C++』と書かれたノードを展開して、 『コード生成』という項目を選択して下さい。右側の『ランタイム ライブラリ』 という欄に、デフォルトでは『マルチスレッド DLL (/MD)』と書かれていると思います。 ここでドロップダウンリストから『マルチスレッド (/MT)』を選んで下さい。
ここでの設定は、出来上がった実行ファイルを他のマシンに持って行って実行させても
問題が無いようにするためのものです。
これは、Visual C++ 2010におけるWin32プログラムに共通する問題のようですが、
デフォルトの『マルチスレッド DLL (/MD)』のままでビルドすると、実行ファイルを
起動させるには『MSVCR100.dll』というファイルが必要になります。このファイルは、
Visual C++ 2010をインストールすれば自動的にインストールされるようですが、他の
マシンでも存在しているとは限りません。
ここを『マルチスレッド (/MT)』に変える事によって、実行時にDLLファイルを
読み込んでリンクする動的リンクから、ビルド時にあらかじめリンクをしておく
静的リンクに変わります。
次に一番肝心な設定である、リンクするライブラリの追加を行います。
まず、『構成プロパティ』ノード内にある『リンカー』と書かれたノードを展開して、
『コマンド ライン』という項目を選択して下さい。右下の『追加オプション(D)』と
書かれている欄は空白になっていると思いますが、ここに
winmm.lib opengl32.lib glu32.lib
という文字を打ち込んで下さい。
Win32 APIプログラミングでは、ごく標準のWindows機能以外の機能を使う時は、
それらで使う関数などが含まれたライブラリファイルを指定しなければならない
時があります。
この例では、winmm.libはWindowsマルチメディア関数を使うために、
opengl32.libとglu32.libは名前から分かるようにOpenGLを使うために必要な
ライブラリです。
一般的に、ライブラリはヘッダファイルと対になっている場合が多く、そのライブラリ
に含まれる関数などを使う時は、該当するヘッダファイルをソースコードの中で
インクルードしておかなければなりません。今回の場合は、もちろん既にソースコード
の中で記述されています。
以上でプロジェクトの設定は全て終わりましたので、『OK』ボタンを押してダイアログ を閉じて下さい。
これでビルドする準備は整いましたので、『デバッグ(D)』メニューの中の 『ソリューションのビルド(B)』を選択して下さい。
最初にビルドした時は、おそらく相当な数の警告が出ると思いますが、エラーさえ 出なければ大丈夫です。これらの警告はビルドするたびに出るわけではなく、一度 ビルドした後は、基本的に新たに編集されたソースファイルだけがコンパイルされる ので、それほど多くは出なくなります。また、『警告レベル』を下げる事によっても ある程度抑制する事が出来ます。(プロジェクトのプロパティページの 『C/C++』ノードの中の『全般』を選択すると編集出来ます)
ビルドが正常終了したら、実行ファイルが出来上がっているはずですから、 『ソリューションディレクトリ』の方にあるReleaseフォルダの中にゲームの実行 ファイルがある事を確認して下さい。
次に実際にプログラムを実行してみたいのですが、通常のアプリケーションならば 『デバッグ(D)』メニューの中の『デバッグ開始(S)』か 『デバッグなしで開始(H)』(このメニュー項目は『ツール(T)』メニューの『設定(S)』 で『上級者用の設定』を選んでいないと現れません)を選択して、Visual C++上 から起動出来ますが、DOOMの場合は実行ファイルと同じフォルダの中にIWADが 無ければ起動すらできませんので、出来上がった実行ファイルをIWADがあるフォルダ の中にコピーまたは移動するか、またはIWADの方をReleaseフォルダの中に入れておく などする必要があります。また、たとえIWADの方をReleaseフォルダの中に入れておい ても、Visual C++側からは起動出来ません。これは、カレントディレクトリが 実行ファイルがあるフォルダ以外だとIWADを認識する事が出来ないからです。やはり 一番安全なのは、出来上がった実行ファイルをコピーして、あらかじめIWADを入れた 専用のフォルダにコピーして、そこから起動させる方法だと思います。
それでは実際にプログラムを実行してみて下さい。
ここで、もしお使いのPCがATI製のビデオチップを使っていて、プログラム起動後に
画面に何も写らずにフリーズしてしまう場合は、コマンドラインオプションで
-texborder 0
と指定してみて下さい。GLDoom2007のコマンドラインオプションの詳細については、
Ver.1.7の実行ファイルのアーカイブに含まれる
readme.txtを参照して下さい。
以上でこのチュートリアルの目的は果たせましたが、今回は結局ソースファイルは 一つも開かないままでビルドまで行いました。各ソースファイルを開くには、 ソリューションエクスプローラの中のファイル名をダブルクリックすれば出来ます ので、後はコードの分析や編集などにチャレンジしてみて下さい。
最後に、ついでながらGLQuake2006のビルド方法についても説明しておきたいと
思います。
まずは、GLQuake2006(V1.1)の全てのソースファイルが入った
こちらのファイルをダウンロードして下さい。
GLQuake2006もGLDoom2007と同じく、プログラム的には
Win32 API + OpenGLという構成ですので、手順はほとんど同じですが、次の二点
だけ違いがあります。
まず、GLDoom2007では『winmm.lib opengl32.lib glu32.lib』の三つのライブラリ を追加しましたが、GLQuake2006ではこれらに加えて『comctl32.lib wsock32.lib』 の二つも追加して下さい。
次に、『C/C++』ノードの中の『コマンド ライン』を選択して、
『追加オプション(D)』の欄に
/D "GLQUAKE"
と書き込んで下さい。
上の二点以外の設定や手順は、GLDoom2007の時と全く同じです。