スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

途中まで書いていた吉里吉里本を公開

冬コミで出そうとしていましたが、中途半端になりそうなので止めた、吉里吉里本の中身を公開し忘れていました。
未編集でお送り致します。

とにかく、変に長いです。



吉里吉里とは、主にADVゲーム制作に使用されているゲームエンジン。実際はスクリプトエンジンですが、ほぼゲームエンジンと考えていいと思います。
採用実績として、TYPE-MOONのFate/Stay Night、Lassの11eyes -罪と罰と贖いの少女-、あかべぇそふとつぅのG線上の魔王などがあるらしい。

まずは吉里吉里本体をダウンロードする。
公式サイトから吉里吉里2SDK version2.32 revision2/KAG3 3.32 revision2をもってきた。

トランジションライブラリは画面切り替えのときのエフェクトだから、後でダウンロードすることにする。





まずはreadme.txtを読む。
kirikiri2フォルダ には吉里吉里2、
kag3フォルダ にはKAG3、
kag3/syoukaiフォルダにはサンプル
が入っているとのこと。

とりあえず、サンプルから動かすのが一番。ライブラリを使うときでもよくあることですね。
kirikiri2/krkr.eXeを実行して、kag3/syoukaiフォルダを選択したらダイアログと、Config.tjsというウィンドウが出た。
でもただ昔のバージョンの設定を今のバージョンに変換しただけっぽいのでOKを押してしまう。
すると、吉里吉里が起動した。Config.tjsウィンドウはとりあえず放置しておく。

吉里吉里とKAGの紹介というサンプルが起動した。なるほど、サンプルでどういうものか紹介する形式なのか。
確かにreadmeやリファレンスなどで説明するよりも、わかりやすいと思う。

早速「吉里吉里とは」をマウスでクリックして説明を読む。
吉里吉里のスクリプト言語をTJSと呼び、TJSはJavaとJavascriptを足して3で割ったような言語らしい。3で割っているということは、(Java+Javascript+オリジナル)/3と考えていいのかな?
マルチメディア系の表示・再生が強く、2Dゲームを作るのに適しているのが特徴。画像形式はPNG/JPEG/ERI/BMPに対応。更にSusie-pluginで読み込み可能な形式を拡張できるとのこと。ERI形式ってはじめて聞くなぁ。
画像の変形は、画像の拡縮、画像の変形、アルファブレンド、半透明矩形、アンチエイリアス可能な文字の表示が可能。
動画はAVI/MPEG/SWFを再生可能。SWF再生って、時代を感じる。懐かしい。
サウンドはCD-DA/MIDI/PCM/Oggを再生可能。PCMは複数同時に再生可能なので効果音に使う。フェードや音量制御ももちろん可能。
周辺ツールとして、複数のファイルを一つにしたり、単体で実行可能なファイルを作成することが出来る"Releaser"、
吉里吉里本体の設定をする"吉里吉里設定"、
制作側でフォントを用意して、プレーヤー側にインストールされて無くても使えるようにする"レンダリング済みフォント作成ツール"、
透明度を持った画像フォーマット間の相互変換を行う”透過画像フォーマットコンバーター"がある。
…ADVならこれだけ出来れば十分な気がする。

画面構成はレイヤで何枚も重ねて表示する。レイヤはPhotoshopなどにあるアレと同じ発想ですね。


次に「KAGとは」を読む。KAGがプログラマの楽しくできる部分だと思うので楽しみ。
KAGは吉里吉里をゲームエンジンとして動作させるためのスクリプトで、KAG自身もTJSスクリプトで書かれている。
仮にプログラマ視点で見れば、ここがGameMonkeyScriptやLua部分と考えていいはず。MayaのMayaスクリプトの方が近い?
KAG用のスクリプトは「シナリオ」と呼ぶ。TJSスクリプト != シナリオなので注意。

KAGの文字表示は、以下のような感じ。
(IMG:ここに画像を張りたい)

トランジションにはクロスフェード、スクロールトランジション、ユニバーサルトランジションの3つ。
ユニバーサルトランジションが制作者が自由にパターンを作成できるもの。ルール画像と呼ばれるグレースケール画像を用意して、画面の暗い部分から早く切り替えが始まるもの。これが簡単で結構カッコイイ!

