Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

[Resolved] Help with Woratana's Monster Book!

I just added this sweet sweet script to my project but noticed a little inconvenience with it which I just can't seem to fix. When I select the "Monster Book" option in the menu, it works fine it works fine and brings up the Monster Book, but when I hit the "cancel" key to return to the main menu, my selector is on the menu option below "Monster Book" (which is for me "ATB Config" or in the demo "Wora's Christmas Gift Box" it was on the "Save" option).

Can anyone show me how to fix this so when I return to the main menu, the selector remains on "Monster Book"?

Here's what I mean. This is when I select the Monster Book, or "Beastiary" as I'm calling it.
beastiaryscreen1.png


And this is how it is when I return to the menu. I'm using BigEd781' Final Fantasy IX Menu, but I don't think that really matters in this situation.
beastiaryscreen2.png


And here's the script if that helps.
Code:
#===============================================================

# ● [VX] ◦ Monster Book ◦ □

#--------------------------------------------------------------

# ◦ by Woratana [woratana@hotmail.com]

# ◦ Thaiware RPG Maker Community

# ◦ Released on: 10/08/2008

# ◦ Version: 1.0

#--------------------------------------------------------------

# ** HOW TO USE

#--------------------------------------------------------------

# * Call Scene Monster Book by call script:

#  $scene = Scene_MonsterBook.new

 

# * Complete all enemies' information by call script:

#  $game_system.set_monbook_complete

 

# * Clear all enemies' information by call script:

#  $game_system.reset_monbook

#--------------------------------------------------------------

# * Show enemy's information by call script:

#  $game_system.monbook[enemy_id] = true

 

# * Hide enemy's information by call script:

#  $game_system.monbook[enemy_id] = false

 

# ^ Change enemy_id to ID of enemy you want

# ** e.g. $game_system.monbook[10] = true

#===============================================================

 

module Wora_Monbook

 

#===============================================================

# ** [Setup Part] - Config script in this part

#--------------------------------------------------------------  

  SHOW_IN_MENU = true # Show Monster Book in Menu Command? (true / false)

  MENU_COMMAND = 'Beastiary' # Menu command name for Monster Book

  MENU_INDEX = 4 # Index of menu command you want to insert monster book  

  

  TEXT_TITLE = 'Beastiary'

  # Monster Book Title (Show at top left of the screen)

  TEXT_FOUND = 'Found: '

  # Text before number of how many monster are found

  TEXT_COMPLETED = 'Completed: '

  # Text before percentage of how many monster are found

  

  TEXT_DOT = '.'

  # Text show after enemy's ID (e.g. '.' will make '2.' and ')' will make '2)' )

  

  COMPARE_STATUS = true

  # Use Compare Status System? It will compare enemy's status with highest level

  # actor in party. Show GREEN number if enemy has lower status.

  # Show RED-GRAY number if enemy has higher status. (true / false)

#===============================================================

end

 

#===============================================================

# ** [Alias] Game_System

#--------------------------------------------------------------

class Game_System

  attr_accessor :monbook

  alias :wora_monbook_gamsys_ini :initialize

  def initialize

    wora_monbook_gamsys_ini

    create_monbook

  end

  

  def create_monbook

    @monbook ||= Array.new($data_enemies.size) {false}

  end

  

  def set_monbook_complete

    @monbook = Array.new($data_enemies.size) {true}

    @monbook[0] = false

  end

  

  def reset_monbook

    @monbook = Array.new($data_enemies.size) {false}

  end

end

 

#===============================================================

# ** [Alias] Game_Troop

#--------------------------------------------------------------

class Game_Troop < Game_Unit

  alias :wora_monbook_gamtroop_setup :setup

  def setup(*args)

    wora_monbook_gamtroop_setup(*args)

    $game_system.create_monbook

    @enemies.each {|e| $game_system.monbook[e.enemy_id] = true }

  end

end

 

#===============================================================

# ** Window_MonsterBHelp

#--------------------------------------------------------------

