タイトルロゴ
同人ゲーム制作を語らうゆっくりとしたメディア

すろ〜ふ〜ど
HowTo企画

『吉里吉里いったっきり 』



今回挑戦するのは「システムを作り上げてみよう」です。
紆余曲折を経て、吉里吉里/KAG3によるゲーム作りを始めたド素人のふたり。
いよいよ、実際に動くゲームを作ろうとしていますが……。

今回もまた、説明用に画像を多く使用しております。




夏海 さてさて、
この前書いたシナリオは読んでいただけましたかね?
CGの用意もバッチリですよね?


鯱丸 ん。あー……

ま、まぁ、とりあえずゲームの形を作っていくことにしましょうよ!


夏海 え、ゲームの形ってなんですか?
鯱丸 料理が出来上がったとしても、そこにその料理を盛り付けるお皿、すなわち器が無くては料理を食べる事はかないませぬ。器無き料理などまさに無意味愚の骨頂!
まずは料理を成す前にその器を用意するが肝要かと。
夏海 ……???(数時間考え中)
あ、システム周りをどうにかしよーと、まあそういうことですね?!

鯱丸 そうです! その通り!
やっぱアレですよ。タイトル画面とかメニュー画面とかね。そういうのがまずあった方が何となしに盛り上がるじゃあないっすか。

夏海 うんうん、あとCGモードとか、起動したときにサークルのロゴがでるやつ!
鯱丸 そうそう。
では実際の作業に入る前に、シナリオファイルを行いたい処理ごと分割しておきましょうかね。



first.ks   最初に読み込まれるファイル
menu.ks   タイトル画面や、メニュー画面の動作が書かれているファイル
cg_mode.ks  CGモードの動作が書かれているファイル
1.ks     シナリオ本文が書かれているファイル



夏海 そうですねえ。
では、first.ksが最初に読み込まれるので、そこからメニュー画面(menu.ksにイロイロ記述)にジャンプするようにして、さらにメニュー画面からシナリオ本文(1.ks)やCGモード(cg_mode.ks)にジャンプさせる、という感じで。


シナリオの流れ

鯱丸 それでは、起動したときにサークルのロゴがでるやつとやらから作っていきましょうかね!



■第一章「メニュー画面を作る!」■

夏海 では、サークルのロゴを用意しましたよー。
pngで、こんなんです。



サークルロゴpresents.png

鯱丸 ほうほう。ではこれをimageフォルダあたりに放り込んでー、
それではこのサークルロゴを表示させる所からはじめてみましょうかね。
これはmenu.ksの最初の方に書きましょうか。
エエト……(固まる)
夏海 また前回やったことを忘れましたね!
画像を呼び出すタグはこれですよ。

前景を表示する(マスク画像を使う場合)
[image layer=0 page=fore storage="画像ファイル名" visible=true left=340 top=100]

背景を表示する
[image storage="画像ファイル名" page=fore layer=base]

トランジションを使う(ルール画像を使って背景を切り替える場合)
[backlay]
[image storage="画像ファイル名" layer=base page=back]
[trans method=universal rule="ルール画像名" vague=1 time=1500]
[wt]


夏海 ……と、おさらいしたところで。
まずはfirst.ksからmenu.ksにジャンプする命令を書きますか。

[jump storage="menu.ks"]

夏海 first.ksはmenu.ksにジャンプするだけなので、上書き保存だけしたら、あとはいじらなくておっけー。

[jump storage="○○.ks"] これの○○はジャンプさせたい先のファイル名です。
ちなみにファイル中の、特定の場所にジャンプさせるときは targetでジャンプ先の『ラベル』を指定するのです。
こんなかんじ。

[jump storage="○○.ks" target="□□(ラベル名)"]


