マップチップごとに戦闘背景を変えたい。+α

much
記事: 28
登録日時: 2017年11月09日(木) 01:01

マップチップごとに戦闘背景を変えたい。+α

投稿記事by much » 2019年5月10日(金) 22:08

フィールドマップではマップチップごとに戦闘背景が切り替わりますが、
ダンジョンでは1つのみしか設定できません。
フィールドマップのようにマップチップごとに戦闘背景を割り振るにはどうすればいいですか?

+α 
マップチップごとに戦闘にも影響を出すことってできますか?
森の中なら「自然」系の能力値が上がる・・・とか
毒の沼では毎ターンダメージを喰らう・・・とか

同じ質問がすでにあればすみません。
返答おまちしております・・・。

ecf5DTTzl6h6lJj02
記事: 13
登録日時: 2018年12月23日(日) 13:55

Re: マップチップごとに戦闘背景を変えたい。+α

投稿記事by ecf5DTTzl6h6lJj02 » 2019年5月15日(水) 05:01

こんにちは。
フィールドマップではマップチップごとに戦闘背景が切り替わりますが、
ダンジョンでは1つのみしか設定できません。
フィールドマップのようにマップチップごとに戦闘背景を割り振るにはどうすればいいですか?

マップごとに設定しなければなりませんが(マップ数が増えるとちょっと面倒)、
以下の手順で、実現可能かと思います。

【手順】
1.マップの戦闘背景を変更したい部分にそれぞれに応じたリージョンIDを設定する。
2.マップのどこか適当な場所に並列処理のイベントを作成する。
4.下記のコマンドを追加する。

コード: 全て選択

◆注釈:まず、このマップ標準の戦闘背景に変更しておく。
◆戦闘背景の変更:’標準の戦闘背景(床)’ & ’標準の戦闘背景(壁)’
◆注釈:プレイヤーの足元のリージョンIDを取得
◆変数の操作:[0001:プレイヤーX座標] = プレイヤー の マップ X
◆変数の操作:[0002:プレイヤーY座標] = プレイヤー の マップ Y
◆指定位置の情報取得:[0003], リージョン ID, 変数 [0001][0002]

5.戦闘背景を変更用の下記のコマンドを必要な分だけ追加する。

コード: 全て選択

◆条件分岐:変数[0003:リージョンID] == リージョンID
 ◆戦闘背景の変更:’変更したい戦闘背景(床)’ & ’変更したい戦闘背景(壁)’
 ◆
:分岐終了

以上

+αに関してですが、
毒の沼では毎ターンダメージを喰らう

に関しては下記のスクリプトを入れれば実現できると思います。
毒の沼だけでなく、ダメージ床に乗っているときは毎ターンダメージになってます。

コード: 全て選択

=begin
============================================================================
  ■RGSS3
  ■ダメージ床に乗っているとき戦闘中ターン終了時にダメージを受けるスクリプト
        2019/05/15 by ecf5DTTzl6h6lJj02
----------------------------------------------------------------------------
  表題のとおりです。
  HP の再生 のメソッド中で処理しており、スリップダメージとして扱っています。
 
  戦闘開始時の文言以外は特にいじる部分は無いです。
 
  競合対策はできていないので、HP の再生のメソッドを変更しているスクリプトが
  入っているときは、競合で動作がおかしくなる可能性が高いです。
============================================================================
=end

if true             #このスクリプト全体使わないときはfalseに変更
#------------------↓この囲みの中はtrueのときのみ有効↓----------------------
module BattleManager
  #--------------------------------------------------------------------------
  # ● 戦闘開始
  #     2019/05/12
  #       ダメージ床の中にいるのでダメージを受ける旨のメッセージ表示を追加
  #       文言は好みに合わせて変更してください
  #       必要ない場合、このモジュールを消去してもかまわないです。
  #--------------------------------------------------------------------------
  def self.battle_start
    $game_system.battle_count += 1
    $game_party.on_battle_start
    $game_troop.on_battle_start
    $game_troop.enemy_names.each do |name|
      $game_message.add(sprintf(Vocab::Emerge, name))
    end
    if @preemptive
      $game_message.add(sprintf(Vocab::Preemptive, $game_party.name))
    elsif @surprise
      $game_message.add(sprintf(Vocab::Surprise, $game_party.name))
    end
    wait_for_message
    unless $BTEST                           #戦闘テスト時除外
      if $game_player.on_damage_floor?      #ダメージ床上にいる
        #ダメージ床の上にいる旨を表示
        $game_message.add("ダメージ床滞在中\n毎ターン終了時ダメージを受けます")
        wait_for_message
      end
    end     
  end
end
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● HP の再生
  #--------------------------------------------------------------------------
  def regenerate_hp
    damage = -(mhp * hrg).to_i
   
    #ダメージ床によるダメージ適用(戦闘テスト時は除外)
    damage += execute_floor_damage if !$BTEST && $game_player.on_damage_floor?
   
    perform_map_damage_effect if $game_party.in_battle && damage > 0
    @result.hp_damage = [damage, max_slip_damage].min
    self.hp -= @result.hp_damage
  end
  #--------------------------------------------------------------------------
  # ● 床ダメージの処理
  #--------------------------------------------------------------------------
  def execute_floor_damage
    return (basic_floor_damage * fdr).to_i
  end
  #--------------------------------------------------------------------------
  # ● 床ダメージの基本値を取得
  #--------------------------------------------------------------------------
  def basic_floor_damage
    return 10
  end
end
#------------------↑この囲みの中はtrueのときのみ有効↑----------------------
end

コード内にも書いてありますが競合対策ができてませんのでご注意ください。

問題は、
森の中なら「自然」系の能力値が上がるとか

の部分です。
これは、特定のタイル上で対応する魔法/スキルの属性有効度が上がるようにしたい、例えば、
雪原のタイル上にいるときは氷属性の魔法/スキルを使用したときの属性有効度を上げたい。
という趣旨でよろしいのでしょうか。
この趣旨だと、(特にフィールドマップにおいて)地形ごとに敵の設定をし、おそらく、その地形の属性に耐性のある敵を出現させるであろうと予測される中で、ほぼ意味の無いものに思えるのですが。
趣旨をもう少し具体的に教えて頂けると助かります。

“VX / Ace:質問” へ戻る