I can't remember if this area has already been covered but I made this for originally for Canderis in one of his projects and hopefully it will help all of those who are in need of making quests for their mods. Creating your own custom quests is a really easy process, you only need to edit one file and generally use two scripts; one to make a journal entry active and another to check to see if it’s active. So let’s get started.

1. Creating your new quest

Show spoiler

(hidden content - requires Javascript to show)

First of all you need to open up the file that sets up the journal entries in the game. To do this go to BIFs/dialog.bif/Journal File/global.jrl
In the file is a list of all of the quests and their entries. To make your new quest you need to copy and paste a struct. Here is a description of all the fields you need to use.

1. Comment: Doesn’t really do anything, just for personal reference.

2. Entry List: In here is a list of structs that act as the entries for each quest, for every entry you need a struct.

3. End: If this is set to 0, it will consider the entry as an active quest and if it’s set to 1, it is considered completed.

4. ID: You need to set this to any number (I usually set it to 1 and increase it from there for the following entries).

5. Test: This is where you see the actual information describing the entry of the quest.

6. XP_Percentage: This is how much experience points are earned when the entry is activated. I’ve had a problem with using this so I’ve generally used a script to give me the proper experience. Apparently it is multiplied by a number, I think 5 and the total is what you really receive in the game.

7. Name: This is the name that the quest appears as in the Journal Menu.

8. PlanetID: This field sets what planet name appears on the Quest. You can see what planet number should be set in the Planetary.2da file.

9. PlotIndex: If it does something I’m not familiar with it.

10. Priority: This sets the importance of the quest from highest to lowest meaning does it appear at the top of the list or the bottom. 0 is the highest and 5 is the lowest.

11. Tag: This is the reference used to locate the quest by script.

At this point you should be set and be ready to see the quest in game.

2. Activating the quest and journal entry

Show spoiler

(hidden content - requires Javascript to show)

At this point you’re ready to activate the quest in game. You need to use this script and somehow execute it in the game, most of the time it is done through dialogs but can be used in cases such as whenever you open a door, pass through a trigger, or kill a target. Note that there are two different ones:

Quote:

This one will simply activate an entry
void main() {
AddJournalQuestEntry("tag",1);
}

This one will actually change the entry to a prior entry (note that you cannot go backwards with the script above, only forwards - this will allow you to go backwards)
void main() {
AddJournalQuestEntry("tag", 1, TRUE);
}

1 can be whatever number applies to the desired journal entry.

The other script that would be used as a conditional script to check to see if a particular entry of a quest is active which will be mainly used in dialog (note that there are five different scripts):

Quote:

This script will see if the journal entry equals a specific number:
int StartingConditional() {
return (GetJournalEntry("tag") == 1);
}

This script will see if the journal entry is greater than a specific number:
int StartingConditional() {
return (GetJournalEntry("tag") > 1);
}

This script will see if the journal entry is greater than or equal to a specific number:
int StartingConditional() {
return (GetJournalEntry("tag") >= 1);
}

This script will see if the journal entry is less than a specific number:
int StartingConditional() {
return (GetJournalEntry("tag") < 1);
}

This script will see if the journal entry is less than or equal to a specific number:
int StartingConditional() {
return (GetJournalEntry("tag") <= 1);
}

Remember that the first script to activate the journal can be used in a variety of ways allowing you to be very flexible in how to execute the script while the conditional script will give you a way to make something happen should a particular journal entry be active.

At this point you should be able to go into the game and see the quest once you execute the script. If you need any other information as to how to do this please feel free to ask by pming me here at Lucasforums.