RMRK is retiring.
Server is paid up for the rest of 2026, but the forum may go after that. See here for more information. Please archive or save anything you would like to keep before 2027.
Main Menu
  • Welcome to The RPG Maker Resource Kit.

More party members

Started by Mewgull, February 08, 2006, 02:21:01 AM

0 Members and 2 Guests are viewing this topic.

Mewgull

okay, I don't know if this has been asked before(this is my first topic) but I was wondering how to have more party members in the game, and what I mean is that there is still 4 on the battle field, but you can switch the players around on the status screen and then the first 4 people in the status screen will be the people on the battle field... did that make sence?

thanks
-Mewgull

Dalton

Tactical Menu by Squall on rmxp.net

Add me on AIM / MSN / Yahoo, I'll give you the demo.

Mewgull


Dalton

I got the code as a seperate file after many hours of trying to open the file *it was a bit corrupted, heh*

# script made by squall from rmxp.net / squall@loeher.zzn.com

# don't really need to give me credit for this.

# please paste the script in a new section ABOVE "main"

# this allow to have an unlimited number of actor in party.

# to change the max actors that can be in the party look just below.

# the party is cut down to 4 actor in battles

# some windows are compacted or re-made to fit with some other ones. those are

# Window_Gold and Window_PlayTime. feel free to remove them if you don't like

# the way they are...

# Enjoy!

#==============================================================================
# â–  Game_Party
#==============================================================================

class Game_Party
 #--------------------------------------------------------------------------
 # ● define instance variable
 #--------------------------------------------------------------------------
 attr_accessor :actors
 #--------------------------------------------------------------------------
 # ● add an actor to the party the number (red) is
 #    the max actors to be in party
 #--------------------------------------------------------------------------
 def add_actor(actor_id)
   actor = $game_actors[actor_id]
   if @actors.size < 200 and not @actors.include?(actor)
     @actors.push(actor)
     $game_player.refresh
   end
 end
end

#==============================================================================
# â–  Window_Base
#==============================================================================

class Window_Base < Window
 #--------------------------------------------------------------------------
 # ● draw character's battle sprite
 #--------------------------------------------------------------------------
 def draw_actor_battlegraphic(actor, x, y, opacity = 255)
   bitmap = RPG::Cache.battler(actor.character_name, actor.character_hue)
   src_rect = Rect.new(0, 0, 111, 111)
   self.contents.blt(x, y, bitmap, src_rect, opacity)
 end
 #--------------------------------------------------------------------------
 # ● draw character's HP meter
 #--------------------------------------------------------------------------
 def draw_actor_hp_meter(actor, x, y, width = 70, type = 0)
   if type == 1 and actor.hp == 0
     return
   end
   self.contents.font.color = system_color
   self.contents.fill_rect(x-1, y+27, width+2,5, Color.new(0, 0, 0, 255))
   w = width * actor.hp / actor.maxhp
   self.contents.fill_rect(x, y+28, w,1, Color.new(174, 68, 89, 255))
   self.contents.fill_rect(x, y+29, w,1, Color.new(156, 61, 80, 255))
   self.contents.fill_rect(x, y+30, w,1, Color.new(138, 53, 70, 255))
 end
 #--------------------------------------------------------------------------
 # ● draw character's SP meter
 #--------------------------------------------------------------------------
 def draw_actor_sp_meter(actor, x, y, width = 70, type = 0)
   if type == 1 and actor.sp == 0
     return
   end
   self.contents.font.color = system_color
   self.contents.fill_rect(x-1, y+27, width+2,5, Color.new(0, 0, 0, 255))
   w = width * actor.sp / actor.maxsp
   self.contents.fill_rect(x, y+28, w,1, Color.new(62, 72, 164, 255))
   self.contents.fill_rect(x, y+29, w,1, Color.new(55, 65, 149, 255))
   self.contents.fill_rect(x, y+30, w,1, Color.new(49, 57, 130, 255))
 end
 #--------------------------------------------------------------------------
 # ● define method to draw squares
 #--------------------------------------------------------------------------
 def draw_square(x, y, width, color)
   self.contents.fill_rect(x, y, width, 1, color)
   self.contents.fill_rect(x, y, 1, width, color)
   self.contents.fill_rect(x + width, y, 1, width + 1, color)
   self.contents.fill_rect(x, y + width, width + 1, 1, color)
 end
