Fantasy
Skyrim Special Edition: Add a Custom Quest to an NPC (Part 2)

Skyrim Special Edition: Add a Custom Quest to an NPC (Part 2)

In the first part we had to meet Owen and he gave us a quest.

We need to go to Soljund’s Sinkhole, and while we fight with the draugr and collect some treasure we have to find Owen’s dagger and bring it back to him.

We are now at stage 10 of the quest and the objective displayed (10) is to retrieve the loot.

The marker points to the hidden dagger, so the next stage will change when we grab it.

To make this happen we have to add a script to the dagger itself, or more specifically to the dagger’s alias.

Let’s go back to the Quest Aliases and double click on OwensDagger to open it. On the right, where is the Script box, click Add to create a new script.

Select [New Script] click OK.

You can give it a name like “AWQowen1DaggerScript” and then Extends: ReferenceAlias (should be like this by default).

Click OK then select the script and click Properties.

Add Property. The Type will be Quest and the Name: AWQowen1 (if you use the same name as your quest it will be filled automatically, if you don’t, you’ll have to click on your property name and manually select your quest ID from the dropdown menu).

Click ok and again select your script, then right-click > Edit Source.

We have to add a piece of script that says to the game that when the dagger changes container and gets in the player inventory the quest stages progresses to 20.

Here’s what the script looks like:

Scriptname AWQowen1DaggerScript extends ReferenceAlias

Quest Property AWQowen1  Auto 

Event OnContainerChanged(ObjectReference newContainer, ObjectReference oldContainer)

if (newContainer == Game.GetPlayer())

             AWQowen1.SetObjectivedisplayed(20)

             AWQowen1.SetStage(20)

          endif

EndEvent

(of course instead of AWQowen1 you will put the ID of your quest/name of your property).

Click File > Save and if you don’t have any error messages it means everything is fine and we can close everything and move on.

So at this point, when we get the dagger, the stage 20 will start.

Now let’s go back to the Quest Stages and click on the nr. 20 and give it a log description and an objective like we did for 10.

We add a new Log Entry “I found Owen’s dagger. I should bring it back to him.” that will show up in our journal after we find the dagger.

Then we add another bit of code in the Papyrus fragment box:

SetObjectiveCompleted(10)

SetObjectiveDisplayed(20)

and click Compile.

SetObjectiveCompleted will show on your screen that you have completed the stage, while objective displayed will show the next objective.

[I just realized that I already set the objective displayed in the dagger script but it works anyway so I’m not gonna touch that XD but probably you don’t need that second line of code]

But what is the objective to display here?

Let’s go to the quest objectives and add a new one!

This time it will be 20 and the Display text: Bring the dagger back to Owen

The target ref is Owen, so we add a new one and select Owen’s alias from the dropdown.

After we’ve done this, now the map marker will point to Owen and will lead us back to Riften.

When we are back to the Bee and Barb we can go talk to Owen again. So it’s time for a new dialogue branch.

Go to Dialogue Views and select your Dialogue so you have it displayed on screen with all its arrows and boxes.

Now click on the white space underneath (not on the yellow because it’s a new branch), click Create Branch and we will repeat what we did before, but this time we have less dialogue.

The first topic will be “I’m back with some good loot and also this, I think it’s yours.”

To which Owen replies: “Ha! You’ve done it! Got to admit, I wasn’t sure you could pull it off. I’m glad they didn’t find my lucky dagger.”

This time I changed his Emotion to Surprise in the Edit Response window.

But we must add some conditions for this dialogue to happen.

The first one will be “GetStage” Quest: AWQowen1 == 20, which means that Owen will say this line only if we moved to stage 20 and we have the dagger in our inventory.

The second one, of course will be the same “GetisID” AWhOwenFollower == 1

I’m not adding anything else because I have another couple of lines.

Back to the dialogue view, right-click on the yellow square and add a new topic.

Player: Now, about your share of the loot…

Owen: Don’t worry about it. Keep it. (He is now happy)

Only condition: “GetisID” AWhOwenFollower == 1

And last topic: “Are you sure?”

Owen: No problem. Look me up if you’re ever in Riften.

Only condition: “GetisID” AWhOwenFollower == 1

This time the response it’s marked as Good bye, so the dialogue will end and you’ll have to speak to him again if you want him to follow you (more on that later).

The last thing to do is add one last line of script on the End: Papyrus Fragment

GetOwningQuest().setstage(30)

and click Compile.

Now with this one we told the game that the quest is progressing to the last stage.

We still have a couple of things to do.

Click Ok to everything and let’s get back to the Quest stages. Maybe give it a save once in a while.

Select stage 30. This is the end of our quest.

We don’t need to show anything on the log because we already did all we had to do, but we still need to add a bit of code, so we create a new log entry and leave it blank.

Then we go to the Papyrus Fragment box and we add this:

Alias_Owen.GetReference().AddItem(Alias_OwensDagger.GetReference())

SetObjectiveCompleted(20)

Alias_Owen.GetActorRef().SetRelationshipRank(Game.GetPlayer(), 2)

What this does is:

1- move the dagger from your inventory to Owen’s inventory

2- shows on screen that you have completed objective 20

3- Changes the relationship you have with Owen to Ally so that now he can be hired as a follower.

Now we tick the Complete Quest box and everything is done!

BUT, we might have a little problem.

If we go back to talk to Owen, nothing happens and the option to ask him to follow you doesn’t come up.

Why is that and how do you fix it?

In my case the answer is I am dumb and picked the wrong voice type. I was sure that all the generic voices worked for followers but turns out that the MaleCommoner I chose is ok for marriage but doesn’t have the follower dialogue.

So what do we do now?

The easy fix is: chose for your NPC a voice type that works for followers. Reference list (I got it from here):

Voices for followers who can marry and adopt: – Male: Brute, EvenToned, Nord, Orc, YoungEager – Female: Commander, Sultry, YoungEager

Voices for followers who can marry: – Male: Argonian, EvenToned, EvenTonedAccented, DarkElf, Drunk – Female: DarkElf, EvenToned, Orc

Voices for spouses who can adopt: – Male: CommonerAccented, Condescending, SlyCynical – Female: Commoner, Coward, ElfHaughty, Nord

Voices for follower who can adopt: – Female: Condescending

Voices for only followers: – Male: Khajiit

Voices for only spouses: – Male: Commoner, Coward – Female: Argonian, Shrill

If you do that, it will automatically work as soon as you finish the quest.

Another quick fix is using a mod called RDO – Relationship Dialogue Overhaul that adds a lot of new dialogue lines to most generic voice types and extends the followers frameworks to work perfectly with the voice you choose and along with other follower mods (I use EFF for example that adds a lot of extra stuff).

But since I didn’t want to be dependent on another mod, there is a bit moar difficult way but somehow working to go around the problem of having a custom voice type.

But we’ll talk about it in another post, after we’ve seen how to create custom dialogue and we’ll also see how to find all the files you need to make an archive and share your mod with other people.

See you soon!

Leave a Reply

Your email address will not be published.