Permanent
Creation

RPGツクールXP/VX用のRGSS素材です。
一部英語版対応です。 (A few materials can be used for English RPG MAKER XP/VX.)
競合率はルファーの独断と偏見なのでたまにハズレます。


#==============================================================================
# ■ ダブルプレイヤーモード (分割定義 7)
#------------------------------------------------------------------------------
#  2 つのデータを読み込んで対戦するシーンクラスの定義です。
# ゲーム内で使うには、 $scene = Scene_DoublePlayersLoad.new というスクリプトを
# どこかに挿入する必要があります。
# (C) ルファー
# HP  https://tkoolerlufar.pages.dev/
#==============================================================================

#----------------------------------------------------------------------------
# ◆ Scene_DoublePlayersBattle クラス
#----------------------------------------------------------------------------
class Scene_DoublePlayersBattle
  #--------------------------------------------------------------------------
  # ● プレバトルフェーズ開始
  #--------------------------------------------------------------------------
  def start_phase1
    @phase = 1
    for i in 0..1
      $game_doubleplayers[i].clear_actions
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (プレバトルフェーズ)
  #--------------------------------------------------------------------------
  def update_phase1
   start_phase2 unless judge
  end
  #--------------------------------------------------------------------------
  # ● アフターバトルフェーズ開始
  #--------------------------------------------------------------------------
  def start_phase4
    @phase = 4
    Audio.bgm_stop
    if @winner == -1
      $game_system.me_play($data_system.gameover_me)
      @help_window.set_text("引き分けになりました。")
      @help_window.pause = true
    else
      $game_system.me_play($game_system.battle_end_me)
      @help_window.set_text(sprintf("%dP が勝利しました!",
          @winner + 1, $game_doubleplayers[@winner].actors[0].name))
      @help_window.pause = true
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (アフターバトルフェーズ)
  #--------------------------------------------------------------------------
  def update_phase4
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      battle_end
    end
  end
  #--------------------------------------------------------------------------
  # ● コマンドフェーズ開始
  #--------------------------------------------------------------------------
  def start_phase2
    @phase = 2
    @player_index = 0
    @actor_index = -1
    @active_battler = nil
    phase2_next_actor
  end
  #--------------------------------------------------------------------------
  # ● 次のアクターのコマンド入力へ
  #--------------------------------------------------------------------------
  def phase2_next_actor
    begin
      if @active_battler != nil
        @active_battler.blink = false
      end
      if @actor_index == $game_doubleplayers[@player_index].actors.size - 1
        if @player_index == 0
          @player_index = 1
          @actor_index = -1
        else
          start_phase3
          return
        end
      end
      @actor_index += 1
      @active_battler =
        $game_doubleplayers[@player_index].actors[@actor_index]
      @active_battler.blink = true
    end until @active_battler.inputable?
    phase2_setup_command_window
  end
  #--------------------------------------------------------------------------
  # ● 前のアクターのコマンド入力へ
  #--------------------------------------------------------------------------
  def phase2_prior_actor
    before_actor_index = @actor_index
    begin
      if @active_battler != nil
        @active_battler.blink = false
        if @actor_index == 0
          @actor_index = before_actor_index
          @active_battler =
            $game_doubleplayers[@player_index].actors[@actor_index]
          @active_battler.blink = true
          return
        end
      end
      @actor_index -= 1
      @active_battler =
        $game_doubleplayers[@player_index].actors[@actor_index]
      @active_battler.blink = true
    end until @active_battler.inputable?
    $game_system.se_play($data_system.cancel_se)
    phase2_setup_command_window
  end
  #--------------------------------------------------------------------------
  # ● コマンドウィンドウのセットアップ
  #--------------------------------------------------------------------------
  def phase2_setup_command_window
    @command_window.mode = 1
    @command_window.help_window = @help_window
    @command_window.index = 0
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (コマンドフェーズ)
  #--------------------------------------------------------------------------
  def update_phase2
    if @enemy_arrow != nil
      update_phase2_enemy_select
    elsif @actor_arrow != nil
      update_phase2_actor_select
    elsif @command_window.mode == 1
      update_phase2_basic_command
    elsif @command_window.mode == 2
      update_phase2_skill_select
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (コマンドフェーズ : 基本コマンド)
  #--------------------------------------------------------------------------
  def update_phase2_basic_command
    @command_window.update
    if Input.trigger?(Input::B)
      phase2_prior_actor
      return
    end
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0
        $game_system.se_play($data_system.decision_se)
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
        @selected_attack = true
        start_enemy_select
      when 1
        $game_system.se_play($data_system.decision_se)
        @active_battler.current_action.kind = 1
        start_skill_select
        @selected_attack = false
      when 2
        $game_system.se_play($data_system.decision_se)
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 1
        phase2_next_actor
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (コマンドフェーズ : スキル選択)
  #--------------------------------------------------------------------------
  def update_phase2_skill_select
    @command_window.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      end_skill_select
      return
    end
    if Input.trigger?(Input::C)
      @skill = @command_window.skill
      if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      @active_battler.current_action.skill_id = @skill.id
      if @skill.scope == 1
        start_enemy_select
      elsif @skill.scope == 3 or @skill.scope == 5
        start_actor_select
      else
        end_skill_select
        phase2_next_actor
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (コマンドフェーズ : エネミー選択)
  #--------------------------------------------------------------------------
  def update_phase2_enemy_select
    @enemy_arrow.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      end_enemy_select
      return
    end
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      @active_battler.current_action.target_index = @enemy_arrow.index
      end_enemy_select
      if @skill_window != nil
        end_skill_select
      end
      if @item_window != nil
        end_item_select
      end
      phase2_next_actor
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (コマンドフェーズ : アクター選択)
  #--------------------------------------------------------------------------
  def update_phase2_actor_select
    @actor_arrow.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      end_actor_select
      return
    end
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      @active_battler.current_action.target_index = @actor_arrow.index
      end_actor_select
      if @skill_window != nil
        end_skill_select
      end
      if @item_window != nil
        end_item_select
      end
      phase2_next_actor
    end
  end
  #--------------------------------------------------------------------------
  # ● エネミー選択開始
  #--------------------------------------------------------------------------
  def start_enemy_select
    if @player_index == 0
      @enemy_arrow = Arrow_DoublePlayers.new(@spriteset.viewport2, 1, true)
    else
      @enemy_arrow = Arrow_DoublePlayers.new(@spriteset.viewport1, 0, true)
    end
    @enemy_arrow.help_window = @help_window
  end
  #--------------------------------------------------------------------------
  # ● エネミー選択終了
  #--------------------------------------------------------------------------
  def end_enemy_select
    @enemy_arrow.dispose
    @enemy_arrow = nil
  end
  #--------------------------------------------------------------------------
  # ● アクター選択開始
  #--------------------------------------------------------------------------
  def start_actor_select
    if @player_index == 0
      @actor_arrow = Arrow_DoublePlayers.new(@spriteset.viewport1, 0, false)
    else
      @actor_arrow = Arrow_DoublePlayers.new(@spriteset.viewport2, 1, false)
    end
    @actor_arrow.index = @actor_index
    @actor_arrow.help_window = @help_window
  end
  #--------------------------------------------------------------------------
  # ● アクター選択終了
  #--------------------------------------------------------------------------
  def end_actor_select
    @actor_arrow.dispose
    @actor_arrow = nil
  end
  #--------------------------------------------------------------------------
  # ● スキル選択開始
  #--------------------------------------------------------------------------
  def start_skill_select
    @command_window.actor = @active_battler
    @command_window.mode = 2
    @command_window.index = 0
  end
  #--------------------------------------------------------------------------
  # ● スキル選択終了
  #--------------------------------------------------------------------------
  def end_skill_select
    @command_window.mode = 1
    @command_window.index = 1
  end
end

戻る