KAGの変数は文字列でも数値でも入れることが可能。つまりC++のBoost::Anyや一般的なスクリプト言語の変数と同じみたい。変数の数は無制限、文字列の長さも制限なし、数値も整数だけではなく実数も扱える。TJSの仕様がそうなっているので、KAGもそうなっているとのこと。
変数にも種類があって、ゲーム変数とシステム変数が存在。ゲーム変数は栞とともに読み込まれたり保存されたりするが、システム変数は栞と関係なく、常に同じ内容を保つことができる。システム変数はconst変数と考えていいのかな?

KAGの大きな特徴は、高い拡張性とカスタマイズ性。KAGだけでは実現できない機能も、TJSを使って直接吉里吉里を制御すればいろいろ可能。
KAG自身がTJSスクリプトで書かれているので、隅々にわたってカスタマイズすることができるとのこと。
ここがプログラマの楽しい部分だね-。

と、感じている間に紹介プログラムが終了。
さて、ここからどうするか。


【KAGEX編】
そういえば、KAGの派生版KAGEXというのがあるらしい。調べてみると、現バージョン?のKAG3にレイヤ機能などを中心に拡張したものらしい。
問題点としてはKAG3に関して完全互換ではないので、KAGEXを使いたい場合は、はじめからKAGEXを使った方が無難。そうしないと、KAG3で作っていたやつから急にKAGEXに変えたくなった時に動かなくなったりしてしまう可能性がある。あと、安定版が全然リリースされないため、仕様・動作が不安定らしい。
プログラマならKAGEXの方がやり甲斐がありそうなので、こちらを使うことにしてみよう。

Subversionでしかダウンロードできないみたいなので、公式サイトのW.Deeさんの日記に書かれていたアドレスに対してTortoiseSVNからエクスポートをする。https://sv.kikyou.info/svn/kirikiri2/trunk/kag3exを指定し、取得すると……存在しないと言われた!
とりあえず公式サイトにある吉里吉里2のbrancheであるhttps://sv.kikyou.info/svn/kirikiri2/branches/を見てみると、kag3ex1というフォルダとkag3ex2というフォルダがある…何が違うんだろう……?今回はex2である https://sv.kikyou.info/svn/kirikiri2/branches/kag3ex2から取得。
取得した中にある、KAGEXの初期設定.txtを読む。見てみるとex1とかex2は安定版のバージョンを表しているとのこと。じゃあ、ex2が最新版でよさそう。

とりあえずサンプルを動かそう。最初にダウンロードしたkirikiri2フォルダから、以下のファイルを先ほどダウンロードしたKAGEXの初期設定.txtのカレントフォルダにコピーする。

krkr.eXe
krmovie.dll
plugin/wuvorbis.dll
plugin/layerExImage.dll
plugin/extrans.dll
plugin/csvParser.dll

pluginフォルダ内のdllは全部上書きしますか?と聞かれたので上書きしてしまう。そしてkrkr.eXeを実行!

ブランドロゴのサンプルと、タイトル画面が表示される。吉里吉里2のサンプルよりもゲーム寄りのサンプルになっているみたい。
とりあえずConfigをクリック。画面設定でウィンドウかフルスクリーンか選択したり、メッセージスピードやスキップ設定などADVゲームで必要そうな設定が出てきた。これはKAG3で元からある機能っぽい気もするので、一旦右クリックで抜けてSTARTを選択することにする。

すると、選択項目が五つ出現。
KAGEX拡張レイヤ、ワールド拡張:キャラクタ、ワールド拡張:レイヤ、ワールド拡張:トランジション、ワールド拡張:拡張アクションの五つ。

KAGEX拡張レイヤを見てみる。レイヤに対して拡縮や回転の制御をかけられるようになるとのこと。
サンプルでは半透明、回転、回転原点変更(左上隅・座標指定・センターに戻す)、拡大、Xのみの拡大、合成モード変更、ガクブル、縦揺れ、横揺れ、指定角度に移動するテスト、くるくる回る、キャラをズーム(時間指定)、ズームを利用した回転っぽいなにか、指定した不透明度に変更(時間指定)、フェード点滅、動画ロード、動画のズーム変更と回転。数多くありました。

