Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

[Filled] Weapon auto-state?

As it stands now, only armors can have auto-states. Is it possible to give weapons auto-states aswell? I've searched, but found nothing, so if anyone already has a script for this, please provide a link.
 
Give me a minute



Ok Here's what I got:

Code:
#==============================================================================
# ** RPG::Weapon
#==============================================================================

class RPG::Weapon
  #--------------------------------------------------------------------------
  # * Auto States
  #
  #   @@_auto_states = { weapon_id => [state_id, ...], ... }
  #   @@_auto_states.default = [state_id, ...]
  #--------------------------------------------------------------------------
  @@_auto_states = {}
  @@_auto_states.default = []
  #--------------------------------------------------------------------------
  # * Auto State IDs
  #--------------------------------------------------------------------------
  def auto_state_ids
    return @@_auto_states[@id]
  end
  #--------------------------------------------------------------------------
  # * Set Auto State IDs
  #--------------------------------------------------------------------------
  def auto_state_ids=(auto_states)
    @@_auto_states[@id] = auto_states
  end
  #--------------------------------------------------------------------------
  # * Auto States
  #--------------------------------------------------------------------------
  def auto_states
    return @@_auto_states
  end
  #--------------------------------------------------------------------------
  # * Set Auto States
  #--------------------------------------------------------------------------
  def auto_states=(auto_states)
    @@_auto_states = auto_states
  end
end

#==============================================================================
# ** RPG::Armor
#==============================================================================

class RPG::Armor
  #--------------------------------------------------------------------------
  # * Auto States
  #
  #   @@_auto_states = { weapon_id => [state_id, ...], ... }
  #   @@_auto_states.default = [state_id, ...]
  #--------------------------------------------------------------------------
  @@_auto_states = {}
  @@_auto_states.default = []
  #--------------------------------------------------------------------------
  # * Auto State IDs
  #--------------------------------------------------------------------------
  def auto_state_ids
    return @@_auto_states[@id]
  end
  #--------------------------------------------------------------------------
  # * Set Auto State IDs
  #--------------------------------------------------------------------------
  def auto_state_ids=(auto_states)
    @@_auto_states[@id] = auto_states
  end
  #--------------------------------------------------------------------------
  # * Auto States
  #--------------------------------------------------------------------------
  def auto_states
    return @@_auto_states
  end
  #--------------------------------------------------------------------------
  # * Set Auto States
  #--------------------------------------------------------------------------
  def auto_states=(auto_states)
    @@_auto_states = auto_states
  end
end

#==============================================================================
# ** Game_Actor
#==============================================================================

class Game_Actor
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias_method :seph_multiequipmentautostates_gmactr_setup, :setup
  alias_method :seph_multiequipmentautostates_gmactr_equip, :equip
  #--------------------------------------------------------------------------
  # * Setup
  #--------------------------------------------------------------------------
  def setup(actor_id)
    # Original Setup
    seph_multiequipmentautostates_gmactr_setup(actor_id)
    # Update Auto States
    update_auto_states(nil, $data_weapons[@weapon_id])
    update_auto_states(nil, $data_armors[@armor1_id])
    update_auto_states(nil, $data_armors[@armor2_id])
    update_auto_states(nil, $data_armors[@armor3_id])
    update_auto_states(nil, $data_armors[@armor4_id])
  end
  #--------------------------------------------------------------------------
  # * Change Equipment
  #--------------------------------------------------------------------------
  def equip(equip_type, id)
    # Branch By Equip Type
    case equip_type
    when 0 # Weapon
      update_auto_states($data_weapons[@weapon_id], $data_weapons[id])
    when 1 # Shield
      update_auto_states($data_armors[@armor1_id], $data_armors[id])
    when 2 # Head
      update_auto_states($data_armors[@armor2_id], $data_armors[id])
    when 3 # Accessory
      update_auto_states($data_armors[@armor3_id], $data_armors[id])
    when 4 # Armor
      update_auto_states($data_armors[@armor4_id], $data_armors[id])
    end
    # Original Equip
    seph_multiequipmentautostates_gmactr_equip(equip_type, id)
  end
  #--------------------------------------------------------------------------
  # * Update Auto States
  #--------------------------------------------------------------------------
  def update_auto_states(old_equipment, new_equipment)
    # If Non-nil old Equipment
    unless old_equipment.nil?
      # Pass Through Auto-States
      old_equipment.auto_state_ids.each do |state_id|
        # Remove State
        remove_state(state_id, true)
      end
    end
    # If Non-nil new Equipment
    unless new_equipment.nil?
      # Pass Through Auto-States
      new_equipment.auto_state_ids.each do |state_id|
        # Remove State
        add_state(state_id, true)
      end
    end
  end
