Simple Quest Tutorial

From Project Tamriel Wiki
Jump to navigation Jump to search

In this tutorial you will learn how to create a simple quest – called "Kevaar Finds a Shiny" – making use only of dialogue between NPCs. For more advanced questing tutorials, please refer back to the Quest Guidelines.

So, let's get started!

Planning Your Quest

The first step to doing any quest creation is writing an outline for it. For most of you working from the Tamriel Rebuilt or Project Tamriel claims browser, these outlines will be provided for you. Even so, it’s helpful to break it down into steps so that you know what needs to be implemented.

In general, quests follow a very simple format:

  1. The player finds out about the quest and talks to the quest-giver.
  2. The player does whatever the quest-giver wants them to do, such as find an item or kill a monster.
  3. The player then returns for their reward, usually given to them by the original quest-giver.

Obviously, these steps can be added to, such as the player having to find more than one item, or the quest-giver giving them additional tasks, or the player having to find out about the quest by doing other quests first. These I will cover later; for the purposes of this tutorial, I’ve planned out a very simple quest called "Kevaar Finds a Shiny." It goes like this:

  1. The player speaks with Kevaar, who talks to them about a ring he found. The player offers to find the ring’s original owner.
  2. The player speaks to characters around town about the ring. The player finds out that the ring belongs to Fargoth.
  3. The player returns to Kevaar for their reward for finding the ring's owner.

Though this quest design could be expanded to add more twists in the plot or additional ways for the player to finish the quest, it is enough to start crafting my quest.

The Quest Journal

The first step to creating your quest in the Construction Set is creating the Quest Journal entries for it. (Well, actually the first step is opening up the Construction Set, but we’re assuming you already know how to do that and won’t be covering it in this guide!)

You first navigate to the Dialogue Window. This is a little icon near the top of your screen that looks like a speech bubble, as seen in the below image. Click it:

Questtut-bubble.png

This opens up the dialogue window. In the default view, here you can see all the dialogue ever written into the game. To get to the Quest Journal, you’ll want to navigate over to the tab that says Journal, as shown below:

Questtut-journals.png

Here you will see a list of all quests that have been implemented into the game. To create your own, right click on any quest title and click New. (It doesn’t matter which quest you do this to, as you won’t be changing it by doing this.) Type in an ID for your quest. Note that changing the ID gets tricky later on, so you’ll want to make this something short, unique, and identifiable to you at a glance – see the Quest Guidelines if you are working on a Tamriel Rebuilt or Project Tamriel quest claim. For the purposes of the tutorial, I choose to give my quest the ID "TR_KevaarShiny".

Pro Tip: Adding the same prefix to all your mod's IDs is good modder etiquette, as now anyone who opens up your mod in the CS knows exactly what you contributed to the game world. It also serves the purpose that you yourself can quickly navigate to your own work! See the ID guidelines in how different project prefer their IDs. E.g., Tamriel Rebuilt uses the TR_[map number]_[location abbreviation]_[Short Quest Name] format, which would resolve into, for example, TR_m4_Om_Statue , where m4 is map (region) number 4 (the other ones being m0 through m7), Om is short for Omaynis, and Statue refers to the shortened quest title (The Statue). TR always goes at the beginning in Tamriel Rebuilt; for Skyrim: Home of the Nords, that would by Sky, etc.

The next thing you will need to do is create the title of the quest as it will appear in your in-game journal. You can add this at any time, but since I already know my title, I’ll do that now. First I’m going to right-click in the Info/Response window, and select New. Then I’m going to navigate down to the text box and type in my title, capitalized correctly. As this is the Quest Name, I am then going to click on the “Quest Name” checkbox, as shown in the below image, so that the game doesn’t inadvertently give me a Journal entry that says nothing but "Kevaar Finds A Shiny." Because that would be strange. Unless you’re Kevaar.

Questtut-title.png

Pro Tip: If I were making a quest for a faction such as the Fighter's Guild, I would want to be sure to add this to the beginning of my Quest Name, followed by a colon. This is to keep my quests consistent with the vanilla game's conventions. Eg: "Fighters Guild: No Sin Goes Unpunished" instead of just "No Sin Goes Unpunished"

Next I’m going to start making the rest of my Journal entries. These will appear in the in-game journal as the player plays through my quest. These entries also help you, the backend writer, to organize your quest in logical steps. I’m going to be making a simple quest, so I’m going to add just three entries to start with.

The first entry should be what appears once the player stumbles upon your quest for the first time. Sometimes you will have multiples of these depending on how many ways the player can find your quest, but I will just have the one. First I click on the Info/Response tab and click New, just like when I made my quest title. In the textbox, this time I will be typing out exactly what I want to appear in the Journal entry itself, as shown below. (The game engine will automatically handle adding a date to the entry). Using the logic of Topic-Based Dialogue, I want to write blandly, so that conceivably any kind of character could be writing this.

