by Dargor
Version 1.5
Introduction
I felt like doing a bestiary, so I did one!
Features
- Customizable enemy list
- Play a BGM depending on the enemy
- Element Icons (To display elemental weakness)
- You can cycle through enemy status (using L/R)
- Compatible with Crissaegrim ABS
Screenshots


Script
Code:
#==============================================================================
# ** Bestiary
#------------------------------------------------------------------------------
# © Dargor, 2008
#Â 31/08/08
#Â Version 1.5
#------------------------------------------------------------------------------
#Â VERSION HISTORY:
#Â Â - 1.0 (21/05/08), Initial release
#Â Â - 1.1 (21/05/08), Minor bugs fixed
#Â Â - 1.2 (24/05/08), Reseted Bestiary bug fixed
#Â Â - 1.3 (01/06/08), Minor changes to the windows visibility/opacity
#Â Â - 1.4 (04/06/08), Bug fixed with cursor width
#Â Â - 1.5 (31/08/08), Compatible with Crissaegrim ABS
#------------------------------------------------------------------------------
#Â INSTRUCTIONS:
#Â Â 1) Paste the script above main
#Â Â 2) Edit the Vocab variables
#Â Â 2) Edit the constants in the Bestiary module
#==============================================================================
#==============================================================================
#Â ** Bestiary Configuration
#==============================================================================
module Bestiary
 # Enemies that won't appear in the bestiary
 Excluded_Enemies = [31]
 # 'Real' Elements, displayed in the bestiary
 Elements = [9,10,11,12,13,14,15,16]
 # 'Real' Elements Icon Index
 Element_Icons = { 9 => 104,
          10 => 105,
          11 => 106,
          12 => 107,
          13 => 108,
          14 => 109,
          15 => 110,
          16 => 111,
         }
 # Play a BG' in the bestiary
 Play_BGM = true
 # BGM List based on enemy ID
 BGM = { 19 => 'Battle7',
     20 => 'Battle7',
     21 => 'Battle7',
     22 => 'Battle7',
     23 => 'Battle7',
     24 => 'Battle7',
     25 => 'Battle8',
     26 => 'Battle8',
     27 => 'Battle8',
     28 => 'Battle8',
     29 => 'Battle8',
     30 => 'Battle9'
    }
 # Default BGM name
 BGM.default = 'Battle1'
 # Use Action Battle System
 # Set this to true ONLY if you are using Crissaegrim ABS
 Use_ABS = false
end
# Vocabulary
Vocab::Hit = 'Hit Rate'
Vocab::Eva = 'Evasion'
Vocab::Exp = 'EXP'
Vocab::UnknownEnemy = '??????'
Vocab::UnknownDrop = '??????'
#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
#Â This class handles system-related data. Also manages vehicles and BGM, etc.
# The instance of this class is referenced by $game_system.
#==============================================================================
class Game_System
 #--------------------------------------------------------------------------
 # * Public Instance Variables
 #--------------------------------------------------------------------------
 attr_accessor :new_enemy
 attr_accessor :enemy_encountered
 attr_accessor :enemy_defeated
 attr_accessor :enemy_drops
 #--------------------------------------------------------------------------
 # * Alias Listing
 #--------------------------------------------------------------------------
 alias dargor_vx_bestiary_system_initialize initialize
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize
  @new_enemy = []
  @enemy_encountered = []
  @enemy_defeated = []
  @enemy_drops = []
  for i in 1...$data_enemies.size
   @new_enemy[i] = true
   @enemy_encountered[i] = 0
   @enemy_defeated[i] = 0
   @enemy_drops[i] = [false, false]
  end
  dargor_vx_bestiary_system_initialize
 end