鯱丸 そういえばラベルってなんですかい?
夏海 文字通り、見出しみたいなものですよ。
シナリオファイルのある箇所にラベル名を記述しておくと、いろいろな処理の中でそのラベルの箇所にジャンプすることができるのです。
「ラベル名□□にジャンプする」とか「こんな条件が整っているときはシナリオファイル○○のラベル名□□にジャンプする」といったことができるのですよ。
ラベル名の定義の仕方は
*□□(ラベル名)
と記述することによってできます。
あと、セーブ/ロードにも関係しているんですが、それはまた後で説明しましょう。
鯱丸 ふむふむ、なるほど。
んじゃあ、早速ラベル名を付けて、menu.ksを記述してみますかね。
ラベル名は*menu_start でいいかな。
「サークルロゴを表示する」ために、こんな感じでー……。 ぱちぱちっとな。

*menu_start

[backlay]
[image storage="presents" layer=base page=back]
[trans method=crossfade time=1000]
[wt]
[s]

鯱丸 と、これでサークルロゴが……ってオヤ?
画面が暗いっすよ! ディスプレイ壊れたかな、ガタンガタン(ディスプレイを揺すってる)


サークルロゴ

夏海 違います! メッセージレイヤーがロゴの手前に表示されているからですよ!
鯱丸 ああ、な、なるほど。
では、このメッセージウィンドウを表示させないような命令を付ければいいんですな?
あこれかな?
[position]ってやつ。
これにvisibleの属性でfalseを指定してやればいいんですね。
夏海 む? [layopt]っていうタグでもメッセージレイヤーを消せるみたいですね。
こっちはメッセージレイヤーだけじゃなくて前景とか背景とかのレイヤも色々いじれるみたいです。
鯱丸 まぁ、[position]タグの方はメッセージレイヤ専門の命令みたいなんで、こっちにしときましょう。


*menu_start

[position visible=false]

[backlay]
[image storage="presents" layer=base page=back]
[trans method=crossfade time=1000]
[wt]

[s]

鯱丸 おおっ! 今度はちゃんとサークルロゴが表示されました!
サークルロゴ

夏海 では次に、メニュー画面を作りましょうか。
鯱丸 ほいほい。メニュー画面はね、もう作ってるんですよ。
これです。これ。


メニュー画面mtitle.bmp

夏海 妙に楽しそうですねえ……
鯱丸 ふふふ。これをですね。
前回勉強したトランジションを使ってですね。


ルール画像t_rule.bmp



*menu_start

[position visible=false]

[backlay]
[image storage="presents" layer=base page=back]
[trans method=crossfade time=1000]
[wt]

[wait time=2000]

[backlay]
[image storage="black" layer=base page=back]
[trans method=crossfade time=700]
[wt]

[backlay]
[image storage="mtitle" layer=base page=back]
[trans method=universal rule="t_rule" time=500]
[wt]

[s]

鯱丸 こんなかんじで!


夏海 うぉー、ますますゲームっぽくなってきやがった!
鯱丸 エエト、ちなみに
[wait time=2000]
と入ってるのはサークルロゴを表示させてその間2秒ほどウェイトを取る命令なんですな。
あと途中で、
[image storage="black" layer=base page=back]
とあるのは、吉里吉里ってのはフェードアウトさせる命令が無いので、フェードアウト代わりに真っ黒な画像を表示させるようにしてるんですね。
真っ黒画面はbgimageフォルダにblack.jpgって名前をつけて放り込んでおきました。
夏海 おや、仕事が速いですねえ。
(カチカチ)……あれ、クリックしても何も起こらないじゃないですか、壊れちゃったのかなー!?
カチカチカチカチ……
鯱丸 当たり前ですよ。まだクリッカブルマップの設定をしてないんですから。
夏海 クリッカブルマップぅ〜?
ああ、チュートリアルの「クリッカブルマップを使おう」に書いてあるやつですね。
鯱丸 クリッカブルマップを使うためには、「領域画像」「領域アクション定義ファイル」と本体の画像が必要になります。
夏海 んじゃ、まずは「領域画像」を用意しましょうか。
ええと、これは256色の画像じゃないといけないようですね。
チュートリアルには「パレットインデックス」を扱えるソフトで画像を作成しろって書いてありますが……パレットインデックスとはなんぞや。
単に「256色の画像として保存」とかじゃだめってことなんですか?
鯱丸 そうですねー。
ええと例えばこの画像……


