ToHeart2 XRATEDのソースを、Visual C++ 6.0でコンパイルする手順


以下の作業を行う前に、Visual C++ 6.0に、サービスパック6を適用しておいてください。

2006年1月20日現在、最新のDirectX SDKは、「DirectX 9.0 SDK (December 2005)」です。
しかし、「DirectX 9.0 SDK (December 2005)」は、Visual C++ 6.0に対応していないため、少し古いDirectX SDKを入手する必要がります。
Visual C++ 6.0で利用可能なDirectX SDKは、「DirectX 9.0 SDK Update - (October 2004)」です。

「DirectX 9.0 SDK Update - (October 2004)」をダウンロードしてください。(以降、「DirectX9 SDK」と呼ぶことにします)
DirectX9 SDKは、2006年1月20日現在、以下のURLからダウンロードできます。
Microsoft Download Center DirectX 9.0 SDK Update - (October 2004)
ダウンロードが完了したら、「dxsdk_oct2004.exe」を実行して、インストールを行ってください。
インストール時の設定は、すべて、初期設定のままでインストールを行ったものと仮定して、説明を進めます。
「DirectX 9.0 SDK Update (October 2004) Extras」をダウンロードしてください。(以降、「DirectX9 SDK Extras」と呼ぶことにします)
DirectX9 SDK Extrasは、2006年1月20日現在、以下のURLからダウンロードできます。
Microsoft Download Center DirectX 9.0 SDK Update (October 2004) Extras
ダウンロードが完了したら、「dxsdk_oct2004_extras.exe」を実行して、ファイルを展開してください。
「Extras」というフォルダができるので、これを、「C:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)」の中へ、移動してください。

Visual C++ 6.0を実行し、メインメニューから、[ツール(T)]→[オプション(O)...]を選択して、『オプション』ダイアログを表示してください。
まず、[表示するディレクトリ(S)]から「インクルードファイル」を選択し、[ディレクトリ(D)]の先頭に「C:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include」があることを確認してください。
この設定は、DirectX9 SDKのインストーラが自動的に行ってくれているはずなので、確認するだけです。
次に、[表示するディレクトリ(S)]から「ライブラリファイル」を選択し、[ディレクトリ(D)]の先頭に「C:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Lib」があることを確認してください。
この設定は、DirectX9 SDKのインストーラが自動的に行ってくれているはずです。
しかし、このままでは、Visual C++ 6.0とDirectX9 SDKのライブラリファイルの相性問題のために、コンパイル時に不具合が生じます。
そこで、DirectX9 SDKのライブラリファイル代りに、DirectX9 SDK Extrasのライブラリファイルを使うよう、設定を変更する必要があります。

[ディレクトリ(D)]に、「C:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Extras\D3dx9 Visual Studio 6」を追加し、これを先頭へ移動してください。

コンパイル作業を行うためのフォルダとして、「C:\Work」フォルダを作成してください。
次に、CD-Rに含まれている「ToHeart2」「OGG」「XViD」の三つのフォルダを、「C:\Work」の中にコピーしてください。
コピーが完了したら、コピーしたフォルダと、その中のすべてのファイルの書き込み禁止属性を、解除しておいてください。
「C:\Work\ToHeart2\ScriptEngine」フォルダへ移動し、「ToHeart2.sln」「ToHeart2.vcproj」「ToHeart2.exe」の三つのファイルを、削除してください。
これら三つのファイルは、Visual C++ .NETのためのプロジェクトファイルなので、Visual C++ 6.0では、不要です。

Visual C++ 6.0を実行し、メインメニューから、[ファイル(F)]→[新規作成(N)...]を選択してください。
『新規作成』ダイアログが表示されます。
[Win32 Application]を選択し、[プロジェクト名(N)]に「ToHeart2」、[位置(C)]に「C:\Work\ToHeart2\ScriptEngine」と入力して、[OK]ボタンを押してください。
すると、『Win32 Application - ステップ 1/1』ダイアログが表示されるので、何も変更せずに、[終了(F)]ボタンを押してください。
次に、『新規プロジェクト情報』ダイアログが表示されるので、[OK]ボタンを押してください。

