Andre4e Posted August 30, 2009 Share Posted August 30, 2009 In giro x internet ho trovato questo script..però da errore di sintassi potete controllarlo??L'errore lo da in una stringa dove efettivamente ci sono 5 parentesi aperte e 2 chiuse però anche aggiungendole da sempre errore #==============================================================================# Quest Journal# Version: 1.1# Author: modern algebra (rmrk.net)# Date: March 24, 2008#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Description:# Basically, this script is an objective based quest log that allows the# user to make quests and reveal them to the characters through specified# script calls. It is objective based, meaning that you advance the quest# by having the player complete objectives and you can choose when to reveal# these objectives and when to set them as complete or as failed. That being# said, this script does not build quests, it more or less gives you a# graphical interface for showing quest progress. It does run by script# call, and so read the instructions carefully if you want to use this script#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Instructions:# Basically, set up all of your quests in the module below. The Constants# section is annotated, so read the comments near them to determine what you# should set these constants to. As you can see, they are filled in with# default values currently, and so that should give you an idea of what to# do.## Setting up quests can be a little bit harder. You will have to set one# of these up for every quest that you want represented in the scene. Refer# to the editable region inside the class Quest for further instructions## Once they are setup, you can activate them at any time in the game by# this code:## $game_party.quests[quest_id]## There are several methods you can call that are of relevance. Namely:## $game_party.quests[quest_id].reveal_objective (objective_id)# $game_party.quests[quest_id].conceal_objective (objective_id)# $game_party.quests[quest_id].complete_objective (objective_id)# $game_party.quests[quest_id].uncomplete_objective (objective_id)# $game_party.quests[quest_id].fail_objective (objective_id)# $game_party.quests[quest_id].unfail_objective (objective_id)# $game_party.quests[quest_id].complete?# $game_party.quests[quest_id].failed?# $game_party.quests[quest_id].reward_given = true/false# $game_party.quests[quest_id].concealed = true/false# $game_party.quests.remove (quest_id)## There are other methods that you can access, but they are irrelevant for# the purposes of controlling quest progress. These are fairly self-# explanatory methods, but in case they aren't, reveal_objective naturally# allows the specified objective to appear in the Quest Journal for browsing# by the user. complete_objective notes when an objective is complete, and# fail_objective notes when the player has done something that fails this# objective. complete? returns true if all primary objectives have been# completed and failed? returns true if any primary objective has been# failed. reward_given serves the function of a switch. You should# essentially make the reward event look like this:## @> Conditional Branch: Script: $game_party.quests[quest_id].complete?# @> Conditional Branch: Script: $game_party.quests[quest_id].reward_given# @> ...Thank you or whatever you want the event to say once the reward has been given# @> Else# @> ...Give Reward# @> Script: $game_party.quests[quest_id].reward_given = true# @> Branch End# @> Branch End## Later versions of this script will have an auto-reward system and also a# Journal to which the player can write notes.## You can also disable access to the Quest Log at any time with the code:# $game_system.quest_disabled = true## And you can change how it is accessed with the codes:## $game_system.quest_keyaccess = true / false # ON MAP# $game_system.quest_menuaccess = true / false # IN MENU## Also, in a message, \nq[quest_id] will retrieve the name of a quest and# print it in a message#================================================================================# *** Quest Data#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# This is the configuration class for the Quest Journal#================================================================================ module ModAlg_QuestData#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Constants#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Editable Region#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~QUESTS_LABEL = 'Quests' # What you want Quests to be called (eg. 'Missions')ACTIVE_QUEST_ICON = 149 # What icon signifies a quest is activeCOMPLETE_QUEST_ICON = 150 # What icon signifies a quest is completeFAILED_QUEST_ICON = 179 # What icon signifies a quest is failedBULLET_CHARACTER = '●' # The character used for listing objectivesACTIVE_COLOUR = 0 # The colour of a quest that is activeCOMPLETE_COLOUR = 11 # The colour of a quest that is completeFAILED_COLOUR = 18 # The colour of a quest that is failedMENU_ACCESS = true # Can the script be accessed through the menu?MENU_INDEX = 4 # If above is true, where in the command window?KEY_ACCESS = false # Can the quest log be accessed by a keyMAPKEY_BUTTON = Input::L # If above is true, which button?#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Quest Data#----------------------------------------------------------------------------# Returns skeleton data for the quesr#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def self.quest_data (id)# Set class variables to corresponding argumentsobjectives = []name = '??????'description = '??????????'icon_index = 0case id#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * EDITABLE REGION#------------------------------------------------------------------------# To set up a quest, first identify it with an ID - this can be anything# as long as it is not the same as another quest, but it is important to# remember this ID as it is the only way to access your quest.# In any case, the format for setting up a quest is:## when <quest_id> # Give the quest an ID number# name = '<quest_name>'# description = '<quest_description>'# objectives[0] = '<first_objective>'# ...# objectives[n] = '<nth objective>'# prime = [<objective_id>, ..., <objective_id>]# icon_index = <quest_icon_index>## Each of these values have an importance.# name is the name of the quest# description is a small blurb explaining the overall goal of the quest# objective[0..n] are short-term goals that lead to the overall goal# primes are which objectives need to be complete before the quest is# considered to be complete# icon_index is the icon that represents the quest## Note that any of the above values can be omitted without throwing an# error, but for the quest to work properly you should at least set the# name, description, and objectives. If you do omit these, the default# values are:## name = '??????'# description = '??????????'# objectives = []# prime = [all objectives]# icon_index = 0## If you do want to require that all objectives must be satisfied before# the quest is complete, then do not bother defining it. Otherwise, be# sure to set it.#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~when 1 # Fetchname = 'Fetch'description = 'Martha needs someone to play with her dog'objectives[0] = 'Find a stick'objectives[1] = 'Throw the stick to the dog'objectives[2] = 'Retrieve the stick from the dog'icon_index = 79when 4 # Cat Retrievalname = 'Cat Retrieval'description = 'Mrs. Bunderby has lost her cat, and she has employed you to find it.'objectives[0] = 'Find the lost cat'objectives[1] = 'Climb the tree and retrieve the cat'objectives[2] = "Return a cat to Mrs. Bunderby"# Set prime objectives in an array based on indexprime = [0, 2]icon_index = 137#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * END EDITABLE REGION#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~endreturn name, description, objectives, prime, icon_indexend #============================================================================# ** Quest#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Holds in-game data for a quest#============================================================================ class Quest#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Public Instance Variables#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~attr_reader :name # The name of the questattr_reader :id # The ID in $game_party.questsattr_reader :description # A blurb explaining the questattr_reader :objectives # An array of strings holding objectivesattr_reader :prime_objectives # An array of crucial objectivesattr_reader :icon_index # The Icon associated with this questattr_reader :revealed_objectives # An array of revealed objectivesattr_reader :complete_objectives # An array of completed objectivesattr_reader :failed_objectives # An array of failed objectivesattr_accessor :reward_given # A switch to ensure only one reward givenattr_accessor :concealed # A switch to show or not show the quest#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Object Initialization#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def initialize (id)@id = id# Set class variables to corresponding arguments@name, @description, @objectives, prime, @icon_index = ModAlg_QuestData.quest_data (id)# If no primary objectives are specifiedif prime.nil?# All objectives become primaryprime = []for i in 0...@objectives.sizeprime.push (i)endend@prime_objectives = prime# Initialize non-public arrays@revealed_objectives = []@complete_objectives = []@failed_objectives = []@reward_given = false@concealed = falseend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Reveal Objective#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def reveal_objective (index)return if index >= @objectives.size# Add to revealed objectives@revealed_objectives |= [index]# Sort from lowest index to highest index@revealed_objectives.sort!end#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Conceal Objective#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def conceal_objective (index)@revealed_objectives.delete (index)end#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Complete Objective#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def complete_objective (index)return if index >= @objectives.size# If the objective is failed, you cannot complete it.return if @failed_objectives.include? (index)# Reveal the objective if it was not previously revealedreveal_objective (index) unless @revealed_objectives.include? (index)# Add to complete objectives@complete_objectives |= [index]# Sort from lowest index to highest index@complete_objectives.sort!end#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Uncomplete Objective#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def uncomplete_objective (index)@complete_objectives.delete (index)end#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Fail Objective#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def fail_objective (index)return if index >= @objectives.size# Reveal the objective if it has not yet been revealedreveal_objective (index) unless @revealed_objectives.include? (index)# Add to revealed objectives@failed_objectives |= [index]# Sort from lowest index to highest index@failed_objectives.sort!end#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Unfail Objective#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def unfail_objective (index)@failed_objectives.delete (index)end#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Complete?#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def complete?# Check if all prime objectives have been completedreturn (@complete_objectives & @prime_objectives) == @prime_objectivesend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Failed?#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def failed?# Check if any prime objectives have been failedreturn (@failed_objectives & @prime_objectives) != []endendend #==============================================================================# ** Ellipse#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Stores an ellipse object.#============================================================================== class Ellipse#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Public Instance Variables#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~attr_reader :a # The width of the ovalattr_reader :b # The Height of the ovalattr_reader :x # the top left x positionattr_reader :y # the top left y positionattr_reader :h # The x position of the originattr_reader :k # The y position of the origin#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Object Initialization# x : the top left x position# y : the top left y position# a : the width of oval from origin to the side# b : the height of oval from origin. If nil, then a is radius of circle#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def initialize (x, y, a, b = nil)@x = x@y = y@a = a@b = b.nil? ? a : b@h = x + a@k = y + @bend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Within?# x : the x coordinate being tested# y : the y coordinate being tested#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def within? (x, y)x_square = ((x - @h)*(x - @h)).to_f / (@a*@a)y_square = ((y - @k)*(y - @k)).to_f / (@b*@cool.gif)# If "radius" <= 1, then it must be within the ellipsereturn (x_square + y_square) <= 1endend #==============================================================================# ** Bitmap#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# This adds the methods fill_ellipse, outline_ellipse, and fill_rounded_rect#============================================================================== class Bitmap#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Outline Ellipse# ellipse : the ellipse being drawn# width : the width of the bar# colour : the colour of the outline#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def outline_ellipse (ellipse, colour = font.color, width = 1, steps = 0)# For neatness, define local variables a and b to the ellipse variablesa, b = ellipse.a, ellipse.b# Use Ramanujan's approximation of the Circumference of an ellipsesteps = Math:tongue.gifI*(3*(a + cool.gif - Math.sqrt((3*a + cool.gif*(a + 3*cool.gif)) if steps == 0radian_modifier = (2*Math:tongue.gifI) / stepsfor i in 0...stepst = (radian_modifier*i) % (2*Math:tongue.gifI)# Expressed parametrically:# x = h + acos(t), y = k + bsin(t) : where t ranges from 0 to 2pix = (ellipse.h + (a*Math.cos(t)))y = (ellipse.k + (b*Math.sin(t)))set_pixel (x, y, colour)end# Thicken the lineif width > 1ellipse = Ellipse.new (ellipse.x + 1, ellipse.y + 1, ellipse.a - 1, ellipse.b - 1)outline_ellipse (ellipse, colour, width - 1, steps)endend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Fill Ellipse# ellipse : the ellipse being drawn# colour : the colour of the outline#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def fill_ellipse (ellipse, colour = font.color, steps = 0)# For neatness, define local variables a and b to the ellipse variablesa, b = ellipse.a, ellipse.b# Use Ramanujan's approximation of the Circumference of an ellipsesteps = Math:tongue.gifI*(3*(a + cool.gif - Math.sqrt((3*a + cool.gif*(a + 3*cool.gif)) if steps == 0radian_modifier = (2*Math:tongue.gifI) / stepsfor i in 0...(steps / 2)t = (radian_modifier*i) % (2*Math:tongue.gifI)# Expressed parametrically:# x = h + acos(t), y = k + bsin(t) : where t ranges from 0 to 2pix = ellipse.h + (a*Math.cos(t))y = ellipse.k - (b*Math.sin(t))fill_rect (x, y, 1, 2*(ellipse.k - y), colour)endend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Fill Rounded Rectangle# rect : the rectangle being drawn# colour : the colour of the outline# w : the number of pixels to cover by rounding#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Used to fill a rectangle with rounded corners#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def fill_rounded_rect (rect, colour = font.color, w = 8)# Draw Body of the rectanglefill_rect (rect.x + w, rect.y, rect.width - 2*w, rect.height, colour)# Draw Left Vertical Rectfill_rect (rect.x, rect.y + w, w, rect.height - 2*w, colour)# Draw Right Vertical Rectx = rect.x + rect.width - wfill_rect (x, rect.y + w, w, rect.height - 2*w, colour)# Make a circlecircle = Ellipse.new (0, 0, w)for i in 0...wfor j in 0...w# Upper Left Cornerset_pixel (rect.x + i, rect.y + j, colour) if circle.within? (i, j)# Upper Right Cornerset_pixel (rect.x + rect.width - w + i, rect.y + j, colour) if circle.within? (i + w, j)# Bottom Left Cornerset_pixel (rect.x + i, rect.y + rect.height - w + j, colour) if circle.within? (i, j + w)# Bottom Right Cornerset_pixel (rect.x + rect.width - w + i, rect.y + rect.height - w + j, colour) if circle.within? (i + w, j + w)endendendend #==============================================================================# ** Window_VarySizeHelp#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# This window is the same as Window_Help, but with variable size#============================================================================== class Window_VarySizeHelp < Window_Help#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Object Initialization#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def initialize (h_x = 0, h_y = 0, h_width = Graphics.width, h_height = WLH + 32)super ()self.x, self.y, self.width, self.height = h_x, h_y, h_width, h_heightcontents.disposeself.contents = Bitmap.new (h_width - 32, h_height - 32)endend #==============================================================================# ** Game_System#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Summary of Changes:# new instance variables - quest_disabled, quest_keyaccess# aliased method - initialize#============================================================================== class Game_System#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Public Instance Variables#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~attr_accessor :quest_disabled # Can you access quest journal at this timeattr_accessor :quest_keyaccess # Is it accessible by key?attr_accessor :quest_menuaccess # Is it accessible through the menu#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Object Initialization#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~alias modalg_qst_jrnl_system_init_quests initializedef initialize# Run Original Methodmodalg_qst_jrnl_system_init_quests# Initialize new variables@quest_disabled = false@quest_keyaccess = ModAlg_QuestData::KEY_ACCESS@quest_menuaccess = ModAlg_QuestData::MENU_ACCESSendend #==============================================================================# ** Game_Party#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Summary of Changes:# new instance variable - quests# aliased method - initialize#============================================================================== class Game_Party#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Public Instance Variables#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~attr_reader :quests#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Object Initialization#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~alias modalg_qst_jrnl_party_init_quests initializedef initialize# Run Original Methodmodalg_qst_jrnl_party_init_quests# Initialize @quests@quests = Game_Quests.newendend #==============================================================================# ** Game_Quests#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# This class handles Quests. It is a wrapper for the built-in class "Hash".# The instance of this class is accessed by $game_party.quests#============================================================================== class Game_Quests#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Object Initialization#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def initialize@data = {}end#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Get Quest# quest_id : the ID of the quest#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def [] (quest_id)@data[quest_id] = ModAlg_QuestData::Quest.new (quest_id) if @data[quest_id] == nilreturn @data[quest_id]end#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Get Quest List#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def listquest_list = @data.valuesquest_list.each { |i| quest_list.delete (i) if i.concealed }return quest_listend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Get Completed Quest List#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def completed_listcomplete_quests = []list.each { |i| complete_quests.push (i) if i.complete? }return complete_questsend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Get Failed Quest List#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def failed_listfailed_quests = []list.each { |i| failed_quests.push (i) if i.failed? }return failed_questsend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Get Active Quest List#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def active_listreturn list - failed_list - completed_listend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Revealed?# quest_id : the ID of a checked quest#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def revealed? (quest_id)return @data[quest_id] != nilend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Remove Quest# quest_id : the ID of a checked quest#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def remove (quest_id)@data.delete (quest_id)end#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Clear#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def clear@data.clearendend #==============================================================================# ** Window_Command#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Summary of Changes:# new instance variable - disabled_commands# aliased method - initialize, draw_item#============================================================================== class Window_Command#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Public Instance Variable#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~attr_reader :disabled_commands#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Initialize# width : window width# commands : command string array# column_max : digit count (if 2 or more, horizontal selection)# row_max : row count (0: match command count)# spacing : blank space when items are arrange horizontally#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~alias modalg_quest_jrnl_intlz initializedef initialize(width, commands, column_max = 1, row_max = 0, spacing = 32)# Initialize new instance variable@disabled_commands = []# Run Original Methodmodalg_quest_jrnl_intlz (width, commands, column_max, row_max, spacing)end#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Draw Item# index : item number# enabled : enabled flag. When false, draw semi-transparently#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~alias modalg_quest_jrnl_itm_drw draw_itemdef draw_item (index, enabled = true)# Run Original Methodmodalg_quest_jrnl_itm_drw (index, enabled)enabled ? @disabled_commands.delete (index) : @disabled_commands.push (index)endend #==============================================================================# ** Window_Message#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Summary of Changes:# aliaed method - convert_special_characters#============================================================================== class Window_Message#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Convert Special Characters#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~alias modalg_quest_jrnl_spec_char_convert convert_special_charactersdef convert_special_characters@text.gsub! (/\\NQ\[(\d+)\]/i) { $game_party.quests[$1.to_i] } # Name Quest# Run Original Methodmodalg_quest_jrnl_spec_char_convertendend #==============================================================================# ** Window_QuestLabel#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# This window signifies that this is a quest list#============================================================================== class Window_QuestLabel < Window_Base#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Object Initialization#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def initializesuper (0, 0, 160 + WLH, 32 + WLH)create_contentscontents.font.color = system_colorcontents.draw_text (0, 0, contents.width, WLH, ModAlg_QuestData::QUESTS_LABEL, 1)endend #==============================================================================# ** Window_QuestCategory#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# This window displays which category is being viewed#============================================================================== class Window_QuestCategory < Window_Base#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Object Initialization#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def initializesuper (0, WLH + 32, 160 + WLH, 64)create_contentsend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Refresh# category_index : icon to highlight -# 0 => All, 1 => Active, 2 => Complete, 3 => Failed#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def refresh (category_index = 0)contents.clear# Retrieve Icon Bitmapsbitmap = Cache.system("Iconset")icon_index = ModAlg_QuestData::ACTIVE_QUEST_ICONactive_rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)icon_index = ModAlg_QuestData::COMPLETE_QUEST_ICONcomplete_rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)icon_index = ModAlg_QuestData::FAILED_QUEST_ICONfailed_rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)# Combine the three icons for the All Iconall_icon = Bitmap.new (40, 32)all_icon.blt (0, 0, bitmap, complete_rect)all_icon.blt (20, 0, bitmap, failed_rect)all_icon.blt (8, 10, bitmap, active_rect)distance = (contents.width - 112) / 3x = 0# Draw the 'All' Icon onto the windowcontents.blt (x, 0, all_icon, all_icon.rect, category_index == 0 ? 255 : 128)x += 40 + distance# Draw the 'Active' Icon onto the windowcontents.blt (x, 4, bitmap, active_rect, category_index == 1 ? 255 : 128)x += 24 + distance# Draw the 'Complete' Icon onto the windowcontents.blt (x, 4, bitmap, complete_rect, category_index == 2 ? 255 : 128)x += 24 + distance# Draw the 'Failed' Icon onto the windowcontents.blt (x, 4, bitmap, failed_rect, category_index == 3 ? 255 : 128)endend #==============================================================================# ** Window_QuestList#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# This window displays the list of quests#============================================================================== class Window_QuestList < Window_Selectable#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Object Initialization#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def initialize (category_index = 0, index = 0)super (0, 64 + (WLH + 32), 160 + WLH, Graphics.height - 64 - 2*(WLH + 32))@data = []@column_max = 1refresh (category_index)self.index = indexself.active = trueend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Quest#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def questreturn @data[self.index]end#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Refresh# category_index : List to show -# 0 => All, 1 => Active, 2 => Complete, 3 => Failed#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def refresh (category_index = 0)font = Font.new@data.clearself.index = 0# Get the quest list to be drawncase category_indexwhen 0@data = $game_party.quests.listwhen 1@data = $game_party.quests.active_listfont.color = text_color (ModAlg_QuestData::ACTIVE_COLOUR)when 2@data = $game_party.quests.completed_listfont.color = text_color (ModAlg_QuestData::COMPLETE_COLOUR)when 3@data = $game_party.quests.failed_listfont.color = text_color (ModAlg_QuestData::FAILED_COLOUR)end@item_max = @data.sizeunless contents == nil# Clear Contentscontents.clearreturn if @data.empty?contents.disposeend# Create Contentsself.contents = Bitmap.new (width - 32, WLH*@data.size)contents.font = font# Draw the Quest Namesfor i in 0...@data.sizequest = @data# If all, distinguish between quest types by colourif category_index == 0if quest.complete?contents.font.color = text_color (ModAlg_QuestData::COMPLETE_COLOUR)elsif quest.failed?contents.font.color = text_color (ModAlg_QuestData::FAILED_COLOUR)else # Activecontents.font.color = text_color (ModAlg_QuestData::ACTIVE_COLOUR)endenddraw_icon (quest.icon_index, 0, i*WLH)# Draw the name of the questcontents.draw_text (24, i*WLH, contents.width - 24, WLH, quest.name)endendend #==============================================================================# ** Window_QuestInfo#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# This window displays the information on the quest being viewed#============================================================================== class Window_QuestInfo < Window_Base#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Object Initialization#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def initializesuper (160 + WLH, 0, Graphics.width - (160 + WLH), Graphics.height - (32 + WLH))create_contentsend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Refresh#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~def refresh (quest = nil)contents.clearreturn if quest == nil# Draw the name of the Quest, centredcontents.font.color = normal_colorcontents.draw_text (0, 0, contents.width, WLH, quest.name, 1)# If the font has set width charactersif contents.text_size ('w').width == contents.text_size ('i').widthformatter = Paragrapher::Formatter_2.newelseformatter = Paragrapher::Formatter.newend# Format the descriptiondesc_bitmap = Bitmap.new (contents.width - 16, (2.4*WLH).to_i)desc_bitmap.font.size -= 4formatted_desc = formatter.format (quest.description, desc_bitmap)# Draw the Description Boxbox_height = [WLH*(formatted_desc.lines.size + 1), 3*WLH].minrect = Rect.new (2, (1.5*WLH).to_i, contents.width - 4, box_height)contents.fill_rounded_rect (rect, system_color, 10)rect.x, rect.y = rect.x + 2, rect.y + 2rect.width, rect.height = rect.width - 4, rect.height - 4contents.fill_rounded_rect (rect, Color.new (0, 0, 0, 0), 10)tw = contents.text_size ('Description').width# Draw the description signifiercontents.fill_rect (32, (1.5*WLH).to_i, tw + 2, 2, Color.new (0, 0, 0, 0))contents.font.color = system_colorcontents.draw_text (33, WLH, tw, WLH, 'Description')# Paragraph Artistartist = Paragrapher::Artist.new# If bitmap is too largeif formatted_desc.lines.size < 2formatted_desc.bitmap = Bitmap.new (contents.width - 16, formatted_desc.lines.size*WLH)formatted_desc.bitmap.font.size -= 4endbmp = artist.draw (formatted_desc)# Centre within the boxy = rect.y + 4 + (rect.height - bmp.height) / 2contents.blt (8, y, bmp, bmp.rect)bmp.disposey = 2*WLH + rect.height + 4# Draw Objectives Signifier Textcontents.font.color = system_colortw = contents.text_size ('Objectives').widthcontents.draw_text (32, y, tw, WLH, 'Objectives')y += WLHquest.revealed_objectives.each { |i|# Get the correct colorcontents.font.color = quest.complete_objectives.include? (i) ?text_color (ModAlg_QuestData::COMPLETE_COLOUR) : quest.failed_objectives.include? (i) ?text_color (ModAlg_QuestData::FAILED_COLOUR) : text_color (ModAlg_QuestData::ACTIVE_COLOUR)# Get objectiveobjective = quest.objectives# Draw Bullettw = contents.text_size (ModAlg_QuestData::BULLET_CHARACTER).widthx = 8contents.draw_text (x, y, tw, WLH, ModAlg_QuestData::BULLET_CHARACTER)x += tw + 4# Format the objectiveobj_bitmap = Bitmap.new (contents.width - x, 2*WLH)obj_bitmap.font = contents.fontobj_bitmap.font.size -= 4formatted_obj = formatter.format (objective, obj_bitmap)# Draw Objectivebmp = artist.draw (formatted_obj)contents.blt (x, y + 4, bmp, bmp.rect)# Modify the Y accordinglyy += WLH*([formatted_obj.lines.size, 2].min)}endend #==============================================================================# ** Scene_Map#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Summary of Changes:# aliased method - update#============================================================================== class Scene_Map < Scene_Base#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Frame Update#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~alias modalg_quest_journal_map_upd_key_access updatedef updatemodalg_quest_journal_map_upd_key_access# If the quest log can be accessed by key and is not empty or disabledif $game_system.quest_keyaccess && !$game_system.quest_disabled && !$game_party.quests.list.empty?$scene = Scene_Quest.new if Input.trigger? (ModAlg_QuestData::MAPKEY_BUTTON)endendend #==============================================================================# ** Scene_Menu#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Summary of Changes:# aliased methods - initialize, create_command_window, update_command_selection#============================================================================== class Scene_Menu < Scene_Base#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Object Initialization# menu_index : command cursor's initial position#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~alias modalg_quest_jrnl_init initializedef initialize(menu_index = 0)modalg_quest_jrnl_init (menu_index)return unless $game_system.quest_menuaccessif @menu_index == 'Quest'@menu_index = ModAlg_QuestData::MENU_INDEXelsif @menu_index >= ModAlg_QuestData::MENU_INDEX@menu_index += 1endend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Create Command Window#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~alias modalg_quest_journal_menu_cmmnd_win_create create_command_windowdef create_command_windowmodalg_quest_journal_menu_cmmnd_win_create# If accessed through map, then don't add it to the menureturn unless $game_system.quest_menuaccessc = @command_window.commandsc.insert (ModAlg_QuestData::MENU_INDEX, ModAlg_QuestData::QUESTS_LABEL)width = @command_window.widthdisabled = @command_window.disabled_commands@command_window.dispose@command_window = Window_Command.new(width, c)@command_window.index = @menu_index# Disable all of the old commands as welldisabled.each { |i|i += 1 if i >= ModAlg_QuestData::MENU_INDEX@command_window.draw_item (i, false)}if $game_system.quest_disabled || $game_party.quests.list.empty? # If Quest Journal disabled@command_window.draw_item (ModAlg_QuestData::MENU_INDEX, false)endend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Update Command Selection#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~alias modalg_quest_journal_menu_cmmnd_select_upd update_command_selectiondef update_command_selectionif $game_system.quest_menuaccesschanged = falseif @command_window.index == ModAlg_QuestData::MENU_INDEX && Input.trigger? (Input::C)if $game_system.quest_disabled || $game_party.quests.list.empty? # If Quest Journal disabledSound.play_buzzerelse# Open Quest WindowSound.play_decision$scene = Scene_Quest.newendreturnend# If the command index is greater than it ought to be, make sureif @command_window.index > ModAlg_QuestData::MENU_INDEX@command_window.index = (@command_window.index - 1) % @command_window.commands.sizechanged = trueendendmodalg_quest_journal_menu_cmmnd_select_updreturn unless $game_system.quest_menuaccess@command_window.index = (@command_window.index + 1) % @command_window.commands.size if changedend#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# * Update Actor Selection#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~alias modalg_quest_jrnl_actor_selection_upd update_actor_selectiondef update_actor_selectionchanged = falseif $game_system.quest_menuaccess && @command_window.index > ModAlg_QuestData::MENU_INDEX@command_window.index = (@command_window.index - 1) % @command_window.commands.sizechanged = trueendmodalg_quest_jrnl_actor_selection_updreturn unless $game_system.quest_menuaccess@command_window.index = (@command_window.index + 1) % @command_window.commands.size if changedendend #==============================================================================# ** Scene_Quest#------------------------------------------------------------------------------# This class performs the quest screen processing.#============================================================================== class Scene_Quest < Scene_Base#--------------------------------------------------------------------------# * Object Initialization# menu_index : command cursor's initial position#--------------------------------------------------------------------------def initialize(category_index = 0, quest_index = 0)@category_index = category_index@quest_index = quest_indexend#--------------------------------------------------------------------------# * Start processing#--------------------------------------------------------------------------def startsupercreate_menu_background# Create Windows@label_window = Window_QuestLabel.new@category_window = Window_QuestCategory.new@category_window.refresh (@category_index)@list_window = Window_QuestList.new (@category_index, @quest_index)@info_window = Window_QuestInfo.new@info_window.refresh (@list_window.quest)@help_window = Window_VarySizeHelp.new@help_window.y = Graphics.height - @help_window.height@help_window.set_text ('Use Horizontal Arrow Keys to change categories', 1)end#--------------------------------------------------------------------------# * Termination Processing#--------------------------------------------------------------------------def terminatesuperdispose_menu_background@label_window.dispose@category_window.dispose@list_window.dispose@info_window.dispose@help_window.disposeend#--------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def updatesuperupdate_menu_background# Since the only possible activity is from @list_window, put it here@list_window.updateif Input.trigger?(Input::cool.gif # If Button B is pressedSound.play_cancel# If Returning to Menuif $game_system.quest_menuaccess$scene = Scene_Menu.new ('Quest')else # Returning to Map$scene = Scene_Map.newendelsif Input.trigger? (Input::C) # If C button is pressed# Open Journal (eventually)elsif Input.trigger? (Input::LEFT) # If Left direction pressed# Play Cursor SESound.play_cursor# Refresh Category Window@category_index = (@category_index - 1) % 4@category_window.refresh (@category_index)@list_window.refresh (@category_index)@info_window.refresh (@list_window.quest)elsif Input.trigger? (Input::RIGHT) # If Right direction pressed# Play Cursor SESound.play_cursor# Refresh Category Window@category_index = (@category_index + 1) % 4@category_window.refresh (@category_index)@list_window.refresh (@category_index)@info_window.refresh (@list_window.quest)# If scrolling through questselsif Input.trigger? (Input::DOWN) || Input.trigger? (Input::UP)# Refresh Info Window@info_window.refresh (@list_window.quest)endendend http://files.nireblog.com/blogs4/narutozorro9kolas/files/firma-naruto-y-yondaime.gif Link to comment Share on other sites More sharing options...
0 Kingartur2 Posted August 30, 2009 Share Posted August 30, 2009 puoi dirmi la stringa esatta??Non posso provarlo purtroppo Per qualsiasi motivo non aprite questo spoiler. Ho detto di non aprirlo ! Se lo apri ancora esplode il mondo. Aaaaaa è un vizio. Contento? Il mondo è esploso, sono tutti morti per colpa della tua curiosità . Vuoi che ti venga anche il morbillo, la varicella e l'AIDS??? O bravo ora sei un malato terminale e nessuno ti puo curare, sono tutti morti ! Se clicchi ancora una volta il PC esplode. E dai smettila !! Uff!! Hai cliccato tante volte che ho dovuto sostituirlo con un codebox. http://s8.postimg.org/yntv9nxld/Banner.png http://img204.imageshack.us/img204/8039/sccontest3octpl3.gif Link to comment Share on other sites More sharing options...
0 giver Posted August 30, 2009 Share Posted August 30, 2009 Ci sono due cose che non vanno in quello script. 1) E' per VX e non per XP . . . 2) E' pieno di "codici" di faccine, come questa :Ok: , per il maledetto vizio di non inserire gli script nei tag quando li si posta . . .E si creano bug che in origine non ci sono . . . PS: Lo so che quando hai postato lo script c'erano già da prima, perchè altrimenti nel tuo post sarebbero appunto apparse le relative faccine . . .Usare il tag [code] permette agli altri di aiutare più facilmente, tra l'altro . . . SCRIPT RGSS (RPG Maker XP) VINTAGE LIBRARY [2018+]http://www.rpg2s.net/forum/index.php/topic/21892-vintagevisualsrewrite-enhanced-revised-victory-screen-v-35-da-autori-vari-a-giver/ http://www.rpg2s.net/forum/index.php/topic/21868-eventing-utility-simple-last-battle-events-fix-v-30-by-giver/ http://www.rpg2s.net/forum/index.php/topic/21853-vintagerewrite-constance-menu-per-4-personaggi-da-team-constance-a-giver/ http://www.rpg2s.net/forum/index.php/topic/22126-vintagedoveroso-necroedit-dummy-title-22u-update-per-crearlo-ad-eventi-su-mappa-by-giver/ http://www.rpg2s.net/forum/index.php/topic/22127-vintagevisuals-tale-chapters-save-system-20-by-giver/ Breaking (in ogni senso) News: "Treno deraglia per via del seno di Sakurai Aoi . . ." - Info nello spoiler !! http://afantasymachine.altervista.org/_altervista_ht/NOOOOOOOOOilMIOtreninooooo_500.gifNon riesco a smettere di essere affascinato da immagini come questa . . .http://anime.vl-vostok.ru/art/photos2011/17/78049800/wall_VladAnime_WWA_1885-1680x1050.jpgAlcuni wallpapers che faccio ruotare sul mio vecchio PC . . .http://afantasymachine.altervista.org/_altervista_ht/gits_window.jpghttp://afantasymachine.altervista.org/_altervista_ht/madoka_group01.jpghttp://afantasymachine.altervista.org/_altervista_ht/arisu_picipici_01.jpghttp://afantasymachine.altervista.org/_altervista_ht/phantom_wp01_einzwei.jpg La parte più spassosa della mia vita è quando gli altri cercano di spiegarmi i miei pensieri . . . BBCode TestingTypeface & Size Link to comment Share on other sites More sharing options...
0 Andre4e Posted August 30, 2009 Author Share Posted August 30, 2009 (edited) Strano xk da dove lho preso c'era scritto che era x l'xp! Boh!comunque la stringa era la 256 Edited August 30, 2009 by Andre4e http://files.nireblog.com/blogs4/narutozorro9kolas/files/firma-naruto-y-yondaime.gif Link to comment Share on other sites More sharing options...
0 Kingartur2 Posted August 31, 2009 Share Posted August 31, 2009 Mi dispiace andre ma non posso fa nulla visto che è per il VX e io non so convertirlo.... Per qualsiasi motivo non aprite questo spoiler. Ho detto di non aprirlo ! Se lo apri ancora esplode il mondo. Aaaaaa è un vizio. Contento? Il mondo è esploso, sono tutti morti per colpa della tua curiosità . Vuoi che ti venga anche il morbillo, la varicella e l'AIDS??? O bravo ora sei un malato terminale e nessuno ti puo curare, sono tutti morti ! Se clicchi ancora una volta il PC esplode. E dai smettila !! Uff!! Hai cliccato tante volte che ho dovuto sostituirlo con un codebox. http://s8.postimg.org/yntv9nxld/Banner.png http://img204.imageshack.us/img204/8039/sccontest3octpl3.gif Link to comment Share on other sites More sharing options...
Question
Andre4e
In giro x internet ho trovato questo script..però da errore di sintassi potete controllarlo??
L'errore lo da in una stringa dove efettivamente ci sono 5 parentesi aperte e 2 chiuse però anche aggiungendole da sempre errore
#==============================================================================
# Quest Journal
# Version: 1.1
# Author: modern algebra (rmrk.net)
# Date: March 24, 2008
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Description:
# Basically, this script is an objective based quest log that allows the
# user to make quests and reveal them to the characters through specified
# script calls. It is objective based, meaning that you advance the quest
# by having the player complete objectives and you can choose when to reveal
# these objectives and when to set them as complete or as failed. That being
# said, this script does not build quests, it more or less gives you a
# graphical interface for showing quest progress. It does run by script
# call, and so read the instructions carefully if you want to use this script
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Instructions:
# Basically, set up all of your quests in the module below. The Constants
# section is annotated, so read the comments near them to determine what you
# should set these constants to. As you can see, they are filled in with
# default values currently, and so that should give you an idea of what to
# do.
#
# Setting up quests can be a little bit harder. You will have to set one
# of these up for every quest that you want represented in the scene. Refer
# to the editable region inside the class Quest for further instructions
#
# Once they are setup, you can activate them at any time in the game by
# this code:
#
# $game_party.quests[quest_id]
#
# There are several methods you can call that are of relevance. Namely:
#
# $game_party.quests[quest_id].reveal_objective (objective_id)
# $game_party.quests[quest_id].conceal_objective (objective_id)
# $game_party.quests[quest_id].complete_objective (objective_id)
# $game_party.quests[quest_id].uncomplete_objective (objective_id)
# $game_party.quests[quest_id].fail_objective (objective_id)
# $game_party.quests[quest_id].unfail_objective (objective_id)
# $game_party.quests[quest_id].complete?
# $game_party.quests[quest_id].failed?
# $game_party.quests[quest_id].reward_given = true/false
# $game_party.quests[quest_id].concealed = true/false
# $game_party.quests.remove (quest_id)
#
# There are other methods that you can access, but they are irrelevant for
# the purposes of controlling quest progress. These are fairly self-
# explanatory methods, but in case they aren't, reveal_objective naturally
# allows the specified objective to appear in the Quest Journal for browsing
# by the user. complete_objective notes when an objective is complete, and
# fail_objective notes when the player has done something that fails this
# objective. complete? returns true if all primary objectives have been
# completed and failed? returns true if any primary objective has been
# failed. reward_given serves the function of a switch. You should
# essentially make the reward event look like this:
#
# @> Conditional Branch: Script: $game_party.quests[quest_id].complete?
# @> Conditional Branch: Script: $game_party.quests[quest_id].reward_given
# @> ...Thank you or whatever you want the event to say once the reward has been given
# @> Else
# @> ...Give Reward
# @> Script: $game_party.quests[quest_id].reward_given = true
# @> Branch End
# @> Branch End
#
# Later versions of this script will have an auto-reward system and also a
# Journal to which the player can write notes.
#
# You can also disable access to the Quest Log at any time with the code:
# $game_system.quest_disabled = true
#
# And you can change how it is accessed with the codes:
#
# $game_system.quest_keyaccess = true / false # ON MAP
# $game_system.quest_menuaccess = true / false # IN MENU
#
# Also, in a message, \nq[quest_id] will retrieve the name of a quest and
# print it in a message
#===============================================================================
=
# *** Quest Data
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~
# This is the configuration class for the Quest Journal
#===============================================================================
=
module ModAlg_QuestData
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Constants
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Editable Region
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
QUESTS_LABEL = 'Quests' # What you want Quests to be called (eg. 'Missions')
ACTIVE_QUEST_ICON = 149 # What icon signifies a quest is active
COMPLETE_QUEST_ICON = 150 # What icon signifies a quest is complete
FAILED_QUEST_ICON = 179 # What icon signifies a quest is failed
BULLET_CHARACTER = '●' # The character used for listing objectives
ACTIVE_COLOUR = 0 # The colour of a quest that is active
COMPLETE_COLOUR = 11 # The colour of a quest that is complete
FAILED_COLOUR = 18 # The colour of a quest that is failed
MENU_ACCESS = true # Can the script be accessed through the menu?
MENU_INDEX = 4 # If above is true, where in the command window?
KEY_ACCESS = false # Can the quest log be accessed by a key
MAPKEY_BUTTON = Input::L # If above is true, which button?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Quest Data
#----------------------------------------------------------------------------
# Returns skeleton data for the quesr
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def self.quest_data (id)
# Set class variables to corresponding arguments
objectives = []
name = '??????'
description = '??????????'
icon_index = 0
case id
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * EDITABLE REGION
#------------------------------------------------------------------------
# To set up a quest, first identify it with an ID - this can be anything
# as long as it is not the same as another quest, but it is important to
# remember this ID as it is the only way to access your quest.
# In any case, the format for setting up a quest is:
#
# when <quest_id> # Give the quest an ID number
# name = '<quest_name>'
# description = '<quest_description>'
# objectives[0] = '<first_objective>'
# ...
# objectives[n] = '<nth objective>'
# prime = [<objective_id>, ..., <objective_id>]
# icon_index = <quest_icon_index>
#
# Each of these values have an importance.
# name is the name of the quest
# description is a small blurb explaining the overall goal of the quest
# objective[0..n] are short-term goals that lead to the overall goal
# primes are which objectives need to be complete before the quest is
# considered to be complete
# icon_index is the icon that represents the quest
#
# Note that any of the above values can be omitted without throwing an
# error, but for the quest to work properly you should at least set the
# name, description, and objectives. If you do omit these, the default
# values are:
#
# name = '??????'
# description = '??????????'
# objectives = []
# prime = [all objectives]
# icon_index = 0
#
# If you do want to require that all objectives must be satisfied before
# the quest is complete, then do not bother defining it. Otherwise, be
# sure to set it.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
when 1 # Fetch
name = 'Fetch'
description = 'Martha needs someone to play with her dog'
objectives[0] = 'Find a stick'
objectives[1] = 'Throw the stick to the dog'
objectives[2] = 'Retrieve the stick from the dog'
icon_index = 79
when 4 # Cat Retrieval
name = 'Cat Retrieval'
description = 'Mrs. Bunderby has lost her cat, and she has employed you to find it.'
objectives[0] = 'Find the lost cat'
objectives[1] = 'Climb the tree and retrieve the cat'
objectives[2] = "Return a cat to Mrs. Bunderby"
# Set prime objectives in an array based on index
prime = [0, 2]
icon_index = 137
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * END EDITABLE REGION
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
end
return name, description, objectives, prime, icon_index
end
#============================================================================
# ** Quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Holds in-game data for a quest
#============================================================================
class Quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_reader :name # The name of the quest
attr_reader :id # The ID in $game_party.quests
attr_reader :description # A blurb explaining the quest
attr_reader :objectives # An array of strings holding objectives
attr_reader :prime_objectives # An array of crucial objectives
attr_reader :icon_index # The Icon associated with this quest
attr_reader :revealed_objectives # An array of revealed objectives
attr_reader :complete_objectives # An array of completed objectives
attr_reader :failed_objectives # An array of failed objectives
attr_accessor :reward_given # A switch to ensure only one reward given
attr_accessor :concealed # A switch to show or not show the quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize (id)
@id = id
# Set class variables to corresponding arguments
@name, @description, @objectives, prime, @icon_index = ModAlg_QuestData.quest_data (id)
# If no primary objectives are specified
if prime.nil?
# All objectives become primary
prime = []
for i in 0...@objectives.size
prime.push (i)
end
end
@prime_objectives = prime
# Initialize non-public arrays
@revealed_objectives = []
@complete_objectives = []
@failed_objectives = []
@reward_given = false
@concealed = false
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Reveal Objective
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def reveal_objective (index)
return if index >= @objectives.size
# Add to revealed objectives
@revealed_objectives |= [index]
# Sort from lowest index to highest index
@revealed_objectives.sort!
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Conceal Objective
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def conceal_objective (index)
@revealed_objectives.delete (index)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Complete Objective
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def complete_objective (index)
return if index >= @objectives.size
# If the objective is failed, you cannot complete it.
return if @failed_objectives.include? (index)
# Reveal the objective if it was not previously revealed
reveal_objective (index) unless @revealed_objectives.include? (index)
# Add to complete objectives
@complete_objectives |= [index]
# Sort from lowest index to highest index
@complete_objectives.sort!
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Uncomplete Objective
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def uncomplete_objective (index)
@complete_objectives.delete (index)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Fail Objective
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def fail_objective (index)
return if index >= @objectives.size
# Reveal the objective if it has not yet been revealed
reveal_objective (index) unless @revealed_objectives.include? (index)
# Add to revealed objectives
@failed_objectives |= [index]
# Sort from lowest index to highest index
@failed_objectives.sort!
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Unfail Objective
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def unfail_objective (index)
@failed_objectives.delete (index)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Complete?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def complete?
# Check if all prime objectives have been completed
return (@complete_objectives & @prime_objectives) == @prime_objectives
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Failed?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def failed?
# Check if any prime objectives have been failed
return (@failed_objectives & @prime_objectives) != []
end
end
end
#==============================================================================
# ** Ellipse
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Stores an ellipse object.
#==============================================================================
class Ellipse
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_reader :a # The width of the oval
attr_reader :b # The Height of the oval
attr_reader :x # the top left x position
attr_reader :y # the top left y position
attr_reader :h # The x position of the origin
attr_reader :k # The y position of the origin
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
# x : the top left x position
# y : the top left y position
# a : the width of oval from origin to the side
# b : the height of oval from origin. If nil, then a is radius of circle
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize (x, y, a, b = nil)
@x = x
@y = y
@a = a
@b = b.nil? ? a : b
@h = x + a
@k = y + @b
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Within?
# x : the x coordinate being tested
# y : the y coordinate being tested
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def within? (x, y)
x_square = ((x - @h)*(x - @h)).to_f / (@a*@a)
y_square = ((y - @k)*(y - @k)).to_f / (@b*@cool.gif)
# If "radius" <= 1, then it must be within the ellipse
return (x_square + y_square) <= 1
end
end
#==============================================================================
# ** Bitmap
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# This adds the methods fill_ellipse, outline_ellipse, and fill_rounded_rect
#==============================================================================
class Bitmap
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Outline Ellipse
# ellipse : the ellipse being drawn
# width : the width of the bar
# colour : the colour of the outline
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def outline_ellipse (ellipse, colour = font.color, width = 1, steps = 0)
# For neatness, define local variables a and b to the ellipse variables
a, b = ellipse.a, ellipse.b
# Use Ramanujan's approximation of the Circumference of an ellipse
steps = Math:tongue.gifI*(3*(a + cool.gif - Math.sqrt((3*a + cool.gif*(a + 3*cool.gif)) if steps == 0
radian_modifier = (2*Math:tongue.gifI) / steps
for i in 0...steps
t = (radian_modifier*i) % (2*Math:tongue.gifI)
# Expressed parametrically:
# x = h + acos(t), y = k + bsin(t) : where t ranges from 0 to 2pi
x = (ellipse.h + (a*Math.cos(t)))
y = (ellipse.k + (b*Math.sin(t)))
set_pixel (x, y, colour)
end
# Thicken the line
if width > 1
ellipse = Ellipse.new (ellipse.x + 1, ellipse.y + 1, ellipse.a - 1, ellipse.b - 1)
outline_ellipse (ellipse, colour, width - 1, steps)
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Fill Ellipse
# ellipse : the ellipse being drawn
# colour : the colour of the outline
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def fill_ellipse (ellipse, colour = font.color, steps = 0)
# For neatness, define local variables a and b to the ellipse variables
a, b = ellipse.a, ellipse.b
# Use Ramanujan's approximation of the Circumference of an ellipse
steps = Math:tongue.gifI*(3*(a + cool.gif - Math.sqrt((3*a + cool.gif*(a + 3*cool.gif)) if steps == 0
radian_modifier = (2*Math:tongue.gifI) / steps
for i in 0...(steps / 2)
t = (radian_modifier*i) % (2*Math:tongue.gifI)
# Expressed parametrically:
# x = h + acos(t), y = k + bsin(t) : where t ranges from 0 to 2pi
x = ellipse.h + (a*Math.cos(t))
y = ellipse.k - (b*Math.sin(t))
fill_rect (x, y, 1, 2*(ellipse.k - y), colour)
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Fill Rounded Rectangle
# rect : the rectangle being drawn
# colour : the colour of the outline
# w : the number of pixels to cover by rounding
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Used to fill a rectangle with rounded corners
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def fill_rounded_rect (rect, colour = font.color, w = 8)
# Draw Body of the rectangle
fill_rect (rect.x + w, rect.y, rect.width - 2*w, rect.height, colour)
# Draw Left Vertical Rect
fill_rect (rect.x, rect.y + w, w, rect.height - 2*w, colour)
# Draw Right Vertical Rect
x = rect.x + rect.width - w
fill_rect (x, rect.y + w, w, rect.height - 2*w, colour)
# Make a circle
circle = Ellipse.new (0, 0, w)
for i in 0...w
for j in 0...w
# Upper Left Corner
set_pixel (rect.x + i, rect.y + j, colour) if circle.within? (i, j)
# Upper Right Corner
set_pixel (rect.x + rect.width - w + i, rect.y + j, colour) if circle.within? (i + w, j)
# Bottom Left Corner
set_pixel (rect.x + i, rect.y + rect.height - w + j, colour) if circle.within? (i, j + w)
# Bottom Right Corner
set_pixel (rect.x + rect.width - w + i, rect.y + rect.height - w + j, colour) if circle.within? (i + w, j + w)
end
end
end
end
#==============================================================================
# ** Window_VarySizeHelp
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# This window is the same as Window_Help, but with variable size
#==============================================================================
class Window_VarySizeHelp < Window_Help
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize (h_x = 0, h_y = 0, h_width = Graphics.width, h_height = WLH + 32)
super ()
self.x, self.y, self.width, self.height = h_x, h_y, h_width, h_height
contents.dispose
self.contents = Bitmap.new (h_width - 32, h_height - 32)
end
end
#==============================================================================
# ** Game_System
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Summary of Changes:
# new instance variables - quest_disabled, quest_keyaccess
# aliased method - initialize
#==============================================================================
class Game_System
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_accessor :quest_disabled # Can you access quest journal at this time
attr_accessor :quest_keyaccess # Is it accessible by key?
attr_accessor :quest_menuaccess # Is it accessible through the menu
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_qst_jrnl_system_init_quests initialize
def initialize
# Run Original Method
modalg_qst_jrnl_system_init_quests
# Initialize new variables
@quest_disabled = false
@quest_keyaccess = ModAlg_QuestData::KEY_ACCESS
@quest_menuaccess = ModAlg_QuestData::MENU_ACCESS
end
end
#==============================================================================
# ** Game_Party
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Summary of Changes:
# new instance variable - quests
# aliased method - initialize
#==============================================================================
class Game_Party
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_reader :quests
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_qst_jrnl_party_init_quests initialize
def initialize
# Run Original Method
modalg_qst_jrnl_party_init_quests
# Initialize @quests
@quests = Game_Quests.new
end
end
#==============================================================================
# ** Game_Quests
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# This class handles Quests. It is a wrapper for the built-in class "Hash".
# The instance of this class is accessed by $game_party.quests
#==============================================================================
class Game_Quests
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize
@data = {}
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Get Quest
# quest_id : the ID of the quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def [] (quest_id)
@data[quest_id] = ModAlg_QuestData::Quest.new (quest_id) if @data[quest_id] == nil
return @data[quest_id]
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Get Quest List
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def list
quest_list = @data.values
quest_list.each { |i| quest_list.delete (i) if i.concealed }
return quest_list
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Get Completed Quest List
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def completed_list
complete_quests = []
list.each { |i| complete_quests.push (i) if i.complete? }
return complete_quests
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Get Failed Quest List
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def failed_list
failed_quests = []
list.each { |i| failed_quests.push (i) if i.failed? }
return failed_quests
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Get Active Quest List
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def active_list
return list - failed_list - completed_list
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Revealed?
# quest_id : the ID of a checked quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def revealed? (quest_id)
return @data[quest_id] != nil
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Remove Quest
# quest_id : the ID of a checked quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def remove (quest_id)
@data.delete (quest_id)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Clear
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def clear
@data.clear
end
end
#==============================================================================
# ** Window_Command
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Summary of Changes:
# new instance variable - disabled_commands
# aliased method - initialize, draw_item
#==============================================================================
class Window_Command
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variable
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_reader :disabled_commands
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Initialize
# width : window width
# commands : command string array
# column_max : digit count (if 2 or more, horizontal selection)
# row_max : row count (0: match command count)
# spacing : blank space when items are arrange horizontally
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_quest_jrnl_intlz initialize
def initialize(width, commands, column_max = 1, row_max = 0, spacing = 32)
# Initialize new instance variable
@disabled_commands = []
# Run Original Method
modalg_quest_jrnl_intlz (width, commands, column_max, row_max, spacing)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Draw Item
# index : item number
# enabled : enabled flag. When false, draw semi-transparently
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_quest_jrnl_itm_drw draw_item
def draw_item (index, enabled = true)
# Run Original Method
modalg_quest_jrnl_itm_drw (index, enabled)
enabled ? @disabled_commands.delete (index) : @disabled_commands.push (index)
end
end
#==============================================================================
# ** Window_Message
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Summary of Changes:
# aliaed method - convert_special_characters
#==============================================================================
class Window_Message
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Convert Special Characters
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_quest_jrnl_spec_char_convert convert_special_characters
def convert_special_characters
@text.gsub! (/\\NQ\[(\d+)\]/i) { $game_party.quests[$1.to_i] } # Name Quest
# Run Original Method
modalg_quest_jrnl_spec_char_convert
end
end
#==============================================================================
# ** Window_QuestLabel
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# This window signifies that this is a quest list
#==============================================================================
class Window_QuestLabel < Window_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize
super (0, 0, 160 + WLH, 32 + WLH)
create_contents
contents.font.color = system_color
contents.draw_text (0, 0, contents.width, WLH, ModAlg_QuestData::QUESTS_LABEL, 1)
end
end
#==============================================================================
# ** Window_QuestCategory
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# This window displays which category is being viewed
#==============================================================================
class Window_QuestCategory < Window_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize
super (0, WLH + 32, 160 + WLH, 64)
create_contents
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Refresh
# category_index : icon to highlight -
# 0 => All, 1 => Active, 2 => Complete, 3 => Failed
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def refresh (category_index = 0)
contents.clear
# Retrieve Icon Bitmaps
bitmap = Cache.system("Iconset")
icon_index = ModAlg_QuestData::ACTIVE_QUEST_ICON
active_rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
icon_index = ModAlg_QuestData::COMPLETE_QUEST_ICON
complete_rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
icon_index = ModAlg_QuestData::FAILED_QUEST_ICON
failed_rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
# Combine the three icons for the All Icon
all_icon = Bitmap.new (40, 32)
all_icon.blt (0, 0, bitmap, complete_rect)
all_icon.blt (20, 0, bitmap, failed_rect)
all_icon.blt (8, 10, bitmap, active_rect)
distance = (contents.width - 112) / 3
x = 0
# Draw the 'All' Icon onto the window
contents.blt (x, 0, all_icon, all_icon.rect, category_index == 0 ? 255 : 128)
x += 40 + distance
# Draw the 'Active' Icon onto the window
contents.blt (x, 4, bitmap, active_rect, category_index == 1 ? 255 : 128)
x += 24 + distance
# Draw the 'Complete' Icon onto the window
contents.blt (x, 4, bitmap, complete_rect, category_index == 2 ? 255 : 128)
x += 24 + distance
# Draw the 'Failed' Icon onto the window
contents.blt (x, 4, bitmap, failed_rect, category_index == 3 ? 255 : 128)
end
end
#==============================================================================
# ** Window_QuestList
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# This window displays the list of quests
#==============================================================================
class Window_QuestList < Window_Selectable
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize (category_index = 0, index = 0)
super (0, 64 + (WLH + 32), 160 + WLH, Graphics.height - 64 - 2*(WLH + 32))
@data = []
@column_max = 1
refresh (category_index)
self.index = index
self.active = true
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def quest
return @data[self.index]
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Refresh
# category_index : List to show -
# 0 => All, 1 => Active, 2 => Complete, 3 => Failed
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def refresh (category_index = 0)
font = Font.new
@data.clear
self.index = 0
# Get the quest list to be drawn
case category_index
when 0
@data = $game_party.quests.list
when 1
@data = $game_party.quests.active_list
font.color = text_color (ModAlg_QuestData::ACTIVE_COLOUR)
when 2
@data = $game_party.quests.completed_list
font.color = text_color (ModAlg_QuestData::COMPLETE_COLOUR)
when 3
@data = $game_party.quests.failed_list
font.color = text_color (ModAlg_QuestData::FAILED_COLOUR)
end
@item_max = @data.size
unless contents == nil
# Clear Contents
contents.clear
return if @data.empty?
contents.dispose
end
# Create Contents
self.contents = Bitmap.new (width - 32, WLH*@data.size)
contents.font = font
# Draw the Quest Names
for i in 0...@data.size
quest = @data
# If all, distinguish between quest types by colour
if category_index == 0
if quest.complete?
contents.font.color = text_color (ModAlg_QuestData::COMPLETE_COLOUR)
elsif quest.failed?
contents.font.color = text_color (ModAlg_QuestData::FAILED_COLOUR)
else # Active
contents.font.color = text_color (ModAlg_QuestData::ACTIVE_COLOUR)
end
end
draw_icon (quest.icon_index, 0, i*WLH)
# Draw the name of the quest
contents.draw_text (24, i*WLH, contents.width - 24, WLH, quest.name)
end
end
end
#==============================================================================
# ** Window_QuestInfo
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# This window displays the information on the quest being viewed
#==============================================================================
class Window_QuestInfo < Window_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize
super (160 + WLH, 0, Graphics.width - (160 + WLH), Graphics.height - (32 + WLH))
create_contents
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Refresh
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def refresh (quest = nil)
contents.clear
return if quest == nil
# Draw the name of the Quest, centred
contents.font.color = normal_color
contents.draw_text (0, 0, contents.width, WLH, quest.name, 1)
# If the font has set width characters
if contents.text_size ('w').width == contents.text_size ('i').width
formatter = Paragrapher::Formatter_2.new
else
formatter = Paragrapher::Formatter.new
end
# Format the description
desc_bitmap = Bitmap.new (contents.width - 16, (2.4*WLH).to_i)
desc_bitmap.font.size -= 4
formatted_desc = formatter.format (quest.description, desc_bitmap)
# Draw the Description Box
box_height = [WLH*(formatted_desc.lines.size + 1), 3*WLH].min
rect = Rect.new (2, (1.5*WLH).to_i, contents.width - 4, box_height)
contents.fill_rounded_rect (rect, system_color, 10)
rect.x, rect.y = rect.x + 2, rect.y + 2
rect.width, rect.height = rect.width - 4, rect.height - 4
contents.fill_rounded_rect (rect, Color.new (0, 0, 0, 0), 10)
tw = contents.text_size ('Description').width
# Draw the description signifier
contents.fill_rect (32, (1.5*WLH).to_i, tw + 2, 2, Color.new (0, 0, 0, 0))
contents.font.color = system_color
contents.draw_text (33, WLH, tw, WLH, 'Description')
# Paragraph Artist
artist = Paragrapher::Artist.new
# If bitmap is too large
if formatted_desc.lines.size < 2
formatted_desc.bitmap = Bitmap.new (contents.width - 16, formatted_desc.lines.size*WLH)
formatted_desc.bitmap.font.size -= 4
end
bmp = artist.draw (formatted_desc)
# Centre within the box
y = rect.y + 4 + (rect.height - bmp.height) / 2
contents.blt (8, y, bmp, bmp.rect)
bmp.dispose
y = 2*WLH + rect.height + 4
# Draw Objectives Signifier Text
contents.font.color = system_color
tw = contents.text_size ('Objectives').width
contents.draw_text (32, y, tw, WLH, 'Objectives')
y += WLH
quest.revealed_objectives.each { |i|
# Get the correct color
contents.font.color = quest.complete_objectives.include? (i) ?
text_color (ModAlg_QuestData::COMPLETE_COLOUR) : quest.failed_objectives.include? (i) ?
text_color (ModAlg_QuestData::FAILED_COLOUR) : text_color (ModAlg_QuestData::ACTIVE_COLOUR)
# Get objective
objective = quest.objectives
# Draw Bullet
tw = contents.text_size (ModAlg_QuestData::BULLET_CHARACTER).width
x = 8
contents.draw_text (x, y, tw, WLH, ModAlg_QuestData::BULLET_CHARACTER)
x += tw + 4
# Format the objective
obj_bitmap = Bitmap.new (contents.width - x, 2*WLH)
obj_bitmap.font = contents.font
obj_bitmap.font.size -= 4
formatted_obj = formatter.format (objective, obj_bitmap)
# Draw Objective
bmp = artist.draw (formatted_obj)
contents.blt (x, y + 4, bmp, bmp.rect)
# Modify the Y accordingly
y += WLH*([formatted_obj.lines.size, 2].min)
}
end
end
#==============================================================================
# ** Scene_Map
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Summary of Changes:
# aliased method - update
#==============================================================================
class Scene_Map < Scene_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Frame Update
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_quest_journal_map_upd_key_access update
def update
modalg_quest_journal_map_upd_key_access
# If the quest log can be accessed by key and is not empty or disabled
if $game_system.quest_keyaccess && !$game_system.quest_disabled && !$game_party.quests.list.empty?
$scene = Scene_Quest.new if Input.trigger? (ModAlg_QuestData::MAPKEY_BUTTON)
end
end
end
#==============================================================================
# ** Scene_Menu
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Summary of Changes:
# aliased methods - initialize, create_command_window, update_command_selection
#==============================================================================
class Scene_Menu < Scene_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
# menu_index : command cursor's initial position
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_quest_jrnl_init initialize
def initialize(menu_index = 0)
modalg_quest_jrnl_init (menu_index)
return unless $game_system.quest_menuaccess
if @menu_index == 'Quest'
@menu_index = ModAlg_QuestData::MENU_INDEX
elsif @menu_index >= ModAlg_QuestData::MENU_INDEX
@menu_index += 1
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Create Command Window
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_quest_journal_menu_cmmnd_win_create create_command_window
def create_command_window
modalg_quest_journal_menu_cmmnd_win_create
# If accessed through map, then don't add it to the menu
return unless $game_system.quest_menuaccess
c = @command_window.commands
c.insert (ModAlg_QuestData::MENU_INDEX, ModAlg_QuestData::QUESTS_LABEL)
width = @command_window.width
disabled = @command_window.disabled_commands
@command_window.dispose
@command_window = Window_Command.new(width, c)
@command_window.index = @menu_index
# Disable all of the old commands as well
disabled.each { |i|
i += 1 if i >= ModAlg_QuestData::MENU_INDEX
@command_window.draw_item (i, false)
}
if $game_system.quest_disabled || $game_party.quests.list.empty? # If Quest Journal disabled
@command_window.draw_item (ModAlg_QuestData::MENU_INDEX, false)
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Update Command Selection
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_quest_journal_menu_cmmnd_select_upd update_command_selection
def update_command_selection
if $game_system.quest_menuaccess
changed = false
if @command_window.index == ModAlg_QuestData::MENU_INDEX && Input.trigger? (Input::C)
if $game_system.quest_disabled || $game_party.quests.list.empty? # If Quest Journal disabled
Sound.play_buzzer
else
# Open Quest Window
Sound.play_decision
$scene = Scene_Quest.new
end
return
end
# If the command index is greater than it ought to be, make sure
if @command_window.index > ModAlg_QuestData::MENU_INDEX
@command_window.index = (@command_window.index - 1) % @command_window.commands.size
changed = true
end
end
modalg_quest_journal_menu_cmmnd_select_upd
return unless $game_system.quest_menuaccess
@command_window.index = (@command_window.index + 1) % @command_window.commands.size if changed
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Update Actor Selection
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_quest_jrnl_actor_selection_upd update_actor_selection
def update_actor_selection
changed = false
if $game_system.quest_menuaccess && @command_window.index > ModAlg_QuestData::MENU_INDEX
@command_window.index = (@command_window.index - 1) % @command_window.commands.size
changed = true
end
modalg_quest_jrnl_actor_selection_upd
return unless $game_system.quest_menuaccess
@command_window.index = (@command_window.index + 1) % @command_window.commands.size if changed
end
end
#==============================================================================
# ** Scene_Quest
#------------------------------------------------------------------------------
# This class performs the quest screen processing.
#==============================================================================
class Scene_Quest < Scene_Base
#--------------------------------------------------------------------------
# * Object Initialization
# menu_index : command cursor's initial position
#--------------------------------------------------------------------------
def initialize(category_index = 0, quest_index = 0)
@category_index = category_index
@quest_index = quest_index
end
#--------------------------------------------------------------------------
# * Start processing
#--------------------------------------------------------------------------
def start
super
create_menu_background
# Create Windows
@label_window = Window_QuestLabel.new
@category_window = Window_QuestCategory.new
@category_window.refresh (@category_index)
@list_window = Window_QuestList.new (@category_index, @quest_index)
@info_window = Window_QuestInfo.new
@info_window.refresh (@list_window.quest)
@help_window = Window_VarySizeHelp.new
@help_window.y = Graphics.height - @help_window.height
@help_window.set_text ('Use Horizontal Arrow Keys to change categories', 1)
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
@label_window.dispose
@category_window.dispose
@list_window.dispose
@info_window.dispose
@help_window.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
update_menu_background
# Since the only possible activity is from @list_window, put it here
@list_window.update
if Input.trigger?(Input::cool.gif # If Button B is pressed
Sound.play_cancel
# If Returning to Menu
if $game_system.quest_menuaccess
$scene = Scene_Menu.new ('Quest')
else # Returning to Map
$scene = Scene_Map.new
end
elsif Input.trigger? (Input::C) # If C button is pressed
# Open Journal (eventually)
elsif Input.trigger? (Input::LEFT) # If Left direction pressed
# Play Cursor SE
Sound.play_cursor
# Refresh Category Window
@category_index = (@category_index - 1) % 4
@category_window.refresh (@category_index)
@list_window.refresh (@category_index)
@info_window.refresh (@list_window.quest)
elsif Input.trigger? (Input::RIGHT) # If Right direction pressed
# Play Cursor SE
Sound.play_cursor
# Refresh Category Window
@category_index = (@category_index + 1) % 4
@category_window.refresh (@category_index)
@list_window.refresh (@category_index)
@info_window.refresh (@list_window.quest)
# If scrolling through quests
elsif Input.trigger? (Input::DOWN) || Input.trigger? (Input::UP)
# Refresh Info Window
@info_window.refresh (@list_window.quest)
end
end
end
http://files.nireblog.com/blogs4/narutozorro9kolas/files/firma-naruto-y-yondaime.gif
Link to comment
Share on other sites
4 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now