領域画像mtitle_p.png

鯱丸 これがmtitle.bmpに対応させた領域画像なんですが、勿論これは256色のパレットモードで保存されてるんですね。
赤色が「スタート」
緑色が「CGモード」
黄色が「終了」
に対応しています。
夏海 ふむふむ?
鯱丸 で、ここで問題なのはこの赤色とか緑色とかがパレットの中の何番目の色を使っているか? って事なんですよ。
例えばこのmtitle_p.pngの中にはですね、こういうパレットが設定されているんですが、


パレット

鯱丸
このパレットの左上をパレット番号が0、その右隣の赤が1、さらにその隣の緑が2と、ずらーっと256色分並んでるわけです。
で、この番号の何番を使ったか? ってのがまぁ重要になってくるんですね。
夏海 なるほど、画像の中にパレットというモノが含まれていて、パレット番号というのはどの色がパレットの何番なのかっていう情報のこと……ってことですかね。
鯱丸 まぁそんなかんじですね。
とにかく、どこで使った色が何番なのかをメモっておく事。
あと、クリッカブルさせない部分は番号0番で塗りつぶしておく事。
この二点をとりあえず押さえておけばいいと思います。
夏海 ふんふん。
じゃあ作った画像を保存っと……おっとっと、チュートリアルによると、クリッカブルマップを使う元画像の名前「○○.***」だったら_pを付け加えて「○○_p.***」にしなければならないとのこと。pはパレットのpですかね〜……
わたし達のはメニュー画面が「mtitle.bmp」なので領域画像は「mtitle_p.png」で保存しますっと。

で。次は「領域アクション定義ファイル」を作るわけですが……
「領域アクション定義ファイル」では、パレット番号の何番の領域をクリックしたらどんなアクションを返すかを定義するっちゅうことですね!

鯱丸 その通り!
テキストファイルに、

1:storage="menu.ks";target="*game_s";
2:storage="menu.ks";target="*cgmode_s";
3:storage="menu.ks";target="*all_exit";

鯱丸 と書いて、保存します。
領域アクション定義ファイルは、「本体画像のファイルネーム『.ma(拡張子)』」ってかんじで名前を付けますので、
mtitle.maというファイルネームになりますだ。
では中身の説明をしてみましょうー。

「1:storage="menu.ks";target="*game_s";」

鯱丸 まず、最初の「1」ってのはパレット番号です。
領域画像で使ったパレット番号を指定します。
次の「storage="menu.ks"」は、クリックしたら飛ぶ先のシナリオファイルの指定ですね。そして最後の「target="*game_s"」は、menu.ksの中に書かれた飛ぶ先のラベル名です。
夏海 んー??
書かれたタグについてはわかるんですが、そういえば「ここでクリッカブルマップを使うよ」とかって、menu.ksの中で宣言とかしなくていいんでしょうか。
鯱丸 特に「ここからクリッカブルマップですよー」と宣言しなくても、元画像を画面に表示するだけで、プログラムが勝手に領域画像と領域アクション定義ファイルを使ってクリッカブルマップにしてくれるのですよ! すげー。
勿論、ちゃんとさっき言ったようなファイル名をちゃんとつけないと駄目ですけどね。
夏海 まぁ一応、元画像に由来したファイルネームじゃなくても、領域画像や領域アクション定義ファイルを個別に指定する事もできるみたいですね。
まぁこの講座ではそこらへんはまるっとスルーです。
詳しく知りたい人はKAG3ヘルプのタグリファレンスを読んでみてください。
鯱丸 で、ここで重要なのは、元画像を表示した後に、[s]というタグを入れておくことです。
夏海 入れないとどうなっちゃうんですか?
鯱丸 [s]ってのはそこで処理を一旦ストップするみたいな意味なんですね。
なのでそこでストップさせないとその後の記述された関係ない命令なんかを実行してしまうのでこれは忘れないようにしましょう。
夏海 おお、それは恐ろしや。
鯱丸 では、クリッカブルマップをクリックした後の処理をmenu.ksに書き加えていきます。
まずはスタートから。
夏海 これはmtitle.maにて定義した
1:storage="menu.ks";target="*game_s";
ラベル名 *game_s の中身を書くってことですね。