Visual C++ 6.0のメインメニューから、[プロジェクト(P)]→[設定(S)...]を選択してください。
『プロジェクトの設定』ダイアログが表示されます。
ToHeart2のソースをコンパイルするためには、少し、特殊な設定が必要です。
通常、C言語のchar型は、符号付きの値(-128〜127)として扱うことが多いですよね。
でも、ToHeart2のプログラムは、char型を符号無しの値(0〜255)として扱うこと前提で、作成されているみたいです。
Visual C++ 6.0や、Visual C++ .NETには、既定のchar型を符号無しと見なすよう、設定を変更するオプションがあります。
これを設定し忘れてコンパイルすると、ToHeart2のプログラムは、全然動作しません。
僕は、かなりハマリました。。。

『プロジェクトの設定』ダイアログで、ツリー先頭の「ToHeart2」を選択し、[設定の対象(S)]に「Win32 Debug」を選択して、[C/C++]タブを選択してください。
[プロジェクトオプション(O)]の最後に、「/J」を追加してください。
「/J」を追加すること以外は、既に設定されている内容を書き換えたり、消したりしないよう、注意してください。
[設定の対象(S)]に「Win32 Release」を選択し、さきほどと同様に、[プロジェクトオプション(O)]の最後に、「/J」を追加してください。
以上で、既定のchar型を符号無しと見なすための設定は、完了しました。
続いて、その他の設定を行ってゆきます。

