sacred-ritual-academy/Scripts/_.26.rb
2025-03-18 19:45:34 -05:00

182 lines
No EOL
8.6 KiB
Ruby
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#==============================================================================
# ■ 共有変数スクリプト (VX Ace用)
#------------------------------------------------------------------------------
# 製作者 : CanariAlternate
# サイト名 : カルトの鳥篭
# サイトURL : http://canarialt.blog.fc2.com
#------------------------------------------------------------------------------
# ■ 概要 : イベントコマンド「コモンイベント」にて生成される Game_Interpreter の
# オブジェクトとインスタンス変数を共有する仕様にする。
# イベントコマンド「コモンイベント」でセーブを行うとロードした際に
# それ以降のイベントコマンドが実行されないバグを修正する。
# Game_Interpreter のインスタンス変数(一部除く)をセーブする仕様にする。
#
# ■ 必須 : なし
#
# ■ 位置 : 「Game_Interpreter」より下
#------------------------------------------------------------------------------
# 更新履歴 : 2012/10/05 Ver1.00 コードを共通処理スクリプトから分離
# 2013/02/19 Ver1.01 共通処理スクリプトの廃止による変更を施した。
# 2013/05/11 Ver1.02 インスタンス変数をセーブできる仕様に変更した。
# イベントコマンドが処理されないバグの修正を追加した。
#==============================================================================
$imported ||= {}
$imported[:CanariAlternate_InterpreterMemory] = true
#==============================================================================
# ■ Calt
#------------------------------------------------------------------------------
#  CanariAlternateが製作したスクリプト用のモジュールです。
#==============================================================================
module Calt
#----------------------------------------------------------------------------
# イベントコマンド「コモンイベント」で共有しないインスタンス変数のリスト
NOT_TRANSFER = [:@depth,
:@map_id,
:@event_id,
:@list,
:@index,
:@branch,
:@fiber,
:@child]
#----------------------------------------------------------------------------
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
#  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● クリア [追加]
#--------------------------------------------------------------------------
alias clear_InterpreterMemory clear
def clear
@child = nil # コモンイベントのインタプリタ
clear_InterpreterMemory
end
#--------------------------------------------------------------------------
# ● イベントのセットアップ [追加]
#--------------------------------------------------------------------------
alias setup_InterpreterMemory setup
def setup(*args)
ivar_data = args[-1].is_a?(IVer_Data) ? args.pop : nil
setup_InterpreterMemory(*args)
load_ivar_data(ivar_data) if ivar_data
end
#--------------------------------------------------------------------------
# ● オブジェクトのダンプ [◆再定義]
#--------------------------------------------------------------------------
def marshal_dump
ivar_data = create_ivar_data
ivar_data[:@index] += 1
return ivar_data
end
#--------------------------------------------------------------------------
# ● オブジェクトのロード [◆再定義]
#--------------------------------------------------------------------------
def marshal_load(ivar_data)
load_ivar_data(ivar_data)
create_fiber
end
#--------------------------------------------------------------------------
# ● イベントコマンドの実行 [追加]
#--------------------------------------------------------------------------
alias execute_command_InterpreterMemory execute_command
def execute_command
if @child
@index -= 1 # セーブ・ロードで実行位置がズレないように1つ戻しておく
@child.run
load_ivar_data(@child.child_ivar_data) # 変数を引き継ぐ
@child = nil
@index += 1
end
execute_command_InterpreterMemory
end
#--------------------------------------------------------------------------
# ● コモンイベント [◆再定義]
#--------------------------------------------------------------------------
def command_117
common_event = $data_common_events[@params[0]]
if common_event
@child = Game_Interpreter.new(@depth + 1)
@child.setup(common_event.list, same_map? ? @event_id : 0, child_ivar_data) # 変数の引継ぎを追加
@child.run
load_ivar_data(@child.child_ivar_data) # 変数を引き継ぐ
@child = nil
end
end
#--------------------------------------------------------------------------
# ● インスタンス変数のセーブデータを生成 [新規]
#--------------------------------------------------------------------------
def create_ivar_data
ivar_data = IVer_Data.new
instance_variables.each do |variable_name|
variable = instance_variable_get(variable_name)
next if impossible_data?(variable)
ivar_data[variable_name] = variable
end
return ivar_data
end
#--------------------------------------------------------------------------
# ● インスタンス変数のロード処理 [新規]
#--------------------------------------------------------------------------
def load_ivar_data(ivar_data)
ivar_data.each do |variable_name, variable|
instance_variable_set(variable_name, variable)
end
end
#--------------------------------------------------------------------------
# ● セーブ不可なデータか判定 [新規]
#--------------------------------------------------------------------------
def impossible_data?(variable)
return true if variable.is_a?(Fiber)
return true if variable.is_a?(Sprite)
return true if variable.is_a?(Bitmap)
return true if variable.is_a?(Plane)
return true if variable.is_a?(Viewport)
return true if variable.is_a?(Window)
return false
end
#--------------------------------------------------------------------------
# ● コモンイベント引継ぎ用のセーブデータを取得 [新規]
#--------------------------------------------------------------------------
def child_ivar_data
ivar_data = create_ivar_data
Calt::NOT_TRANSFER.each {|variable_name| ivar_data.delete(variable_name) }
return ivar_data
end
end
#==============================================================================
# ■ IVer_Data
#------------------------------------------------------------------------------
#  インスタンス変数を記憶する為のクラスです。ハッシュのサブクラスです。
# セーブデータかどうかの判定にクラス判定を利用します。
#==============================================================================
class IVer_Data < Hash
# nothing
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
#  旧バージョンとの互換用の定義
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :memory # 共有変数
#--------------------------------------------------------------------------
# ● クリア [追加]
#--------------------------------------------------------------------------
alias clear_InterpreterMemory_old clear
def clear
@memory = {} # 共有変数の初期化
clear_InterpreterMemory_old
end
end