#==============================================================================
# ■ VXAce-RGSS3-25 強くてニューゲーム [Ver.1.1.0] by Claimh
#------------------------------------------------------------------------------
# ・ゲームクリア時のデータを引き継いで、最初から始めることができます。
#------------------------------------------------------------------------------
#【引継ぎ対象】
# $game_temp (Game_Temp) : ×
# $game_system (Game_System) : ○
# $game_timer (Game_Timer) : ×
# $game_message (Game_Message) : ×
# $game_switches (Game_Switches) : ○
# $game_variables (Game_Variables) : ○
# $game_self_switches (Game_SelfSwitches) : ×
# $game_actors (Game_Actors) : ○
# $game_party (Game_Party) : ○
# $game_troop (Game_Troop) : ×
# $game_map (Game_Map) : ×
# $game_player (Game_Player) : ×
#------------------------------------------------------------------------------
#【クリア設定】
# $game_system.game_clear
#【クリア済み情報取得】
# $game_system.game_clear?
#【クリア回数取得】
# $game_system.clrd.count
#------------------------------------------------------------------------------
# (注) 要・〇〇と書いてある項目を導入していない場合はtrueに設定すること。
#==============================================================================
module Renewgame
# 強くてニューゲームロード時のSE
RENEW_SE = RPG::SE.new("Barrier")
#---------------------------------------------------------------------------
# ● システム情報(Game_System)引継ぎ設定
#---------------------------------------------------------------------------
# 戦闘回数を引き継ぐ
RENEW_BATTLE_CNT = true
# セーブ回数を引き継ぐ
RENEW_SAVE_CNT = true
# プレイ時間を引き継ぐ
RENEW_TIME = true
# 用語辞典情報を引き継ぐ(要・用語辞典)
RENEW_DICTIONAY = true
# クエスト情報を引き継ぐ(要・クエストシステム)
RENEW_QUEST = true
# 鍛冶情報を引き継ぐ(要:鍛冶屋)
RENEW_BLACKSMITH = true
# ワールドマップ情報を引き継ぐ(要:ワールドマップ)
RENEW_WORLDMAP = true
# フィールドマップ情報を引き継ぐ(要:フィールドマップ)
RENEW_FIELDMAP = true
#---------------------------------------------------------------------------
# ● スイッチ情報(Game_Switches)引継ぎ設定
#---------------------------------------------------------------------------
# 引き継ぐスイッチIDリスト
RENEW_SW = [1, 10]
#---------------------------------------------------------------------------
# ● 変数情報(Game_Variables)引継ぎ設定
#---------------------------------------------------------------------------
# 引き継ぐ変数IDリスト
RENEW_VAL = [1, 5]
#---------------------------------------------------------------------------
# ● パーティ情報(Game_Party)引継ぎ設定
#---------------------------------------------------------------------------
# 何も引き継がない(true時は、以降の設定不要)
PT_NOT_RENEW = false
# お金を引き継ぐ
RENEW_GOLD = true
# 歩数を引き継ぐ
RENEW_STEP = true
# アイテムを引き継ぐ
RENEW_ITEM = true
# 引き継がないアイテムIDリスト
NOT_RENEW_ITEMS = [5, 15]
# 武器を引き継ぐ
RENEW_WEAPON = true
# 引き継がない武器IDリスト
NOT_RENEW_WEAPONS = [20, 25]
# 防具を引き継ぐ
RENEW_ARMOR = true
# 引き継がない防具IDリスト
NOT_RENEW_ARMORS = [9, 23]
# クエストランクを引き継ぐ(要・クエストシステム)
RENEW_QUEST_RANK = true
#---------------------------------------------------------------------------
# ● アクター情報(Game_Actor)引継ぎ設定
# 名前、キャラクター、顔グラフィックは初期化します
#---------------------------------------------------------------------------
# 何も引き継がない(true時は、以降の設定不要)
ACT_NOT_RENEW = false
# 初期化する(何も引き継がない)アクターIDリスト
NOT_RENEW_ACTORS = [2]
# 職業引継ぎ
RENEW_CLASS = true
# レベル(経験値)引継ぎ
RENEW_LV = true
# 二つ名引継ぎ
RENEW_NICKNAME = true
# スキル引継ぎ
RENEW_SKILL = true
# 引き継がないスキルIDリスト
NOT_RENEW_SKILLS = {
# アクターID => [スキルID, …],
0 => [22],
1 => [23]
}
# 能力値変化の引継ぎ
RENEW_PARAM = true
# 装備品引継ぎ
RENEW_EQUIP = true
# 熟練度引き継ぎ(要・熟練度システム)
RENEW_ATTR_LV = true
##############################################################################
#--------------------------------------------------------------------------
# ● データチェック
#--------------------------------------------------------------------------
def self.chk_include?(ary, id)
return false if ary.nil?
ary.include?(id)
end
#--------------------------------------------------------------------------
# ● アクタースキル引き継ぎ可否判定
#--------------------------------------------------------------------------
def self.chk_skill(actor_id, skill_id)
return true if chk_include?(NOT_RENEW_SKILLS[0], skill_id)
return true if chk_include?(NOT_RENEW_SKILLS[actor_id], skill_id)
false
end
#--------------------------------------------------------------------------
# ● アイテム引き継ぎ
#--------------------------------------------------------------------------
def self.lose_items
flag = [RENEW_ITEM, RENEW_WEAPON, RENEW_ARMOR]
ary = [NOT_RENEW_ITEMS, NOT_RENEW_WEAPONS, NOT_RENEW_ARMORS]
flag.each_index do |i|
flag[i] ? lose_select_items(pitems(i), ary[i]) : $game_party.init_items(i)
end
end
#--------------------------------------------------------------------------
# ● partyアイテム
#--------------------------------------------------------------------------
def self.pitems(type)
case type
when 0; return $game_party.items
when 1; return $game_party.weapons
when 2; return $game_party.armors
end
end
#--------------------------------------------------------------------------
# ● 抽出アイテムを全部捨てる
#--------------------------------------------------------------------------
def self.lose_select_items(items, ary)
$game_party.lose_all_items(items.select {|item| ary.include?(item.id)}, true)
end
end
#==============================================================================
# ■ Renewgame::ClearData : クリア情報クラス
#==============================================================================
class Renewgame::ClearData
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :renew # 強くてニューゲーム発動フラグ
attr_reader :clear # クリア済みフラグ
attr_reader :count # クリア回数
attr_reader :time # クリア時間
attr_reader :lv_ave # 平均レベル
attr_reader :lv_max # 最大レベル
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
@renew = false
@clear = false
@count = 0
@time = [0]
@lv_ave = [0]
@lv_max = [0]
end
#--------------------------------------------------------------------------
# ● クリア設定
#--------------------------------------------------------------------------
def game_clear
@renew = true
@clear = true
@count += 1
members = $game_party.members
set_clear_time
@time[@count] -= @time[@count-1] if Renewgame::RENEW_TIME
@lv_ave[@count] = members.inject(0) {|r, a| r += a.level} / members.size
@lv_max[@count] = $game_party.highest_level
end
#--------------------------------------------------------------------------
# ● クリア時間設定
#--------------------------------------------------------------------------
def set_clear_time
@time[@count] = $game_system.playtime
end
#--------------------------------------------------------------------------
# ● クリアまでに費やした合計時間
#--------------------------------------------------------------------------
def played_time
return @time[@count] unless Renewgame::RENEW_TIME
@count.inject(0) {|r, i| r += @time[i+1]}
end
end
#==============================================================================
# ■ DataManager
#==============================================================================
class << DataManager
#--------------------------------------------------------------------------
# ● セーブヘッダの作成
#--------------------------------------------------------------------------
alias make_save_header_renew make_save_header
def make_save_header
header = make_save_header_renew
header[:game_clear] = $game_system.game_clear?
header[:regame] = $game_system.clrd.renew
header
end
end
#==============================================================================
# ■ Scene_Load
#==============================================================================
class Scene_Load < Scene_File
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
create_renew_window
end
#--------------------------------------------------------------------------
# ● 強くてニューゲーム発動ウィンドウ生成
#--------------------------------------------------------------------------
def create_renew_window
@renew_window = Window_RenewGame.new
@renew_window.set_handler(:renew_yes, method(:renew_yes))
@renew_window.set_handler(:cancel, method(:renew_no))
end
#--------------------------------------------------------------------------
# ● セーブファイル選択の更新
#--------------------------------------------------------------------------
def update_savefile_selection
return if @renew_window.active
super
end
#--------------------------------------------------------------------------
# ● セーブファイルの決定
#--------------------------------------------------------------------------
alias on_savefile_ok_renew on_savefile_ok
def on_savefile_ok
if renewgame?
Sound.play_ok
@renew_window.activate.open.index = 1
@help_window.set_text("クリア時のデータを引き継いで新しく始めますか?")
else
on_savefile_ok_renew
end
end
#--------------------------------------------------------------------------
# ● 強くてニューゲーム用セーブデータ?
#--------------------------------------------------------------------------
def renewgame?
header = DataManager.load_header(@index)
return false unless header
header[:regame]
end
#--------------------------------------------------------------------------
# ● 強くてニューゲーム時の処理
#--------------------------------------------------------------------------
def renew_yes
if DataManager.load_game(@index)
on_renew_success
else
@help_window.set_text(help_window_text)
Sound.play_buzzer
end
@renew_window.deactivate.close
end
#--------------------------------------------------------------------------
# ● 強くてニューゲーム成功時の処理
#--------------------------------------------------------------------------
def on_renew_success
Renewgame::RENEW_SE.play
DataManager.renew_game
$game_system.clrd.renew = false
fadeout_all
$game_map.autoplay
SceneManager.goto(Scene_Map)
end
#--------------------------------------------------------------------------
# ● 強くてニューゲーム時の処理
#--------------------------------------------------------------------------
def renew_no
@renew_window.deactivate.close
@help_window.set_text(help_window_text)
end
end
#==============================================================================
# ■ Window_RenewGame
#==============================================================================
class Window_RenewGame < Window_Command
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 0)
update_placement
deactivate.openness = 0
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
return 100
end
#--------------------------------------------------------------------------
# ● ウィンドウ位置の更新
#--------------------------------------------------------------------------
def update_placement
self.x = (Graphics.width - width) / 2
self.y = (Graphics.height - height) / 2
end
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
add_command("はい", :renew_yes)
add_command("いいえ", :cancel)
end
end
module DataManager
#--------------------------------------------------------------------------
# ● 強くてニューゲーム
#--------------------------------------------------------------------------
def self.renew_game
renew_game_data
$game_party.setup_starting_members
$game_map.setup($data_system.start_map_id)
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
end
#--------------------------------------------------------------------------
# ● 強くてニューゲーム時の各種ゲームオブジェクトのリセット
#--------------------------------------------------------------------------
def self.renew_game_data
$game_temp = Game_Temp.new
renew_game_system
$game_timer = Game_Timer.new
$game_message = Game_Message.new
renew_game_switches
renew_game_variables
$game_self_switches = Game_SelfSwitches.new
Renewgame::ACT_NOT_RENEW ? init_game_actors : renew_game_actors
Renewgame::PT_NOT_RENEW ? init_game_party : renew_game_party
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
end
#--------------------------------------------------------------------------
# ● Game_Switches初期化
#--------------------------------------------------------------------------
def self.init_game_switches
$game_switches = Game_Switches.new
end
#--------------------------------------------------------------------------
# ● Game_Variables初期化
#--------------------------------------------------------------------------
def self.init_game_variables
$game_variables = Game_Variables.new
end
#--------------------------------------------------------------------------
# ● Game_Actors初期化
#--------------------------------------------------------------------------
def self.init_game_actors
$game_actors = Game_Actors.new
end
#--------------------------------------------------------------------------
# ● Game_Party初期化
#--------------------------------------------------------------------------
def self.init_game_party
$game_party = Game_Party.new
end
#--------------------------------------------------------------------------
# ● Game_System引継ぎ
#--------------------------------------------------------------------------
def self.renew_game_system
$game_system.battle_count = 0 unless Renewgame::RENEW_BATTLE_CNT
$game_system.save_count = 0 unless Renewgame::RENEW_SAVE_CNT
$game_system.reset_playtime(Renewgame::RENEW_TIME)
$game_system.clrd.set_clear_time # セーブされていたplaytimeに補正
$game_system.dictionary.reset unless Renewgame::RENEW_DICTIONAY
$game_system.quest.reset unless Renewgame::RENEW_QUEST
$game_system.bs.reset_all unless Renewgame::RENEW_BLACKSMITH
$game_system.worldmap.reset unless Renewgame::RENEW_WORLDMAP
$game_system.init_fieldmap unless Renewgame::RENEW_FIELDMAP
#
$game_system.reset
end
#--------------------------------------------------------------------------
# ● Game_Switches引き継ぎ
#--------------------------------------------------------------------------
def self.renew_game_switches
ids = $game_switches.on_sw_ids.select {|id| Renewgame::RENEW_SW.include?(id)}
init_game_switches
ids.each {|id| $game_switches[id] = true}
end
#--------------------------------------------------------------------------
# ● Game_Variables引き継ぎ
#--------------------------------------------------------------------------
def self.renew_game_variables
vals = {}
Renewgame::RENEW_VAL.each {|id| vals[id] = $game_variables[id]}
init_game_variables
Renewgame::RENEW_VAL.each {|id| $game_variables[id] = vals[id]}
end
#--------------------------------------------------------------------------
# ● Game_Actors引き継ぎ
#--------------------------------------------------------------------------
def self.renew_game_actors
$game_actors.each {|a| renew_game_actor(a)}
end
#--------------------------------------------------------------------------
# ● Game_Actor引き継ぎ
#--------------------------------------------------------------------------
def self.renew_game_actor(actor)
if Renewgame::NOT_RENEW_ACTORS.include?(actor.id)
actor.setup(actor.id)
return
end
new_act = Game_Actor.new(actor.id)
unless Renewgame::RENEW_SKILL
actor.init_skills
else
skills = actor.skills.select {|skill| Renewgame.chk_skill(actor.id, skill.id)}
skills.each {|skill| actor.forget_skill(skill.id)}
end
actor.init_lv_exp unless Renewgame::RENEW_LV
actor.change_class(new_act.class_id) unless Renewgame::RENEW_CLASS
actor.nickname = new_act.nickname unless Renewgame::RENEW_NICKNAME
actor.clear_param_plus unless Renewgame::RENEW_PARAM
unless Renewgame::RENEW_EQUIP
actor.clear_equipments
actor.init_equips(actor.actor.equips)
end
actor.attr = ActorAttrList.new(actor.id) unless Renewgame::RENEW_ATTR_LV
#
actor.recover_all
end
#--------------------------------------------------------------------------
# ● Game_Party引き継ぎ
#--------------------------------------------------------------------------
def self.renew_game_party
$game_party.gold = 0 unless Renewgame::RENEW_GOLD
$game_party.steps = 0 unless Renewgame::RENEW_STEP
Renewgame.lose_items
$game_party.quest_rank = 1 unless Renewgame::RENEW_QUEST_RANK
end
end
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_writer :save_count # セーブ回数
attr_reader :clrd # クリア情報
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_renew initialize
def initialize
initialize_renew
@clrd = Renewgame::ClearData.new
end
#--------------------------------------------------------------------------
# ● クリア設定
#--------------------------------------------------------------------------
def game_clear
@clrd.game_clear
end
#--------------------------------------------------------------------------
# ● クリア設定
#--------------------------------------------------------------------------
def game_clear?
@clrd.clear
end
#--------------------------------------------------------------------------
# ● 変数リセット
#--------------------------------------------------------------------------
def reset
@save_disabled = false
@menu_disabled = false
@encounter_disabled = false
@formation_disabled = false
@window_tone = nil
@battle_bgm = nil
@battle_end_me = nil
@saved_bgm = nil
end
#--------------------------------------------------------------------------
# ● プレイ時間リセット
#--------------------------------------------------------------------------
def reset_playtime(load_reset=false)
@frames_on_save = 0 unless load_reset
Graphics.frame_count = @frames_on_save
end
end
class Game_Switches
#--------------------------------------------------------------------------
# ● ON状態のスイッチID取得
#--------------------------------------------------------------------------
def on_sw_ids
ids = []
@data.each_index {|i| ids.push(i) if self.[](i) }
ids
end
end
class Game_Actors
#--------------------------------------------------------------------------
# ● イテレータ
#--------------------------------------------------------------------------
def each
@data.select {|a| !a.nil?}.each {|actor| yield actor } if block_given?
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● Level, EXP初期化
#--------------------------------------------------------------------------
def init_lv_exp
@level = actor.initial_level
@exp = {}
init_exp
end
end
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_writer :gold # 所持金
attr_writer :steps # 歩数
#--------------------------------------------------------------------------
# ● アイテムリストの初期化
#--------------------------------------------------------------------------
def init_items(type)
case type
when 0; @items = {}
when 1; @weapons = {}
when 2; @armors = {}
end
end
#--------------------------------------------------------------------------
# ● アイテムをすべて捨てる
# include_equip : 装備品も含める
#--------------------------------------------------------------------------
def lose_all_item(item, include_equip = false)
lose_item(item, max_item_number(item), include_equip)
end
#--------------------------------------------------------------------------
# ● アイテムリストをすべて捨てる
# include_equip : 装備品も含める
#--------------------------------------------------------------------------
def lose_all_items(items, include_equip = false)
items.each {|item| lose_all_item(item, include_equip)}
end
end