end

#==============================================================================
# â–  Window_Gold
#------------------------------------------------------------------------------
#  in this one the text has been replaced by an icon. ^^
#==============================================================================

class Window_Gold < Window_Base
 #--------------------------------------------------------------------------
 # ● initialize
 #--------------------------------------------------------------------------
 def initialize
   super(0, 0, 160, 64)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.contents.font.name = $fontface
   self.contents.font.size = $fontsize
   refresh
 end
 #--------------------------------------------------------------------------
 # ● refresh
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   cx = 24
   self.contents.font.color = normal_color
   self.contents.draw_text(4, 0, 120-cx-2, 32, $game_party.gold.to_s, 2)
   self.contents.font.color = system_color
   bitmap = RPG::Cache.icon("032-Item01")
   rect = Rect.new(0, 0, 24, 24)
   self.contents.blt(124-cx, 0, bitmap, rect)
 end
end

#==============================================================================
# â–  Window_PlayTime
#------------------------------------------------------------------------------
#  This window has been compacted a bit to show every command in the menu
#==============================================================================

class Window_PlayTime < Window_Base
 #--------------------------------------------------------------------------
 # ● initialize
 #--------------------------------------------------------------------------
 def initialize
   super(0, 0, 160, 64)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.contents.font.name = $fontface
   self.contents.font.size = $fontsize
   refresh
 end
 #--------------------------------------------------------------------------
 # ● refresh
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   @total_sec = Graphics.frame_count / Graphics.frame_rate
   hour = @total_sec / 60 / 60
   min = @total_sec / 60 % 60
   sec = @total_sec % 60
   text = sprintf("%02d:%02d:%02d", hour, min, sec)
   self.contents.font.color = normal_color
   self.contents.draw_text(4, 0, 120, 32, text, 2)
 end
 #--------------------------------------------------------------------------
 # ● redefine update method
 #--------------------------------------------------------------------------
 def update
   super
   if Graphics.frame_count / Graphics.frame_rate != @total_sec
     refresh
   end
 end
end

#==============================================================================
# â–  Window_MenuStatus
#==============================================================================

class Window_MenuStatus < Window_Selectable
 #--------------------------------------------------------------------------
 # ● initialize
 #--------------------------------------------------------------------------
 def initialize
   super(0, 0, 480, 480)
   @column_max = 4
   @item_max = $game_party.actors.size
   self.contents = Bitmap.new(width - 32, row_max * 112)
   self.contents.font.name = $fontface
   self.contents.font.size = $fontsize/1.2
   refresh
   self.active = false
   self.index = -1
 end
 #--------------------------------------------------------------------------
 # ● refresh
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   for i in 0...$game_party.actors.size
     x = i % 4 * 112
     y = i / 4 * 112
     actor = $game_party.actors[i]
     #draw a square to seperate chars, change disabled color with whatever
     #color you want... (method to draw square is below...)
     draw_square(x, y, 111, disabled_color)
     draw_actor_battlegraphic(actor, x, y, 50)
     draw_actor_graphic(actor, x + 90, y + 50)
     draw_actor_name(actor, x + 5, y)
     self.contents.draw_text(x + 5, y + 20, 112, 32, "HP : #{actor.hp}")
     self.contents.draw_text(x + 5, y + 40, 112, 32, "MP : #{actor.sp}")
     draw_actor_level(actor, x + 5, y + 60)
     draw_actor_state(actor, x + 5, y + 80)
     draw_actor_hp_meter(actor, x + 5, y + 17)
     draw_actor_sp_meter(actor, x + 5, y + 37)
   end
 end
 #--------------------------------------------------------------------------
 # ● define the page's top row
 #--------------------------------------------------------------------------
 def top_row
   return self.oy / 112
 end
 #--------------------------------------------------------------------------
 # ● define the page maximum rows
 #--------------------------------------------------------------------------
 def page_row_max
   return (self.height - 32) / 112
 end
 #--------------------------------------------------------------------------
 # ● defines a method to change the page's top row
 #--------------------------------------------------------------------------
 def top_row=(row)
   if row < 0
     row = 0
   end
   if row > row_max - 1
     row = row_max - 1
   end
   self.oy = row * 112
 end
 #--------------------------------------------------------------------------
 # ● update the cursor movement
 #--------------------------------------------------------------------------
 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
   self.cursor_rect.set(@index % 4 * 112, @index / 4 * 112 - self.oy, 112, 112)
 end
