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.

Party Switching

Hello. I'm looking for a script that can process switching out party members and such. I'm using DerVVulfman's limit break script, so I'm looking for one that won't interfere with this one, particularly with the "Limit" option in the main menu. I've tried Dargor's script, but it makes it impossible to use the limit script at the same time.

DerVVulfmans' limit menu script makes a spot in the main menu for the "Limit" command. However, Dargor's party switcher script disables this spot. It should also be noted that Dargor's script disables the save function on the main menu as well.

As far as actual scripting knowledge, I have none. Absolutely none! If any changes to the scripts are necessary, then please elaborate and tell me exactly what I must do and where. Simply telling me to "add (insert random rgss code here)" flies right over my head. I've been taking the effort to try and learn as I go (which is helping, little by little) but I'm still very new to this. Any help from a patient person would be uber appreciated! Thanks.

This is the limit menu script that Dargor's seems to mess with, which just seems to be an edited version of Scene_Menu, but I'm not sure on exactly how.
Code:
 

#==============================================================================

# ** Scene_Menu

#------------------------------------------------------------------------------

#  This class performs menu screen processing.

#==============================================================================

 

class Scene_Menu

  #--------------------------------------------------------------------------

  # * Object Initialization

  #     menu_index : command cursor's initial position

  #--------------------------------------------------------------------------

  def initialize(menu_index = 0)

    @menu_index = menu_index

  end

  #--------------------------------------------------------------------------

  # * Main Processing

  #--------------------------------------------------------------------------

  def main

    # Make command window

    s1 = $data_system.words.item

    s2 = $data_system.words.skill

    s3 = $data_system.words.equip

    s4 = "Status"

    s5 = "Limit"

    s6 = "Save"

    s7 = "End Game"

    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])

    @command_window.index = @menu_index

    # If number of party members is 0

    if $game_party.actors.size == 0

      # Disable items, skills, equipment, and status

      @command_window.disable_item(0)

      @command_window.disable_item(1)

      @command_window.disable_item(2)

      @command_window.disable_item(3)

      @command_window.disable_item(4)

    end

    # If save is forbidden

    if $game_system.save_disabled

      # Disable save

      @command_window.disable_item(5)

    end

    # Make play time window

    @playtime_window = Window_PlayTime.new

    @playtime_window.x = 0

    @playtime_window.y = 320

    # Make gold window

    @gold_window = Window_Gold.new

    @gold_window.x = 0

    @gold_window.y = 416

    # Make status window

    @status_window = Window_MenuStatus.new

    @status_window.x = 160

    @status_window.y = 0

    # Execute transition

    Graphics.transition

    # Main loop

    loop do

      # Update game screen

      Graphics.update

      # Update input information

      Input.update

      # Frame update

      update

      # Abort loop if screen is changed

      if $scene != self

        break

      end

    end

    # Prepare for transition

    Graphics.freeze

    # Dispose of windows

    @command_window.dispose

    @playtime_window.dispose

    @gold_window.dispose

    @status_window.dispose

  end

  #--------------------------------------------------------------------------

  # * Frame Update

  #--------------------------------------------------------------------------

  def update

    # Update windows

    @command_window.update

    @playtime_window.update

    @gold_window.update

    @status_window.update

    # If command window is active: call update_command

    if @command_window.active

      update_command

      return

    end

    # If status window is active: call update_status

    if @status_window.active

      update_status

      return

    end

  end

  #--------------------------------------------------------------------------

  # * Frame Update (when command window is active)

  #--------------------------------------------------------------------------

  def update_command

    # If B button was pressed

    if Input.trigger?(Input::B)

      # Play cancel SE

      $game_system.se_play($data_system.cancel_se)

      # Switch to map screen

      $scene = Scene_Map.new

      return

    end

    # If C button was pressed

    if Input.trigger?(Input::C)

      # If command other than save or end game, and party members = 0

      if $game_party.actors.size == 0 and @command_window.index < 5

        # Play buzzer SE

        $game_system.se_play($data_system.buzzer_se)

        return

      end

      # Branch by command window cursor position

      case @command_window.index

      when 0  # item

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to item screen

        $scene = Scene_Item.new

      when 1  # skill

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0

      when 2  # equipment

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0

      when 3  # status

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0

      when 4  # limit

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0              

      when 5  # save

        # If saving is forbidden

        if $game_system.save_disabled

          # Play buzzer SE

          $game_system.se_play($data_system.buzzer_se)

          return

        end

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to save screen

        $scene = Scene_Save.new

      when 6  # end game

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to end game screen

        $scene = Scene_End.new

      end

      return

    end

  end

  #--------------------------------------------------------------------------

  # * Frame Update (when status window is active)

  #--------------------------------------------------------------------------

  def update_status

    # If B button was pressed

    if Input.trigger?(Input::B)

      # Play cancel SE

      $game_system.se_play($data_system.cancel_se)

      # Make command window active

      @command_window.active = true

      @status_window.active = false

      @status_window.index = -1

      return

    end

    # If C button was pressed

    if Input.trigger?(Input::C)

      # Branch by command window cursor position

      case @command_window.index

      when 1  # skill

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to skill screen

        $scene = Scene_Skill.new(@status_window.index)

      when 2  # equipment

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to equipment screen

        $scene = Scene_Equip.new(@status_window.index)

      when 3  # status

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to status screen

        $scene = Scene_Status.new(@status_window.index)

      when 4  # limits

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to skill screen

        $scene = Scene_LimitMenu.new(@status_window.index)      

      end

      return

    end

  end

end

 
And here is the script that seems to mess with it.
Code:
#==============================================================================

# ** Commands Manager

#------------------------------------------------------------------------------

#  Author: Dargor

#  Version 1.2

#  20/09/2007

#==============================================================================

# * Instructions

#------------------------------------------------------------------------------

# - To add a command to the command window use:

#               @command_window.add_command("command")

# - To remove a command to the command window use:

#               @command_window.remove_command("command")

# - To rearrange the commands in the command window use:

#               @command_window.set_commands(["cmd1","cmd2","cmd3"...])

# - You can also rearrange the default menu commands using:

#               $game_system.menu_commands = ["cmd1","cmd2","cmd3"...]

#------------------------------------------------------------------------------

# * Note

#------------------------------------------------------------------------------

# - This script rewrites the update_command and update_status methods

#   in Scene_Menu.

#==============================================================================

 

#==============================================================================

# ** Game_System

#------------------------------------------------------------------------------

#  This class handles data surrounding the system. Backround music, etc.

#  is managed here as well. Refer to "$game_system" for the instance of 

#  this class.

#==============================================================================

 

class Game_System

  #--------------------------------------------------------------------------

  # * Public Instance Variables

  #--------------------------------------------------------------------------

  attr_accessor :default_commands     # default commands

  attr_accessor :menu_commands        # menu commands

  attr_accessor :commands_max         # commands max

  #--------------------------------------------------------------------------

  # * Alias Listing

  #--------------------------------------------------------------------------

  alias dargor_menu_commands_initialize initialize

  #--------------------------------------------------------------------------

  # * Object Initialization

  #--------------------------------------------------------------------------

  def initialize

    @default_commands = ["Item","Skill","Equip","Status", "End Game"]

    @menu_commands = ["Item","Skill","Equip","Status", "End Game"]

    @commands_max = 6

    dargor_menu_commands_initialize

  end

end

 

#==============================================================================

# ** Window_Command

#------------------------------------------------------------------------------

#  This window deals with general command choices.

#==============================================================================

 

class Window_Command < Window_Selectable

  #--------------------------------------------------------------------------

  # * Public Instance Variables

  #--------------------------------------------------------------------------

  attr_accessor :commands       # commands

  #--------------------------------------------------------------------------

  # * Alias Listing

  #--------------------------------------------------------------------------

  alias dargor_index_update update

  alias dargor_disable_item disable_item

  alias dargor_draw_item draw_item

  #--------------------------------------------------------------------------

  # * Add Command (command)

  #--------------------------------------------------------------------------

  def add_command(command)

    return if @commands.include?(command)

    @commands.push(command)

    set_commands(@commands)

  end

  #--------------------------------------------------------------------------

  # * Remove Command (command)

  #--------------------------------------------------------------------------

  def remove_command(command)

    @commands.delete(command)

    set_commands(@commands)

  end

  #--------------------------------------------------------------------------

  # * Set Commands (commands)

  #--------------------------------------------------------------------------

  def set_commands(commands)

    return if commands == [] or commands == nil

    @commands = commands

    @item_max = @commands.size

    self.contents = Bitmap.new(width - 32, @item_max * 32)

    refresh

    self.height = 32 + (32 * $game_system.commands_max)

  end

  #--------------------------------------------------------------------------

  # * Draw Item

  #     index : item number

  #     color : text color

  #--------------------------------------------------------------------------

  def draw_item(index, color)

    return if index.nil?

    dargor_draw_item(index, color)

  end

  #--------------------------------------------------------------------------

  # * Frame Update

  #--------------------------------------------------------------------------

  def update

    dargor_index_update

    update_index

  end

  #--------------------------------------------------------------------------

  # * Frame Update (index)

  #--------------------------------------------------------------------------

  def update_index

    if self.index >= @commands.size

      self.index = @commands.size-1

      return

    end

  end

  #--------------------------------------------------------------------------

  # * Disable Item

  #     index : item number / item string

  #--------------------------------------------------------------------------

  def disable_item(index)

    if index.is_a?(String)

      new_index = @commands.index(index)

      draw_item(new_index, disabled_color)

    else

      draw_item(index, disabled_color)

    end

  end

  #--------------------------------------------------------------------------

  # * Enable Item

  #     index : item number

  #--------------------------------------------------------------------------

  def enable_item(index)

    draw_item(index, normal_color)

  end

end

 

#==============================================================================

# ** Scene_Menu

#------------------------------------------------------------------------------

#  This class performs menu screen processing.

#==============================================================================

 

class Scene_Menu

  #--------------------------------------------------------------------------

  # * Alias listing

  #--------------------------------------------------------------------------

  alias add_remove_command_main main

  alias add_remove_command_update update

  #--------------------------------------------------------------------------

  # * Main Processing

  #--------------------------------------------------------------------------

  def main

    # Default menu commands

    @default_commands = $game_system.default_commands

    # Create an empty array of command

    @commands = []

    # Call the original main method

    add_remove_command_main

  end

  #--------------------------------------------------------------------------

  # * Set Commands Access

  #--------------------------------------------------------------------------

  def set_commands_access

    # Reinitialize menu commands

    unless @command_window.commands == @commands

      @command_window.set_commands($game_system.menu_commands)

    end

    # Se basic commands name

    s1 = @default_commands[0]

    s2 = @default_commands[1]

    s3 = @default_commands[2]

    s4 = @default_commands[3]

    s5 = @default_commands[4]

    # If number of party members is 0

    if $game_party.actors.size == 0

      # Disable items, skills, equipment, and status

      @command_window.disable_item(s1)

      @command_window.disable_item(s2)

      @command_window.disable_item(s3)

      @command_window.disable_item(s4)

      @command_window.disable_item(s5)

    end

    

  end

  #--------------------------------------------------------------------------

  # * Frame Update

  #--------------------------------------------------------------------------

  def update

    # Set commands access

    set_commands_access

    # Set the array equal to the current commands

    @commands = @command_window.commands

    # Set commands access

    # Call the original update method

    add_remove_command_update

  end

  #--------------------------------------------------------------------------

  # * Frame Update (when command window is active)

  #--------------------------------------------------------------------------

  def update_command

    # Assign @command_window.index to its strings

    command = @commands[@command_window.index]

    # If B button was pressed

    if Input.trigger?(Input::B)

      # Play cancel SE

      $game_system.se_play($data_system.cancel_se)

      # Switch to map screen

      $scene = Scene_Map.new

      return

    end

    # If C button was pressed

    if Input.trigger?(Input::C)

      # If command other than save or end game, and party members = 0

      if $game_party.actors.size == 0 and @command_window.index < 4

        # Play buzzer SE

        $game_system.se_play($data_system.buzzer_se)

        return

      end

      # Branch by command window cursor position

      case command

      when @default_commands[0]

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to item screen

        $scene = Scene_Item.new

      when @default_commands[1]

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0

      when @default_commands[2]

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0

      when @default_commands[3]

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0

      when @default_commands[5]

        # If saving is forbidden

        if $game_system.save_disabled

          # Play buzzer SE

          $game_system.se_play($data_system.buzzer_se)

          return

        end

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to save screen

        $scene = Scene_Save.new

      when @default_commands[4]

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to end game screen

        $scene = Scene_End.new

      end

      return

    end

  end

  #--------------------------------------------------------------------------

  # * Frame Update (when status window is active)

  #--------------------------------------------------------------------------

  def update_status

    # Assign @command_window.index to its strings

    command = @commands[@command_window.index]

    # If B button was pressed

    if Input.trigger?(Input::B)

      # Play cancel SE

      $game_system.se_play($data_system.cancel_se)

      # Make command window active

      @command_window.active = true

      @status_window.active = false

      @status_window.index = -1

      return

    end

    # If C button was pressed

    if Input.trigger?(Input::C)

      # Branch by command window cursor position

      case command

      when @default_commands[1]

        # If this actor's action limit is 2 or more

        if $game_party.actors[@status_window.index].restriction >= 2

          # Play buzzer SE

          $game_system.se_play($data_system.buzzer_se)

          return

        end

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to skill screen

        $scene = Scene_Skill.new(@status_window.index)

      when @default_commands[2]

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to equipment screen

        $scene = Scene_Equip.new(@status_window.index)

      when @default_commands[3]

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to status screen

        $scene = Scene_Status.new(@status_window.index)

      end

      return

    end

  end

end
 
From the menu? Hmm... I know I use Blizzard's Easy Party Switcher, which can be called from anything. I modified my menu so that I could use the command from that. It takes editing of a couple of things, and isn't the most simple to do, especially if you're like me and want it to be dual-purpose (menu command AND key press) but if you give me your game and tell me exactly what you need and how you need it to work, I can probably throw on his script and then make it a menu command.
 
Thanks much for the point in the right direction, Atoa! It took a little bit of custom scripting to fix it up the way I wanted it, but this is perfect for what I want. Mods can close this thread now, thanks.
 

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