##-----------------------------------------------------------------------------## Stacking States v1.1## Created by Neon Black#### For both commercial and non-commercial use as long as credit is given to## Neon Black and any additional authors. Licensed under Creative Commons## CC BY 3.0 -
http://creativecommons.org/licenses/by/3.0/.##----------------------------------------------------------------------------## ####----------------------------------------------------------------------------#### Revision Info:## v1.1 - 8.17.2013## Fixed a bug where states would wear off too soon## v1.0 - 3.15.2013## Wrote and debugged main script##----------------------------------------------------------------------------## ##$imported ||= {} ##$imported["Stack_States"] = 1.1 ## ####----------------------------------------------------------------------------#### Instructions:## Place this script in the script editor below "Materials" and above "Main".## This script allows tagged states to be stacked multiple times on a single## battler. Each stacked state acts as a separate state, which makes the## effects multiplicative rather than additive increasing the effectiveness of## the state with each use (when using params and sp-params only). To use this## script, tag any states with the following tags:#### max stack[5] -or- max stacks[5]## - Allows the state to stack up to 5 times. The number can be replaced with## any max value you would like.#### stack icon[2, 100] -or- stack icons[2 100]## - Changes the icon ID of a state to 100 when it is stacked exactly 2 times.## One of these can be made for each level of the stack and it can use any## number for the ID.###### Whenever a skill or something else adds a state to an actor, the state is## added once. To have a skill add more than 1 instance of the state to the## stack, simply have more than one instance of the "Add State" effect on the## skill. This nature also applies to removing states. When the state is## removed, only one instance of it is removed from the stack, rather than## clearing the whole stack.##----------------------------------------------------------------------------## ## ####----------------------------------------------------------------------------#### The following lines are the actual core code of the script. While you are## certainly invited to look, modifying it may result in undesirable results.## Modify at your own risk!###----------------------------------------------------------------------------class Game_BattlerBase def erase_state(state_id) @states -= [state_id] return if state?(state_id) ## Line added to prevent a stack from bugging. @state_turns.delete(state_id) @state_steps.delete(state_id) end def max_state_stack?(state_id) ## Determines if the state is at max stacks. state_stack(state_id) >= $data_states[state_id].max_stacks end def state_stack(state_id) ## Gets the number of times the state is stacked. (@states.count(state_id) || 0) end ## Ken's note: un-commented following block def state_icons ## "uniq" method added and "icon_index" changed. icons = states.uniq.collect {|state| state.icon_index(state_stack(state.id)) } icons.delete(0) icons endendclass Game_Battler < Game_BattlerBase def add_state(state_id) if state_addable?(state_id) ## Line below changed to allow stacking states. add_new_state(state_id) unless max_state_stack?(state_id) reset_state_counts(state_id) @result.added_states.push(state_id).uniq! end end def remove_state(state_id) if state?(state_id) revive if state_id == death_state_id erase_state(state_id) refresh @result.removed_states.push(state_id).uniq! end end def states super ## Ken's note: Removed .uniq endendclass RPG::State < RPG::BaseItem def max_stacks ## Modified state class to add stack capabilities. create_stack_regs @max_stacks || 1 end alias :cp_stack_states :icon_index def icon_index(stacks = 1) ## Added an argument to get icons from stacks. create_stack_regs @stack_icons[stacks] || cp_stack_states end def create_stack_regs return if @finished_up_stack_icons; @finished_up_stack_icons = true @stack_icons = {} note.split(/[\r\n]+/).each do |line| case line when /max stacks?\[(\d+)\]/i @max_stacks = $1.to_i when /stack icons?\[(\d+),? (\d+)\]/i @stack_icons[$1.to_i] = $2.to_i end end endend##-----------------------------------------------------------------------------## End of script.##-----------------------------------------------------------------------------