# 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
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
#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
#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