鯱丸 そうです。さて、ここでやらなくちゃいけないのは、
1.まず画面を暗くする。
2.メッセージレイヤを非表示から表示状態に戻す。
3.シナリオ本文のファイル「1.ks」に飛ぶ。

こんな所でしょうか。
夏海 ふんふん。

*game_s
[backlay]
[image storage="black" layer=base page=back]
[trans method=universal rule="t_rule02" time=500]
[wt]
[position visible=true]
[jump storage="1.ks"]

鯱丸 まず最初の
1.まず画面を暗くする。
って所は

[backlay]
[image storage="black" layer=base page=back]
[trans method=universal rule="t_rule02" time=500]
[wt]

鯱丸 ってやつですね。
これはもう何回もやった画像表示のやり方そのままです。
格好よくするためトランジションのルール画像を使ってます。

鯱丸 2.メッセージレイヤを非表示から表示状態に戻す。
[position visible=true]
サークルロゴを表示する際にfalseにした、[position]タグの属性visibleをtrueに設定するだけです。
簡単ですね〜〜。

鯱丸 3.シナリオ本文のファイル「1.ks」に飛ぶ。
[jump storage="1.ks"]
これもさっきやったやつですね。
1.ksにジャンプします。

だいたい今までやってきた命令で処理を済ませる事が出来ました。
吉里吉里はこういう所が簡単で使いやすいですね。
夏海 じゃあ、次。CGモードに飛ばすには?
鯱丸 mtitle.maで定義した
2:storage="menu.ks";target="*cgmode_s";
ですね。
CGモードの処理は別のファイルcg_mode.ksでやるのでここではcg_mode.ksに飛ばすだけです。

*cgmode_s
[jump storage="cg_mode.ks"]


鯱丸 としておきましょう。
あと、ついでだから「終了」の処理も。
mtitle.maの
3:storage="menu.ks";target="*all_exit";
です。

*all_exit
[close]
[image storage="mtitle" layer=base page=fore]
[s]

鯱丸 [close]のタグででゲームを終了させる事ができます。
で終了する時に本当に終了するかどうかのダイアログが出るので、その後の「いいえ」を押した時の処理が次の行の、
[image storage="mtitle" layer=base page=fore]
[s]
になります。
夏海 ふーん、もういっぺん画像を表示させるんですねえ。
mtitleってやつをまた表示させるんですか?
鯱丸 うーん。
いや、最初はただ[s]かけるとかクリッカブルで飛ぶ前に戻るとか考えてたんですけど、どうやらクリッカブルで飛んだ後はクリッカブルマップは解消されちゃうみたいなんですね。
なので、もう一度ここで画像を呼び出して[s]でストップをかけたのです。
画像は一瞬で同じものが出てくるから再呼び出ししたとは気づかないでしょ?
夏海 ん〜〜〜……まあよくわかんないけど、実行してそうなるのならそうなんでしょう。
まあとにかくそういうことで!
鯱丸 もしかしたらもっといい方法があるかもしれないので、その時はその方法も色々試してみてくださいね!
つーことで!



■第二章「CGモードを作る!」■

夏海 んじゃ次はCGモードを作りたいです。
鯱丸 ではまず、CGモードではどういう動作をさせたいのかを考えていきますよ!
夏海 ・見たCGはサムネイルが表示される
・サムネイルをクリックすると大きいCGが表示される
・もう一回クリックするとCGモードの画面に戻る
・まだ見ていないCGは代替のサムネが表示される


こんな所ですかね。

