Catalogue Base
Version: 1.1
Author: modern algebra
Date: October 6, 2009
Version History
- <Version 1.1> 10.06.2009 - updated for an easier way to vary the size of windows. This makes it possible to have a much more dynamic design
- <Version 1.0> 08.16.2009 - Original Release
Description
This script acts as a base script for my catalogue scripts, and it is required for each of those scripts. It has a number of shared classes and methods that thereby reduce unnecessary coding for those scripts.
It is, however, strictly a support script. It has no useful purpose on its own.
Features
- This is really just a helper script, so it doesn't have many features worth listing. The format can be seen in the Screenshots section
- It allows for easy creation of other Catalogues. All that needs to be done is to make a subclass of Catalogue_Base, and make a new Card window with the info you want to show.
Screenshots
This is what the basic format of all my catalogue scripts will be:
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg43.imageshack.us%2Fimg43%2F8122%2Fcataloguebasescreen.png&hash=2742ffa0c5db1673f085e67aaabe00e38a4e4a57)
Instructions
No real insructions. For any script that requires this, just paste it above Main and above the scripts that require it but below the default scripts. If you wish to use it to write your own scripts, than post and I will write some instructions. But if nobody wants to, I don't want to write them all out :)
Script
#==============================================================================
# Catalogue Base
# Version: 1.1
# Author: modern algebra (rmrk.net)
# Date: October 6, 2009
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Description:
#
# This script acts as a base script for my catalogue scripts, and it is
# required for each of those scripts. It has a number of shared classes and
# methods that thereby reduce unnecessary coding for those scripts.
#
# It is, however, strictly a support script. It has no useful purpose on
# its own.
#==============================================================================
#==============================================================================
# ** Data Catalogues
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This class handles catalogues. It's a wrapper for the built-in class Array
#==============================================================================
class Data_Catalogues
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize
@data = []
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Get Catalogue
# catalogue_id : ID of the catalogue
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def [](catalogue_id)
if @data[catalogue_id] == nil
return Catalogue_Base.new
else
return @data[catalogue_id]
end
end
end
#==============================================================================
# ** Catalogue_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# This is the base to all Catalogue Groups.
#==============================================================================
class Catalogue_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_reader :name
attr_reader :objects
attr_accessor :visible_objects
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize (name = 'Catalogue', objects = [], show_all = false)
# Set variables
@name = name
@objects = objects
@visible_objects = []
@show_all = show_all
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Card
#``````````````````````````````````````````````````````````````````````````
# This method returns the Card Window for a Catalogue, and should be
# overwritten by any subclasses
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def card
return Window_CatalogueCard
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Include?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def include? (index)
return true
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Enable?
# index : the index of object in objects array
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def enable? (index)
return true
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def object (index)
return @objects[index]
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Icon
# index : The index of the object in objects array
#``````````````````````````````````````````````````````````````````````````
# This returns an icon to show in Window_CatalogueCommand. By default, it
# will return the output of the object method icon_index. It must be
# overwritten if the object class has no icon_index method
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def object_icon (index)
return index < @objects.size ? object (index).icon_index : 0
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Name
# index : The index of the object in objects array
#``````````````````````````````````````````````````````````````````````````
# This returns a name to show in Window_CatalogueCommand. By default, it
# will return the output of the object method name. It must be overwritten
# if the object class has no name method
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def object_name (index)
return index < @objects.size ? object (index).name : ''
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Help Text
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def object_help_text (index)
return ''
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * C Disabled?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def c_disabled
return true
end
end
#==============================================================================
# ** Window Base
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new method - cb_outline_rect
#==============================================================================
class Window_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Outline_Rect
# x, y, width, height : rect to outline around
# colour : the colour object for this box
# t : thickness of the edges
# type : 0 => rounded rectangle; 1 => rectangle
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def cb_outline_rect (x, y, width, height, colour = system_color, t = 2, type = 0)
# If fill round, check if possible
if type == 0
if !contents.methods.include? ("fill_rounded_rect")
type = 1
else
contents.fill_rounded_rect (Rect.new (x, y, width, height), colour)
rect = Rect.new (x + t, y + t, width - (2*t), height - (2*t))
contents.fill_rounded_rect (rect, Color.new (0,0,0,0))
end
end
# Otherwise, draw rectangle
if type == 1
# Draw Horizontal
contents.fill_rect (x, y, width, t, colour)
contents.fill_rect (x, y + height - t, width, t, colour)
# Draw Vertical
contents.fill_rect (x, y + t, t, height - (2*t), colour)
contents.fill_rect (x + width - t, y + t, t, height - (2*t), colour)
end
end
end
#==============================================================================
# ** Window_CatalogueCard
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# This window display information on objects in the catalogue
#==============================================================================
class Window_CatalogueCard < Window_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Initialize
# catalogue : the catalogue information this card shows
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize (catalogue)
super (224, 0, Graphics.width - 224, Graphics.height - 32 - WLH)
@catalogue = catalogue
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Refresh (index)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def refresh (index = nil)
contents.clear
return false if index == nil
@object = @catalogue.object (index)
end
end
#==============================================================================
# ** Window Catalogue Label
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This window displays the name of the Catalogue
#==============================================================================
class Window_CatalogueLabel < Window_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize (x, y, width, height, name)
super (x, y, width, height)
contents.font.color = system_color
contents.draw_text (0, 0, contents.width, contents.height, name, 1)
end
end
#==============================================================================
# ** Window Catalogue Command
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This window lists all available objects from the catalogue
#==============================================================================
class Window_CatalogueCommand < Window_Command
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize (width, catalogue, *args)
@catalogue = catalogue
super (width, Array.new (@catalogue.visible_objects.size), 1)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Draw Item
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def draw_item (window_index)
# Get real object Index
cat_index = @catalogue.visible_objects[window_index]
enabled = @catalogue.enable? (cat_index)
rect = item_rect(window_index)
self.contents.clear_rect(rect)
# Draw Icon
draw_icon (@catalogue.object_icon (cat_index), rect.x, rect.y, enabled)
rect.x += 28
rect.width -= 28
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
self.contents.draw_text(rect, @catalogue.object_name (cat_index))
end
end
#==============================================================================
# ** Scene Title
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased methods - load_database; load_bt_database
#==============================================================================
class Scene_Title
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Load Database
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mdnabalg_ctlge_base_lddata_5hv9 load_database
def load_database (*args)
mdnabalg_ctlge_base_lddata_5hv9 (*args) # Run Original Method
$data_catalogues = Data_Catalogues.new
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Load Battle Test Database
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias algebramodern_catalogues_btdatabselod_3hb7 load_bt_database
def load_bt_database (*args)
algebramodern_catalogues_btdatabselod_3hb7 (*args) # Run Original Method
$data_catalogues = Data_Catalogues.new
end
end
#==============================================================================
# ** Scene Catalogue
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This scene handles processing for a catalogue scene
#==============================================================================
class Scene_Catalogue < Scene_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
# catalogue_id : the ID of the catalogue to be opened
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize(catalogue_id)
@catalogue = $data_catalogues[catalogue_id]
# Get all included and visible objects
for i in 0...@catalogue.objects.size
if @catalogue.include? (i)
@catalogue.visible_objects.push (i)
end
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Start
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def start
super
wlh = Window_Base::WLH
# Create Label Window
height = (Graphics.height - 96 - 2*wlh) % wlh
height += 32 + wlh
create_label_window (0, 0, 224, height)
# Create Command Window
height = Graphics.height - @label_window.height - 32 - wlh
create_command_window (0, @label_window.height, 224, height)
create_card_window
create_help_window (0, Graphics.height - 32 - wlh, Graphics.width, 32 + wlh)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Terminate Scene
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def terminate
super
@catalogue.visible_objects.clear
# Dispose all windows
@label_window.dispose unless @label_window.nil? || @label_window.disposed?
@command_window.dispose unless @command_window.nil? || @command_window.disposed?
@card_window.dispose unless @card_window.nil? || @card_window.disposed?
@help_window.dispose unless @help_window.nil? || @help_window.disposed?
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Frame Update
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def update
super
if @command_window.active
update_command
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Create Label Window
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def create_label_window (x, y, width, height)
@label_window = Window_CatalogueLabel.new (x, y, width, height, @catalogue.name)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Create Command Window
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def create_command_window (x, y, width, height)
@command_window = Window_CatalogueCommand.new (width, @catalogue)
@command_window.x, @command_window.y = x, y
@command_window.height = height
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Create Card Window
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def create_card_window
# X, Y, Width, Height set in the window itself, which has to be altered.
@card_window = @catalogue.card.new (@catalogue)
@card_window.refresh (@catalogue.visible_objects[0])
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Create Help Window
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def create_help_window (x, y, width, height)
@help_window = Window_Help.new
@help_window.width, @help_window.height = width, height
@help_window.create_contents
@help_window.x, @help_window.y = x, y
@help_window.set_text (@catalogue.object_help_text (@catalogue.visible_objects[0]))
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Update Command Window
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def update_command
old_index = @command_window.index
@command_window.update
# Get catalogue index for selected object
cat_index = @catalogue.visible_objects[@command_window.index]
# If cursor has moved
if old_index != @command_window.index
# Update Card Window
@card_window.refresh (cat_index)
@help_window.set_text (@catalogue.object_help_text (cat_index))
end
if Input.trigger? (Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger? (Input::C)
if @catalogue.c_disabled || !@catalogue.enable? (cat_index)
Sound.play_buzzer
else
process_button_c
end
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Processing if Button C is pressed and valid
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def process_button_c
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Return Scene
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def return_scene
$scene = Scene_Map.new
end
end
Credit
Addons
Any addons in this section will work for any type of catalogue I create.
- Show Encounter Ratio (http://rmrk.net/index.php/topic,34376.msg417075.html#msg417075)
Support
For support, please post directly in this topic at RMRK.net. Don't PM me.
Known Compatibility Issues
No known compatibility problems.
Author's Notes
I made this script to serve as a base for my own catalogue scripts (planned to make an Items & Skills Catalogue, as well as a Monster Catalogue script and possibly a Character Catalogue Script), but it's free to use if anybody else would like to make their own catalogues. :)
[/list]
New Addon that will work for any and all catalogues that use this script as a base:
Show Encounter Ratio
This addon will show a small encounters window next to the description window, showing how many of the catalogue's objects are visible with relation to the total number of objects in the catalogue. It has three ways of showing this; either:
Ratio : Shows "x / y", where x is encountered number and y is total
Percentile: Shows "x%", where x is encountered number / total
Raw: Shows "x", where x is encountered number
Screenshot (taken from Item & Skills Catalogue (http://rmrk.net/index.php/topic,34377.0.html)):
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg8.imageshack.us%2Fimg8%2F5862%2Fencounterratio.th.png&hash=9ef98b3ea8d2cb57c113f6f49453df8e17b08532) (http://img8.imageshack.us/i/encounterratio.png/)
#==============================================================================
# Show Encountered Ratio
# Addon for Catalogue Base
# Version: 1.1
# Author: modern algebra
# Date: October 6, 2009
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Description:
#
# This is an addon for the Catalogue Base script, and it will show a small
# encounters window next to the description window, showing how many of the
# catalogue's objects are visible with relation to the total number of
# objects in the catalogue. It has three ways of showing this; either:
#
# Ratio : Shows "x / y", where x is encountered number and y is total
# Percentile: Shows "x%", where x is encountered number / total
# Raw: Shows "x", where x is encountered number
#
# You can set which of these you want on line 39. You can also set which
# types of catalogues you want to show encounter ratio for on line 42
#==============================================================================
#==============================================================================
# ** Catalogue_Base
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new method - show_ratio?
#==============================================================================
class Catalogue_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * CONSTANTS
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Draw Ratio Type discerns the form which the encounter ration takes.
# 0 => Ratio. Shows "x / y", where x is encountered number and y is total
# 1 => Percentile. Shows "x%", where x is encountered number / total
# 2 => Raw. Shows "x", where x is encountered number
DRAW_RATIO_TYPE = 1
# In this array, put the types of catalogues that will show the ratio. If
# Catalogue_Base is included, it will show up for all catalogues.
RATIOSHOW_CATALOGUE_TYPES = [Catalogue_Base]
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Show Ratio Check
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def show_ratio?
RATIOSHOW_CATALOGUE_TYPES.each { |c| return true if self.is_a? (c) }
return false
end
end
#==============================================================================
# ** Window Encountered Ratio
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This window shows how many monsters in this catalogue have been encountered
#==============================================================================
class Window_EncounterRatio < Window_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize (catalogue)
super (Graphics.width - 128, Graphics.height - WLH - 32, 128, 32 + WLH)
encountered, total = catalogue.visible_objects.size, catalogue.objects.size
draw_type = Catalogue_Base::DRAW_RATIO_TYPE
if draw_type == 0 # Draw Ratio
tw = contents.text_size ("#{encountered}/#{total}").width
if tw < contents.width # If room, draw both encountered and total
contents.font.color = encountered == total ? system_color : normal_color
x = (contents.width - tw) / 2
contents.draw_text (x, 0, tw, WLH, encountered.to_s)
contents.font.color = system_color
contents.draw_text (x, 0, tw, WLH, "/" + total.to_s, 2)
else # Only draw encountered
draw_type = 2
end
end
if draw_type == 1
percent = total > 0 ? (encountered*100) / total : 100
contents.font.color = encountered == total ? system_color : normal_color
contents.draw_text (0, 0, contents.width, WLH, percent.to_s + "%", 1)
end
if draw_type == 2 # Only Draw Encountered
contents.font.color = encountered == total ? system_color : normal_color
contents.draw_text (0, 0, contents.width, WLH, encountered.to_s, 1)
end
end
end
#==============================================================================
# ** Scene Catalogue
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new window - Window_EncounterRatio
# aliased methods - create_help_window, terminate
#==============================================================================
class Scene_Catalogue
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Start
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mdrnalbra_catencountrto_adon_crthlp_5hz2 create_help_window
def create_help_window (x, y, width, *args)
width -= 128 if @catalogue.show_ratio?
mdrnalbra_catencountrto_adon_crthlp_5hz2 (x, y, width, *args) # Run Original Method
@encounter_window = Window_EncounterRatio.new (@catalogue) if @catalogue.show_ratio?
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Termination Processing
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalgba_encntrratio_trmnate_1kv3 terminate
def terminate (*args)
modalgba_encntrratio_trmnate_1kv3 (*args) # Run Original Method
@encounter_window.dispose unless @encounter_window.nil? || @encounter_window.disposed?
end
end
I updated the script for an easier way to modify the size of windows in the scene, making for the possibility of a much more dynamic design for the purpose of addons and special scripts.
It still works with all currently existing catalogue scripts.
Cool Script!! :?:terra::?
Whenever i copy the script from the thing into rpg maker vx it always shows up on one line instead of like 127 lines is there a way to fix this or will i have to just sort it out on my own.
SMF 2.0 codeboxes are not compatible with Internet Explorer.
Excusme ,i got a stack in line 256 ,System Stack Error ,how can i fix that ?
Can you tell me how to make it look like this?
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fi53.tinypic.com%2F6ius7k.png&hash=d743ec83d6fdb5869de7f803dc922e911c3ba4e9)
The window should be called by talking to an NPC, the names on the left should be selectable,
and the biography should be formatted nicely. I saw a biography script like this but it only worked for actors. Ideally I would like it to be user friendly where I can plug in information, and the names should only be displayed after a certain variable is reached such as
if $game.variable[16] = 32 then display these names:
Ralph
King Greyhem
Hiro
if $game.variable[16] = 33 then display these names:
Ralph
King Greyhem
Hiro
Kefka
if $game.variable[16] = 32 then display these names:
Ralph
King Greyhem
Hiro
Ulrika
Kefka
and so on.. I would appreciate if you could help so much, Id even pay ya. I really want this. Thanks for reading.
If you can do this I would appreciate it, I can pay you if you'd like. :D