Permanent
Creation

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


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

#----------------------------------------------------------------------------
# ◆ Scene_DoublePlayersLoad クラス
#----------------------------------------------------------------------------
class Scene_DoublePlayersLoad < Scene_File
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super("1P のファイルを選んでください。")
  end
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  def main
    $game_temp = Game_Temp.new
    $game_temp.doubleplayers_mode = true
    $game_temp.last_file_index = 0
    latest_time = Time.at(0)
    for i in 0..3
      filename = make_filename(i)
      if FileTest.exist?(filename)
        file = File.open(filename, "r")
        if file.mtime > latest_time
          latest_time = file.mtime
          $game_temp.last_file_index = i
        end
        file.close
      end
    end
    @player_index = 0
    @normal_windowskin = RPG::Cache.windowskin($data_system.windowskin_name)
    @decided_windowskin =
      RPG::Cache.windowskin($data_system.windowskin_name).clone
    @decided_windowskin.hue_change(180)
    $game_doubleplayers = []
    super
    @decided_windowskin.dispose
  end
  #--------------------------------------------------------------------------
  # ● 決定時の処理
  #--------------------------------------------------------------------------
  def on_decision(filename)
    unless FileTest.exist?(filename)
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    if @player_index == 0 or @file_index != @p1_index
      $game_system.se_play($data_system.load_se)
      file = File.open(filename, "rb")
      read_save_data(file)
      file.close
      if @player_index == 2
        $game_system.bgm_stop
        $game_system.se_play($data_system.battle_start_se)
        $game_system.bgm_play(Lfer::DP_BATTLE_BGM)
        $scene = Scene_DoublePlayersBattle.new
      end
    else
      $game_system.se_play($data_system.decision_se)
      @player_index = 0
      $game_doubleplayers[0] = nil
      @savefile_windows[@p1_index].windowskin = @normal_windowskin
      @help_window.set_text("1P のファイルを選んでください。")
    end
  end
  #--------------------------------------------------------------------------
  # ● キャンセル時の処理
  #--------------------------------------------------------------------------
  def on_cancel
    $game_system.se_play($data_system.cancel_se)
    if @player_index > 0
      @player_index = 0
      $game_doubleplayers[0] = nil
      @savefile_windows[@p1_index].windowskin = @normal_windowskin
      @help_window.set_text("1P のファイルを選んでください。")
    else
      $game_temp.doubleplayers_mode = false
      $scene = Lfer::DP_END_SCENE.new
    end
  end
  #--------------------------------------------------------------------------
  # ● セーブデータの読み込み
  #     file : 読み込み用ファイルオブジェクト (オープン済み)
  #--------------------------------------------------------------------------
  def read_save_data(file)
    until file.eof?
      game = Marshal.load(file) rescue break
      case game
      when Game_Actors then game_actors = game
      when Game_Party  then game_party  = game
      end
    end
    $game_doubleplayers[@player_index] = Game_DoublePlayers.new(game_actors,
      game_party, @player_index)
    $game_doubleplayers[@player_index].refresh
    for actor in $game_doubleplayers[@player_index].actors
      actor.recover_all
    end
    @player_index += 1
    @help_window.set_text("2P のファイルを選んでください。")
    @savefile_windows[@p1_index = @file_index].windowskin =
      @decided_windowskin
  end
end

戻る