#===============================================================================
# Quest Log System
# Author game_guy
# Version 3.0
#-------------------------------------------------------------------------------
# Intro:
# A script that keeps track of quests you obtain and complete.
#
# Features:
# Marks quest names with a yellow color if they're completed
# Easy to setup one quest
# Be able to use a fairly long description
# Be able to display a picture
# Easy to add and complete a quest
# More compatible than earlier versions
#
# Instructions:
# Scroll down a bit until you see # Being Config. Follow the instructions there.
# Scroll below that and you'll see Begin Quest Setup. Follow the steps there.
#
# Script Calls:
# Quest.add(id) ~ Adds the quest(id) to the parties quests.
# Quest.take(id) ~ Takes the quest(id) from the party.
# Quest.complete(id) ~ Makes the quest(id) completed.
# Quest.completed?(id) ~ Returns true if the quest(id) is completed.
# Quest.has?(id) ~ Returns true if the party has quest(id).
# $scene = Scene_Quest.new ~ Opens the quest menu.
#
# Credits:
# game_guy ~ for making it
# Beta Testers ~ Sally and Landith
# Blizzard ~ Small piece of code I borrowed from his bestiary
#===============================================================================
module GameGuy
#==================================================
# Begin Config
# UsePicture ~ true means it'll show pictures in
# the quests, false it wont.
#==================================================
UsePicture = false
def self.qreward(id)
case id
#==================================================
# Quest Reward
# Use when x then return "Reward"
# x = id, Reward = reward in quotes
#==================================================
when 1 then return "100 Gold"
when 2 then return "3 Potions"
when 3 then return "Strength Ring"
end
return "????"
end
def self.qpicture(id)
case id
#==================================================
# Quest Picture
# Use when x then return "picture"
# x = id, picture = picutre name in quotes
#==================================================
when 1 then return "ghost"
end
return nil
end
def self.qname(id)
case id
#==================================================
# Quest Name
# Use when x then return "name"
# x = id, name = quest name in quotes
#==================================================
when 1 then return "Village Hunt"
when 2 then return "Pay Tab"
when 3 then return "Hunting Knife"
end
return ""
end
def self.qlocation(id)
case id
#==================================================
# Quest Location
# Use when x then return "location"
# x = id, location = location in quotes
#==================================================
when 1 then return "Arton Woods"
when 2 then return "Eeka"
when 3 then return "Eeka"
end
return "????"
end
def self.qdescription(id)
case id
#==================================================
# Quest Description
# Use when x then return "description"
# x = id, description = quest description in quotes
#==================================================
when 1 then return "Extremely LOOOOOOOOOOONNNNNNGGGGGGGG quest description as you can see this goes on for awhile. :P:P:P:P:P"
when 2 then return "Bring gold to Jarns Defense to pay her tab."
when 3 then return "Go get Kip a hunting knife from Eeka."
end
return ""
end
end
module Quest
def self.add(id)
$game_party.add_quest(id)
end
def self.take(id)
$game_party.take_quest(id)
end
def self.complete(id)
$game_party.complete(id)
end
def self.completed?(id)
return $game_party.completed?(id)
end
def self.has?(id)
return $game_party.has_quest?(id)
end
end
class Game_Party
attr_accessor :quests
attr_accessor :completed
alias gg_quests_lat initialize
def initialize
@quests = []
@completed = []
gg_quests_lat
end
def add_quest(id)
unless @quests.include?(id)
@quests.push(id)
end
end
def completed?(id)
return @completed.include?(id)
end
def complete(id)
unless @completed.include?(id)
if @quests.include?(id)
@completed.push(id)
end
end
end
def has_quest?(id)
return @quests.include?(id)
end
def take_quest(id)
@quests.delete(id)
@completed.delete(id)
end
end
class Scene_Quest
def main
@quests = []
for i in $game_party.quests
@quests.push(GameGuy.qname(i))
end
@map = Spriteset_Map.new
@quests2 = []
for i in $game_party.quests
@quests2.push(i)
end
@quests_window = Window_Command.new(160, @quests)
@quests_window.height = 480
@quests_window.back_opacity = 110
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
@quests_window.dispose
@quest_info.dispose if @quest_info != nil
@map.dispose
end
def update
@quests_window.update
if @quests_window.active
update_quests
return
end
if @quest_info != nil
update_info
return
end
end
def update_quests
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Menu.new
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
@quest_info = Window_QuestInfo.new(@quests2[@quests_window.index])
@quest_info.back_opacity = 110
@quests_window.active = false
return
end
end
def update_info
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@quests_window.active = true
@quest_info.dispose
@quest_info = nil
return
end
end
end
class Window_QuestInfo < Window_Base
def initialize(quest)
super(160, 0, 480, 480)
self.contents = Bitmap.new(width - 32, height - 32)
@quest = quest
refresh
end
def refresh
self.contents.clear
if GameGuy::UsePicture
pic = GameGuy.qpicture(@quest)
bitmap = RPG::Cache.picture(GameGuy.qpicture(@quest)) if pic != nil
rect = Rect.new(0, 0, bitmap.width, bitmap.height) if pic != nil
self.contents.blt(480-bitmap.width-32, 0, bitmap, rect) if pic != nil
end
self.contents.font.color = system_color
self.contents.draw_text(0, 0, 480, 32, "Quest:")
self.contents.font.color = normal_color
self.contents.draw_text(0, 32, 480, 32, GameGuy.qname(@quest))
self.contents.font.color = system_color
self.contents.draw_text(0, 64, 480, 32, "Reward:")
self.contents.font.color = normal_color
self.contents.draw_text(0, 96, 480, 32, GameGuy.qreward(@quest))
self.contents.font.color = system_color
self.contents.draw_text(0, 128, 480, 32, "Location:")
self.contents.font.color = normal_color
self.contents.draw_text(0, 160, 480, 32, GameGuy.qlocation(@quest))
self.contents.font.color = system_color
self.contents.draw_text(0, 192, 480, 32, "Completion:")
self.contents.font.color = normal_color
if $game_party.completed.include?(@quest)
self.contents.font.color = crisis_color
self.contents.draw_text(0, 224, 480, 32, "Completed")
else
self.contents.font.color = normal_color
self.contents.draw_text(0, 224, 480, 32, "In Progress")
end
self.contents.font.color = system_color
self.contents.draw_text(0, 256, 480, 32, "Description:")
self.contents.font.color = normal_color
text = self.contents.slice_text(GameGuy.qdescription(@quest), 460)
text.each_index {|i|
self.contents.draw_text(0, 288 + i*32, 460, 32, text[i])}
end
end
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