end
#==============================================================================
# ** Game_Troop
#------------------------------------------------------------------------------
#Â This class handles enemy groups and battle-related data. Also performs
# battle events. The instance of this class is referenced by $game_troop.
#==============================================================================
class Game_Troop < Game_Unit
 #--------------------------------------------------------------------------
 # * Alias Listing
 #--------------------------------------------------------------------------
 alias dargor_vx_bestiary_troop_setup setup
 alias dargor_vx_bestiary_troop_make_drop_items make_drop_items
 #--------------------------------------------------------------------------
 # * Setup
 #   troop_id : troop ID
 #--------------------------------------------------------------------------
 def setup(troop_id)
  dargor_vx_bestiary_troop_setup(troop_id)
  for member in troop.members
   next if $data_enemies[member.enemy_id] == nil
   enemy = Game_Enemy.new(@enemies.size, member.enemy_id)
   $game_system.enemy_encountered[member.enemy_id] += 1
  end
 end
 #--------------------------------------------------------------------------
 # * Create Array of Dropped Items
 #--------------------------------------------------------------------------
 def make_drop_items
  drop_items = []
  for enemy in dead_members
   for di in [enemy.drop_item1, enemy.drop_item2]
    next if di.kind == 0
    next if rand(di.denominator) != 0
    index = [enemy.drop_item1, enemy.drop_item2].index(di)
    $game_system.enemy_drops[enemy.enemy_id][index] = true
    if di.kind == 1
     drop_items.push($data_items[di.item_id])
    elsif di.kind == 2
     drop_items.push($data_weapons[di.weapon_id])
    elsif di.kind == 3
     drop_items.push($data_armors[di.armor_id])
    end
   end
  end
  return drop_items
 end
end
#==============================================================================
# ** Game_Enemy
#------------------------------------------------------------------------------
#Â This class handles enemy characters. It's used within the Game_Troop class
# ($game_troop).
#==============================================================================
class Game_Enemy < Game_Battler
 #--------------------------------------------------------------------------
 # * Alias Listing
 #--------------------------------------------------------------------------
 alias dargor_vx_bestiary_enemy_perform_collapse perform_collapse
 #--------------------------------------------------------------------------
 # * Perform Collapse
 #--------------------------------------------------------------------------
 def perform_collapse
  dargor_vx_bestiary_enemy_perform_collapse
  if $game_temp.in_battle and dead?
   $game_system.enemy_defeated[@enemy_id] += 1
  end
 end
end
#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
#Â This class deals with events. It handles functions including event page
# switching via condition determinants, and running parallel process events.
# It's used within the Game_Map class.
#==============================================================================
class Game_Event < Game_Character
 #--------------------------------------------------------------------------
 # * Public Instance Variables
 #--------------------------------------------------------------------------
 attr_reader :encountered
 #--------------------------------------------------------------------------
 # * Alias Listing
 #--------------------------------------------------------------------------
 alias dargor_vx_bestiary_event_initialize initialize
 alias dargor_vx_bestiary_event_update update
 if Bestiary::Use_ABS
  alias dargor_vx_bestiary_event_kill_enemy kill_enemy
 end
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize(map_id, event)
  dargor_vx_bestiary_event_initialize(map_id, event)
  @encountered = false
  @defeated = false
 end
 #--------------------------------------------------------------------------
 # * Update
 #--------------------------------------------------------------------------
 def update
  if self.methods.include?('kill_enemy') && Bestiary::Use_ABS
   if @in_battle && !@encountered
    $game_system.enemy_encountered[@enemy_id] += 1
    @encountered = true
   end
  end
  dargor_vx_bestiary_event_update
 end
 #--------------------------------------------------------------------------
 # * Kill enemy
 #--------------------------------------------------------------------------
 def kill_enemy
  if self.methods.include?('kill_enemy') && Bestiary::Use_ABS && !@defeated
   @defeated = true
   $game_system.enemy_defeated[@enemy_id] += 1
   $game_system.enemy_drops[@enemy_id][0] = true
   $game_system.enemy_drops[@enemy_id][1] = true
   dargor_vx_bestiary_event_kill_enemy
  end
 end
