• Just a reminder that providing specifics on, sharing links to, or naming websites where ROMs can be accessed is against the rules. If your post has any of this information it will be removed.
  • Ever thought it'd be cool to have your art, writing, or challenge runs featured on PokéCommunity? Click here for info - we'd love to spotlight your work!
  • Our weekly protagonist poll is now up! Vote for your favorite Trading Card Game 2 protagonist in the poll by clicking here.
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

Quest System

SuperJanBro

Renegade
  • 63
    Posts
    10
    Years
    So, I was thinking of adding a quest system into my fan-game, but I wanted to see if anyone had a good way of going about this? I tried doing this through conditional branches, and variables... but is there an easier way of doing this? Maybe I could create an app on the Pokenav (Called the CyberNav in my game) that lists and details the quests in one place?

    Any suggestions/Examples?
     
    There's this, though it needs to be re-written to work with Essentials. Reason being a lot of the classes called in the script have been overwritten so it's not going to work. I was actually thinking of trying to work with it at some point, it's a pretty cool script when it works.
     
    There's this, though it needs to be re-written to work with Essentials. Reason being a lot of the classes called in the script have been overwritten so it's not going to work. I was actually thinking of trying to work with it at some point, it's a pretty cool script when it works.

    That is really a shame... While looking at the script, it does look pretty well done. Oh well. One day!
     
    It is possible to create a quest system using the RPG maker only, but it is complicated and requires a lot of effort. I'm pretty sure there is a quest system script created for Essentials out there, so you should try searching for it. If you want, though, I can post a step-by-step tutorial here on how to create one using the RMXP only.
     
    It is possible to create a quest system using the RPG maker only, but it is complicated and requires a lot of effort. I'm pretty sure there is a quest system script created for Essentials out there, so you should try searching for it. If you want, though, I can post a step-by-step tutorial here on how to create one using the RMXP only.


    That depends, would it work for essentials? If not I'd rather search for the one you mentioned. Thanks so much for the reply, though! : )
     
    That depends, would it work for essentials? If not I'd rather search for the one you mentioned. Thanks so much for the reply, though! : )

    Well, it should work, because, as I already mentioned, it has almost no scripting and is created with the RPG maker only.

    You use RPG Maker XP to create your game, right?
     
    Okay, here goes.

    First, you should do the only part that requires scripting, and that is to have a global switch activated when you open the quest log. In my game, the quest log is an item. Here's the article about item effects. You can turn the switch ON via PokeGear if you want.

    Next, you want to create the pictures that display when you open the quest log. The game screen size is 512x384 by default, so the picture should be the same size. This picture should consist of two or three parts, one part that displays quest names, and the other part(s) that display details about a selected quest (Maybe a picture, too). This is how mine looks like:
    Spoiler:


    In mine, quest names are displayed on the left half, the description of the selected quest is displayed on the top-right part, and a picture related to the selected quest is displayed on the bottom-right part (Just to make things look nice).

    The part where quests are displayed contains 2 columns and 11 rows, which means 22 quests can be displayed at once. The player can't have more than 22 quests at the same time.

    The difficult part is finding the exact position where quest names should be displayed. Each quest name is actually a 128x32 picture. The first position isn't at 0x0, but is actually at 8x16. This is because you don't want the quest name to overlap the frame.
    So, the first position is on 8x16. The second position is on 8x48 (First column, second row). The third is on 8x80, and so on, until you reach the 12th position, which is in the second column, first row, so that's 138x8.

    I'm using the positions in my quest log as an example. You can make yours look whatever you like, and you'll have to determine the positions on your own, which is actually easier than it sounds.

    After you've created the quest log image, you have to create a select box.
    Spoiler:

    As you can see, mine is just a frame the same size as the quest names (128x32). Again, you can make yours look different, it doesn't matter.

    Once you've finished creating the necessary pictures, it's time to create the events. You'll need to create 4 common events in the System settings in order for this to work.

    Event #1 Quest log
    This event displays the quest log and the select box, and allows you to move the select box and exit the quest log. Put the Trigger as "Auto run", and the condition switch as the switch which is turned on by the quest log item (Or PokeGear, whichever you choose).
    This is how the event should look like:
    Code:
    Show Picture: 1, Quest log, Upper left (0,0),(100%,100%),255,Normal   ==> This displays the picture of the quest log. It is important that the picture number is 1.
    Control Variables: [Select Box X] = 8
    Control Variables: [Select Box Y] = 16   ==> The select box picture's position is determined by these two variables. 8 x 16 is the first position.
    Show Picture: 50, Select box, Upper left (Variable[XXXX][YYYY]),(100%,100%),255,Normal ==> This displays the picture of the select box. XXXX & YYYY are the numbers of the Select Box X & Y variables.
    Control Variables: [Select position] = 1  ==> This variable is equal to the position the select box is on. 
    Control Variables: [Quest position] = 1 ==> Important in another event.
    Call Common Event: Display quest names ==> This activates the event which displays the quest names. 
    Loop
    Wait: 1 frame(s)
    Control Switches: [Select box on quest] = OFF ==> Important in another event.
    Call Common Event: Display quest pictures ==> This activates the event which displays the details for a select quest IF the select box is on a quest.
    Conditional Branch: The Down button is being pressed   
         Conditional Branch: Variable [Select Box Y] ==336   
         Play SE: "bump",80,100
         Wait: 4 frame(s)
    
         Else
         Control Variables: [Select Box Y] + 32
         Move Picture: 50, @3, Upper Left (Variable [XXXX][YYYY]), (100%,100%),255,Normal
         Wait: 4 frame(s)
         Control Variables: [Select position] + 1
                                   (The first conditional branch checks if the "down" button is being pushed. The second one checks if the select box is at the bottom and can't go any lower. If it is, it plays the "bump" sound and doesn't do anything else. If it isn't (else case), the select box moves down one spot (+32 pixels in the Y-axis). 1 is added on the select position variable because the position has changed.)
    
      Else
      Conditional Branch: The Up button is being pressed   
         Conditional Branch: Variable [Select Box Y] ==16   
         Play SE: "bump",80,100
         Wait: 4 frame(s)
    
         Else
         Control Variables: [Select Box Y] - 32
         Move Picture: 50, @3, Upper Left (Variable [XXXX][YYYY]), (100%,100%),255,Normal
         Wait: 4 frame(s)
         Control Variables: [Select position] - 1
    
      Else
      Conditional Branch: The Right button is being pressed   
         Conditional Branch: Variable [Select Box X] ==136   
         Play SE: "bump",80,100
         Wait: 4 frame(s)
    
         Else
         Control Variables: [Select Box X] + 128
         Move Picture: 50, @3, Upper Left (Variable [XXXX][YYYY]), (100%,100%),255,Normal
         Wait: 4 frame(s)
         Control Variables: [Select position] + 11  ==> The variable increases by 11 because the select box moved to the second column. The first column contains positions 1-11, and the second one 12-22. Since the row hasn't changed, the position changes by 11. 
    
      Else
      Conditional Branch: The Left button is being pressed   
         Conditional Branch: Variable [Select Box X] ==8   
         Play SE: "bump",80,100
         Wait: 4 frame(s)
    
         Else
         Control Variables: [Select Box X] - 128
         Move Picture: 50, @3, Upper Left (Variable [XXXX][YYYY]), (100%,100%),255,Normal
         Wait: 4 frame(s)
         Control Variables: [Select position] - 11
    
     Else
     Conditional Branch: The Z button is being pressed
      Break Loop
    
        Branch End
       Branch End
      Branch End
     Branch End 
    Branch End
    
    Repeat Above
    
    Delete Picture: 1
    Delete Picture: 2
    Delete Picture: 3
    Delete Picture: 4
    Delete Picture: 5
    Delete Picture: 6
    Delete Picture: 7
    Delete Picture: 8
    Delete Picture: 9
    Delete Picture: 10
    Delete Picture: 11
    Delete Picture: 12
    Delete Picture: 13
    Delete Picture: 14
    Delete Picture: 15
    Delete Picture: 16
    Delete Picture: 17
    Delete Picture: 18
    Delete Picture: 19
    Delete Picture: 20
    Delete Picture: 21
    Delete Picture: 22
    Delete Picture: 23
    Delete Picture: 24
    Delete Picture: 25
    Delete Picture: 50   (Picture # 1 is the quest log, #50 is the select box. The other pictures are names of the quests.)
    Control Switches: [XXX] = OFF  ==> XXX is the switch which is turned on by the quest log item (or PokeGear) and which is required to run this event.


    Event #2 Display quest names
    This event is activated in the previous event. It displays the quest names of all available quests, without any gaps between the names.
    Code:
    THIS CONDITIONAL BRANCH IS REPEATED FOR EVERY QUEST THAT EXISTS IN THE GAME. 
    Conditional Branch: Switch [QUEST RELATED SWITCH] is ON    ==> Every quest has a switch related to it, which should be turned on when the quest is added to the player (By the event that adds the quest, usually the NPC that gives the player the quest. 
      Control Variables: [Quest position] + 1   ==> This variable determines the position of the quest, but it also determines the number of the displayed quest name picture. This variable was set to 1 in the previous event, and it'll increase for each upcoming quest. This was done because the picture number can't be 1, since that's the number of the quest log picture. 
      Control Variables: [QUEST RELATED VARIABLE] = Variable [Quest position]  
      Control Variables: [QUEST RELATED VARIABLE] - 1  ==> Just like every quest has a switch related to it, it has a variable related to it, too. This variable is important in another event.
      Call Common Event: Determine quest position
      Script: pbShowPicture($game_variables[# of Quest position variable], "Name of quest name picture", 0, $game_variables[# of Quest position X variable], $game_variables[# of Quest position Y variable]   ==> This displays the actual picture of the quest name. The picture number will be equal to the "Quest position variable". The "Quest position X" and "Quest position Y" variables are determined by another event.
    
    Branch end
    As mentioned in the code, the conditional branch must be written for every quest that exists in the game. The easiest way to do this is to simply add it for every new quest you create, without delay.

    Event #3 Determine quest position
    This events determines the Quest position X & Y variables that are used in the previous event.
    Code:
    Conditional Branch: Variable [Quest position] == 2   ==> This variable is always higher by 1 than the actual position it corresponds to. This is because the picture number is also determined by this variable, and it must not be 1. 
      Control Variables: [Quest position X] = 8
      Control Variables: [Quest position Y] = 16    ==> These coordinates correspond to the first position.
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 3
      Control Variables: [Quest position X] = 8
      Control Variables: [Quest position Y] = 48
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 4
      Control Variables: [Quest position X] = 8
      Control Variables: [Quest position Y] = 80
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 5
      Control Variables: [Quest position X] = 8
      Control Variables: [Quest position Y] = 112
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 6
      Control Variables: [Quest position X] = 8
      Control Variables: [Quest position Y] = 144
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 7
      Control Variables: [Quest position X] = 8
      Control Variables: [Quest position Y] = 176
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 8
      Control Variables: [Quest position X] = 8
      Control Variables: [Quest position Y] = 208
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 9
      Control Variables: [Quest position X] = 8
      Control Variables: [Quest position Y] = 240
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 10
      Control Variables: [Quest position X] = 8
      Control Variables: [Quest position Y] = 272
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 11
      Control Variables: [Quest position X] = 8
      Control Variables: [Quest position Y] = 304
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 12
      Control Variables: [Quest position X] = 8
      Control Variables: [Quest position Y] = 336
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 13
      Control Variables: [Quest position X] = 136
      Control Variables: [Quest position Y] = 16
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 14
      Control Variables: [Quest position X] = 136
      Control Variables: [Quest position Y] = 48
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 15
      Control Variables: [Quest position X] = 136
      Control Variables: [Quest position Y] = 80
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 16
      Control Variables: [Quest position X] = 136
      Control Variables: [Quest position Y] = 112
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 17
      Control Variables: [Quest position X] = 136
      Control Variables: [Quest position Y] = 144
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 18
      Control Variables: [Quest position X] = 136
      Control Variables: [Quest position Y] = 176
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 19
      Control Variables: [Quest position X] = 136
      Control Variables: [Quest position Y] = 208
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 20
      Control Variables: [Quest position X] = 136
      Control Variables: [Quest position Y] = 240
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 21
      Control Variables: [Quest position X] = 136
      Control Variables: [Quest position Y] = 272
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 22
      Control Variables: [Quest position X] = 136
      Control Variables: [Quest position Y] = 304
    
    Branch End
    
    Conditional Branch: Variable [Quest position] == 23
      Control Variables: [Quest position X] = 136
      Control Variables: [Quest position Y] = 336
    
    Branch End

    Event #4 Display quest pictures
    This event will display the description of the quest, and the image related to the quest of the selected quest. It won't display anything if the select box isn't over any quest. Note that both the description of the quest and the image of the quest are pictures.
    Code:
    THIS CONDITIONAL BRANCH IS REPEATED FOR EVERY QUEST THAT EXISTS IN THE GAME!
    Conditional Branch: [QUEST RELATED VARIABLE] == Variable [Select position]
      Show Picture: 24, "Quest description", Upper Left, (272,8), (100%,100%), 255, Normal
      Show Picture: 25, "Quest image", Upper Left, (272,232), (100%,100%),255, Normal
      Control Switches: [Select box on quest] = ON
    
    
    ----
       THIS CONDITIONAL BRANCH MUST GO LAST IN THIS EVENT!
    Conditional Branch: Switch [Select box on quest] == OFF
      Delete Picture: 24
      Delete Picture: 25

    Okay, these are the necessary events required to make the quest log work.

    When the player receives a new quest, the switch related to that quest should be turned ON, and a variable that counts the number of quests should increase by 1. Before even adding the quest, there should be a Conditional Branch that checks whether that variable is equal to 22. If it is, the quest should not be added.

    Once the quest is completed, the variable related to the quest should be put to 0 to avoid showing any pictures related to the quest in the quest log. The switch should also be turned off so the quest name isn't displayed. And last, but not least, the variable that counts the number of quests should decrease by 1.

    So this is how to create a quest log using the RPG Maker only. This method requires constantly updating 2/4 common events for every new quest and having 2 (or 3) pictures of every quest - one of its name, the second of its description, and the third which is somehow related to the quest (In my case, it's just a simple picture that makes the quest log look better).
    ---------------------------------------------------------------------
    I hope you get it to work. Any questions, shoot me a PM :D
     
    Last edited:
    I thought you guys might be interested in this

    btw LightningAlex, that is a very creative solution you've made there. I would have never thought to come up with that.
     
    Back
    Top