Repeatable Bounty Quests Game: TESV: SkyrimThis module shall teach how to make an agent give out quests for multiple locations. Again, these will be bounty-type quests which are repeatable. And I have found they are also bullet proof (as in, stuff only goes wrong if I make a mistake somewhere, otherwise they are solid). As time goes on, I will add more and more to this idea, hopefully.
1). Open Creation Kit, find the mod you've been working with lately, bla bla.
Firstly, let's make the NPC quest-giver.
2a).
OBJECT window > ActorsGive the quest-giver an ID, Name, and Short Name. I am naming him aaaQuestSteward for the rest of this tutorial. I am also suggesting "Steward" for his or her Short Name.
The most important thing about the NPC quest-giver is to make sure he or she is Unique. Toggle this on, and click OK.
2b). Follow the tutorial found here if you are unfamiliar with setting up an NPC. with these features being most important.
Traits tab: Voice Type. Make sure the NPC's Voice Type is one which is supported by the game.
Stats tab: The Class scroll-bar can be set to Citizen in most cases, especially if he or she is going to be put into proper society (not enemy territory).
Everything else about the Quest Steward (Factions, AI Packages, etc.) can be customized to your liking.
2c). Place the NPC into a Cell somewhere. WhiterunDragonsreach01 for instance. Make sure to remember which cell you put the NPC into, this is going to become important later.
3). OBJECT window > Character > QuestRight-click > New into the main window.
3a). Give the quest an ID and Quest Name. For this tutorial I am naming the ID aaaBountyQuests (though in my game, its ID is more specific) Priority can stay at 50. Toggle Run Once off.
3b). Click OK, save from the main toolbar, and reopen the quest.
3c). Put the Type scroll-bar to Miscellaneous.
3d). In the Object Window Filter slot, type
Bounty Quests\ and make sure that backwards slash gets typed in. Now, your quest will appear in the Character > Quests > Bounty Quests section of the Creation Kit, making it even easier to find.
4). Quest Stages tabSix stages in total will be used. I am numbering them 0, 10, 15, 20, 30, and 50.
Stage 0: Left-click on 0. Now right-click > New into the top Log Entry window, and leave it alone, so it says EMPTY. Stage 0 is a pre-quest stage, so type ;Pre-quest into the Papyrus Fragment box.
Toggle Start Up Stage on.
Stage 10: During this stage the Quest Agent tells the player all the places there are to delve. These places will get added later, of course. Do all the same with the Log Entry window, so it says EMPTY. In the Papyrus Fragment box, some notes to self (aka documentation string....) can be added with a semicolon, such as ;Quest Agent greets player, offers locations.
Stage 15: Do all the same with the Log Entry window. During this stage there's going to be a crucial moment when the player-character inquires about the first location to go to. Or not. Documentation can be added into the Papyrus Fragment box.
Stage 20: This stage gets triggered after the PC chooses the first place to go. In my game, this is Morvunskar. Do all the same with the top Log Entry window and Papyrus Fragment box.
Stage 30 This stage gets triggered after the enemy gets pwned.
Stage 50 And here is the final stage, which gets bumped to after the PC returns to the quest agent, and gets a reward for pwning whichever enemy boss. Though this is technically the final stage, do NOT toggle Shut Down Stage on.
The Creation Kit often has two ways of doing the same things, and this is true with dialog. Modders can use the Dialogue Views window
(example) or Player Dialogue
(example). I prefer Dialogue Views, so that's what's described below. Those who prefer Player Dialogue can still figure out what's below, as this latter method is similar to what's found in the editors of earlier games.
5a).
Dialogue Views tabRight-click > New into the tall Dialog Views window. Type whatever unique ID you'd like. For this module I am typing aaaDialogIntro.
5b). Click OK. Click OK again (closing the Quest window) and save from the main toolbar.
Now. Repeat after me: Branch > Topic > Info > Response. This is the typical way conversations between PC and NPCs are structured in the Creation Kit.
A new dialog Branch gets started whenever a new instance of dialog is begun. And each Branch can have one or more Topics (which are what we click on after an NPC has greeted). Each Topic leads to an Info, and each Info can hold one or more Responses (which are spoken by NPCs during conversations).
Again: Branch > Topic > Info > Response.
5c). Reopen the quest. Its Dialogue Views page should open by default.
5d). Left-click on the initial ID (in the tall, vertical window). Now right-click > Create Branch into the larger window. The name for this branch can be aaaBountyQuestStartBranch, though it can be named whatever is desired. Click OK. The CK will automatically put the word "Topic" at the end of the ID's name.
5e). In the larger window, there should now be a yellow box (representing the quest's opening Branch) and a smaller box within the Branch box. This smaller box has a horizontal yellow area (representing the branch's opening Topic, which has not been written yet) and a white area, (representing the Topic's Info + Response, which have not been written yet).
Note: If that yellow box doesn't show up, go to another tab (such as Quest Data) and come back to Dialog Views.
5f). Double left-click into the white area inside the yellow box. The Topic panel opens. Type an opening topic into the Topic Text slot. For now I'll type Adventures into this slot. Click OK. Click OK again.
Note: During the first OK click, the CK does a quick spellcheck, making sure the opening Topic is spelled correctly. If it is, nothing happens, so OK gets clicked again.
From here on, it's possible to continue using the Dialogue Views tab. If not, switch to the older-fashioned Player Dialogue tab. Since I am trying to learn Dialogue Views, that's what most of this shall discuss.
5g). Double left-click into the white Topic Info area.
5h). Right-click > New into the gigantic Info window. The New Response panel pops up.
5i). Type some Response Text. "Yes we have a few problem areas which need addressing. Bandits, necromancers, witches, they must be STOPPED!" Click OK.
The larger, more detailed Topic Info panel pops up. Fill in the Prompt slot "I have heard the Jarl wishes to see some areas eradicated?" This is the first dialog topic which gets seen in-game. If the Prompt slot is left empty, I'll see Adventures (the actual Topic name) instead.
5j). Right-click > New into the Conditions window. Conditions go like this...
GetIsID aaaQuestSteward == 1.00 AND
GetStageDone QuestName, 10 == 0That second condition obviously tells the quest agent to say this opening bit of dialog if Stage 10 has not been done yet. This is a nifty new feature not found in Oblivion's Construction Set, and it works better with these repeatable quests of Skyrim.
Make sure to right-click > Copy All Conditions, so both of these conditions can get added into later portions of the quest.
5k). Type
GetOwningQuest().SetStage (10) into the End: Papyrus Fragment box. A blue cross should show up in the Script Name window. Copy this command, so it can be conveniently pasted later on.
5l). Click OK. Click OK again, and save.
6). Quest Data tabMake sure Start Game Enabled is toggled on. Later on, it's going to automatically get toggled off, but for now leave it on so the dialog written so far can be tested.
Tip: It's a good idea now to open up TES5Edit and make an SEQ file (or update it) for the mod, as detailed in this post. Next, go into the game itself, and speak to the Quest Steward. Make sure that opening Topic (and its Response) both show up. Obviously if that Topic and its resulting Response are not in the game, this needs to get addressed.
Close the game, and return to the CK. It's a good idea to keep following this process when making Skyrim quests, just to confirm everything is showing up in the game.
7a). QUEST window > Dialogue Views tab Left-click on the initial ID in the tall left window, so the yellow box shows up again in the right window.
7b). Toggle
Show All Text on (this is at the bottom of the panel) to see all the text typed so far. Sometimes the Branch's Topic won't show for some reason, but the first Response should be seen in the Info's white area.
7c). Right-click into the Branch area, which is the outer yellow part of the box. Choose Add Topic.
7d). Make a unique ID. In my game, since my first location is going to be
Morvunskar, I typed aaaMorvunskarTopic for this ID.
This quest is eventually going to assume several locations are going to get added, just like the repeatable Oblivion Bounty Quests in this thread. So...
7e). Type the name of the first location into the Topic Text slot. For my game, I just typed Morvunskar. Click OK.
So let's recap. So far within this Branch (which I called aaaBoutyQuestStartBranch in my own game) are two Topics: the opening topic, and what shall become the first locational topic. In my Creation Kit, I seldom see the opening topic, but the locational topic often shows up, in the Topic (upper white) area of the yellow box.
7f). Double left-click into the lower white area.. Now right-click > New into the large, lower window.
7g). Type the Quest Steward's first locational response. "Aye, Morvunskar, retched place...." The steward then explains whatever details seem pertinent. "Was once a glorious fort filled with Nords, and now, it's nothing inside but nefarious necromancers! Have ye any interest?"
7h). Click OK. The Topic Info panel pops up.
7i). Add some text into the Prompt slot, if desired. As mentioned before, whatever goes into this slot is the topic we click in the game. If nothing gets added into the Prompt slot, we'll merely see the Topic Text typed earlier.
7j). Paste the two previous conditions into the Conditions area, but make sure to change the GetStageDone gets changed to ...
GetStage aaaBountyQuest == 10.
Right-click > Copy All Conditions these two conditions.
7k). In the Papyrus Fragment box, paste the command copied during step 5k, but change 10 to 15. Overall it'll say
GetOwningQuest().SetStage (15) 7l). Click OK, and Click OK again.
So now we've got two topics located in one branch. But they are not "linked" together yet. If you were to go into the game now, the NPC steward is going to start by presenting his/her initial Topic ("Yes we have a few problem areas") but the following, locational topic may or may not show up properly.
First I am going to teach how to link them together using the Dialogue Views window, then I'm going to teach Player Dialogue. For those who wish to learn the Player Dialogue way, skip to Step 8a.
7p). Single left-click on the opening topic's upper (white or yellow) area. Now move the cursor down into the Info/Response (lower white) area. The cursor should change into a hand.
7q). Click and drag the hand from the opening Info/Topic are to the locational Info/Topic. It is now very obvious these two topics are connected. Easy as pie.
For those who prefer to use Player Dialogue, here's how to link those topics. (I'm going to pretend I didn't just link them).
-------------------------------
8a). Player Dialogue tabThe opening Topic should be at the top of the middle section. Left-click on this, and double left-click on the Topic Info.
8b). At the far right side of the panel is the Link To section. Right-click > Add Link into this window. The locational topic should show up in the Select Topic panel.
8c). Select this topic (duh), and press OK.
---------------------------------------
By the way, don't forget to make recordings (or mock recordings) of all the dialog typed so far. Follow step 11p
of this post if reminders are needed. Or just Google "Creation Kit recording voices," and hope to find something on YouTube.
Now it's time to make the NPC enemy, heh heh!
9a). OBJECT window > Actors > ActorRight-click > New into the Editor ID window.
9b). Give the enemy an ID, Name, and Short Name. Toggle Respawn on. Toggle Unique on. Click OK.
Note that there are two ways to make an enemy:
a ). we can make him or her Unique (toggling Unique on) and then clicking OK. Using this section will create an enemy who is pretty much the same every time.
b ). ... Or we can go into the Template Data area, which is in the lower-left corner. Change ActorBase to whichever selection is appropriate. Using this section will create an enemy which is different every time (similar to using enemies created from Leveled Lists).
Only Method A (static enemy) reliably works, though. Using Templates will not work, the script which gets added later can be attached to what is essentially a random enemy, but the script itself won'd be able to trigger the quest to Stage 30. So ignore Method B.
It will be necessary to go into every pertinent tab (Traits, Stats, Factions, etc.) and fill in all those blanks. This allows the modder to create a very specific enemy, who will be more similar every time. The enemy's level can be varied a bit, if PC Mult is toggled on, and his/her Inventory can also be varied if Leveled List items are thrown in there. Otherwise, this enemy's always going to be the same, look the same and so on.
Make sure to go into the enemy's AI Data tab. Make this guy Very Aggressive if we want him or her to attack on sight!
Another method is to use Bethesda's method, which is to make it so that Stage 30 gets set once an entire lair gets cleared. I don't know how to do this yet, but even if I did, I prefer the specific enemy OnDeath method (described below) anyway. It's just more predictable. The game won't try to consider any enemies which get stuck in walls, or fall through the cell's floor.
9c).
CELL + Render windowsPlace the enemy into its appropriate lair and give him or her a Reference ID.
Tip:It's a good idea to put this enemy deep into the lair, so it'll feel like he or she is the actual leader, who must be clawed and searched before he/she gets found! On the other hand, for those who are just testing this quest (to make sure all its stages get updated without traveling all that way) the enemy can temporarily get dumped into one of the Creation Kit's testing cells. A full list of these cells can be found in this link.
9d). Time to write the enemy's death script. Open the enemy's info from the Object or Render windows. Right-click > Add script into the Papyrus Scripts box.
9e). Double left-click on [New Script]. Give the script a unique name, like aaaEnemyDeathScript. Although I'm going for something more specific, so aaaMorvunskarDeathScript for my enemy orc. Click OK. A blue
+ with the script's name shows up in the Papyrus Scripts window.
9f). Left-click on the script, and press the Properties button. Press Add Properties. Time to give this script a Property. Change the Type scroll-bar to Quest.
9g). Change the Name to something unique. Since I am adding the first enemy into Morvunskar, I typed aaaMorvunskarDeathProperty.
9h). Click Ok, and wait for the Property to show up in the left window.
9i). Left-click on the Property, and press the Edit Value button. Now the Property should have a blue and yellow symbol next to its name.
9k). Find the parent quest in the Pck Object scroll-bar. Click OK.
9l). Right-click on the script and select Edit Source. The script has a heading and its property has been named and created, so right now in my game looks like this...
--------------------------------------
Scriptname aaaMorvunskarDeathScript extends ObjectReference
Quest Property aaaMorvunskarDeathProperty Auto-----------------------------------
The rest of the script will need to get typed in by hand. Altogether it's going to look like this....
----------------------------------
Scriptname aaaMorvunskarDeathScript extends ObjectReference
Quest Property aaaMorvunskarDeathProperty Auto
Event OnDeath (Actor Killer)
aaaMorvunskarDeathProperty.SetStage (30)
EndEvent-------------------------------------
Phew. Notice the fourth line of the script: "aaaMorvunskarDeathProperty" is what is setting the stage to 30, when the NPC enemy gets pwned. This is important to notice! ... Oblivion's Construction Set and Fallout 3's GECK both would use the actual quest name in scripts, when setting stages. Skyrim uses the Properties instead, because the Creation Kit does lots of things ass-backwards. It does them ass-backwards though, so that the game's resources run with more efficiency!
9m). Close the script editor, or select File > Save if merely checking to see if the script will save.
9n). Click OK, closing the NPC's panel(s).
10a).
OBJECT window > Character > Quest Select the Dialogue Views or Player Dialogue tab. Add a new Topic.
I won't go into as much detail now, but this topic continues the dialog choices which started during Stage 10. So now, there's an option to say "Yes, we shalt plunder X lair..." Follow steps 5f through 5i to create dialog, add voice, and so on.
10b). Conditions are as follows...
GetIsID aaaQuestSteward == 1.00 AND
GetStage aaaQuestName == 1510c). Type
GetOwningQuest().SetStage (20) into the End: Papyrus Fragment box. Click OK.
10d). Link the first locational topic to the follow-up topic just made (in which we agree to plunder that lair).
Tip: Eventually as more and more topics get added, the Dialogue Views window gets messier and messier. Toggle Show All Topics off. Now, it's easier to move these topics around to your liking. Single left-click on one of the Topics (the upper-yellow area, or sometimes it'll appear white) and literally drag the topic to wherever is desired. Its location in the window will not matter.
10e). Click OK, closing the Quest window. Save.
Again, it's a good idea to go into the game, speak to the steward NPC, and just make sure all those Topics and Responses are showing up.
So, all the dialog for starting the quest has been written, the NPC enemy has been created, now it's time to make the reward phase.
11a). OBJECT window > Character > QuestWe're going to use Player Dialogue or Dialogue Views to make a final branch (NOT topic, not yet anyway), this one dealing with getting paid. We return to the steward, he or she is able to confirm somehow that the lair's leader has been pwned, and now it's time for that reward.
Right-click > New into the leftmost (vertical) window, and for this lesson I'm naming this ID aaaBountyQuestsReward. Follow steps 5E through 5I to make the Reward topic, dialog, and so on.
11b). Conditions go like....
GetIsID aaaQuestSteward == 1.00 AND
GetStage aaaQuestName == 3011c). In the Papyrus Fragment End box, type
GetOwningQuest().SetStage (50)11d). Click OK. And Click OK again. Save.
Time to put some messages into this quest, which will show onscreen as certain stages get fulfilled. This is done with the Objectives page, and there'll be a total of two objectives for this quest.
12a). QUEST window > Quest Objectives tabRight-click > New into the topmost window.
12b). Type 20 into the Index slot, and type "Kill X leader of X location."
12c). Perform steps 12a and 12b again, this time adding 30 into the Index slot. Type "Return to Quest Steward" in the Display Text slot.
13a). Quest Stages tabLeft-click on Stage 20. In the Papyrus Fragment box, type
SetObjectiveDisplayed (20)13b). Click on Stage 30. In the Papyrus Fragment box, type
SetObjectiveCompleted (20). Also type
SetObjectiveDisplayed (30) in the same box.
13c). Click on Stage 50. In the Papyrus Fragment box, type
SetObjectiveCompleted (30).
Click OK. Save.
14a). OBJECT Window > Items > Book
Edit a note which has the certain "look" that is desired (such as one of Bethesda's own bounty quest notes), and give this item fresh ID. Click OK, and click Yes, saving the Note as a New Form. Highlight this ID, and select Copy.
14b). Reopen the edited note, and type up a writ stating where to go, how much the party will get paid, and so on. Click OK.
Making this note a Quest Object is optional. Unlike the Construction Set, for which I made notes into Quest Items (necessary, since the actual Quest Journal was not used) the Creation Kit does not need to have this stipulation. The Objectives typed for Stages 20 and 30 will show up in the PC's Quest Journal, in its Miscellaneous section.
16a).
QUEST window > Quest Stages tabClick on Stage 20.
16b). Click on the Properties button. After the panel pops up, click Add Property.
16c). Look for Book in the Type scroll-bar.
16d). Add the book's ID into the Name slot. If this ID was copied earlier, a simple paste will suffice. Click OK.
16e). Left-click on the Property for the book. In the Pick Object scroll-bar, find the book's ID (a lot of times, this ID will already be selected). Click OK.
16f). In the Papyrus Fragment box, type
Game.GetPlayer().AddItem (aaaBookName, 1)Click OK, closing the Quest window. And save, and reopen the quest.
Tip: During step 16f other items can get added. For instance, in my game, I'll use the Properties button to make properties for potions. Select Potion in the Type scroll-bar, and add the potion's actual name from the Object window, such as HealingPotion01 or whatever. This way, the NPC quest giver gives us that note, but also gives us a bunch of helpful potions (and whatever other items) as well.
Troubleshooting: Sometimes the Papyrus Fragment box will scream error messages for all sorts of reasons, as Properties are trying to get made. A common error has to do with "Reference already created" or something such, like this...
C:\Program Files\Steam\steamapps\common\skyrim\Data\Scripts\Source\temp\ Startingquest.psc (19,13): script property NewProperty already defined
Arrgh!!! If this happens, click on the Scripts tab of the Quest window, select the ID (it'll be the only item which is selectable on this page) right-click then select Edit Source. This will open up a page full of script fragments. Scroll down until you find any script which has to do with the error(s) seen earlier, and erase these. For instance, if too many properties have been made for a particular potion, erase any script fragments which have been made for that potion's name, and then select File > Save to make sure the Script editor saves everything successfully.
More info can be found here..
http://tesalliance.org/forums/index.php?/t...ompile-scripts/
17a).
Quest Stages tabClick on Stage 50 again. Click the Properties button, and click on Add Property.
17b). Look for MiscObject in the Type scroll-down. Type Gold001 into Name. Click OK, and click OK.
17c). In the Papyrus Fragment box, type
Game.GetPlayer().AddItem (Gold001, X) with "X" being whatever you think is fair. Also type...
stop()Stop() is what causes the quest to stop running, but do NOT toggle Shut Down Stage on. This quest is now good as a one-time affair. Here's how to make sure the entire thing respawns.
18a).
QUEST window > Quest Data tabToggle Start Game Enabled off, then toggle Allow Repeated Stages on.
18b). Change the Event scroll-bar to Change Location Event. Click OK.
19a).
OBJECT window > Character > SM Event NodeRight-click > Edit on Change Location Event.
19b). You might see several nodes made for other quests, or you might just see a large window which is mostly empty. Right-click on the very top choice, which is "Stacked Event Node: Change Location Event".
19d). Select New Quest Node. A new choice called "Stacked Quest Node" should be at the very bottom of this window. Scroll down (if needed) and find it.
19e). Right-click on Stacked Quest Node and choose Add Quest. Find the quest being worked on, and lcick OK.
This page is similar to the Quest Aliases page, which is too big to fit entirely on most computer screens. So in most cases, it's time to work sideways. What I'm about to describe is from my Windows 8.1 computer, so maybe other operating systems do this differently.
19f). Minimize the Creation kit. Right-click onto the desktop and choose Screen Resolution.
19g). Change the Orientation scroll-bar to Portrait. Click Apply, and click Keep Changes. Everything is pointed to the left now! Also, note that everything I'm describing is for a Windows 8.1 system, so i have no idea how Window 7 or 10 does this.
19h). Return the CK to its full size. Highlight the Node which just got created (not its quest, which is to its right).
19i). Type aaaQuestNameQuestNode into the ID slot, changing "Quest Name" to whatever the name of the quest is.
19j). Toggle "Do all before repeating" and "Shares Event" on.
Minimize the CK (if needed), and change Screen Orientation back to Landscape.
19k). Right-click > New into the Node Conditions window and make these conditions.
GetInCurrentLoc Location: X == 1.00 AND
GetDead None == 0.00For the first condition, change the Run on scroll-bar from Subject to Player. Click on the INVALID button, and find the location where the quest agent works. Click OK.
For the GetDead condition, change the Run on scroll-bar from Subject to Reference. Press the Select button, and find the enemy's cell. If the enemy is still in the Reference window, it's easy to simply click Select Reference In Render Window and double left-click on the referenced enemy. Click OK.
19l). Click OK at the top of the SM Event Node panel.
Finally, there needs to be some "no" dialog, so the character will have a choice to pick a location to plunder, or not. Saying "No" is actually important, because it can reset the entire quest back to its pre-stage 10 again.
20). Go into Quest Stages and add Stage 29. Add some ;notes to self in the Papyrus Fragment box, and type
Stop() into this box. Click OK.
21a). QUEST window > Dialogue Views or Player Dialogue tabMake sure the enemy is still in the Render Window. Open the locational topic (this is the one which goes from Stage 10 to Stage 15). In my game, this is Morvunskar.
21b). Add a GetDead condition to this topic. Run On: Reference, and double-click on the referenced enemy in the Render window. Change the value to 0.00. Altogether this condition will read
GetDead NONE == 0.00. There should be three conditions for this topic now: GetIsId, GetStage, and GetDead. All three are needed just so the agent's information stays efficient. He or she won't blab about a location if its top leader has already been taken care of.
21c). Click OK.
22a). Reopen the Quest window (I swear this will be the last time!) Go into Dialogue Views or Player Dialogue. Right-click > Add Topic into the branch.
22b). Make a topic dealing with the PC saying "no!" Add dialog, bla bla bla.
22c). For this topic to work, all that's needed is the same GetIsID condition.
GetOwningQuest().SetStage (29) goes into the Papyrus: End box.
22d). Now it's possible to link the No topic from the quest's initial dialog ("So, you have come to assist us...") or at any point between Stages 10 and 20. This will ultimately cancel the quest's progress, sending it back to Stage 0. The only catch is, you'll need to exit and re-enter the same cell where the quest agent works. This way, the quest's GetInCurrentLoc node triggers.
23). Save everything, and test in the game. Make sure the update that SEQ file.
Note that this quest will start only if that NPC enemy is alive. Once the enemy has been killed, the quest will remain dormant until the enemy respawns (along with the entire cell he or she is in).
Note 2: After a quest is done, the character rewarded, it can sometimes take awhile for the quest to reset back to the beginning. Usually after several hours / going into different cells, the quest will then reset back to the beginning.
This post has been edited by Renee: Mar 8 2024, 06:12 PM