end
#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#Â This is a superclass of all windows in the game.
#==============================================================================
class Window_Base < Window
 #--------------------------------------------------------------------------
 # * Get HP Text Color
 #   enemy : enemy
 #--------------------------------------------------------------------------
 def hp_color(actor)
  return normal_color if actor.is_a?(RPG::Enemy)
  return knockout_color if actor.hp == 0
  return crisis_color if actor.hp < actor.maxhp / 4
  return normal_color
 end
 #--------------------------------------------------------------------------
 # * Draw Enemy MAXHP
 #   enemy : enemy
 #   x   : draw spot x-coordinate
 #   y   : draw spot y-coordinate
 #   width : Width
 #--------------------------------------------------------------------------
 def draw_enemy_maxhp(enemy, x, y, width = 120)
  draw_enemy_hp_gauge(enemy, x, y, width)
  self.contents.font.color = system_color
  self.contents.draw_text(x, y, 30, WLH, Vocab::hp)
  self.contents.font.color = hp_color(enemy)
  last_font_size = self.contents.font.size
  xr = x + width
  self.contents.font.color = normal_color
  self.contents.draw_text(xr - 80, y, 80, WLH, enemy.maxhp, 2)
 end
 #--------------------------------------------------------------------------
 # * Draw Enemy HP gauge
 #   enemy : enemy
 #   x   : draw spot x-coordinate
 #   y   : draw spot y-coordinate
 #   width : Width
 #--------------------------------------------------------------------------
 def draw_enemy_hp_gauge(enemy, x, y, width = 120)
  gw = width
  gc1 = hp_gauge_color1
  gc2 = hp_gauge_color2
  self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
  self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
 end
 #--------------------------------------------------------------------------
 # * Draw Enemy MAXMP
 #   enemy : enemy
 #   x   : draw spot x-coordinate
 #   y   : draw spot y-coordinate
 #   width : Width
 #--------------------------------------------------------------------------
 def draw_enemy_maxmp(enemy, x, y, width = 120)
  draw_enemy_mp_gauge(enemy, x, y, width)
  self.contents.font.color = system_color
  self.contents.draw_text(x, y, 30, WLH, Vocab::mp)
  self.contents.font.color = hp_color(enemy)
  last_font_size = self.contents.font.size
  xr = x + width
  self.contents.font.color = normal_color
  self.contents.draw_text(xr - 80, y, 80, WLH, enemy.maxmp, 2)
 end
 #--------------------------------------------------------------------------
 # * Draw Enemy MP gauge
 #   enemy : enemy
 #   x   : draw spot x-coordinate
 #   y   : draw spot y-coordinate
 #   width : Width
 #--------------------------------------------------------------------------
 def draw_enemy_mp_gauge(enemy, x, y, width = 120)
  gw = width
  gc1 = mp_gauge_color1
  gc2 = mp_gauge_color2
  self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
  self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
 end
 #--------------------------------------------------------------------------
 # * Draw Enemy Parameters
 #   enemy : enemy
 #   x   : draw spot x-coordinate
 #   y   : draw spot y-coordinate
 #   type : Type of parameters (0-7)
 #--------------------------------------------------------------------------
 def draw_enemy_parameter(enemy, x, y, type)
  case type
  when 0
   parameter_name = Vocab::atk
   parameter_value = enemy.atk
  when 1
   parameter_name = Vocab::def
   parameter_value = enemy.def
  when 2
   parameter_name = Vocab::spi
   parameter_value = enemy.spi
  when 3
   parameter_name = Vocab::agi
   parameter_value = enemy.agi
  when 4
   parameter_name = Vocab::Hit
   parameter_value = enemy.hit
  when 5
   parameter_name = Vocab::Eva
   parameter_value = enemy.eva
  when 6
   parameter_name = Vocab::Exp
   parameter_value = enemy.exp
  when 7
   parameter_name = Vocab::gold
   parameter_value = enemy.gold
  end
  self.contents.font.color = system_color
  self.contents.draw_text(x, y, 120, WLH, parameter_name)
  self.contents.font.color = normal_color
  parameter_value = "#{parameter_value}%" if [4,5].include?(type)
  self.contents.draw_text(x + 100, y, 56, WLH, parameter_value, 2)
 end
 #--------------------------------------------------------------------------
 # * Draw Enemy Drop
 #   enemy : enemy
 #   x   : draw spot x-coordinate
 #   y   : draw spot y-coordinate
 #--------------------------------------------------------------------------
 def draw_enemy_drop(enemy,x,y)
  self.contents.font.color = system_color
  self.contents.draw_text(x,y,220,WLH,'Items Dropped')
  drops = []
  drops_index = []
  drops << enemy.drop_item1 unless enemy.drop_item1.kind == 0
  drops << enemy.drop_item2 unless enemy.drop_item2.kind == 0
  drops_index << 0 unless enemy.drop_item1.kind == 0
  drops_index << 1 unless enemy.drop_item2.kind == 0
  for i in 0...drops.size
   drop = drops[i]
   index = drops_index[i]
   case drop.kind
   when 1
    item = $data_items[drop.item_id]
   when 2
    item = $data_weapons[drop.weapon_id]
   when 3
    item = $data_armors[drop.armor_id]
   end
   if $game_system.enemy_drops[enemy.id][index]
    draw_item_name(item,x,y + (i+1) * WLH)
    probability = 100 / drop.denominator
    self.contents.draw_text(x,y + (i+1) * WLH,220,WLH, "#{probability}%",2)
   else
    self.contents.font.color = normal_color
    self.contents.draw_text(x+26,y + (i+1) * WLH,220,WLH,Vocab::UnknownDrop)
   end
  end
 end
 #--------------------------------------------------------------------------
 # * Draw Enemy Encountered
 #   enemy : enemy
 #   x   : draw spot x-coordinate
 #   y   : draw spot y-coordinate
 #--------------------------------------------------------------------------
 def draw_enemy_encountered(enemy,x,y)
  self.contents.font.color = system_color
  self.contents.draw_text(x,y,120,WLH,'Encountered')
  times = $game_system.enemy_encountered[enemy.id]
  self.contents.font.color = normal_color
  self.contents.draw_text(x + 120,y,36,WLH,times,2)
 end
 #--------------------------------------------------------------------------
 # * Draw Enemy Defeated
 #   enemy : enemy
 #   x   : draw spot x-coordinate
 #   y   : draw spot y-coordinate
 #--------------------------------------------------------------------------
 def draw_enemy_defeated(enemy,x,y)
  self.contents.font.color = system_color
  self.contents.draw_text(x,y,120,WLH,'Defeated')
  times = $game_system.enemy_defeated[enemy.id]
  self.contents.font.color = normal_color
  self.contents.draw_text(x + 120,y,36,WLH,times,2)
 end
 #--------------------------------------------------------------------------
 # * Draw Enemy Weakness
 #   enemy : enemy
 #   x   : draw spot x-coordinate
 #   y   : draw spot y-coordinate
 #--------------------------------------------------------------------------
 def draw_enemy_weakness(enemy,x,y)
  enemy = Game_Enemy.new(0, enemy.id)
  self.contents.font.color = system_color
  self.contents.draw_text(x,y,120,WLH,'Weakness')
  weakness = []
  for element_id in Bestiary::Elements
   weakness << element_id if enemy.element_rate(element_id) > 100
  end
  for i in 0...weakness.size
   element_id = weakness[i]
   x = 144 * (i % 2)
   y2 = WLH * (i / 2)
   icon_index = Bestiary::Element_Icons[element_id]
   draw_icon(icon_index,x,y2 + (y + WLH))
   element = $data_system.elements[element_id]
   self.contents.font.color = normal_color
   self.contents.draw_text(x+26,y2 + (y + WLH),120,WLH,element)
  end
 end
