|
1ターンに複数回攻撃する敵を作りたい場合や、複数回攻撃をするスキルを作りたい場合は、RPGツクールXPより追加されたイベントコマンド「アクションの強制」を使えば、簡単に作ることができます。
|
◆2回連続で「ファイア」の魔法を放つスキル
(1) 「ファイア」の魔法を作成する。
威力などの各種数値は、好きなように設定してください。
(2) コモンイベント「連続ファイア」を作成する。
ここで、2回目のファイアを設定します。
◆アクションの強制 : [バトラー], ファイア, [行動対象], すぐに実行 |
このように設定してください。
なお、バトラーは任意のキャラを、行動対象は「ラストターゲット」あるいは「ランダム」を選んでください。
(3) 「ファイア」の魔法をコピーする。
(1)で作った魔法をコピーします。これが、連続攻撃の引き金となるスキルとなります。
(4) 「ファイア」の魔法にコモンイベントを設定する。
(3)でコピーしたものに、(2)で作成したコモンイベントを設定してください。
ここでは、コモンイベント「連続ファイア」を設定します。
以上で、作成は終了です。
(3)でコピーした「ファイア」を使用すると、「ファイア」を2回連続で使用することになります。また、連続攻撃の回数を増やしたい場合は、コモンイベント内で「アクションの強制」の設定を、増やしたい回数だけ増やせばOKです。 |
このように、作成自体は簡単なのですが、1つ問題があります。
それは、2回目以降に使用するスキルの「使用者」の設定です。
2回目以降に使用するスキルは、コモンイベント内の「アクションの強制」コマンドで設定しているわけですから、スキルの「使用者」とは、「アクションの強制」での「バトラー」という事になります。
ところが、この「バトラー」は、敵にしろ味方にしろ、パーティ(トループ)内でどの位置にいるキャラか、といった指定しか出来ません。
ですので、味方の場合、そのスキルを使用するキャラが限定され、さらにパーティ内での位置が固定されていないとダメですし、敵の場合も、トループ内での位置が固定されていないとダメです。敵の場合は更に、1つのトループ内で同一の敵が複数出現してしまうと、2回目以降のスキル使用者が狂ってしまいます。
この問題を回避するために、同じスキルであっても、パーティ(トループ)内での位置ごとに、それぞれ専用のコモンイベントを作成するという方法があります。しかし、これは非常に効率が悪く、賢い方法とは言えません。出来れば、1つのコモンイベントで設定を済ませたいところです。
そこで、スクリプトの登場になります。
スクリプトを使用すれば、同一スキルに関する設定を、1つのコモンイベントで済ませる事が可能になります。
|
# 行動中のエネミーが1体目かどうか?
◆条件分岐 : スクリプト : $game_temp.action_battler == $game_troop.enemies[0]
◆アクションの強制 : [1. ], ファイア, ラストターゲット, すぐに実行
◆
:分岐終了
# 行動中のエネミーが2体目かどうか?
◆条件分岐 : スクリプト : $game_temp.action_battler == $game_troop.enemies[1]
◆アクションの強制 : [2. ], ファイア, ラストターゲット, すぐに実行
◆
:分岐終了
・
・(3体目〜7体目までの設定)
・
# 行動中のエネミーが8体目かどうか?
◆条件分岐 : スクリプト : $game_temp.action_battler == $game_troop.enemies[7]
◆アクションの強制 : [8. ], ファイア, ラストターゲット, すぐに実行
◆
:分岐終了 |
これは、最後にスキルやアイテムを使用したエネミーが、トループ内でどの位置にいるのかを識別し、その位置によって条件分岐させ、それぞれ「アクションの強制」コマンドを使用し、2回目のスキルを使用させています。1つのトループでエネミーの最大数は8ですので、分岐は8つになります。
なお、「$game_troop.enemies[0]」の赤字部分の数字は、0〜7までの8つですので、注意してください。
エネミーではなく、アクター(味方)を識別させる場合は、
# 行動中のアクターが1人目かどうか?
◆条件分岐 : スクリプト : $game_temp.action_battler == $game_party.actors[0]
◆アクションの強制 : アクター 1人目, ファイア, ラストターゲット, すぐに実行
◆
:分岐終了 |
このようになります。
赤字の部分が、エネミーの場合と記述が異なる部分です。
以上のことから、敵も味方も使用する可能性のあるスキルの場合、このようにまとめる事が可能です。
# 行動中のエネミーが1体目かどうか?
◆条件分岐 : スクリプト : $game_temp.action_battler == $game_troop.enemies[0]
◆アクションの強制 : [1. ], ファイア, ラストターゲット, すぐに実行
◆
:分岐終了
# 行動中のエネミーが2体目かどうか?
◆条件分岐 : スクリプト : $game_temp.action_battler == $game_troop.enemies[1]
◆アクションの強制 : [2. ], ファイア, ラストターゲット, すぐに実行
◆
:分岐終了
・
・(3体目〜7体目までの設定)
・
# 行動中のエネミーが8体目かどうか?
◆条件分岐 : スクリプト : $game_temp.action_battler == $game_troop.enemies[7]
◆アクションの強制 : [8. ], ファイア, ラストターゲット, すぐに実行
◆
:分岐終了
# 行動中のアクターが1人目かどうか?
◆条件分岐 : スクリプト : $game_temp.action_battler == $game_party.actors[0]
◆アクションの強制 : アクター 1人目, ファイア, ラストターゲット, すぐに実行
◆
:分岐終了
・
・(2人目〜3人目までの設定)
・
# 行動中のアクターが4人目かどうか?
◆条件分岐 : スクリプト : $game_temp.action_battler == $game_party.actors[3]
◆アクションの強制 : アクター 4人目, ファイア, ラストターゲット, すぐに実行
◆
:分岐終了 |
※事前に、必ずスクリプトのバックアップを!!
最後にスキルやアイテムを使用したバトラーの位置を取得する際に使用した条件文のスクリプトのうち、
「$game_temp.action_battler」という部分は、デフォルトでは定義されていませんので、このままですとエラーが発生してしまいます。
そこで、「$game_temp.action_battler」を定義すると同時に、最後にスキルやアイテムを使用したバトラーを取得する必要が出てきます。これらはすべて、スクリプトエディタにて編集を行うことになります。
◆Game_Tempを編集する
スクリプトエディタを開き、「Game_Temp」セクションを選んでください。
そして、「公開インスタンス変数」の項目に、以下の記述を追加してください。
attr_accessor :action_battler # スキル・アイテム使用バトラー |
これにより、「$game_temp.action_battler」が定義されます。

