I have a somewhat lengthy request for a CMS. I'll start with the layout:

Basically just this
And now onto the features!
Status
Exactly the same as it is in the default menu.
Backpack
I would like this to be a dropmenu with these subcatagories:
- Basic
- Quest
- Gems
Quest
I would like this to be just a quest screen. Something similar to Zeriabs quest script if possible with the icons and stuff.
Options
Just things like the bog standard options you find in most of the CMS's I've seen with the Load/Save options too
Achievements
That big section down the side I'd like filled with http://forum.chaos-p...ic,3330.40.html <this (or something similar). I don't want any callable windows that display the achievements, just that side section that displays the icons in something like 3 columns.
Hunger/Thirst
I'd just like http://www.rmxpunlim...5-hungerthirst/ <this script integrated there with the meters.
So that means that it needs to be compatible with/have the following scripts integrated:
Spoiler
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
# Hunger/Thirst
# Author: ForeverZer0
# Date: 5.14.2010
# Version: 1.0
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
#
# Features:
# - Easy to use
# - MUCH less complicated than many other similar scripts, yet it has more
# features and less code
# - Can have hunger and thirst decrease by time intervals or by steps walked
# by the player
# - Ability to have each character's 'Max Hunger' increase so that they can go
# longer in between food and drinks as they gain in power
# - Can use script calls to easily change hunger/thirst values, and to disable
# the system for long cutscenes, etc. so that nothing decreases while the
# player does not have control
# - Automatically added states if hunger/thirst is at specific rates.
#
# Compatibility:
# - If using Zero Add-On Collection, place this script below it. There is a
# minor issue with the Chemist Class script, but placing this script below
# it will solve the problem.
#
# Instructions:
# - Place script below debug, and above main (below Zer0 Add-Ons, if present)
# - All configuration is below and described fully in its respective section
# - The following script calls can be used in game:
#
# ? Zer0.hunger_system(true/false)
# - If false, hunger/thirst rates will not decrease. Good for long scenes
# where the player is not in control, etc. The system will remain ON/OFF
# until it is changed.
#
# ? Zer0.set_hunger(ACTOR_ID, AMOUNT)
# ? Zer0.set_thirst(ACTOR_ID, AMOUNT)
# - Sets the hunger/thirst of actor in your database with ACTOR_ID to the
# number specified by AMOUNT
#
# ? Zer0.set_max_hunger(ACTOR_ID, AMOUNT)
# ? Zer0.set_max_thirst(ACTOR_ID, AMOUNT)
# - Sets the MAX hunger/thirst of actor in your database with ACTOR_ID to
# the number specified by AMOUNT
#
# ? Zer0.recover_hunger(ACTOR_ID)
# - Will recover all hunger/thirst to actor with ACTOR_ID. If you omit the
# ( ) at the end of the script call, it will recover the entire party.
#
# ? Zer0.actor_hunger_id(ACTOR_ID)
# - Returns the current hunger of actor with ACTOR_ID
#
# ? Zer0.actor_thirst_id(ACTOR_ID)
# - Returns the current thirst of actor with ACTOR_ID
#
# ? Zer0.actor_hunger_pos(POSITION)
# - Return the current hunger of actor at party POSITION
# (0 is the leader, 1 is actor 2, etc)
#
# ? Zer0.actor_thirst_pos(POSITION)
# - Return the current thist of actor at party POSITION
# (0 is the leader, 1 is actor 2, etc)
#
# ? Zer0.hunger_debugger
# - Displays info on-screen of each characters hunger/thirst, current
# count for steps and time, and shows which features are currently ON.
#
# Special Thanks:
# - kukusu, whose request gave me the inspiration for the script
# - SBR*, for pointing out a stupid error I made with the stepcount
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
# BEGIN CONFIGURATION
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
module Zer0
DEFAULT_HUNGER = 100
DEFAULT_THIRST = 100
# Default max hunger/thirst players will begin with. This can be increased as
# the player becomes more powerful, through items, etc. if desired.
BY_TIME = true
BY_STEPS = true
# There are two ways hunger and thirst can be calculated; one by just how many
# seconds pass, and the other by how many steps have been taken. You can use
# both if you like, but I would suggest that if you do to try to keep it more
# skewed to one or the other as the main method of decreasing, and use the
# other as a minor added dynamic.
STEPS_HUNGER_DOWN = 100
STEPS_THIRST_DOWN = 80
# Only if using 'BY_STEPS', otherwise ignore these. These are the amount
# of steps before hunger/thirst decrease.
SECS_HUNGER_DOWN = 120
SECS_THIRST_DOWN = 120
# Only if using 'BY_TIME', otherwise ignore these. These are the amount
# of seconds before hunger/thirst decrease.
LVL_UP_INCREASE = true
# If true, will increase max hunger/thirst at each level up, the amount of
# increase is defined just below.
LVL_UP_AMOUNT = 5
# This will be added to the actor's max hunger/thirst at each level up, only
# if LVL_UP_INCREASE is true.
#-------------------------------------------------------------------------------
# Food/Drink Items:
#
# Set up your food/drink items recovery rates here. Food and drink are each in
# their own section. Use this syntax to set them up:
#
# when ITEM_ID the return RECOVERY_AMOUNT
#
# For example, in the first example below, it means that the item in your
# database with ID(1) will cure hunger by 15. If RECOVER_BY_PERCENT (below) is
# set to true, it will recover 15% of that actors MAX hunger/thirst.
#
# You can also create items that have negative effects by making the
# RECOVERY_AMOUNT a negative number. DO NOT have food/drink items do anything
# other than recover hunger/thirst and/or add/remove states. Anything else,
# such has HP/MP recovery, will have no effect.
#
#-------------------------------------------------------------------------------
RECOVER_BY_PERCENT = true
# Recovery can be by either absolute value, or by percent. Setting this to
# true will make it by percent.
def self.food(item_id)
case item_id
when 1 then return 15
when 2 then return 25
when 3 then return 35
when 4 then return 50
when 5 then return 75
when 6 then return 100
end
end
def self.drink(item_id)
case item_id
when 1 then return 15
when 2 then return 25
when 3 then return 35
when 4 then return 50
when 5 then return 75
when 6 then return 100
end
end
#-------------------------------------------------------------------------------
# Hunger/Thirst States
#
# Set up states that will be applied when an actors hunger/thirst fall within
# a defined range, such as 'Starvation', 'Dehydration', etc.
# Configure like this:
#
# when MIN..MAX then return STATE_ID
#
# If actor's hunger/thirst is equal to or between MIN and MAX, the state with
# STATE_ID will be applied. This method is refreshed everytime the system
# decreases hunger/thirst.
#
# Keep in mind that these states will NOT be automatically cured if the actor's
# hunger/thirst rise above. Create your food/drink items to cure these states.
#
#-------------------------------------------------------------------------------
def self.hunger_states(current_hunger)
case current_hunger
when 0 then return 1
when 1..9 then return 2
when 10..15 then return 3
end
end
def self.thirst_states(current_thirst)
case current_thirst
when 0 then return 1
when 1..9 then return 2
when 10..15 then return 3
end
end
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
# END CONFIGURATION
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
def self.hunger_system(value)
$game_party.hunger = value
return true
end
def self.set_hunger(actor_id, amount)
$game_party.actors.each {|a| a.hunger = amount if a.id == actor_id}
end
def self.set_thirst(actor_id, amount)
$game_party.actors.each {|a| a.thirst = amount if a.id == actor_id}
end
def self.set_max_hunger(actor_id, amount)
$game_party.actors.each {|a| a.max_hunger = amount if a.id == actor_id}
end
def self.set_max_thirst(actor_id, amount)
$game_party.actors.each {|a| a.max_thirst = amount if a.id == actor_id}
end
def self.actor_hunger_id(actor_id)
$game_party.actors.each {|a| return a.hunger if a.id == actor_id}
end
def self.actor_thirst_id(actor_id)
$game_party.actors.each {|a| return a.thirst if a.id == actor_id}
end
def self.actor_hunger_pos(pos = 0)
return $game_party.actors[pos].hunger if $game_party.actors[pos] != nil
end
def self.actor_thist_pos(position = 0)
return $game_party.actors[pos].thirst if $game_party.actors[pos] != nil
end
def self.recover_hunger(actor_id = nil)
$game_party.actors.each {|actor|
if actor_id == nil
actor.hunger = actor.max_hunger
actor.thirst = actor.max_thirst
elsif actor.id == actor_id
actor.hunger = actor.max_hunger
actor.thirst = actor.max_thirst
end
}
end
def self.hunger_debugger
sys = "System ON: #{$game_party.hunger}\n\n" +
"By Time: #{BY_TIME}\n" +
"By Steps: #{BY_STEPS}\n\n"
actors = ''
$game_party.actors.each {|actor| actors +=
"#{actor.name}\nHunger: #{actor.hunger}\\#{actor.max_hunger}\n" +
"Thirst: #{actor.thirst}\\#{actor.max_thirst}\n\n"}
ht = "HungerTime: #{$game_party.time_hunger/40}\\#{SECS_HUNGER_DOWN}\n"
tt = "ThirstTime: #{$game_party.time_thirst/40}\\#{SECS_THIRST_DOWN}\n"
hs = "HungerStep: #{$game_party.steps}\\#{$game_party.step_hunger}\n"
ts = "ThirstStep: #{$game_party.steps}\\#{$game_party.step_thirst}\n"
print(sys + actors + ht + tt + hs + ts)
end
end
#-------------------------------------------------------------------------------
# ** Game_Actor
#-------------------------------------------------------------------------------
class Game_Actor < Game_Battler
attr_accessor :hunger
attr_accessor :max_hunger
attr_accessor :thirst
attr_accessor :max_thirst
alias zer0_hunger_setup setup
def setup(actor_id)
zer0_hunger_setup(actor_id)
@hunger = @max_hunger = Zer0::DEFAULT_HUNGER
@thirst = @max_thirst = Zer0::DEFAULT_THIRST
if Zer0::LVL_UP_INCREASE && @level > 1
increase = Zer0::LVL_UP_AMOUNT
@hunger = @max_hunger = (@level - 1) * increase + Zer0::DEFAULT_HUNGER
@thirst = @max_thirst = (@level - 1) * increase + Zer0::DEFAULT_THIRST
end
end
alias zer0_hunger_level_up exp=
def exp=(exp)
level = @level
zer0_hunger_level_up(exp)
if Zer0::LVL_UP_INCREASE && level != @level
lvls = @level - level
@max_hunger += (Zer0::LVL_UP_AMOUNT * lvls)
@max_thirst += (Zer0::LVL_UP_AMOUNT * lvls)
end
end
end
#-------------------------------------------------------------------------------
# ** Game_Battler
#-------------------------------------------------------------------------------
class Game_Battler
alias test item_effect
def item_effect(item)
food_item = false
hunger_plus = Zer0.food(item.id)
thirst_plus = Zer0.drink(item.id)
if hunger_plus != nil
if Zer0::RECOVER_BY_PERCENT
hunger_plus = (self.max_hunger * (hunger_plus * 0.01)).ceil
end
self.hunger += hunger_plus
self.hunger = [[self.hunger, self.max_hunger].min, 0].max
food_item = true
end
if thirst_plus != nil
if Zer0::RECOVER_BY_PERCENT
thirst_plus = (self.max_thirst * (thirst_plus * 0.01)).ceil
end
self.thirst += thirst_plus
self.thirst = [[self.thirst, self.max_thirst].min, 0].max
food_item = true
end
if food_item
states_plus(item.plus_state_set)
states_minus(item.minus_state_set)
return true
end
test(item)
end
end
#-------------------------------------------------------------------------------
# ** Game_Party
#-------------------------------------------------------------------------------
class Game_Party
attr_accessor :hunger
attr_accessor :time_hunger
attr_accessor :time_thirst
attr_accessor :step_hunger
attr_accessor :step_thirst
alias zer0_hunger_system_init initialize
def initialize
zer0_hunger_system_init
@hunger = true
@time_hunger = @time_thirst = 0
@step_hunger = Zer0::STEPS_HUNGER_DOWN
@step_thirst = Zer0::STEPS_THIRST_DOWN
end
def check_hunger_states
@actors.each {|actor|
state_id = Zer0.hunger_states(actor.hunger)
actor.add_state(state_id) if state_id != nil}
end
def check_thirst_states
@actors.each {|actor|
state_id = Zer0.thirst_states(actor.thirst)
actor.add_state(state_id) if state_id != nil}
end
end
#-------------------------------------------------------------------------------
# ** Scene_Map
#-------------------------------------------------------------------------------
class Scene_Map
alias zer0_hunger_map_upd update
def update
zer0_hunger_map_upd
if $game_party.hunger
update_hunger
end
end
def update_hunger
if Zer0::BY_TIME
$game_party.time_hunger += 1
$game_party.time_thirst += 1
if $game_party.time_hunger == (Zer0::SECS_HUNGER_DOWN * 40)
$game_party.actors.each {|actor|
actor.hunger -= 1 unless actor.dead? || actor.hunger == 0}
$game_party.check_hunger_states
$game_party.time_hunger = 0
end
if $game_party.time_thirst == (Zer0::SECS_THIRST_DOWN * 40)
$game_party.actors.each {|actor|
actor.thirst -= 1 unless actor.dead? || actor.thirst == 0}
$game_party.check_thirst_states
$game_party.time_thirst = 0
end
end
if Zer0::BY_STEPS
if $game_party.steps == $game_party.step_hunger
$game_party.actors.each {|actor|
actor.hunger -= 1 unless actor.dead? || actor.hunger == 0}
$game_party.check_hunger_states
$game_party.step_hunger = $game_party.steps + Zer0::STEPS_HUNGER_DOWN
end
if $game_party.steps == $game_party.step_thirst
$game_party.actors.each {|actor|
actor.thirst -= 1 unless actor.dead? || actor.thirst == 0}
$game_party.check_thirst_states
$game_party.step_thirst = $game_party.steps + Zer0::STEPS_THIRST_DOWN
end
end
end
end
Spoiler
#==============================================================================
# Scene Tutorial
# Version 1.0
# Author: modern algebra (rmrk.net)
# Date: September 15, 2008
# Modified by Jimmie for RMXP, 14 of August 2009
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Description:
# This script allows you to freeze user input for a scene and run a special
# common event that controls input. Effectively, this allows you to run a
# scene and direct a tutorial to that scene that explains what the scene is.
# So, if you ever wanted to give the players to your game a tutorial on
# using the Menu scene, then this is the script for you.
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Instructions:
# Okay, this script can be slightly difficult to use, so you have to pay
# careful attention to the instructions.
#
# To start a tutorial, you must use a call script with this code:
#
# $tutorial.start (scene, common event id)
#
# where scene is the name of the scene to call, (like Scene_Menu or
# Scene_Battle) and common event ID is the ID of the common event that
# controls the tutorial. Now, that's the easy part. Setting up the controller
# common event will be tricky at first, but once you get the hang of it,
# you'll be fine. Now, read the instructions very carefully:
#
# The Standard Wait Variable - You set what Variable this will be at line
# 200. The value of this variable determines how many frames to wait for
# after each command.
#
# The controller common event is similar to a regular common event in some
# ways but many of the commands will be unavailable to you while others will
# be irrelevant and others still will have a different effect than you would
# expect. In the instructions, I will go over the functions of what will be
# the most important commands in making a scene tutorial, but I just wanted
# to warn you that many commands will not work as you expect them to. (For
# instance, pictures, screen tone etc... will only work in a battle or map
# tutorial). So, depending on how the scene is built, some things are
# possible while others are not. Note, however, that in a number of cases,
# you can simulate the effect that is not possible. That being said, it can
# get quite convoluted, but that was as far as I was willing to go with this
# script. I apologize for the difficulty.
#
# Anyway, there are a couple of specialized commands that have their function
# changed from what they would normally do. These are:
#
# Control Variable
# Set Move Route
#
# These have been changed so that rather than do what they would normally,
# they instead interpret input. Since player input is frozen during a
# tutorial, scene movement is handled by you, the game creator. It is done
# through these two commands. This can be rather non-intuitive, but for each
# value of 0 through 19, a button is attached. It is similar for Set Move
# Route, but let's go over the variable way of setting input first.
#
# To set it, it must be a single variable set to a constant. If any other
# option is chosen, then the Control Variable command will function normally.
# Also, the control variable command will behave normally if the variable you
# choose is the one you choose for setting standard wait time. Anyway, here
# is the list of values and their effects:
#
# 0 - Down Cursor
# 1 - Left Cursor
# 2 - Right Cursor
# 3 - Up Cursor
# 4 - Button A
# 5 - Button B
# 6 - Button C
# 7 - Button X
# 8 - Button Y
# 9 - Button Z
# 10 - Button L
# 11 - Button R
# 12 - SHIFT
# 13 - CTRL
# 14 - ALT
# 15 - F5
# 16 - F6
# 17 - F7
# 18 - F8
# 19 - F9
#
# If you want to wait some frames, the Wait command will work normally.
#
# Set Move Route has a similar set of moves attached. They are:
# Move Down - Down Cursor
# Move Left - Left Cursor
# Move Right - Right Cursor
# Move Up - Up Cursor
# Move Lower Left - Button A
# Move Lower Right - Button B
# Move Upper Left - Button C
# Move Upper Right - Button X
# Move at Random - Button Y
# Move Toward Player - Button Z
# Move Away from Player - Button L
# One Step Forward - Button R
# One Step Backward - SHIFT
# Jump - CTRL
# Wait - Waits for however many frames
# Turn Down - ALT
# Turn Left - F5
# Turn Right - F6
# Turn Up - F7
# Turn 90 Left - F8
# Turn 90 Right - F9
#
# So basically, using those commands will make the scene react as if the
# corresponding button had just been pressed.
#==============================================================================
# *** Input
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - trigger?, press?, repeat?
#==============================================================================
module Input
class << self
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Frame Update
#````````````````````````````````````````````````````````````````````````
# Updates tutorial as well if it exists. It does it in Input as all scenes
# update Input every frame
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_tutorials_update_9rt update
def update
$tutorial.update if $tutorial != nil && $tutorial.active?
# Run Original Method
modalg_tutorials_update_9rt
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Trigger?
#````````````````````````````````````````````````````````````````````````
# If Tutorial is running, freezes input and accepts only tutorial input
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_tut_frz_inpt_trig_dj5 trigger?
def trigger? (key)
return $tutorial.button == key if $tutorial != nil && $tutorial.active? && !$tutorial.upd_input
# Run Original Method
modalg_tut_frz_inpt_trig_dj5 (key)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Repeat?
#````````````````````````````````````````````````````````````````````````
# If Tutorial is running, freezes input and accepts only tutorial input
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_rpt_tutorial_upd_8fn repeat?
def repeat? (key)
return $tutorial.button == key if $tutorial != nil && $tutorial.active? && !$tutorial.upd_input
# Run Original Method
modalg_rpt_tutorial_upd_8fn (key)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Press?
#````````````````````````````````````````````````````````````````````````
# If Tutorial is running, freezes input and accepts only tutorial input
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_tut_prs_frz_inpt_9nfg press?
def press? (key)
return $tutorial.button == key if $tutorial != nil && $tutorial.active? && !$tutorial.upd_input
# Run Original Method
modalg_tut_prs_frz_inpt_9nfg (key)
end
end
end
#==============================================================================
# ** Tutorial Guide
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This class handles the interpretation of the common event for a tutorial
#==============================================================================
class Game_TutorialGuide < Interpreter
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Constant
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# STANDARD WAIT VARIABLE is the ID of the event variable that holds a
# standard wait between input commands. Basically, if this is set to 2,
# then Variable with ID 2 will control the wait between actions. So, if
# Variable with ID 2 is set to 4, then it will wait four frames before
# executing the next command in the common event
STANDARD_WAIT_VARIABLE = 2
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize
super
@wait_frames = 60
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Control Variable
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def command_122
if @parameters[3] == 0 || @parameters[0] == STANDARD_WAIT_VARIABLE
command_input (@parameters[4] + 1)
else
super
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Set Move Route
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def command_209
@move_route = @parameters[1].list
@moveroute_index = 0
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Wait
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def command_106
command_wait (@params[0])
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Frame Update
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def update
# Wait
if @wait_frames > 0
@wait_frames -= 1
return
end
# Execute Move Route Input
unless @move_route.nil?
loop do
# Move on once move route exhausted
if @moveroute_index >= (@move_route.size - 1)
@move_route = nil
@moveroute_index = 0
break
end
# Execute Input command
command_move (@move_route[@moveroute_index])
@moveroute_index += 1
return if @wait_frames > 0
end
end
return false if @list.nil?
return if !execute_command # Execute event command
@index += 1
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Command Input
# button_code : the key a button corresponds to.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def command_input (button_value)
$tutorial.button = case button_value
when 1 then Input::DOWN # Cursor Down
when 2 then Input::LEFT # Cursor Left
when 3 then Input::RIGHT # Cursor Right
when 4 then Input::UP # Cursor Up
when 5 then Input::A # Press A
when 6 then Input::B # Press B
when 7 then Input::C # Press C or Enter
when 8 then Input::X # Press X
when 9 then Input::Y # Press Y
when 10 then Input::Z # Press Z
when 11 then Input::L # Press L
when 12 then Input::R # Press R
when 13 then Input::SHIFT # Press SHIFT
when 14 then Input::CTRL # Press CTRL
when 15 then Input::ALT # Press ALT
when 16 then Input::F5 # Press F5
when 17 then Input::F6 # Press F6
when 18 then Input::F7 # Press F7
when 19 then Input::F8 # Press F8
when 20 then Input::F9 # Press F9
end
@wait_frames = $game_variables[STANDARD_WAIT_VARIABLE]
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Command Move
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def command_move (command)
command_input (command.code) if command.code < 15
command_wait (command.parameters[0] - 1) if command.code == 15
command_input (command.code - 1) if command.code.between? (16, 21)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Command Wait
# duration : the number of frames to wait
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def command_wait (duration)
# Wait Frames - Subtract Standard wait frames tacked on by previous command
@wait_frames = duration
end
end
#==============================================================================
# ** Tutorial
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This class basically interprets a common event and navigates a scene by the
# codes used in that common event
#==============================================================================
class Tutorial
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_reader :upd_input
attr_accessor :button
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize
# Initialize variables
@button = false
@upd_input = false
@active = false
@tutorial_guide = Game_TutorialGuide.new
@index = 0
@wait_frames = 0
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Start
# scene : the scene to guide through
# common_event_id : the navigation common event
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def start (scene, common_event_id)
# Get Common Event
@tutorial_guide.setup ($data_common_events[common_event_id].list, 1)
# Initialize Scene
$scene = scene.new
@active = true
# Initialize Message window here because uses $game variables.
if @message_window.nil?
@message_window = Window_Message.new
@message_window.z = 210
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Update
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def update
@button = nil
@upd_input = true
@message_window.update
@upd_input = false
if $game_temp.message_text != nil or @message_window.visible
return
end
@active = false if @tutorial_guide.update == false
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Active?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def active?
return @active
end
end
#==============================================================================
# ** Scene_Title
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - initialize
#==============================================================================
class Scene_Title
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Initialize
#``````````````````````````````````````````````````````````````````````````
# Initialize $tutorial
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_tutorial_scenes_ldb_init_nf4 initialize
def initialize
# Initialize Tutorial
$tutorial = Tutorial.new
# Run Original Method
modalg_tutorial_scenes_ldb_init_nf4
end
end
Spoiler
#===============================================================================
# Achievements
# Version 2.23
# Author game_guy
#-------------------------------------------------------------------------------
# Intro:
# A full blown achievement system. Keep track of events your players pull off
# and make them feel like they've really achieved something. Easy to setup,
# plenty of options to configure it the way you want.
#
# Features:
# -Image/Text Achievement Notification
# -Show all achievements or only ones you unlocked
# -Change text font, size, and color
# -Option to keep track of score
# -Modify notification position
# -Modify text position if using an image
# -Modify popup time
# -Play sound when you unlock an achievement
# -Set return scene, scene you go to when exiting achievements menu
# -Custom queue system allowing you to display multiple achievements at a time
# -Much more compatible
# -Quickly open up achievements without interupting the current scene
# -Block scenes from the Quick Open
# -See if user has a specific achievement
# -See how many achievements the player has
# -Custom Icon Size Support
#
# Instructions:
# -Go down to Begin Config and edit all of your options there.
# -Instructions for creating achievements are also in the Config.
# -To gain an achievement, use Awards.gain(award_id)
# -Award id is set when creating awards.
# -To see if a user has an award use Awards.has?(award_id)
# -To see how many the player has use Awards.count
# -To open up the real achievements scene use
# $scene = Scene_Achievements.new
#
# Compatibility:
# -Not tested with SDK.
# -Should work with everything.
# -May corrupt old save games.
#
# Credits:
# -game_guy ~ For creating it.
# -jragyn00 ~ For the new layout.
# -GAX72 ~ For test achievement image.
#===============================================================================
module Awards
#===============================================================
# Begin Config
#===============================================================
#----------------------------------------------------------------------------
# If true, it'll show all unlocked and locked achievements, else it'll just
# show unlocked achievements
#----------------------------------------------------------------------------
Show_All = true
#----------------------------------------------------------------------------
# If Show_All is on, all locked icons will be displayed with the below
# icon
#----------------------------------------------------------------------------
Locked_Icon = "locked"
#----------------------------------------------------------------------------
# This replaces the achievments description if Show_All is on and the
# achievement is marked as hidden.
#----------------------------------------------------------------------------
Hidden_Info = "This achievement is hidden. Unlock it to find out more."
#----------------------------------------------------------------------------
# The scene you go to when you exit the achievements menu
#----------------------------------------------------------------------------
Return_Scene = Scene_Menu
#----------------------------------------------------------------------------
# If set to an Input key, it will open up a quick view window to view all
# achievements, can be opened up from anywhere, and doesn't interupt the
# current scene. Set to nil to turn it off.
#----------------------------------------------------------------------------
Quick_Access = Input::A
#----------------------------------------------------------------------------
# Add scenes here that you want quick access blocked on. Example,
# Scene_Title, wouldn't want users to view achievements there. Kinda odd.
#----------------------------------------------------------------------------
Block_Scenes = [Scene_Title, Scene_Gameover, Scene_File, Scene_Register,
Scene_Login, Scene_Servers]
#----------------------------------------------------------------------------
# Keep track of score?
#----------------------------------------------------------------------------
Track_Score = true
#----------------------------------------------------------------------------
# Text for "Score"
#----------------------------------------------------------------------------
Score_Text = "Points"
#----------------------------------------------------------------------------
# Variable to store the score in. (hehe)
#----------------------------------------------------------------------------
Variable_Id = 5
#----------------------------------------------------------------------------
# Font name
# Place your font in string tags "font_here"
# Or leave it as is to leave the default font.
#----------------------------------------------------------------------------
Text_Font = Font.default_name
#----------------------------------------------------------------------------
# Font color : Color.new(red, green, blue)
#----------------------------------------------------------------------------
Text_Color = Color.new(255, 255, 255)
#----------------------------------------------------------------------------
# Font size
#----------------------------------------------------------------------------
Text_Size = 24
#----------------------------------------------------------------------------
# Where will the award show up on the screen. [X, Y]
#----------------------------------------------------------------------------
Award_Place = [16, 16]
#----------------------------------------------------------------------------
# Use background image behind text?
#----------------------------------------------------------------------------
Use_Image = true
#----------------------------------------------------------------------------
# File used to display behind the text.
#----------------------------------------------------------------------------
Image_File = "award_background"
#----------------------------------------------------------------------------
# Offset for text drawn over the image. [X, Y]
#----------------------------------------------------------------------------
Image_Offset = [72, 0]
#----------------------------------------------------------------------------
# Draw icon on notification image?
#----------------------------------------------------------------------------
Draw_Icon = true
#----------------------------------------------------------------------------
# Offset for icon drawn over the image. [X, Y]
#----------------------------------------------------------------------------
Icon_Offset = [20, 20]
#----------------------------------------------------------------------------
# Custom icon size. If you change these values, you'll have to change
# Icon_Row and Icon_QuickRow. [WIDTH, HEIGHT]
#----------------------------------------------------------------------------
Icon_Size = [24, 24]
#----------------------------------------------------------------------------
# How many icons are displayed in one column (across).
#----------------------------------------------------------------------------
Icon_Column = 10
#----------------------------------------------------------------------------
# How many icons are in one column (across) in the Quick View scene.
#----------------------------------------------------------------------------
Icon_QColumn = 8
#----------------------------------------------------------------------------
# Time the "Unlocked Achievement" pop up stays on screen in frames.
#----------------------------------------------------------------------------
Popup_Time = 60
#----------------------------------------------------------------------------
# Sound played when an achievement pops up. ["sound", volume, pitch]
#----------------------------------------------------------------------------
Popup_Sound = ["114-Remedy02", 100, 0]
Award = []
#----------------------------------------------------------------------------
# To add a new award, add a new line:
# Award[id] = ["name", "description", "icon", score_amount, hidden]
# score_amount must be set even if Track_Score is off
# hidden must be set even if Show_All is off
# If you use Show_All and you want the description of achievements to be
# hidden, set hidden to true. If its false, it'll tell the name and
# description.
#----------------------------------------------------------------------------
Award[0] = ["New Game", "Start a new game!", "037-Item06", 10, false]
Award[1] = ["Award 1", "Talk to guy 1.", "046-Skill03", 10, true]
Award[2] = ["Award 2", "Talk to guy 1.", "046-Skill03", 10, false]
Award[3] = ["500 Damage", "Deal 500 damage in one attack.", "004-Weapon04", 5, false]
Award[4] = ["Am I rich?", "Have 1,000,000 gold at one time.", "035-Item04", 10, false]
Award[5] = ["Window Shopper", "Spend 1,000,000 gold.", "032-Item01", 10, false]
Award[6] = ["Longer Description", "OMGAR this has a longer description but carries on to the next line. I'm so sexy.", "033-Item02", 0, false]
Award[7] = ["Log Jumper", "Jump over the log.", "048-Skill05", 5, false]
Award[8] = ["Super Log Jumper", "Jump over the log 5 times", "048-Skill05", 25, false]
Award[9] = ["I am hidden!", "Learn about hidden achievements.", "034-Item03", 10, true]
Award[10] = ["GRRR!!!", "Brave enough to talk to a lion!", "019-Accessory04", 5, false]
Award[11] = ["Invisible", "Found and talked to invisible person.", "049-Skill06", 50, false]
Award[12] = ["Swiftly!", "Learn about the Quick Scene!", "020-Accessory05", 100, false]
#===============================================================
# End Config
#===============================================================
def self.gain(id)
return if $game_system.awards.include?(id)
if Awards::Award[id] != nil
$game_system.gain_award(id)
end
end
def self.has?(id)
return $game_system.awards.include?(id)
end
def self.count
return $game_system.awards.size
end
end
$gg_achievements = 2.23
#===============================================================================
# Sprite_Award
#-------------------------------------------------------------------------------
# Draws unlocked achievement.
#===============================================================================
class Sprite_Award < Sprite
def initialize(award)
super(nil)
@award = award
self.bitmap = Bitmap.new(1, 1)
self.bitmap.font.size = Awards::Text_Size
@text_width = self.bitmap.text_size(@award[0]).width + 8
@text_height = self.bitmap.text_size(@award[0]).height
self.bitmap.dispose
if Awards::Use_Image
@pic = RPG::Cache.picture(Awards::Image_File)
@pic_width = @pic.width > @text_width ? @pic.width : @text_width
@pic_height = @pic.height > @text_height ? @pic.height : @text_height
self.bitmap = Bitmap.new(@pic_width, @pic_height)
if Awards::Draw_Icon
@icon = RPG::Cache.icon(@award[2])
end
else
self.bitmap = Bitmap.new(@text_width, @text_height)
end
self.bitmap.font.color = Awards::Text_Color
self.bitmap.font.name = Awards::Text_Font
self.bitmap.font.size = Awards::Text_Size
self.z = 20000
self.x = Awards::Award_Place[0]
self.y = Awards::Award_Place[1]
refresh
end
def refresh
self.bitmap.clear
x = 0
y = 0
if @pic != nil
self.bitmap.blt(0, 0, @pic, Rect.new(0, 0, @pic.width, @pic.height))
x = Awards::Image_Offset[0]
y = Awards::Image_Offset[1]
if @icon != nil
icon_off = Awards::Icon_Offset
self.bitmap.blt(icon_off[0], icon_off[1], @icon, Rect.new(0, 0,
Awards::Icon_Size[0], Awards::Icon_Size[1]))
end
end
text = @award[0]
if @text_width + x > self.bitmap.width
text = self.bitmap.slice_text(@award[0], self.bitmap.width - x)
text.each_index {|i|
self.bitmap.draw_text(x, y + i * @text_height + 4,
@text_width, @text_height, text[i])}
else
self.bitmap.draw_text(x, y, @text_width, @text_height, text)
end
end
def dispose
super
if self.bitmap != nil
self.bitmap.dispose
end
end
end
#===============================================================================
# Graphics
#-------------------------------------------------------------------------------
# **added method to control and draw all queued achievements.
#===============================================================================
module Graphics
class << self
alias gg_upd_awards_queue_lat update
end
def self.update
@frame = 0 if @frame == nil
if $game_system != nil && $game_system.queue.size > 0 && @frame < 1
award = Awards::Award[$game_system.queue[0]]
if award != nil
@sprite = Sprite_Award.new(award)
@frame = Awards::Popup_Time
Audio.se_play("Audio/SE/#{Awards::Popup_Sound[0]}",
Awards::Popup_Sound[1], Awards::Popup_Sound[2])
end
end
if @frame > 0
@frame -= 1
if @frame < 1
@sprite.dispose
$game_system.queue.shift
end
end
gg_upd_awards_queue_lat
end
end
#===============================================================================
# Game_System
#-------------------------------------------------------------------------------
# **modded to keep track of queued and obtained achievements.
#===============================================================================
class Game_System
attr_accessor :awards
attr_accessor :queue
alias gg_init_awards_sys_lat initialize
def initialize
@awards = []
@queue = []
gg_init_awards_sys_lat
end
def gain_award(id)
return if @awards.include?(id) || Awards::Award[id] == nil
if Awards::Track_Score
$game_variables[Awards::Variable_Id] += Awards::Award[id][3]
end
@awards.push(id)
@queue.push(id)
end
end
#===============================================================================
# Bitmap
#===============================================================================
class Bitmap
def slice_text(text, width)
words = text.split(' ')
return words if words.size == 1
result, current_text = [], words.shift
words.each_index {|i|
if self.text_size("#{current_text} #{words[i]}").width > width
result.push(current_text)
current_text = words[i]
else
current_text = "#{current_text} #{words[i]}"
end
result.push(current_text) if i >= words.size - 1}
return result
end
end
#===============================================================================
# Window_QuickHelp
#===============================================================================
class Window_QuickHelp < Window_Base
def initialize
super(64, 32, 512, 160)
self.contents = Bitmap.new(width - 32, height - 32)
self.z = 10000
end
def set_award(award)
@award = award
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(0, 0, 512 / 2, 32, @award[0][0])
if Awards::Track_Score
text = "#{@award[0][3]} #{Awards::Score_Text}"
self.contents.draw_text(0, 0, 512 - 32, 32, text, 2)
text = "Total #{Awards::Score_Text}: #{$game_variables[Awards::Variable_Id]}"
self.contents.draw_text(0, 32, 512 - 32, 32, text, 2)
end
text = self.contents.slice_text(@award[0][1], 512 - 32)
if @award[0][4] && !$game_system.awards.include?(@award[1])
text = self.contents.slice_text(Awards::Hidden_Info, 512 - 32)
end
text.each_index {|i|
self.contents.draw_text(0, 64 + i * 32, 512 - 32, 32, text[i])}
end
end
#===============================================================================
# Window_QuickAwards
#===============================================================================
class Window_QuickAwards < Window_Selectable
def initialize
super(64, 128 + 64, 512, 320 - 64)
@column_max = Awards::Icon_QColumn
self.z = 10000
refresh
self.index = 0
end
def item
return @data[self.index]
end
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
$game_system.awards.each {|i|
@data.push([Awards::Award[i], i])}
if Awards::Show_All
@data = []
@locked = []
@unlocked = []
Awards::Award.each_index {|i|
if Awards::Award[i] != nil
if $game_system.awards.include?(i)
@unlocked.push([Awards::Award[i], i])
else
@locked.push([Awards::Award[i], i])
end
end}
@unlocked.each {|i| @data.push(i)}
@locked.each {|i| @data.push(i)}
end
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * Awards::Icon_Size[1])
for i in 0...@item_max
draw_item(i)
end
end
end
def draw_item(index)
item = @data[index]
width = Awards::Icon_Size[0] < 32 ? 32 : Awards::Icon_Size[0]
height = Awards::Icon_Size[1] < 32 ? 32 : Awards::Icon_Size[1]
x = 4 + index % @column_max * (width + 32)
y = index / @column_max * (height + 4)
rect = Rect.new(x, y, self.width / @column_max - 32, height)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
if $game_system.awards.include?(item[1])
bitmap = RPG::Cache.icon(item[0][2])
else
bitmap = RPG::Cache.icon(Awards::Locked_Icon)
end
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, Awards::Icon_Size[0],
Awards::Icon_Size[1]))
end
def update_help
@help_window.set_award(self.item)
end
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
return
end
row = @index / @column_max
if row < self.top_row
self.top_row = row
end
if row > self.top_row + (self.page_row_max - 1)
self.top_row = row - (self.page_row_max - 1)
end
cursor_width = Awards::Icon_Size[0] < 32 ? 32 : Awards::Icon_Size[0]
cursor_height = Awards::Icon_Size[1] < 32 ? 32 : Awards::Icon_Size[1]
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * (Awards::Icon_Size[1] + 4) - self.oy
self.cursor_rect.set(x, y, cursor_width, cursor_height + 4)
end
end
#===============================================================================
# QScene_Awards
#===============================================================================
class QScene_Awards
def initialize
@awards = Window_QuickAwards.new
@help = Window_QuickHelp.new
@awards.help_window = @help
loop do
Graphics.update
Input.update_old
update
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
break
end
end
@awards.dispose
@help.dispose
end
def update
@awards.update
@help.update
end
end
#===============================================================================
# Input
#===============================================================================
module Input
class << self
alias gg_init_quick_awards_lat update
end
def self.update_old
gg_init_quick_awards_lat
end
def self.check_blocked
Awards::Block_Scenes.each {|s|
return true if $scene.is_a?(s)}
return false
end
def self.update
if Awards::Quick_Access != nil && Input.trigger?(Awards::Quick_Access) &&
@scene == nil && !self.check_blocked
if defined?(RMXOS) && $game_temp.chat_active == true
return gg_init_quick_awards_lat
end
$game_system.se_play($data_system.decision_se)
@scene = QScene_Awards.new
@scene = nil
end
gg_init_quick_awards_lat
end
end
#===============================================================================
# Window_Award
#===============================================================================
class Window_Award < Window_Base
def initialize
super(0, 320, 640, 160)
self.contents = Bitmap.new(width - 32, height - 32)
end
def set_award(award)
@award = award
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(0, 0, 640 / 2, 32, @award[0][0])
if Awards::Track_Score
text = "#{@award[0][3]} #{Awards::Score_Text}"
self.contents.draw_text(0, 0, 640 - 32, 32, text, 2)
text = "Total #{Awards::Score_Text}: #{$game_variables[Awards::Variable_Id]}"
self.contents.draw_text(0, 32, 640 - 32, 32, text, 2)
end
text = self.contents.slice_text(@award[0][1], 640 - 32)
if @award[0][4] && !$game_system.awards.include?(@award[1])
text = self.contents.slice_text(Awards::Hidden_Info, 640 - 32)
end
text.each_index {|i|
self.contents.draw_text(0, 64 + i * 32, 640 - 32, 32, text[i])}
end
end
#===============================================================================
# Window_Awards
#===============================================================================
class Window_Awards < Window_Selectable
def initialize
super(0, 0, 640, 320)
@column_max = Awards::Icon_Column
refresh
self.index = 0
end
def item
return @data[self.index]
end
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
$game_system.awards.each {|i|
@data.push([Awards::Award[i], i])}
if Awards::Show_All
@data = []
@locked = []
@unlocked = []
Awards::Award.each_index {|i|
if Awards::Award[i] != nil
if $game_system.awards.include?(i)
@unlocked.push([Awards::Award[i], i])
else
@locked.push([Awards::Award[i], i])
end
end}
@unlocked.each {|i| @data.push(i)}
@locked.each {|i| @data.push(i)}
end
@item_max = @data.size
if @item_max > 0
height = Awards::Icon_Size[1] < 32 ? 32 : Awards::Icon_Size[1]
self.contents = Bitmap.new(width - 32, row_max * height)
for i in 0...@item_max
draw_item(i)
end
end
end
def draw_item(index)
item = @data[index]
width = Awards::Icon_Size[0] < 32 ? 32 : Awards::Icon_Size[0]
height = Awards::Icon_Size[1] < 32 ? 32 : Awards::Icon_Size[1]
x = 4 + index % @column_max * (width + 32)
y = index / @column_max * (height + 4)
rect = Rect.new(x, y, self.width / @column_max - 32, Awards::Icon_Size[1])
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
if $game_system.awards.include?(item[1])
bitmap = RPG::Cache.icon(item[0][2])
else
bitmap = RPG::Cache.icon(Awards::Locked_Icon)
end
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, Awards::Icon_Size[0],
Awards::Icon_Size[1]))
end
def update_help
@help_window.set_award(self.item)
end
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
return
end
row = @index / @column_max
if row < self.top_row
self.top_row = row
end
if row > self.top_row + (self.page_row_max - 1)
self.top_row = row - (self.page_row_max - 1)
end
cursor_width = Awards::Icon_Size[0] < 32 ? 32 : Awards::Icon_Size[0]
cursor_height = Awards::Icon_Size[1] < 32 ? 32 : Awards::Icon_Size[1]
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * (cursor_height + 4) - self.oy
self.cursor_rect.set(x, y, cursor_width, cursor_height)
end
end
#===============================================================================
# Scene_Achievements
#===============================================================================
class Scene_Achievements
def main
@help = Window_Award.new
@awards = Window_Awards.new
@awards.help_window = @help
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@help.dispose
@awards.dispose
end
def update
@awards.update
@help.update
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Awards::Return_Scene.new
return
end
end
end
Spoiler
http://www.sendspace.com/file/kh6cqv (Zeriab's Quest Book)(Or something similar)
Spoiler
http://www.mediafire...8bpara0jpxmuv8u (Elemental Gems)
Annnd I think that's just about everything (: Whoever does this is a superhero or something XD
Thankkks
Edited by Tenoukii, 30 October 2011 - 01:56 PM.




















