DoubleX RMVXA Variable Pointers
Version: v1.01a
IntroductionVersion: v1.01a
* Lets users set some variables to point to some other variables
Prerequisites
* Basic pointer, script call and game variable knowledge
* Little RGSS3 scripting proficiency to fully utilize this script
Script
"script"
Code:
#==============================================================================|
# ** Script Info |
#------------------------------------------------------------------------------|
# * Script Name |
# DoubleX RMVXA Variable Pointers |
#------------------------------------------------------------------------------|
# * Functions |
# Lets users set some variables to point to some other variables |
#------------------------------------------------------------------------------|
# * Terms Of Use |
# You shall keep this script's Script Info part's contents intact |
# You shalln't claim that this script is written by anyone other than |
# DoubleX or his aliases |
# None of the above applies to DoubleX or his aliases |
#------------------------------------------------------------------------------|
# * Prerequisites |
# Abilities: |
# 1. Basic pointer, script call and game variable knowledge |
# 2. Little RGSS3 scripting proficiency to fully utilize this script |
#------------------------------------------------------------------------------|
# * Instructions |
# 1. Open the script editor and put this script into an open slot between |
# Materials and Main, save to take effect. |
#------------------------------------------------------------------------------|
# * Links |
# Script Usage 101: |
# 1. forums.rpgmakerweb.com/index.php?/topic/32752-rmvxa-script-usage-101/ |
# 2. rpgmakervxace.net/topic/27475-rmvxa-script-usage-101/ |
# This script: |
# 1. http://pastebin.com/f9rTGXFw |
# Mentioned Patreon Supporters: |
# https://www.patreon.com/posts/71738797 |
#------------------------------------------------------------------------------|
# * Authors |
# DoubleX |
#------------------------------------------------------------------------------|
# * Changelog |
# v1.01a(GMT 1300 2-6-2015): |
# 1. Users can set "pointers to pointers to pointers..." for some variables |
# v1.00a(GMT 1500 1-6-2015): |
# 1. 1st version of this script finished |
#==============================================================================|
#==============================================================================|
# ** Script Call Info |
#------------------------------------------------------------------------------|
# * Variable manipulations |
# 1. $game_variables.var_pointers[var_id] = [pointer_val, chain_flag] |
# - Sets the variable with id var_id to point to the variable with id |
# pointer_val if pointer_val is an integer greater than 0 |
# - Sets the variable with id var_id to stop pointing to any variable if |
# pointer_val isn't an integer or is less than or equal to 0 |
# - When a variable isn't pointing to any variable and the former's |
# being read/written, only it'll be actually read/written |
# - When variable A points to variable B with A's chain_flag as false or |
# B not pointing to any variable, and A's being read/written, only B |
# will actually be read/written instead |
# - When variable A points to variable B with A's chain_flag as true and |
# B pointing to variable C with B's chain flag as false or C not |
# pointing to any variable, and A's being read/written, only C will |
# actually be read/written instead |
# - When variable A points to variable B with A's chain_flag as true and |
# B pointing to variable A with B's chain flag as true, both A and B |
# effectively points to their respective selfs instead |
# - When a variable points to itself, it effectively doesn't point to any|
# variable |
# 2. $game_variables.var_pointers[var_id][0] = |
# $game_variables.var_pointers[var_id][0].to_s |
# - Deactivates the pointer behavior for variable with id var_id while |
# still keeping its pointer record with its chain flag |
# 3. $game_variables.var_pointers[var_id][0] = |
# $game_variables.var_pointers[var_id][0].to_i |
# - Activates the pointer behavior for variable with id var_id using its |
# pointer record with its chain flag |
#==============================================================================|
($doublex_rmvxa ||= {})[:Variable_Pointers] = "v1.01a"
#==============================================================================|
# ** Script Implementations |
# You need not edit this part as it's about how this script works |
#------------------------------------------------------------------------------|
# * Script Support Info: |
# 1. Prerequisites |
# - Solid understanding of game variables and pointers |
# - Some RGSS3 scripting proficiency to fully comprehend this script |
# 2. Method documentation |
# - The 1st part informs whether the method's rewritten, aliased or new |
# - The 2nd part describes what the method does for new methods only |
# - The 3rd part describes what the arguments of the method are |
# - The 4th part describes how this method works for new methods only, |
# and describes the parts added or rewritten for rewritten or aliased |
# methods only |
# Example: |
# #----------------------------------------------------------------------------|
# # Rewrite/Alias/New method: def_name |
# # - What this method does |
# #----------------------------------------------------------------------------|
# # *args: What these arguments are |
# def def_name(*args) |
# # How this method works |
# def_name_code |
# # |
# end # def_name |
#------------------------------------------------------------------------------|
#------------------------------------------------------------------------------|
# * Edit class: Game_Variables |
#------------------------------------------------------------------------------|
class Game_Variables
#----------------------------------------------------------------------------|
# New public instance variable |
#----------------------------------------------------------------------------|
attr_reader :var_pointers # Stores the variable pointer records
#----------------------------------------------------------------------------|
# Alias method: initialize |
#----------------------------------------------------------------------------|
alias initialize_var_pointers initialize
def initialize
initialize_var_pointers
# Added to store the var_id => [pointer_val, chain_flag] records
@var_pointers = {}
#
end # initialize
#----------------------------------------------------------------------------|
# Alias method: [] |
#----------------------------------------------------------------------------|
alias get_var_pointers []
def [](var_id)
# Rewritten to get the pointed variable instead if it points to a variable
get_var_pointers(search_var_pointers([var_id]))
#
end
#----------------------------------------------------------------------------|
# Alias method: []= |
#----------------------------------------------------------------------------|
alias set_var_pointers []=
def []=(var_id, val)
# Rewritten to set the pointed variable instead if it points to a variable
set_var_pointers(search_var_pointers([var_id]), val)
#
end
#----------------------------------------------------------------------------|
# (v1.01a+)New method: search_var_pointers |
# - Returns the destinated id of the variable that is actually pointed to |
#----------------------------------------------------------------------------|
# ids: The array storing the initial variable id as its sole element
def search_var_pointers(ids)
while @var_pointers.include?(ids[-1])
# Stop searching when false chain flag or cycle chaining's detected
chain = @var_pointers[ids[-1]][1]
cycle = ids.include?(@var_pointers[ids[-1]][0])
ids << @var_pointers[ids[-1]][0]
break unless chain && !cycle
#
end
ids[-1]
end # search_var_pointers
end # Game_Variables
#------------------------------------------------------------------------------|
#==============================================================================|
Instructions
Open the script editor and put this script into an open slot between Materials and Main. Save to take effect.
FAQ
None so far
Credits and Thanks
None
Author's Notes
None
Terms and Conditions
You shall keep this script's Script Info part's contents intact
You shalln't claim that this script is written by anyone other than DoubleX or his aliases
None of the above applies to DoubleX or his aliases
Changelog
v1.01a(GMT 1300 2-6-2015)
1. Users can set "pointers to pointers to pointers..." for some variables
v1.00a(GMT 1500 1-6-2015):
1. 1st version of this script finished