Battle Report
#1
Battle Report
Version: 1.6

Introduction

A script that shows the battle result like in the Final Fantasy games.

Features
  • Scrolling down Exp

    Edits:
  • Exp Bars filling up
  • Possible displaying of Facesets instead of Charactersets
  • Exp scrolling down faster, depending on how much exp you gain after battle.
  • Play a ME as long as you want in the result window.
Screenshots

[Image: br1co3.th.png][Image: br2fb2.th.png][Image: br3km2.th.png]

Script
<div class="tborder">
<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> Post it above main</div>
<div class="trow2" style="display:none; padding:4px; margin:1px;">
Code:
#==============================================================================
# ** Battle Report
#==============================================================================
# Raziel (originally by David Schooley alias Illustrationism)
# Version 1.6
# 2006-10-08
#------------------------------------------------------------------------------
# * Instructions
#  ~ Place this script above main. Make a folder in the pictures folder
#    and call it Faces. When using a face picture, make sure it's
#    named like the character's file. To turn facesets on search for
#    @face = false and set it to true to turn facesets on.
#------------------------------------------------------------------------------
#==============================================================================
# ** Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # * Change EXP
  #     exp : new EXP
  #--------------------------------------------------------------------------
  def exp=(exp)
    @exp = [[exp, 9999999].min, 0].max
    while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
      @level += 1
      # NEW - David
      $d_new_skill = nil
      for j in $data_classes[@class_id].learnings
        if j.level == @level
          learn_skill(j.skill_id)
          # NEW - David
          skill = $data_skills[j.skill_id]
          $d_new_skill = skill.name
        end
      end
    end
    while @exp < @exp_list[@level]
      @level -= 1
    end
    @hp = [@hp, self.maxhp].min
    @sp = [@sp, self.maxsp].min
  end
  #--------------------------------------------------------------------------
  # * Get the current EXP
  #--------------------------------------------------------------------------
  def now_exp
    return @exp - @exp_list[@level]
  end
  #--------------------------------------------------------------------------
  # * Get the next level's EXP
  #--------------------------------------------------------------------------
  def next_exp
    return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  end
end  
#==============================================================================
# ** Window_LevelUP
#==============================================================================

class Window_LevelUp < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(actor, pos)
    #change this to true to show the actor's face
    @face = false
    @actor = actor
    y = (pos * 120)
    super(280, y, 360, 120)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 255    
    if $d_dum == false
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.size = 18
    if @face == true
      draw_actor_face(@actor, 4, 0)
    else
      draw_actor_graphic(@actor, 50, 80)
    end
    draw_actor_name(@actor, 111, 0)
    draw_actor_level(@actor, 186, 0)
    show_next_exp = @actor.level == 99 ? "---" : "#{@actor.next_exp}"
    min_bar = @actor.level == 99 ? 1 : @actor.now_exp
    max_bar = @actor.level == 99 ? 1 : @actor.next_exp
    draw_slant_bar(115, 80, min_bar, max_bar, 190, 6, bar_color = Color.new(0, 100, 0, 255), end_color = Color.new(0, 255, 0, 255))
    self.contents.draw_text(115, 24, 300, 32, "Exp: #{@actor.now_exp}")
    self.contents.draw_text(115, 48, 300, 32, "Level Up: #{show_next_exp}")
  end
  #--------------------------------------------------------------------------
  # * Level UP
  #--------------------------------------------------------------------------
  def level_up
    self.contents.font.color = system_color
    self.contents.draw_text(230, 48, 80, 32, "LEVEL UP!")
  end
  #--------------------------------------------------------------------------
  # * Learn Skill
  #--------------------------------------------------------------------------
  def learn_skill(skill)
    self.contents.font.color = normal_color
    unless $d_new_skill == nil
      Audio.se_play("Audio/SE/105-Heal01")
      self.contents.draw_text(186, 24, 80, 32, "Learned:")
      self.contents.font.color = system_color
      self.contents.draw_text(261, 24, 90, 32, skill)
    end
  end
end
#==============================================================================
# ** Window_Exp
#==============================================================================

class Window_EXP < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(exp)
    super(0, 0, 280, 60)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 255
    refresh(exp)
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh(exp)
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.draw_text(0, 0, 150, 32, "Exp Earned:")
    self.contents.font.color = normal_color
    self.contents.draw_text(180, 0, 54, 32, exp.to_s, 2)
  end
end
#==============================================================================
# ** Window_Money_Items
#==============================================================================

class Window_Money_Items < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(money, treasures)
    @treasures = treasures
    super(0, 60, 280, 420)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 255
    refresh(money)
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh(money)
    @money = money
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.draw_text(4, 4, 100, 32, "Items Found:")
    self.contents.font.color = normal_color
    y = 32
    for item in @treasures
      draw_item_name(item, 4, y)
      y += 32
    end
    cx = contents.text_size($data_system.words.gold).width
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 340, 220-cx-2, 32, $game_party.gold.to_s, 2)
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 300, 220-cx-2, 32, "+ " + @money.to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(124-cx, 340, cx + 100, 32, $data_system.words.gold, 2)
  end