ツリー先頭の「ToHeart2」を選択し、[設定の対象(S)]に「すべての構成」を選択してください。←これ重要です。忘れないでください!!
[C/C++]タブ、[カテゴリ(Y)]に「一般」を選択したままで、[警告レベル(L)]に「レベル1*」を選択してください。
次に、[プリプロセッサの定義(C)]が、初期状態で「WIN32,_WINDOWS,_MBCS」と設定されていることを確認してください。
その後ろに、「,DWORD_PTR=DWORD,LONG_PTR=LONG」を追加してください。
追加した結果、[プリプロセッサの定義(C)]は、「WIN32,_WINDOWS,_MBCS,DWORD_PTR=DWORD,LONG_PTR=LONG」となります。
[C/C++]タブを選択したままで、[カテゴリ(Y)]に「プリプロセッサ」を選択してください。
[インクルードファイルのパス(N)」に「../my_inc2,../../OGG/oggDec,../../OGG/ogg/include,../../OGG/vorbis/include/vorbis,../../XViD/XVidDec」と入力してください。
[リンク]タブを選択し、[カテゴリ(Y)]に「一般」を選択してください。
[オブジェクト/ライブラリモジュール(L)]が、初期状態で「kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib」と設定されていることを確認してください。
その後ろに、「 dxguid.lib ddraw.lib dsound.lib winmm.lib comctl32.lib Msacm32.lib Vfw32.lib oggDec.lib ogg_static.lib vorbis_static.lib XviDDec.lib」を追加してください。
追加した結果、[オブジェクト/ライブラリモジュール(L)]は、「kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib dxguid.lib ddraw.lib dsound.lib winmm.lib comctl32.lib Msacm32.lib Vfw32.lib oggDec.lib ogg_static.lib vorbis_static.lib XviDDec.lib」となります。
[リンク]タブを選択したままで、[カテゴリ(Y)]に「インプット」を選択してください。
[無視するライブラリ(I)]に「LIBCMT」と入力してください。
また、[追加ライブラリのパス(D)]に「../../OGG,../../OGG/lib_proj,../../XViD」と入力してください。
以上の設定を行った後、[OK]ボタンを押して、『プロジェクトの設定』ダイアログを閉じてください。

Visual C++ 6.0のメインメニューから、[プロジェクト(P)]→[プロジェクトへ追加(A)]→[ファイル(F)...]を選択してください。
『プロジェクトへファイルを追加』ダイアログが表示されます。
「C:\Work\ToHeart2\ScriptEngine\src」フォルダの中にある、拡張子「.rc」と、拡張子「.cpp」のファイルをすべて選択し、[OK]ボタンを押してください。
もういちど、Visual C++ 6.0のメインメニューから、[プロジェクト(P)]→[プロジェクトへ追加(A)]→[ファイル(F)...]を選択してください。
再び、『プロジェクトへファイルを追加』ダイアログが表示されます。
「C:\Work\ToHeart2\my_inc2」フォルダの中にある、拡張子「.cpp」のファイルをすべて選択し、[OK]ボタンを押してください。

ToHeart2のソースの中には、Visual C++ 6.0ではコンパイルできない機械語命令を使った関数が含まれているので、それらを修正する必要があります。
修正する関数は、以下の二つです。

ToHeart2のソースが利用しているライブラリは、_ftol2()という関数を呼び出していますが、Visual C++ 6.0には、この関数が含まれていません。
そこで、新たにソースファイルを追加し、_ftol2()関数を作成する必要があります。

Visual C++ 6.0のメインメニューから、[ファイル(F)]→[新規作成(N)...]を選択してください。
『新規作成』ダイアログが表示されます。
「C++ソースファイル」を選択し、[ファイル名(N)]に「_ftol2.c」と入力して、[OK]ボタンを押してください。
空の「_ftol2.c」ファイルが作成されるので、下図のように入力して、_ftol2()関数を作成してください。(入力済みの「_ftol2.c」ファイルをダウンロード)

以上で、コンパイルの準備はすべて完了しました。
Visual C++ 6.0のメインメニューから、[プロジェクト(P)]→[リビルド(R)]を選択してください。
しばらく待って、「エラー 0」と表示されたら、コンパイル成功です。
「C:\Work\ToHeart2\ScriptEngine\Debug」フォルダの中に、「ToHeart2.exe」が生成されています。
コンパイルした「ToHeart2.exe」を実行するには、製品版「ToHeart2 XRATED」のインストールフォルダ「C:\Program Files\Leaf\ToHeart2 XRATED」にコピーしてください。
コピーする前に、本物の「ToHeart2.exe」を、別のフォルダにバックアップしておくことを忘れないでください。
コピー完了後に、コピー先の「C:\Program Files\Leaf\ToHeart2 XRATED\ToHeart2.exe」をダブルクリックして、プログラムを実行してください。

コンパイルした「ToHeart2.exe」を実行する方法には、上述の方法の他に、デバッガを使って実行する方法もあります。
デバッガを使ってプログラムを実行するには、以下の準備が必要です。
Visual C++ 6.0のメインメニューから、[プロジェクト(P)]→[設定(S)...]を選択し、『プロジェクトの設定』ダイアログを表示してください。
『プロジェクトの設定』ダイアログで、ツリー先頭の「ToHeart2」を選択し、[設定の対象(S)]に「Win32 Debug」を選択してください。
次に、[デバッグ]タブを選択し、[作業用のディレクトリ(W)]に「C:\Program Files\Leaf\ToHeart2 XRATED」と入力し、[OK]ボタンを押してください。
以上で、デバッガを使ってプログラムを実行する準備が完了しました。
デバッガを使って実行する方法では、コンパイルした「ToHeart2.exe」を、「C:\Program Files\Leaf\ToHeart2 XRATED」フォルダにコピーしておく必要はありません。
Visual C++ 6.0のメインメニューから、[ビルド(B)]→[デバッグの開始(D)]→[実行(G)]を選択してください。
または、キーボードの[F5]キーを押してください。
Visual C++ 6.0のデバッガ上で、プログラムの実行が開始します。

今回は、「Win32 Debug」を選択してコンパイルを行ったので、この「ToHeart2.exe」は、デバッグ情報を含んだ、デバッグバージョンの実行ファイルが生成されていました。
デバッグ情報を含まない、リリースバージョンの実行ファイルを生成する場合は、「Win32 Release」を選択してから、[プロジェクト(P)]→[リビルド(R)]を行ってください。
リリースバージョンの実行ファイルは、「C:\Work\ToHeart2\ScriptEngine\Release」フォルダの中に生成されます。

謝辞:
インクルードディレクトリと、ライブラリディレクトリの設定について、てとら★ぽっとさんのToHeart2 XRATED ソースの記事を参考にさせていただきました。
ありがとうございます。

nsawa@piece-me.org