【RGSS3】身代わり条件チェックの項目追加

せくもん
記事: 72
登録日時: 2018年6月09日(土) 21:48

【RGSS3】身代わり条件チェックの項目追加

投稿記事by せくもん » 2021年3月27日(土) 21:54

いつもお世話になっております。

現在制作中のゲームではScene_Battleの639行目以降を

コード: 全て選択

  #--------------------------------------------------------------------------
  # ● 身代わり条件チェック
  #--------------------------------------------------------------------------
  def check_substitute(target, item)
    target.hp > 0 && (!item || !item.certain?) && (!item.for_all?)
  end

の様に改変し、身代わり発動の条件を

1.味方のHP残量に関わらず身代わりをする。
2.命中タイプ『必中』のスキルは身代わりしない。
3.敵全体を攻撃するスキルは身代わりしない。

と設定しています。
ここから更に

4.ステートID:13(隠れる)を付加したアクター・エネミーの全攻撃スキルは身代わりしない。
5.装飾品・エネミーのメモ欄に<物理身代わり無効>の記述のある物理攻撃スキルは身代わりしない。
6.装飾品・エネミーのメモ欄に<魔法身代わり無効>の記述のある魔法攻撃スキルは身代わりしない。

といった条件を追加したいのですが、どの様にスクリプトを記述したらよいでしょうか?

名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: 【RGSS3】身代わり条件チェックの項目追加

投稿記事by 名無し蛙 » 2021年3月28日(日) 02:06

せくもん さんが書きました:5.装飾品・エネミーのメモ欄に<物理身代わり無効>の記述のある物理攻撃スキルは身代わりしない。
6.装飾品・エネミーのメモ欄に<魔法身代わり無効>の記述のある魔法攻撃スキルは身代わりしない。

これはタグ付けされた装備品を装備したアクター、またはエネミーが使用する物理(魔法)攻撃スキルは
被対象陣営が持つ身代わり能力を貫通する、という意味で合ってますか?
つまり上記の(隠れる)ステートを機能限定した下位互換と。
拡張性を考えると三つとも独自特徴化する方法をオススメします。

コード: 全て選択

module Frog
  FEATURE_SPECIAL_FLAG  = Game_BattlerBase::FEATURE_SPECIAL_FLAG
  FLAG_SUBSTITUTE_PIERCE            = 10
  FLAG_SUBSTITUTE_PIERCE_PHYSICAL   = 11
  FLAG_SUBSTITUTE_PIERCE_MAGICAL    = 12
end

class RPG::BaseItem
  #--------------------------------------------------------------------------
  # ● note解析
  #--------------------------------------------------------------------------
  def note_analyze
    @note.each_line do |text|
      case text.chomp
      when "<身代わり無効>"
        @features.push Feature.new(Frog::FEATURE_SPECIAL_FLAG, Frog::FLAG_SUBSTITUTE_PIERCE)
      when "<物理身代わり無効>"
        @features.push Feature.new(Frog::FEATURE_SPECIAL_FLAG, Frog::FLAG_SUBSTITUTE_PIERCE_PHYSICAL)
      when "<魔法身代わり無効>"
        @features.push Feature.new(Frog::FEATURE_SPECIAL_FLAG, Frog::FLAG_SUBSTITUTE_PIERCE_MAGICAL)
      end
    end
  end
end

class << DataManager
  #--------------------------------------------------------------------------
  # ○ 通常のデータベースをロード
  #--------------------------------------------------------------------------
  alias :_ex_features_load_normal_database :load_normal_database
  def load_normal_database
    _ex_features_load_normal_database
    container = $data_actors + $data_enemies + $data_armors + $data_states
    container.compact.each do |data_iterator|
      data_iterator.note_analyze
    end
  end
end

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 貫通アイテムか?
  #--------------------------------------------------------------------------
  def item_pierce?(item)
    special_flag(Frog::FLAG_SUBSTITUTE_PIERCE) ||
      (special_flag(Frog::FLAG_SUBSTITUTE_PIERCE_PHYSICAL) && item.physical?) ||
      (special_flag(Frog::FLAG_SUBSTITUTE_PIERCE_MAGICAL) && item.magical?)
  end
end

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ○ 身代わり条件チェック
  #--------------------------------------------------------------------------
  def check_substitute(target, item)
    target.hp > 0 && (!item || !item.certain?) && (!item.for_all?) && !@subject.item_pierce?(item)
  end
end

流石に戦闘動作チェックは面倒くさくてしていないですが大した事はしていないので動くはず
隠れるステートには<身代わり無効>タグも付けておいてください

※半角記号と全角記号が入り混じっていると気持ち悪いので修正。記号<>は半角で統一します。
<身代わり無効>
<物理身代わり無効>
<魔法身代わり無効>
せくもん
記事: 72
登録日時: 2018年6月09日(土) 21:48

Re: 【RGSS3】身代わり条件チェックの項目追加

投稿記事by せくもん » 2021年3月28日(日) 22:31

名無し蛙様、ご返答ありがとうございます。

>これはタグ付けされた装備品を装備したアクター、またはエネミーが使用する物理(魔法)攻撃スキルは
>被対象陣営が持つ身代わり能力を貫通する、という意味で合ってますか?

言葉足らずで申し訳ございません。その意味で合っています。

こちらで戦闘動作チェックをした所、想定通りの動きを確認できました。
どうもありがとうございました。

“VX / Ace:質問” へ戻る