end

#==============================================================================
# ** Scene_Save
#==============================================================================

class Scene_Save < Scene_File
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias_method :seph_multiequipmentautostates_gmactr_wsd, :write_save_data
  #--------------------------------------------------------------------------
  # * Write Save Data
  #--------------------------------------------------------------------------
  def write_save_data(file)
    # Original Write Save Data
    seph_multiequipmentautostates_gmactr_wsd(file)
    # Dump Weapon & Armor Armor States
    Marshal.dump(RPG::Weapon.auto_states, file)
    Marshal.dump(RPG::Armor.auto_states, file)
  end
end

#==============================================================================
# ** Scene_Load
#==============================================================================

class Scene_Load < Scene_File
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias_method :seph_multiequipmentautostates_gmactr_rsd, :read_save_data
  #--------------------------------------------------------------------------
  # * Read Save Data
  #--------------------------------------------------------------------------
  def read_save_data(file)
    # Original Read Save Data
    seph_multiequipmentautostates_gmactr_rsd(file)
    # Dump Weapon & Armor Armor States
    RPG::Weapon.auto_states = Marshal.load(file)
    RPG::Armor.auto_states  = Marshal.load(file)
  end
end

You can set mutliple auto-states for both weapons and armors. You can modify them in mid game with:

Code:
$data_weapons[weapon_id].auto_state_ids = [state_id, ...]
$data_armors[armor_id].auto_state_ids = [state_id, ...]
 
Ok. Here's a little update on that.

Code:
#==============================================================================
# ** RPG::Weapon
#==============================================================================

class RPG::Weapon
  #============================================================================
  # ** AutoStates
  #============================================================================
  
  module AutoStates
    #--------------------------------------------------------------------------
    # * Auto States
    #
    #   @_auto_states = { weapon_id => [state_id, ...], ... }
    #   @_auto_states.default = [state_id, ...]
    #--------------------------------------------------------------------------
    @_auto_states = {}
    @_auto_states.default = []
    #------------------------------------------------------------------------
    # * Auto State IDs
    #------------------------------------------------------------------------
    def self.[](id)
      return @_auto_states[id]
    end
    #------------------------------------------------------------------------
    # * Set Auto State IDs
    #------------------------------------------------------------------------
    def self.[]=(id, auto_states)
      @_auto_states[id] = auto_states
    end
    #------------------------------------------------------------------------
    # * Auto States
    #------------------------------------------------------------------------
    def self.auto_states
      return @_auto_states
    end
    #------------------------------------------------------------------------
    # * Set Auto States
    #------------------------------------------------------------------------
    def self.auto_states=(auto_states)
      @_auto_states = auto_states
    end
  end
  #--------------------------------------------------------------------------
  # * Auto State IDs
  #--------------------------------------------------------------------------
  def auto_state_ids
    return AutoStates[@id]
  end
  #--------------------------------------------------------------------------
  # * Set Auto State IDs
  #--------------------------------------------------------------------------
  def auto_state_ids=(auto_states)
    AutoStates[@id] = auto_states
  end
end

#==============================================================================
# ** RPG::Armor
#==============================================================================

