##-----------------------------------------------------------------------------## State Graphics v1.3## 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.3 - 8.17.2013## Fixed an issue with character sprite changing## v1.2 - 3.16.2013## Added stacking states functions## v1.1 - 3.15.2013## Fixed bug related to death transitions## v1.0 - 3.15.2013## Wrote and debugged main script##----------------------------------------------------------------------------##                                                                             ##$imported ||= {}                                                             ##$imported["Graphics_States"] = 1.3                                           ##                                                                             ####----------------------------------------------------------------------------####   Instructions:## Place this script in the script editor below "Materials" and above "Main".## This script allows states to change an actor or enemy's graphics. This## change remains active as long as the battler is afflicted with the state.## If multiple states change graphics, the state with the highest priority## determines the graphic. These changes are applied using script calls:#### battler gfx["name" 0] -or- enemy battler gfx["name" 0 1, 2, 3] -or-## actor battler gfx["name" 0 1, 2, 3]## - Sets a battlers graphic name and hue while the state is applied. "name"##   is the file name and must be surrounded by quotes while 0 can be a number##   from 0-255 for the hue. If this tag is prefixed with "actor" or "enemy"##   it must also include actor or enemy IDs at the end each separated by##   commas (such as the 1, 2, 3 in this example). Note that actor/enemy tags##   take priority over the short tag, but higher priority states will always##   be applied first.## character gfx["name" 5] -or- face gfx["name" 5] -or-## actor face gfx["name" 5 1, 2, 3] -etc-## - Changes the face or character walking sprites of the battler with this##   state. Either of these can be prefixed with actor or enemy and work##   pretty much the same way as the battler gfx tags. The only difference is##   that the number behind the name changes the index (from 0-7). This has##   no effect on enemies without alternate scripts.## name change["name"] -or- enemy name change["name" 1, 2, 3]## - Changes the name of the battler the that is applied to. Works exactly##   like all the other tags except it does not have a second argument.#### This script can also function with CP's Stacking States. States can have## different graphics for certain levels of stacks by adding a tag to the line## you want to only occur on that stack. This tag is as follows:#### stack gfx[1]## - Causes the line graphic to only occur when the stack condition is met.##   To use this tag, simply place the tag after any other tag in this script.##   You can use any number from 1 on up. If this tag is not behind another##   tag, the tag is assumed to work on all levels. Note that this tag takes##   priority over similar untagged lines.##----------------------------------------------------------------------------##                                                                             ####----------------------------------------------------------------------------####   Compatibility:## This script assumes that enemies cannot have faces and characters by default## so if it happens to interfere with another script, try placing this script## ABOVE the other script. If that does not work, copy lines 111 to 142 and## overwrite lines 152 to 178 with them.##----------------------------------------------------------------------------##                                                                             ##                                                                             ####----------------------------------------------------------------------------#### 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 state_graphic_bit(bit) ## Gets the info from an array using the ID.   states.each do |state|     stack_pos = get_stack(state.id); ary = nil     id = enemy? ? -@enemy_id : @actor_id     if state.graphics_change.include?(id) &&        state.graphics_change[id].include?(bit)       ary = state.graphics_change[id][bit]     end     if state.graphics_change.include?(0) &&        state.graphics_change[0].include?(bit)       ary = state.graphics_change[0][bit] if ary.nil?     end          if ary       return ary[stack_pos] if ary[stack_pos]       return ary[0] if ary[0]     end   end   return nil end  def get_stack(state) ## Gets the ID from the hash if Stack_States is used.   if ($imported["Stack_States"] || 0) >= 1.0     return state_stack(state)   else     return 1   end endendclass Game_Battler < Game_BattlerBase alias :cpgfxc_item_apply :item_apply def item_apply(*args)   cpgfxc_item_apply(*args)   $game_player.refresh endendclass Game_Actor < Game_Battler ## If no replacement is found, use the old one. alias :cpgfxc_state_face_name :face_name alias :cpgfxc_state_face_index :face_index alias :cpgfxc_state_character_name :character_name alias :cpgfxc_state_character_index :character_index alias :cpgfxc_state_battler_name :battler_name alias :cpgfxc_state_battler_hue :battler_hue alias :cpgfxc_state_name :name  def face_name   state_graphic_bitface) || cpgfxc_state_face_name end  def face_index   state_graphic_bitface_ind) || cpgfxc_state_face_index end  def character_name   state_graphic_bitchara) || cpgfxc_state_character_name end  def character_index   state_graphic_bitchara_ind) || cpgfxc_state_character_index end  def battler_name   @held_battler_name = state_graphic_bitbattler) if alive?   @held_battler_name || cpgfxc_state_battler_name end  def battler_hue   state_graphic_bitbattler_hue) || cpgfxc_state_battler_hue end  def name   state_graphic_bitname) || cpgfxc_state_name endendclass Game_Enemy < Game_Battler alias :cpgfxc_state_original_name riginal_name alias :cpgfxc_state_battler_name :battler_name alias :cpgfxc_state_battler_hue :battler_hue  def face_name   state_graphic_bitface) end  def face_index   state_graphic_bitface_ind) end  def character_name   state_graphic_bitchara) end  def character_index   state_graphic_bitchara_ind) end  def battler_name   @held_battler_name = state_graphic_bitbattler) if alive?   @held_battler_name || cpgfxc_state_battler_name end  def battler_hue   state_graphic_bitbattler_hue) || cpgfxc_state_battler_hue end  def original_name   state_graphic_bitname) || cpgfxc_state_original_name end  def name   get_name = state_graphic_bitname)   (get_name ? get_name : @original_name) + (@plural ? letter : "") endendclass Game_Interpreter alias :cpgfxc_command_313 :command_313 def command_313   cpgfxc_command_313   $game_player.refresh endendclass Sprite_Battler < Sprite_Base alias :cpgfxc_state_init_visibility :init_visibility alias :cpgfxc_state_initialize :initialize  def initialize(*args)   @first_run = true   cpgfxc_state_initialize(*args) end  def init_visibility   if @first_run     cpgfxc_state_init_visibility     @first_run = false   else     cpgfxc_state_init_visibility unless !@battler_visible && @battler.alive?   end endendmodule CPmodule STATEGFXACTOR = /actor (battler|character|face) gfx\["(.+)" (\d+) ([\d, ]+)\]/iENEMY = /enemy (battler|character|face) gfx\["(.+)" (\d+) ([\d, ]+)\]/iCOMMON = /(battler|character|face) gfx\["(.+)" (\d+)\]/iNAME  = /(actor |enemy )?name change\["(.+)"([\d, ]*)\]/iSTACK = /stack gfx\[(\d+)\]/iendendclass RPG::State < RPG::BaseItem ## REGEXPs and a few time savers. def graphics_change   create_state_graphic_list if @graphics_change_hash.nil?   @graphics_change_hash end  def create_state_graphic_list   @graphics_change_hash = {}   note.split(/[\r\n]+/).each do |line|     if line =~ CP::STATEGFX::STACK       stack_pos = $1.to_i     else stack_pos = 0 end     case line     when CP::STATEGFX::ACTOR       bit, num = get_bit_num_61513($1.to_s.downcase)       package_61513($2.to_s, $3.to_i, to_a_61513($4.to_s), bit, num, stack_pos)     when CP::STATEGFX::ENEMY       bit, num = get_bit_num_61513($1.to_s.downcase)       package_61513($2.to_s, $3.to_i, to_a_61513($4.to_s), bit, num, stack_pos, true)     when CP::STATEGFX::COMMON       bit, num = get_bit_num_61513($1.to_s.downcase)       package_61513($2.to_s, $3.to_i, [0], bit, num, stack_pos)     when CP::STATEGFX::NAME       case $1.to_s.downcase       when "actor "; ary, invert = to_a_61513($3.to_s), false       when "enemy "; ary, invert = to_a_61513($3.to_s), true       else; ary, invert = [0], false       end       package_61513($2.to_s, 0, ary, :name, nil, stack_pos, invert)     end   end end  def get_bit_num_61513(state)   case state   when "battler";  bit, num = :battler, :battler_hue   when "character"; bit, num = :chara,  :chara_ind   when "face";     bit, num = :face,   :face_ind   else;            bit, num = nil,     nil   end   return [bit, num] end  def package_61513(string, int, array, bit, num, pos = 0, inverse = false)   array.each do |id|     id = inverse ? -id.to_i : id.to_i     @graphics_change_hash[id] ||= {}     @graphics_change_hash[id][bit] ||= {}     @graphics_change_hash[id][bit][pos] = string     @graphics_change_hash[id][num] ||= {}     @graphics_change_hash[id][num][pos] = int   end end  def to_a_61513(string)   string.split(/,/) endend##-----------------------------------------------------------------------------## End of script.##-----------------------------------------------------------------------------