With this script you can choose the max size of the party. An RTAB and Paradog version is found further down (thanks to DerVVulfman)
And you need to make some changes to spriteset battle or copy the example if yours is the default.
If you just want a copy and paste put this above main and below spriteset battle
Otherwise in spriteset battle find:
And replace it with:
Then find:
And replace it with:
And your done to set the max party size go to the top of the script and find (not in spriteset battle the main script):
And change it to whatever you want.
END OF SCRIPT UNLESS YOU WANT IT COMPATABLE WITH RTAB AND PARADOG
Edit:
Revised: 05/04/2007 (DD/MM/YYYY)
DerVVulfman has done that thing I don't do (make scripts compatible with RTAB and the ParaDog system) to this script:
Also apparently it's SDK complient according to DerVVulfman.
You can change the party size from a map event by using:
Don't forgot to credit DerVVulfman aswell as me if you use this version of the script.
Code:
class Game_Party
Max_Party = 5
def max_party
return Max_Party
end
def add_actor(actor_id)
actor = $game_actors[actor_id]
if not @actors.include?(actor) and $game_party.actors.size < Max_Party
@actors.push(actor)
$game_player.refresh
end
end
end
class Window_BattleStatus < Window_Base
def initialize
super(0, 320, 640, 160)
self.contents = Bitmap.new(width - 32, height - 32)
unless $game_party.actors.size > 4
@level_up_flags = [false, false, false, false]
else
@level_up_flags = []
for i in 0...$game_party.actors.size
@level_up_flags.push(false)
end
end
refresh
end
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
unless $game_party.actors.size > 4
actor_x = i * 160 + 4
else
actor_x = i * (4 + (640/ $game_party.actors.size))
end
draw_actor_name(actor, actor_x, 0)
draw_actor_hp(actor, actor_x, 32, 120)
draw_actor_sp(actor, actor_x, 64, 120)
if @level_up_flags[i]
self.contents.font.color = normal_color
self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
else
draw_actor_state(actor, actor_x, 96)
end
end
end
end
class Game_Actor < Game_Battler
def screen_x
if self.index != nil
unless $game_party.actors.size > 4
return self.index * 160 + 80
else
return self.index * (640/ $game_party.actors.size) + (80/($game_party.actors.size/2))
end
else
return 0
end
end
end
class Scene_Battle
def phase3_setup_command_window
@party_command_window.active = false
@party_command_window.visible = false
@actor_command_window.active = true
@actor_command_window.visible = true
unless $game_party.actors.size > 4
@actor_command_window.x = @actor_index * 160
else
@actor_command_window.x = @actor_index * (640/$game_party.actors.size)
if @actor_command_window.x > 480
@actor_command_window.x = 480
end
end
@actor_command_window.index = 0
end
end
class Window_MenuStatus < Window_Selectable
def initialize
unless $game_party.actors.size > 4
super(0, 0, 480, 480)
else
super(0, 0, 480, 160 * $game_party.actors.size)
end
self.contents = Bitmap.new(width - 32, height - 32)
refresh
self.active = false
self.index = -1
end
alias large_refresh refresh
def refresh
large_refresh
self.height = 480
end
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
return
end
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
def top_row
return self.oy / 116
end
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
def page_row_max
return 4
end
end
And you need to make some changes to spriteset battle or copy the example if yours is the default.
If you just want a copy and paste put this above main and below spriteset battle
Code:
#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
# This class brings together battle screen sprites. It's used within
# the Scene_Battle class.
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :viewport1 # enemy viewport
attr_reader :viewport2 # actor viewport
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Make viewports
@viewport1 = Viewport.new(0, 0, 640, 320)
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport4 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 101
@viewport3.z = 200
@viewport4.z = 5000
# Make battleback sprite
@battleback_sprite = Sprite.new(@viewport1)
# Make enemy sprites
@enemy_sprites = []
for enemy in $game_troop.enemies.reverse
@enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
end
# Make actor sprites
@actor_sprites = []
#@actor_sprites.push(Sprite_Battler.new(@viewport2))
#@actor_sprites.push(Sprite_Battler.new(@viewport2))
#@actor_sprites.push(Sprite_Battler.new(@viewport2))
#@actor_sprites.push(Sprite_Battler.new(@viewport2))
for i in 0...$game_party.max_party
@actor_sprites.push(Sprite_Battler.new(@viewport2))
end
# Make weather
@weather = RPG::Weather.new(@viewport1)
# Make picture sprites
@picture_sprites = []
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3,
$game_screen.pictures[i]))
end
# Make timer sprite
@timer_sprite = Sprite_Timer.new
# Frame update
update
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update actor sprite contents (corresponds with actor switching)
#@actor_sprites[0].battler = $game_party.actors[0]
#@actor_sprites[1].battler = $game_party.actors[1]
#@actor_sprites[2].battler = $game_party.actors[2]
#@actor_sprites[3].battler = $game_party.actors[3]
for i in 0...$game_party.max_party
@actor_sprites[i].battler = $game_party.actors[i]
end
# If battleback file name is different from current one
if @battleback_name != $game_temp.battleback_name
@battleback_name = $game_temp.battleback_name
if @battleback_sprite.bitmap != nil
@battleback_sprite.bitmap.dispose
end
@battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
@battleback_sprite.src_rect.set(0, 0, 640, 320)
end
# Update battler sprites
for sprite in @enemy_sprites + @actor_sprites
sprite.update
end
# Update weather graphic
@weather.type = $game_screen.weather_type
@weather.max = $game_screen.weather_max
@weather.update
# Update picture sprites
for sprite in @picture_sprites
sprite.update
end
# Update timer sprite
@timer_sprite.update
# Set screen color tone and shake position
@viewport1.tone = $game_screen.tone
@viewport1.ox = $game_screen.shake
# Set screen flash color
@viewport4.color = $game_screen.flash_color
# Update viewports
@viewport1.update
@viewport2.update
@viewport4.update
end
end
Otherwise in spriteset battle find:
Code:
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
Code:
for i in 0...$game_party.max_party
@actor_sprites.push(Sprite_Battler.new(@viewport2))
end
Then find:
Code:
@actor_sprites[0].battler = $game_party.actors[0]
@actor_sprites[1].battler = $game_party.actors[1]
@actor_sprites[2].battler = $game_party.actors[2]
@actor_sprites[3].battler = $game_party.actors[3]
And replace it with:
Code:
for i in 0...$game_party.max_party
@actor_sprites[i].battler = $game_party.actors[i]
end
And your done to set the max party size go to the top of the script and find (not in spriteset battle the main script):
Code:
Max_Party = 5
END OF SCRIPT UNLESS YOU WANT IT COMPATABLE WITH RTAB AND PARADOG
Edit:
Revised: 05/04/2007 (DD/MM/YYYY)
DerVVulfman has done that thing I don't do (make scripts compatible with RTAB and the ParaDog system) to this script:
Code:
#===============================================================================
# ** Large Party System
# by Fomar0153
#-------------------------------------------------------------------------------
# This system allows you to break the 4 team barrier setup by RPGMaker XP. By
# using this code, you can have 5, 6 or even 10 member parties.
#
# NOTE: You may experience difficulties w/ 'draw_actor_hp' and 'draw_actor_sp'
# in combat due to the 'if... elsif...' block that controls the width of the
# HP and SP blocks. This problem will typically start with parties over five
# in size. Editing these defs is the only way to cancel this error.
#
#-------------------------------------------------------------------------------
# Part 1: General Systems
#-------------------------------------------------------------------------------
#
# (This script must be placed 'above' any Custom Battle System you're using.)
#
# This page of the code can enhance your project to allow parties of over four
# members. The controls are very simple. To establish a default number of
# party members, edit the PARTY SIZE value in the configuration section below.
# If you wish to alter the party size limit while the game is running, call on
# the $game_party.party_size value from a map event and change it there. But,
# remember that you'll need to run '$game_party.refresh' for the change to take
# effect.
#
#-------------------------------------------------------------------------------
# To Limit Parties below Four:
#
# "Only needed if you were to force parties to have fewer than four."
#
# By default, the party is set up for four team members and the default battle-
# system and most other systems are already designed to accomdate this. While
# this system allows you to increase the number of team members beyond four, it
# requires a minor edit to your default system (or custom battlesystem) to have
# parties forced to three or fewer members.
#
# In the Spriteset_Battle's update def, please remove/comment-out the following
# lines of code:
# @actor_sprites[0].battler = $game_party.actors[0]
# @actor_sprites[1].battler = $game_party.actors[1]
# @actor_sprites[2].battler = $game_party.actors[2]
# @actor_sprites[3].battler = $game_party.actors[3]
# These lines insert your party members into four preset slots. But, if you
# were to force a party smaller than four, an error would certainly occur.
# Fortunately, the Large Party system has this covered, and only by removing
# these lines is all that is needed to fix this error.
#
# You may need to remove these same lines in custom battlesystems as well...
#
#===============================================================================
PARTY_SIZE = 4
#==============================================================================
# ** 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_reader :party_size # Current size of the party
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
alias fomar_init initialize
def initialize
fomar_init
@party_size = PARTY_SIZE
end
#--------------------------------------------------------------------------
# * Add an Actor
# actor_id : actor ID
#--------------------------------------------------------------------------
def 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 not @actors.include?(actor) and $game_party.actors.size < $game_party.party_size
# Add actor
@actors.push(actor)
# Refresh player
$game_player.refresh
end
end
#--------------------------------------------------------------------------
# * Adjust the maximum party value (permits addition & keeps within range)
#--------------------------------------------------------------------------
def party_size=(party_size)
# Prevent Nil values
@party_size = 4 if party_size == nil
# Set party size
@party_size = party_size
# Reset to default if an incorrect value
@party_size = 4 if party_size < 1
end
end
#==============================================================================
# ** Window_MenuStatus
#------------------------------------------------------------------------------
# This window displays party member status on the menu screen.
#==============================================================================
class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
unless $game_party.actors.size > 4
super(0, 0, 480, 480)
else
super(0, 0, 480, 160 * $game_party.actors.size)
end
self.contents = Bitmap.new(width - 32, height - 32)
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
alias large_refresh refresh
def refresh
large_refresh
self.height = 480
end
#--------------------------------------------------------------------------
# * Cursor Rectangle Update
#--------------------------------------------------------------------------
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
return
end
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
#--------------------------------------------------------------------------
# * Get Top Row
#--------------------------------------------------------------------------
def top_row
return self.oy / 116
end
#--------------------------------------------------------------------------
# * Set Top Row
# row : row shown on top
#--------------------------------------------------------------------------
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
#--------------------------------------------------------------------------
# * Get Number of Rows Displayable on 1 Page
#--------------------------------------------------------------------------
def page_row_max
return 4
end
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Actor Command Window Setup
#--------------------------------------------------------------------------
alias fomar_p3_scw phase3_setup_command_window
def phase3_setup_command_window
fomar_p3_scw
unless $game_party.actors.size > 4
@actor_command_window.x = @actor_index * 160
else
@actor_command_window.x = @actor_index * (640/$game_party.actors.size)
if @actor_command_window.x > 480
@actor_command_window.x = 480
end
end
end
end
Code:
#===============================================================================
# ** Large Party System
# by Fomar0158
#-------------------------------------------------------------------------------
# This system allows you to break the 4 team barrier setup by RPGMaker XP. By
# using this code, you can have 5, 6 or even 10 member parties.
#
# NOTE: You may experience difficulties w/ 'draw_actor_hp' and 'draw_actor_sp'
# in combat due to the 'if... elsif...' block that controls the width of the
# HP and SP blocks. This problem will typically start with parties over five
# in size. Editing these defs is the only way to cancel this error.
#
#-------------------------------------------------------------------------------
# Part 2: Battlesystem Code
#-------------------------------------------------------------------------------
#
# (This script must be placed 'below' any Custom Battle System you're using.)
# (Only the 1st half for the RTAB system. Not for use with ParaDog's system.)
#
# This page of the code is designed for use with the battlesystem you are using
# at the time. By default, it was originally set up for the default battlesys-
# tem alone. It has since been edited for use with the RTAB battle systems.
#
# To use with RTAB, remove or comment out the Window_BattleStatus code at the
# bottom of this script. It has been clearly marked. The ParaDog script has
# already been designed for large party scripts, so the use of this system is
# not required. RTAB on the other hand has a unique scrolling battlestatus
# window and would require another script to replace its own.
#===============================================================================
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
# This class handles the actor. It's used within the Game_Actors class
# ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :bstat_pos # To adjust the battlestatus window
#--------------------------------------------------------------------------
# * Get Battle Screen X-Coordinate
#--------------------------------------------------------------------------
def screen_x
# Return after calculating x-coordinate by order of members in party
if self.index != nil
unless $game_party.actors.size > 4
return self.index * 160 + 80
else
return self.index * (640/ $game_party.actors.size) +
(80/($game_party.actors.size/2))
end
else
return 0
end
end
end
#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
# This class brings together battle screen sprites. It's used within
# the Scene_Battle class.
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
alias fomar_update update
def update
# Added routine to load battlers during combat
unless @battlers_loaded
@actor_sprites = []
for i in 0...$game_party.party_size
@actor_sprites.push(Sprite_Battler.new(@viewport2))
end
@battlers_loaded = true
end
# Perform the original call
fomar_update
# 'Re-'Update actor sprite contents (corresponds with actor switching)
for i in 0...$game_party.party_size
@actor_sprites[i].battler = $game_party.actors[i]
end
end
end
#==============================================================================
#==============================================================================
#
# **** REMOVE FROM HERE DOWN TO WORK WITH THE RTAB SYSTEM ****
#
#==============================================================================
#==============================================================================
#==============================================================================
# ** Window_BattleStatus
#------------------------------------------------------------------------------
# This window displays the status of all party members on the battle screen.
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
alias fomar_init initialize
def initialize
fomar_init
unless $game_party.actors.size > 4
@level_up_flags = [false, false, false, false]
else
@level_up_flags = []
for i in 0...$game_party.actors.size
@level_up_flags.push(false)
end
end
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
alias fomar_refresh refresh
def refresh
@bstat_width = (640 / $game_party.actors.size ) - 32
# Determine if the 1st position, 2nd position, 3rd...
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor.bstat_pos = (i * @bstat_width) + (32 * i)
end
# Call original
fomar_refresh
Graphics.frame_reset
end
#--------------------------------------------------------------------------
# * Draw Name
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
#--------------------------------------------------------------------------
alias fomar_da_name draw_actor_name
def draw_actor_name(actor, x, y)
x2 = actor.bstat_pos
fomar_da_name(actor, x2, y)
end
#--------------------------------------------------------------------------
# * Draw State
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
# width : draw spot width
#--------------------------------------------------------------------------
alias fomar_da_state draw_actor_state
def draw_actor_state(actor, x, y, width = 120)
# Reset the width
if width > @bstat_width
width = @bstat_width
end
x2 = actor.bstat_pos
fomar_da_state(actor, x2, y, width)
end
#--------------------------------------------------------------------------
# * Draw HP
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
# width : draw spot width
#--------------------------------------------------------------------------
alias fomar_da_hp draw_actor_hp
def draw_actor_hp(actor, x, y, width = 120)
# Reset the width
if width > @bstat_width
width = @bstat_width
end
x2 = actor.bstat_pos
if $game_party.actors.size < 6
fomar_da_hp(actor, x2, y, width)
else
fomar_da_hp(actor, x2, y, 48)
end
end
#--------------------------------------------------------------------------
# * Draw SP
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
# width : draw spot width
#--------------------------------------------------------------------------
alias fomar_da_sp draw_actor_sp
def draw_actor_sp(actor, x, y, width = 120)
# Reset the width
if width > @bstat_width
width = @bstat_width
end
x2 = actor.bstat_pos
if $game_party.actors.size < 6
fomar_da_sp(actor, x2, y, width)
else
fomar_da_sp(actor, x2, y, 48)
end
end
end
Also apparently it's SDK complient according to DerVVulfman.
You can change the party size from a map event by using:
Code:
@>Script: $game_party.party_size = 5
: : $game_party.refresh