end


#==============================================================================
# â–  Window_Target
#==============================================================================

class Window_Target < Window_Selectable
 #--------------------------------------------------------------------------
 # ● initialize
 #--------------------------------------------------------------------------
 def initialize
   super(0, 0, 336, 480)
   @column_max = 2
   @item_max = $game_party.actors.size
   self.contents = Bitmap.new(width - 32, row_max * 112)
   self.contents.font.name = $fontface
   self.contents.font.size = $fontsize/1.2
   self.z += 10
   refresh
 end
 #--------------------------------------------------------------------------
 # ● refresh
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   for i in 0...$game_party.actors.size
     x = i % 2 * 112 + 36
     y = i / 2 * 112
     actor = $game_party.actors[i]
     #draw a square to seperate chars, change disabled color with whatever
     #color you want... (method to draw square is below...)
     draw_square(x, y, 111, disabled_color)
     draw_actor_battlegraphic(actor, x, y, 50)
     draw_actor_graphic(actor, x + 90, y + 50)
     draw_actor_name(actor, x + 5, y)
     self.contents.draw_text(x + 5, y + 20, 112, 32, "HP : #{actor.hp}")
     self.contents.draw_text(x + 5, y + 40, 112, 32, "MP : #{actor.sp}")
     draw_actor_level(actor, x + 5, y + 60)
     draw_actor_state(actor, x + 5, y + 80)
     draw_actor_hp_meter(actor, x + 5, y + 17)
     draw_actor_sp_meter(actor, x + 5, y + 37)
   end
 end
 #--------------------------------------------------------------------------
 # ● define the page's top row
 #--------------------------------------------------------------------------
 def top_row
   return self.oy / 112
 end
 #--------------------------------------------------------------------------
 # ● define the page maximum rows
 #--------------------------------------------------------------------------
 def page_row_max
   return (self.height - 32) / 112
 end
 #--------------------------------------------------------------------------
 # ● defines a method to change the page's top row
 #--------------------------------------------------------------------------
 def top_row=(row)
   if row < 0
     row = 0
   end
   if row > row_max - 1
     row = row_max - 1
   end
   self.oy = row * 112
 end
 #--------------------------------------------------------------------------
 # ● update the cursor movement
 #--------------------------------------------------------------------------
 def 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
   if @index <= -2
     self.cursor_rect.empty
   elsif @index == -1
     self.cursor_rect.set(0, 0, self.width - 32, @item_max * 116 - 20)
   else
     self.cursor_rect.set(@index % 2 * 112 + 36, @index / 2 * 112 - self.oy, 112, 112)
   end
 end
end

#==============================================================================
# â–  Scene_Menu
#==============================================================================