class Window_MonsterBHelp < Window_Base

  include Wora_Monbook

  

  def initialize

    super(0, 0, 544, WLH + 32)

    # Write Monster Book Title

    contents.font.color = system_color

    contents.draw_text(0, 0, contents.width, WLH, TEXT_TITLE)

    # Calculate found monster & complete percentage

    found_count = 0

    $game_system.monbook.each {|e| found_count += 1 if e }

    percent_count = (found_count * 100) / ($data_enemies.size - 1)

    # Collect & Store Text in variables

    found_text = found_count.to_s + '/' + ($data_enemies.size - 1).to_s

    percent_text = percent_count.to_s + '%'

    mid_text = ' | '

    right_text = TEXT_FOUND + found_text + mid_text + TEXT_COMPLETED +

  percent_text

    # Calculate Text Width

    found_t_width = contents.text_size(TEXT_FOUND).width

    found_width = contents.text_size(found_text).width

    percent_t_width = contents.text_size(TEXT_COMPLETED).width

    mid_width = contents.text_size(mid_text).width

    right_width = contents.text_size(right_text).width

    # Write Monster Found & Complete Percentage

    contents.font.color = normal_color

    contents.draw_text(contents.width - right_width, 0, contents.width, WLH,

  TEXT_FOUND)

    contents.draw_text(contents.width - right_width + found_t_width +

  found_width, 0, contents.width, WLH, mid_text + TEXT_COMPLETED)

    contents.font.color = crisis_color

    contents.draw_text(contents.width - right_width + found_t_width, 0,

  contents.width, WLH, found_text)

    contents.draw_text(contents.width - right_width + found_t_width +

  found_width + mid_width + percent_t_width, 0, contents.width, WLH,

  percent_text)

  end

end

 

#===============================================================

# ** Window_MonsterBDetail

#--------------------------------------------------------------

class Window_MonsterBDetail < Window_Base

  def initialize(window_temp)

    super(window_temp.x, window_temp.y, window_temp.width, window_temp.height)

    self.opacity = 0

    @win_image = Window_Base.new(self.x, self.y, self.width, self.height)

    self.z = @win_image.z + 1

    @last_enemy = 0

  end

  

  def visible=(bool)

    super

    @win_image.visible = bool

  end

  

  def dispose

    @win_image.dispose

    super

  end

  

  def write_detail(enemy_id)

    return if @last_enemy == enemy_id

    contents.clear

    @win_image.contents.clear

    @last_enemy = enemy_id

    data = $data_enemies[enemy_id]

    # Draw Enemy Graphic

    bitmap = Cache.battler(data.battler_name, data.battler_hue)

    bw = bitmap.width < 160 ? (160 - bitmap.width) / 2 : 0

    bh = contents.height - bitmap.height

    @win_image.contents.blt(bw, bh, bitmap, bitmap.rect)

    bitmap.dispose

    # Write Name

    contents.font.color = normal_color

    contents.draw_text(0, 0, contents.width, WLH,

  data.id.to_s + Wora_Monbook::TEXT_DOT + ' ' + data.name)

    # Write Enemy Status

    hpx = 120

    draw_enemy_stat(data, contents.width - (hpx * 2) - 32, 0, hpx, 'hp')

    draw_enemy_stat(data, contents.width - hpx, 0, hpx, 'mp')

    draw_enemy_stat(data, contents.width - (hpx * 2) - 32, WLH * 2, hpx, 'atk')

    draw_enemy_stat(data, contents.width - hpx, WLH * 2, hpx, 'def')

    draw_enemy_stat(data, contents.width - (hpx * 2) - 32, WLH * 3, hpx, 'spi')

    draw_enemy_stat(data, contents.width - hpx, WLH * 3, hpx, 'agi')

    draw_enemy_stat(data, contents.width - (hpx * 2) - 32, WLH * 4, hpx, 'hit')

    draw_enemy_stat(data, contents.width - hpx, WLH * 4, hpx, 'eva')

    draw_enemy_stat(data, contents.width - (hpx * 2) - 32, WLH * 6, hpx, 'exp')

    draw_enemy_stat(data, contents.width - hpx, WLH * 6, hpx, 'gold')

    rect = Rect.new(contents.width - (hpx * 2) - 8, (WLH * 8) - 8, 216,

  (WLH * 4) + 16)

    contents.fill_rect(rect, Color.new(0,0,0,140))

    lsize = 2 # Line Size

    lcolor = Color.new(255,255,255,160) # Line Color

    contents.fill_rect(rect.x, rect.y, lsize, rect.height, lcolor)

    contents.fill_rect(rect.x, rect.y, rect.width, lsize, lcolor)

    contents.fill_rect(rect.x + rect.width - lsize, rect.y, lsize,

  rect.height, lcolor)

    contents.fill_rect(rect.x, rect.y + rect.height - lsize, rect.width,

  lsize, lcolor)

    contents.font.color = system_color

    contents.draw_text(contents.width - (hpx * 2), WLH * 8, 200, WLH,

  'Drop Item 1')

    draw_enemy_drop(data, 1, contents.width - (hpx * 2), WLH * 9)

    contents.font.color = system_color

    contents.draw_text(contents.width - (hpx * 2), WLH * 10, 200, WLH,

  'Drop Item 2')

    draw_enemy_drop(data, 2, contents.width - (hpx * 2), WLH * 11)

  end

 

  def draw_enemy_stat(actor, x, y, width, stat)

    color1 = system_color

    color2 = normal_color

    slash = false

    # Find highest level actor

    if Wora_Monbook::COMPARE_STATUS

      hactor = ($game_party.members.sort {|a,b| a.level <=> b.level })

      hactor = hactor[hactor.size - 1]

    end

    case stat

    when 'hp'

      vocab = Vocab::hp

      number = actor.maxhp

      hnumber = hactor.maxhp if Wora_Monbook::COMPARE_STATUS

      slash = true

    when 'mp'

      vocab = Vocab::mp

      number = actor.maxmp

      hnumber = hactor.maxmp if Wora_Monbook::COMPARE_STATUS

      slash = true

    when 'atk'

      vocab = Vocab::atk

      number = actor.atk

      hnumber = hactor.atk if Wora_Monbook::COMPARE_STATUS

    when 'def'

      vocab = Vocab::def

      number = actor.def

      hnumber = hactor.def if Wora_Monbook::COMPARE_STATUS

    when 'spi'

      vocab = Vocab::spi

      number = actor.spi

      hnumber = hactor.spi if Wora_Monbook::COMPARE_STATUS

    when 'agi'

      vocab = Vocab::agi

      number = actor.agi

      hnumber = hactor.agi if Wora_Monbook::COMPARE_STATUS

    when 'hit'

      vocab = 'Hit'

      number = actor.hit

      hnumber = hactor.hit if Wora_Monbook::COMPARE_STATUS

    when 'eva'

      vocab = 'Evasion'

      number = actor.eva

      hnumber = hactor.eva if Wora_Monbook::COMPARE_STATUS

    when 'exp'

      vocab = 'Exp.'

      number = actor.exp

      color2 = crisis_color

    when 'gold'

      vocab = 'Money'

      number = actor.gold

      color2 = crisis_color

    end

    if Wora_Monbook::COMPARE_STATUS and !hnumber.nil?

      if hnumber > number # Higher

        color2 = power_up_color

      elsif hnumber < number # Less

        color2 = power_down_color

      elsif hnumber == number # Equal

        color2 = normal_color

      end

    end

    contents.font.color = color1

    contents.draw_text(x, y, 50, WLH, vocab) 

    xr = x + width

    contents.font.color = color2

    if slash

      contents.draw_text(xr - 95, y, 40, WLH, number, 2)

      contents.draw_text(xr - 55, y, 11, WLH, '/', 2)

    end

    w_ava = slash ? 40 : 80

    contents.draw_text(xr - w_ava, y, w_ava, WLH, number, 2)

  end

  

  def draw_enemy_drop(actor, drop_id, x, y)

    drop = eval('actor.drop_item' + drop_id.to_s)

    if drop.kind.zero?

      contents.font.color = normal_color

      contents.draw_text(x, y, 200, WLH, "  ---------")

    else

      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

      draw_item_name(item, x, y)

    end

  end

