今回から、実際に何か簡単なスペルカードを作っていきます。スペルカード作成の流れや、スペルカード作成に必要となる関数やノウハウを掴んでいきましょう。
それではいってみましょう。
今回からスペルカードを作っていくわけですが、いきなり知らないスペルを作ってもイメージが湧かないかと思います。というわけで、東方妖々夢の『人界剣「悟入幻想 -Easy-」』を作ってみましょう(妖々夢やってなかったらすみません)。とはいえ、完全に同じものを作るのは難しいので(挙動を詳しく解析するのが)、大体似た感じになるようにすることを目標にします。
先ずは、スペルカードを作ってるんだという気になるために、形から入ってみましょう。スペルカードというからには、あの「バウーン」という音が鳴って、スペル名が出てこないと嘘です。偽者です。スペルカードボーナスも必要ですし、制限時間も必要です。これらが無ければ、「スペルカードを作ってる!」という気にならないかと思います。というわけで、これらを設定してみましょう。
では、次のプログラムを見てください。
#東方弾幕風 #Title[人界剣「悟入幻想 -Easy-」] #Text[妖々夢5面:妖夢スペルのクローン] #ScriptVersion[2] script_enemy_main { let name = "人界剣「悟入幻想 -Easy-」"; let imgBoss = "script\img\ExRumia.png"; // 初期位置 let xIni = GetClipMaxX - 32; let yIni = GetClipMaxY - 32; @Initialize { CutIn(YOUMU, name, "", 0, 0, 0, 0); SetLife(2000); SetTimer(66); SetScore(4000000); LoadGraphic(imgBoss); SetTexture(imgBoss); setGraphicStop; TMain; } @MainLoop { SetCollisionA(GetX, GetY, 32); SetCollisionB(GetX, GetY, 16); yield; } @DrawLoop { DrawGraphic(GetX, GetY); } @Finalize { DeleteGraphic(imgBoss); } // メインタスク task TMain { yield; standBy; // 後でここに処理を追加する setGraphicStop; } // 初期位置へ移動 sub standBy { let wIni = 120; SetMovePosition02(xIni, yIni, wIni); setGraphicMove; wait(wIni); } // グラフィックの設定 sub setGraphicStop { SetGraphicRect( 0, 0, 64, 64); } sub setGraphicPose { SetGraphicRect( 64, 0, 128, 64); } sub setGraphicLeft { SetGraphicRect(128, 0, 192, 64); } sub setGraphicRight { SetGraphicRect(192, 0, 256, 64); } sub setGraphicMove { if(GetSpeedX < 0) { setGraphicLeft; } else { setGraphicRight; } } // w フレームだけ待つ function wait(w) { loop(w) { yield; } } }
スペルカード宣言を行い、ボスが画面右下へと登場するだけのプログラムです。大枠は前回までと同じですが、いくつかの処理が新しい関数やサブルーチンで置きなおされています。初期位置に移動するサブルーチン standBy
、ボスキャラのグラフィックを設定するサブルーチン setGraphic〜
、X 方向の移動方向によりボスキャラのグラフィックを変更するサブルーチン setGraphicMove
、そして、指定回数だけ yield
する関数 wait
です。今まで直に書いていたのを、単に関数やサブルーチンにしただけですね。
ほとんど前回までと同じということが分かったところで、@Initialize
を見てください。何やら見慣れない関数があると思います。CutIn
, SetTimer
, そして SetScore
です。これらが何を意味するかは、関数名の通りです。
先ず、CutIn
はカットインを表示する関数です。カットインの種類(紅魔郷風(KOUMA
)か妖々夢風(YOUMU
)を選択)、スペル名、そしてカットインのグラフィックのパスと表示領域を指定します。今回はカットイングラフィックを使わないので、パスを空にしています。
次に、SetTimer
は制限時間を指定する関数です。
最後に、SetScore
は敵の得点を指定する関数です。スペルカードの場合は、スペルカードボーナスに相当します。これを指定しないと、CutIn
を指定してもスペルカードが発動したとはみなされません。
ただし、ここにある点数がそのまま得られるわけではありません。画面左下に Rate というのが書いてありますが、敵の得点に左側に書いてある数値を掛けた値がスペルカードボーナスとして得られます(スペルカード取得時にレートが2上がるので、実際には(撃破前のレート+2)を掛けた値がスペルカードボーナスになります)。レートはプレイ状況により上下します。レートをできるだけ上げると、スペルカードボーナスが多く得られるという仕組みになっています。
では、これで実行してみて下さい。「バウーン」という音とともに、スペル名が表示されたと思います。また、ボスの周りに輪っかが表示されていますが、これは時間が経つとともに小さくなります。つまり、制限時間を表しているわけです。オリジナルの東方と同じですね。
今回はスペルカード宣言するだけでした。次回は敵を色々と移動させてみましょう。