
I made this for Lionheart's FF8 remake, thus the reason for there being a maximum of 3 party members.
Also, it is arranged for the DBS. If you wish to apply this to other battle systems please figure it out yourself as I get frustrated with other's problems usually if I don't have the code directly infront of me (I don't use other's battle systems ever.)
Make sure to import an entirely black image 640x480 into the Picture's folder named Blackout.png (Click Here)
Put this in a new script above MAIN called 'level':
CODE
$fontface = Font.default_name if $fontface.nil?
$fontsize = Font.default_size if $fontsize.nil?
class Window_EXPTitle < Window_Base
def initialize
super(0, 0, 640, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.visible = false
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(4,0,640,32,"EXP")
end
end
class Window_EXPPlayer1 < Window_Base
def initialize(exp)
@exp = exp
super(32, 64, 288, 128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z += 10
self.visible = false
refresh
end
def refresh
self.contents.clear
actor = $game_party.actors[0]
draw_actor_name(actor, 4, 0)
draw_actor_level(actor, 4, 32)
draw_actor_rcvexp(actor, 100, 0, @exp)
draw_actor_curexp(actor, 100, 32)
draw_actor_nxtexp(actor, 100, 64)
end
end
class Window_EXPPlayer2 < Window_Base
def initialize(exp)
@exp = exp
super(32, 192, 288, 128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z += 10
self.visible = false
refresh
end
def refresh
self.contents.clear
actor = $game_party.actors[1]
draw_actor_name(actor, 4, 0)
draw_actor_level(actor, 4, 32)
draw_actor_rcvexp(actor, 100, 0, @exp)
draw_actor_curexp(actor, 100, 32)
draw_actor_nxtexp(actor, 100, 64)
end
end
class Window_EXPPlayer3 < Window_Base
def initialize(exp)
@exp = exp
super(32, 320, 288, 128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z += 10
self.visible = false
refresh
end
def refresh
self.contents.clear
actor = $game_party.actors[2]
draw_actor_name(actor, 4, 0)
draw_actor_level(actor, 4, 32)
draw_actor_rcvexp(actor, 100, 0, @exp)
draw_actor_curexp(actor, 100, 32)
draw_actor_nxtexp(actor, 100, 64)
end
end
class Window_EXPBlank2 < Window_Base
def initialize
super(32, 192, 288, 128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z += 10
self.visible = false
end
end
class Window_EXPBlank3 < Window_Base
def initialize
super(32, 320, 288, 128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z += 10
self.visible = false
end
end
class Window_Background < Window_Base
def initialize
super(-16,-16,672,512)
self.opacity = 0
self.z = 9
self.visible = false
self.contents = Bitmap.new(width - 32, height - 32)
icon_bitmap = RPG::Cache.picture("Blackout.png") # Replace this with a 640x480 image of BLACK
self.contents.blt(0, 0, icon_bitmap, icon_bitmap.rect)
icon_bitmap.dispose
end
end
class Scene_Battle
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)
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
if @titleresult_window != nil
@titleresult_window.dispose
@p1result_window.dispose
@p2result_window.dispose
@p3result_window.dispose
@background_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
def start_phase5
@phase = 5
$game_system.me_play($game_system.battle_end_me)
$game_system.bgm_play($game_temp.map_bgm)
exp = 0
gold = 0
treasures = []
for enemy in $game_troop.enemies
unless enemy.hidden
exp += enemy.exp
gold += enemy.gold
if rand(100) < enemy.treasure_prob
if enemy.item_id > 0
treasures.push($data_items[enemy.item_id])
end
if enemy.weapon_id > 0
treasures.push($data_weapons[enemy.weapon_id])
end
if enemy.armor_id > 0
treasures.push($data_armors[enemy.armor_id])
end
end
end
end
treasures = treasures[0..5]
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
if actor.cant_get_exp? == false
last_level = actor.level
actor.exp += exp
if actor.level > last_level
@status_window.level_up(i)
end
end
end
$game_party.gain_gold(gold)
for item in treasures
case item
when RPG::Item
$game_party.gain_item(item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(item.id, 1)
when RPG::Armor
$game_party.gain_armor(item.id, 1)
end
end
@result_window = Window_BattleResult.new(gold, treasures)
@titleresult_window = Window_EXPTitle.new
case $game_party.actors.size
when 1
@p1result_window = Window_EXPPlayer1.new(exp)
@p2result_window = Window_EXPBlank2.new
@p3result_window = Window_EXPBlank3.new
when 2
@p1result_window = Window_EXPPlayer1.new(exp)
@p2result_window = Window_EXPPlayer2.new(exp)
@p3result_window = Window_EXPBlank3.new
when 3
@p1result_window = Window_EXPPlayer1.new(exp)
@p2result_window = Window_EXPPlayer2.new(exp)
@p3result_window = Window_EXPPlayer3.new(exp)
end
@background_window = Window_Background.new
@phase5_wait_count = 60
end
def update_phase5
if @phase5_wait_count > 0
@phase5_wait_count -= 1
if @phase5_wait_count == 0
@titleresult_window.visible = true
@p1result_window.visible = true
@p2result_window.visible = true
@p3result_window.visible = true
@result_window.visible = true
@background_window.visible = true
$game_temp.battle_main_phase = false
@status_window.refresh
end
return
end
if Input.trigger?(Input::C)
$game_switches[0001] = true
battle_end(0)
end
end
end
class Window_BattleResult < Window_Base
def initialize(gold, treasures)
@gold = gold
@treasures = treasures
super(320, 64, 288, 384)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z += 10
self.visible = false
refresh
end
def refresh
self.contents.clear
x = 4
self.contents.font.color = normal_color
cx = contents.text_size(@gold.to_s).width
self.contents.draw_text(x, 0, cx, 32, @gold.to_s)
x += cx + 4
self.contents.font.color = system_color
self.contents.draw_text(x, 0, 128, 32, $data_system.words.gold)
y = 32
for item in @treasures
draw_item_name(item, 4, y)
y += 32
end
end
end
class Window_Base
#-
def draw_actor_rcvexp(actor,x,y,exp)
self.contents.font.color = Color.new(255,255,128,255)
self.contents.draw_text(x,y,288,32,"EXP:")
self.contents.font.color = normal_color
self.contents.draw_text(x+60,y,80,32,exp.to_s,2)
end
#-
def draw_actor_curexp(actor,x,y)
self.contents.font.color = Color.new(255,255,128,255)
self.contents.draw_text(x,y,288,32,"Current:")
self.contents.font.color = normal_color
self.contents.draw_text(x+60,y,80,32,actor.exp_s,2)
end
#-
def draw_actor_nxtexp(actor,x,y)
self.contents.font.color = Color.new(255,255,128,255)
self.contents.draw_text(x,y,288,32,"Next:")
self.contents.font.color = normal_color
self.contents.draw_text(x+60,y,80,32,actor.next_exp_s,2)
end
end
class Window_BattleStatus < Window_Base
def initialize
super(0, 320, 640, 160)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z = 8
@level_up_flags = [false, false, false, false]
refresh
end
end
class Spriteset_Battle
def initialize
@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 = 8
@viewport3.z = 200
@viewport4.z = 5000
@battleback_sprite = Sprite.new(@viewport1)
@enemy_sprites = []
for enemy in $game_troop.enemies.reverse
@enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
end
@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))
@weather = RPG::Weather.new(@viewport1)
@picture_sprites = []
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3,
$game_screen.pictures[i]))
end
@timer_sprite = Sprite_Timer.new
update
end
end
$fontsize = Font.default_size if $fontsize.nil?
class Window_EXPTitle < Window_Base
def initialize
super(0, 0, 640, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.visible = false
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(4,0,640,32,"EXP")
end
end
class Window_EXPPlayer1 < Window_Base
def initialize(exp)
@exp = exp
super(32, 64, 288, 128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z += 10
self.visible = false
refresh
end
def refresh
self.contents.clear
actor = $game_party.actors[0]
draw_actor_name(actor, 4, 0)
draw_actor_level(actor, 4, 32)
draw_actor_rcvexp(actor, 100, 0, @exp)
draw_actor_curexp(actor, 100, 32)
draw_actor_nxtexp(actor, 100, 64)
end
end
class Window_EXPPlayer2 < Window_Base
def initialize(exp)
@exp = exp
super(32, 192, 288, 128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z += 10
self.visible = false
refresh
end
def refresh
self.contents.clear
actor = $game_party.actors[1]
draw_actor_name(actor, 4, 0)
draw_actor_level(actor, 4, 32)
draw_actor_rcvexp(actor, 100, 0, @exp)
draw_actor_curexp(actor, 100, 32)
draw_actor_nxtexp(actor, 100, 64)
end
end
class Window_EXPPlayer3 < Window_Base
def initialize(exp)
@exp = exp
super(32, 320, 288, 128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z += 10
self.visible = false
refresh
end
def refresh
self.contents.clear
actor = $game_party.actors[2]
draw_actor_name(actor, 4, 0)
draw_actor_level(actor, 4, 32)
draw_actor_rcvexp(actor, 100, 0, @exp)
draw_actor_curexp(actor, 100, 32)
draw_actor_nxtexp(actor, 100, 64)
end
end
class Window_EXPBlank2 < Window_Base
def initialize
super(32, 192, 288, 128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z += 10
self.visible = false
end
end
class Window_EXPBlank3 < Window_Base
def initialize
super(32, 320, 288, 128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z += 10
self.visible = false
end
end
class Window_Background < Window_Base
def initialize
super(-16,-16,672,512)
self.opacity = 0
self.z = 9
self.visible = false
self.contents = Bitmap.new(width - 32, height - 32)
icon_bitmap = RPG::Cache.picture("Blackout.png") # Replace this with a 640x480 image of BLACK
self.contents.blt(0, 0, icon_bitmap, icon_bitmap.rect)
icon_bitmap.dispose
end
end
class Scene_Battle
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)
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
if @titleresult_window != nil
@titleresult_window.dispose
@p1result_window.dispose
@p2result_window.dispose
@p3result_window.dispose
@background_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
def start_phase5
@phase = 5
$game_system.me_play($game_system.battle_end_me)
$game_system.bgm_play($game_temp.map_bgm)
exp = 0
gold = 0
treasures = []
for enemy in $game_troop.enemies
unless enemy.hidden
exp += enemy.exp
gold += enemy.gold
if rand(100) < enemy.treasure_prob
if enemy.item_id > 0
treasures.push($data_items[enemy.item_id])
end
if enemy.weapon_id > 0
treasures.push($data_weapons[enemy.weapon_id])
end
if enemy.armor_id > 0
treasures.push($data_armors[enemy.armor_id])
end
end
end
end
treasures = treasures[0..5]
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
if actor.cant_get_exp? == false
last_level = actor.level
actor.exp += exp
if actor.level > last_level
@status_window.level_up(i)
end
end
end
$game_party.gain_gold(gold)
for item in treasures
case item
when RPG::Item
$game_party.gain_item(item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(item.id, 1)
when RPG::Armor
$game_party.gain_armor(item.id, 1)
end
end
@result_window = Window_BattleResult.new(gold, treasures)
@titleresult_window = Window_EXPTitle.new
case $game_party.actors.size
when 1
@p1result_window = Window_EXPPlayer1.new(exp)
@p2result_window = Window_EXPBlank2.new
@p3result_window = Window_EXPBlank3.new
when 2
@p1result_window = Window_EXPPlayer1.new(exp)
@p2result_window = Window_EXPPlayer2.new(exp)
@p3result_window = Window_EXPBlank3.new
when 3
@p1result_window = Window_EXPPlayer1.new(exp)
@p2result_window = Window_EXPPlayer2.new(exp)
@p3result_window = Window_EXPPlayer3.new(exp)
end
@background_window = Window_Background.new
@phase5_wait_count = 60
end
def update_phase5
if @phase5_wait_count > 0
@phase5_wait_count -= 1
if @phase5_wait_count == 0
@titleresult_window.visible = true
@p1result_window.visible = true
@p2result_window.visible = true
@p3result_window.visible = true
@result_window.visible = true
@background_window.visible = true
$game_temp.battle_main_phase = false
@status_window.refresh
end
return
end
if Input.trigger?(Input::C)
$game_switches[0001] = true
battle_end(0)
end
end
end
class Window_BattleResult < Window_Base
def initialize(gold, treasures)
@gold = gold
@treasures = treasures
super(320, 64, 288, 384)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z += 10
self.visible = false
refresh
end
def refresh
self.contents.clear
x = 4
self.contents.font.color = normal_color
cx = contents.text_size(@gold.to_s).width
self.contents.draw_text(x, 0, cx, 32, @gold.to_s)
x += cx + 4
self.contents.font.color = system_color
self.contents.draw_text(x, 0, 128, 32, $data_system.words.gold)
y = 32
for item in @treasures
draw_item_name(item, 4, y)
y += 32
end
end
end
class Window_Base
#-
def draw_actor_rcvexp(actor,x,y,exp)
self.contents.font.color = Color.new(255,255,128,255)
self.contents.draw_text(x,y,288,32,"EXP:")
self.contents.font.color = normal_color
self.contents.draw_text(x+60,y,80,32,exp.to_s,2)
end
#-
def draw_actor_curexp(actor,x,y)
self.contents.font.color = Color.new(255,255,128,255)
self.contents.draw_text(x,y,288,32,"Current:")
self.contents.font.color = normal_color
self.contents.draw_text(x+60,y,80,32,actor.exp_s,2)
end
#-
def draw_actor_nxtexp(actor,x,y)
self.contents.font.color = Color.new(255,255,128,255)
self.contents.draw_text(x,y,288,32,"Next:")
self.contents.font.color = normal_color
self.contents.draw_text(x+60,y,80,32,actor.next_exp_s,2)
end
end
class Window_BattleStatus < Window_Base
def initialize
super(0, 320, 640, 160)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.z = 8
@level_up_flags = [false, false, false, false]
refresh
end
end
class Spriteset_Battle
def initialize
@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 = 8
@viewport3.z = 200
@viewport4.z = 5000
@battleback_sprite = Sprite.new(@viewport1)
@enemy_sprites = []
for enemy in $game_troop.enemies.reverse
@enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
end
@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))
@weather = RPG::Weather.new(@viewport1)
@picture_sprites = []
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3,
$game_screen.pictures[i]))
end
@timer_sprite = Sprite_Timer.new
update
end
end
Enjoy.