end
#==============================================================================
# ** Scene_Battle
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias raz_battle_report_main main
  alias raz_battle_report_be battle_end
  #--------------------------------------------------------------------------
  # * Game Temp Variable Setup
  #--------------------------------------------------------------------------
  def main
    @lvup_window = []
    @show_dummies = true
    raz_battle_report_main
    @lvup_window = nil
    @level_up = nil
    @ch_stats = nil
    @ch_compare_stats = nil
    Audio.me_stop
  end
  #--------------------------------------------------------------------------
  # * Battle Ends
  #     result : results (0:win 1:lose 2:escape)
  #--------------------------------------------------------------------------
  def battle_end(result)
    raz_battle_report_be(result)
    @status_window.visible = false
    @spriteset.dispose
    Graphics.transition
    if result == 0
      display_lv_up(@exp, @gold, @treasures)
      loop do
        Graphics.update
        Input.update
        if Input.trigger?(Input::C)
          break
        end
      end
      trash_lv_up
    end
  end
  #--------------------------------------------------------------------------
  # * Start After Battle Phase
  #--------------------------------------------------------------------------
  def start_phase5
    # 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]
    @treasures = treasures
    @exp  = exp
    @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
    @phase5_wait_count = 10
  end
  #--------------------------------------------------------------------------
  # * Frame Update (after battle phase)
  #--------------------------------------------------------------------------
  def update_phase5
    if @phase5_wait_count > 0
      @phase5_wait_count -= 1
      if @phase5_wait_count == 0
        $game_temp.battle_main_phase = false        
      end
      return
    end
    battle_end(0)
  end
  #--------------------------------------------------------------------------
  # * Display Level UP
  #--------------------------------------------------------------------------
  def display_lv_up(exp, gold, treasures)
    $d_dum = false
    d_extra = 0
    i = 0
    for actor in $game_party.actors
      # Fill up the Lv up windows
      @lvup_window[i] = Window_LevelUp.new($game_party.actors[i], i)
      i += 1
    end
    # Make Dummies
    if @show_dummies == true
      $d_dum = true
      for m in i..3
        @lvup_window[m] = Window_LevelUp.new(m, m)
      end
    end
    @exp_window = Window_EXP.new(exp)
    @m_i_window = Window_Money_Items.new(gold, treasures)
    @press_enter = nil
    gainedexp = exp
    @level_up = [0, 0, 0, 0]
    @d_new_skill = ["", "", "", ""]
    @d_breakout = false
    @m_i_window.refresh(gold)
    wait_for_OK
    @d_remember = $game_system.bgs_memorize
    Audio.bgs_play("Audio/SE/032-Switch01", 100, 300)
    max_exp = exp
    value = 28
    if exp < value
      value = exp
    end
    if value == 0
      value = 1
    end
    for n in 0..gainedexp - (max_exp / value)
      exp -= (max_exp / value)
      if @d_breakout == false
        Input.update
      end
      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 += (max_exp / value)
          # Fill up the Lv up windows
          if @d_breakout == false
            @lvup_window[i].refresh
            @exp_window.refresh(exp)
          end
          if actor.level > last_level
            @level_up[i] = 5
            Audio.se_play("Audio/SE/056-Right02.ogg", 70, 150)
            if $d_new_skill
              @d_new_skill[i] = $d_new_skill
            end
          end
          if @level_up[i] == 0
            @d_new_skill[i] = ""
          end
          if @level_up[i] > 0
            @lvup_window[i].level_up
            if @d_new_skill[i] != ""
              @lvup_window[i].learn_skill(@d_new_skill[i])
            end
          end
          if Input.trigger?(Input::C) or exp <= 0
            @d_breakout = true
          end
        end
        if @d_breakout == false
          if @level_up[i] >0
            @level_up[i] -= 1
          end
          Graphics.update
        end
      end
      if @d_breakout == true
        for i in 0...$game_party.actors.size
          actor = $game_party.actors[i]
          if actor.cant_get_exp? == false
            actor.exp += exp
          end
        end
        exp = 0
        break
      end
    end
    Audio.bgs_stop
    @d_remember = $game_system.bgs_restore
    for i in 0...$game_party.actors.size
      @lvup_window[i].refresh
    end
    @exp_window.refresh(exp)
    Audio.se_play("Audio/SE/006-System06.ogg", 70, 150)
    $game_party.gain_gold(gold)
    @m_i_window.refresh(0)
    Graphics.update
  end
  #--------------------------------------------------------------------------
  # * Trash Level UP
  #--------------------------------------------------------------------------
  def trash_lv_up
    for i in 0...4
      @lvup_window[i].visible = false
    end
    @exp_window.visible = false
    @m_i_window.visible = false
    @lvup_window = nil
    @exp_window = nil
    @m_i_window = nil
  end
  # Wait until OK key is pressed
  def wait_for_OK
    loop do
      Input.update
      Graphics.update
      if Input.trigger?(Input::C)
        break
      end
    end
  end
end  
#--------------------------------------------------------------------------
#   * Module RPG::Cache
#--------------------------------------------------------------------------
  