鯱丸 なるほどなるほど。
ではエエト、まずはフラグの上げ下げを行う、「変数」の話からやっていきましょうかね。
夏海 へ、変数ぅ……
確か、なんか方程式の「X」とか「Y」みたいなやつですよね。
あと、箱みたいに数を代入して、ごにょごにょ……(語尾が小さくなってる)
鯱丸 そうそう、変数ってのはよく箱にたとえられますよね。
数字や文字を入れておく為の便利な「箱」と覚えておけばよいかと。
夏海 ふんふん。
鯱丸 本文シナリオでイベントCGを表示させた時に、変数に例えば数値の「1」を代入しておけば、CGモードでそれを判断して閲覧できるかどうかを決めるワケです。
夏海 じゃあ、CGモードに入ったときに「CG○番を見た」という変数に「1」が入っていればそのCGを表示して、入っていなければ何もしない、という感じでしょうか。

言い換えるとフラグの上げ下げみたいな……

鯱丸 そうですね。ズバリそういう事です。
更にこの変数同士を足し算したりとかして色々な事ができたりするんですが今回は色々な都合でパスです。
ではヘルプの「変数を使おう」を読みながら変数を理解していきましょう〜
夏海 じゃあ、実際にCGのフラグを立てる(変数を使う)にはどうすりゃいいんですか?
鯱丸 シナリオ中にタグを入れてあげてばいいんですよ。
まずは何か適当な名前を付けてみてください。
夏海 じゃあイベントCGのファイルネームをev01.jpgとして、それを見たときに立つフラグだからcg01がいいな。
鯱丸 お〜っとっとっと。
言い忘れる所でした。
KAGで扱う変数には3つの種類があります。
ゲーム変数、システム変数、一時変数ですね。
それぞれどう違うのかはヘルプなりを見てもらうとしてですね、
今回のCGモードに使う変数はシステム変数を使います。
システム変数は栞のセーブ・ロードとは関係なしに、常に値を保持できるので本文シナリオの外で使うCGモードのフラグには都合がいいんですね。
変数をシステム変数として扱うのは、変数名の頭に「sf.」を付ければいいだけです。

夏海 じゃあ、CGのファイルネームとフラグに付ける名前を共通にすれば管理がしやすいかな。
ファイルネームがev02.jpgならsf.cg02.jpgって感じで。
イベントCGは全部で5枚ぐらいですよねー、しゃちさん。

鯱丸 う?
あー、えー、
とにかく、sf.cg01から、sf.cg05って事で。
この五つの変数、フラグの上げ下げを入れるための箱を作りましょう。
夏海 作るって、どう作ればいいのです?
新たにファイルを作ったりしなきゃならないんでしょうか。
鯱丸 ああ、作るっていったってシナリオの中でタグを使って数値なりを代入するだけでいいんですよ。


[eval exp="sf.cg01=1"]

鯱丸 これで、sf.cg01という変数に数値の「1」が代入された事になります。
このタグを本文シナリオ中にイベントCGが表示されると同時に書き込んでやればいいわけです。
夏海 なるほど、簡単ですね。
鯱丸 でしょ?
では、仮のシナリオ本文ファイル、1.ksを用意しまして、中に以下のスクリプトを書いて保存しましょう。

[cm]
[backlay]
[image storage="ev01" layer=base page=back]
[trans method=crossfade time=500]
[wt]
[eval exp="sf.cg01=1"]
イベントCGその1です。[p]
[cm]
[backlay]
[image storage="ev02" layer=base page=back]
[trans method=crossfade time=500]
[wt]
[eval exp="sf.cg02=1"]
イベントCGその2です。[p]
[cm]
[backlay]
[image storage="ev03" layer=base page=back]
[trans method=crossfade time=500]
[wt]
[eval exp="sf.cg03=1"]
イベントCGその3です。[p]
[cm]
[backlay]
[image storage="ev04" layer=base page=back]
[trans method=crossfade time=500]
[wt]
[eval exp="sf.cg04=1"]
イベントCGその4です。[p]
[cm]
[backlay]
[image storage="ev05" layer=base page=back]
[trans method=crossfade time=500]
[wt]
[eval exp="sf.cg05=1"]
イベントCGその5です。[p]
[cm]
[backlay]
[image storage="black" layer=base page=back]
[trans method=crossfade time=500]
[wt]
[jump storage="menu.ks"]