end

#===============================================================

# ** Scene_MonsterBook

#--------------------------------------------------------------

class Scene_MonsterBook < Scene_Base

  def initialize(from_menu = false)

    @from_menu = from_menu

  end

  

  def start

    super

    create_menu_background

    $game_system.create_monbook

    @window_help = Window_MonsterBHelp.new

    # Create Monster List

    monlist = []

    $game_system.monbook.each_index do |i|

      next if i == 0 # The first index in $data_enemies is blank

      # If player found the monster

      if $game_system.monbook[i]

        montext = i.to_s + Wora_Monbook::TEXT_DOT + ' ' + $data_enemies[i].name

      else # If player haven't found

        montext = i.to_s + Wora_Monbook::TEXT_DOT

      end

      monlist << montext

    end

    @window_monlist = Window_Command.new(544, monlist, 2)

    @window_monlist.y = @window_help.height

    @window_monlist.height = Graphics.height - @window_help.height

    @window_monlist.active = true

    @window_mondetail = Window_MonsterBDetail.new(@window_monlist)

    @window_mondetail.visible = false

  end

  

  def update

    super

    if @window_monlist.active

      @window_monlist.update

      if Input.trigger?(Input::C)

        # View monster's detail if found monster

        if $game_system.monbook[@window_monlist.index + 1]

          Sound.play_decision

          @window_monlist.active = false

          @window_monlist.visible = false

          @window_mondetail.active = true

          @window_mondetail.visible = true

          @window_mondetail.write_detail(@window_monlist.index + 1)

        else

          Sound.play_cancel

        end

      elsif Input.trigger?(Input::B)

        Sound.play_cancel

        # Return

        $scene = @from_menu ? Scene_Menu.new(Wora_Monbook::MENU_INDEX) :

      Scene_Map.new

      end

    elsif @window_mondetail.active

      if Input.trigger?(Input::B)

        Sound.play_cancel

        @window_monlist.active = true

        @window_monlist.visible = true

        @window_mondetail.active = false

        @window_mondetail.visible = false

      end

    end

  end

  

  def terminate

    super

    dispose_menu_background

    @window_help.dispose

    @window_monlist.dispose

    @window_mondetail.dispose

  end