class RPG::Armor
  #============================================================================
  # ** AutoStates
  #============================================================================
  
  module AutoStates
    #--------------------------------------------------------------------------
    # * Auto States
    #
    #   @_auto_states = { armor_id => [state_id, ...], ... }
    #   @_auto_states.default = [state_id, ...]
    #--------------------------------------------------------------------------
    @_auto_states = {}
    @_auto_states.default = []
    #------------------------------------------------------------------------
    # * Auto State IDs
    #------------------------------------------------------------------------
    def self.[](id)
      return @_auto_states[id]
    end
    #------------------------------------------------------------------------
    # * Set Auto State IDs
    #------------------------------------------------------------------------
    def self.[]=(id, auto_states)
      @_auto_states[id] = auto_states
    end
    #------------------------------------------------------------------------
    # * Auto States
    #------------------------------------------------------------------------
    def self.auto_states
      return @_auto_states
    end
    #------------------------------------------------------------------------
    # * Set Auto States
    #------------------------------------------------------------------------
    def self.auto_states=(auto_states)
      @_auto_states = auto_states
    end
  end
  #--------------------------------------------------------------------------
  # * Auto State IDs
  #--------------------------------------------------------------------------
  def auto_state_ids
    return AutoStates[@id]
  end
  #--------------------------------------------------------------------------
  # * Set Auto State IDs
  #--------------------------------------------------------------------------
  def auto_state_ids=(auto_states)
    AutoStates[@id] = auto_states
  end
end

#==============================================================================
# ** Game_Actor
#==============================================================================

class Game_Actor
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias_method :seph_multiequipmentautostates_gmactr_setup, :setup
  alias_method :seph_multiequipmentautostates_gmactr_equip, :equip
  #--------------------------------------------------------------------------
  # * Setup
  #--------------------------------------------------------------------------
  def setup(actor_id)
    # Original Setup
    seph_multiequipmentautostates_gmactr_setup(actor_id)
    # Update Auto States
    update_auto_states(nil, $data_weapons[@weapon_id])
    update_auto_states(nil, $data_armors[@armor1_id])
    update_auto_states(nil, $data_armors[@armor2_id])
    update_auto_states(nil, $data_armors[@armor3_id])
    update_auto_states(nil, $data_armors[@armor4_id])
  end
  #--------------------------------------------------------------------------
  # * Change Equipment
  #--------------------------------------------------------------------------
  def equip(equip_type, id)
    # Branch By Equip Type
    case equip_type
    when 0 # Weapon
      update_auto_states($data_weapons[@weapon_id], $data_weapons[id])
    when 1 # Shield
      update_auto_states($data_armors[@armor1_id], $data_armors[id])
    when 2 # Head
      update_auto_states($data_armors[@armor2_id], $data_armors[id])
    when 3 # Accessory
      update_auto_states($data_armors[@armor3_id], $data_armors[id])
    when 4 # Armor
      update_auto_states($data_armors[@armor4_id], $data_armors[id])
    end
    # Original Equip
    seph_multiequipmentautostates_gmactr_equip(equip_type, id)
  end
  #--------------------------------------------------------------------------
  # * Update Auto States
  #--------------------------------------------------------------------------
  def update_auto_states(old_equipment, new_equipment)
    # If Non-nil old Equipment
    unless old_equipment.nil?
      # Pass Through Auto-States
      old_equipment.auto_state_ids.each do |state_id|
        # Remove State
        remove_state(state_id, true)
      end
    end
    # If Non-nil new Equipment
    unless new_equipment.nil?
      # Pass Through Auto-States
      new_equipment.auto_state_ids.each do |state_id|
        # Remove State
        add_state(state_id, true)
      end
    end
  end
end

#==============================================================================
# ** Scene_Save
#==============================================================================

class Scene_Save < Scene_File
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias_method :seph_multiequipmentautostates_gmactr_wsd, :write_save_data
  #--------------------------------------------------------------------------
  # * Write Save Data
  #--------------------------------------------------------------------------
  def write_save_data(file)
    # Original Write Save Data
    seph_multiequipmentautostates_gmactr_wsd(file)
    # Dump Weapon & Armor Armor States
    Marshal.dump(RPG::Weapon::AutoStates.auto_states, file)
    Marshal.dump(RPG::Armor::AutoStates.auto_states, file)
  end
end

#==============================================================================
# ** Scene_Load
#==============================================================================

class Scene_Load < Scene_File
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias_method :seph_multiequipmentautostates_gmactr_rsd, :read_save_data
  #--------------------------------------------------------------------------
  # * Read Save Data
  #--------------------------------------------------------------------------
  def read_save_data(file)
    # Original Read Save Data
    seph_multiequipmentautostates_gmactr_rsd(file)
    # Dump Weapon & Armor Armor States
    RPG::Weapon::AutoStates.auto_states = Marshal.load(file)
    RPG::Armor::AutoStates.auto_states  = Marshal.load(file)
  end
end

This version should work.
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top