Mobius's Quest Journal

● ARCHIVED · READ-ONLY
Started by MobiusXVI 20 posts View original ↗
  1. Quest Journal
    by
    MobiusXVI
    Release Notes
    Code:
    Oct 2013 - v. 1.0   Initial Release
    Oct 2013 - v. 1.1   Added Quest Maker functionality
    Mar 2014 - v. 1.15  Improved Quest Maker to be more user friendly
    Jun 2014 - v. 1.2   Minor script compatibility improvement
    Jul 2014 - v. 2.0   Added optional switch/variable usage, improved debugging
    Apr 2019 - v. 2.1   Added additional debugging for file loading
    Oct 2019 - v. 2.2   Minor script compatibility improvement
                        (shouldn't break if switches/variables are used in weird ways)
    May 2020 - v. 2.3   Refactored external APIs, improved error messages
    Oct 2024 - v. 3.0   Added support for control codes
    Oct 2024 - V. 3.1   Fix bug with two byte UTF characters

    Introduction
    I wanted to create a plain looking, but robust quest/journal system that was akin to the one found in Skyrim. I also wanted to make it as user friendly as possible while still giving you control over implementation. I hope you enjoy it!

    Features
    - Quests can have as many steps or phases as you'd like
    - Each phase can have up to 20 lines of information displayed in the journal
    - Can store virtually unlimited number of quests
    - Sorts quests by current/completed; current quests show up in normal text while completed quests are grayed out
    - Keeps completed quests around for player review
    - Quest data created from .txt file; no need to put it all in the script window.
    - Quest data can also be made using a custom windows program - Mobius's Quest Journal Maker!
    - Quest data can be converted to .rxdata for security
    - Journal is called using simple script. Access it from an event, item, or even a key press! (Custom menus can call it up as well!)
    - Quests can be modified using standard switches/variables
    - Can automatically update switch/variable names both in-game and in the editor
    - Easily call the Quest Journal from the menu using my Menu Command Manager
    - Use control codes to change the text dynamically. (see the guide here)

    Screenshots
    Spoiler
    The journal in game
    xtahefzxl1r0dhifg.jpg
    Spoiler
    The Windows Quest Maker program
    ufk7m3egqjd70djfg.jpg

    How to Use
    Place the script below all the default scripts but above main. Create a file to hold your quests. There's an example in "Data/QuestData.txt". The quest data file will hold all your quests. There's a special format you need to follow. You starting by writing the quest's name, then a blank line, then the first phase info, then a blank line, then the next phase, and so on. When you're done with a quest, leave a blank line then write "mobius_quest_break" (without quotes). It should look like this:

    Quest Name

    Phase 0 info

    Phase 1 info

    mobius_quest_break

    And that's all there is to it! You just repeat that pattern for each quest, and save it somewhere in the project folder. But if you don't feel like making in all in NotePad, then you can use my Quest Maker.

    Download here: Mobius's Quest Journal Maker

    If you're still not sure, then check out the video tutorial here: Video Tutorial
    You can also check out a second video tutorial covering the v2.0 updates: Video Tutorial 2

    Once you've got everything imported, you can use the following script calls from anywhere.

    $scene = Scene_Quest.new
    - Calls the quest journal scene

    $game_quests.discover_quest("quest_name")
    - Adds the named quest to the player's journal in the default state
    - You can also use the quest's ID rather than its name if you prefer

    $game_quests.dq("quest_name")
    - Same as above - just a shorthand version
    - Ditto about IDs

    $game_quests.set_phase("quest_name", phase_number)
    - Changes the named quest's phase to the specified phase number
    - Again, you can also use the quest's ID rather than its name if you prefer

    $game_quests.sp("quest_name", phase_number)
    - Same as above - just a shorthand version
    - Ditto about IDs

    $game_quests.complete_quest("quest_name")
    - Changes the named quest to completed status
    - Once more, you can also use the quest's ID rather than its name if you prefer

    $game_quests.cq("quest_name")
    - Same as above - just a shorthand version
    - Ditto about IDs

    Demo
    Download here: demo


    Script

    View on Github

    FAQ
    Q. Why don't the changes I made to my quests show up during playtesting?
    A. Simply put, the script is not save game compatible. This is - unfortunately - the biggest current limitation of the script. If you start a playtest, save your game, and exit, and then make changes to the quests when you load up the save game it will not have any of your changes to the quests. But any changes you make should display correctly as long as you start a new game. My recommendation for getting around this problem is utilizing the debug (F9) menu to set quests to the desired state for testing, and always starting a new game.

    Q. Why does the first quest always show in the journal even if it hasn't been discovered yet?
    A. The journal needs at least one quest to function, so the first quest gets automatically discovered upon starting a new game. You can work around this limitation by adding a "starting" phase to it that doesn't give anything away like "You're on a new adventure!".

    Q. Why is the text not arranged nicely?
    A. Because it's really hard (lol). The script tries to do the best that it can, but it can struggle to account for everything, especially if you're using custom fonts, icons, etc. You can help it out by adding manual line breaks wherever they're necessary.


    Credit and Thanks
    - Mobius XVI, author
    - Special thanks to Zeriab. I borrowed the name for two of my classes from the Quest Book script, and overall I'd say it influenced my design.
    - KK20, for finding a fairly obscure bug in my code
    - Supergenio, for suggesting the control codes and bug testing them

    Author's Notes
    This script is licensed using the MIT License. See the license file for more info.
    In addition, this script is only authorized to be posted to the forums on RPGMakerWeb.com.
    Further, if you do decide to use this script in a commercial product, I'd ask that you let me know via a post here or a PM. Thanks.
  2. I need a Youtube video of you doing this step by step. I'm a visual learner. Other that that this looks awesome!
  3. Per your request, I've added a video tutorial. Hope it helps!
  4. Forgive my Ignorance, I am new to RPG Maker and Scripting. If I am understanding correctly:

    $scene = Scene_Quest.new runs the script so that the other functions can be used

    B key opens the journal for players

    Is this correct?
  5. F117Landers said:
    Forgive my Ignorance, I am new to RPG Maker and Scripting. If I am understanding correctly:

    $scene = Scene_Quest.new runs the script so that the other functions can be used

    B key opens the journal for players

    Is this correct?
    Not quite. So $scene = Scene_Quest.new will open the journal for players. Then if you wanted to, you could make a common event in the database that would call $scene = Scene_Quest.new  when the B button is pressed (or any other button for that matter). The rest of the functions allow you to change the quests and can be called anywhere/anytime.
  6. Ah, that makes more sense; Thanks. The reason I ask about B in particular is because in your common event Script Scene_Quest (in the demo) you indicate B to cancel.

    Edit: I have now discovered that Scripts and Common Events are different things. Also found the Common Events in your demo.
  7. Glad you're getting things figured out!  If you haven't seen it yet, there's a tutorials forum on here that'll teach you how to do lots of nifty things, and you can also find guides on just the basic functions as well.
  8. Thanks!. Though to be honest, I always have trouble sticking to tutorials. I've been going through various demo's that people have of their scripts to see how it works and how it relates to ruby.

    Speaking of scripts, I did have a question about the Quest Log.  I didn't see any references, but I just wanted to double-check: Are any of the variables or switches used by your quest log?
  9. Nope. My script uses it's own internal data to track things, so it doesn't use any variables or switches. I've considered adding in the option to use them instead of the built-in data, but have yet to actually do that.
  10. Thanks!
  11. Version 2.0 of the script is live! The script now offers integration with switches/variables, and a few other things. Check out the video tutorial here
  12. This is a pretty neat tool thanks a ton :) I am new here yet I am liking it more and more by the day finding new cool stuff all the time.
  13. You're welcome, and thanks! It's always nice to hear that people are using and enjoying my work. And since you're new, let me say welcome! This is a great community with a lot of helpful people so if you ever have any questions or specific requests for things, don't hesitate to ask.
  14. Is there a way to use variables but not switches? I haven't used it in a real game yet but I plan to and I was fine using the script calls but I thought I could use the variables to check how far they are and not let them pass if they aren't. in short, well the first sentence :D . Thanks!
  15. SuperMasterSword said:
    Is there a way to use variables but not switches? I haven't used it in a real game yet but I plan to and I was fine using the script calls but I thought I could use the variables to check how far they are and not let them pass if they aren't. in short, well the first sentence :D . Thanks!
    Short answer: yes :thumbsup-right:  Long answer: when using switches and variables, the script will keep everything self consistent, meaning you can use any combination of script calls/events. As an example, let's say Quest #1 uses the switches 1 and 2, and the variable 1. The following would all then be equivalent:

    $game_quests.discover_quest(1) == Set Game Switch #1 to true (via event)

    $game_quests.complete_quest(1) == Set Game Switch #2 to true (via event)

    $game_quests.set_phase(1, 3) == Set Game Variable #1 to 3 (via event)

    It doesn't matter which you use. I did this on purpose so that previous users of my script could upgrade to the new version and use switches/variables without breaking their projects and making them have to go back and re-do a bunch of work.
  16. Ah, ok. to be honest when I first saw this script I was first reminded of the Jak and Daxter series, which if you haven't played it doesn't have phases, but only missions which are either in progress or completed. (although there also weren't any side quests, but personally I still thought it was a good game)

    EDIT: and the point is that's how I thought I could use it. although partly because I might miss if I can't ever see what it said before when it switches to a new phase. (don't ask why, I don't know) (though to be honest [again] I could just copy and paste and add on to the previous phase)
  17. Man, it's been years since I played Jak and Daxter, and yeah I thought it was good too. But I actually thought about including previous phase info; like letting the player go back and read previous phases. I ended up deciding against it because - for my own project - I wanted to have some branching side quests. So by not showing old phases, I was able to set up the quest like phase 1->2->3->branch to either 4 or 5, and take that same concept even further if I wanted to. And you're right, if you really want the player to have the old phase info, then you can always just copy/paste.
  18. just to be sure, when I use $game_quests.set_phase would it also change the variable automatically? (and similarly change the corresponding switch if I used .discover_quest or .complete_quest?)
  19. SuperMasterSword said:
    just to be sure, when I use $game_quests.set_phase would it also change the variable automatically? (and similarly change the corresponding switch if I used .discover_quest or .complete_quest?)
    Yep! Give it a try sometime. Just set up an event with a script call and then verify the change was made to the corresponding variable/switch with the F9 debug menu.
  20. Hello Mobius,

    what a nice work. The Quest Maker is perfect for people like me who are very bad in scripting and remembering scriptlines :) And I also have a very nice overview about the quests I m planning.

    But I have a question: Is it possible to show icons or smaller pictures in the Journal?