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
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg183.imageshack.us%2Fimg183%2F7453%2F70572560un6.th.jpg&hash=1e77de71959e18d86015d486dcd429ac1b309b2f) (http://img183.imageshack.us/my.php?image=70572560un6.jpg)
Looks nice! :) But I just don't like the overlap. :P But I can't find any other way to do it except for opacity = 100% XP
Quote from: mastermoo420 on January 19, 2008, 02:51:35 PM
Looks nice! :) But I just don't like the overlap. :P But I can't find any other way to do it except for opacity = 100% XP
do you mean this? : self.opacity
you have to adjust
self.back_opacity = 160
in the script
i wonder if i understand the thing wrong :P
Lol. I know how to do it. Editing a script is much easier than making one. But yeah. W/e XP But useful for others :D Btw, do the skill screens always come up or only when they learn new skills?
only when that person learn new skill :)
Hey! I like the script alot! ;D
But one thing... the 4th battler along... I find their HP and MP stats are pushed off the screen! This means you cannot see their stats which isn't good... ???
Have I done something wrong, or could you fix it? :-[
(http://untitled.bmp)
it has nothing to do with showing HP & MP stats. lol
if you still cannot figure it out, give me your ss.
Oooh, right. Nevermind, I think I got it... :lol:
Hehe...sorry! :-[
Awesome script btw! Thanks for your help! ;8
This is awesome, but I noticed something. In your results window, it shows your character sprites. In mine it shows my battlers. Is there any way to change that? Also, is it possible to make the battlers centered if its' only three? Thanks =)
i draw character sprite by this command.
draw_actor_graphic(actor, 24, y + 28 )
it's a default methode of Window_Base.
you have to find out ( in your script ) by yourselve, what happen to this methode. lol
and about battler postion, in Game_Actor find and adjust them.
def screen_x
if self.index != nil
return self.index * 160 + 80 # here
else
return 0
end
end
def screen_y
return 464 # here
end
ah, thanks!
is it possible to have a sound repeat, like a ding over and over again when the exp and the gold are counting down?
it's possible
find this command under start_phase5
# 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)
change 2nd line to
$game_system.bgm_play($game_system.battle_end_me)
copy and delete 4th line, and paste them under update_phase5_step3
ps. you have to change your victory-me file position to bgm folder too.
both of them or just the one I just deleted and copied?
just the one you just deleted and copied.
HI I am new and I try that script and that dont work,why?
I copied and pasted the script above my main, and nothing happened when i test it out o_o
SWEET!! Love the script, it works really well
Anyone know if theres a way to make this compatible with Minkoff Battlers? Seems the victory pose bit of the code and this thing conflict resulting in no more victory pose, which I would really like to keep.
Heh, this is quite a bump, but I would have otherwise not have found this script. It looks pretty awesome, sadly it does not seem to work for me. Or it's at least not compatible with Tankentai Side-view with the CMS add-on...
EDIT: Nevermind, silly me just pasted the posted code wrong. Heheh.
EDIT 2: Although there is a very nasty bug in it. Whenever you allow the exp/gp to count all the way down the game crashes and gives an error that states something about a disposed window in the Windows_Base script. The only idea I have to fit is simply removing that part of the base script, but wouldn't that have some nasty side-effects? Any help would be appreciated.
Very nice but i got a small problem;
THe scrpt works fine when i'm fighting monsters that don't drop items, but as soon as i try to attack a monster that can drop an item, the whole game freezes O_o