早い者勝ちになりがちなターン制バトルに喝

前回は迷惑メールの芥川美代子さん永眠の話をちらっとしたが。

やはり芥川で一番有名なのは芥川龍之介であろう。
個人的には「杜子春」「藪の中」「魔術」「三つの宝」あたりが好きである。

本日、芥川短編集を読んでいたらそれらと肩を並べる良作が現れた。
「邪宗門」

もうタイトルからして羅生門とかぶっとるやないか。
と思ったら羅生門より断然面白い。
時系列的に「地獄変」の後の話なのだが、地獄変よりも面白い。

60ページほど一気に読み進め、
物語はクライマックス。
ラスボスの前に、満を持して主人公が降り立った!!

(未完)

ファッ!?


そんなもん短編集に載せんなよ


どうも、かげろうです。
本日は確率の項で説明し損ねた
「先制確率」「敏捷性による行動順」についてです。


敏捷性というものがあるんだが。
ドラクエのようなターン制RPGにおいて、どうもすばやさというものは軽視しがちである。
なぜなら、戦闘が難しいゲームであればあるほど、「先制できるか」よりも、「先攻、後攻が安定するか」のほうが重要だからだ。
確実に先行したければ他のパラメータを犠牲にしてすばやさに割く必要があるが(装備含む)、それよりは攻撃or防御に割いたほうが良い。
中途半端なすばやさで先攻か後攻かがランダムになるくらいなら、あえてすばやさを低く抑えて確実に後攻して、毎ターン保険で全体回復をかけたほうが良い。

何が言いたいかというと、ターン制RPGですばやさは不要だろ、ということなのである。
だからターン制はイカン、ということを言いたいのではない。
毎回こちらが先に行動できるターン制RPGがあってもええやないか。

まず、「Scene_Battle」の「●行動順序作成」を見ます。
行動順序作成
#--------------------------------------------------------------------------
# ● 行動順序作成
#--------------------------------------------------------------------------
def make_action_orders
 @action_battlers = []
 unless $game_troop.surprise
   @action_battlers += $game_party.members
 end
 unless $game_troop.preemptive
   @action_battlers += $game_troop.members
 end

 for battler in @action_battlers
   battler.action.make_speed
 end
 @action_battlers.sort! do |a,b|
   b.action.speed - a.action.speed
 end

end

青文字の部分は「先制or不意打ち」判定です。
不意打ちの場合は味方に行動させず、先制の場合は敵に行動させないということをやってます。
赤文字の部分は敏捷性による判定です。
敏捷性の高いバトラーから行動させる処理です。
順に詳細を解説していきます。


ではまず先制or不意打ち判定から見ていきます。
なんと「Scene_Map」です。これは探すのに時間かかった。
イベント戦闘では先制or不意打ちは発生しないからかな。
先制攻撃と不意打ちの確率判定
#--------------------------------------------------------------------------
# ● 先制攻撃と不意打ちの確率判定
#--------------------------------------------------------------------------
def preemptive_or_surprise
 actors_agi = $game_party.average_agi
 enemies_agi = $game_troop.average_agi
 if actors_agi >= enemies_agi
   percent_preemptive = 5
   percent_surprise = 3

 else
   percent_preemptive = 3
   percent_surprise = 5

 end
 if rand(100) < percent_preemptive
   $game_troop.preemptive = true
 elsif rand(100) < percent_surprise
   $game_troop.surprise = true
 end
end

結論から言います。
「アクターの平均敏捷性がエネミーの平均敏捷性以上の場合」
=先制確率5%、不意打ち確率3%

「アクターの平均敏捷性がエネミーの平均敏捷性未満の場合」
=先制確率3%、不意打ち確率5%

となっております。

preemptiveが先制攻撃、surpriseが不意打ちです。
この5やら3やらをいじれば確率が変えられます。
全部0にすれば、先制攻撃も不意打ちも発生しなくなります。
ここを変数に置き換える(以前解説)などすれば、先制しやすくなるスキル、不意打ちをなくすスキルなども作成可能かと思います。

次に、敏捷性による判定を見ます。
「Game_BattleAction」の「●行動スピードの決定」です。
行動スピードの決定
#--------------------------------------------------------------------------
# ● 行動スピードの決定
#--------------------------------------------------------------------------
def make_speed
 @speed = battler.agi + rand(5 + battler.agi / 4)
 @speed += skill.speed if skill?
 @speed += item.speed if item?
 @speed += 2000 if guard?
 @speed += 1000 if attack? and battler.fast_attack
end

上から順に、
・敏捷性+(5+(敏捷性÷4))
・スキルならスキルの「速度補正値」を足す
・アイテムならアイテムの「速度補正値」を足す
・防御していたら2000を足す
・「ターン内先制」の武器による通常攻撃なら1000を足す

となっています。
この合計の数字が大きいバトラーから先に行動することになります。


さて、では冒頭で述べたように100%こちらが先に行動できるようにするにはどうするのか?
以下のようにします。

#--------------------------------------------------------------------------
# ● 行動スピードの決定
#--------------------------------------------------------------------------
def make_speed
 @speed = battler.agi + rand(5 + battler.agi / 4)
 @speed += skill.speed if skill?
 @speed += item.speed if item?
 @speed += 2000 if guard?
 @speed += 1000 if attack? and battler.fast_attack
 @speed += 1000 if battler.actor?
end

青文字の一行を追加するだけです。
ああ簡単だ。
2000以上にすると敵の防御よりも先に行動するので1000にしましたが、ここは場合によって適宜修正してください。


以上!今日はきれいに終わったな!!
かげろうでした。


◆追記
よく読み返したらタイトルと内容が完全に矛盾してるぞ
よくよく考えたら別に早い者勝ちは関係ねえな。
要はターン制バトルとすばやさの相性は悪いってことが言いたかった。


RGSS2講座目次

RGSS2講座第6回
スポンサーサイト

コメントの投稿

非公開コメント

No title

はじめまして!ツクールのRGSS2が全くわからないのでなんか講座的なのないかなとおもってたらたどり着きました。

もっと講座してほしいです!完全文系人間にとってもわかりやすい解説で、意味不明だったところがわかるようになってすごくありがたいです。こういうの超待ってた。

もし半年経った今でも講座のリクエストを受け付けて頂けるのでしたら、是非ともメニュー画面のいじくり方の講座をお願いしたいです。
以前ゲームをつくるにおいて(流行の謎解き探索ADV制作中でした)メニュー画面のメニューの数を減らす等を必死にいじくっていたのですが全くわからず断念という事になりまして…。
例えばメニュー自体をアイテム、セーブ、終了の3つにしようとしたらアイテムメニューを押すとセーブ画面に飛んでしまう、みたいになってしまって原因が全くわかりませんでした。

気が向いたり余裕がある時ややる気になった時でいいので、お願いします…!

No title

おおおコメントありがとうございます

メニュー画面のいじくり方ですか了解しました

すでにKAMESOFT様にこんなスクリプトがあったりしますが
http://ytomy.sakura.ne.jp/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/menu&tech=custom_menu_command

せっかくなんでこれでは実現しにくい
「スイッチで項目オンオフ」
「項目を選んだらコモンイベントに飛ぶ」
の2点も合わせて次の土日に解説いたしませう

コメントありがとうございました
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR