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.

Large Party

Large Party
Version: 1.3


Introduction

This is my Large Party script.
What's the difference with other Large Party scripts?
The battle status window. ;)

Features
  • Unlimited party size
  • Scrolling menu status window
  • Scrolling battle status window & sprites

Screenshots
Think of the menu status window which scrolls up and down. Then, think of the battle status window which scrolls from left to right.

Demo

http://hbgames.org/user_files/Dargor_Large_Party.exe

Script
Code:
 

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

# ** Large Party

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

#  Author: Dargor

#  Version 1.3

#  02/08/2007

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

 

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

# ** Large Party Customization Module

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

 

module Dargor

  module Large_Party

    # Maximum number of actors allowed in the party

    Max_Size = 9

    # Battle status window refresh rate (used in phase5)

    Battle_Refresh_Rate = 64

  end

end

 

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

# ** Game_Temp

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

#  This class handles temporary data that is not included with save data.

#  Refer to "$game_temp" for the instance of this class.

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

 

class Game_Temp

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

  # * Public Instance Variables

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

  attr_accessor :battle_actor_index  # @actor_index in battle scene

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

  # * Alias Listing

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

  alias large_party_temp_initialize initialize

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

  # * Object Initialization

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

  def initialize

    large_party_temp_initialize

    @battle_actor_index = 0

  end

end

 

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

# ** Game_Party

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

#  This class handles the party. It includes information on amount of gold 

#  and items. Refer to "$game_party" for the instance of this class.

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

 

class Game_Party

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

  # * Public Instance Variables

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

  attr_accessor :max_size   # Max number of actors allowed in the party

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

  # * Alias Listing

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

  alias large_party_initialize initialize

  alias large_party_add_actor add_actor

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

  # * Object Initialization

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

  def initialize

    large_party_initialize

    @max_size = Dargor::Large_Party::Max_Size

  end

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

  # * Add an Actor

  #     actor_id : actor ID

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

  def add_actor(actor_id)

    # Original method

    large_party_add_actor(actor_id)

    # Get actor

    actor = $game_actors[actor_id]

    # If the party has less than 4 members and this actor is not in the party

    if @actors.size < @max_size and not @actors.include?(actor)

      # Add actor

      @actors.push(actor)

      # Refresh player

      $game_player.refresh

    end

  end

end

 

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

# ** Sprite_Battler

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

#  This sprite is used to display the battler.It observes the Game_Character

#  class and automatically changes sprite conditions.

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

 

class Sprite_Battler < RPG::Sprite

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

  # * Alias Listing

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

  alias large_party_sprite_update update

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

  # * Frame Update

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

  def update

    # Original method

    large_party_sprite_update

    # Set sprite coordinates

    if @battler.is_a?(Game_Actor)

      self.x = @battler.screen_x - ($game_temp.battle_actor_index / 4) * 640

    end

  end

end

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

# ** Spriteset_Battle

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

#  This class brings together battle screen sprites. It's used within

#  the Scene_Battle class.

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

 

class Spriteset_Battle

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

  # * Alias Listing

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

  alias large_party_spriteset_update update

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

  # * Frame Update

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

  def update

    # Cycle through all extra actors (4+)

    # Create/update sprites

    for i in 4...$game_party.actors.size

      if @actor_sprites[i].nil?

        @actor_sprites.push(Sprite_Battler.new(@viewport2))

      end

      @actor_sprites[i].battler = $game_party.actors[i]

    end

    # Original method

    large_party_spriteset_update

  end

end

 

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

# ** Window_MenuStatus

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

#  This window displays party member status on the menu screen.

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

 

class Window_MenuStatus < Window_Selectable

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

  # * Alias Listing

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

  alias large_party_menu_status_initialize initialize

  alias large_party_menu_status_refresh refresh

  alias large_party_menu_status_update_cursor_rect update_cursor_rect

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

  # * Object Initialization

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

  def initialize

    # Original method

    large_party_menu_status_initialize

    # Adjust contents height

    @item_max = $game_party.actors.size

    height = @item_max * 118

    self.contents = Bitmap.new(width - 32, height - 32)

    # Refresh

    refresh

  end

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

  # * Refresh

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

  def refresh(*args)

    # Original method

    large_party_menu_status_refresh(*args)

    # Adjust default height

    self.height = 480

  end

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

  # * Cursor Rectangle Update

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

  def update_cursor_rect

    large_party_menu_status_update_cursor_rect

    row = @index / @column_max

    if row < self.top_row

      self.top_row = row

    end

    if row > self.top_row + (self.page_row_max - 1)

      self.top_row = row - (self.page_row_max - 1)

    end

    cursor_width = self.width / @column_max - 32

    x = @index % @column_max * (cursor_width + 32)

    y = @index / @column_max * 116 - self.oy

    self.cursor_rect.set(x, y, cursor_width, 96)

  end

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

  # * Top Row

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

  def top_row

    return self.oy / 116

  end

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

  # * Set Top Row

  #     row : new row

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

  def top_row=(row)

    if row < 0

      row = 0

    end

    if row > row_max - 1

      row = row_max - 1

    end

    self.oy = row * 116

  end

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

  # * Page Row Max

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

  def page_row_max

    return 4

  end

end

 

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

# ** Window_BattleStatus

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

#  This window displays the status of all party members on the battle screen.

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

 

class Window_BattleStatus < Window_Base

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

  # * Alias Listing

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

  alias large_party_battle_status_initialize initialize

  alias large_party_battle_status_refresh refresh

  alias large_party_battle_status_update update

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

  # * Object Initialization

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

  def initialize

    @column_max = 4

    large_party_battle_status_initialize

    width = $game_party.actors.size * 160

    self.contents = Bitmap.new(width - 32, height - 32)

    self.width = 640

    @level_up_flags = []

    for i in 0...$game_party.actors.size

      @level_up_flags << false

    end

    @item_max = $game_party.actors.size

    refresh

  end

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

  # * Refresh

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

  def refresh

    # Refresh contents when actors are added/removed in-battle

    if $game_party.actors.size != @item_max

      @item_max = $game_party.actors.size

      width = @item_max * 160

      self.contents = Bitmap.new(width - 32, height - 32)

      self.width = 640

    end

    large_party_battle_status_refresh

    column = $game_temp.battle_actor_index / 4

    self.ox = column * 640

  end

end

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

# ** Scene_Battle

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

#  This class performs battle screen processing.

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

 

class Scene_Battle

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

  # * Alias Listing

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

  alias large_party_phase3_setup_command_window phase3_setup_command_window

  alias large_party_update_phase4_step2 update_phase4_step2

  alias large_party_start_phase5 start_phase5

  alias large_party_update_phase5 update_phase5

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

  # * Actor Command Window Setup

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

  def phase3_setup_command_window

    $game_temp.battle_actor_index = @actor_index

    @status_window.refresh

    large_party_phase3_setup_command_window

    @actor_command_window.x = (@actor_index%4) * 160

  end

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

  # * Frame Update (main phase step 2 : start action)

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

  def update_phase4_step2

    if @active_battler.is_a?(Game_Actor)

      $game_temp.battle_actor_index = @active_battler.index

      @status_window.refresh

    end

    large_party_update_phase4_step2

  end

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

  # * Start After Battle Phase

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

  def start_phase5

    @actor_index = 0

    @status_wait = Graphics.frame_count

    large_party_start_phase5

  end

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

  # * Frame Update (after battle phase)

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

  def update_phase5

    refresh_rate = Dargor::Large_Party::Battle_Refresh_Rate

    if Graphics.frame_count >= @status_wait + refresh_rate

      $game_temp.battle_actor_index = @actor_index

      @status_window.refresh

      @status_wait = Graphics.frame_count

      max = ($game_party.actors.size.to_f/4).ceil * 4

      @actor_index = (@actor_index+1) % max

    end

    large_party_update_phase5

  end

end

 

Instructions

Place the script above Main
Use $game_Party.max_size = x to change the maximum party size.

FAQ

None.

Compatibility

Should be compatible with everything except with other large party scripts, some CMS and CBS.

Credits and Thanks

Don't forget to give me credits!

Author's Notes
The script was originally meant to be an add-on to my party changer script. This version has been optimized to be as compatible as possible.
 

Anonymous

Guest

just my luck, I modified existing code in the rggs editor for maximum party and fixed all the window problems, and I find this script.

Thanks for both this and the party changer script
 
Script Updated

I corrected a huge mistake with the Window_BattleStatus class (I wonder why the script was workingO_o)

I fixed a bug when adding/removing an actor in-battle, the status window is now updated every time you add/remove an actor.​
 
I am considering switching over to this script from Fomar's, because I just noticed Fomar's script doesn't correct for Shop events.  When you purchase a new piece of equipment, it only shows information for the first four party members.  I was wondering if this script takes this into consideration. 

Also, I was wondering if it was necessary to only show actors in groups of four in the battle window if you plan to only allow a maximum of five party members throughout the game.  It's probably too much trouble, and I know you have more in-depth scripts to work on, so I apologize preemptively for bringing this up. 

Woo hoot!  Nevermind about the shop portion, I figured that out easily!  All I had to do was find the Window_ShopStatus script and edit around the numbers in there so that all five party members would fit into the window!  Yaaay! 
 
You have a good point (never thought about the shop scene).

Also, I was wondering if it was necessary to only show actors in groups of four in the battle window if you plan to only allow a maximum of five party members throughout the game.  It's probably too much trouble, and I know you have more in-depth scripts to work on, so I apologize preemptively for bringing this up. 

No need to apologize, suggestions are welcome! I will try to add that feature, I was just wondering if it's going to mess up things. Maybe not, I'll try!
 
Thankies!  I actually did manage to fiddle about inside of the Window_MenuStatus and Window_ShopStatus scripts by changing sizes of things so five people would fit in the Menu window at once without scrolling.  I think it looks like it'll suit my needs, though to be honest I'm not entirely sure about what I changed other than some Y values. 
 

Etular

Member

Last time I use that, I killed a Seraphim, the strongest monster in the game, using this script with 8 level 1's!  :cool:

Still good script
 
Oh, I just noticed another thing:  when you go into the menu to use an item, that also needs to be adjusted to accommodate Large Parties.  It seems capable of selecting hidden members, though you can't see their information.  This, however, can be edited via the Window_Target script. 
 

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