end

 

#=============================================================

# * Window_Command Insert Tool

#=============================================================

class Window_Command < Window_Selectable

  unless method_defined? :wora_cominstool_wincom_ini

    alias wora_cominstool_wincom_ini initialize

    alias wora_cominstool_wincom_drawitem draw_item

  end

  

  #------------------------------------

  # * [Alias] Initialize

  #------------------------------------

  def initialize(*args)

    @disabled_commands = [] # Array to keep track of disabled commands

    wora_cominstool_wincom_ini(*args)

  end

  

  #------------------------------------

  # * [Alias] Draw_Item

  #------------------------------------

  def draw_item(*args)

    wora_cominstool_wincom_drawitem(*args)

    # Set array's index to 1 if command is disabled

    @disabled_commands[args[0]] = args[1].nil? || args[1] ? nil : true

  end

  

  #------------------------------------

  # * Insert Command

  #------------------------------------

  def ins_command(index, text)

    @commands.insert(index, text) # Insert new commands

    @disabled_commands.insert(index, nil)

    # Set new height for window

    old_disabled_commands = @disabled_commands.dup

    self.height = (@commands.size + @column_max - 1) / @column_max * WLH + 32

    @item_max = @commands.size # Update @item_max to make refresh works correctly

    create_contents            # Create new content because window's size changed

    refresh                    # Redraw window's contents

    old_disabled_commands.each_index do |i|

      if !old_disabled_commands[i].nil?

        draw_item(i, false)    # Draw commands that disabled before

      end

    end

  end

  

  #------------------------------------

  # * Add Command

  #------------------------------------

  def add_command(text)

    ins_command(@commands.size, text) # Add new command to new index

  end

end

 

#=============================================================

# * Add command linked to Monster Book in Menu

#=============================================================

if Wora_Monbook::SHOW_IN_MENU

  class Scene_Menu < Scene_Base  

    #--------------------------------------------------------------------------

    # * Sort New Command(s)

    #--------------------------------------------------------------------------

    def wsort_newcommand

      @wsorted_command ||= [] # Array to collect sorted commands

      wnewcommand = @wnewcommand - @wsorted_command # Remove sorted commands

      wnewcommand.sort.each {|i| @menu_index += 1 if @menu_index >= i }

      @command_window.index = @menu_index # Set window's index to new index

      @wsorted_command = @wsorted_command + @wnewcommand # Add sorted commands

    end

 

    #--------------------------------------------------------------------------

    # * [Alias] Create Command Window

    #--------------------------------------------------------------------------

    alias wora_menucomorg_scemenu_crecomwin create_command_window

    def create_command_window(*args)

      wora_menucomorg_scemenu_crecomwin(*args)

      # Insert new command

      @command_window.ins_command(Wora_Monbook::MENU_INDEX,

    Wora_Monbook::MENU_COMMAND)

      # Set index to correct one if @menu_index is after/equal to new command

      @wnewcommand ||= []

      @wnewcommand << Wora_Monbook::MENU_INDEX

      wsort_newcommand

    end

 

    #--------------------------------------------------------------------------

    # * [Alias] Update Command Selection

    #--------------------------------------------------------------------------

    alias wora_menucomorg_scemenu_updcomsel update_command_selection

    def update_command_selection(*args)

      @menucomorpg_change = false

      # If player choose new command

      if Input.trigger?(Input::C) and @command_window.index ==

      Wora_Monbook::MENU_INDEX

        Sound.play_decision

        $scene = Scene_MonsterBook.new(true)

      else # If player choose index after new command

        if Input.trigger?(Input::C) and @command_window.index >

        Wora_Monbook::MENU_INDEX

          @command_window.index -= 1 # Decrease index to make old update works

          @menucomorpg_change = true

        end

        wora_menucomorg_scemenu_updcomsel(*args)

      end

      @command_window.index += 1 if @menucomorpg_change # Increase index back

    end

    

    #--------------------------------------------------------------------------

    # * [Alias] Update Actor Selection

    #--------------------------------------------------------------------------

    alias wora_menucomorg_scemenu_updactsel update_actor_selection

    def update_actor_selection(*args)

      @menucomorpg_change = false

      # If player choose index after new command

      if Input.trigger?(Input::C) and @command_window.index >

      Wora_Monbook::MENU_INDEX

        @command_window.index -= 1 # Decrease index to make old update works

        @menucomorpg_change = true

      end

      wora_menucomorg_scemenu_updactsel(*args)

      @command_window.index += 1 if @menucomorpg_change # Increase index back

    end

  end

end

Hey, just so you know, we have a
Code:
 tag for scripts. I went ahead and added it to your post! ~Perihelion[/color]
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top