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 1 Guest 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