end
#==============================================================================
# ** Window_EnemyStatus
#------------------------------------------------------------------------------
#Â This window displays full status specs on the bestiary screen.
#==============================================================================
class Window_EnemyStatus < Window_Base
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize
  super(0,0,544,416)
 end
 #--------------------------------------------------------------------------
 # * Setup
 #   enemy : enemy
 #   id  : bestiary id
 #--------------------------------------------------------------------------
 def setup(enemy, id)
  @enemy = enemy
  @id = id
  $game_system.new_enemy[enemy.id] = false
  refresh
 end
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
  self.contents.clear
  bitmap = Cache.battler(@enemy.battler_name, @enemy.battler_hue)
  self.contents.blt(0,32,bitmap,bitmap.rect)
  self.contents.font.color = normal_color
  self.contents.draw_text(0,0,272,WLH,"#{@id}: #{@enemy.name}")
  draw_enemy_maxhp(@enemy,272,WLH * 1,156)
  draw_enemy_maxmp(@enemy,272,WLH * 2,156)
  for i in 0..7
   draw_enemy_parameter(@enemy, 304, WLH * 3 + (WLH * i), i)
  end
  draw_enemy_drop(@enemy,272,WLH * 11)
  draw_enemy_encountered(@enemy,272,WLH * 14)
  draw_enemy_defeated(@enemy,272,WLH * 15)
  draw_enemy_weakness(@enemy,0,WLH * 11)
 end
