DOUBLEX RMVXA STATE TRIGGERS

RPG Maker VX Ace

Sets some states to trigger additional effects when conditions are met

  • DoubleX
  • 04/11/2015 11:44 AM
  • 1693 views
Games using this script
None so far

Notetag
#  * State Notetags:                                                           |
#    1. <timing state trigger: stcx, stax>                                     |
#       - Sets a state to trigger stax when timing and stcx are met            |
#       - timing can be add, turn, remove or custom timings set by you         |
#       - add means the state's just added                                     |
#       - turn means the state's remaining turn's just reduced by 1            |
#       - remove means the state's just removed                                |
#       - while means the stax effects are active as long as the state's active|
#       - timing must only consist of alphanumeric characters                  |
#       - stcx can be set in State Trigger Condition Notetag Values            |
#       - stax can be set in State Trigger Action Notetag Values               |

#--------------------------------------------------------------------------|
    #  State Trigger Condition Notetag Values                                  |
    #  - Setups stcx used by this script's notetags                            |
    #--------------------------------------------------------------------------|
    # stcx are read at:
    # 1. RPG::State
    #    - (@state_triggers[$1.downcase.to_sym] ||= []).push(
    #      [$2.downcase, $3.downcase]) in load_state_triggers_notes
    # stcx are used at:
    # 1. Game_BattlerBase
    #    - st.send(trigger[0], self, state) in state_trigger_features
    # 2. Game_Battler
    #    - st.send(trigger[1], self) if st.send(trigger[0], self) in
    #      exec_state_triggers
    # stcx are strings names of methods under DoubleX_RMVXA::State_Triggers
    # stcx names can only use alphanumeric characters and can't use uppercase
    # letters
    # battler is the battler calling the stcx
    # state is the state using the stcx
    # The below stcx are examples added to help you set your stcx
    # You can freely use, rewrite and/or delete these examples

    # Sets the state trigger condition as always true
    def self.stc1(battler, state)
      true
    end

    # Sets the state trigger condition as always false
    def self.stc2(battler, state)
      false
    end

    # Sets the state trigger condition as needing switch with id x to be on
    def self.stc3(battler, state)
      $game_switches[x]
    end

    # Sets the state trigger condition as needing the state using this stcx to
    # have its number of remaining turns greater than x
    def self.stc4(battler, state)
      battler.instance_exec { @state_turns[state_id] > x }
    end

    # Adds new stcx here
    

    #--------------------------------------------------------------------------|
    #  State Trigger Action Notetag Values                                     |
    #  - Setups stax used by this script's notetags                            |
    #--------------------------------------------------------------------------| 
    # stax are read at:
    # 1. RPG::State
    #    - (@state_triggers[$1.downcase.to_sym] ||= []).push(
    #      [$2.downcase, $3.downcase]) in load_state_triggers_notes
    # stax are used at:
    # 1. Game_BattlerBase
    #    - }.collect! { |trigger| st.send(trigger[1], self, state) }.flatten! in
    #      state_trigger_features
    # 2. Game_Battler
    #    - st.send(trigger[1], self) if st.send(trigger[0], self) in
    #      exec_state_triggers
    # stax are strings of names of methods under DoubleX_RMVXA::State_Triggers
    # stax names can only use alphanumeric characters and can't use uppercase
    # letters
    # battler is the battler calling the stax
    # state is the state using the stax
    # If the timing using the stax is while, the stax must return an array of
    # RPG::BaseItem::Feature
    # You can refer to Game_BattlerBase and RPG::BaseItem::Feature for more info
    # The below stax are examples added to help you set your stax
    # You can freely use, rewrite and/or delete these examples

    # Sets the state trigger action as what Special Effect Escape does
    # This stax's not supposed to work with the timing while as it doesn't
    # return an array of RPG::BaseItem::Feature
    def self.sta1(battler, state)
      battler.hide
    end

    # Sets the state trigger action as calling common event with id
    # common_event_id
    # This stax's not supposed to work with the timing while as it doesn't
    # return an array of RPG::BaseItem::Feature
    def self.sta2(battler, state)
      $game_temp.reserve_common_event(common_event_id)
    end

    # Sets the state trigger action as executing damage equal to the value of
    # game variable with id x to self with type equal to that of skill with id
    # equal to y
    # This stax's not supposed to work with the timing while as it doesn't
    # return an array of RPG::BaseItem::Feature
    def self.sta3(battler, state)
      battler.result.clear
      battler.result.make_damage($game_variables[x], $data_skills[y])
      battler.execute_damage(battler)
    end

    # Sets the state trigger action as multiplying the battler's atk by x * 100%
    # This stax's supposed to work with the timing while as it returns an array
    # of RPG::BaseItem::Feature
    def self.sta4(battler, state)
      [RPG::BaseItem::Feature.new(21, 2, x)]
    end

    # Adds new stax here


Script Call
#  * Battler manipulations                                                     |
#    1. exec_state_triggers(state_id, timing)                                  |
#       - Executes all state triggers with timing timing of state with id      |
#         state_id                                                             |
#    2. state_trigger_features(state, timing)                                  |
#       - Returns an array of features returned by all stax meeting stcx with  |
#         timing timing of state                                               |
#       - This script call's not supposed to work with timing add, turn nor    |
#         remove but supposed to work with timing while                        |


Prerequisites
Abilities:
1. Decent RGSS3 scripting proficiency to fully utilize this script

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

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

Authors
DoubleX

Changelog
#    v1.03b(GMT 1400 10-5-2016):                                               |
#    1. timing while won't replace but will combine the state's existing       |
#       features with all stax meeting the corresponding stcx                  |
#    v1.03a(GMT 1500 9-5-2016):                                                |
#    1. adding the timing while to <timing state trigger: stcx, stax>          |
#    v1.02a(GMT 1300 26-2-2016):                                               |
#    1. stcx and stax take the state calling them as an argument as well       |
#    v1.01b(GMT 0300 7-11-2015):                                               |
#    1. Notetag values are now symbols of methods in the configuration regions |
#    2. This script doesn't need DoubleX RMVXA State Triggers Compatibility to |
#       be compatible with all its addressed scripts                           |
#    3. Further improved this script's compatibility, efficiency and simplicity|
#    v1.01a(GMT 1100 8-5-2015):                                                |
#    1. Lets users use state triggers with timings set by them                 |
#    v1.00g(GMT 1600 4-5-2015):                                                |
#    1. Improved this script's efficiency                                      |
#    v1.00f(GMT 0300 25-4-2015):                                               |
#    1. Improved this script's effectiveness                                   |
#    v1.00e(GMT 1400 21-4-2015):                                               |
#    1. Further improved this script's robustness                              |
#    v1.00d(GMT 1500 14-4-2015):                                               |
#    1. Improved this script's robustness                                      |
#    v1.00c(GMT 0200 12-4-2015):                                               |
#    1. Fixed triggering remove actions upon adding state resists bug          |
#    2. Fixed not triggering remove actions upon death, escape and recovery bug|
#    v1.00b(GMT 1400 11-4-2015):                                               |
#    1. Fixed not supporting multiple notetags on the same state bug           |
#    v1.00a(GMT 1100 11-4-2015):                                               |
#    1. 1st version of this script finished                                    |