class Scene_Menu
 #--------------------------------------------------------------------------
 # ● initialize
 #--------------------------------------------------------------------------
 def initialize(menu_index = 0)
   @menu_index = menu_index
   @actor_change = false
 end
 #--------------------------------------------------------------------------
 # ● main
 #--------------------------------------------------------------------------
 def main
   s1 = $data_system.words.item
   s2 = $data_system.words.skill
   s3 = $data_system.words.equip
   s4 = "Status"
   s5 = "Save"
   s6 = "End Game"
   s7 = "Party"
   @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
   @command_window.index = @menu_index
   if $game_party.actors.size == 0
     @command_window.disable_item(0)
     @command_window.disable_item(1)
     @command_window.disable_item(2)
     @command_window.disable_item(3)
   end
   if $game_system.save_disabled
     @command_window.disable_item(4)
   end
   @playtime_window = Window_PlayTime.new
   @playtime_window.x = 0
   @playtime_window.y = 256 #224
   
   @steps_window = Window_Steps.new
   @steps_window.x = 0
   @steps_window.y = 320

   @gold_window = Window_Gold.new
   @gold_window.x = 0
   @gold_window.y = 416

   @status_window = Window_MenuStatus.new
   @status_window.x = 160
   @status_window.y = 0
   
   Graphics.transition

   loop do
     Graphics.update
     Input.update
     update
     if $scene != self
       break
     end
   end
   Graphics.freeze

   @command_window.dispose
   @playtime_window.dispose
   @steps_window.dispose
   @gold_window.dispose
   @status_window.dispose
 end
 #--------------------------------------------------------------------------
 # ● update the windows
 #--------------------------------------------------------------------------
 def update
   @command_window.update
   @playtime_window.update
   @steps_window.update
   @gold_window.update
   @status_window.update

   if @command_window.active
     update_command
     return
   end
   if @status_window.active
     update_status
     return
   end
 end
 #--------------------------------------------------------------------------
 # ● update the command window
 #--------------------------------------------------------------------------
 def update_command
   if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     $scene = Scene_Map.new
     return
   end
   if Input.trigger?(Input::C)
     if $game_party.actors.size == 0 and @command_window.index < 4
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     case @command_window.index
     when 0  # Item
       $game_system.se_play($data_system.decision_se)
       $scene = Scene_Item.new
     when 1  # Skill
       $game_system.se_play($data_system.decision_se)
       @command_window.active = false
       @status_window.active = true
       @status_window.index = 0
     when 2  # Equip
       $game_system.se_play($data_system.decision_se)
       @command_window.active = false
       @status_window.active = true
       @status_window.index = 0
     when 3  # Status
       $game_system.se_play($data_system.decision_se)
       @command_window.active = false
       @status_window.active = true
       @status_window.index = 0
     when 4  # Save
       if $game_system.save_disabled
         $game_system.se_play($data_system.buzzer_se)
         return
       end
       $game_system.se_play($data_system.decision_se)
       $scene = Scene_Save.new
     when 5  # End
       $game_system.se_play($data_system.decision_se)
       $scene = Scene_End.new
     when 6 # party actors switch
       $game_system.se_play($data_system.decision_se)
       @command_window.active = false
       @status_window.active = true
       @status_window.index = 0
     end
     return
   end
 end
 #--------------------------------------------------------------------------
 # ● update the status window
 #--------------------------------------------------------------------------
 def update_status
   if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     @command_window.active = true
     @status_window.active = false
     @status_window.index = -1
     @actor_change = false
     return
   end
   if Input.trigger?(Input::C)
     case @command_window.index
     when 1  # Skill
       if $game_party.actors[@status_window.index].restriction >= 2
         $game_system.se_play($data_system.buzzer_se)
         return
       end
       $game_system.se_play($data_system.decision_se)
       $scene = Scene_Skill.new(@status_window.index)
     when 2  # Equip
       $game_system.se_play($data_system.decision_se)
       $scene = Scene_Equip.new(@status_window.index)
     when 3  # Status
       $game_system.se_play($data_system.decision_se)
       $scene = Scene_Status.new(@status_window.index)
     when 6 # party actors switch
       if @actor_change == true
         $game_party.actors[@old_index] = $game_party.actors[@status_window.index]
         $game_party.actors[@status_window.index] = @new_actor
         @actor_change = false
         @status_window.refresh
         return
       end
       @old_index = @status_window.index
       @new_actor = $game_party.actors[@status_window.index]
       @actor_change = true
     end
     return
   end
 end
end

#==============================================================================
# â–  Scene_Battle (Part 1)
#==============================================================================