【イベントCG1〜5(仮)】
イベントCG

夏海 ……なんでこれ、全部、仮のCGなんですか?
鯱丸 さーて、ではお待ちかねのCGモードに入りますよ!
まずはCGモードの画像素材を見てみましょう。


CGモードcg_mode.bmp

夏海 って聞いてますか!? ……まあ後で問いつめよう。
ほほー。このCGモードの5つある枠にCGのサムネが表示されるわけですね。
……あ、ぴーんと来ましたよ。
このサムネをクリックして大きいCGを表示したり、「メニュー画面に戻る」のところでさっきやったクリッカブルマップを使用するってことですね!
鯱丸 そうです。
その為にも、また領域画像「cg_mode_p.png」と、領域アクション定義ファイル「cg_mode.ma」を用意しますよー。

夏海 はいはーい。
さっきのようにパレットカラーってやつですね。
それでもって、領域画像の名前をcg_mode_p.pngにして作成。
領域アクション定義ファイルを「cg_mode.ma」にして作成し、

1:storage="cg_mode.ks";target="*evcg01";
(以下略)
として、各サムネイルをクリックしたらどのCGを表示させるか定義していく、と。


CGモード領域画像cg_mode_p.png

鯱丸 そうなんですが、今回はちょっと違います。

今回は、イベントCGを見ていなかったらサムネイルをクリックしてもイベントCGに飛べなかったりする仕掛けを入れないといけないので……

1:if(sf.ev01==1){storage="cg_mode.ks";target="*evcg01";}

鯱丸 このように記述します。

これは「if(sf.ev01==1)」の条件、変数「sf.ev01」の値が「1」であればその後の{……}の中身を実行するという命令なんですね。
夏海 ふむふむ……(リファレンスを見てる)
あれ、なんかKAGでのif文の書き方とは違ってるようですが?
鯱丸 そうなんですねー。
まぁ、何かここ説明すると長くなりすぎるので割愛しますね。とにかくこの領域アクション定義ファイル中では上記のように書いてください。
まぁ暇な人は何でこうなるのかを調べてみてもイイカモです。
夏海 ふむー、まあ動くのなら結果オーライってことで……
鯱丸 うむ。
であと「メニュー画面に戻る」用に、「6:storage="cg_mode.ks";target="*back";
」を書いておきましょう。
これは単純にクリックされたら「cg_mode.ks」のラベル「*back」に飛ぶって意味ですね。

1:if(sf.cg01==1){storage="cg_mode.ks";target="*evcg01";}
2:if(sf.cg02==1){storage="cg_mode.ks";target="*evcg02";}
3:if(sf.cg03==1){storage="cg_mode.ks";target="*evcg03";}
4:if(sf.cg04==1){storage="cg_mode.ks";target="*evcg04";}
5:if(sf.cg05==1){storage="cg_mode.ks";target="*evcg05";}
6:storage="cg_mode.ks";target="*back";

夏海 これを忘れないようにしないとあとで大変ですからね〜。
鯱丸 さーて、ここまでがCGモードに入る為の準備で、ここから本番ですよー。
夏海 え、一仕事終えたようなつもりでいたのですが!
今度は何をすればいいんですか?
鯱丸 うむ。プログラムとかスクリプトってのはこういう「面倒くさい」の積み重ねなんですよ。イヤ本当。
さて、とりあえずcg_mode.ksにさっきのcg_mode.bmpってCGを表示させてみましょうー。

*cg_mode_start
[backlay]
[image storage="cg_mode" layer=base page=back]
[trans method=crossfade time=500]
[wt]
[s]



CGモード

