Status
Not open for further replies.
Joined
Apr 17, 2013
Messages
135
Reaction score
7
First Language
English
Primarily Uses
N/A
Hi, I need a small modification for my Kilozappit script. I do want it working for my other scripts (Venka's Bestiary, Vlue's Quest System, MoonlessNight's AMN Glossary), but I do not want it working for regular dialogues, as it does not take into account various other scripts I'm using, and it's f@cking up the sentence structures as a result.

Can anyone help?

For reference:
-Venka's Bestiary
-Vlue's Quest System:
Code:
#Basic Quest System v1.3f
#By Vlue
#----------#
#Features: Quests! What more can you say.
#
#Usage:   Set up your quests and away you go!
#        Script calls:
#         accept_quest(:questid)     - force quest accept
#         ask_accept(:questid)       - open quest acceptance window
#         abandon_quest(:questid)    - force quest abandon
#         turnin_quest(:questid)     - force quest turnin
#         fail_quest(:questid)       - force abandon with ME
#         ask_turnin(:questid)       - open quest complete window
#
#       adv_obj(:questid, :objectiveid, value)   - changes obj by value
#       set_obj(:questid, :objectiveid, value)   - sets obj to value
#       obj(:questid, :objectiveid)              - gets obj value
#       hide_obj(:questid, :objectiveid)         - hides objective
#       show_obj(:questid, :objectiveid)         - shows objective
#
#     $game_quests[:questid].accepted?     - true if quest is accepted
#     $game_quests[:questid].completed?    - true if quest is completed
#     $game_quests[:questid].turned_in?     - true if quest is turned in
#
# Examples:
#  The obj function can be used in conditional branches to check progress
#   of certain objectives. Example.
#    #Checking if :obj3 of :quest89 is greater than 3:
#     obj(:quest89, :obj3) > 3
#
#~ #----------#
#-- Script by: V.M of D.T
#
#- Questions or comments can be:
#    given by email: sumptuaryspade@live.ca
#    provided on facebook: http://www.facebook.com/DaimoniousTailsGames
#   All my other scripts and projects can be found here: http://daimonioustails.weebly.com/
#
#--- Free to use in any project, commercial or non-commercial, with credit given
# - - Though a donation's always a nice way to say thank you~ (I also accept actual thank you's)
 
#Visibility of quest log on map
$questlogvisibility = false
#Maximum # of quests displayed on the quest log overlay
$questlogmaxdisplay = 2
#Quest log position, 1 - top-left, 2 - top-right
QUEST_LOG_POSITION = 2
#Quest log offsets
QUEST_LOG_OFFSET_X = 0
QUEST_LOG_OFFSET_Y = 0
 
# Quest Format and set up!
 
# DETAILS[:quest_id] = {
#   :name => "quest name"     #Quest name
#   :level => value           #Arbitrary value (Optional)
#   :difficulty => "string"   #Arbitrary string (Optional)
#   :auto_complete => true    #Recieve rewards on the spot (Optional)
#   :abandonable => false     #Set's whether quest can be abandoned (Optional)
#   :force_accept => true     #ask_accept only allows accepting (Optional)
#   :force_turnin => true     #ask_turnin only allows completing (Optional)
#  }
# DESCRIPTIONS[:quest_id] = {
#   :qgiver_name => "string"  #Quest giver name (shows in log) (Optional)
#   :location => "string"     #Quest giver location (shows in log) (Optional)
#   :desc => "string"         #Description of quest displayed in log (Optional)
#  }
# OBJECTIVES[:quest_id] = {   #Quest objectives, "string" is name, id is max value
#                             #   boolean is hidden objective (true for hidden)
#   :obj_id1 => ["string", id]
#   :obj_id2 => ["string", id, boolean],
#   etc...
#  }
# REWARDS[:quest_id] = {
#   :gold => value            #Gold recieved from quest (Optional)
#   :exp => value             #Exp recieved from quest (Optional)
#         #Items recieved from quest, :type is :item, :weapon, or :armor
#   :scale_exp => value       #Percent value to scale exp based on level vs party
#   :items => [[:type,id,value], ...]],    (Optional)
#  }
 
module QUEST
  DETAILS= {}
  DESCRIPTIONS = {}
  OBJECTIVES = {}
  REWARDS = {}
 
  #Broken Reality
  DETAILS[:quest1] = {
    :name => "Broken Reality",}
  DESCRIPTIONS[:quest1] = {
    :desc => "A deity known as 'Mother' wants me to find some 'Truth' about the world of Psema. The 'Regulators', also known as 'The Trinity', Gods of Psema, want me to stay put. Both claim to have my best interests in mind, and say that the other is lying. I fear I am the unluckiest person in Psema." }
  OBJECTIVES[:quest1] = {
    :obj1 => ["Explore Psema",0],
    :obj2 => ["I found Hana, Mother's chosen.",1,true],
    :obj3 => ["We recruited a werewolf, Gouki.",1,true],
    :obj4 => ["We recruited a magus, Hachi.",1,true] }
    REWARDS[:quest1] = {}
    
  #Mother's Will
  DETAILS[:quest2] = {
    :name => "Mother's Will",}
  DESCRIPTIONS[:quest2] = {
    :desc => "Mother has told Hana that we need to travel to a city called 'Theodoxa'. There, the next part of her plan will be revealed. I will lead Hana there, but..." }
  OBJECTIVES[:quest2] = {
    :obj1 => ["Travel to Kronos from the Docks and recruit a man there",1]}
    REWARDS[:quest2] = {
    :exp => 10000 }
 
  #Floor 3 Church Side Quest
  DETAILS[:sidequest001] = {
    :name => "Abandoned Faith"}
  DESCRIPTIONS[:sidequest001] = {
    :qgiver_name => "Trinity Priest",
    :location => "Blackcry",
    :desc => "The Trinity priest of Blackcry was chased out of his church by the dark elves, leaving behind his silver cross of the Trinity. He wants it back." }
  OBJECTIVES[:sidequest001] = {
    :obj1 => ["Silver Cross", 1] }
  REWARDS[:sidequest001] = {
    :exp => 250 }
    
  #Floor 1 Wolf Perk Side Quest
  DETAILS[:sidequest002] = {
    :name => "Howl of the Wolf"}
  DESCRIPTIONS[:sidequest002] = {
    :qgiver_name => "Tibian",
    :location => "Illfang's Forest",
    :desc => "A group of ruffians hunt wolves for sport. Tibian wants me to stop them. I can find them in Mermaid's Song, in ToB." }
  OBJECTIVES[:sidequest002] = {
    :obj1 => ["Hunters dispatched", 3],
    :obj2 => ["Report back to Tibian",1,true]}
  REWARDS[:sidequest002] = {
    :exp => 300 }
    
  #Floor 1 Kobold Side Quest
  DETAILS[:sidequest003] = {
    :name => "The Kobold Cousins"}
  DESCRIPTIONS[:sidequest003] = {
    :qgiver_name => "Kobold Guard",
    :location => "Town of Beginnings",
    :desc => "The kobold guarding the entrance to Illfang's Tower wants me to find out what happened to his cousin, Vagabond. He should be in Illfang's Forest, in some cave." }
  OBJECTIVES[:sidequest003] = {
    :obj1 => ["Find Vagabond", 1],
    :obj2 => ["Learn cousin's name", 1],
    :obj3 => ["Report back to cousin", 1]}
  REWARDS[:sidequest003] = {
    :exp => 180 }
    
    #Floor 1 Docks Scorpion Skin Quest
  DETAILS[:sidequest004] = {
    :name => "Missing Ingredient"}
  DESCRIPTIONS[:sidequest004] = {
    :qgiver_name => "Magus at docks",
    :location => "Town of Beginnings Docks",
    :desc => "A masked man in the docks is looking for his lost ingredient for alchemy, scorpion skin. It is located somewhere in the docks." }
  OBJECTIVES[:sidequest004] = {
    :obj1 => ["Find the scorpion skin", 1],
    :obj2 => ["Return to the magus", 0, true]}
  REWARDS[:sidequest004] = {
    :exp => 30 }
    
  #Floor 1 Hiding Grandson
  DETAILS[:sidequest005] = {
    :name => "Brat Trackdown"}
  DESCRIPTIONS[:sidequest005] = {
    :qgiver_name => "Elderly Man",
    :location => "Palace Plaza, ToB",
    :desc => "An old man's grandson has ran off. I should ask the children where to find him." }
  OBJECTIVES[:sidequest005] = {
    :obj1 => ["Locate the brat", 1],
    :obj2 => ["Return to the elder", 0, true]}
  REWARDS[:sidequest005] = {
    :exp => 50 }
    
  #Floor 1 Wine Cellar Rats
  DETAILS[:sidequest006] = {
    :name => "Rat Infestation"}
  DESCRIPTIONS[:sidequest006] = {
    :qgiver_name => "Liquor Store Owner",
    :location => "Southeast Sector, ToB",
    :desc => "The basement of the liquor store is infested with rats. I need to kill them all." }
  OBJECTIVES[:sidequest006] = {
    :obj1 => ["Rats killed", 4]}
  REWARDS[:sidequest006] = {
    :exp => 110 }
 
  #Floor 1 Hunter 1 - Doug
  DETAILS[:sidequest007] = {
    :name => "A Punchable Offense"}
  DESCRIPTIONS[:sidequest007] = {
    :qgiver_name => "Doug",
    :location => "Mermaid's Song, ToB",
    :desc => "Doug Ironsword is one of the three hunter ruffians in Mermaid's Song." }
  OBJECTIVES[:sidequest007] = {
    :obj1 => ["Dig some dirt on Doug", 1],
    :obj2 => ["Find mr. Ironsword", 1, true],
    :obj3 => ["Go back to Doug", 1, true]}
  REWARDS[:sidequest007] = {
    :exp => 100 }
    
  #Floor 1 Hunter 1 - Doug Alternative
  DETAILS[:sidequest008] = {
    :name => "A Highly Punchable Offense"}
  DESCRIPTIONS[:sidequest008] = {
    :qgiver_name => "Vickie",
    :location => "Ironsword Mansion",
    :desc => "Vickie wants me to ambush Doug near the Drunk Dragon and mug him. This is an alternative way to stop the hunter." }
  OBJECTIVES[:sidequest008] = {
    :obj1 => ["Beat up Doug", 1]}
  REWARDS[:sidequest008] = {
    :exp => 130 }
 
  #Floor 2 Baby Wyrms
  DETAILS[:sidequest009] = {
    :name => "Sheep Snap"}
  DESCRIPTIONS[:sidequest009] = {
    :qgiver_name => "Farmer Timberson",
    :location => "Urbus Provinces",
    :desc => "Farmer Timberson wants me to find and eradicate the baby wyrms that plague his sheep." }
  OBJECTIVES[:sidequest009] = {
    :obj1 => ["Baby wyrms killed", 6]}
  REWARDS[:sidequest009] = {
    :exp => 400 }
    
  #Floor 1 Hunter 3 - Music option
  DETAILS[:sidequest010] = {
    :name => "The Aspiring Musician"}
  DESCRIPTIONS[:sidequest010] = {
    :qgiver_name => "Hunter",
    :location => "Mermaid's Song, ToB",
    :desc => "The sophisticated hunter wants to learn music. Perhaps if I could find a bard near the ToB..." }
  OBJECTIVES[:sidequest010] = {
    :obj1 => ["Find a bard", 1],
    :obj2 => ["Report back to the hunter", 1, true]}
  REWARDS[:sidequest010] = {
    :exp => 100 }
    
  #Floor 1 Hunter 3 - Rude Hunter
  DETAILS[:sidequest011] = {
    :name => "Enemy of my Enemy"}
  DESCRIPTIONS[:sidequest011] = {
    :qgiver_name => "Hunter",
    :location => "Mermaid's Song, ToB",
    :desc => "The sophisticated hunter wants to learn music. Perhaps if I could find a bard near the ToB..." }
  OBJECTIVES[:sidequest011] = {
    :obj1 => ["Ask the wench", 1],
    :obj2 => ["Find Sally", 1, true],
    :obj3 => ["Visit the Drunk Dragon", 1, true],
    :obj4 => ["Return to Rhys", 1, true]}
  REWARDS[:sidequest011] = {
    :exp => 100 }
    
  #Floor 1 Church Side Quest
  DETAILS[:sidequest012] = {
    :name => "Mother's Necklace"}
  DESCRIPTIONS[:sidequest012] = {
    :qgiver_name => "Nancy",
    :location => "Church Grounds, ToB",
    :desc => "One of the orphanage girls south of the Town of Beginnings is missing her mother's memento. She suspects someone has stolen it from her." }
  OBJECTIVES[:sidequest012] = {
    :obj1 => ["Talk with Enver", 1],
    :obj2 => ["Talk with Flare", 1, true],
    :obj3 => ["Return to Nancy", 1, true]}
  REWARDS[:sidequest012] = {
    :exp => 60 }
    
  #Floor 1 Church Side Quest #2
  DETAILS[:sidequest013] = {
    :name => "Enlightment in a Bottle"}
  DESCRIPTIONS[:sidequest013] = {
    :qgiver_name => "Sister Rafa",
    :location => "Orphanage",
    :desc => "Sister Rafa, one of the orphans' caretakers is wasted. She accidentally drank the sacramental wine and now needs to replace it." }
  OBJECTIVES[:sidequest013] = {
    :obj1 => ["Give her red wine", 1],
    :obj2 => ["Give her more red wine", 1, true],
    :obj3 => ["Give her sake", 1, true]}
  REWARDS[:sidequest013] = {
    :exp => 100 }
    
  #Floor 10 Wines
  DETAILS[:sidequest014] = {
    :name => "Poor of Spirits"}
  DESCRIPTIONS[:sidequest014] = {
    :qgiver_name => "Troubled Man",
    :location => "Castle of Thousand Snakes",
    :desc => "A guard in the central area of the castle was assigned to guard a wine shipment, but thieves got away with it while he was busy. He has begged you to help him find it. He said it should be in the southern part of the castle." }
  OBJECTIVES[:sidequest014] = {
    :obj1 => ["Locate the wine shipment", 1],
    :obj2 => ["Return to the soldier", 1, true]}
  REWARDS[:sidequest014] = {
    :exp => 600 }
    
  #Floor 1 Tomb Permit
  DETAILS[:sidequest015] = {
    :name => "Hikari's Permit"}
  DESCRIPTIONS[:sidequest015] = {
    :qgiver_name => "Guard",
    :location => "Town of Beginnings",
    :desc => "South of the Town of Beginnings lies the great dragon Hikari's tomb. The guard there won't let me get close without an official permit. I will have to find someone with authority in the Town of Beginnings to grant it to me." }
  OBJECTIVES[:sidequest015] = {
    :obj1 => ["Find someone who can give a permit", 1],
    :obj2 => ["Get the permit", 1, true],
    :obj3 => ["Return to the soldier", 1, true]}
  REWARDS[:sidequest015] = {
    :exp => 140 }
    
  #Kaliska Mission
  DETAILS[:sidequest016] = {
    :name => "Into the Jungle"}
  DESCRIPTIONS[:sidequest016] = {
    :qgiver_name => "Kaliska",
    :location => "Tlanextic",
    :desc => "Demons are setting up camp in the archipelago of Tlanextic. Me and Kaliska are to find out why and resolve the situation before the locals do something everyone will regret. We should start by finding the tribe's magi and befriending them." }
  OBJECTIVES[:sidequest016] = {
    :obj1 => ["Get to Ichtaca", 1],
    :obj2 => ["Explore the Pyramid of Knowledge", 1, true],
    :obj3 => ["Return to the soldier", 1, true]}
  REWARDS[:sidequest016] = {
    :exp => 5000 }
    
  #Floor 8 Leona Weapons Quest
  DETAILS[:sidequest017] = {
    :name => "Demon Infestation"}
  DESCRIPTIONS[:sidequest017] = {
    :qgiver_name => "Leona",
    :location => "the Bloody Drake, Imperia",
    :desc => "A woman called Leona is leading the people of Imperia to revolution, against king Ezalor and queen Oracia, seeking to reestablish the kingdom of Petros. For that, she needs arms. You need to head to the barracks of Oracle Village, and clear it of the demons who have infested it." }
  OBJECTIVES[:sidequest017] = {
    :obj1 => ["Reach the Barracks of Oracle Village", 1],
    :obj2 => ["Kill the Demons", 1, true],
    :obj3 => ["Return to Leona", 1, true]}
  REWARDS[:sidequest017] = {
    :exp => 700 }
    
  #Floor 1 Grandma Brother
  DETAILS[:sidequest018] = {
    :name => "Horunka Village"}
  DESCRIPTIONS[:sidequest018] = {
    :qgiver_name => "Farmer's Wife",
    :location => "Illfang's Forest",
    :desc => "A middle-aged woman at the edges of Illfang's Forest wants me to find her brother and see if he is alright. According to her, he should be working on his little farm in Horunka Village, in Illfang's Forest." }
  OBJECTIVES[:sidequest018] = {
    :obj1 => ["Find the Brother", 1],
    :obj2 => ["Return to the Farmer's Wife", 1, true]}
  REWARDS[:sidequest018] = {
    :exp => 110 }
    
   #Floor 5 Cult of the Damned
  DETAILS[:sidequest019] = {
    :name => "Trapped Spirits"}
  DESCRIPTIONS[:sidequest019] = {
    :qgiver_name => "Spectre of Jafaan Abdallah",
    :location => "Nameless Tomb, East of Asari",
    :desc => "I met the ghost of a Trinity priest, cursed by the ancient Cult of the Damned which they defeated to die, and then have the spirit bound to the corpse. He wants me to find two orb artifacts, so that he may break the curse and let himself and his followers go to the afterlife." }
  OBJECTIVES[:sidequest019] = {
    :obj1 => ["Visit the Asari Temple archives", 1],
    :obj2 => ["Orb of Igbagbo in the north tomb", 1, true],
    :obj3 => ["Orb of Ina in Jafaan's House in East Asari", 1, true],
    :obj4 => ["Obtain the key from the barracks", 1, true],
    :obj5 => ["Return to the spectre", 1, true]}
  REWARDS[:sidequest019] = {
    :exp => 1500 }   
    
  #Floor 1 House Maid
  DETAILS[:sidequest020] = {
    :name => "Maid in Order"}
  DESCRIPTIONS[:sidequest020] = {
    :qgiver_name => "ToB Home",
    :location => "Town of Beginnings",
    :desc => "You've got yourself a nice, large house, now if only you had someone to look after it while you're out adventuring... There should be some poor lass in the city looking for work." }
  OBJECTIVES[:sidequest020] = {
    :obj1 => ["Find a maid for your ToB house", 1]}
  REWARDS[:sidequest020] = {
    :exp => 450 }   
    
  #Floor 1 Spectre Quest
  DETAILS[:sidequest021] = {
    :name => "Nothing but Silence"}
  DESCRIPTIONS[:sidequest021] = {
    :qgiver_name => "River Spectre",
    :location => "Southern Paths",
    :desc => "The spectre by the river south of the Town of Beginnings is dissatisfied with the insistent barkings of the nearby dog when a bear comes to steal the crops. It wants its silence from before the bear showed up to return." }
  OBJECTIVES[:sidequest021] = {
    :obj1 => ["Keep the dog from barking", 1],
    :obj2 => ["Return to the spectre", 1, true]}
  REWARDS[:sidequest021] = {
    :exp => 100 }   
    
  #Floor 1 Illfang
  DETAILS[:sidequest022] = {
    :name => "Kobold Invasion"}
  DESCRIPTIONS[:sidequest022] = {
    :qgiver_name => "Personal",
    :location => "Tolbana",
    :desc => "The kobolds near Tolbana are setting up ambushes for weary travellers and ganging up on adventurers, under the commands of a mysterious master. Dealing with them will make travelling safe, and give me some Yudah recognition." }
  OBJECTIVES[:sidequest022] = {
    :obj1 => ["Deal with the kobold problem", 1]}
  REWARDS[:sidequest022] = {
    :exp => 150 }   
    
  #Floor 2 N'Gombe
  DETAILS[:sidequest023] = {
    :name => "Minotaur Raiders"}
  DESCRIPTIONS[:sidequest023] = {
    :qgiver_name => "Personal",
    :location => "Urbus Mountains",
    :desc => "Minotaurs attack travellers near Urbus indiscriminately. The beasts are strong, but not too bright, and rarely work on their own. They must have a leader somewhere near Urbus. Dealing with him will give me more Yudah recognition." }
  OBJECTIVES[:sidequest023] = {
    :obj1 => ["Deal with the minotaurs", 1]}
  REWARDS[:sidequest023] = {
    :exp => 150 }   
    
  #Floor 1-2 Mute Soldier
  DETAILS[:sidequest024] = {
    :name => "Oath of Silence"}
  DESCRIPTIONS[:sidequest024] = {
    :qgiver_name => "Silent Soldier",
    :location => "Tolbana to Urbus Path",
    :desc => "In the outpost on the road from Tolbana to Urbus, I found a soldier who seems incapable of speech for some reason. Perhaps if I helped him, my reputation with Yudah's military would improve." }
  OBJECTIVES[:sidequest024] = {
    :obj1 => ["Ask the other soldier for details.", 1],
    :obj2 => ["Ask around in a Yudah Barracks", 1, true],
    :obj3 => ["Ask about Irvin at the Urbus Inn", 1, true],
    :obj4 => ["Find Irvin's on the road to Urbus", 1, true],
    :obj5 => ["Return to Reuel", 1, true],}
  REWARDS[:sidequest024] = {
    :exp => 190 }   
    
  #Floor 1-2 Mute Soldier
  DETAILS[:sidequest025] = {
    :name => "Signet Ring"}
  DESCRIPTIONS[:sidequest025] = {
    :qgiver_name => "Kobold's Lavatory Patron",
    :location => "ToB East Sewers",
    :desc => "A wealthy figure in Kobold's Lavatory sent an adventurer named Howard on a quest to find a signet ring, in an easter section of the Town of Beginnings' sewers. I am to find him and report back." }
  OBJECTIVES[:sidequest025] = {
    :obj1 => ["Find Howard or the Signet Ring.", 1],
    :obj2 => ["Return to Kobold's Lavatory", 1, true]}
  REWARDS[:sidequest025] = {
    :exp => 350 }
    
 #Floor 2 Testosterone Drug
  DETAILS[:sidequest026] = {
    :name => "Testosterone in a Bottle"}
  DESCRIPTIONS[:sidequest026] = {
    :qgiver_name => "Lucy",
    :location => "Imperia Academia",
    :desc => "Three lasses in Imperia Academia requested ingredients from me to create a new kind of strength potion. I will need: A regular strength potion, hornet honey and Minotaur Horn Dust." }
  OBJECTIVES[:sidequest026] = {
    :obj1 => ["Deliver the items to Lucy", 1]}
  REWARDS[:sidequest026] = {
    :exp => 200 }
    
  #Floor 1 Corpses Missing
  DETAILS[:sidequest027] = {
    :name => "No Eternal Rest in Yudah"}
  DESCRIPTIONS[:sidequest027] = {
    :qgiver_name => "Widow",
    :location => "Dragontooth",
    :desc => "A man in Dragontooth sold his corpse to Yudah's Healers' Union. His grieving wife wants it back, but the Union refuses to resell it. Can bureaucracy really be so cruel, or are there sinister purposes here?" }
  OBJECTIVES[:sidequest027] = {
    :obj1 => ["Speak with the Corpse Buyer", 1],
    :obj2 => ["Speak with Dragontooth's Gravekeeper", 1],
    :obj3 => ["Ask denizens of Yudah's underworld about the corpses.", 1]}
  REWARDS[:sidequest027] = {
    :exp => 800 }
    
  #Floor 3 Hana Outfit
  DETAILS[:sidequest028] = {
    :name => "Lady Wendigo"}
  DESCRIPTIONS[:sidequest028] = {
    :qgiver_name => "Raggs",
    :location => "Raggs'es Camp",
    :desc => "The vile kobold boneworker, who you met in Illfang's mines, has promised to make a new outfit for Hana, for free. He just needs the materials to do it." }
  OBJECTIVES[:sidequest028] = {
    :obj1 => ["Kill the Demon Bat skin", 1],
    :obj2 => ["Find the mistweaver diagrams", 1]}
  REWARDS[:sidequest028] = {
    :exp => 300 }
    
  #Floor 4 Troll Toll
  DETAILS[:sidequest029] = {
    :name => "Troll Toll"}
  DESCRIPTIONS[:sidequest029] = {
    :qgiver_name => "Rhetor",
    :location => "Beach Southwest of Kronos",
    :desc => "The magus owning the beach worries about the future of his schemes due to the presence of the troll. He wants it cease its tolls on the passangers, and will pay handsomely for it." }
  OBJECTIVES[:sidequest029] = {
    :obj1 => ["Rid the beach of the troll", 1]}
  REWARDS[:sidequest029] = {
    :exp => 250 }
    
end
 
class Game_Quests
  attr_accessor :reset_hash
  def initialize
    @quests = {}
    QUEST::DETAILS.each do |id, quest|
      @quests[id] = Quest.new(id,quest)
    end
    @reset_hash = {}
    @quests.each_value do |quest|
      @reset_hash[quest.id] = {}
      @reset_hash[quest.id][:accepted] = true
      @reset_hash[quest.id][:turnedin] = true
      quest.objectives.each do |id, obj|
        @reset_hash[quest.id][id] = obj
      end
    end
  end
  def check_quests
    @quests.each do |id, quest|
      if !$game_party.quests[id]
        $game_party.quests[id] = {}
        quest.reset
      end
    end
  end
  def [](quest_id)
    return msgbox("No Quest with id " + quest_id.to_s) if @quests[quest_id].nil?
    @quests[quest_id]
  end
  def []=(quest_id, val)
    @quests[quest_id] = val
  end
  def quests
    @quests
  end
  def no_quests?
    @quests.each do |id, quest|
      return false if quest.accepted? && !quest.turned_in
    end
    return true
  end
  def tracking?
    $game_party.tracking
  end
  def track_quest(id)
    return if $game_party.tracking.include?(id)
    $game_party.tracking.push(id)
    if $game_party.tracking.size > $questlogmaxdisplay = 5
      $game_party.tracking.reverse!.pop
      $game_party.tracking.reverse!
    end
  end
  def untrack_quest(id)
    return unless $game_party.tracking.include?(id)
    $game_party.tracking.delete(id)
    $game_party.tracking.compact!
  end
end
 
class Quest
  attr_accessor :name
  attr_accessor :level
  attr_accessor :id
  attr_accessor :desc
  attr_accessor :objectives
  attr_accessor :turned_in
  attr_accessor :difficulty
  attr_accessor :qgiver_name
  attr_accessor :location
  attr_accessor :auto_complete
  attr_accessor :abandonable
  attr_accessor :force_accept
  attr_accessor :force_turnin
  def initialize(id,quest_hash)
    @id = id
    @level = 0
    @difficulty = 0
    @name = "No Quest Name"
    @desc = ""
    @qgiver_name = 0
    @location = 0
    @auto_complete = false
    @abandonable = true
    @need_popup = false
    @force_turnin = false
    @force_accept = false
    @name = quest_hash[:name] if quest_hash[:name]
    @level = quest_hash[:level] if quest_hash[:level]
    @force_accept = quest_hash[:force_accept] if quest_hash[:force_accept]
    @force_turnin = quest_hash[:force_turnin] if quest_hash[:force_turnin]
    @difficulty = quest_hash[:difficulty] if quest_hash[:difficulty]
    @auto_complete = quest_hash[:auto_complete] if quest_hash[:auto_complete]
    @abandonable = quest_hash[:abandonable] if !quest_hash[:abandonable].nil?
    @desc = QUEST::DESCRIPTIONS[id][:desc] if QUEST::DESCRIPTIONS[id][:desc]
    @qgiver_name = QUEST::DESCRIPTIONS[id][:qgiver_name] if QUEST::DESCRIPTIONS[id][:qgiver_name]
    @location = QUEST::DESCRIPTIONS[id][:location] if QUEST::DESCRIPTIONS[id][:location]
    @objectives = {}
    if QUEST::OBJECTIVES[id]
      QUEST::OBJECTIVES[id].each do |id, obj|
        @objectives[id] = Objective.new(id, obj)
      end
    else
      msgbox("Quest " + id.to_s + " has no objectives.")
    end
    @reward_gold = 0
    @reward_exp = 0
    @scale_exp = 0
    @reward_items = []
    begin
      if QUEST::REWARDS[id][:gold]
        @reward_gold = QUEST::REWARDS[id][:gold]
      end
      if QUEST::REWARDS[id][:exp]
        @reward_exp = QUEST::REWARDS[id][:exp]
        @scale_exp = QUEST::REWARDS[id][:scale_exp] if QUEST::REWARDS[id][:scale_exp]
      end
      if QUEST::REWARDS[id][:items]
        @reward_items = QUEST::REWARDS[id][:items]
      end
    rescue
      msgbox(id.to_s + " has no defined REWARDS. This is not optional.")
    end
  end
  def accept
    reset
    $game_party.quests[id][:accepted] = true
    track_quest
    $game_map.need_refresh = true
    Audio.se_play("Audio/SE/Book2")
  end
  def abandon
    reset
    $game_party.quests[id][:accepted] = false
  end
  def fail
    Audio.me_play("Audio/SE/Pen")
    abandon
  end
  def accepted?
    $game_party.quests[id][:accepted]
  end
  def accepted
    accepted?
  end
  def completed?
    @objectives.each do |id, obj|
      return false if !$game_party.quests[@id][id].completed?
    end
    return true
  end
  def force_done
    $game_party.quests[id][:accepted] = true
    @objectives.each do |id, obj|
      $game_party.quests[@id][id].current = obj.max
    end
    turnin
  end
  def reset
    $game_party.quests[id][:accepted] = false
    @objectives.each do |id, obj|
      $game_party.quests[@id][id] = obj
      $game_party.quests[@id][id].current = 0
    end
    $game_party.quests[id][:turnedin] = false
  end
  def objective(id)
    return Objective.new(id, ["No Objective Found",0]) if @objectives[id].nil?
    $game_party.quests[@id][id]
  end
  def set_obj(id, value)
    objective(id).current = value
    @need_popup = false if !completed?
    popup if completed? && !@need_popup
    turnin if completed? && @auto_complete
    $game_map.need_refresh = true
  end
  def adv_obj(id, value)
    objective(id).current += value
    @need_popup = false if !completed?
    popup if completed? && !@need_popup
    turnin if completed? && @auto_complete
    $game_map.need_refresh = true
  end
  def reward_gold
    @reward_gold
  end
  def reward_exp
    get_mod_exp.to_i
  end
  def reward_items
    @reward_items
  end
  def turnin
    $game_party.quests[id][:turnedin] = true
    untrack_quest
    $game_map.need_refresh = true
    $game_party.gain_gold(@reward_gold)
    $game_party.members.each do |actor|
      actor.gain_exp(@reward_exp)
    end
    @reward_items.each do |array|
      item = $data_items[array[1]] if array[0] == :item
      item = $data_weapons[array[1]] if array[0] == :weapon
      item = $data_armors[array[1]] if array[0] == :armor
      $game_party.gain_item(item, array[2])
    end
  end
  def track_quest
    $game_quests.track_quest(@id)
  end
  def untrack_quest
    $game_quests.untrack_quest(@id)
  end
  def can_abandon?
    @abandonable
  end
  def popup
    @need_popup = true
    Audio.me_play("Audio/SE/Magic1")
    if Module.const_defined?(:Popup)
      Popup.add([@name + ' complete!'])
    end
  end
  def turned_in?
    $game_party.quests[id][:turnedin]
  end
  def turned_in
    turned_in?
  end
  def active?
    accepted? && !completed?
  end
  def get_mod_exp
    pval = @scale_exp * (@level - $game_party.highest_level).to_f / 100 + 1
    @reward_exp * pval
  end
end
 
class Objective
  attr_accessor :id
  attr_accessor :name
  attr_accessor :current
  attr_accessor :max
  attr_accessor :hidden
  def initialize(id, obj)
    @name = obj[0]
    @current = 0
    @max = obj[1]
    @hidden = obj[2] ? obj[2] : false
  end
  def completed?
    @current >= @max
  end
end
 
module DataManager
  class << self
    alias quest_cgo load_database
    alias quest_sng setup_new_game
  end
  def self.load_database
    quest_cgo
    $game_quests = Game_Quests.new
  end
  def self.setup_new_game
    $game_quests = Game_Quests.new
    quest_sng
  end
end
 
class Scene_Quest < Scene_MenuBase
  def start
    super
    @help_window = Window_Help.new(1)
    @help_window.set_text("Quest Log")
    @list_window = Window_SceneList.new
    @list_window.set_handler(:cancel, method(:list_cancel))
    #@list_window.set_handler(:ok, method(:list_ok))
    @list_window.refresh
    @list_window.activate
    @list_window.select(0)
    @detail_window = Window_SceneDetail.new
    @command_window = Window_QuestTrack.new
    @command_window.x = Graphics.width / 2 - @command_window.width / 2
    @command_window.y = Graphics.height / 2 - @command_window.height / 2
    @command_window.set_handler(:track, method(:track))
    @command_window.set_handler(:untrack, method(:untrack))
    @command_window.set_handler(:abandon, method(:abandon))
    @command_window.set_handler(:cancel, method(:command_cancel))
  end
  def update
    super
    @detail_window.quest = @list_window.current_item
  end
  def list_cancel
    SceneManager.return
  end
  def list_ok
    @command_window.quest(@list_window.current_item)
    @command_window.refresh
    @command_window.select(0)
    @command_window.activate
    @command_window.open
  end
  def track
    $game_quests.track_quest(@list_window.current_item.id)
    command_cancel
  end
  def untrack
    $game_quests.untrack_quest(@list_window.current_item.id)
    command_cancel
  end
  def abandon
    @list_window.current_item.abandon
    command_cancel
  end
  def command_cancel
    @command_window.close
    @list_window.refresh
    @list_window.activate
    list_cancel if $game_quests.no_quests?
  end
end
 
class Window_SceneList < Window_Selectable
  def initialize
    super(0,48,Graphics.width/5*2,Graphics.height-48)
    refresh
  end
  def make_item_list
    @data = []
    $game_quests.quests.each do |id, quest|
      @data.push(quest) if quest.accepted? && !quest.turned_in?
    end
    @data.push(nil) if @data.empty?
  end
  def draw_item(index)
    contents.font.size = 18
    item = @data[index]
    if item
      rect = item_rect(index)
      rect.width -= 4
      if $game_quests.tracking?.include?(item.id)
        text = "*" + item.name
      else
        text = item.name
      end
      draw_text(rect, text)
      draw_text(rect, "Lv" + item.level.to_s,2) if item.level > 0
    end
  end
  def col_max; 1; end
  def current_item
    @data[@index]
  end
  def current_item_enabled?
    true
  end
  def refresh
    make_item_list
    create_contents
    draw_all_items
  end
  def item_max
    @data ? @data.size : 0
  end
end
 
class Window_SceneDetail < Window_Base
  def initialize
    super(Graphics.width/5*2,48,Graphics.width-Graphics.width/5*2,Graphics.height-48)
  end
  def quest=(quest)
    return if @quest == quest
    @quest = quest
    refresh
  end
  def refresh
    contents.clear
    return unless @quest
    contents.font.size = 18
    change_color(system_color)
    draw_text(0,0,contents.width,line_height,@quest.qgiver_name) if @quest.qgiver_name != 0
    draw_text(0,0,contents.width,line_height,@quest.location,2) if @quest.location != 0
    change_color(normal_color)
    @quest.qgiver_name != 0 || @quest.location != 0 ? yy = line_height : yy = 0
    draw_text_ex(0,yy,@quest.desc)
    change_color(system_color)
    draw_text(0,line_height*7,contents.width,24,"Objectives:")
    change_color(normal_color)
    yy = line_height * 8
    @quest.objectives.each do |id, obj|
      next if obj.hidden
      draw_objective(yy, obj)
      yy += 24
    end
    change_color(system_color)
    draw_text(0,yy,contents.width,line_height,"Rewards:")
    yy += line_height
    if @quest.reward_exp > 0
      draw_text(6,yy,contents.width/2,line_height,"XP: ")
      change_color(normal_color)
      draw_text(36,yy,contents.width/2,line_height,@quest.reward_exp)
      yy += line_height
    end
    if @quest.reward_gold > 0
      change_color(normal_color)
      draw_text(6,yy,contents.width/2,line_height,@quest.reward_gold.to_s)
      cx = text_size(@quest.reward_gold).width
      change_color(system_color)
      draw_text(6+cx,yy,contents.width/2,line_height,Vocab::currency_unit)
    end
    yy += line_height
    change_color(normal_color)
    @quest.reward_items.each do |array|
      item = $data_items[array[1]] if array[0] == :item
      item = $data_weapons[array[1]] if array[0] == :weapon
      item = $data_armors[array[1]] if array[0] == :armor
      draw_item_name(item, 6, yy, true, contents.width)
      if array[2] > 1
        draw_text(6+text_size(item.name).width+36,yy,48,24,"x"+array[2].to_s)
      end
      yy += line_height
    end
    if @quest.difficulty != 0
      text = "Difficulty: " + @quest.difficulty
      draw_text(0,contents.height-line_height,contents.width,line_height,text,2)
    end
  end
  def draw_objective(yy, obj)
    draw_text(6,yy,contents.width,24,obj.name)
    draw_text(0,yy,contents.width,24,obj.current.to_s+"/"+obj.max.to_s,2)
  end
  def reset_font_settings
    change_color(normal_color)
    contents.font.bold = Font.default_bold
    contents.font.italic = Font.default_italic
  end
end
 
class Window_QuestTrack < Window_Command
  def initialize
    super(0,0)
    self.openness = 0
  end
  def quest(quest)
    @quest = quest
  end
  def make_command_list
    return unless @quest
    if !$game_quests.tracking?.include?(@quest.id)
      #add_command("Track Quest", :track)
    else
      #add_command("Untrack Quest", :untrack)
    end
    #add_command("Abandon Quest", :abandon, @quest.can_abandon?)
  end
  def window_height
    fitting_height(2)
  end
end
 
class Window_MenuCommand
  alias quest_aoc add_original_commands
  def add_original_commands
    quest_aoc
    add_command("Quest Log", :quest, !$game_quests.no_quests?)
  end
end
 
class Scene_Menu
  alias quest_ccw create_command_window
  def create_command_window
    quest_ccw
    @command_window.set_handler(:quest,    method(:scene_quest))
  end
  def scene_quest
    SceneManager.call(Scene_Quest)
  end
end
 
class Scene_Map
  alias quest_start start
  alias quest_update update
  def start
    quest_start
    @quest_log = Window_QuestLog.new
    @quest_confirm = Window_QuestConfirm.new
    @quest_confirm.set_handler(:accept, method(:confirm_accept))
    @quest_confirm.set_handler(:decline, method(:confirm_cancel))
    @quest_confirm.set_handler(:cancel, method(:confirm_cancel))
    @quest_turnin = Window_QuestTurnin.new
    @quest_turnin.set_handler(:accept, method(:turnin_accept))
    @quest_turnin.set_handler(:decline, method(:confirm_cancel))
    @quest_turnin.set_handler(:cancel, method(:confirm_cancel))
    @quest_apply = Window_QuestApply.new(@quest_confirm,@quest_turnin)
  end
  def update(*args)
    @quest_log = Window_QuestLog.new if @quest_log.disposed?
    quest_update(*args)
  end
  def show_quest(id, turnin = false)
    @quest_apply.show($game_quests[id],turnin)
  end
  def accepting?
    @quest_confirm.active || @quest_turnin.active
  end
  def confirm_accept
    @quest_apply.accept
    @quest_apply.hide
  end
  def confirm_cancel
    @quest_apply.hide
  end
  def turnin_accept
    @quest_apply.turnin
    @quest_apply.hide
  end
  def update_call_menu
    if $game_system.menu_disabled || $game_map.interpreter.running? || accepting?
      @menu_calling = false
    else
      @menu_calling ||= Input.trigger?(:B)
      call_menu if @menu_calling && !$game_player.moving?
    end
  end
end
 
class Scene_Base
  def accepting?
    false
  end
end
 
class Window_QuestLog < Window_Base
  def initialize
    super(Graphics.width/5*3,0,Graphics.width/5*2,Graphics.height)
    self.x = 0 if QUEST_LOG_POSITION == 1
    self.x += QUEST_LOG_OFFSET_X
    self.y += QUEST_LOG_OFFSET_Y
    self.opacity = 0
    self.contents.font.size = 18
  end
  def update
    super
    return unless Graphics.frame_count % 20 == 0
    self.visible = $questlogvisibility
    return unless self.visible
    self.visible = !$game_quests.no_quests?
    self.visible = $game_quests.tracking?.size > 0
    return unless self.visible
    contents.clear
    change_color(crisis_color)
    draw_text(0,0,contents.width,18,"Quest Log:",1)
    yy = 18;iter = 0
    $game_quests.tracking?.each do |id|
      quest = $game_quests[id]
      next unless quest.accepted? && !quest.turned_in
      change_color(system_color)
      draw_text(6,yy,contents.width-6,18,quest.name)
      change_color(normal_color)
      yy += 18
      quest.objectives.each do |obj_id, obj|
        next if obj.hidden
        draw_objective(yy, $game_party.quests[id][obj_id])
        yy += 18
      end
      iter += 1
    end
  end
  def draw_objective(yy, obj)
    draw_text(0,yy,contents.width-24,18,obj.name)
    draw_text(0,yy,contents.width,18,obj.current.to_s+"/"+obj.max.to_s,2)
  end
end
  
class Window_QuestApply < Window_Base
  def initialize(confirm_window, turnin_window)
    super(Graphics.width/8,Graphics.width/8,Graphics.width/5*3,Graphics.height-Graphics.width/8*2)
    self.openness = 0
    @confirm_window = confirm_window
    @turnin_window = turnin_window
    self.contents.font.size = 18
  end
  def refresh
    return unless @quest
    contents.clear
    change_color(system_color)
    yy = 0
    if @quest.qgiver_name != 0
      draw_text(0,0,contents.width/2,line_height,@quest.qgiver_name)
      yy = line_height
    end
    if @quest.location != 0
      draw_text(contents.width/2,0,contents.width/2,line_height,@quest.location,2)
      yy = line_height
    end
    change_color(crisis_color)
    draw_text(0,yy,contents.width,line_height,"Lvl: " + @quest.level.to_s) if @quest.level > 0
    draw_text(0,yy,contents.width,line_height,@quest.name,1)
    draw_text(0,yy,contents.width,line_height,@quest.difficulty,2) if @quest.difficulty != 0
    change_color(normal_color)
    draw_text_ex(0,line_height+yy,@quest.desc)
    change_color(system_color)
    draw_text(0,line_height*8,contents.width,line_height,"Objectives:")
    change_color(normal_color)
    yy = line_height * 9
    @quest.objectives.each do |obj_id, obj|
      next if obj.hidden
      draw_objective(yy, $game_party.quests[@quest.id][obj_id])
      yy += line_height
    end
    change_color(system_color)
    draw_text(0,yy,contents.width,line_height,"Rewards:")
    yy += line_height
    if @quest.reward_exp > 0
      draw_text(6,yy,contents.width/2,line_height,"XP: ")
      change_color(normal_color)
      draw_text(36,yy,contents.width/2,line_height,@quest.reward_exp)
      yy += line_height
    end
    if @quest.reward_gold > 0
      change_color(normal_color)
      draw_text(6,yy,contents.width/2,line_height,@quest.reward_gold.to_s)
      cx = text_size(@quest.reward_gold).width
      change_color(system_color)
      draw_text(6+cx,yy,contents.width/2,line_height,Vocab::currency_unit)
    end
    yy += line_height
    change_color(normal_color)
    @quest.reward_items.each do |array|
      item = $data_items[array[1]] if array[0] == :item
      item = $data_weapons[array[1]] if array[0] == :weapon
      item = $data_armors[array[1]] if array[0] == :armor
      draw_item_name(item, 6, yy, true, contents.width)
      if array[2] > 1
        draw_text(6+text_size(item.name).width+36,yy,48,24,"x"+array[2].to_s)
      end
      yy += line_height
    end
  end
  def reset_font_settings
    change_color(normal_color)
    contents.font.bold = Font.default_bold
    contents.font.italic = Font.default_italic
  end
  def line_height
    18
  end
  def draw_objective(yy, obj)
    draw_text(6,yy,contents.width,24,obj.name)
    draw_text(0,yy,contents.width,24,obj.current.to_s+"/"+obj.max.to_s,2)
  end
  def show(quest,turnin)
    @quest = quest
    return if @quest.turned_in
    refresh
    open
    @confirm_window.quest(@quest)
    @confirm_window.open if !turnin
    if turnin
      @turnin_window.quest(@quest)
      @turnin_window.open
    end
  end
  def hide
    close
    @confirm_window.close
    @turnin_window.close
  end
  def accept
    @quest.accept
  end
  def turnin
    @quest.turnin
  end
end
 
class Window_QuestConfirm < Window_HorzCommand
  def initialize
    super(Graphics.width/8,Graphics.width/8+Graphics.height-Graphics.width/8*2)
    self.openness = 0
    self.active = false
    @enabled = true
    refresh
  end
  def window_width
    Graphics.width/5*2
  end
  def window_height
    48
  end
  def make_command_list
    add_command("Accept",:accept)
    add_command("Decline",:decline, @enabled)
  end
  def item_width
    width / 2 - padding * 2
  end
  def open
    super
    activate
    select(0)
  end
  def quest(quest)
    @quest = quest
    @enabled = !@quest.force_accept
    refresh
  end
  def cancel_enabled?
    super && @enabled
  end
end
 
class Window_QuestTurnin < Window_QuestConfirm
  def quest(quest)
    @quest = quest
    @enabled = true
    @enabled = !@quest.completed? if @quest.force_turnin
    refresh
  end
  def make_command_list
    return unless @quest
    add_command("Complete",:accept,@quest.completed? && !@quest.turned_in)
    add_command("Cancel",:decline, @enabled)
  end
end
 
class Game_Party
  attr_accessor :quests
  attr_accessor :tracking
  alias quests_init initialize
  def initialize(*args)
    quests_init(*args)
    @quests = $game_quests.reset_hash unless $game_quests.nil?
    @tracking = []
  end
end
 
class Game_Player
  alias quest_update update
  def update
    return if SceneManager.scene.accepting?
    quest_update
  end
end
 
class Game_Event
  def obj(quest, objective)
    $game_quests[quest].objective(objective).current
  end
end
 
class Game_Interpreter
  def accept_quest(quest)
    $game_quests[quest].accept
  end
  def ask_accept(quest)
    return unless SceneManager.scene.is_a?(Scene_Map)
    SceneManager.scene.show_quest(quest)
    Fiber.yield while SceneManager.scene.accepting?
  end
  def abandon_quest(quest)
    $game_quests[quest].abandon
  end
  def fail_quest(quest)
    $game_quests[quest].fail
  end
  def turnin_quest(quest)
    $game_quests[quest].turnin
  end
  def ask_turnin(quest)
    return unless SceneManager.scene.is_a?(Scene_Map)
    SceneManager.scene.show_quest(quest,true)
    Fiber.yield while SceneManager.scene.accepting?
  end
  def adv_obj(quest, objective, value)
    $game_quests[quest].adv_obj(objective, value)
  end
  def set_obj(quest, objective, value)
    $game_quests[quest].set_obj(objective, value)
  end
  def obj(quest, objective)
    $game_quests[quest].objective(objective).current
  end
  def hide_obj(quest, objective)
    $game_quests[quest].objective(objective).hidden = true
  end
  def show_obj(quest, objective)
    $game_quests[quest].objective(objective).hidden = false
  end
end

module DataManager
  class << self
    alias quest_load_game load_game
  end
  def self.load_game(index)
    quest_load_game(index)
    $game_quests.check_quests
  end
end

-Moonless Night's Modified Glossary:
Code:
=begin
#==============================================================================#
#   AMN Glossary
#   Version   1.01
#   Author:   AMoonlessNight
#   Date:     07 Nov 2019
#   Latest:   07 Nov 2019
#==============================================================================#
#   UPDATE LOG
#------------------------------------------------------------------------------#
# 07 Nov 2019 - created the script
#==============================================================================#
#   TERMS OF USE
#------------------------------------------------------------------------------#
# - Please credit AMoonlessNight or A-Moonless-Night
# - Free for non-commercial use
# - Contact for commercial use
# - I'd love to see your game if you end up using one of my scripts
#==============================================================================#

This script makes a basic glossary scene, where you can select different terms
and see what they mean. It's pretty basic, but could also be used as a simple
journal or a help screen.

Set up the glossary in the editable region below.

You can access the glossary scene by using the following:
SceneManager.call(Scene_Glossary)

There is also an option to have it in the main menu.

#------------------------------------------------------------------------------#
NOTE: It is recommended that you used Killozappit's Word Wrapping Message Boxes
with this script to make the text automatically wrap.

You can find it here:
https://www.rpgmakercentral.com/topic/6964-word-wrapping-message-boxes/
#------------------------------------------------------------------------------#

=end

module AMN_Glossary
#==============================================================================
# ** EDITABLE REGION BELOW
#------------------------------------------------------------------------------
#  Change the values in the area below to suit your needs.
#==============================================================================

  Menu_Option = true            # whether to have the Glossary show as an option
                                # in the menu
                                
  Glossary_Name = "Technical Terms"    # what to call the option in the menu
 
  Draw_Page_Numbers = true      # whether to draw page numbers at the bottom
 
  Glossary = {
# Each entry should have a unique title, e.g. "Battles", "Items", "Dashing".

# Each entry should have an array [] of strings, e.g. ["text"].

# You can make multiple pages for one entry by closing off the string
# with " followed by a comma.
# E.g. ["this is page one.", "this is page two.", "page three.",]

# You can use escape codes in the text to change the colour, etc. Just make
# sure you use double slashes, e.g. \\c[3]

# Don't use escape codes in the titles.

# You will need to input the line breaks manually, unless you use a word
# wrapping script (like Killozappit's).
 
 
  #"Title"  =>  ["text", "can be", "split into", "multiple pages"],
  "Basic Controls" =>  ["\\C[3]WASD\\C[0] will move your character up/left/down and right respectively.
  \\C[3]Escape\\C[0] will bring up the Main Menu, pausing the game.
  \\C[3]Q\\C[0] will Quick-Save the game, which will always be stored in the \\C[1]second save slot\\C[0].
  \\C[3]Q\\C[0] + \\C[3]Shift\\C[0] will Quick-Load the game, loading the \\C[1]second save slot\\C[0].
  \\C[3]Shift\\C[0] being held in the game world will make you dash.
  \\C[3]Shift\\C[0] when viewing an \\C[1]item\\C[0] or \\C[1]skill\\C[0] will bring up more details about it.
  \\C[3]Control\\C[0] will fast forward dialogues. When held, it will keep skipping dialogues until reaching something requiring player input."],
#---------------------

  "Dashing" => ["Holding down the \\C[3]Shift\\C[0] key while moving will make you dash, spending \\C[4]Stamina Points\\C[0]. When your \\C[4]Stamina Points\\C[0] are out (as displayed in the bottom-left corner of the screen), your dash will automatically stop, and you will switch back to walking. Your \\C[4]Stamina Points\\C[0] will automatically start refilling when you stop moving. You can increase your maximum \\C[4]Stamina Points \\C[0] by the use of perks, or certain \\C[4]Elite Items\\C[0] found rarely in the game."],
#---------------------

  "Battle Scenes" => ["When a visible enemy comes in contact with you in the overworld OR when you have walked enough steps in a map that includes random battles, you will enter a \\C[1]Battle Scene\\C[0]. If the battle began because of a random encounter, you can \\C[1]Escape\\C[0] it, ending it instantly. Your chances of a successful \\C[1]Escape\\C[0] depend on your party's total \\C[1]Agility\\C[0], vs the opposing group's \\C[1]Agility\\C[0]. Otherwise, you can only exit the \\C[1]Battle Scene\\C[0] by killing all currently visible opponents."],
#---------------------

  "Damage Formulas" => ["Each attack has its own \\C[1]damage formula\\C[0], which you can view by selecting the \\C[1]skill\\C[0] or \\C[1]magia\\C[0] and pressing \\C[3]Shift\\C[0]. In that formula, \\C[1]A\\C[0] will always be the skill's caster, and \\C[1]B\\C[0] the skill's receiver. For example, if the formula of an attack is 'a.atk - b.def', then the damage will be equal to skill user's \\C[1]A\\C[0]'s \\C[1]Attack Stat\\C[0] - attack receiver's \\C[1]B\\C[0]'s \\C[1]Defense Stat\\C[0]."],
#---------------------

  "Items in Battle" => ["Items are separated in three categories depending on their use's timing: \\C[1]Usable in battle\\C[0], \\C[1]Usable only from the Inventory\\C[0], or \\C[1]Always Usable\\C[0]. \\C[1]Foods\\C[0], \\C[1]Elixirs\\C[0], \\C[1]Bandages\\C[0] etc, would need time to be used, and are therefore only usable from the inventory. \\C[1]Throwables\\C[0], like \\C[1]grenades\\C[0] can only be used in battle, and will be vital for surviving in Psema. \\C[1]Potions\\C[0] are always usable, however using \\C[1]items\\C[0] in battle will still take up a turn, so you might want to use your \\C[1]buffing items\\C[0] before a battle starts, if you are expecting it (i.e. before a boss battle for example)."],
#---------------------

  "Damage Elements" => ["While some \\C[1]skills\\C[0] do not have an \\C[1]Element\\C[0] of their own, and will therefore inherit the \\C[1]Element\\C[0] of default attacks, depending on priorities, others do. Also, while some enemies in Psema (usually the more humanoid ones) do not have a specific \\C[1]Element\\C[0] weakness, most do. Use either your wits or the information you slowly automatically gather in the \\C[1]Bestiary\\C[0] (that you can access from the Main Menu) to learn each opponent's reactions to the various \\C[1]Attack Elements\\C[0]. Enemies can end up receiving up to five times the damage they would normally take, so hitting them with the \\C[1]Element\\C[0] they are weakest against is a huge advantage. Likewise though, many of the best \\C[1]armors\\C[0] in the game can make you equally vulnerable to specific \\C[1]Elements\\C[0]."],
#---------------------

  "Elementalism" => ["The specific \\C[1]Attack Elements\\C[0] in Psema are:
  \\C[1]Physical\\C[0]: The attack happens with steel against steel.
  \\C[1]Normal Attack\\C[0]: The skill or magia will inherit its \\C[1]Element\\C[0] from the rest of your gear or traits. Keep in mind that your normal \\C[1]attack\\C[0] option in combat always belongs to this category.
  \\C[1]Fire\\C[0]: Burn your opponents with intense heat. Enemies like zombies, insects, plants, cold elementals and others will be weak to this.
  \\C[1]Ice\\C[0]: Likewise, the ability to freeze your opponents can prove deadly against most plant enemies. Also deadly against slimes.
  \\C[1]Water\\C[0]: Useful for dealing with fire elementals, and many of the Artist's minions.",
  "\\C[1]Wind\\C[0]: Most of the aetherial enemies in Psema, like ghosts or monsters made of smoke are weak against strong gusts, blowing away their form.
  \\C[1]Thunder\\C[0]: Artificial constructs that magi often use, along with the more skeletal types of undead, are weak to this. Naturally, it is lethal in underwater uses.
  \\C[1]Light\\C[0]: Used by the Trinity's angels, holy damage will tear apart shadows and darkness.
  \\C[1]Dark\\C[0]: Useful against spirits of nature, sprites and the like.
  \\C[1]Toxic\\C[0]: Damage the opponent from the inside out, toxic damage is used by \\C[1]blood magi\\C[0]. While not particularly strong, there are very few creatures in Psema with a resistance to it. Useless against undead and slimes.",
  "\\C[1]Psychic\\C[0]: Like \\C[1]Toxic Element\\C[0], psychic attacks are attacks directly to the mind, and very few beings in Psema can resist them. Useless against zombies and non-sentient beings.
  \\C[1]Chroma\\C[0]: Color is directly linked to the idea of life and vitality, and by siphoning the vile magias of the Color out of Space, draining it from enemies can kill them. Enemies that change colors in battles, like slimes and many bosses, are particularly vulnerable to this."],
  #---------------------
    
  "Damage Types" => ["Apart from damage's element, damage is also separated into two categories: \\C[1]physical\\C[0] and \\C[1]magical\\C[0]. This is where parameters like \\C[1]magical evasion\\C[0] and \\C[1]counterattack\\C[0] come into play. Your defensive parameters are always aimed at dealing with one of these two types of damage, not both. You have to keep both this, the elements and which stats the attack formulas favor in mind to take down Psema's most dangerous enemies.
  \\C[1]Physical damage\\C[0] parameters: Evasion, Counterattack, Physical Damage Rate.
  \\C[1]Magical damage\\C[0] parameters: Magical Evasion, Magic Reflection, Magical Damage Rate."],
#---------------------

"Bosses" => ["Bosses are much tougher than the average enemies you face in their areas. They will usually have a separate, longer \\C[1]health bar\\C[0] above the rest of the enemy troops. They will usually trigger some kind of extra attack or status at 75/50/25% of their max health respectively, so you might want to avoid just bursting them with everything you've got. They are also immune to insta-kill statuses, liked \\C[1]Invoked Death\\C[0]."],

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

 "Crafting" => ["Psema is full of raw materials that you can turn into useful tools or items. Raw meat can be cooked, metal bars can be turned into armor and so forth. An adventurer can learn how to create items with existing materials by learning \\C[1]recipes\\C[0], which can be bought from shops or found as loot around the world. Learnt recipes can be viewed at any time through \\C[1]Recipe Viewer\\C[0] in the \\C[1]Main Menu\\C[0], but crafting can only be done from \\C[1]specific platforms\\C[0], which can be found in the overworld. Said platforms will always have their name floating above them. Recipes are separated into four categories: \\C[1]cooking\\C[0], \\C[1]alchemy\\C[0], \\C[1]smithing\\C[0] and \\C[1]voodoo\\C[0].",
 "Each category has its own experience bar, and learnt recipes will only appear as craftable if you have reached their required level (learning the recipes can be done at any time, it's just that the options won't appear as available until reaching said level).
 \\C[1]Cooking\\C[0]: Necessary for making food gathered from animals around Psema edible without danger of sickness. Also boosts healing provided by said foods.
 \\C[1]Alchemy\\C[0]: Used to turn the various herbs collected from the world into potions and elixirs.
 \\C[1]Smithing\\C[0]: Used to create armors and weapons, using metal bars, which in turn are made from gathered raw ores.",
"\\C[1]Voodoo\\C[0]: Used to create artifacts and other magia-based items."],
#---------------------
  
"Romantic Encounters" => ["There are two primary ways to permanently increase your stats in Psema, other than leveling: 1)By using certain \\C[1]Elite Items\\C[0]. 2)By having unique 'romantic' encounters. The second will tend to increase the stats of both participants, meaning if you can trigger one of these with another of your party members, both will receive stat boosts. Having higher \\C[1]testosterone\\C[0] will often unlock more options, allowing your character specifically to gain even higher stats.",
"Keep in mind, \\C[1]estrogen\\C[0]-based encounters might actually decrease your stats, though they can of course have other positive effects. Romantic encounters between party members can trigger at specific checkpoints, if you have romanced a specific party member enough. The condition check will happen only when you have reached the required romance level for said encounter to happen, so do not worry about missing timings. These are all tied to your relationship with the party members though, which is affected by many factors, including your \\C[1]estrogen\\C[0] or \\C[1]testosterone\\C[0] levels,",
"your current \\C[1]karma\\C[0], your dialogue options, your political beliefs and even how much completely different characters dislike you. You will also be given the option to back out almost every time, but doing so will severly damage your relationship with said party member. Keep in mind that some characters tend to be very jealous, so pursuing romances with others will actually decrease your romance with them. If two characters don't like each other, then naturally siding with one will ruin your chances with the other."],
#---------------------
  
"Insanity" => ["Insanity is an altered perception of reality, and not necessairly a false one. When you choose to go through specific events that are traumatic, like experiencing a vision of a massacre or choosing to sell your own blood for example, your insanity will increase by 1 (maximum 8). Direct or even simply extensive contact with the Others can also raise insanity. Once insanity goes up, it never goes back down. A higher insanity will make Psema deadlier, with more enemies spawning, strange diseases appearing, and traps being set. Insanity will also change Psema visually in various ways. Seeing ghosts is one of the most common symptoms,",
"but there is no limit to the strangeness that can be caused by \\C[1]Insanity\\C[0], including the spawning of more \\C[1]Elite Items\\C[0]."],

#---------------------
"Perception" => ["Unlike insanity, perception is a stat that is almost purely beneficiary, and the higher it is (max 10) the better. Apart from unlocking more \\C[1]dialogue options\\C[0] which can range from giving free exp. boosts to completely changing the story and discerning lies from truth, \\C[1]perceptiopn\\C[0] also allows you to easily spot \\C[1]invisible treasures\\C[0] in the game world, from secret vaults hidden in walls to amber hidden in random trees. The only possible negative effect is that having high enough perception might allow you to see through lies you would rather not, in ~quite rare~ instances, raising your \\C[1]insanity\\C[0] because your mind noticed things it was not supposed to."],

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

"Dialogue Checks" => ["Quite often, the game will check how high or low certain character variables are. These can be your fighting stats, your testosterone, estrogen, karma, perception, and also haggling skill, rhetorics, academics, deception and intellect. Haggling is related to transactions, rhetorics to political dialogues, academics to world knowledge, deception to flat-out making stuff up and keeping your stories coherent, and intellect to your puzzle-solving ability, in the most literal sense."],

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

"Magias" => ["Magia points are a resource required to cast \\C[1]magias\\C[0], which are an alternative move type to \\C[1]skills\\C[0]. While magias can be acquired by all PC classes, only \\C[1]blood magi\\C[0] can naturally gain magia points upon leveling up in order to fuel them. Other classes will have to use either \\C[1]Elite Items\\C[0] or specific gear that raises maximum magia points. Unlike \\C[1]SP\\C[0], your \\C[1]MP\\C[0] are a finite resource, and can only be recovered by resting. There are no respective mana potions in Psema, so your only option for continuously using magias in your adventures is to reduce the MP cost of your magias through specific items or by increasing your maximum \\C[1]magia points\\C[0].",
"Magias are generally powered by your \\C[1]affinity (AFF)\\C[0] stat. Unlike skills, magias have no usage limit."],

#---------------------
"Quests" => ["Quests are one of your best ways of earning experience in Psema, along with improved reputation with certain NPCs. When a quest is offered to you, you will be given a choice to \\C[1]accept\\C[0] or \\C[1]refuse\\C[0] it. Such chances only come once, so be careful. Refusing a quest will permanently deny you a chance to complete it, and will also give an immediate small exp. boost. An accepted quest will appear in your \\C[1]quest log\\C[0] from the \\C[1]main menu\\C[0]. You can view information regarding that quest at any time from there. Quests are usually completed upon returning to the questgiver, after having fullfilled all their \\C[1]objectives\\C[0]. Quest objectives will often appear upon completing the previous ones (for example the objective to return to the quest giver)."],

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

"Temple" => ["Accessible from the \\C[1]main menu\\C[0], \\C[1]Temple\\C[0] allows you to purchase permanent upgrades for your characters. Unlike \\C[1]perks\\C[0], these upgrades (including new skills/magias or permanent buffs) have no downsides, and are purely beneficial. The \\C[1]currency\\C[0] used for these purchases are \\C[1]Waves\\C[0]. Starting from 1 available \\C[1]Wave\\C[0], a new one is earned every time a character Levels up. There are no prerequisites for any of the available upgrades, study your character and pick them in any order you want. "],

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

"Sneaking" => ["Depending on your choices you may never have to rely on it, but quite often, enemies will be patrolling areas, looking for intruders. Once they spot you, they will start chasing after you, often sounding the alarm as well. Enemies tend to spot you only if you are within their \\C[1]line of sight\\C[0], which, depending on the enemy type, can range from a few feet in front of them to right across the room. Bad guys in Psema are often known for their lack of peripheral vision, so their eyesight is usually cone-shaped. Hide in corners or behind objects. Also keep in mind that some enemies instead use a \\C[1]proximity trigger\\C[0]. For example, wolves will smell you regardless of direction, if you are near them. Watch your step."],

# Copy and paste as needed; just make sure there's a comma after each: ],

#==============================================================================
# ** END OF EDITABLE REGION
#------------------------------------------------------------------------------
#  Please do not edit below this point unless you know what you are doing.
#==============================================================================
  }
end

class Window_AMNGlossary < Window_Selectable
  attr_reader :info_window
 
  def initialize(x, y)
    make_item_list
    super(x, y, window_width, window_height)
    refresh
    activate
  end
 
  def window_width
    160
  end
 
  def window_height
    Graphics.height
  end
 
  def make_item_list
    @data = AMN_Glossary::Glossary.keys
  end
 
  def item_max
    @data ? @data.size : 1
  end
 
  def draw_item(index)
    item = @data[index]
    if item
      rect = item_rect_for_text(index)
      rect.width -= 4
      draw_text(rect, item)
    end
  end
 
  def info_window=(info_window)
    @info_window = info_window
    update
  end
 
  def update
    super
    @info_window.category = @data[index] if @info_window
  end
 
end

class Window_AMNInfo < Window_Base
 
  def initialize(x, y, width, height)
    super(x, y, width, height)
    @category = nil
    setup_data
  end

  def setup_data
    @data = AMN_Glossary::Glossary.clone
    refresh
  end
 
  def index_max
    return 0 unless @category && @data.key?(@category)
    @data[@category].size - 1
  end
 
  def increase_index
    prev = @index
    @index = [@index + 1, index_max].min
    @index = 0 if prev == index_max
    refresh
  end
 
  def decrease_index
    prev = @index
    @index = [@index - 1, 0].max
    @index = index_max if prev == 0
    refresh
  end
 
  def category=(category)
    return if @category == category
    @category = category
    @index = 0
    refresh
  end
 
  def refresh
    contents.clear
    draw_info
  end

  def draw_info
    return unless @category
    item = @data[@category][@index]
    return unless item
    draw_text_ex(0, 0, item)
    reset_font_settings
    if AMN_Glossary::Draw_Page_Numbers
      page = "Page #{@index+1}/#{index_max+1}"
      c = text_size(page).width
      page.insert(0, "\\c[16]"); page.insert(11, "\\c[0]")
      draw_text_ex(contents_width - c, contents.height - line_height, page)
    end
  end
 
end

class Scene_Glossary < Scene_MenuBase

  def start
    super
    create_glossary_window
    create_info_window
  end
 
  def create_glossary_window
    @glossary_window = Window_AMNGlossary.new(0,0)
    @glossary_window.set_handler(:ok, method(:on_glossary_ok))
    @glossary_window.set_handler(:cancel, method(:return_scene))
    @glossary_window.select(0)
  end
 
  def create_info_window
    x = @glossary_window.x + @glossary_window.width
    width = Graphics.width - @glossary_window.width
    height = @glossary_window.height
    @info_window = Window_AMNInfo.new(x, 0, width, height)
    @glossary_window.info_window = @info_window
  end
 
  def on_glossary_ok
    @info_window.increase_index
    @glossary_window.activate
  end
 
end

class Window_MenuCommand < Window_Command

  alias amn_glossary_windmenucmd_addogcommands  add_original_commands
  def add_original_commands
    amn_glossary_windmenucmd_addogcommands
    if AMN_Glossary::Menu_Option
      add_command(AMN_Glossary::Glossary_Name, :amn_glossary, main_commands_enabled)
    end
  end
 
end

class Scene_Menu < Scene_MenuBase
 
  def command_amn_glossary
    SceneManager.call(Scene_Glossary)
  end

  alias amn_glossary_scenemenu_createcomwind create_command_window
  def create_command_window
    amn_glossary_scenemenu_createcomwind
    if AMN_Glossary::Menu_Option
      @command_window.set_handler(:amn_glossary, method(:command_amn_glossary))
    end
  end
 
end

Finally, Kilozappit's Word Wrapping itself.
 

BCj

Veteran
Veteran
Joined
Jun 19, 2014
Messages
1,849
Reaction score
1,026
First Language
Dutch
Primarily Uses
N/A
I'd like a fix for it too, so bumping it.
 

BCj

Veteran
Veteran
Joined
Jun 19, 2014
Messages
1,849
Reaction score
1,026
First Language
Dutch
Primarily Uses
N/A
Oh, now I'm confused too.
 
Status
Not open for further replies.

Latest Threads

Latest Profile Posts

Is it weird that i feel overwhelmed from reading codes that i wrote few months ago? Lol.

I dont even know where to continue!:hsad:
Ami
Gosh,I want to Play this Game Again one more again!

Seeing my Own Character & Kannono Once Again!
Tales_of_the_World_Radiant_Mythology_3_JPN_PSP-Coverart.jpg
I've been a bit to depressed to get work done on the game lately. Don't worry, I'll be okay.
LunarFlareStudios wrote on Solar_Flare's profile.
Hey, my name is Lunar Flare Studios, and you're Solar Flare? That's so weird!

Forum statistics

Threads
115,302
Messages
1,088,756
Members
149,943
Latest member
Chymora
Top