end
#==============================================================================
# ** Window_EnemyList
#------------------------------------------------------------------------------
#Â This window displays full status specs on the bestiary screen.
#==============================================================================
class Window_EnemyList < Window_Selectable
 #--------------------------------------------------------------------------
 # * Object Initialization
 #   x   : draw spot x-coordinate
 #   y   : draw spot y-coordinate
 #--------------------------------------------------------------------------
 def initialize(x,y)
  super(x,y,544,360)
  @column_max = 2
  self.index = 0
  refresh
 end
 #--------------------------------------------------------------------------
 # * Enemy
 #--------------------------------------------------------------------------
 def enemy
  return @data[self.index]
 end
 #--------------------------------------------------------------------------
 # * Enemies
 #--------------------------------------------------------------------------
 def enemies
  return @data
 end
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
  self.contents.clear
  @data = []
  for item in $data_enemies
   next if Bestiary::Excluded_Enemies.include?(item.id)
   @data << item
  end
  @data.compact!
  @item_max = @data.size
  create_contents
  for i in 0...@item_max
   draw_item(i)
  end
 end
 #--------------------------------------------------------------------------
 # * Draw Item
 #   index : index
 #--------------------------------------------------------------------------
 def draw_item(index)
  rect = item_rect(index)
  self.contents.clear_rect(rect)
  item = @data[index]
  if item != nil
   rect.width -= 4
   if $game_system.enemy_encountered[item.id] > 0
    if $game_system.new_enemy[item.id]
     self.contents.font.color = power_up_color
    else
     self.contents.font.color = normal_color
    end
    self.contents.draw_text(rect, "#{index+1}:#{item.name}")
   else
    self.contents.font.color = normal_color
    text = "#{index+1}:#{Vocab::UnknownEnemy}"
    x = rect.x
    y = rect.y
    width = rect.width
    height = rect.height
    bitmap = self.contents
    color1 = Color.new(255,0,0)
    color2 = Color.new(0,255,0)
    self.contents.draw_text(rect, "#{index+1}:#{Vocab::UnknownEnemy}")
   end
  end
 end
