this is a script i made, it change the way battle result shown
and this is what it can do :
- Exp & Gold have rolling effect
- notice level up and new skill learned
- item page is changeable in case received item more than 4
#=================================================================
# ? Battle Result by A3D Ver. 1.02
# Useful : show battle result in a different way
# Effect to default script : this code will replace methode "start_phase5" & "update_phase5" in Scene_Battle
# How to install : in script editor, insert all the code above main
# Note : this script is for non-commercial use only, give credit if use
# Contact : A3D (hyper_s@hotmail.com)
#=================================================================
module A3D
WAIT_WINDOW_APPEAR = 60
WAIT_RUNNING_NUMBER = 20
STEP_EXP = 1
STEP_GOLD = 1
SE_LEVELUP = ["007-System07", 100, 100]
SE_NEWSKILL = ["007-System07", 100, 100]
FONT_NAME = "Tahoma"
FONT_SIZE = 22
end
#==============================================================================
# ? Scene_Battle
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ? After battle phase start
#--------------------------------------------------------------------------
def start_phase5
# It moves to phase 5
@phase = 5
# Performing battle end ME
$game_system.me_play($game_system.battle_end_me)
# You reset to BGM before the battle starting
$game_system.bgm_play($game_temp.map_bgm)
# Initializing EXP, the gold and the treasure
exp = 0
gold = 0
treasures = []
# Loop
for enemy in $game_troop.enemies
# When the enemy hides and it is not state
unless enemy.hidden
# Adding acquisition EXP and the gold
exp += enemy.exp
gold += enemy.gold
# Treasure appearance decision
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
# Treasure acquisition
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
# Create Variable & Window
@phase5_step = 1
@wait_window_appear = A3D::WAIT_WINDOW_APPEAR
@wait_running_number = A3D::WAIT_RUNNING_NUMBER
@resultreceive_window = Window_ResultReceive.new(exp, gold, treasures)
@resultgold_window = Window_ResultGold.new
@resultparty_window = Window_ResultParty.new
@actor_level_before = []
@resultlevel_window = []
@resultskill_window = []
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
@actor_level_before[i] = actor.level
@resultlevel_window[i] = Window_ResultLevel.new(i)
@resultskill_window[i] = Window_ResultSkill.new(i)
end
end
#--------------------------------------------------------------------------
# ? Update Phase 5
#--------------------------------------------------------------------------
def update_phase5
case @phase5_step
when 1 # EXP & Gold Phase
update_phase5_step1
when 2 # Skill Phase
update_phase5_step2
when 3 # Delete Window Phase
update_phase5_step3
end
end
#--------------------------------------------------------------------------
# ? Update Phase 5 Step 1
#--------------------------------------------------------------------------
def update_phase5_step1
# Wait Count Before Window Appear
if @wait_window_appear > 0
@wait_window_appear -= 1
if @wait_window_appear == 0
@resultreceive_window.visible = true
@resultgold_window.visible = true
@resultparty_window.visible = true
$game_temp.battle_main_phase = false
end
return
end
# Wait Count Before Running Number
if @wait_running_number > 0
@wait_running_number -= 1
return
end
# Change Item Page
if Input.trigger?(Input::RIGHT)
if @resultreceive_window.max_page != 1
$game_system.se_play($data_system.cursor_se)
@resultreceive_window.page = @resultreceive_window.page == 1 ? 2 : 1
@resultreceive_window.refresh
end
end
# EXP & Gold Rolling
if (@resultreceive_window.exp != 0 || @resultreceive_window.gold != 0)
# Input C to Shortcut Calculation
if Input.trigger?(Input::C)
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
level_before = actor.level
actor.exp += @resultreceive_window.exp
if actor.level > level_before
@resultlevel_window[i].visible = true
Audio.se_play("Audio/SE/" + A3D::SE_LEVELUP[0], A3D::SE_LEVELUP[1], A3D::SE_LEVELUP[2])
end
end
$game_party.gain_gold(@resultreceive_window.gold)
@resultreceive_window.exp = 0
@resultreceive_window.gold = 0
@resultreceive_window.refresh
@resultgold_window.refresh
@resultparty_window.refresh
end
# EXP
if @resultreceive_window.exp != 0
step_exp = @resultreceive_window.exp >= A3D::STEP_EXP.abs ? A3D::STEP_EXP.abs : @resultreceive_window.exp
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
if actor.next_rest_exp <= step_exp && actor.next_rest_exp != 0
@resultlevel_window[i].visible = true
Audio.se_play("Audio/SE/" + A3D::SE_LEVELUP[0], A3D::SE_LEVELUP[1], A3D::SE_LEVELUP[2])
end
actor.exp += step_exp
end
@resultreceive_window.exp -= step_exp
@resultreceive_window.refresh
@resultparty_window.refresh
end
# Gold
if @resultreceive_window.gold != 0
step_gold = @resultreceive_window.gold >= A3D::STEP_GOLD.abs ? A3D::STEP_GOLD.abs : @resultreceive_window.gold
$game_party.gain_gold(step_gold)
@resultreceive_window.gold -= step_gold
@resultreceive_window.refresh
@resultgold_window.refresh
end
return
end
# Input C to Bypass Step
if Input.trigger?(Input::C)
@phase5_step = 2
return
end
end
#--------------------------------------------------------------------------
# ? Update Phase 5 Step 2
#--------------------------------------------------------------------------
def update_phase5_step2
# Change Item Page
if Input.trigger?(Input::RIGHT)
if @resultreceive_window.max_page != 1
$game_system.se_play($data_system.cursor_se)
@resultreceive_window.page = @resultreceive_window.page == 1 ? 2 : 1
@resultreceive_window.refresh
end
end
# Initialize Skill Phase
if @initialized_skill_phase == nil
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
for skill in $data_classes[actor.class_id].learnings
if skill.level > @actor_level_before[i] && skill.level <= actor.level
Audio.se_play("Audio/SE/" + A3D::SE_NEWSKILL[0], A3D::SE_NEWSKILL[1], A3D::SE_NEWSKILL[2])
@resultskill_window[i].skill_id = skill.skill_id
@resultskill_window[i].visible = true
@resultskill_window[i].refresh
@skill_phase_active = true
end
end
end
@initialized_skill_phase = true
end
# If Skill Phase Active, Show Window
if @skill_phase_active != nil
if @resultskill_window[0].x != 456
for i in 0...$game_party.actors.size
@resultskill_window[i].x -= 23
end
return
end
else
@phase5_step = 3
return
end
# Input C to Bypass Step
if Input.trigger?(Input::C)
@phase5_step = 3
return
end
end
#--------------------------------------------------------------------------
# ? Update Phase 5 Step 3
#--------------------------------------------------------------------------
def update_phase5_step3
# Delete All Result-Window
@resultreceive_window.dispose
@resultgold_window.dispose
@resultparty_window.dispose
for i in 0...$game_party.actors.size
@resultlevel_window[i].dispose
@resultskill_window[i].dispose
end
battle_end(0)
end
end
#==============================================================================
# ? Game_Actor
#==============================================================================
class Game_Actor
def next_rest_exp
return @exp_list[@level+1] > 0 ? (@exp_list[@level+1] - @exp) : 0
end
end
#==============================================================================
# ? Window_ResultReceive
#==============================================================================
class Window_ResultReceive < Window_Base
#--------------------------------------------------------------------------
# ? Attr
#--------------------------------------------------------------------------
attr_accessor :exp
attr_accessor :gold
attr_accessor :page
attr_reader :max_page
#--------------------------------------------------------------------------
# ? Initialize
#--------------------------------------------------------------------------
def initialize(exp, gold, treasures)
super(40, 28, 224, 212)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = A3D::FONT_NAME
self.contents.font.size = A3D::FONT_SIZE
self.back_opacity = 160
self.visible = false
@exp = exp
@gold = gold
@treasures = treasures
@page = 1
@max_page = treasures.size > 4 ? 2 : 1
refresh
end
#--------------------------------------------------------------------------
# ? Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(0, -8, self.width - 32, 32, "Exp")
self.contents.draw_text(0, 16, self.width - 32, 32, $data_system.words.gold)
self.contents.draw_text(0, 40, self.width - 32, 32, $data_system.words.item + " [" + @page.to_s + "/" + @max_page.to_s + "]" )
self.contents.font.color = normal_color
self.contents.draw_text(0, -8, self.width - 32, 32, @exp.to_s, 2)
self.contents.draw_text(0, 16, self.width - 32, 32, @gold.to_s, 2)
if @treasures.size == 0
self.contents.draw_text(0, 68, self.width - 32, 32, "< Nothing. >")
elsif @treasures.size > 4
bitmap = RPG::Cache.windowskin($game_system.windowskin_name)
self.contents.blt(184, 116, bitmap, Rect.new(168, 24, 16, 16), 255)
end
y = 68
item_start_index = @page == 1 ? 0 : 4
for i in item_start_index...@treasures.size
item = @treasures[i]
draw_item_name(item, 0, y)
y += 28
end
end
end
#==============================================================================
# ? Window_ResultGold
#==============================================================================
class Window_ResultGold < Window_Base
#--------------------------------------------------------------------------
# ? Initialize
#--------------------------------------------------------------------------
def initialize
super(40, 240, 224, 52)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = A3D::FONT_NAME
self.contents.font.size = A3D::FONT_SIZE
self.back_opacity = 160
self.visible = false
refresh
end
#--------------------------------------------------------------------------
# ? Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(0, -8, self.width - 32, 32, "Total " + $data_system.words.gold)
self.contents.font.color = normal_color
self.contents.draw_text(0, -8, self.width - 32, 32, $game_party.gold.to_s, 2)
end
end
#==============================================================================
# ? Window_ResultParty
#==============================================================================
class Window_ResultParty < Window_Base
#--------------------------------------------------------------------------
# ? Initialize
#--------------------------------------------------------------------------
def initialize
super(264, 28, 336, 264)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = A3D::FONT_NAME
self.contents.font.size = A3D::FONT_SIZE
self.back_opacity = 160
self.visible = false
refresh
end
#--------------------------------------------------------------------------
# ? Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
y = 60 * i + 22
draw_actor_graphic(actor, 24, y + 28 )
draw_actor_name(actor, 64, y - 28)
self.contents.font.color = system_color
self.contents.draw_text(116, y, (self.width - 32), 32, "Lv.")
self.contents.draw_text(188, y, (self.width - 32), 32, "Next")
self.contents.font.color = normal_color
self.contents.draw_text(-140, y, (self.width - 32), 32, actor.level.to_s ,2)
self.contents.draw_text(0 , y, (self.width - 32), 32, actor.next_rest_exp_s ,2)
end
end
end
#==============================================================================
# ? Window_ResultLevel
#==============================================================================
class Window_ResultLevel < Window_Base
#--------------------------------------------------------------------------
# ? Initialize
#--------------------------------------------------------------------------
def initialize(id)
super(332, 60 * id + 40, 124, 60)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = A3D::FONT_NAME
self.contents.font.size = A3D::FONT_SIZE
self.back_opacity = 160
self.visible = false
self.z = 200
refresh
end
#--------------------------------------------------------------------------
# ? Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.draw_text(0, -2, self.width - 32, 32, "Level-Up !!", 1)
end
end
#==============================================================================
# ? Window_ResultSkill
#==============================================================================
class Window_ResultSkill < Window_Base
#--------------------------------------------------------------------------
# ? Attr
#--------------------------------------------------------------------------
attr_accessor :skill_id
#--------------------------------------------------------------------------
# ? Initialize
#--------------------------------------------------------------------------
def initialize(id)
super(640, 60 * id + 40, 200, 60)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = A3D::FONT_NAME
self.contents.font.size = A3D::FONT_SIZE
self.back_opacity = 160
self.visible = false
self.z = 200
@skill_id = nil
end
#--------------------------------------------------------------------------
# ? Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
if @skill_id == nil
return
end
skill = $data_skills[@skill_id]
bitmap = RPG::Cache.icon(skill.icon_name)
self.contents.blt(0, 2, bitmap, Rect.new(0, 0, 24, 24), 255)
self.contents.font.color = normal_color
self.contents.draw_text(32, -2, self.width - 64, 32, skill.name)
end
end