吉里吉里Zのソースから必要なものをビルドして吉里吉里2用に作られたプロジェクトが動作できるようにするまでの手順が網羅されているサイトが見当たらなかったので、ここに紹介しておく。吉里吉里Zのビルドには、今最新の版である visual studio community 2017 を用いることにする。
実はこれが結構長い手順で作業は大変だが、吉里吉里2プロジェクトが動作するまで最後まで書いておく。
ステップ1 吉里吉里Z本体をビルドする
visual studio community 2017 をインストールしておく。こちらのページの中にある「コミュニティ 無償ダウンロード」をクリックする。
cmake をインストールしておく。(例) x64 の場合、現在の最新版3.13.4はここからダウンロードできる。
nasm のサイトから、 nasm をインストールしておく。 krkrz の HowToBuild.txt には「nasm 2.10.09 (最新版は未チェック)」と書かれているが、最新版で構わない。現在は 2.14.02 。x64 の場合は nasm-2.14.02-win64.zip をダウンロードする。
github からソース環境を clone する。(例) git clone –b master https://github.com/krkrz/krkrz
「コントロールパネル」の「システム」から「システムのプロパティ」を開き、「環境変数」から、システム環境変数(またはユーザー環境変数)の Path に、 nasm.exe をインストールしたディレクトリのパスを設定する。
コマンドプロンプト(cmd.exe)を開き、ローカルに clone した先の krkrz/krkrz/external/zlib/ に cd で移動する。((例) cd c:/users/*/source/repos/krkrz/krkrz/external/zlib )
移動した場所で、 cmake . を実行する。これによって、 プロジェクト zlib に欠けていた zconf.h が出来るのでビルドが通るようになる。
ローカルに clone した先の krkrz/krkrz/vcproj/ にある tvpwin32.sln を開く。
option_desc_ja.json を開き、 901 行目の
sound プロジェクトの WaveFormatConverter_SSE.cpp を開き、冒頭の #include 部分に '#include <intrin.h>' を追加する。そうしないと、34, 35 行目で _mm_cvtepi16_epi32 の undefined identifier のエラーが出る。
ソリューションエクスプローラーで turbojpeg-static の中の x32 をクリックし、 j*.asm という名前の NASM 形式のアセンブリのファイルの一覧を表示させる。複数選択で全て選択して右ボタンクリックし「プロパティ」を開き、「構成プロパティ」の「カスタムビルドツール」の「全般」を選択すると、「コマンドライン」に、
setlocal
nasm -fwin32 -DWIN32 -I../win/ -I../simd/ ../simd/%(Filename).asm -o./$(Platform)/$(Configuration)/%(Filename).obj
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
と表示されるが、2行目の nasm を、 nasm をインストールした場所の絶対パス(ファイル名込み)に変更する。(例) 'C:\Program Files(x86)\nasm-2.14.02\nasm' 。変更しないと、 nasm が見つからないというエラーが出るためだが、 nasm はシステム環境変数の PATH にパスを設定してあるので問題ないはずなのだが、何故かどうやっても Visual Studio Community 2017 はパスをたどって実行してくれないので、やむを得ずこのように絶対パスで指定することでビルドを通すことが出来た。 x64 はビルドしないならこれでいいが、 x64 もビルドするなら、 turbojpeg-static の x64 でも同様の修正を加える。 ソリューションエクスプローラーで tvpwin32 をクリックして選択し、メニューバーの下のアイコンから、 Debug Win32 を選択し、 evpwin32 を右クリックし、「リビルド」を選択し全体をビルドする。
ローカルに clone した先の krkrz/ に tvpwin32_d.exe が出来ているので、吉里吉里2用に作成したプロジェクトのルートディレクトリに tvpwin32_d.exe をコピーする。
ステップ2 吉里吉里Zの動作に必要な DLL をビルドする
github からソース環境を clone する。(例) git clone –b master https://github.com/krkrz/krkrz_dev
ローカルに clone した先の krkrz/krkrz_dev/src/plugins/win32/menu/vc2012/ にある menu.sln を開く。
ソリューションエクスプローラーで menu をクリックして選択し、メニューバーの下のアイコンから、 Debug Win32 を選択し、 menu を右クリックし、「リビルド」を選択し全体をビルドする。
ローカルに clone した先の krkrz/krkrz_dev/src/plugins/win32/menu/vc2012/ にある menu.sln を開く。
ソリューションエクスプローラーで menuをクリックして選択し、メニューバーの下のアイコンから、 Debug Win32 を選択し、 menuを右クリックし、「リビルド」を選択し全体をビルドする。
ローカルに clone した先の krkrz/krkrz_dev/bin/win32/plugin/ に menu.dll が出来るので、吉里吉里2用に作成したプロジェクトのルートディレクトリの下の plugin ディレクトリに menu.dll をコピーする。
ローカルに clone した先の krkrz/krkrz_dev/src/plugins/win32/KAGParser/vcproj/ にある KAGParser.sln を開く。
ソリューションエクスプローラーで KAGParser をクリックして選択し、メニューバーの下のアイコンから、 Debug Win32 を選択し、 KAGParser を右クリックし、「リビルド」を選択し全体をビルドする。
ローカルに clone した先の krkrz/krkrz_dev/bin/win32/plugin/ に KAGParser.dll が出来るので、吉里吉里2用に作成したプロジェクトのルートディレクトリの下の plugin ディレクトリに KAGParser.dll をコピーする。
github からソース環境を clone する。(例) git clone –b last_hedgepodge_repository https://github.com/krkrz/krkrz
ローカルに clone した先の krkrz/last_hodgepodge_repository/src/plugins/win32/win32dialog/vc9/ にある win32dialog.sln を開く。
ncbind.hpp の 532~536 行目を以下の様にコメントアウトする。コメントアウトしないと、「error C2668: : オーバーロード関数の呼び出しを解決することができません。」エラーが出る。
// for reference
// template <typename SRC>
// inline void operator ()(VarT &dst, SRC &src, ncbTypedefs::Tag<SRC&> const &tag) const {
// operator()<SRC&> (dst, src, tag);
// }
ソリューションエクスプローラーで win32dialog をクリックして選択し、メニューバーの下のアイコンから、 Debug Win32 を選択し、 win32dialog を右クリックし、「リビルド」を選択し全体をビルドする。
ローカルに clone した先の krkrz/last_hodgepodge_repository/bin/win32/plugin/ に win32dialog .dll が出来るので、吉里吉里2用に作成したプロジェクトのルートディレクトリの下の plugin ディレクトリに win32dialog .dll をコピーする。
ステップ3 吉里吉里2プロジェクトを修正する
ローカルに clone した先の krkrz/krkrz_dev/script/KAG3/data にある system ディレクトリの中にあるファイルを全て、動作させたい吉里吉里2プロジェクトの system ディレクトリにコピーする。
動作させたい吉里吉里2プロジェクトの scenario ディレクトリにある .ks ファイルの文字コードを shift-jis から utf8 に変更する。(エディタで開いて文字コードを変えるか、参考サイトの「2.文字コードを変更する」のように nkf で一括変換すると便利。)
動作させたい吉里吉里2プロジェクトのルートディレクトリの下の system ディレクトリにある config.tjs を開き、右ボタンクリック時の動作などを吉里吉里Zが用意したものを用いる場合は、以下の useHamExtention を true にする。逆に、私のように、自分の吉里吉里2環境で自前で右クリック時の動作などを記述しているので余計なことをしないで欲しい場合は false にする。
// ◆ Ham拡張の使用
// Ham Extention for KAG3を使用しない場合はfalseにしてください。
;global.useHamExtention = false;
動作させたい吉里吉里2プロジェクトのルートディレクトリにある startup.tjs をエディタで開き、冒頭部分に、以下のような if ブロックを追加する。
@if (kirikiriz)
property _dummyProp { getter {} setter (v) {} }
with(Window) {
&.innerSunken = &_dummyProp;
&.showScrollBars = &_dummyProp;
}
Plugins.link("plugin/menu.dll");
Plugins.link("plugin/KAGParser.dll");
Plugins.link("plugin/win32dialog.dll");
@endif
ローカルに clone した先の krkrz/krkrz_dev/script/Krkr2Cpmpat/data/ の中にある k2compat ディレクトリとその中身を全て、動作させたい吉里吉里2プロジェクトのルートディレクトリにコピーする。
ステップ4 吉里吉里2プロジェクトを修正する(吉里吉里Zが吉里吉里2非互換の部分について、 互換性を出来るだけ確保したい場合の追加作業)
動作させたい吉里吉里2プロジェクトのルートディレクトリにある startup.tjs をエディタで開き、冒頭部分の if ブロックに、 var base = “k2compat/”; からの3行を追加する。( 3つの Plugins.link については、この作業をした場合なくてもよくなるはずだが、あってもエラーにはならない。)
@if (kirikiriz)
property _dummyProp { getter {} setter (v) {} }
with(Window) {
&.innerSunken
= &_dummyProp;
&.showScrollBars = &_dummyProp;
}
Plugins.link("plugin/menu.dll");
Plugins.link("plugin/KAGParser.dll");
Plugins.link("plugin/win32dialog.dll");
var base = "k2compat/";
Scripts.execStorage(base+"k2compat.tjs");
Krkr2CompatUtils.scriptBase = base;
@endif
これで、吉里吉里2プロジェクトが動作するようになる。ただし、プロジェクトによっては、各部で吉里吉里2と吉里吉里Zの非互換部分でエラーが出る場合があるので、その都度修正が必要になる。
吉里吉里2は、展開するだけでそのまま開発を始められるアーカイブファイルが用意され、分かりやすいチュートリアルやリファレンスマニュアルが用意されていたから、多くの初心者が吉里吉里を使うことができたのだと思う。
吉里吉里Zにも公式サイトにリファレンス等があるので参照するとよいと思う。ただし、配布アーカイブは、本体と KAG (ノベルソフトを書くのに役立つスクリプトツール)が別々になっており、 KAG も機能別に「鱧入り KAG3 for 吉里吉里Z」と「 KAG3 for 吉里吉里Z」( github リポジトリは「鱧入り KAG3 for 吉里吉里Z」と「 KAG3 for 吉里吉里Z」)に分かれて配布されているので注意して欲しい。
この記事が少しでも新規に吉里吉里Zを用いてモノづくりをしたいと思う人と、吉里吉里2から吉里吉里Zに移行して吉里吉里を使い続けようと思う人の役に立てば幸いに思う。