次にワールド拡張:キャラクタを見る。比較的シンプルな記述で高度な演出を行うことができるとのこと。
実際のchar.ksを開いて比較しながら見るといいらしいので、kag3ex/data/scenario/char.ksを開きつつ見ることにする。
中身を抜粋すると以下のようになっている。

====================
[あい 通常 中]
キャラクタ出現

【あい】規定の書式で自動的に名前表示・テキスト表示・キー入力待ちが行われます
【あい/???】表示名を変更する場合はスラッシュにつづけて表示名を記載すればOKです
【あい】ボイス番号が指定されているとテキストにあわせてボイスが再生されます。
【あい】自動再生時の処理待ちも自動的に調整されます。次のテキストでボイスがなります

[あい voice=1]
【あい】中三マキロン地獄

[あい rotate=30 time=1000][あい zoom=120 time=1000]
レイヤ回転・ズーム制御(動作シンクロしない場合)

[あい rotate=0 time=1000 sync][あい zoom=100 time=1000 sync]
レイヤ回転・ズーム制御(動作シンクロする場合)

[夕 normal]
夕方(キャラクタは自動的に色補正されます)

; イベント絵を表示
[EV file=event1 fade]
イベント絵を表示しました。

[あい 喜]
表情変更(喜)

[newchar name=あい2 initname=あい 中 opacity=255:0 zoom=100:140 time=300 sync]
[newchar name=あい3 initname=あい 左 opacity=255:0 zoom=100:140 time=300 sync]
分身の術
===================

[あい 通常 中]で"あい"というキャラを通常で中央に表示する。
表示後は、【あい】の後ろにテキストを書くと"あい"というキャラが喋っている感じで表示される。【あい/???】で???という名前のキャラが喋っているように表示される。(名前がまだ不明のキャラなどに使用する)

あとはキャラクタの移動だったり、フェードしつつの出現・消去、レイヤの回転・拡縮、レイヤの状態初期化、透明度制御、夕方表示、夜表示。
イベント絵の表示、回転・拡縮・消去。
キャラクタの表情変更、初期位置指定で場所移動、分身の術、おじぎ・びょんびょん・ガクガクアクションの適用、重なるように移動、特定のキャラを前面に出す・後面に下げる。
と、いっぱいありました。


次にワールド拡張:レイヤを選択。カットインなどの演出に応用できるとのこと。
レイヤを3つ作成し、そのレイヤに対して回転や移動をかけるサンプル。

次はワールド拡張:トランジション。トランジションはDirectXなどでも使われている表画面・裏画面の概念が使われている。
命令が呼ばれた時点で、全体を裏画面にコピー -> 対象のレイヤだけを裏画面で更新 -> トランジションという流れをするものと、begintrans->複数個別処理->endtransで、endtransが呼ばれた時点で一気に複数個別処理を適用する、二種類があるみたい。

最後のワールド拡張:拡張アクション。KAGEXでの表示・消去アクションのテストサンプル。
キャラクタの出現と消去のスライド・ズーム表示、同時表示、複数の連続アクションを単一アクションとして実行するサンプルになっていました。


とりあえず一通り見終わったので、メニューバーのSYSTEM(S)からタイトル画面に戻り、EXTRAを見てみるとイベント画像の閲覧とBGMの視聴が可能になっていました。これもKAG3の機能なのかKAGEXの機能なのか判断できない…


さて、KAGEXも一通りサンプルを見た。
まずは単純なものを作ってみようかな。


【開発環境編】
吉里吉里の開発環境として、そのままテキスト直書きでもいいのですが、やっぱりIDEとかemacs-modeとかあったほうが楽だよね。ということで探しました。

一般的だったのは「かぐや姫Studio」みたいですが、現在開発停止。ダウンロードもwebアーカイブでとってくるしかないみたいです。現在も開発が続いている「KKDE(KiriKiri Development Environment)」にします。 KAGEX関連サポート機能もあるようなので、KAGEXを使う方ならいいのではないでしょうか。
開発中止したものを使い続ける気にもなれないので、代わりがあるなら代わりで今後に期待します。