夏海 あれ、これイベントCGのサムネイルがが隠れてませんよー?
鯱丸 そうなんですねー。これだけでは見た、見ないに関わらずサムネイルの絵が表示されてしまいますよね?
まぁそういう絵をただ表示させているだけなので当然ちゃ当然なんですが。
さて、ここでこのサムネを隠しちゃう為に[pimage]タグと「cond」を使う事にします。
夏海 ほー。
使い方を教えてください!
鯱丸 まず、[pimage]っていうタグは、すでに表示されているレイヤに後付けでCGを貼り付ける事の出来る命令なんですね。
夏海 ???
表示している絵(この場合cg_mode.jpg)と入れかわっちゃったりしちゃいませんか?
鯱丸 そう、普通の[image]タグだとそうなっちゃいますね。しかし[pimage]タグは、現在そのレイヤに表示されているCGの上に上書きで、そうまるでシールでも貼り付けるみたいな感覚で絵を表示させる事が出来るんですね。で、そのシールでサムネを隠しちゃおうとそういうワケで。
夏海 へー、単純に重なってしまうってことですか。
鯱丸 まぁ、習うより慣れろって事で実際にやってみれば分かると思いますよ。
まず、
たとえばno_img01.bmpからno_img05.bmpというサムネイルを隠す用のCGを用意してですね。


【CGモードの『シール』】
CGモードシール

鯱丸 これを[pimage storage="no_img01" layer=base page=back dx=8 dy=70]ってかんじで貼り付けていきます。

ちなみにdx=8 dy=70がそれぞれx軸、y軸の座標を指します。
x軸8pixで、y軸70pixの位置にno_img01を貼り付けろって意味ですね。
ああちなみに、no_img01の左上の部分がx軸8pixで、y軸70pixの位置にくるって事です。

夏海 えーとえーと。
つまり、いまベースレイヤに表示しているcg_mode.bmpのこれこれこういう位置にno_img01を貼り付けなさい、ということですか。
x軸、y軸ってのはゲームのウィンドウの左隅からの距離ってことでいいですよね。
鯱丸 そうですそうです。

*cg_mode_start
[backlay]
[image storage="cg_mode" layer=base page=back]
[pimage storage="no_img01" layer=base page=back dx=8 dy=70]
[pimage storage="no_img02" layer=base page=back dx=221 dy=70]
[pimage storage="no_img03" layer=base page=back dx=432 dy=70]
[pimage storage="no_img04" layer=base page=back dx=8 dy=241]
[pimage storage="no_img05" layer=base page=back dx=221 dy=241]
[trans method=crossfade time=500]
[wt]
[s]

夏海 ではこれで起動してみます。
……うわー!
今度は見たはずのCGも隠されちゃってます!


CGモード

鯱丸 そこで!
次は「cond」っていう属性を使うのです!



夏海 ど、どう使うんですか?
鯱丸 これはですね。さっきのif文と同じように、条件式によってそのタグを実行するかしないかを分岐する事ができるモノなんですねー。
例えばこのように使います。

[pimage storage="no_img01" layer=base page=back dx=8 dy=70 cond="sf.cg01==0"]

鯱丸 「cond="sf.cg01==0"」ってのをタグの中に入れて使うのです。
これだと変数「sf.cg01」が「0」ならば、このタグ(今回の場合だと[pimage storage="no_img01" layer=base page=back dx=8 dy=70])を実行する。という意味です。
つまり、フラグが立っていなければno_img01という画像のシールを貼ってサムネイルを隠しちゃえとそういう命令なのです。

*cg_mode_start
[backlay]
[image storage="cg_mode" layer=base page=back]
[pimage storage="no_img01" layer=base page=back dx=8 dy=70 cond="sf.cg01==0"]
[pimage storage="no_img02" layer=base page=back dx=221 dy=70 cond="sf.cg02==0"]
[pimage storage="no_img03" layer=base page=back dx=432 dy=70 cond="sf.cg03==0"]
[pimage storage="no_img04" layer=base page=back dx=8 dy=241 cond="sf.cg04==0"]
[pimage storage="no_img05" layer=base page=back dx=221 dy=241 cond="sf.cg05==0"]
[trans method=crossfade time=500]
[wt]
[s]

