▼ RGSS2_弾幕シューティングをダウンロード
2009.06.02 update / zip形式 / 417 KB
6/2 更新内容
・パワーアップに必要なパワーアイテム数が設定できるようになった
・被弾時に失うパワーアイテム数が設定できるようになった
・敵撃破エフェクトを追加
・ステージデータのリセット時にステージ設定も初期化するように修正
これに伴い、スクリプト内の設定項目に各設定の初期値を追加
・デフォルトの敵タイプを変更
・サンプルステージを新規作成
▼追加スクリプト-背景スクロール-
TShoot_Sceneと設定項目の間に挿入してください。
十字キー … 移動
A … 低速移動(押している間)
B … ボム
C … ショット
Z … ギブアップ
F1 … ゲームのプロパティ
F2 … FPSの表示
F12 … 強制的にタイトルへ
Alt+Enter … フルスクリーン切り替え
ゲームのプロパティで遊びやすいボタン配置に変更してください。
1から弾幕シューティングゲームを作り始める人はサンプルゲームをそのまま改造してみてください。
今作っているゲームで弾幕シューティングを遊べるようにしたい場合は、
RGSSスクリプトと画像ファイルのコピー&ペーストが必要です、まずはエディタでF11を押してスクリプトエディタを開き、
左側にあるリストの "▼シューティング" から "設定項目" までが必要なスクリプトになります。
複数に分かれているので移植が少し面倒かもしれませんが、エディタを2つ同時に起動して
コピーしていけばすぐに終わるはずです。
このRGSSスクリプトの動作にはスクリプト以外に画像が必要です、画像ファイルは
Graphicsフォルダ の中の Systemフォルダ に全部入っていますので、これらをそのままコピーしてください。
スクリプトと画像の移植が終わったらきちん動くかどうかの確認をしてください。
しかし、スクリプトと画像をコピーしただけではシューティングゲームは遊べません、
スクリプトにはステージデータ(出現する敵の情報)が含まれていないからです。
移植がうまくいってない場合、テストプレイの段階でエラーが出ます、このページを読み直して
移植作業に誤りがないかどうか確認してください。
ステージの作成はイベントコマンドの "スクリプト" で行います、適当なイベントを作り、
そのイベントで以下のスクリプトを実行してください。
$game_temp.tshoot_stage.reset
$game_temp.tshoot_stage.add(120, 1, 144, -32, 3, Math::PI / 2)
$scene = TShoot_Scene.new
2行目が1行に収まらないと思いますが、そのままで大丈夫です。
イベントが完成したら、テストプレイでイベントに話しかけて起動してみてください。
上の画面のように敵が1体だけでてくれば成功です。
今回の設定では、敵を倒してもゲームが終了しません、
Zボタンの途中放棄で終了してください
動作確認用に作ったイベントのスクリプトを解説していきます。
1行目
$game_temp.tshoot_stage.reset
ステージデータのリセット、これはステージ作成前に必ず実行しなくてはいけない重要なものです、
ステージデータと設定を初期化して白紙の状態に戻します。
2行目
$game_temp.tshoot_stage.add(120, 1, 144, -32, 3, Math::PI / 2)
出現する敵の情報をステージデータに書き込んでいます。
最初の 120 は出現タイミング、ゲーム開始から 120フレーム が経過したら出現します。
ちなみにフレームとは時間の単位だと思ってください、
60フレーム で 1秒、120フレーム なら 2秒 です。
次の 1 は出現する敵のタイプ、ID 1 に登録された敵が出現します、敵タイプの登録については
後で詳しく説明します。
次の2つの数字 144 と -32 は敵が出現する座標(場所)です、144 が横方向の位置で
-32 は縦方向になります。
画面の上端が 0 なので、-32 ならばそこからさらに 32ドット だけ上、つまり画面外から
出現するということになります。横方向は左端が 0 で右端が 288、真ん中は 144 です。
最後の2つ、3 と Math::PI / 2 が敵の行動を指定するオプションです。
2つ目の数字で指定した敵タイプには "ゆっくり移動しながら一定間隔で弾を撃つ" という設定が
あるだけで、"どれだけの弾を撃つか" や "どの方向へ動くか" などはわかりません。
それを設定するのがこのオプション値です。
Math::PI / 2 は難しく見えますが、結果だけ言えば "円周率の半分" です。
"Math::PI" は円周率、"/" は割り算を表します。
移動方向の指定は、右を 0.0 として時計回りに3.14…で半周、6.28…で一周になるので、
Math::PI / 2 ならばまっすぐ下へ進むということになります。
出現位置が画面上端のままで上方向への移動を設定した場合、
敵が画面の外へ飛んでいってしまいます、設定したはずの敵が出てこない時は、
移動方向と出現位置を確認してみてください。
ちなみに戻ってこない敵は自動的に削除されるので気にしなくても大丈夫です。
$scene = TShoot_Scene.new
3行目です、設定したステージデータを使ってシューティングゲームを開始します。
ステージデータを作成しても、この行がなければゲームは始まりません。
たった1体しか敵が出ないのでは面白くありません、次はたくさんの敵を出現させる方法を説明します。
単純に敵の情報をたくさん書くだけで実現できます。
$game_temp.tshoot_stage.reset
$game_temp.tshoot_stage.add(120, 1, 144, -32, 3, Math::PI / 2)
$game_temp.tshoot_stage.add(180, 1, 144, -32, 3, Math::PI / 2)
$game_temp.tshoot_stage.add(240, 1, 144, -32, 3, Math::PI / 2)
$game_temp.tshoot_stage.add(300, 1, 144, -32, 3, Math::PI / 2)
$game_temp.tshoot_stage.add(360, 1, 144, -32, 3, Math::PI / 2)
$scene = TShoot_Scene.new
出現タイミングだけ変更しています。
スクリプトコマンドは入力できる行数が限られているので、
上記のスクリプトは2つに分けて入力することになります。
上の画像のようになるはずです、1つのコマンドに収まる場合も
編隊単位で分けておくと後で編集するのが楽になります。
分けたスクリプトコマンドの間に注釈コマンドでメモをしておくさらに分かりやすくなります。
一直線に並んだ敵が5体出てくれば成功です
複数の敵をまとめて設定する方法を説明します。
$game_temp.tshoot_stage.reset
for i in 0...5
$game_temp.tshoot_stage.add(i * 60 + 120, 1, 144, -32, 3, Math::PI / 2)
end
$scene = TShoot_Scene.new
前の項目のスクリプトをまとめたものが上のスクリプトです。
簡単に説明すると、2行目と4行目に挟まれてる行、つまり3行目の処理が5回繰り返されています、
変数 i には繰り返された回数が代入されているので、最初は 0、次に 1、最後は 5 ……ではなく 4 となります。
このため、出現タイミングの "i * 60 + 120" は処理の回数に応じて結果が変わります、
最初は i に 0 が代入されているので 0 * 60 + 120(*は掛け算)で 120 になり、2回目には 1 が代入されて 1 * 60 + 120 で 180、
結果として敵の出現間隔が60フレームになります。
ステージデータには敵の出現情報以外にも様々な設定を書き込むことができます。
$game_temp.tshoot_p_name = "Actor2"
$game_temp.tshoot_p_index = 7
プレイヤーが動かす自機(キャラクター)の画像を指定します、p_name は画像のファイル名、
p_index は画像の中のキャラクター指定(0〜7)、この設定ではサンプルゲームと同じ(女魔術師)です。
$game_temp.tshoot_p_speed = 4096
$game_temp.tshoot_p_speed_slow = 2048
自機の移動速度です、1024 で 1 フレームに 1ドット 進む速さになります。
p_speed_slow は低速移動をしているときの速さ、この設定をうまく使えば、低速移動できないステージや
常に低速移動のスピードでしか動けないステージが作れます。
$game_temp.tshoot_bgm = "Audio/BGM/Scene2.mid"
$game_temp.tshoot_ground = "Graphic/System/ground.jpg"
ステージのBGMと、表示する背景画像を設定します、背景画像のサイズは 384*480 です。
$game_temp.tshoot_life = 4
$game_temp.tshoot_bomb = 2
$game_temp.tshoot_bomb_reset = true
lifeは自機の初期耐久力、敵の弾に当たるたびに減っていき、0 のときに被弾するとゲームオーバーです、
lifeに 0 を設定した場合、1 発当たっただけでゲームオーバーとなります。
bombは自機のボム所持数、ボムを使用すると画面上のすべての弾を消すことができます、
このボムをゲーム開始時にいくつ持っているかが設定します。
bomb_resetはtrueかfalseの2択、trueの場合は被弾時にボム所持数が初期値にリセットされ、
falseならばそのままで変化しません、難易度を高くしたい場合は false を指定します。
その1で説明したもの以外の設定は、スクリプトエディタで直接スクリプトを書き換えることになります。
"設定項目" というスクリプトにまとめてありますので、一度覗いてみてください。
以下は最初から登録されている敵タイプの一覧です、
敵の出現情報を書き込むスクリプトの2つ目の数字に指定してください。
1 … 直進しながら60フレーム間隔で自機狙いnwayショット
2 … 降下、しばらく攻撃した後、上へ戻っていく
3 … 降下後そのまま上へ戻る、攻撃すると爆発して全方向ショット
4 … くねくね移動しながら自機狙いnwayショット
5 … 降下、マシンガンショット後、上へ戻っていく
6 … 未使用
7 … 降下後、弾で円を描く、弾は自機狙いに変化
8 … 降下後、自機狙いnwayレーザーを発射
9 … 未使用
10 … ボス、BGM変更、倒せばステージクリア
11 〜 19 … 未使用
オプション値の内容などはスクリプト内に記述してあるので、そちらを参照してください。
未使用となっている敵タイプに処理を記述すれば、オリジナルの敵を作ることができます。
まずは既存の敵タイプをいじって仕組みを理解し、慣れてきたら処理の内容を未使用タイプへコピペして
改造するという手順でオリジナルの敵作りにチャレンジしてみてください。
このページの説明を読むよりもサンプルゲームを遊んで、エディタの中身を見る方が
わかりやすいかもしれません。ちなみにサンプルゲームではステージデータをコモンイベントに
記述しています。
背景画像にRPGツクールXPのRTP画像を使用しています、XPを持っていない人は差し替えてください
キーボードによっては斜め移動とショット、低速移動など、複数のキーを同時に認識できない場合があります、
その場合は使用するキーを変更してください。
ボスがいない、あるいはボスが自分から画面外へ消えてしまうと、ステージがクリアできなくなる場合があります。
その場合はギブアップするか Alt + F4 で強制終了してください。
ゲーム開始のスクリプトコマンドのすぐ後ろにウェイトを入れてください、ゲームの結果が変数に反映されるまで時間差が
あるので、ウェイトをいれずに結果が代入される変数を参照すると、正しい結果が得られない場合があります。
シーン周りをいじるようなRGSSでなければほとんどのRGSS素材と競合せずに併用することができると思います、
競合する場合は Game_Temp か Scene_Base が怪しいです。
かなり強引なスクリプトなので、各所に変な記述やバグがあったり、メモリリークしたりするかもしれません、
バグ報告、意見、助言等ありましたら掲示板へお願いします。