早速PORING SOFT .NET(http://www.poringsoft.net/)からKKDEをダウンロード。
とりあえず起動。上記のサイトにKKDEの始め方があるのでそれを参考に。
KAGEX++プロジェクトで新規作成。プロジェクト名のフォルダは自動作成されるみたいなので、ゲームプロジェクトをまとめるprojフォルダを作成し、そこを場所に指定して作成する。
お、なんかずらーと出てきました。

とりあえず、デバッグ開始をする。
”こんにちは。”とだけ出力されて終了。

多分、startup.tjsに書かれているのかと思い、ツリー表示からダブルクリックで開く。
そうすると、これはコメントで”このスクリプトは一番最初に実行されるスクリプトです”と書かれている。
ゲーム起動時のスクリプトらしい。Emacsの.emacsとか、init.elみたいなものですね。

じゃあ、scenarioに書かれているのかと思いフォルダを開く。first.ksを発見。
開くと、”こんにちは。”表示を発見。これからいじっていけばよさそうですね。


ここで気づく。KAGEXの構文はなんとなくわかりましたが、通常の吉里吉里の構文とかを知らない。
[cm]とかなんだろう。こういうのはリファレンスに書いてあるはず。
面倒なので、KKDEのヘルプメニューを開いてみると、KAGリファレンス、TJSリファレンス、吉里吉里リファレンスの項目がありました。.ksってKAGスクリプトの拡張子だったっけ?とりあえずKAGリファレンスを見よう。

あ、チュートリアルがある。これをやっていきましょう。


【KAGチュートリアル編】
準備をしようの項目を見る。
すると、KKDEで新規作成した時に見覚えのあるずらーとしたフォルダ群の画像がありました。なるほど、ここはKKDEで標準でやってくれていそうな部分ですね。
KKDEでやらない場合は、吉里吉里SDKのtempleteにsampleがあってそれをコピーして使用するみたいです。
コピー後は、systemフォルダ内にあるConfig.~newをConfig.tjsに改名すると書いてある。KKDEのプロジェクトツリーのsystemフォルダを開く。
なんか一杯ファイルが入っている-!?とりあえずConfig.tjsが既にあったので、開く。すると、タイトルの設定とか画面サイズの設定とかがある。
まぁ、たくさんあるってことはわかったのでそれぐらいにしてチュートリアルに戻る。
続きを読むと、読み込める画像形式とか、プラグインの説明とかが書いてある。さっと流す程度にしないと時間がかかってしまうので、これぐらいで次にいこう。

文字を表示しようの項目を見る。
文字の表示方法は、サウンドノベル形式(かまいたちの夜とか)とヴィジュアルノベル形式(一般的なギャルゲーとか)、縦書き方式がある。デフォルトはヴィジュアルノベル形式らしい。
あれ?さっきのKKDEで作ったやつはサウンドノベル形式だったような…?Config.tjsが関係しているのかな?
で、クリック待ちと改行のやり方は、クリック待ちが[l]、改行が[r]。(lは小文字のL)
こう書く。

こんにちは。[l][r]

なるほど。
次に改ページ待ちをしてみる。
文字を一旦消去してまた左上から表示しはじめる方法ですね。
新しい行に[cm]と書いて、[cm]の前の文字には[p]と書き込む。

こんにちは。[l][r]
改ページしますよ。[p]
[cm]
改ページしました。

[cm]ってなんだろうと思ったら、ClearMessageの略っぽい?
さらにメッセージ消去に関して、備考に色々書いてある。メッセージを消去するのはer ct cmの3つがあるらしい。昔のチュートリアルではctを使っていたなど…
まぁ、セーブ/ロードのときに必要になるみたいなので今は無視しましょう。

タグについて。
角かっこ[ ]で囲まれたやつはタグだよ!というお話。HTMLのタグと同じで、属性が付けられるものだったりするみたい。これはタグリファレンスを参照すれば色々なタグを見れるらしい!楽しそう!
あと、マクロを使って既存のタグを組み合わせて新しいタグを作ったりできる。
次のコマンド行は、@の付いた行はタグと同様の動きをしますよってお話。…必要な理由がわからない。とりあえずスルーしよう。

特殊記号について。
ksファイルの特殊記号は、[(タグ)、;(コメント)、*(ラベル)、@(コマンド行)、タブ。
[を表示したい時には、[[と書く!
]は普通に書いていいらしい。
ここで文字を表示しようチュートリアル終了。

背景を表示しようチュートリアル。
これはKKDEいじりながらやってみよう。背景画像はbgimageフォルダに入れる。
こういうのってサンプル画像を持ってくるのが大変だったりする。素材を探すのにはまってしまい一日経っちゃったり…それはしないようにパッと決める。
今回は背景素材店(http://shass.sakura.ne.jp/)で入手。画像はproj\test\data\bgimageフォルダに入れる。
するとKKDEが自動的に読み込んで画像がプロジェクトに追加された。あら、便利。
早速タグを書く。

[image storage="a012" page="fore" layer="base"]

KKDEはVisualStudioを意識して作られているので、タグを書いている途中に自動候補も出てくるので、簡単に書ける。あら、便利。
そして、表示。とりあえず表示されましたが、Config.tjsの設定で画面が800x600だったので画像が合わなかったです。しかし、テストなので気にしない。

背景表示したら、レイヤの説明。
レイヤはサンプルなどで見たので、タグに書いた属性だけ気にすることに。
page属性は表ページか裏ページか(fore/back)で、layer属性は背景レイヤか前景レイヤか(base/0/1/2)を指定する。あとはわからなくなったらでいいでしょう。


前景を表示しようチュートリアル。
前景は、人物の立ちポーズなど、背景とメッセージの間に表示されるもの。
透過するためにカラーキーを決める。DirectXのテクスチャとかと同じですね。さらにPNGの透明色とかも扱える。
マスク画像でも切り抜くことが可能。マスク画像にはメイン画像のファイル名に_mをつけた名前にしておく。
さて、表示してみましょう。
画像が欲しい…これもどこからかサンプルとしてとってきましょうと思いましたが、面倒なので昔の自分の描いた絵を持ってくることにする。
画像は…前景だからfgimageに入れればいいのかな?
透明色にする部分は0xFF00FFの色にして、以下のタグを書く。

[image layer="0" page="fore" storage="haruka_100906_0043_small" visible="true" key="0xFF00FF" left=340 top=100]

できたー。


次はトランジションを使おうのチュートリアル。
吉里吉里にはフェードアウト、フェードインという概念がない。クロスフェードトランジションで再現できるから。
トランジション先は裏ページのレイヤ画像。トランジションする時には予め裏ページに描画しておく必要があるのね。
ユニバーサルトランジションは、汎用的な移り変わりという意味。画像切り替え効果が使える。
ユニバーサルトランジションでルール画像が必要になる。ルール画像はグレースケールで作る。
黒い色ほど移り変わりが早く、白い色ほど移り変わりが遅い?これは設定で変更できそうな気がする。
また、vagueというあいまい領域値を変更すると、切り替わりのときのルール画像の境界がいい感じにぼやけてくれる。
スクロールトランジションはスクロールする感じに表ページと裏ページを切り替えることができる。
stay属性を変えれば3種類にできる。stayfore、stayback、nostay。詳しくはチュートリアルを見てね!
裏のページを表ページと同じにするには、[backlay]タグ。その後、後ろのページの背景だけ切り替えておき、トランジションすると場所移動した感じになる。
トランジションは[wt]タグで待つ。
トランジションは[trans]タグを使う。早速サンプルを参考に切り替えてみる。

[完]
関連記事
スポンサーサイト

コメント

非公開コメント

プログラミング関連ブログ

ハッカーと同人作家

プログラミング関連雑多などは上記のブログにて。

twitter

プロフィール

ふぃなっぷ

Author:ふぃなっぷ
ふぃなっぷです。こんな名前だけど、男性です。
好きなことを楽しくやっていきます。同人ゲームを制作したり、本を書いたり。
同人を通じて成長していけたらなぁと思っています。

>∩( ・ω・)∩< テーレッテー
ζ*'ヮ')ζ∩< テッテッテー

ご意見、ご感想、お問い合わせはこちらからどうぞ

応援中

相州戦神館學園 万仙陣 応援中! Dies irae ~Amantes amentes~応援中!

ブロとも申請フォーム

QRコード

QRコード

FC2カウンター

エリア51

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。