GOREとにゃんこの桃源郷

主観的にCDのレビューやら、日記やら、色々と。
ゴアとかメタルとかロックとか

VXA!VXA!!

2012-03-08 | RPGツクールMZ,VXace,VX,2000,95,1~5
 そんだば、またしても、ツクールVXAceだば。まずは、今回の舞台、フィールドを載せるだば。

 んだ。日本列島だば。地理は苦手だけんども、一生懸命描いただば。細部にはこだわってないんで、島の数や位置なんかは無茶苦茶だば。

 んで、今回のツクールの新機能、キャラクター生成ツールは大変便利だば。文句こそ、論えばきりが無かんども、大変役に立つことも偶にあるだば。個性豊かな仲間たちを作っただばぜよ。


 左上が、前作にも登場しちょった、魔剣士の渡邊だば。前回は隠しキャラだったけんど、今回は初めから仲間ば加わるだば。だども、顔が変わり過ぎだば。右下はKスケだば。遊び人という設定だば。あとはまだ決めてないけんど、左下の女の子が個性的にもほどがあるだば。手に余るだばなぁ。

 そんじゃ、会心の一撃、つまりクリティカルのダメージ計算変更いってみるだば。
#--------------------------------------------------------------------------
# ● クリティカルの適用
#--------------------------------------------------------------------------
def apply_critical(damage)
damage * 3
end

 上記がデフォルトの計算式。与えるダメージを3倍にするという書式。つまり、通常攻撃で100ダメージ与えられる場合、クリティカルが出ると300ダメージ与えるというもの。けどこれじゃ、相手が硬い場合、たとえばドラクエのメタルスライム相手には、クリティカルがまず出ないことになる。何故ならデフォルトのスクリプトには、「ダメージが0になる場合はクリティカル中止」の記述がある。そりゃそうだよ、3倍にしても0は0だから意味無いもんね。でも、1ダメージしか与えられない場合も、「会心(痛恨)の一撃!3ダメージ!」じゃ虚しいよ。プレイヤーの胸に風穴があくよ。だからドラクエみたいに、クリティカル時は相手の防御力を無効化したかった。
#--------------------------------------------------------------------------
# ● クリティカルの適用
#--------------------------------------------------------------------------
def apply_critical(value, user, item)
user.atk * item_element_rate(user, item)
#~ damage * 3
end

 ところどころ違うから注意。まず受け取る引数をvalue, user, itemの3種類に変更しているよ。本当はvalueはいらないよ。他に改変しようと思って残しておいただけだよ。あと、属性有効度なんかも無視させたいなら、「* item_element_rate(user, item)」もいらないよ。
#--------------------------------------------------------------------------
# ● ダメージ計算
#--------------------------------------------------------------------------
def make_damage_value(user, item)
value = item.damage.eval(user, self, $game_variables)
value *= item_element_rate(user, item)
value *= pdr if item.physical?
value *= mdr if item.magical?
value *= rec if item.damage.recover?

value = apply_critical(value,user, item) if @result.critical # ←ココ

value = apply_variance(value, item.damage.variance)
value = apply_guard(value)
@result.make_damage(value.to_i, item)
@result.hp_damage = rand(3) if @result.hp_damage == 0..1
end

 本題のクリティカルに関する箇所は、ちゃんと引数を記述しておく必要があるよ。ちなみに最後の記述は、ダメージが0もしくは1になる場合、0から2までのランダムな値に変更する、というもの。つまり、たとえレベル99の勇者でも、スライムの攻撃でダメージを受ける可能性があるという記述だ。

あと、狙われ率に関して以前の記述に誤りがあったため修正。
#--------------------------------------------------------------------------
# ● 特殊能力値の取得
#--------------------------------------------------------------------------
def sparam(sparam_id)
if sparam_id != 0
features_pi(FEATURE_SPARAM, sparam_id)
elsif sparam_id == 0###
if actor?
case index
when 0 ; $game_party.battle_members[index].members_tgr = 1.0
when 1 ; $game_party.battle_members[index].members_tgr = 1.0
when 2 ; $game_party.battle_members[index].members_tgr = 0.7
when 3 ; $game_party.battle_members[index].members_tgr = 0.4
when 4 ; $game_party.battle_members[index].members_tgr = 0.3
when 5 ; $game_party.battle_members[index].members_tgr = 0.1
end
$game_party.battle_members[index].members_tgr *= features_pi(FEATURE_SPARAM, 0)
else
features_pi(FEATURE_SPARAM, 0)
end
end
end

 敵の狙われ率をデフォルト通りにする選択肢を追加した。さらに、ちょっと判りにくいけど一工夫。
#--------------------------------------------------------------------------
# ● スキル/アイテムの属性修正値を取得
#--------------------------------------------------------------------------
def item_element_rate(user, item)
if item.damage.element_id < 0 # 通常攻撃の時
user.atk_elements.empty? ? 1.0 : elements_max_rate(user.atk_elements)
elsif item.damage.element_id > 17
return element_rate(item.damage.element_id) + 0.25 if elements_max_rate(user.atk_elements) > 1.0
element_rate(item.damage.element_id)
else
element_rate(item.damage.element_id)
end
end

 通常攻撃の場合、属性IDには-1が代入されるため、通常攻撃か否かで分岐。また、属性IDが17未満か否かで分岐。上記の記述だと、属性IDが17未満の場合はデフォルトの計算式を用いるが、属性IDが17以上且つ有効度100%以上の場合、効果率25%上昇となる。具体的な説明が無いと、この記述の意味がさっぱり判らないだろう。今回、属性17以上は特攻用にしてある。たとえば、人間の敵によく効く武器やスキルなど、そういったもの。武器自体の通常攻撃で、相手へのダメージが125%となるが、スキル側でも同じ効果だと、どうにも味気ない気がした。たとえば、獣特攻武器のビーストスレイヤーというものが在ったとして、これを装備して攻撃すると125%のダメージが与えられる。しかし、獣特攻のキリングビーストという必殺技があるとして、これもやはり125%のダメージを与えられる場合、わざわざ特攻武器を装備して戦う旨味が薄い。となれば、もし特攻武器を装備している状態で、特攻技を使った場合、重複ボーナスとして効果を上乗せしたい。そう考えて、上記の方法を取ったというわけだ。


最新の画像もっと見る

コメントを投稿