スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

★小ネタ番外編★ノーダメージでステート異常が付くのはどうなのか!? for RGSS2

こんにちは^^
前回の更新より結構、日が開いてしまいました。

特にツクールが飽きたというわけではないのですが
触る時間が余り取れなくて、更新が滞っております^^;
しばらくは、この様な状態が続くかも知れません……

さて、早速ですが拍手コメで前々々回の記事、
小ネタ3 ノーダメージでステート異常が付くのはどうなのか?
のRGSS2版も教えて欲しいという、お問い合わせをいただきましたので
久しぶりにVXを起動させて調べてみました。

結論からいうと、こちらも方法は簡単でした。
ちょっと、解説が長くなりそうなので続きから!

6/29 8:50
拍手コメしていただいた方へ
スクリプトに少しミスがありました。
VXには属性による吸収の概念があるのをすっかり忘れてました^^;
修正しましたので再度確認をお願いします。
ホント申し訳ないです…

まず、基本的にVXにおいては、武器やスキルにステート付加を設定していても
その攻撃が物理攻撃且つ、与えたダメージが0の場合はステート付加が行われません。
この辺は、エースより優秀ですね。ちょっと驚きました。

その部分のソースを貼って説明します(エディタを開きGame_Battlerの884行目)

    if skill.physical_attack and @hp_damage == 0  # 物理ノーダメージ判定
      return                                    #ここで処理を終了
    end
    apply_state_changes(skill)                    # ここはステート付加をする処理
  end

#物理ノーダメージ判定 というところを見ていただくと分かるように
ノーダメージの場合は処理をそこで終了させています。
つまり、物理による攻撃では、いくらステート付加を設定してあろうとも
ノーダメージなら、ステート異常が付くことはありません。


上記の場合はスキルの処理ですが、武器による攻撃やアイテムによる攻撃でも
同様に同じ処理がなされています。

しかし、これが魔法攻撃の場合は話が違ってきます。
あくまでも、デフォスクリプトは物理攻撃の処理であって魔法攻撃に関しての
処理はなされていません。

例をあげると、ファイアという魔法系スキル(オプション→物理攻撃→チェックを外す)を
作りステート変化に『やけど』なるステートを設定したとします。
そして、炎耐性があるモンスターに攻撃するとスクショのようなことが
起こってしまいます。
えー!?

そこで、この仕様を変えたい場合は、その処理を変えるスクリプトを
新たに書いてやる必要があります。
冒頭に書いたように方法は凄く簡単です。
※バックアップを行ってから書き換えることをオススメします

↓884行目からのスクリプトを
    if skill.physical_attack and @hp_damage == 0  # 物理ノーダメージ判定
      return                                   
    end
    apply_state_changes(skill)                    # ステート変化
  end

↓のように書き換えてください。
    if skill.base_damage > 0 and @hp_damage <= 0   # 全ノーダメージ判定
      return                                    
    end
    apply_state_changes(skill)                    # ステート変化
  end

書き換えたスクリプトを簡単に説明しますと、
元の物理攻撃でHPに与えたダメージが0ならば、処理を終了から
スキル設定におけるダメージ効果→基本ダメージの数値が1以上でHPに与えたダメージが
0以下(吸収含む)ならば、処理を終了
へ処理を置き換えています。
そうすると、如何なる攻撃においてもノーダメージの場合はステート付加が
行われなくなります。

アイテムにも同じ処理をしたい場合は、そちらも同様に書き換えてください。
(951行目辺りです)
skill.base_damage → item.base_damage

書き換えるのが、ちょっとなーという人用にコピペで使えるものも貼っておきます。

class Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #     user  : スキルの使用者
  #     skill : スキル
  #--------------------------------------------------------------------------
  def skill_effect(user, skill)
    clear_action_results
    unless skill_effective?(user, skill)
      @skipped = true
      return
    end
    if rand(100) >= calc_hit(user, skill)         # 命中判定
      @missed = true
      return
    end
    if rand(100) < calc_eva(user, skill)          # 回避判定
      @evaded = true
      return
    end
    make_obj_damage_value(user, skill)            # ダメージ計算
    make_obj_absorb_effect(user, skill)           # 吸収効果計算
    execute_damage(user)                          # ダメージ反映
    if skill.base_damage > 0 and @hp_damage <= 0   # 全ノーダメージ判定
      return                                    
    end
    apply_state_changes(skill)                    # ステート変化
  end
end


再定義なのでなるべく素材の上のほうに貼ってください。
残念ながらVXはエースと違いメソッドがそこまで細分化されていないので
エイリアス処理が困難な場合があります。
(自分が無知なだけでやりようによってはできるかも^^;)

以上でRGSS2における、『ノーダメージでステート異常を付加させない』の
解説を終わります^^
よろしければ、ご参考ください。
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

mo-to

Author:mo-to
RGSSとJavaScriptを学んで弄って遊んでいます。
まだまだひよっこですが宜しくお願いします。
所持ツクールはXP、VX、VXAce、MV
Twitter

リンクはフリーです。ご自由にどうぞ。

最新記事
最新コメント
カテゴリ
カウンター
T.COOL人気記事ランキング
検索フォーム
リンク
月別アーカイブ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。