夏海 んーとでは、シナリオを実行して、CGの1と2を表示したところでいったんCGモードまで戻ってきました。
……おお、ちゃんとCGの1番と2番のところだけサムネが表示されました!


CGモード

鯱丸 おっと、まだ開いたサムネはクリックしないでくださいね。
クリックした後の処理をまだ書いてないので強制終了しちゃいますから。
夏海 あぶない、クリックしてしまうところでした。
鯱丸 では、続けてクリックした後の処理に入りましょう。
ここまで来ればあとは今までやってきた事の応用ですよ。

まずはEV01のサムネをクリックした時の処理。
cg_mode.maに
1:if(sf.cg01==1){storage="cg_mode.ks";target="*evcg01";}
とある部分ですね。


*evcg01
[backlay]
[image storage="ev01" layer=base page=back]
[trans method=crossfade time=500]
[wt]
[waitclick]
[jump target="*cg_mode_start"]

夏海 [waitclick]
これ、まだ見たことのないタグですよ。
どういうものなんですか?
鯱丸 これはですね、プレイヤーのクリックを待つタグですね。
これを挿入すれば処理がここで一旦止まります。
でクリックが検知されると次の処理に移るのです。
今回の場合だと、まず最初にev01を表示して[waitclick]でクリックが検知されるまで待つ。
んでクリックされたら「*cg_mode_start」というラベルに飛ぶ。という処理が実行されるワケです。
夏海 なるほど、クリックしなければそのまま何もせずに待機しているってことですね。
鯱丸 はい。
ではこれと同じようなのをev02からev05まで作りまして……
で最後に、「メニュー画面に戻る」を押された時の処理を書きます。

*back
[backlay]
[image storage="mtitle" layer=base page=back]
[trans method=universal rule="t_rule" time=500]
[wt]
[s]

夏海 タイトルのページを表示させるってことですね。
鯱丸 まあそんなかんじですね。
タイトルっつーか、メニュー画面を表示させてそこでまたメニューのクリッカブルマップをやってるわけですね。
夏海 ふむふむ。
夏海 これでどうにかシステム関係は一通り揃った感じですかね。

……ところで、仮じゃないCGを見たいんですけど。
鯱丸
夏海 ? じゃねえよ。
鯱丸 ????
夏海 ヤクザキック!
鯱丸 ギャー!!
スミマセンスミマセン!
いやー、メニューとかCGモードとか作りこんでたら何かハマっちゃいましてねぇ。
チマチマダラダラやってたら何か時間が無くなっちゃいました。
光陰矢のごとし、心頭滅却すればまた火も涼し、ボーイズビーアンビシャス。かくして牛若丸は海越えて大陸へ渡りジンギスカンとなるのでありました。ってぐあいに描いてませんエエ。
夏海 さわやかに言うな!
あんなに頑張って書いたのに、絶望したわ!
ばしっばしっ
鯱丸 ギャワー!!!!
かっ描きます、来週までにはかならず、ギョワーーーー!!!!!



今回の挑戦の産物


実行ファイル(ZIP形式 2.75MB 解凍後 4.88MB)
ソースファイル(ZIP形式 1.43MB 解凍後 2.99MB)

今回の挑戦で「メニュー画面」「CGモード」までを組み込んだサンプルです。
「実行ファイル」は実際の動作を確認できます。
「ソースファイル」は今回スクリプトを組んだシナリオファイル等が入っていますので、今回の挑戦記事と合わせてどうぞ。


片方が暴力的ないったっきりコンビですが、次はゲーム本編のシナリオスクリプトを組んで、ゲームを完成させます。
では、あたふたしながらまた来週!


文責:漣 夏海&銛 鯱丸(グリーンティミルク。)

第一回目に戻る
第二回目に戻る
第四回目に戻る

− 戻る −


inserted by FC2 system