まずリンク読んでよ! というのはさておき、古いコンパイラじゃないとコンパイルできなかった吉里吉里2を、 Micro$oftのVisual Studio 2012/2013(C++) Professionalでコンパイル できるようにしたもの。 あと細かい変更はあるけれど、大きな変更はソレだけと言えばソレだけ。 細かい変更点は…リンク読んでよ!
ナニがうれしいのん?とかそういうのは置いとく。リンク読んでよ!(三回目)。
なお、 吉里吉里2からの変更点一覧はこちら。 開発blogも、色々わかって 面白い。
ここで言う「デフォルトの吉里吉里2/KAG3」とは、 吉里吉里SDKのkag3/template/から 作成されるゲームの雛形。たぶんこれがもっとも単純な吉里吉里2/KAG3ゲームだから。 これを吉里吉里Zに移行する手順を確立しておけば、あとはその応用で、アナタの ゲームを吉里吉里Zに移行できるようになりますからな!
実は、吉里吉里2が提供している既存のplugin/*.dll(=吉里吉里プラグイン)は、 殆どがそのまま吉里吉里Zでも動作可能。従って、 あまりお勧めしないけど、吉里吉里Zで提供されている menu.dll と KAGParser.dll だけを今の plugin ディレクトリに放り込めば、フツーに 吉里吉里Zも起動する。 ただ、吉里吉里2のwindowEx.dllだけは、吉里吉里Zで動作しなかった(後述)。
手で変換(メモ帳で開いて一つ一つUTF-8でセーブ)してもいいが、我輩は Cygwin+nkf を使って以下のように一括変換した。nkf 超便利(iconv使えって?)。 あと、cygwinだとfindは絶対パスで指定しないとWindowsのfindの方が使用されちゃう ので注意。
cd ゲームのトップディレクトリ for i in `/usr/bin/find ./ \( -name "*.ks" -or -name "*.tjs" \) -print`; do echo $i mv $i $i.org nkf -w $i.org > $i done |
このスクリプトでは*.ks.orgと*.tjs.orgが残るが、これらは最後には削除して 構わない。スクリプト中に rm -f $i.org を入れてもよい。
実は、テストしたいだけなら、文字コードを変更しないでShift-JISのまま動かす方法もある。 tvpwin32.exeの起動オプション「-readencoding=Shift_JIS」を使えばいい。 以下のコマンドで起動すればO.K.。
D:TestDir\Game1> tvpwin32.exe -readencoding=Shift_JIS |
吉里吉里Zでは、コンソールがなくなった変わりに、コマンドラインから起動すると ログメッセージがコマンドウィンドウ上に流れていくので、それはそれで助かる。 ただ、市販したゲームでも、コマンドラインから実行されると、 なんかプロテクトとか暗号化とかの見えちゃいけないメッセージまで 見えちゃうので怖い。メッセージ出さないようにするスイッチとかあるのかしら。 ないなら、こういうメッセージ出さない製品用のバイナリって必要なんじゃ ないかなぁ…。メッセージが見えると、暗号の復号化はこんなに楽チン、という例は こちら。
あと、実は文字コードは UTF-16LE でもよい。これだと、 吉里吉里2/吉里吉里Z両方が何のオプションも無く読み込めるため、両バージョンの テストをする時には便利かもしれない。どこにも書いてないから ずっと使えるかどうかわからんけれど。 また、UTF-16LE対応のテキストエディタでなければ編集できなくなっちゃうことにも 注意。
// 吉里吉里Zの場合は細工する @if (kirikiriz) property _dummyProp { getter {} setter (v) {} } with(Window) { &.innerSunken = &_dummyProp; &.showScrollBars = &_dummyProp; } Plugins.link("plugin/menu.dll"); // メニューを使わないなら不要 Plugins.link("plugin/KAGParser.dll"); // KAGを使わない(!)なら不要 @endif (この後、元からあった記述が続く) |
「@if (kirikiriz) 〜 @endif」という書き方については、
TJS2 スクリプトでの吉里吉里2と吉里吉里Zの判別方法参照。
これを駆使して、吉里吉里2/吉里吉里Z共通のスクリプト書くちうのも面白い
かもしれない。
でもこの記述は吉里吉里Zだけのものなので、吉里吉里2との共存を考えるなら
使わないほうがいいと思う。
この書き方は吉里吉里2では使えないと思ってた(前に試した時に
エラーになった記憶が…)けど、今試したら吉里吉里2でもちゃんと使えましたよ!
あれー?
…うーん、でもやっぱり我輩は、こういう書き方じゃなくて、 System.versionInformation.substr(11,1) (=吉里吉里2では '2' を、 吉里吉里Zでは 'Z' を返す)を判定する書き方の方が好き。 「定義されている・いないこと」を判定するよりは、 「双方で定義されていて明確に違うこと」を利用する方が、 定石だし間違いが無いから。
なお、メニューについては、もともと こんな話とか こんな話があるため、最終的には無くすか、少なくともフルスクリーン時には 表示しないようにした方がいいみたい。
(snip) function YesNoDialogWindow(message, cap) { super.Window(); // このウィンドウではもっとも基本的なdrawerを用いる // drawDevice.preferredDrawer = global.Window.PassThroughDrawDevice.dtDrawDib; // ↑この行をコメントアウト (snip) |
// ◆ BGM再生メディア // type 変数に設定する文字列で、使用するサウンドバッファを決めることができ // ます。 // "Wave" : WaveSoundBuffer ( wav等(プラグインで再生できる物も含む) ) // "MIDI" : MIDISoundBuffer ( mid,smf ) // "CDDA" : CDDASoundBuffer ( cda ) ;type = "Wave"; |
当然、MIDIやCDDAは使用できなくなった。最近MIDIとかCDDA使ってるゲームは まずないけれど、これらを使用している古いゲームをそのまま移植することは できない、ということに注意。 まぁ…oggに変換すりゃいいじゃんという話はその通りなんだけど。
// Pad の表示 // global.configPad = new Pad(); // global.configPad.text = lines; // global.configPad.color = 0; // global.configPad.title = "Config.tjs"; // global.configPad.fileName = Storages.getLocalName(Storages.getPlacedPath("Config.tjs")); // global.configPad.visible = true; |
…ところで、controllerも削除されたから、Config.tjsをセーブすることもできなく なっちゃったんだけどどうすればいいのん…? Config.~newをConfig.tjsにコピー した直後は、Config.tjsの先頭のglobal.config_version=""に kagVersion("3.32 stable rev. 2"とか)を書き込んでおくと、UpdateConfig.tjsが そもそも実行されなくなるので、そもそも上の変更も不要になるとかそんな。
理由は不明。テキストで書き出しても(両方UTF-16LEで書き出すくせに)共用できない。 読み込もうとすると、「システム変数データを読み込めないか、あるいはシステム変数データが壊れています(文法エラーです(syntax error))」と報告されたり、 「文字コードが違います」と言われたりする。ただいま原因調査中(未報告)。
15:38:36 スクリプトで例外が発生しました (void) から Object へ型を変換できません。Object 型が要求される文脈で Object 型以外の値が渡されるとこのエラーが発生します 15:38:36 trace : initialize.tjs(121)[(function) KAGLoadScript] <-- initialize.tjs(205)[(top level script) global] <-- startup.tjs(20)[(top level script) global] <-- startup |
(2014/05/15追記)
ずっと、windowEx.dllは根本的に変えないと吉里吉里Zでは動かないものだとばかり
思ってた。のだが、どうやらwindoeEx.dll内にPadとConsole(とMenu)に関する拡張が
埋め込まれていて、これにアクセスしたために上のエラーになっていた模様。
だもんで、単純にこれらをソースコード中からコメントアウトしたバイナリを
buildするだけで、windowEx.dllが吉里吉里Zでも使えることを確認した。
一応ソースコード込みでこちらに上げとく。
このdllでは、PadとCOnsole拡張は使えなくなっていること、Menuクラスの拡張を
含んでいるのでmenu.dllが必須なことに注意。
以上!基本的にはこれだけで、既存の吉里吉里2/KAG3のゲームを移行可能。 ほーら動かしてみたくなってきた…!
実はKAGEXだからといって特別な手順は不要。 上で述べた手順がそのまま利用できる。 もちろん、デフォルトから手を加えていて吉里吉里Zで引っかかるなら、 適宜修正必要だけれど。windowEx.dllが必要な場合が多いが、それも コレで動くようにできるし。
ちなみに我輩は、ソース付きで公開されている タリナイモノ (少し古いけれど)を入手し、上の手順に従った後、吉里吉里Zで動かして 致命的な問題はなさそうなことを確認した(分かった問題は報告済み)。 こういう形でゲームを公開してくれているのも、このように「ゲームを作る」以外の 目的で役立ったりするのでとても助かります助かります。
ただ…なんかこう…「異」「び」「ビ」をメッセージウィンドウに表示する時に、
なぜかその文字だけ薄い色になることがあったんだよね…。
再現性低すぎて報告できなかったんだけど。
コレだった模様。
現状で、フツーの「吉里吉里使ってゲーム作りたい人」が吉里吉里Zに移行する 意味はない。というか、そういう人は吉里吉里Zを使うべきではない。 今の吉里吉里2を使った方が、バグもないし、メニュー周りの問題とか デバッグコンソールが無いとかの問題がないので、作りやすいし使いやすい。
吉里吉里Zのメリットは、吉里吉里本体をばりばりつつく開発者が、コンパイル環境を 容易に用意できるという、ただその一点に尽きる。確かにいくつかのライブラリが 新しくなって高速になっている部分もあるが、そのあたりはフツーの吉里吉里2でも そうそう困るものじゃない。だから、特にメリットとかないけどあえて移行しよう、 とは思わぬが吉。
メニュー問題とデバッグコンソールがねぇ…それさえ真っ当に動けば、今の時点でも さっと乗り換えるべきだとお薦めできるんだけどなぁ…。
吉里吉里Zは 2013/12/31に1.0.0.1がリリースされたが、その後は少しおとなしいですな。 とはいえ、「作る側」としては色々便利になっているので、我輩はコレをベースに なんか書いてみようかなぁと思っている次第。吉里吉里2との互換性もまぁまぁだし、 無駄にはならないと期待する。
ここはイッパツ、アナタもお手持ちのゲームを吉里吉里Zで動かしてみて、 問題あれば積極的に報告(もちろんちゃんと切り分け実施した上で)してみては如何。 もしキミんトコで問題が起こってキミが切り分けできないなら、 再現環境送ってもらえれば我輩が切り分けしちゃうよ!くらいのイキオイ。 我輩は個人的に吉里吉里Zに期待してて応援中です故。
バグ報告方法は 吉里吉里Z SDK(リンクは1.0.0.1)の中のreadme.txtに書いてある。 さておき、バグ報告前に以下を確認しておくこと!
直して頂くのは先方の厚意であって、我々ユーザはそれに甘えてさせて頂いている ことを忘るるべからず。何度もやりとりさせて先方の時間を浪費するとか、そゆ 失礼のないように。
ところで吉里吉里ZってVisual Studio Expressでもbuildできるのかなぁ…。 我輩貧乏だから、Express(※無料)しか持ってないのであるよなぁ…(遠い目)。