>> BACK


1ターンに複数回攻撃するスキルを作る
 1ターンに複数回攻撃する敵を作りたい場合や、複数回攻撃をするスキルを作りたい場合は、RPGツクールXPより追加されたイベントコマンド「アクションの強制」を使えば、簡単に作ることができます。

簡単な作成例

◆2回連続で「ファイア」の魔法を放つスキル

 (1) 「ファイア」の魔法を作成する。
   威力などの各種数値は、好きなように設定してください。

 (2) コモンイベント「連続ファイア」を作成する。
   ここで、2回目のファイアを設定します。

◆アクションの強制 : [バトラー], ファイア, [行動対象], すぐに実行

  このように設定してください。
  なお、バトラーは任意のキャラを、行動対象は「ラストターゲット」あるいは「ランダム」を選んでください。

 (3) 「ファイア」の魔法をコピーする。
   (1)で作った魔法をコピーします。これが、連続攻撃の引き金となるスキルとなります。

 (4) 「ファイア」の魔法にコモンイベントを設定する。
   (3)でコピーしたものに、(2)で作成したコモンイベントを設定してください。
   ここでは、コモンイベント「連続ファイア」を設定します。


 以上で、作成は終了です。
 (3)でコピーした「ファイア」を使用すると、「ファイア」を2回連続で使用することになります。また、連続攻撃の回数を増やしたい場合は、コモンイベント内で「アクションの強制」の設定を、増やしたい回数だけ増やせばOKです。


 このように、作成自体は簡単なのですが、1つ問題があります。
 それは、2回目以降に使用するスキルの「使用者」の設定です。

 2回目以降に使用するスキルは、コモンイベント内の「アクションの強制」コマンドで設定しているわけですから、スキルの「使用者」とは、「アクションの強制」での「バトラー」という事になります。
 ところが、この「バトラー」は、敵にしろ味方にしろ、パーティ(トループ)内でどの位置にいるキャラか、といった指定しか出来ません。
 ですので、味方の場合、そのスキルを使用するキャラが限定され、さらにパーティ内での位置が固定されていないとダメですし、敵の場合も、トループ内での位置が固定されていないとダメです。敵の場合は更に、1つのトループ内で同一の敵が複数出現してしまうと、2回目以降のスキル使用者が狂ってしまいます。

 この問題を回避するために、同じスキルであっても、パーティ(トループ)内での位置ごとに、それぞれ専用のコモンイベントを作成するという方法があります。しかし、これは非常に効率が悪く、賢い方法とは言えません。出来れば、1つのコモンイベントで設定を済ませたいところです。

 そこで、スクリプトの登場になります。
 スクリプトを使用すれば、同一スキルに関する設定を、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人目, ファイア, ラストターゲット, すぐに実行
 ◆
:分岐終了



2. スクリプトエディタで編集する

 ※事前に、必ずスクリプトのバックアップを!!

 最後にスキルやアイテムを使用したバトラーの位置を取得する際に使用した条件文のスクリプトのうち、
「$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回連続程度に抑えるなどすれば、特に大きな問題は起きないと思います。



当ページに掲載されている文章、画像の無断掲載を固く禁じます。
"Alestian Story"および"RPGツクールXP"の仕様に関するご質問には、一切お答えできませんので、ご了承ください。

Alestian Story(C)2004 Shine Garden / ENTERBRAIN
(C)2004 ENTERBRAIN / YOJI OJIMA (C)2004 Xiph.Org Foundation Ruby(C)1993-2003 Yukihiro Matsumoto All Rights Reserved
License for SciTE(C)1998-2003 Neil Hodgson All Rights Reserved