Questtut-firstentry.png

I also want to add an Index number to this entry. This is used later on for identifying what stage of the quest the player is on. Since this is the first entry, I will call it 10. I like to use multiples of 10 just in case I forget an entry and need to go back and add others in between. Entries should be in the order you expect the player to come across them, for it makes your life easier later on down the road.

If I haven’t already, I am going to SAVE my mod file!

Next I will add my second entry. For the purposes of my simple quest, this will be the entry that shows up when the player has returned the shiny to its owner successfully but has yet to tell Kevaar. I will call it 50. If I were writing a mystery quest or a quest with multiple steps, I might realize later I need other entries that happen between 10 and 50, which is why I chose such a big gap.

Finally, I need to write an entry for once I have returned to Kevaar and he has given me a reward for completing his quest. I am going to call this entry 60. Since I don’t want this quest hanging around forever in the player’s in-game journal, I will also check the Finished box so that the quest no longer appears once the player has finished it. I should have entries like these in the quest Journal when I am done:

  • Journal Index 0: "Kevaar Finds a Shiny"
    • Quest Name checked
  • Journal Index 10: "Kevaar found an abandoned ring. He's asked me to find its owner."
  • Journal Index 50: "Fargoth says he is the owner of the ring Kevaar found. I should tell Kevaar this."
  • Journal Index 60: "Kevaar thanked me for finding the owner of the ring and has assured me he will give it to Fargoth."
    • Finished checked

And for the more visual among you, here is a screenshot of the finished product:

Questtut-finishedjournal.png

And that’s all I have to do for my simple quest Journal! If you haven’t already, SAVE your mod file!

Next, we will be handling creating all the objects needed for the quest.

Creating Objects

After creating my quest Journal, the next thing I want to do is make sure I have all the objects I need for the quest. (An object is any item or character the player may interact with through the course of the quest.) The easiest way to do this is to go back to my original outline. For instance, in "Kevaar Finds a Shiny," my quest is planned to go like this:

  1. The player speaks with Kevaar, who talks to them about a ring he found. The player offers to find the ring’s original owner.
  2. The player speaks to characters around town about the ring. The player finds out that the ring belongs to Fargoth, and gives it to them.
  3. The player returns to Kevaar for their reward for returning the ring.

I see that I need three unique objects for this quest: a Kevaar NPC, a Fargoth NPC, and a ring. When I go into the Construction Set, I see that while Fargoth already exists, neither Kevaar or a unique quest ring do. I will need to create them. (When working with claims, sometimes the NPCs and quest items already exist, and sometimes they don’t, so you will need to check!)

Creating Kevaar

I will first create my Kevaar NPC. I first navigate to the NPC tab in the Object Window, shown below:

Questtut-npcmenu.png

From there, right click anywhere within the list, and click “New.” A window will open with lots of values to fill in (see below), which I will explain briefly. These values are also explained in more detail in our NPC guidelines.

Questtut-newnpc.png

ID

