リアルタイムストラテジー風ゲームを作成する機能を追加します。
▼ RGSS2_RTS2をダウンロード
2009.06.25 update / zip形式 / 353 KB
掲示板にて要望のあった斜め歩行画像に対応するための
追加スクリプトです、RTSスクリプトの一番下にコピペしてください。
画像の規格等はスクリプトにも書きましたが、ここでも簡単に説明します。
歩行グラフィックのファイル名の頭に % という文字がある場合、
指定したインデックスの右隣のキャラクターを
斜め歩行グラフィックとして扱うようになります。
勇者に斜め歩行グラフィックを適用する場合はこんな感じになります。
追加スクリプトのダウンロード
2009.6.25 公開
▼RTSシーン
十字キー … カーソルの移動
C … キャラクターの配置
LR … キャラクター選択
B … 配置可能領域の表示切り替え
F5 … ギブアップ
▼部隊編成シーン
十字キー(上下) … カーソルの移動
十字キー(左右) … 出撃キャラクター数変更、スキル変更
C … 決定
B … キャンセル
▼共通
F2 … FPSの表示
F12 … 強制的にタイトルへ
Alt+Enter … フルスクリーン切り替え
ゲームのプロパティで遊びやすいボタン配置に変更してください。
1からRTSを作り始める人はサンプルゲームをそのまま改造してみてください。
今作っているゲームにRTSシーンを追加したい場合は、
RGSSスクリプトと画像ファイルのコピー&ペーストが必要です、まずはエディタでF11を押してスクリプトエディタを開き、
左側にあるリストの "▼RTS" から "軽量化" までが必要なスクリプトになります。
複数に分かれているので移植が少し面倒かもしれませんが、エディタを2つ同時に起動して
コピーしていけばすぐに終わるはずです。
このRGSSスクリプトの動作にはスクリプト以外に画像が必要です、画像ファイルは
Graphicsフォルダ の中の Charactersフォルダ に立ち絵が、Parallaxesに背景画像が入っていますので、これらをそのままコピーしてください。
スクリプトと画像の移植が終わったらきちん動くかどうかの確認をしてください。
しかし、スクリプトと画像をコピーしただけではRTSは遊べません、
スクリプトにはステージデータ(出現する敵の情報)が含まれていないからです。
ステージの作成はイベントコマンドの "スクリプト" で行います、適当なイベントを作り、
そのイベントで以下のスクリプトを実行してください。
reset_rts
set_enemy(60, 100, 136, 208)
$scene = TRts_Edit_Scene.new
この3行が最低限必要なスクリプトになります、このほかにも使用できるキャラクターや
部隊のコスト上限などをゲームスイッチ(変数)で指定する必要があります。
後で詳しく説明しますが、とりあえず変数の4番に50、6番に1を代入し、
スイッチの21番をオンにしてからテストプレイをしてみてください。
(上記スクリプトの手前に変数とスイッチの変更処理をいれればOK)
この画像のように部隊コスト上限が50、指揮可能人数が1、選べるキャラクターが
勇者だけになっていれば正常です。出撃を選択するとゲームが始まり、ゴブリンが1体だけ出現します。
移植がうまくいってない場合、テストプレイの段階でエラーが出ます、このページを読み直して
移植作業に誤りがないかどうか確認してください。
このRTSスクリプトの設定はスクリプトエディタ内の "設定項目" で行います。
これが設定項目です。
RESULT_WIN = 1
RESULT_SCORE = 2
RESULT_TIME = 3
RTSの結果を何番の変数に代入するかを設定します。
上記の例では勝利条件を満たしたかどうかが変数1番に、スコアが2番、
そしてゲーム終了までの所要時間が3番の変数に代入されます。
RTSの結果に応じてゲームの進行を分岐させる際は、ここで設定した変数を
参照すればいいわけです。
RESULT_WINの値にはどういう理由で勝った(負けた)かまでが代入されます。
1 … 護衛対象が撃破されたため敗北
2 … 指定された被害数をオーバーしたため敗北
3 … 制限時間をオーバーしたため敗北
4 … 味方が全滅したため敗北
50 … 撃破目標を撃破したため勝利
51 … 指定された撃破数をオーバーしたため勝利
52 … ジョブレベルが5になったため勝利(不具合があります)
53 … 指定された時間を耐え抜いたため勝利
54 … 敵をすべて撃破したため勝利
単純に勝ったか負けたかを判定したい場合は値が 50 以上かどうかを判定してください。
50以上なら勝利、50未満なら敗北になります。
RESULT_TIMEに代入される値は秒数です。
MEMBER_POINT = 4
部隊コスト上限の値として何番の変数を利用するかを指定します(例では4番)。
この数値分だけキャラクターを部隊に追加することができます、
ストーリーの進行に応じてこの値を加算していけば、次第に部隊の規模を
大きくしていく演出が可能です。
SKILL_POINT = 5
スキルコスト上限の値として何番の変数を利用するかを指定します(例では5番)。
MEMBER_POINT と同様です。
BATTLE_ACTOR_MAX = 6
指揮可能人数の値として何番の変数を利用するかを指定します(例では6番)。
指揮可能人数とは部隊に参加させられる人数の上限ではありません。
ゲーム中、同時に出撃できる人数の制限です。
つまり、部隊コストを贅沢に使って100人の部隊を作ったとしても、
この値が 5 だった場合は同時に 5 人しか戦えないことになります。
POP_PLAYER_ANIME = 81
POP_ENEMY_ANIME = 82
キャラクター出現時の演出に何番のアニメーションを利用するかを指定します。
アクター(味方)とエネミー(敵)を別々に指定することができます。
NEED_EXP = 20
アクターは行動(攻撃)するたびに経験値を 1 得ます、この経験値がいくつ溜まったときに
レベルアップするかを指定します。
最大レベルは 5、レベルと経験値はジョブ(職業)ごとに共有します。
LEVEL_BONUS = 10
レベルアップによって上昇するステータスの割合を指定します。
この値が 10 ならば、1 レベルごとにステータスが 10% 上昇します。
上昇するステータスは、物理攻撃、物理防御、魔法攻撃、魔法防御、最大HP、移動速度です。
SKILL_MAX と JOB_MAX
この設定は装備できるスキルの上限数でもなければ、部隊に追加できるジョブの
上限数でもありません。
「設定したスキルIDの最大値」と「設定したアクターIDの最大値」です。
RTSシーンの処理で必要になる値なのですが、ゲームの内容にはまったく影響がありません。
それでも正しく設定しないと誤動作する場合があるのでしっかりと設定してください。
例えばデフォルトのスキルに新しくID10のスキルを追加した場合は
SKILL_MAX を 10 にしてください、ID8と9が抜けていても 10 です。
設定したスキルの総数ではないことに注意してください、アクターも同様です。
SKILL_SWITCH と JOB_SWITCH
スキルの習得状況、キャラクターの使用可能状況を何番のゲームスイッチで指定するかを決めます。
SKILL_SWITCH が 1 で、SKILL_MAX が 7 の場合はスイッチの 1 〜 7 番が各スキルの習得状況となり、
オンなら使用可能、オフなら使用不可となります。
SKILL_STATE と JOB_STATE については後で詳しく説明します。
動作確認の際に少し触れましたが、ステージはイベントコマンドのスクリプトで
ステージデータを必要な分だけ追加することで作成できます。
reset_rts
ステージデータをリセットし、白紙の状態に戻します。
ステージデータの作成前に必ず実行してください。
set_rect(x, y, width, height)
配置(出撃)可能領域を設定します。
set_rect(300, 150, 100, 150)という指定ならば、画面上の座標(300, 150)から
右に100ドット、下に150ドットのサイズの矩形が配置可能領域となります。
ゲーム中はこの領域内のみカーソルを移動させることができ、必然的にアクターの配置も
この領域内に限定されることになります。
領域は赤い枠線で表示され、Bボタンを押すことで表示と非表示を切り替えることが可能です。
ただし、(0, 56, 544, 296)という指定をした場合に限り、枠線は非表示となります。
画面全体が配置可能領域となるためです。
set_ground("bg0001.jpg")
そのステージで利用する背景画像を指定します、画像ファイルはGraphics/Parallaxesに置いてください。
画面を揺らす機能を使うことを考えると、画面サイズよりも64ドットほど大きく画像を
利用することが望ましいです。
サンプルゲームでは608 * 480の画像を使用しています。
set_bgm("Battle1.mid")
そのステージで利用するBGMを指定します、音楽ファイルはAudio/BGMに置いてください。
set_box(100)
宝箱の出現率を指定します、100ならばエネミー撃破時に100%の確率で宝箱が出現します。
set_item([1, 2, 3])
宝箱から出てくるアクターを設定します、この例ならば宝箱を壊した際に
勇者、戦士、弓使いのいずれか一人が補充されることになります。
set_enemy(time, type, x, y)
出現するエネミーを設定します、timeが出現するタイミング、typeは出現するエネミー、
xとyに出現する座標を指定してください。
タイミングはフレーム単位(1フレーム = 1/60秒)で指定します、120ならばゲーム開始から2秒後に出現します。
typeには出現するエネミーの種類、デフォルトなら100でゴブリン、103でスライムとなります。
出現座標は画面左上が 0, 56、右上が 544, 56、左下 0, 296、右下 544, 296です。
エネミーの種類にアクターを指定した場合はアクターが出現します。
味方の援軍などの演出に利用してください。
例外処理としてtimeの値が0の場合は出現アニメーションが再生されません
最初から画面に登場しているエネミーやアクターには0を指定してください。
set_stop(time, num)
ストッパーを設定します。
このストッパーを設定した場合、ゲーム開始から time フレームが経過したところで
ステージデータの処理(敵の配置)が一旦停止し、画面に出現しているエネミーの数が num 以下になると
処理を再開します。
これにより、エネミーを倒さずに放置した場合にエネミーが増えすぎてしまうのを防ぐことが可能です。
set_message(time, face_name, face_index, background, position, message)
ゲーム中に表示するメッセージを追加します。
face_nameには顔グラフィックのファイル名、face_indexには使用する顔グラフィックのインデックス(位置)、
backgroundにウィンドウのタイプ(0 = 通常、1 = 暗くする、2 = 非表示)
positionにメッセージウィンドウの表示位置、そしてmessageに表示するメッセージを指定します。
見てのとおり非常にわかりづらい仕様になっています、実際の使用方法はサンプルゲームで
確認してみてください。
メッセージの注意
\c[n]などは\\c[n]というように'\'を重ねて記述してください、改行は\x00です。
set_rule(rule, value)
そのステージの追加ルールを設定します。
通常はステージデータに追加されているすべてのエネミーを倒せば勝利、
アクターがすべてやられれば敗北となりますが、追加ルールを設定することで
勝利(敗北)の条件を追加することができます。
ruleに指定する値は以下のとおり
1 … value に指定したジョブが撃破されたら敗北
2 … value に指定した人数以上の被害がでれば敗北
3 … value に指定した秒数が経過したら敗北
50 … value に指定したエネミーを撃破したら勝利
51 … value に指定した数だけエネミーを撃破したら勝利
52 … どのジョブでもいいからレベル5になれば勝利(未実装)
53 … value に指定した秒数が経過したら勝利
100 … value に指定したジョブを部隊に追加できなくなります
これらのルールを複数組み合わせて設定することができます。
$scene = TRts_Edit_Scene.new
この文で部隊編成画面を呼び出すことができます、ステージデータの設定がすべて済んだら
最後にこの一行を追加してください。
"設定項目"の中ほどにあるJOB_STATEの値を書き換えることで、パラメータの変更が可能です。
戦士のHPを低くしたい、僧侶の移動速度を速くしたい、こういった変更ならば
この数字を変更するだけで簡単に設定することができます。
数字がずらっと並んでいるので変更する数字を間違えないように気をつけてください。
ただし、魔法使いを移動するようにしたい、といった変更は行動設定を変更する必要があります。
スクリプトエディタで "キャラクター行動設定" を開き、中身を書き換えることで
キャラクターの行動パターンを変更することができます。
既存の行動のパラメータを変更する、といった程度のものであれば
rubyの知識等がなくても可能ですが、まったく新しい行動を追加するとなると
多少rubyの文法等、プログラミングの知識が必要になります。
行動設定で使用するメソッド(コマンド)に関する説明は "キャラクター行動設定" 内に
ありますので、そちらを参照してください。
新しいスキルを追加する場合は "設定項目" のSKILL_STATEに、書式に従ってパラメータを記述してください。
その際、SKILL_MAXの値を変更するのを忘れずに。
書式は設定項目内に説明がありますので、そちらを参照してください。
8 => [聖戦士の心得", 1, 2, 15, 120]
このように書けば8番目のスキルとして聖戦士の心得を追加することができます、
SKILL_MAXの値を8に変更し、7番目のスキルのお尻にカンマを付けるのを忘れずに。
基本的にはスキル同様、JOB_STATEに新しいキャラクターのパラメータを追加するのですが、
他にもいくつか書き加えなければならない部分があります。
まず設定項目の下にある "キャラクター追加メソッド"です、既存キャラクターの
記述を真似して新しいキャラクターのものを書き加えてください。
カンマを書き忘れるとそれだけでエラーになってしまうので、注意が必要です。
次にキャラクター行動設定を追加します。
これも既存キャラクターの行動設定をコピペして改造するのがいいでしょう、
行動設定のクラス名(class Trts_〜〜)の部分は先ほど追加メソッドの部分に書き加えたクラス名と
同様のものにしてください。
このページの説明を読むよりもサンプルゲームを遊んで、エディタの中身を見る方が
わかりやすいと思います。まずはサンプルのイベントの中身を覗いて、
どうなっているのかを確認してみてください。
アクターとエネミーの両勢力に自分から移動しないキャラクターだけが残った場合、
ゲームがそこで止まってしまいます、F5キーのギブアップを利用してください。
シーン周りをいじるようなRGSSでなければほとんどのRGSS素材と競合せずに併用することができると思います。
このページでは本当に必要な最低限の説明しかしていません、おそらくこれだけでは
さっぱりわからない、わかりづらい部分があると思います。
スクリプトの性質上、どこまでも細かく説明しようとすると、rubyの文法まで解説しなくてはならないので
利用する人に不親切だと承知の上でこうなってしまっています。
わからない部分は遠慮なく掲示板にて質問してください、拍手でもOKです、質問のあった部分は
回答と一緒にこのページにも書き加えていくつもりです。
その他バグ報告、追加機能の要望なども掲示板or拍手へどうぞ、
ただしリクエストの内容によっては応えられない場合が多々あります。