=begin
#===============================================================================
Title: Conditional States
Author: Hime
Date: Mar 23, 2014
URL: http://www.himeworks.com/2014/01/11/conditional-states/
--------------------------------------------------------------------------------
** Change log
Mar 23, 2014
- added support for resisting the placeholder state itself
Jan 11, 2014
- initial release
--------------------------------------------------------------------------------
** Terms of Use
* Free to use in non-commercial projects
* Contact me for commercial use
* No real support. The script is provided as-is
* Will do bug fixes, but no compatibility patches
* Features may be requested but no guarantees, especially if it is non-trivial
* Credits to Hime Works in your project
* Preserve this header
--------------------------------------------------------------------------------
** Description
This script allows you to create "conditional states".
A conditional state is simply a placeholder for other states, depending on the
conditions at the time the state is applied.
For example, suppose you have a skill that adds a Weak Poison state to a target
if it is not already poisoned, and adds a Strong Poison state if it has Weak
Poison inflicted. You can use a formula to determine whether the weak poison
has been added or not to determine which state should be added.
--------------------------------------------------------------------------------
** Installation
In the script editor, place this script below Materials and above Main
--------------------------------------------------------------------------------
** Usage
To create a conditional state, note-tag a state with
FORMULA
Where the formula returns a number, which is the state ID that will be applied.
If you don't want a state to be applied, you can use 0.
The following formula variables are available
a - the battler that the state will be added to
p - game party
t - game troop
s - game switches
v - game variables
--------------------------------------------------------------------------------
** Example
Assuming you have two states Weak Poison (12) and Strong Poison (13), you can
create a conditional state (14) that will add Strong Poison if Weak Poison is
already applied, or apply Weak Poison otherwise.
if a.state?(12)
13
else
12
end
#===============================================================================
=end
$imported = {} if $imported.nil?
$imported[:TH_ConditionalStates] = true
#===============================================================================
# ** Configuration
#===============================================================================
module TH
module Conditional_States
Regex = /(.*?)<\/conditional[-_ ]state>/im
end
end
#===============================================================================
# ** Rest of script
#===============================================================================
module RPG
class State < BaseItem
def conditional_state_formula
load_notetag_conditional_state unless @conditional_state_formula
return @conditional_state_formula
end
def conditional_state?
load_notetag_conditional_state if @is_conditional_state.nil?
@is_conditional_state
end
def load_notetag_conditional_state
@conditional_state_formula = "0"
@is_conditional_state = false
res = self.note.match(TH::Conditional_States::Regex)
if res
@conditional_state_formula = res[1]
@is_conditional_state = true
end
end
def eval_conditional_state(a, p=$game_party, t=$game_troop, v=$game_variables, s=$game_switches)
eval(self.conditional_state_formula)
end
end
end
class Game_Battler < Game_BattlerBase
alias :th_conditional_states_add_state :add_state
def add_state(state_id)
new_state_id = get_conditional_state(state_id)
th_conditional_states_add_state(new_state_id)
end
def get_conditional_state(state_id)
state = $data_states[state_id]
return state_id unless state.conditional_state? && state_addable?(state_id)
return state.eval_conditional_state(self)
end
end