First, the ID that I call my NPC for use in scripting. This is a unique identifier for the NPC and is read by the game engine only; it never appears in-game. You can make this anything you want, but while working on Tamriel Rebuilt or Project Tamriel, you should follow our ID conventions. For Tamriel Rebuilt, this goes: TR_m[#]_Q_[FirstName]_[LastName], where # is the map number the NPC can be found in, and FirstName_LastName is the name of the NPC with underscores instead of spaces. In this case, I would call Kevaar "TR_m0_Q_Kevaar". Q distinguishes quest-specific characters from "generic" ones.

Name

The next part is the character’s name as it appear to players. With a few notable exceptions, all characters in TES III have both a first name and last name, and no title. I notice that my quest design has failed to give Kevaar a last name, so I will come up with one now. I’ll call him Kevaar Ezran.

Script

For now, I will ignore this, but it comes in handy later when telling the game engine to track the status of certain NPCs or giving them special abilities.

Race

This governs what race the NPC will be. I want Kevaar to be a Dunmer, and so select Dark Elf.

Female

This checkbox makes the NPC into a female. Kevaar is a male, so I will leave this unchecked.

Class

The NPC’s class governs what skills they’re good at, what spells they have access to, and in some cases, generic dialogue available to them. Classes also include service packages such as Training and merchant services, so I will want to test my choice out in-game to make sure I am not inadvertently letting people barter for Kevaar's inventory! In my simple quest, I imagine Kevaar to be a simple peasant, and so give him the class of Commoner.

Level

This governs how strong the character is. Since players will be meeting Kevaar in a low level area and he is not intended to be a fighter, I will set his level to 5.

Faction and Rank

Unlike the player, NPCs can only belong to one faction at a time. This classification typically effects an NPC’s disposition to the player, some generic dialogue, and some universal questlines. As I want Kevaar to be friendly to thief characters and don’t mind him giving thiefly advice, I will make him a Wet Ear in the Thieves Guild.

Essential

I will be leaving this one alone. Unlike later games, in TES III, all being essential does is tell the player they broke the main quest if they kill this NPC. It doesn’t make them immune to death.

Corpses Persist

If killed, this governs if the NPC’s body sticks around. This is useful for quests where you need to loot a unique item from the body, as it keeps the body from disappearing if the player inadvertently leaves the area before obtaining the quest item. As I don’t foresee this occurring in my quest, I will leave this checkbox alone.

Pro Tip: Sometimes you will want to write a quest where the NPC shows up dead when the player first encounters them. Doing this makes use of the NPC's Health statistic and the Corpses Persist option. To make the NPC appear and act like a corpse (including being able to be looted), you first set their base Health to 0 in their statistics menu. Then you check the Corpses Persist box, so that there isn't a split second of the death animation playing whenever the player comes across the NPC, and new items aren't generated in their inventory if the player comes back to them at a later date. Neat, right?

Respawn

This effects whether the NPC can respawn after being killed. Since Kevaar is unique and afaik doesn’t have nine lives, we won’t check this box.

Attributes and Skills

These are set automatically when you choose a Class and Level. However, if I wanted to change one of these manually, I could do so by unchecking “Auto Calculate Stats” and editting them to my tastes.

Note that changing an NPC's skills may change what equipment they choose to use and wear! NPCs are (somewhat) intelligent, in that they will first try to equip armor or weapons that match their best skills. For instance, if I were to give Kevaar an Ebony Cuirass and a Netch Leather Cuirass and his Light Armor skill is higher than his Heavy Armor skill, he may still choose to wear the Netch Leather Cuirass, even though it's a worse piece of equipment. I would have to take his Netch Leather Cuirass away from him, or edit his Heavy Armor skill to be higher.

Head and Hair Listing

Unfortunately there is no easy way to preview these within the CS itself, and you must either pick these by trial and error, or by referring to a head and hair guide like this one on Morrowind Modding History. I chose b_n_dark elf_m_head_07 and b_n_dark elf_m_hair_21 for Kevaar, but if you are modding for Tamriel Rebuilt or Project Tamriel, this is a great opportunity to make use of some of the new meshes available! Be aware that not every head or hair is appropriate for your NPC, though.

Items

This governs what is found in a NPC’s inventory when slain or pickpocketed, and what the NPC wears. Note, as stated before, that the Morrowind engine automatically equips the best items for a NPC's skill set, which then makes it impossible for those items to be pickpocketed. For instance, if I wanted Kevaar to have access to a pair of Medium Armor boots for the player to steal, I would have to make sure the boots he wears are either more valuable, or belong to a skill he is better at than the boots I want to be pickpocketed. As with heads and hair, be aware that not all clothes are going to be appropriate for your NPC per the guidelines.

For the purposes of my quest, I don't intend Kevaar to get involved in combat, so all I want to do is make sure he has some clothes on. I will not put the quest ring in his inventory, because giving this to the player will be handled by a script later on, and giving it to him now would cause duplicates.

Spells

These are automatically chosen dictated by the character’s Class and Race. But if I wanted to add some special spells to the NPC, I could do so here after unchecking the "Auto Calculate Stats" box. If working on a quest that takes place outside of Morrowind, "Auto Calculate Stats" should always be unchecked to prevent your NPC from knowing spells associated with the Tribunal Temple (for example) despite not even knowing what a Vivec is.

After setting all these attributes to my liking, I will click the Save button. I will also save my mod file!

Placing Kevaar: Keep Him From Wandering Off!

A player can’t talk to an NPC that isn’t in the game world! I will also want to pick a spot to put my new Kevaar NPC. Since placing objects is already handled in other tutorials (see also NPC Guidelines), I will only draw attention here to the Wander mechanic for NPCs.

Wander is a script automatically assigned to NPCs that makes them randomly walk about on their own. Most NPCs in exteriors will have this, while most NPCs in interiors won’t, as they have a tendency to climb on tables or get stuck behind crates otherwise. I want to put Kevaar in Seyda Neen’s Lighthouse, an interior, so I’ll want to make sure he doesn’t Wander.

To do this, I’ll want to open up his NPC window, and click on AI, which brings up the following window:

Questtut-aiwindow.png

In the list of AI Packages there should be one called Wander. I will double-click this, and set the distance to 0 (like in the below image). I will then click Save in each window to save the change. Now Kevaar will stay put and not wander off.

Questtut-aiwander.png

The other options in this window I will leave alone. They govern things like how often Kevaar plays certain animations like yawning or scratching his neck (Idle Chances), how much he wants to pick a fight with the player (Fight), how cowardly he is (Flee), and how likely he is to turn around and greet a player walking near him (Hello). For my simple quest, the default values will do just fine.

Creating the Ring

Next, I want to create the ring. This is most easily done by finding an existing ring and tweaking it to my liking rather than making an entirely new one. First I will go to the Clothing tab (shown below) and find a ring that seems close to what I want my quest ring to be.

Questtut-clothingtab.png

I’ve picked ring_keley. To create my ring from this one, I right-click on ring_keley, and click Edit. I then give this ring a new ID and click Save. I want to be very careful to tell the editor to create a New Object in the dialogue window that pops up, or else I will replace the existing version with my quest version, and thereby may break both my quest and any others that use ring_keley!

After saving my quest ring under a new ID, I can tweak the quest ring to my liking, such as changing the in-game name, the enchantment, or the value.

Pro Tip: Since enchanting an item in-game will change its ID, a good way to keep players from accidentally breaking quests is to give them quest items that already have an enchantment. Alternatively, setting the Enchantment subfield's value to 0 ensures players cannot enchant the item because nothing will fit on it.

Since I don’t intend the player to be keeping this ring, I’m going to keep the value trivial. I've decided to change the enchantment, however, so it's not a direct copy of Fargoth's other ring. New enchantments can be created in the Enchanting tab of the Object Window, but for now, I'm going to be lazy and choose one of the pre-existing ones.

Questtut-newring.png

Pro Tip: Even though they can't be enchanted, you may also see Enchantment values on books and scrolls. This is primarily is a way of organizing the in-game inventory for the player, as the inventory organizes first by enchantment strength and then by alphabetical order. Most important quest books will thus have an Enchantment value of 100 to put them at the very front of the list.

I will also want to make sure the script window for my ring is EMPTY, so that this ring doesn't inadvertently affect any quests or events the original ring was a part of!

Creating a Reward

Finally, I also want to give some consideration to what reward to give to the player once they have completed the quest. While most quest designs will specify the reward, mine didn’t, so I will have to come up with something. As appropriate to the ease of the quest, I think I will have Kevaar reward the player with 50 gold and a low level item. Though I could create a new, unique low level item to give the player, I don’t want to make more work for myself, and instead will choose something out of the existing item list. I want to be sure I pick something with a count greater than 1, so I don’t inadvertently give the player something that is a unique item for another quest.

I chose to give the player a silver staff. I do not need to place this reward in the game anywhere, as like the ring, giving it to the player will be handled by a special script.

I am now ready to go on to crafting the dialogue!

Dialogue Basics

Writing out the dialogue is arguably the biggest part of the quest creating process that also requires the most creativity. Tips for writing good dialogue are given in the Writing and Dialogue Guidelines, so I will be focusing mainly on how to handle all the logistics of implementing dialogue using the Construction Set.

Topics-Based Dialogue vs. Tree Dialogue

The first thing to understanding Morrowind dialogue is that it is topics-based Dialogue, rather than the Tree Dialogue you may be used to in other games like Skyrim or Neverwinter Nights. What this means is that the dialogue is organized by topics which the player can pick out of a list to ask the NPC about. The flow of conversation and how the player character is asking about the topics is largely left up to the player’s imagination.

This contrasts to Tree Dialogue, where the writer of the game has taken the liberty to write out exactly what the player character is saying to the NPCs. While Tree Dialogue is possible to code into Morrowind’s engine, the writing of it has to be done carefully so as to allow the player the flexibility of roleplaying their character however they want.

Top-Down Processing

Besides being topics-based, the other important thing to understand about Morrowind dialogue is that the game engine processes dialogue in a top-down fashion. When you open up any Topic in the Construction Set, to the right you will see a window that lists all the possible responses for that Topic, called Responses. The engine goes through these Responses from top to bottom, checking to see if each Response matches the parameters you've given in the Speaker Conditions section. It stops once it finds one that does match, and this is what gets spit out at you in the game itself.

As far as developing quests goes, we then have to be very careful of tagging each Response with conditions so that it shows up only when we want it to. The engine will pick the first response it sees that even remotely matches the right conditions, meaning the most general Responses should be put at the very bottom of the list.

Questtut-speakerconditions.png

(This is just an example of the Speaker Conditions box. Don't actually create this. If you like, see if you can sharpen your modding skills and determine when this Response would show up, based on the parameters!)

Below is a quick list of possible parameters and when you might make use of them:

ID

Here you can pick the ID of a particular NPC. Once selected, only this NPC can say this Reponse.

Race

This narrows down the speaker to a particular race. For instance, you may want Argonians to have a different response to a slavery topic than a Dark Elf. Note that this field should generally not be used to detect Khajiit as Tamriel Data adds a number of new Khajiit forms that are technically different races and you can only select one option here. When writing a response that makes use of Khajiit's special grammar, you should prefer to use the T_Local_Khajiit local variable instead.

Class

Similarly, speakers can be narrowed down to a particular NPC class. For NPCs, classes also are often the NPC's profession, so be sure to check out the available list of classes to see which ones may be most applicable and consult the guidelines when in doubt.

Faction

This limits the dialogue to NPCs who only belong in a certain faction. Remember that NPCs can only belong to one faction at a time.

Rank

This limits the dialogue to NPCs who have the rank selected, or a higher one. A faction must be chosen first before this option becomes available.

Cell

This limits dialogue to only appear when the NPC is placed in the given cell, or any of the cell's child cells. This is most useful for rumors that only appear in certain towns, or for NPCs making comments about the building they're in. If the NPCs move out of the cell, the dialogue will no longer show up, so you want to be careful selecting this option if the intended speaker(s) move(s) around.

PC Faction

The player has to belong to the selected faction for the dialogue to become available.

PC Rank

The player has to be of a certain rank for the dialogue to become available. You must first choose a faction for this option to become available.

Sex

This is to limit the dialogue by the NPC's gender. (For dialogue that is based on the player's sex, see Function/Variable)

Disp

This stands for Disposition, or the number in the blue bar that denotes how positively the NPC sees the player ingame. For this dialogue to appear, the NPC's Disposition number must be greater than or equal to the number in the Disp box.

Function/Variable

This section has a series of boxes that allow you choose more complicated variables than the ones above. I've listed out some of the more commonly used ones below.

Item

The player must have the specified number of Items. Note that generally you do not want to use the = operator, or else the player must have exactly this amount of items, no more and no less!

Journal

The player must be at the specified stage (index) in the quest journal. A majority of your dialogue entries for quests will make use of this function, so I will go into how to make use of this later. Note that you can specify the quest as well as the index. This is particularly useful for making quests that are part of a series, or refer to events that went on in other quests!

Global > PCRace

The player must belong to the specified race. Note that the value for race is only set once in character creation, so this function may break when working with mods that add more playable races. Each number refers to the races in alphabetical order, like so:

1 Argonian
2 Breton
3 Dark Elf
4 High Elf
5 Imperial
6 Khajiit
7 Nord
8 Orc
9 Redguard

Function > PC Sex

The player must belong to the specified gender. Males have a value of 0, while Females have a value of 1.

Function > Weather

This dialogue only shows when the weather of the appropriate sort is happening outside. Very useful for Khajiit complaining about the rain! This may not work as intended while in an interior cell.

0 Clear
1 Cloudy
2 Foggy
3 Overcast
4 Raining
5 Thunder
6 Ash
7 Blight
8 Snowing (Bloodmoon required)
9 Blizzard (Bloodmoon required)

Okay, that’s great and all, but where do I start?

That, my friends, depends on how you like to write dialogue!

Different quest writers will do this step differently. Some will start with the topics they want to fill in and write to suit; others will just write out a natural conversation and then pick their topics based on what they’ve written.

Whichever route you choose, you'll want to create the topics for your dialogue next. As far as my "Kevaar Finds A Shiny" quest is concerned, I then want to pick a few topics that the player will be using to speak with the NPCs involved in the quest. Good quest design normally has three different kinds of topics. I will go through these one by one.

Main Topic

The main topic is used for starting the quest and moving it along its updates. For sake of simplicity, you generally want to keep this to a single topic that is completely unique to your quest.  

Creating the Main Topic

For my simple quest, I have decided that the main topic that starts the quest is called “ring I found”, since just "ring" would probably be too general and already in use by another quest. To create this topic, I first right-click anywhere in the Topic list and select New. (It does not matter where in the list you click to do this). I then type in my topic exactly to be “ring I found” – misspelling this could mean my topic doesn’t appear correctly, and as there is no way to edit a topic name once made, I want to be very careful I get this right the first time!

Questtut-newtopic.png

Once the topic is created (seen above), I navigate over to the Responses tab (large field towards the top, see the image below) and right-click to create a new Response. In the top box, I write out what I want Kevaar to say about this topic:

Questtut-topictext.png

Then I fill in the Speaker Conditions. For instance, I want to make sure this Response only comes from Kevaar, and so select him in the ID box. I also want to make sure it only appears before the player is on the quest, so I fill in a Functions/Variable slot with Journal "Quest_ID" < 10.

Pro Tip: The Conditions I chose here should be specific enough that the Response doesn’t shows up when I don’t want it to, but I might want to give some thought to peculiar circumstances. For instance, if Kevaar were to have a script that made him appear in Vivec every Morndas, would I still want him rambling on about the ring he found while in Vivec? If I didn’t, I’d also want to select the Cell to only read Seyda Neen or perhaps more specifically Seyda Neen’s Lighthouse.

Now, as this is my main topic, I also want to add Responses in here that will appear at all stages of the quest to progress it. A good rule of thumb is to have a Response for each of these general stages:

  1. When the player first asks Kevaar about the quest.
  2. If the player rejected the quest.
  3. When the player has accepted the quest and the quest is still in progress.
  4. When the player returns to Kevaar for their reward (quest completion).
  5. After the player has completed the quest successfully.

Getting these steps to appear at the right time means making wise use of the Journal. Remember the Journal index numbers we chose? (If not, be lazy and click on the dialogue button in the toolbar again. You can have several of these windows open at once!) We use these to reference which stage of the quest the player is on, using the Journal function and simple mathematical logic. My list of responses for the "ring I found" topic now look like this:

Questtut-journalfilter.png

Or, in plain text, like this:

  • Journal "TR_KevaarShiny" = 10: "Have you figured out who owns the ring yet?"
  • Journal "TR_KevaarShiny" = 50: "You know who it belongs to? Excellent! I'll return it to them. Don't you worry!"
  • Journal "TR_KevaarShiny" >= 60: "Thanks for all your help finding the owner of the ring!"
  • Journal "TR_KevaarShiny" < 10: "Yes! I found it in a barrel on the docks. I wonder who was lazy enough to leave it there? Ask around town and see if anyone's missing a ring!"

Note that the entries that include the < and >= operators are at the very bottom of the list, as they are less specific than the ones with the = operator! After finishing all the “ring I found” Responses that are specific to Kevaar, I want to consider the other NPCs that are involved in the quest. In my quest design, I see that I wanted the player to talk to the NPCs around Seyda Neen to find the rightful owner. To do this, I create another Response, as shown below:

Questtut-lowerresponse.png

Then I fill in the Speaker Conditions to have "Seyda Neen" for the Cell condition. This means all NPCs located in Seyda Neen will have this Response. As this is a less specific Response than Kevaar’s dialogue (and eventually, Fargoth's), I want to move it to be under his in the list, or else Kevaar will say this instead of his own personalized dialogue. I do this by selecting the Response in the Response box and using the Left or Right arrow keys to move it up or down. Note that it is never correct to assign dialogue to every NPC in a cell. To allow certain NPCs (say, a mute) to opt out of your response a NoLore filter must be added.

Next, similar to Kevaar’s response, I want to consider writing Responses that are applicable to each quest stage. So long as I am sure to tag each Response with the Journal Function, it is not necessary to write a Response for each stage – the topic will simply not appear when there is no Response for it. I do, however, want to make sure all the Responses are ordered correctly so that the most general greetings are at the bottom. So I might have this:

  • Journal "TR_KevaarShiny" == 10: "I hear Fargoth has lost a ring recently. Why don't you ask him?"
  • Journal "TR_KevaarShiny" == 50: "I'm glad you found out who owned the ring. Has Kevaar given it back yet?"
  • Journal "TR_KevaarShiny" < 10: [I do not have to write out an entry for this journal index, as the player will come across the "ring I found" dialogue first through Kevaar. Giving other NPCs a Response to this before the quest begins may lead to this dialogue randomly showing up before the player discovers the quest.]
  • Journal "TR_KevaarShiny" >= 60: [This is another journal index that I don't have to write a response for, as it handles any dialogue that might show up once the quest is completed. Memes not withstanding, I don't imagine other NPCs will have much to say about Fargoth's ring after its returned to him, and so not creating a response for this will mean this topic will disappear for other NPCs.]

The final NPC included in the quest is Fargoth himself. Like Kevaar’s dialogue, the only Speaker Conditions I need to worry about is the ID and the Journal function. I also want to make sure the Responses are higher in the list than the more general responses tagged for Seyda Neen. (It should not matter whether they are higher or lower than Kevaar’s Responses.) These are the ones I added:

  • Journal "TR_KevaarShiny" < 10: [Like the Responses tagged to Seyda Neen, there is no reason for Fargoth to have a topic about the "ring I found" until the quest starts, so I will not create a Response for this journal index.]
  • Journal "TR_KevaarShiny" == 10: "Kevaar what? He found a ring? It's my ring, I'm sure of it! Please give it to me."
  • Journal "TR_KevaarShiny" == 50: "Please go talk to Kevaar. Make him give me back my ring!"
  • Journal "TR_KevaarShiny" >= 60: "Thank you for helping me find my ring! Again..."

Now, as you can see in the below image, the topic "ring I found" looks nicely populated with new dialogue Responses! Check once again that your Response order is correct, and be sure to SAVE your mod so you don't lose all of your hard work here!

Questtut-finaltopic.png

Greetings

Now that the meat of my quest’s dialogue has been implemented, I want to be sure the player can find it! This is most often done through use of the Greetings. Greetings are what the player sees whenever they greet NPCs and before they click on anything in the topic list. In the Construction Set, the Greetings work the exact same as the Topics, except that they are under a different tab called (obviously enough) Greetings.

Greetings can also be used to characterize the NPCs in my quests, add detail to the worldspace, or give the player reminders that they are on a quest at all.

Creating the Greeting

First open up the Dialogue window and navigate to the Greetings tab. Unlike in the Topic tab, you will see Greetings are labeled from 0-9 instead of using specific titles (see the image below). Each of these Greetings are used for different purposes in Morrowind. Like the Topic Responses, Greetings follow the Top-Down logic. However, unlike with normal Topics, after the engine goes through all the Greetings in Greeting 0, it then moves to Greeting 1, then to Greeting 2, etc, until it finds the first Greeting that matches the parameters it needs. This means that the higher number Greetings often have very specific Speaker Conditions, and tend to be used for quests and events that have the potential to override everything else.

Questut-greetings.png

See the Writing and Dialogue Guidelines for a full list of what all the greetings do. For the most part, you will be using Greetings 5 for quests, occasionally branching into Greetings 0 or 1 in special circumstances.

So why are Greetings important, beyond making your NPCs not sound like every other Average Joe out there? Morrowind dialogue is coded to not overwhelm the player with choices, so topics do not appear unless the player knows them. The player can learn a new topic through the AddTopic script command or by having the topic show up in a Response while speaking to an NPC with an available Response for that topic. And so, the best way for the player to find our main topic is to mention it specifically in a Greeting!

To do this, I first navigate to the Greetings tab and click on the Greeting number I want to use. Let’s choose 5. Next, I right-click in the Responses tab to make Kevaar's Greeting. Just like his other dialogue, I want to give this Response specific Speaker Conditions tailored to Kevaar's ID and the player's progress on the quest.

  • Journal "TR_KevaarShiny" < 10: "Hello there! My name is Kevaar. I'm new here just like you, but I've already found some great shinies. Look at this ring I found! See how it glitters?"

I also want to make sure other mods cannot inadvertently render my quest inaccessible (by adding a topic called "this ring I found" for example) so I will add AddTopic "ring I found" to the Result field. Don't forget to use quotes if your topic contains spaces!

Now a note on good modder etiquette: it’s good practice to scroll through the Greetings until you find other similarly Conditioned Greetings to put yours with, and put it somewhere in the middle of those. Not only do we make sure the Top-Down dialogue logic processes correctly and the right characters say our dialogue, the other reason we do this is that the Morrowind engine references dialogue Responses by remembering what comes right before and right after your Response in the list. Taken alone, your mod won't break if you put your dialogue at the top or bottom of a chunk of similarly conditioned dialogue, but when added into a loading order of a bunch of other different mods, it is more likely that several Responses will compete for the top slot, and cause incompatibilities between mods.

Pro tip: Tamriel Rebuilt and Project Tamriel have their own placeholder Responses for greetings and commonly-used topics. If you are working on our projects, and if the placeholders exist for the topic/greeting you are editing, make sure to put your new dialogue in-between the respective placeholders! This is very important for ensuring that errors do not creep in.

With this in mind, for our simple non-TR/PT quest, I am going to put my Greetings in between the dialogue for Ronerelie talking about the Dwemer museum and Hanarai babbling in 6th House speak, as shown here:

Questtut-greetingposition.png

Other Greetings

For many quests, simply creating a Greeting to introduce the main topic is enough. I don’t have to make Greetings for other NPCs in the quest or for each quest stage unless I really want to punish myself. Usually, additional Greetings are to help characterize the NPCs in my quest (for instance, an impatient NPC constantly badgering the player to finish their tasks), or to help remind the player where they are if the quest is a particularly long one. If there are no more Greetings, the engine will simply keep going through those available, usually landing on one that is specific to the character’s Cell, Race, or Faction.

That said, it's a good idea to playtest what Greetings Kevaar, Fargoth, and the other NPCs involved will default to if I don't give them more Greetings. Some may not fit the tone of the quest, so you will need to add specific greetings there.

Secondary Topics

Technically these are no different from main topics, but I make the distinction based on how they are used in simple quest design. The secondary topics are topics that give background information on the quest. These may or may not be important to furthering along the quest itself. In Kevaar Finds a Shiny, I might use the topic "shinies" for Kevaar to ramble on about how much he likes shinies, further characterizing Kevaar and giving a clue as to how he found the ring to begin with. Or, I might use the topic "tit for tat" if one of the NPCs in my quest wants the player to complete an additional task before telling the player who the ring belongs to.

Creating Secondary Topics

In this step, I want to go back and add any secondary topics I have left. They are created in the Construction Set just like main topics. Also just like main topics, they have to be introduced to the topic list through the dialogue of the NPC who will be speaking them or called through a script, and you want to be careful with their Speaker Conditions so that they only show up when you want them to.

Kevaar has already spoken about "shinies" in his Greeting, so creating a secondary topic is simple. First I navigate to the topic list, right-click anywhere in it, and then type in "shinies" (again, watch your spelling). Then I navigate over to the Response window, and type in a Response:

Questtut-secondarytopic.png

I also want to give some thought on whether I want this Response to appear before, during, or after the quest. As nothing in Kevaar's Response up there references the quest, I am okay with it appearing anytime, and so I will only condition it with his name to keep it unique to him. Remember to use AddTopic in your Greeting if you want to be sure these additional topics are available!

Secondary topics can also be used to add additional quest steps or sidequests. Creating these is beyond the scope of my simple Kevaar Finds A Shiny quest however, and I will address it in another tutorial.

Tying It All Together

Quest Journal Updating

My simple quest is almost done! The last thing I need to do is make sure the Journal is updating to the next index as the player completes the steps. First, I take a look back at my Journal indexes to see what steps I need to be sure to include. I have three:

Questtut-finishedjournal.png

That is, in plain text:

  • Journal Index 10: "Kevaar found an abandoned ring. He's asked me to find its owner."
  • Journal Index 50: "Fargoth says he is the owner of the ring Kevaar found. I should make sure Kevaar knows this."
  • Journal Index 60: "Kevaar thanked me for finding the owner of the ring and assures he will give it to Fargoth."

As this setup includes three Journal entries, I will need to be sure to add at least three update scripts somewhere in my quest. Some quests will put these updates in scripts attached to Objects or specific events, but as my quest setup is simple, I will put them in the dialogue. This is done by going to the Results window of the appropriate dialogue Responses and adding in this line of script:

Journal "TR_KevaarShiny" #

...where # is the journal index that I want the quest to be updated to.

In my quest setup, the first update comes when Kevaar offers the quest. I will then navigate to the Response that reads "Yes! I found it in a barrel on the dock..." and add Journal "TR_KevaarShiny" 10 to the Results window, like so:

Questtut-resultfield.png

Then I will go on to add the update script for index 50 to Fargoth's Response that reads "Kevaar what? He found a ring? It's m..." and the update script for index 60 to Kevaar's Response that reads "You know who it belongs to? Excellent..."

After I have done this, I will want to save my mod and test it out in-game. This way I can also judge if I need to add any more Responses, Secondary Topics, or Greetings to improve the flow of the quest.

Giving the Player a Reward

Finally, I want to give the player a little something for finishing up my simple quest. I refer back to my simple quest design, which says I wanted to give the player a silver staff and 50 gold pieces for completing the quest. In the same Response that finishes the quest ("You know who it belongs to? Excellent..."), I will then add this line of script to the Results box, in a separate line from the script that updates the quest Journal:

"player"->AddItem "silver staff" 1

This tells the game engine to give 1 (one) item with the ID of "silver staff" to the player. I also see in my quest design that I wanted to give the player 50 gold pieces. Gold pieces are objects just like an other item in-game, and so I add this in another line of script:

"player"->AddItem "gold_001" 50

Now the player should get 1 silver staff and 50 gold pieces for their trouble. Brilliant!

Questtut-reward.png

After doing one more playtest to make sure everything is implemented correctly and Kevaar isn't shy about giving out the quest rewards, I have finished my simple quest!

Congratulations! You've finished this simple quest tutorial in which you've learned how to create dialogue, NPCs, items, and tie them all together into a quest using the quest journal. To look at some other ways of implementing more complicated quests, including why I bothered making a ring when I never actually used it in this quest, please refer to the Quest Guidelines and the next tutorial in this series! Happy modding!