第22回 波符「赤眼催眠マインドシェイカー」 Easy (4)

これ以上何を手を加える必要があるのかと思われるかもしれませんが、最後の仕上げにもう少し手を加えたいと思います。

要旨

それではいってみましょう。

独自の弾画像

さて、前回まででほとんど元スペルと変わりがないくらいの状態になったのですが、1点だけ相変わらず大幅に違う部分があります。それは、弾の画像です。一応大きさは近い弾を選んではいますが、あの銃弾型(え? 坐薬型?)の弾画像を使いたいところです。

ですが、東方弾幕風では銃弾型の弾画像は用意されていません。これには、新作で新しい弾が追加されるたびに無闇に仕様を拡張するのは良くないという考えがあるようです。そこで、代わりにスクリプト側で新しい弾画像を指定することができるようになっています。

先ずは画像が必要になります。画像はちょこちょこと作ってみました。

図 1. shot_pellet.png
図 1. shot_pellet.png

透明にしたい部分は真っ黒にしておきます。こういった画像の縦と横のピクセル数は、2 の累乗にした方が効率がいいようです。ここでは縦が 16( = 24)ピクセルで、横が 64( = 26)ピクセルになっています。

見れば分かると思いますが、1つの画像にいくつも弾の画像があります。そのため、この画像を弾にして扱う...ということではなく、この画像の一部分を1つの弾画像として扱うことになります。その情報は、スクリプトとは別のファイルとして作成しておく必要があります。

弾画像用の設定ファイルは、例えば次のようになります。

#UserShotData

ShotImage = ".\img\shot_pellet.png"

ShotData {
    id   = 1
    rect = (0, 0, 8, 16)
}

ShotData {
    id   = 6
    rect = (40, 0, 48, 16)
}

順番に見ていきましょう。

先ず 1 行目には、#UserShotData というものを書きます。これは、弾幕風スクリプトの先頭に #東方弾幕風 と書くのと同じようなことです。

次に、画像ファイルのパスを書きます。

弾画像用の設定ファイルは、例えば次のようになります。

ShotImage = ".\img\shot_pellet.png"

ShotImage というものに、弾画像のパスを代入します。ここで、この設定ファイルでは文の最後にセミコロンは付けないことに気をつけてください。

そして、後は弾の情報を羅列していくだけです。弾の情報は ShotData の後の { } の中に書きます。弾の情報は弾ごとに書きます。

ShotData {
    id   = 1
    rect = (0, 0, 8, 16)
}

id というのは、弾の ID です。弾の種類を、今までは WHITE01 だとか BLUE11 だとか使っていました。自分で作った弾を使いたい場合は、その代わりに弾 ID を直接指定します。例えば、この弾を使いたい場合は

CreateShot01(x, y, v, angle, 1, delay);

のようにします。

rect というのは、ShotImage の画像のうち、どの部分をその弾の画像とするかを指定するものです。(0, 0, 8, 16) とすれば、(0, 0) から (8, 16) までの画像が使われます。ここで注意することは、(8, 16) にあるピクセルは含まれないことです。(8, 16) の直前までが使われるのです。

図 2. 使われる領域
図 2. 使われる領域

さて、こうやって弾の設定を作っても、それだけでは使えるようになりません。弾設定を読み込む関数 LoadUserShotData を使う必要があります

というわけで、次のようにしてみると...

LoadUserShotData(".\shot_pellet.txt");

何と、弾が表示されません! 実は、.\ が有効になるのは # で始まる命令の中や、弾設定ファイルでの ShotImage に指定する時だけであって、普通の関数に渡すパスでは別の方法を使う必要があります。具体的には、次のようにします。

LoadUserShotData(GetCurrentScriptDirectory ~ "shot_pellet.txt");

この GetCurrentScriptDirectory という関数は、現在のスクリプトのあるフォルダ(ディレクトリ)のパスを取得する関数です。そして、~ というのは、2つの文字列を連結する演算子です。つまり、こう書けば、現在のスクリプトのあるフォルダ内にある shot_pellet.txt というファイルのパスになるわけです。

独自の弾画像を使うように変更したプログラムをここに置いておきます。

波符「赤眼催眠マインドシェイカー」 Easy のまとめ

スペルグラフィックを付けた完成品をここに置いておきます。ZIP 形式で圧縮されているので、解凍して script フォルダに放り込んで下さい。

オブジェクト弾を使えば、本当に色んなことができます。ここまでの知識を使えば、かなりの弾幕が作れると思います。まだまだいくつも話してない関数がありますが、その多くは今までの知識があれば理解できるものと思います。

この講座ではあらゆる関数の解説を行うつもりはありませんが、基本となる関数はできるだけ使うようにしています。例えば CreateShot02CreateShot01 を理解していれば使えると思いますし、CreateLaserA を理解していれば CreateShotA も使えると思います。一度ヘルプを読んでみて、一体どんなことができるのかを確認しておいて下さい。

要旨

次回はいよいよ使い魔付きの弾幕を作ってみたいと思います。

第21回 | 第23回 | 目次へ戻る

この講座はロベールが作成しました。
inserted by FC2 system