end
#==============================================================================
# ** Scene_Bestiary
#------------------------------------------------------------------------------
#Â This class performs the bestiary screen processing.
#==============================================================================
class Scene_Bestiary < Scene_Base
 #--------------------------------------------------------------------------
 # * Start processing
 #--------------------------------------------------------------------------
 def start
  super
  create_menu_background
  @last_bgm = RPG::BGM.last
  @help_window = Window_Help.new
  @list_window = Window_EnemyList.new(0,56)
  @status_window = Window_EnemyStatus.new
  @status_window.visible = false
  encountered = 0
  for enemy in @list_window.enemies
   if $game_system.enemy_encountered[enemy.id] > 0
    encountered += 1
   end
  end
  completion1 = "#{encountered}/#{@list_window.enemies.size}"
  completion2 = (encountered * 100) / @list_window.enemies.size
  @help_window.set_text("Completion: #{completion1}(#{completion2}%)")
 end
 #--------------------------------------------------------------------------
 # * Termination Processing
 #--------------------------------------------------------------------------
 def terminate
  super
  $game_message.texts = []
  dispose_menu_background
  @help_window.dispose
  @list_window.dispose
  @status_window.dispose
 end
 #--------------------------------------------------------------------------
 # * Frame Update Processing
 #--------------------------------------------------------------------------
 def update
  super
  if @status_window.visible
   update_status_selection
   return
  end
  if @list_window.active
   @list_window.update
   update_list_selection
   return
  end
 end
 #--------------------------------------------------------------------------
 # * Update Status Selection
 #--------------------------------------------------------------------------
 def update_status_selection
  if Input.trigger?(Input::B)
   Sound.play_cancel
   @status_window.visible = false
   @list_window.visible = true
   @help_window.visible = true
   @last_bgm.play
   return
  end
  if Input.trigger?(Input::L) or Input.repeat?(Input::L)
   Sound.play_cursor
   loop do
    @list_window.index = (@list_window.index + 1)
    @list_window.index %= @list_window.enemies.size
    break if $game_system.enemy_encountered[@list_window.index+1] > 0
   end
   process_status_window(@list_window.enemy, @list_window.index+1)
  end
  if Input.trigger?(Input::R) or Input.repeat?(Input::R)
   Sound.play_cursor
   loop do
    @list_window.index = (@list_window.index - 1) % @list_window.enemies.size
    break if $game_system.enemy_encountered[@list_window.index+1] > 0
   end
   process_status_window(@list_window.enemy, @list_window.index+1)
  end
 end
 #--------------------------------------------------------------------------
 # * Update List Selection
 #--------------------------------------------------------------------------
 def update_list_selection
  if Input.trigger?(Input::B)
   Sound.play_cancel
   $scene = Scene_Map.new
   return
  end
  if Input.trigger?(Input::C)
   unless $game_system.enemy_encountered[@list_window.enemy.id] > 0
    Sound.play_buzzer
    return
   end
   process_status_window(@list_window.enemy, @list_window.index+1)
  end
 end
 #--------------------------------------------------------------------------
 # * Process Status Window
 #--------------------------------------------------------------------------
 def process_status_window(enemy, index)
  if Bestiary::Play_BGM
   bgm_name = Bestiary::BGM[enemy.id]
   if bgm_name.nil?
    bgm = RPG::BGM.new(Bestiary::BGM.default)
    bgm.play
   else
    bgm = RPG::BGM.new(bgm_name)
    bgm.play
   end
  end
  @status_window.setup(enemy, index)
  @status_window.visible = true
  @list_window.visible = false
  @help_window.visible = false
  @list_window.draw_item(index-1)
 end
end
Code:
#==============================================================================
# ** Custom Menu Commands - Bestiary
#------------------------------------------------------------------------------
# © Dargor, 2008
#Â 26/05/08
#Â Requested by reikeiÂ
#==============================================================================
# Vocabulary
Vocab::Bestiary = 'Bestiary'
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#Â This class performs the menu screen processing.
#==============================================================================
class Scene_Menu < Scene_Base
 #--------------------------------------------------------------------------
 # * Alias Listing
 #--------------------------------------------------------------------------
 alias dargor_vx_cmcbestiary_menu_create_command_window create_command_window
 alias dargor_vx_cmcbestiary_menu_update_command_selection update_command_selection
 #--------------------------------------------------------------------------
 # * Create Command Window
 #--------------------------------------------------------------------------
 def create_command_window
  commands = $game_system.menu_commands
  index = commands.index(Vocab::save)
  $game_system.add_menu_command(index, Vocab::Bestiary)
  dargor_vx_cmcbestiary_menu_create_command_window
 end
 #--------------------------------------------------------------------------
 # * Update Command Selection
 #--------------------------------------------------------------------------
 def update_command_selection
  dargor_vx_cmcbestiary_menu_update_command_selection
  command = @command_window.selection
  if Input.trigger?(Input::C)
   case @command_window.selection
   when Vocab::Bestiary
    $scene = Scene_Bestiary.new(true)
   end
  end
 end
end
#==============================================================================
# ** Scene_Bestiary
#------------------------------------------------------------------------------
#Â This class performs the bestiary screen processing.
#==============================================================================
class Scene_Bestiary < Scene_Base
 #--------------------------------------------------------------------------
 # * Alias Listing
 #--------------------------------------------------------------------------
 alias dargor_vx_cmcbestiary_update_list_selection update_list_selection
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize(from_menu=false)
  @from_menu = from_menu
 end
 #--------------------------------------------------------------------------
 # * Update List Selection
 #--------------------------------------------------------------------------
 def update_list_selection
  if Input.trigger?(Input::B)
   Sound.play_cancel
   if @from_menu
    index = $game_system.menu_commands.index(Vocab::Bestiary)
    $scene = Scene_Menu.new(index)
   else
    $scene = Scene_Map.new
   end
   return
  end
  dargor_vx_cmcbestiary_update_list_selection
 end
end