module RPG::Cache
  def self.face(filename, hue = 0)
    self.load_bitmap("Graphics/Faces/", filename, hue)
  end
end
#--------------------------------------------------------------------------
# * Window_Base
#--------------------------------------------------------------------------

class Window_Base < Window
  #--------------------------------------------------------------------------
  # * Draw Actor Face
  #--------------------------------------------------------------------------
  def draw_actor_face(actor, x, y)
    bitmap = RPG::Cache.face(actor.character_name, actor.character_hue)
    self.contents.blt(x, y, bitmap, Rect.new(0,0,bitmap.width, bitmap.height))
  end
  #--------------------------------------------------------------------------
  # * Draw Slant Bar(by SephirothSpawn)
  #--------------------------------------------------------------------------
  def draw_slant_bar(x, y, min, max, width = 152, height = 6,
      bar_color = Color.new(150, 0, 0, 255), end_color = Color.new(255, 255, 60, 255))
    # Draw Border
    for i in 0..height
      self.contents.fill_rect(x + i, y + height - i, width + 1, 1, Color.new(50, 50, 50, 255))
    end
    # Draw Background
    for i in 1..(height - 1)
      r = 100 * (height - i) / height + 0 * i / height
      g = 100 * (height - i) / height + 0 * i / height
      b = 100 * (height - i) / height + 0 * i / height
      a = 255 * (height - i) / height + 255 * i / height
      self.contents.fill_rect(x + i, y + height - i, width, 1, Color.new(r, b, g, a))
    end
    # Draws Bar
    for i in 1..( (min / max.to_f) * width - 1)
      for j in 1..(height - 1)
        r = bar_color.red * (width - i) / width + end_color.red * i / width
        g = bar_color.green * (width - i) / width + end_color.green * i / width
        b = bar_color.blue * (width - i) / width + end_color.blue * i / width
        a = bar_color.alpha * (width - i) / width + end_color.alpha * i / width
        self.contents.fill_rect(x + i + j, y + height - j, 1, 1, Color.new(r, g, b, a))
      end
    end
  end
end
</div>
</div>

Instructions

Place this script above main. Make a folder in the pictures folder and call it Faces. When using a face picture, make sure it's named like the character's file. To turn facesets on search for @face = false and set it to true to turn facesets on.

FAQ
<div class="tborder">
<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> How to make this script compatible with RTAB?</div>
<div class="trow2" style="display:none; padding:4px; margin:1px;">
Add this below the battle report script
Code:
class Scene_Battle
  alias raz_battle_fix_be battle_end
  def battle_end(result)
    raz_battle_fix_be(result)
    @status_window.visible = false
    @spriteset.dispose
    Graphics.transition
    if result == 0
      display_lv_up(@exp, @gold, @treasures)
      loop do
        Graphics.update
        Input.update
        if Input.trigger?(Input::C)
          break
        end
      end
      trash_lv_up
    end
  end
end
Thanks to DerVVulfman.</div>
</div>
Compatibility

May be incompatible with your CBS.

Credits and Thanks
I only want to say that this script was made by illustrationism not by me.
I only made the edits.
Thanks to neonshadow for fixing a bug.
Thanks to DerVVulfman for making it compatible with the RTAB.
Reply
#2
Hey, is there any way to keep "Level Up!" text there for good? So it won't be present for second or few but will remain until the closing of the scene?

EDIT: I've got it. I made a few changes, I'm not sure if them combined, or just last thing I did helped with that. Anyways, I moved whole "class Window_LevelUp < Window_Base" section below whole "def level_up" section, changed @level_up[i] value to 200, and deleted @lvup_window[i].refresh in line 383; that seem to work for me :)
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
   Battle Item Count kyonides 4 3,013 02-04-2024, 05:49 AM
Last Post: kyonides
   Dalissa's Battle Cry DerVVulfman 2 8,120 05-09-2023, 03:07 AM
Last Post: DerVVulfman
   Zenith Tactical Battle System Plus (ZTBS+) DerVVulfman 0 3,459 05-10-2022, 10:42 PM
Last Post: DerVVulfman
   Actor Battle Items DerVVulfman 4 6,978 11-08-2020, 12:36 PM
Last Post: Mel
   ZLSL's Battle Portraits DerVVulfman 4 8,367 11-12-2019, 04:10 AM
Last Post: DerVVulfman
   ACBS - Atoa Custom Battle System 3.2 Victor Sant 150 275,158 03-02-2019, 04:47 AM
Last Post: dragonprincess44
   Mimi's Battle Music DerVVulfman 2 9,458 11-19-2018, 04:18 AM
Last Post: DerVVulfman
   ATOA Chanting Battle Animations DerVVulfman 9 19,355 01-12-2017, 01:46 PM
Last Post: Noctis
   Automatic Battle Actions Claihm 1 8,078 08-15-2016, 09:15 PM
Last Post: Mel
   Battle : No Battle End ME Kain Nobel 0 5,932 06-04-2016, 02:36 AM
Last Post: Kain Nobel



Users browsing this thread: 1 Guest(s)