スクリプトエディタ上だと、このようになります。
(赤枠内が、記述を追加した部分)
◆Scene_Battle4を編集する
次に、「Scene_Battle4」セクションを選んでください。
そして、だいたい241行目あたりにある「スキルまたはアイテムの対象側バトラー設定」の項目に、以下のようにして記述を追加してください。
#--------------------------------------------------------------------------
# ● スキルまたはアイテムの対象側バトラー設定
# scope : スキルまたはアイテムの効果範囲
#--------------------------------------------------------------------------
def set_target_battlers(scope)
# ★ 使用者を一時取得(連続攻撃用)
$game_temp.action_battler = @active_battler
# 行動側バトラーがエネミーの場合
if @active_battler.is_a?(Game_Enemy) |
赤字の部分が、追加する記述です。
これにより、最後にスキルやアイテムを使用したバトラーを取得できます。

スクリプトエディタ上だと、このようになります。
(赤枠内が、記述を追加した部分)
以上で、作業は終了です。
これで、「1ターンに複数回攻撃するスキル」を自由に作成可能となります。
|
RPGツクールXPでは、各バトラーの1回の行動ごとに、スリップダメージやステート解除の処理が行われる仕様になっています。
したがって、「1ターンに複数回攻撃」させた場合、その攻撃回数分だけ、これらの処理が行われてしまいます。
つまり、以下のような現象が起きてしまいます。
◆毒によるスリップダメージを受ける状態で、8回連続で攻撃するスキルを使用した場合
→1ターンに、毒によるダメージを8回も受けてしまう。
◆防御力アップのステート(3ターン持続)時に、8回連続で攻撃するスキルを使用した場合
→1ターンでステートが解除されてしまう。
これらを回避するには、連続攻撃時には、スリップダメージやステート解除の処理を行わないよう、スクリプトで設定する必要がありますが、この設定には、RGSSの知識と共に、戦闘での一連の処理の流れを把握する必要がありますので、ここでの説明は割愛いたします。Alestian
Storyでは、これらの設定を行っておりますので、スクリプトエディタを開いて、直接確認してみてください。
RGSSの知識がない方は、連続攻撃は2回連続程度に抑えるなどすれば、特に大きな問題は起きないと思います。 |
|