class Scene_Battle
 #--------------------------------------------------------------------------
 # ● main
 #--------------------------------------------------------------------------
 def main
   $game_temp.in_battle = true
   $game_temp.battle_turn = 0
   $game_temp.battle_event_flags.clear
   $game_temp.battle_abort = false
   $game_temp.battle_main_phase = false
   $game_temp.battleback_name = $game_map.battleback_name
   $game_temp.forcing_battler = nil
   $game_system.battle_interpreter.setup(nil, 0)
   @troop_id = $game_temp.battle_troop_id
   $game_troop.setup(@troop_id)
   #memorize actors in party and cut the party down to 4 actors
   @party_mem = $game_party.actors
   $game_party.actors = $game_party.actors[0..3]
   s1 = $data_system.words.attack
   s2 = $data_system.words.skill
   s3 = $data_system.words.guard
   s4 = $data_system.words.item
   @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
   @actor_command_window.y = 160
   @actor_command_window.back_opacity = 160
   @actor_command_window.active = false
   @actor_command_window.visible = false
   @party_command_window = Window_PartyCommand.new
   @help_window = Window_Help.new
   @help_window.back_opacity = 160
   @help_window.visible = false
   @status_window = Window_BattleStatus.new
   @message_window = Window_Message.new
   @spriteset = Spriteset_Battle.new
   @wait_count = 0
   if $data_system.battle_transition == ""
     Graphics.transition(20)
   else
     Graphics.transition(40, "Graphics/Transitions/" +
       $data_system.battle_transition)
   end
   start_phase1
   loop do
     Graphics.update
     Input.update
     update
     if $scene != self
       break
     end
   end
   $game_map.refresh
   Graphics.freeze
   @actor_command_window.dispose
   @party_command_window.dispose
   @help_window.dispose
   @status_window.dispose
   @message_window.dispose
   if @skill_window != nil
     @skill_window.dispose
   end
   if @item_window != nil
     @item_window.dispose
   end
   if @result_window != nil
     @result_window.dispose
   end
   @spriteset.dispose
   if $scene.is_a?(Scene_Title)
     Graphics.transition
     Graphics.freeze
   end
   if $BTEST and not $scene.is_a?(Scene_Gameover)
     $scene = nil
   end
 end
 #--------------------------------------------------------------------------
 # ● battle end
 #--------------------------------------------------------------------------
 def battle_end(result)
   $game_temp.in_battle = false
   $game_party.clear_actions
   for actor in $game_party.actors
     actor.remove_states_battle
   end
   $game_troop.enemies.clear
   if $game_temp.battle_proc != nil
     $game_temp.battle_proc.call(result)
     $game_temp.battle_proc = nil
   end
   $game_party.actors = @party_mem
   $scene = Scene_Map.new
 end
end

Nightwolf

Wo0t,that script is long, but who'd want more than 4 partry members, the game wold be easirer, but again it's the maker's choice.
Arlen is hot.

Jesse 015

Quote from: NightwolfWo0t,that script is long, but who'd want more than 4 partry members, the game wold be easirer, but again it's the maker's choice.

i should of quoted the guy who made this topic, wat r u really requesting, more party members or how to switch them around
Badass, and a do'er not a thinker

Mewgull


Jesse 015

then here is the event for switching around party members



Message: would u like to have ??? for ???
Choise: yes, no
yes: remove party member [???]+1
      add party member [???]+1
no:mesage: then go away!


:D
Badass, and a do'er not a thinker

Mewgull

ya, but I want to have more than just 4 pary members in the party... know what I mean?

Dalton

He wants more than 4 members in the party, with being able to switch them around while only the first 4 will fight.  That is EXACTLY what the script I got does, and I have tested it... but apparently it doesn't work for the legal version because of the slight difference in the RGSS between those 2

blueXx

,,,

link 1:
http://www.megaupload.com/?d=4P3TO26Q

link 2:
http://z13.zupload.com/file.php?filepath=10189

if i understand right, this will give you the solution to your problems

i've already made this for another question, which i believe is actually the same one so don't be afraid to use the search button next time
holy shit my sig was big!

Jesse 015

Quote from: Mewgullya, but I want to have more than just 4 pary members in the party... know what I mean?

why blame me, i just showed u how to change party members, i could not care less about more party members
Badass, and a do'er not a thinker

Mewgull

Quote from: Jesse 015
Quote from: Mewgullya, but I want to have more than just 4 pary members in the party... know what I mean?

why blame me, i just showed u how to change party members, i could not care less about more party members

Okay first of all I wasn't even trying to make you look dumb :?

second, I don't like getting someone mad because I don't even know them :o

third, I fixed the bug in that code and it's working fine now, thank you

Jesse 015

Badass, and a do'er not a thinker