This scripts lets you use a retro styled battle result window, like FFVI for
example, where a small window on the top shows line per line the information.
But i expanded that. You can configure what you want to show or not and how it will
be shown, grouped or not, and what number of lines will have the window.
Finally you can use a wait key mode or a wait time one.
#==============================================================================
# Retro-Styled Battle Result Window
# By gerkrt/gerrtunk
# Version: 1.1
# License: GPL, credits
# Date: 22/08/2011
# IMPORTANT NOTE: to acces the more actualitzed or corrected version of this
# script check here: http://usuarios.multimania.es/kisap/english_list.html
#==============================================================================
=begin
--------Introduction-----------
This scripts lets you use a retro styled battle result window, like FFVI for
example, where a small window on the top shows line per line the information.
But i expanded that. You can configure what you want to show or not and how it will
be shown, grouped or not, and what number of lines will have the window.
Finally you can use a wait key mode or a wait time one.
------Instructions-------------
First you have to select what you want to see. To do that use the option
Things_to_show. This is a list of codes so if the code is here that option
will be shown. The codes are:
:level_up, :gain_skill, :win_phrase, :gold, :exp, :treasures
Later you can configure the number of lines of the window in Lines_to_show.
The retro games used 1, but you can add more lines to the window so the
messages are shown faster.
Show_levels_in_one_line = true
These options define if for example it says , actor level up! actor level up!
or actor level up!(2). true/false, active and inactive.
------Vocabulary-----
The last options are the words the system show in the window. You can changue
that.
Also you can configure battle wins phrases for each enemy troop.
Battle_wins_phrases = {
2=>'Wep winned again2',
3=>'Wep winned again3',
}
Where X=> is the troop id number and 'text' is th eprharse, respect the syntax.
Note that exist a default option for the ones that dont have a entry here.
-----Compatibility----
You can desactivate the modification of the battle status windows, thats the one
used for draw character info in battle.
Modify_window_battle_status = false
=end
module Wep
Show_levels_in_one_line = true
Lines_to_show = 1
Things_to_show = [:level_up, :gain_skill, :win_phrase, :gold, :exp, :treasures]
Modify_window_battle_status = true
Gain_level_phrase = ' level up'
Gain_skill_phrase = ' learned'
Gain_gold_phrase = ' gained.'
Treasure_gain_phrase = ' gained.'
Gain_exp_phrase = ' Exp gained.'
Battle_win_default_phrase = 'Wep! You win!.'
Battle_wins_phrases = {
2=>'Wep winned again2',
3=>'Wep winned again3',
}
end
if Wep::Modify_window_battle_status
#==============================================================================
# ** Window_BattleStatus
#------------------------------------------------------------------------------
# This window displays the status of all party members on the battle screen.
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor_x = i * 160 + 4
draw_actor_name(actor, actor_x, 0)
draw_actor_hp(actor, actor_x, 32, 120)
draw_actor_sp(actor, actor_x, 64, 120)
if @level_up_flags[i]
#self.contents.font.color = normal_color
#self.contents.draw_text(actor_x, 96, 120, 32, "¡Sube Nivel!")
else
draw_actor_state(actor, actor_x, 96)
end
end
end
end
end
#==============================================================================
# ** Window_BattleResult
#------------------------------------------------------------------------------
# This window displays amount of gold and EXP acquired at the end of a battle.
#==============================================================================
class Window_BattleResult < Window_Base
attr_reader :messages_max
attr_reader :messages_index
#--------------------------------------------------------------------------
# * Object Initialization
# exp : EXP
# gold : amount of gold
# treasures : treasures
#--------------------------------------------------------------------------
def initialize(br)
@br = br # get battle result
@messages_index = 0 # shows the actual mesage of the window
@messages = [] # array of mesages: exp, gold,e tc
super(0, 0, 640, (Wep::Lines_to_show * 32) + 32)
self.contents = Bitmap.new(width - 32, height - 32)
self.y = 0
self.back_opacity = 160
self.visible = false
generate_messages
refresh
end
#--------------------------------------------------------------------------
# * Generate messages
# This extracts all the information of the battle result and push it in the
# messages list as phrases
#--------------------------------------------------------------------------
def generate_messages
i = 0
# Win phrase
if Wep::Things_to_show.include? :win_phrase
if Wep::Battle_wins_phrases[$game_temp.battle_troop_id] != nil
@messages.push Wep::Battle_wins_phrases[$game_temp.battle_troop_id]
else
@messages.push Wep::Battle_win_default_phrase
end
end
# Gold & exp
@messages.push @br.exp.to_s + Wep::Gain_exp_phrase if Wep::Things_to_show.include? :exp
@messages.push @br.gold.to_s + ' ' + $data_system.words.gold + Wep::Gain_gold_phrase if Wep::Things_to_show.include? :gold
# Actors iteration
for br_actor in @br.actors_data
# Check diff so can gain levels or exp
if br_actor.gained_levels > 0
# LEVEL UP. If actived to show levelup, use configurated method
if Wep::Things_to_show.include? :level_up
if Wep::Show_levels_in_one_line
@messages.push (br_actor.actor.name + ' ' + Wep::Gain_level_phrase +
"(#{br_actor.gained_levels}).")
else
for lv in 0...br_actor.gained_levels
@messages.push (br_actor.actor.name + ' ' + Wep::Gain_level_phrase)
end
end
end
# SKILL GAIN UP. If actived to show skill learn, use configurated method
if Wep::Things_to_show.include? :gain_skill
for skill_id in br_actor.gained_skills
@messages.push (br_actor.actor.name + ' ' + Wep::Gain_skill_phrase + ' ' +
$data_skills[skill_id].name + '.')
end
end
end
i += 1
end
# Tesoros
if Wep::Things_to_show.include? :treasures
b = Hash.new(0) # use this hash to count duplicates
# iterate over the array, counting duplicate entries
@br.treasures.each do |v|
b[v] += 1
end
b.each do |k, v|
@messages.push k.name + '(' + v.to_s + ')' + Wep::Treasure_gain_phrase
end
end
end
#--------------------------------------------------------------------------
# * Refresh
# Refresh with new messages each time.
#--------------------------------------------------------------------------
def refresh
self.contents.clear
if @messages[@messages_index] != nil
# Use lines configuration
if Wep::Lines_to_show == 1
self.contents.draw_text(0, 0, 640, 32, @messages[@messages_index])
else
for i in 0...Wep::Lines_to_show
# It adds the line count to message index to show more lines
if @messages[@messages_index + i] != nil
self.contents.draw_text(0, i * 32, 640, 32, @messages[@messages_index + i])
end
end
end
@messages_index += Wep::Lines_to_show
end
# When false, it will end battle
if @messages_index >= @messages.size - 1
return false
else
return true
end
end
end
module Wep
Scripts_list = [] unless defined? Scripts_list
Scripts_list.push ('Retro-Styled Battle Result Window')
end
#==============================================================================
# Battle Result
# By gerkrt/gerrtunk
# Version: 1.0
# License: GPL, credits
# Date: 22/08/2011
# IMPORTANT NOTE: to acces the more actualitzed or corrected version of this
# script check here: http://usuarios.multimania.es/kisap/english_list.html
#==============================================================================
=begin
--------Introduction-----------
I created this class so anyone can easily create a custom or more advanced
battle result window. This object gives you all the information need in a simplier
way and without a lot of trouble. It creates a array of party actors with:
-Array of learned skills ids of each actor
-Gained levels
-Actor referen ce
-Origin and ending exp and levels
-All the default info(gold,etc)
------Instructions-------------
You just need to give to it the initial levels of the party. For that, i put
here the sample code i use in scene battle start_phase5
initial_levels = []
for ac in $game_party.actors
initial_levels.push (ac.level)
end
You only have to pass that array.
=end
ResultActor = Struct.new( :actor, :origin_level, :gained_skills,
:gained_levels)
class Battle_Result
attr_reader :actors_data
attr_reader :exp
attr_reader :gold
attr_reader :treasures
#--------------------------------------------------------------------------
# * Initialize
#--------------------------------------------------------------------------
def initialize(initial_levels, exp, gold, treasures)
@actors_initals_levels = initial_levels
@exp = exp
@gold = gold
@treasures = treasures
@actors_data = []
generate_data(initial_levels)
#p @messages
end
#--------------------------------------------------------------------------
# * Generate data
# This method generates the object data.
#--------------------------------------------------------------------------
def generate_data(initial_levels)
i = 0
# Actors gain level
for actor in $game_party.actors
@actors_data.push (ResultActor.new(actor, initial_levels[i],
[], 0))
count = 0
# Valid actor?
if actor.cant_get_exp? == false
difference = actor.level - @actors_initals_levels[i]
# Check diff so can gain levels or exp
if difference > 0
# LEVEL UP.
@actors_data.last.gained_levels = difference
# SKILL GAIN UP.
for lv in 0...difference
# If it have skills learning
for lea in $data_classes[actor.class_id].learnings
if lea.level == @actors_initals_levels[i] + lv
@actors_data.last.gained_skills.push (lea.skill_id)
end
end
end
end
end
i += 1
end
end
end
module Wep
Scripts_list = [] unless defined? Scripts_list
Scripts_list.push ('Battle Result')
end
#==============================================================================
# ** Scene_Battle (part 1)
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
alias wep_rbr_sb_main main
def main
@br_mark_end = false
wep_rbr_sb_main
end
#--------------------------------------------------------------------------
# * Start After Battle Phase
# moded to extract initial levels and call battle result
#--------------------------------------------------------------------------
def start_phase5
# Obtain extra info for battle result object
initial_levels = []
for ac in $game_party.actors
initial_levels.push (ac.level)
end
# Shift to phase 5
@phase = 5
# Play battle end ME
$game_system.me_play($game_system.battle_end_me)
# Return to BGM before battle started
$game_system.bgm_play($game_temp.map_bgm)
# Initialize EXP, amount of gold, and treasure
exp = 0
gold = 0
treasures = []
# Loop
for enemy in $game_troop.enemies
# If enemy is not hidden
unless enemy.hidden
# Add EXP and amount of gold obtained
exp += enemy.exp
gold += enemy.gold
# Determine if treasure appears
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 is limited to a maximum of 6 items
treasures = treasures[0..5]
# Obtaining EXP
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
# Obtaining gold
$game_party.gain_gold(gold)
# Obtaining treasure
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
# Make battle result
br = Battle_Result.new(initial_levels, exp, gold, treasures)
@result_window = Window_BattleResult.new(br)
# Set wait count
@phase5_wait_count = 100
end
#--------------------------------------------------------------------------
# * Frame Update (after battle phase)
# moded so refresh battle result each time until it ends
#--------------------------------------------------------------------------
def update_phase5
# If wait count is larger than 0
if @phase5_wait_count > 0
# Decrease wait count
@phase5_wait_count -= 1
# If wait count reaches 0
if @phase5_wait_count == 0
# Show result window
@result_window.visible = true
# Clear main phase flag
$game_temp.battle_main_phase = false
# Refresh status window
@status_window.refresh
end
return
end
# If C button was pressed advance battleresutl info
if Input.trigger?(Input::C)
# Battle end only if +1 refresh of the window,so, the last have to
# be pressed
if @br_mark_end
battle_end(0)
end
if not @result_window.refresh
@br_mark_end = true
end
end
end
end