Jump to content

DOWNLOAD MODS

Are you looking for something shiny for your load order? We have many exclusive mods and resources you won't find anywhere else. Start your search now...

LEARN MODDING

Ready to try your hand at making your own mod creations? Visit the Enclave, the original ES/FO modding school, and learn the tricks of the trade from veteran modders...

JOIN THE ALLIANCE

Membership is free and registering unlocks image galleries, project hosting, live chat, unlimited downloads, & more...

Modding Workshop: My First Quest


Vain
 Share

Recommended Posts

Modding Workshop: My First Quest

 

Dragonborn_Knotwork.png.3d1ae7df03d90b97a7285e4a3a310e8b.png

 

 

Welcome to the Modding Workshop: My First Quest. In this tutorial we will be discussing how to create a lore-friendly quest using existing NPC's and recorded dialogue and how to package it properly for upload. We will briefly discuss item creation, triggers, and scripting, but this workshop will not cover every aspect of these topics, only what is needed for this task. Coming into this tutorial, you should already be familiar with the basics of navigating the Creation Kit and some knowledge of Papyrus syntax.
 
Part I: Tools
 
You're going to need several tools for this job in addition to the Creation Kit.
 
BAE - Allows you to view the contents and extract from Skyrim BSA and ESM files.
Voice File Reference Tool - Allows you to view and search the voice files from Skyrim without needing to extract them and shows file name, dialogue, and voice type.
Unfuzer CPP Edition - Allows you to decompress FUZ files from Skyrim to WAV and LIP and compress WAV and LIP files to FUZ.
Wrye Bash - Takes care of most of the hoop jumping needed to get your mod packaged for release to Steam. Not necessary for other mod sites who allow uploads of loose files.
TES5Edit - Shows you what files are included in your mod and how they are interacting with their respective masterfiles and/or other mods. Useful for finding mistakes and conflicts. Experimental.
Clean Saves - make your own or use my resource. Probably both. You'll want saves made at key points around the area and time frame in game that you'll be modding. For example - if your quest doesn't start until after a certain event, make a clean save before and after that event. This way you will be able to test if your quest triggers properly even if a downloader installs it on a game that has already passed that checkpoint.
Notepad ++ - Text documents on steroids. Infinitely helpful for scripting. It numbers lines, helps you line up indented code properly. Such nice, much syntax.
7 zip - File compressor and extractor.  Skyrim scripts now come packaged in a .zip file and need to be decompressed to be edited

 

Dialogue Length Extender - A quick guide for how to extend the 80 character limit on dialogue lines for the Creation Kit.
 
Tools you should already have
Skyrim - Downloaded from Steam or installed from a disc. I recommend making a shortcut to this directory. You'll be going here a lot.
Creation Kit - Downloaded from Steam and installed into the same folder as Skyrim.
Archive.exe - comes with the Creation Kit (I believe) and is also in the same folder as Skyrim. Used with Wrye Bash to package a mod for upload to Steam.
 
Useful Console Commands - These are indispensable for testing a custom quest to ensure it is functioning properly since almost all of what a quest does is behind the scenes.
Open the console with the tilde (~)
Commands contained in <brackets> indicates a variable that must be specified.
Page Up and Page Down keys can be used to scroll up or down the Console gui
getstage <quest ID> - returns the current stage of the quest
movetoqt <quest ID> - moves you to the location of the current target of the quest, eg. where the map marker is pointing.
setstage <quest ID> <stage #> - manually sets the stage of a quest. Setting a quest stage will begin the quest if it has not already begun.
sqs <quest ID> - Shows quest stages in a quest and if a stage has been achieved.
sqo - Shows a human friendly list of active and completed quest objectives for currently active quests.
resetquest <questid> - Sets all quest stages in a quest to 0.
coc <cell ID> - teleports the player to the cell specified.
player.moveto <reference ID> - teleports the player to the reference specified, eg. an NPC or unique item.
 
Part II: Preparation
 
Now that you have your tools there are a few things you will need know more about.
Script Fragments - used by a quest to determine how it behaves, when objectives are displayed/completed, when dialogue occurs, quest completion and advancement, ect.  The Creation Kit has a default prefix it attaches to all fragments.  For convenience you will want to change this default to be able to tell your own script fragments apart from original ones.
 

ScriptPrefix.png.e8c9c8cefd49a9a6eedaa9723c34bb2d.png

 

To do this go to File>Preferences>Scripts>Fragment File Prefix in the CK window and fill it in with something that makes it yours.  Hit Apply.
 
:smarty:Smarty Says: Use the same prefix for any files you create inside your mod!  This will help you locate them in the Object Window and elsewhere.
 
You also need an outline for your quest.  Each bullet in your outline will become a Quest Stage.

 

  • Quest Begin Stage 0 The quest has started but the Player has not spoken with Archmage Savos Aren
  • Quest Objective Assigned Stage 10 The Player has spoken with Savos Aren or is the Archmage
  • Quest Completion Stage 20 The Player completed the previous Objective and ended the quest

The beginning of a quest is always invisible to the player.  Without the quest having already begun quest objectives cannot be assigned.  Quest dependent dialogue, items, events, and anything else included in your quest will not be enabled and quest stages cannot be advanced.  Part of quest creation will be determining how your quest will start.  Will it start when the game starts (Unbound)?  Will the player find a long forgotten tome that leads them to your quest (Rebel's Cairn)?  Will they walk into a room ( The Golden Claw)?  Will it be a combination of these things (Boethiah's Calling)?
Quests that start when the game starts can be a  strain on someone's save game and even corrupt it over time.  Reading a book requires the creation and placement of said book and making sure the player knows how to find it in your mod description.  Picking up an item has similar problems.  Walking into a room, however... Can be done easily.  I recommend using an interior cell to minimize conflicts with other mods and finding an interior cell your player will have to pass through during normal game play in order to complete your quest.
Then you need to know how many objectives there will be - ours only has one objective.  You can always add more and once you know how to manage one, adding more is simple.
And lastly you need to end your quest which is more complex than it sounds.  More on this later.
 
Part III: Turning on the Creation Kit
You thought I'd never let you.  Well, now's your chance!  We're finally ready.
Turn on the Creation Kit and load the Skyrim.esm only.  The default settings on the Creation Kit do not allow multiple master files to run simultaneously.  It is possible, but not covered here.
 
Starting the Quest: This tutorial quest involves only locations and NPC's from the Mage's College.  There's no reason for this quest to begin running silently in the background until the player is there so we will put our quest's jump start in the Hall of Elements - the first interior cell in the Mage's College the player will enter.
 

CellLoad.png.51ab6549ef731168d501dd513cc60f13.png

 

Find it in the Cell View window under Interior World Spaces and double click it to load it in the Render Window.  We want the player to activate our quest as soon as they enter the room and the easiest way to do that is with a trigger.  You'll need to be able to see Triggers to do this so enable them by hitting "M" on your keyboard.  Your view should be of the main entryway of the Hall of Elements.
 

 

Trigger.png.2b8b5a5259222c6854fe683e86840d4c.png

 

Notice the big orange box taking up the entire room.  This is a trigger.  We're not going to use it though, except as a nice large object to create our own trigger around.  Triggers when created will appear in the render window around an object that is selected so click on the big orange box.  When you do you'll notice MG06SceneTrigger will now be highlighted in the Cell View window in the loaded cell's object list.
Look for the Create Trigger button on the top bar of your Creation Kit Window and click it.
 

 

3b05ae4c-9e58-4d93-952e-46eee3a0df60.png.3a52e21cffec89a258102d102119c85d.png

A new window will pop up asking you to select a form.  Double click NEW and name your new trigger.
 

 

NewTriggerForm01.png.aaa25c76c8f03b30be06bbb3172a56f7.png

 

VainSQTrigger = My modder prefix, what my trigger is for (Sorcerer's Quest), and that it's a trigger.  A good naming convention will be vital for what we're doing due to the sheer number of almost identical things involved in a quest.  Once we reach dialogue creation you'll understand more.
Hit okay and a nice friendly box will appear that is your new trigger!  Looks complex but the only thing you do here is add a script to it.
 

 

TriggerProperties1.png.82855ea88d14750041f765fa2c8c874b.png

 

Just like with the trigger select [New Script] and name it something sensible.  Since we're adding it directly to the trigger the CK has politely filled in what our script extends already for us.
 

 

TriggerScript1.png.1929102c7aa2bc857e8a652dc7c87899.png

 

From Papyrus 101 you should know basic script construction.  Declare Properties at the beginning, put in your events and conditionals, end everything properly and COMPILE.
Now we get to use Notepad++!
 

 

EditTriggerScript1.png.d93c8ac30b2d8afc4ae7864c965a9014.png

 

If this option is greyed out for you then you need to locate your Scripts folder in the Skyrim>Data folder.  You should have a Skyrim>Data>Scripts>Source folder.  The top folder Scripts will either be empty or contain .pex files (the scripts we are working on may be in here).  Don't touch .pex files, they are generated when a script is compiled by the CK.  They are what the game looks for when seeking out custom scripts.  The scripts that you can look at, modify, extend, and otherwise mess with are in the Scripts>Source folder.

If this option is greyed out for you and you already have a Scripts>Source folder then the scripts you are trying to modify is more than likely compressed in the Scripts.rar and you should extract the files with 7 zip to your existing folder.  If prompted to overwrite any files, DO IT.  As mentioned, the scripts in your Source folder are the untouched versions of the scripts and the game doesn't even use them - they are for documentation only.  The Scripts.rar doesn't have any .pex files so all your mods will still work fine.

:smarty: Smarty Says: Never modify a source file script directly.  As with all resources, duplicate and rename all the files you use, even scripts!  Note* There are some cases where this will not work (changes in the shapeshifting mechanics for werewolves and vampries) - proceed with extreme caution and back everything up.

This should open up your script in Notepad++.  If it doesn't, you'll need to go and make Notepad++ the default editor for .psc files.  The only line that should be visible is the first line.  You'll have to fill in the rest.
Here's a good example - 

 

 

Spoiler

1. Scriptname VainSQTScript extends ObjectReference
2.
3. Int RunOnce
4. Quest Property VainSQ Auto
5. Actor Property PlayerREF Auto
6. Faction Property CollegeofWinterholdArchmageFaction Auto
7.
8.  Event OnTriggerEnter(ObjectReference akActionRef)
9.    If akActionRef == PlayerREF
10.       If RunOnce == 0
11.         VainSQ.Start()
12.         VainSQ.SetStage(0)
13.         RunOnce = 1
14.      EndIf
15.   EndIf
16.   If Game.Getplayer().IsInFaction(CollegeofWinterholdArchmageFaction) == True
17.      VainSQ.SetStage(10)
18.      VainSQ.SetObjectiveDisplayed(10)
19.   EndIf
20. EndEvent

 


Here's a rundown of what you're looking at with this script.

 

Spoiler
  1. VainSQTScript - Vain is my modder prefix so I can instantly tell if the object, script, or whatever I'm looking at is part of my modifications. SQT stands for Sorcerer's Quest Trigger and all script names end in Script. The trigger is an object so the script is extending that reference. Then you have to declare the properties of the script.
  2.  
  3. Int RunOnce - Int is short for Integer. By default, since RunOnce is a creation of this script, it has no value and so = 0
  4. The Quest Property will be the name of your quest in the Creation Kit in this case - VainSQ. The game sets this value itself, so it is Auto.
  5. The Actor Property determines who the script effects - PlayerREF stands for Player Reference which is the actual player and excludes all other NPC actors. The game also sets this value itself, so... you guessed it - Auto.
  6. The Faction Property determines if the script effects a specific faction - This is the Faction ID unique to the Archmage.  Also auto.
  7.  
  8. The Event is the conditions under which the script will run. OnTriggerEnter(ObjectReference akActionRef) - When the trigger is entered (the ObjectReference) by an actor (the akActionRef).
  9. Now we have If statements. These determine the conditions under which whatever the event does is done. If the If's don't coincide with what's happening in the game then the event won't occur. This one means if the actor entering the trigger is the player - go on to the next line of code. If this is not the case end the event.
  10. This one detects if RunOnce still is set to 0. If it is, go on to the next line of code, if not... you get the picture.
  11. This line is pretty obvious - the quest is now started and quest dependent activities can occur. Special dialogue, quest objects appearing in the world, everything governed by the quest is now active and waiting on the player's next move.
  12. Just in case the game didn't pick up on it, we want to be extra sure that the quest is on the appropriate stage - 0.
  13. Then we set RunOnce to 1 so that the next time the player walks through this space the quest doesn't start again.
  14. End the conditional.
  15. Each one has to be done separately.
  16. Curve ball!  Same event, but new conditional!  When the player walks into the trigger the game will also check to see if the player (Game.GetPlayer with blank parenthesis because there is only one player) is part of a faction (IsInFaction with the Faction ID in the parenthesis).  The == True tells the game that the player must be part of the faction to execute the next line of code.  If it said == False it would only work as long as the player was not part of the faction referenced. This is important because if the Player is the Archmage... this means Savos Aren - the original assigner of the objective - is no longer part of the game and without this the quest would be incompletable.
  17. This sets the quest stage to 10 - where the first objective is assigned and visible in the quest journal.
  18. This gives us the drumroll we all know and love along with a nice little popup of the objective (same # as the stage usually) for the player so that they know they just advanced the quest.
  19. End the last IF
  20. and the Event.  You'll notice we didn't tell the script to never do this again like we did for the start quest command.  This is because once the game has set a quest stage it cannot set the same stage again - these lines do effectively nothing once the quest advances and/or completes.  If you are really concerned about it you could set an IF statement for RunOnce == 1 and have it set to 2 upon completion.  The indentations and capitalizations and empty lines are for convenience only and have no effect on the script and the numbers for each line should not be included.

 

AND SAVE!  Once you have saved you can now compile it.  In the main CK window there's a drop down menu for Gameplay.  On it is the Papyrus Script Manager and this is where you compile.
 

Compile1.png.14650de86f76585dd8219b37760c5731.png

 

If your syntax is correct a box will pop up for a moment and then disappear.  If you have any mistakes then the compiler will throw errors at you until you fix them.  They are usually helpful errors such as "Missing L Paren at 31, 2" which means you forgot a left parenthesis on line 31 column 2.  This will not tell you if your script does anything, it will only check to make sure that your syntax is correct.

And that's all we'll do with this for now.  Once our script has an actual quest to refer to we can come back and make sure the properties we set fill properly.

The last bit of setup is placing the quest objective.  The objective is an amulet in the Archmage's Quarters.  In the Object Window under Items>Armor>AmuletsandRings find one you like the look of, duplicate it, and rename it to stick with your naming convention.  Then load up the Archmage's Quarters in the Render Window and drag the amulet into the room.  Edit it and select Don't Havok Settle (so it won't go flying or get shouted into a wall) and UNCHECK Respawn.  What's the point of making a unique amulet you can only get with this quest if it keeps coming back?

 

Edited by Vain
  • Thanks 1
Link to comment
Share on other sites

Part IV: Creating your Quest

Now that everything is set up for our quest we need to actually make the quest.  Go to Object Window>Character>Quest and make a new one.

NewQuest.png.0df07e2b41bce3e981bf22a3a03a392b.png

 A huge box appears.  Lots of tabs, lots of nonsense, lots of bugs.

Section A: Quest Data

 

FreshQuest.png.98661efeba70a307a1f10e736e6143fc.png

Nothing's filled in yet, tabs are missing, and a box is check that we don't want checked!

Start Game Enabled:  Almost completely broken.  It doesn't actually work.  This is why we created a trigger a little bit ago to start the quest.  Vanilla quests using this mechanic are already encoded properly which is why they work.  This check box should cause the CK to generate a file to do what it says and there is a way to manually do so, but it makes packaging and updating your mod more annoying and the more loose files you have the harder it will be for players to install.

Run Once: does just what it says.  It means that this is not a repeatable quest (Chop Wood).  We can go ahead and leave this checked.  This also makes resetting the quest impossible so keep this in mind during testing.

ID: The Creation Kits reference for our quest.  Anything referencing a quest will use this.  VainSQ

Object Window Filter: determines where our quest appears in the Object Window of the CK.  Leave it blank and it will be on the first page with a ton of other quests.  Fill in your modder prefix to have it create a new subsection of Quests just for yours!  *Note: This will not take effect until you reload your plugin.

The rest of this little group of boxes and windows determines where, how, and if our quest is displayed in the quest journal.

Quest Name: The name of the quest as it will appear in the player's quest list.

  • Quests of Type "Miscellaneous" will never display their quest name and so don't need one.
  • Quests which have no objectives also will never display their quest name anywhere and don't need a Quest Name.

Priority: Determines how dialogue is assigned.  All dialogue is managed by quests.  You may encounter issues where dialogue won't appear during certain quests if the priority on that quest is higher than yours.  Frankly, you will want your quest a lower priority than the Main Quest (10) and equal to or greater than the priority of Miscellaneous quests (60).  Shouldn't matter much.

Event: Since Start Game Enabled is both broken and likely to make our quest cause save data corruption we have to use either an event or a script to start it manually.  A script using the Start, SetStage, or SetObjectiveDisplayed commands will do just that.  Using an Event to handle the beginning involves a more complex trigger called a Story Manager Event Node.  Due to the complexity and the one-trick-pony nature of SM Event Nodes we'll stick with the Script/Trigger combination.

Warn on alias fill failure: Just ignore this.

Allow Repeated Stages: This is how the game manages quests like Lycanthropy and Vampirism where the transformation sequences can happen over and over again.  Our quest will be once and done so ignore this.

Type: This is how you choose what icon is displayed next to the quest in the player's quest list. If it's set to Miscellaneous your quest will only appear and be tracked with the Miscellaneous quests.  This is what we're going to do for this quest since it is tiny and has no real impact on gameplay.

Recompile All Papyrus Scripts: Saves you a trip to the Papyrus Manager and does all scripts attached to your quest in one fell swoop.  Use to double check that all scripts have been compiled so that their changes will take effect.

And we're not even going to use any of these...

Export Quest Dialogue:

Export Scene Dialogue:

Calculate Voice Assets:

Quest Conditions:  Just another reminder - leave this blank.  This locks everything else in the quest to only respond to any conditions set here.  Much easier to manage each part of the quest separately.

Text Display Globals:

Hit Okay.

:smarty:Smarty Says: Be sure to hit OK and save after you finish on each tab.  The Creation Kit can crash without warning!

Open your quest again.  More tabs have appeared!  We're going to go on to the next one...

Section B: Quest Stages

QuestData01.png.ccf32edc3cdfd342465dd4a48fec6620.png

Index: Each stage has an index number from 0 to 65535.  Our quest is only three stages long so we'll create three new stages number 0, 10, and 20.

Start Up Stage: When a quest begins, no matter how - stages marked with this will run as well.  With Stage 0 selected, we want this to be checked.

Shut Down Stage:  Stages marked with this run when the quest ends.  With Stage 20 selected, we want this to be checked.

Keep Instance Data From Here On: This checkbox was introduced with version 1.5.24.0 of the Creation Kit. It does something complicated we won't be using.

Log Entry|Conditions: This is what will appear in a player's journal entry for a quest.  As the quest progresses only the most recent entry is displayed.  This will not show up on a Miscellaneous quest but we will need to add entries for any stages we are going to put a script on.  The only stages will will be running a script on are Stage 10 and 20.  Create a New entry for each of these stages and move over to the...

Papyrus Fragment/Advanced: Also referred to as Result Scripts on this tab.  These scripts run when the quest stage they are linked to is called.  For stage 10's log entry we want the objective for this stage to appear when this stage is called so type SetObjectiveDisplayed(10) and compile.  It'll take a second or two.  Move to stage 20's log entry now and give it the script SetObjectiveCompleted(10).  When the quest advances to stage 20 the objective we assigned in stage 10 will now complete.  Seems a bit backwards, but trust me.  It all works... more or less.  Once we've done that feel free to nip over to the Advanced tab and see the name of your script fragments!  Now you see what the Fragment File Prefix setting does.  You can rename the script from here if you like, delete it, or regenerate it.  You'll also notice that while each stage is compiled separately - the same script is being used for all stages.

Complete Quest: If this box is checked, that stage will trigger the "Quest Completed" message, and move the quest from the active to completed portions of the player's quest list.  This doesn't stop the quest from running.  With stage 20 selected we want this checked.

Fail Quest: The same as Complete Quest, but triggers the "Quest Failed" message.

Next Quest: Does... absolutely... nothing.

Conditions: Don't touch this. These must all be met before the quest stage they are tied to will run.

Section C: Quest Objectives

QuestObjectives.png.2ff69ddf145d3c602fbaf54f4eff28e3.png

Objective Index|Display Text: This is what will appear on screen when a script calls SetObjectiveDisplayed and what will be listed in the Journal for the objective, even for Miscellaneous quests.  There is one objective in this quest so we will make a new one.

Quest Objective Data:  This section is where we actually fill in the details of an objective's index number and display text.

Index: This is the number scripts look for to know which objective you mean.  Like SetObjectiveDisplayed(10) will display whichever objective is numbered as 10.  Which happens to be what we told it to do so number this objective 10.

Display Text: Fill this in with something lore-friendly like Search the Archmage's Quarters and click anywhere.  If the big box on top is still blank... make sure you have the empty objective selected before editing the Objective Data section and do it again.

ORed With Previous: When checked, if this objective and the previous one are both displayed, they will appear in the interface as a single objective (automatically combined with an "or" in between). Also, if one of a group of ORed objectives is completed, the whole "group" of objectives will be marked complete in the interface (Blood on the Ice).  I can't stand having incomplete objectives in my completed quests so... please... do it for me.

Quest Targets: Each target needs an alias (quest marker) and can have a set of conditions.  We will come back to this section once we deal with the Quest Aliases tab because creating one here does nothing since there are no aliases to link it to.

Target Ref|Conditions:  Fills from the drop down menu of Quest Target Data when you create a new one.

Quest Target Data:  Drop down options are created on the Quest Aliases tab.

Compass Markers Ignore Locks: If your quest target happens to be in a large building like a castle or stronghold where some doors may be locked but not others checking this will make the quest marker attempt to show the player the closest door rather than the closest unlocked door.

Section D: Quest Aliases

A Quest Alias is pretty much how you make map markers and objective markers that guide players to quest objectives and locations.  It only appears if the player is tracking the quest and in our case it will also be on the item needed to complete the objective.

The item the player needs to find is the amulet we placed in the Archmage's Quarters.

QuestAliases.png.a29636ff82c3e65520ec610b589f3ca2.png

Here order actually matters if you have more than one alias.  This tab is actually very complex.  We don't actually need to know that much about it to do what we're going to do.

Create a New Reference Alias (it should be obvious if you need a reference or location alias... does the alias point to an item or a cell?) in the big empty box and wait... wait for it... waaaaait for it... 

Welcome to the box whose bottom you shall never see.  No, I don't care how big your monitor is.

 

ReferenceAlias.png.1af3e9f4652c970d82a8ffc4d876091e.png

Alias Name: Let's call it VainSAAlias

Fill Type:  This section gives us six different way to fill our alias when the quest begins.  Which you choose really depends on what your alias is...

  • Specific Reference:  This can be memory consuming as the alias will always be loaded even when the quest isn't running, even when the player is nowhere near the quest object.  Especially if it's something like an actor.  Once a quest is running, all aliases for the quest behave this way.  This is also the easiest way to go and what we're going to do for our amulet.

    SpecificReference.png.73ff6d243a0dd12ae7ddf9814b548f5e.png

  • Unique Actor:  Obviously an amulet isn't really an actor so we won't worry about this.  If you were using an actor as an alias their reference would have to have a Persist Location - setting up an actor like this isn't outlined in this tutorial but seemed good to mention.
  • Location Alias Reference:  Pick a Location Alias from this quest (must be higher in the list than this alias), and pick a Location Ref Type. When the quest starts, the Story Manager will attempt to find a matching loc ref type from that location to fill this alias.
  • External Alias Reference:  Select another Quest, and then a Reference Alias from that quest. When this quest starts, it will fill this alias with whatever is currently in the selected alias.  Note* If the selected quest isn't running, or the selected alias is empty, or if the alias reference is inside a container (including an actor's inventory), this alias will fail to fill.
  • Create Reference to Object:  When the quest starts, a reference will be created using the selected base object. The new reference can either be placed at the same location as another Reference Alias (usually a marker), or in the inventory of another Reference Alias (which must be a container of some kind).
  • Find Matching Reference:  This option allows the Story Manager to find a reference from anywhere in the world (but only persistent references, or Unique actors, can be found this way outside the loaded area). The "Match Conditions" are used by the Story Manager to filter the potential choices.  This also has a bunch of other options attached to it -
    • In Loaded Area: This limits the search to the loaded area (a player's current interior cell, or the 5x5 cells around the player in a worldspace). Useful when you want something near the player.
    • Closest: Only available when searching "In Loaded Area", this will cause the Story Manager to prefer the closest matching reference. (Otherwise it picks randomly from all matching references.)
    • From Event: This is only available for quests which are started from an Event through the Story Manager - we used a script instead, remember?
    • Near Alias: Select another Reference Alias on this quest - the Story Manager will run the conditions only on any references linked to that alias's ref.  Make sure that a reference linked this way has no keyword attached!

We also want to have the quest advance/complete when the amulet is picked up so we can either attach a script here or to the amulet directly.  It's generally tidier if you keep scripts that will only run during a quest in the quest so add a new script here, make a new one and have it look something like this - 

Spoiler

Scriptname VainSAScript extends ReferenceAlias

Quest property VainSQ Auto

Event OnContainerChanged(ObjectReference newContainer, ObjectReference oldContainer)
if (newContainer == Game.GetPlayer())
    VainSQ.SetStage(20)
    EndIf
EndEvent

Compile, Hit OK

SAVE

Edited by Vain
Link to comment
Share on other sites

Part V: Dialogue
Dialogue Views
This is possibly the most difficult part of quest creation.  Half of it is broken.  We're not going to do anything on this tab until the very last possible second. Note* Conversations beginning from the NPC (Having them say "Yes, what do you want?" when activated or them initiating the conversation) will require that information placed here. But again... TO THE NEXT TAB!
Section A: Player Dialogue
In order to create fully voiced dialogue there are no less than THREE different programs in addition to the Creation Kit needed.
Voice File Reference Tool (VFRT) - Allows you to look up dialogue in an easy to navigate GUI by word or file name without extracting anything.
BAE - Allows you to extract BSA files - in order to use any dialogue (as with any vanilla file) you should duplicate and rename it and package it as part of your mod.  This is how you do that.  Requires Windows Vista or later.
Unfuzer CCP Edition - Allows you to decompress the FUZ files for Skyrim's vanilla dialogue into LIP and WAV files and/or recompress LIP and WAV files into a FUZ.  Your new best friend.
 
You need to know how to use each of these programs for this next section.  They are not difficult to use and do just about everything all by themselves.
 

 

 

PlayerDialogue.png.e7ad12863f8c6c85b46fa17e046d46f1.png

 

 

 
Dialogue Branch:  Groups Topics together. They allow the dialogue system to:

  • Organize and distinguish between dialogue trees. Each Branch represents a line of the conversation.
  • Account for the fact that the player can enter and exit dialogue at any time, providing a means for the player to reenter an interrupted conversation.
  • An individual branch can only have one NPC speaker and can have infinite topics attached to it.  A new branch is required for every different NPC speaker.
  • On the Dialogue Views tab color for these matters.  Yellow = top level.  Green = blocking.  Blue = normal.

Topic:  Holds and organizes Infos.
Info:  NPC dialogue lines.
Say Once:  Buggy.  Avoid when possible.  Tends to break quests.
 
Now that we're here we need to know a little more about the voice our NPC is using.  The Archmage Savos Aren uses the voice type MaleCondescending.  That jerk.
Using this data we can use the VFRT to go through all the lines that voice type can speak and construct a conversation from them.  Like the following:

Spoiler


So... I'll bet being Archmage means you know all sorts of secret magic.
 
Let's just hope it stays this way for a long time.
tgdialoguehqscene19__000ea2b8_1.fuz
 
Do you keep lots of magical items in your rooms?
 
It's locked for a reason.
dialoguege_dialoguegeneric_000d3611_1.fuz
 
Is there any way you'd let me up there?
 
At this rate that'll never happen.
dialoguesh__0006a77f_1.fuz
 
C'mon, I just want to look around.
 
Perhaps one day, but not today.
dialogueiv__000676f7_1.fuz


The .FUZ are the file names in the Skyrim - Voices.bsa - what we will be extracting with BAE.  Go ahead and do this now.

Using Shared Dialogue is supposed to be easier, but life is pain, Highness.  Anyone saying otherwise is trying to sell you something.
 
Now that we have our very stilted and contrived conversation structure, let's create it!
Create a new branch in the Branches section.  The name that pops up is the name of your quest.  If you hit OK the CK will remind you that it is already in use by the editor so add Branch1 to the end of it.  Hit OK and another prompt for the first topic name pops up.  Feel free to shorten it but make sure to number your topic.  Do not delete your branch and remake it once you have created it.  Reload your plugin instead.  Deleting a branch doesn't delete it.  Sometimes the CK can remove deleted items from plugins... usually not.  More on that later.
 
Now you can choose your topic subtype.  This dialogue isn't a Rumor or a ForceGreet package so select Custom.  With your topic selected, fill in the Topic Text (our player's first line) and create a new Info in the big box on the right.
If you find you have to click twice sometimes, that is because the first click is the CK running a spellcheck on what you just wrote!
 

 

 

NewResponse.png.61db991bf8f06f7d6f2e5227e8628dea.png

 

 

 
Big friendly box!
Can't do much here yet so hit OK!
Woah... new box such big much options.
 

NewTopicInfo.png.626125b84f7bf5153f0b2058ba37e348.png

 

Topic Text: The Topic Text inherited from the Info's Topic, if any.  Can't be edited from this box has to be done on the Player Dialogue tab.
Prompt: If left blank, the prompt leading to this Info will be the Topic's Topic Text. If filled in, this text will be used instead.  Useful if your Topic Text instead contains a summary of what is being said instead of the actual dialogue.
Speaker: Choose from a drop down list the NPC speaking this line.
Share Response Data From Info: Select a SharedInfo ID to acquire the response lines from that Info. This allows you to reuse the same lines in multiple places.  This is why shared dialogue is easier.

 

  • The Filter box, immediately above the dropdown, filters the SharedInfo IDs by the text you specify.
  • The elipses (...), immediately to the right, will open the selected SharedInfo form.

Responses: The list of Responses (individual, sequential lines) that the NPC will say.
Flags:

  • Has LIP File: Whether the game should expect a lip-data file for this line. We're going to have these since our vanilla dialogue comes with .LIP files.
  • On Activator: Not used.
  • Say Once: If checked, this Info can only be said once by any given Actor.  As with Run Once you only want to use it his if you never want the player being able to see this ever again.
  • Goodbye: If checked, when this Info (line of dialogue) is completed, the conversation will end.
  • Force Subtitle: If checked, the subtitle for this line will always be displayed, regardless of the player character's distance from the speaker.  DOES NOTHING! WOOO!
  • Random: If a Random Info qualifies, it isn't said immediately. Instead, the Info is put onto a stack. If the next Info is also Random, it's put on the stack. The stack keeps building until an Info that is not marked Random is found, or an info marked Random End is found. The final Info is then added to the stack, and one of the Infos is selected randomly.
  • Can Move While Greeting: If checked, if this Info is a Hello, the Actor can continue to move while speaking the line. Has no effect on any other line.
  • Random End: Used to mark the end of a set of Random Infos. Technically, Random End is only necessary if the next qualifying info is also Random. However, it's good practice to end all Random Info sets with a Random End.
  • Spends Favor Points: Not used.
  • Favor Level: Not used.
  • Audio Output Override: Allows you to select an Audio Output Override. The most common use of this feature is to select a different audio falloff radius (for example, SOMDialogue3D8000), which will allow the dialogue to be audible at a much larger radius than usual.
  • Hours Until Reset: After this line is spoken, the speaker will not say it again until the specified time has elapsed.
  • Conditions: The conditions that must be satisfied before this line will be spoken.  VERY IMPORTANT!  I recommend:
    • GetStage:  Dialogue triggers on a specific quest stage or even disappears when another stage triggers.
    • GetQuestCompleted:  Dialogue goes away when the quest is done or won't trigger until a quest is completed.
    • GetIsID:  Dialogue will only be spoken by this actor - you don't want every bartender to say these lines meant only for the Archmage.
    • Copy All Conditions and Paste Conditions right click options.  Save you time if you have a conversation taking place with the same conditions.
  • Link To: The next line of dialogue that will be spoken in the conversation. When this Info is finished:
    • If there are no Topics in this list, or none of the Topics have a valid Info, the Actor's top-level Topic List will be displayed.
    • If one or more Topics with valid Infos in this list, a Choice List will be presented, allowing the player to select the next Info.
    • If Invisible Continue is checked, only one Topic may be placed in this list. When this Info is finished, the next Info will begin automatically; no player prompt will be displayed.
    • If Walk Away is checked, the dropdown becomes enabled, allowing you to select one of the Topics from the list above. If the player backs out of this Info's Choice List, the Walk Away Topic will be spoken as dialogue ends.
    • If Walk Away Invisible in Menu is checked, the Walk Away Topic will not appear in the Choice List.

Scripts:  Don't worry.  These will be nothing as scary as the first script, more like the little objective scripts we made.

  • Begin Script: This script runs when the Info is played, when the Actor starts saying the line.
  • End Script: This script runs when the Info is finished, when the Actor finishes speaking. In practice, it may take a second or two after dialogue has ended for this script to trigger.
  • Script Add/Remove/Properties: Allows you to add, remove, or edit the properties on any Papyrus scripts attached to this Info.

Here's a good example:
GetOwningQuest().SetStage(10)
GetOwningQuest().SetObjectiveDisplayed(10)
This tells the script to look at the quest it's assigned to (scripts are very stupid, have to be told everything) and what to do.  I want the last Info in this conversation to advance the quest to Stage 10 and to display the Objective on the screen for the player.
 
We're still making the first one so let's get back to that.
 
Set the Speak to Savos Aren and set up your conditions.  Condition == 1 means it has to be true.  Once you're done make a new Response which will pop up in a new box.
This box looks familiar!
From our conversation outline we know Savos' first response to the player will be:
Let's just hope it stays this way for a long time.
Uncheck Use Emotion Animation and skip down to the Audio section.
If you View Valid NPCS for this voice type only Savos Aren should appear.
Hit OK and then open it up again.
There should now be an entry for the audio file.  Record a few seconds of silence to actually generate the file and SAVE (optional).  Note the file name and path.  It will be something along the lines of:
Data>Sound>Voice>Mod Name.esp>Voice Type>Filename.xwm
Hit OK
 
Now remember when we made our Branch it prompted us to make the first Topic?  Right click in the Topic list and make a new one for each line our player will say.  Four in all.
Fill in the lines for both player and Savos as we did for the first topic and record a few seconds of dialogue for each and note each file name.
 
Now we get to go through and use the Unfuzer on those extracted .FUZ files of ours...
I recommend doing this one at a time as it is easy to get mixed up moving back and forth between files and folders so much.  UnFuze the .FUZ files into their .LIP and .WAV files and rename them to their corresponding files in your mod's Voice Type folder and replace them.  Once they are there, reFuze them.  There is a rare bug where the Skryim engine will not play back files in a different format.  Best to head it off.
 
Don't forget the script on the last Info to trigger the quest to advance to stage 10!
 
AND SAVE!
 
'Cause we're going back to the Dialogue View tab...
 
 

DialogueView.png.5a98fe7081bb0942a578985d11b16d66.png

 
 Create a new View keeping the same name convention we've been using... and right click in the big empty field next to it.  Select Insert Branch into current View and the branch we created should be the only thing on the list.  Make sure Current Quest Only and Current Dialogue Type Only are checked and hit OK.
That's all you have to do but if you want you can drag your different Topics around and see how they all connect.  Check Show All Text at the bottom if you want - this is just for the editor.
Hit OK.

 

Now go back through all of your files and double check the scripts.  You'll want to make sure that all the properties have filled properly (editing them and telling it to auto-fill should fix it, if not... you may have bigger problems).

 

:smarty:Smarty Says: Not all Creation Kit errors are nonsense!  If you encounter errors when loading your plugin that are specific to your plugin then follow up on them!
 
And you are done.  Save.  Go quest.
 
Also - Uploading to Steam is hard... Arthmoor has saved us!
Arthmoor has pretty pictures on his tutorial.

  • Find where Wrye Bash installed, usually something along the lines of Steam>steamapps>common>Skyrim Mods>Bash Installers
  • From there create your mod's folder including all subfolders such as meshes, voice, scripts, ect.
  • Copy all the loose files used in your mod into their appropriate subfolder (For scripts you only need the .pex files but can include the .psc files for documentation if you so choose)
  • Now open Wrye Bash and switch to the Installers tab where Sorcerer's Silence (or whatever you named your mod) should show up and make sure it has no errors. Anneal if it says it's not in the proper state and Install Missing if it complains it's missing files.
  • Open Archive.exe in your Skyrim directory and click on the ellipses (...) next to the Root Dir and find the mod folder we just made in the Bash Installers folder.
  • Select Misc, Voices, Retain Directory and File Names. When in doubt on if you need a folder, check the box. The Archive will ignore folders you don't have box check or not.
  • Leaving the Archive.exe open switch to the Bash Installers folder and drag all your files EXCEPT for the .esp into the Archive window.
  • Now you want to Save As using the same name as your .ESP
  • Now you can upload the .ESP and the .BSA to the Steam Workshop through the Creation Kit

Extra Credit:  

  • Clean your mod with TES5Edit
  • Test it in-game
Edited by Vain
Link to comment
Share on other sites

  • 1 month later...
  • 10 months later...

There is no need to un-fuze, rename, then re-fuze voice files, just rename the original .fuz file to whatever you want and it'll work fine.

 

Be aware that if you re-upload vanilla content i.e. fuze voice files and whatnot to Nexus you will fall foul of their strict no-reuploading-vanilla-content rule. With Workshop you may get away with it.

Edited by soupdragon
Link to comment
Share on other sites

This doesn't apply if these files are used in mods made for Skyrim. Striclty forbidden if they are used in another game.

Yes thats what I thought too. However it doesn't apply on Nexus, check with the Nexus admin/moderators if you have any doubts. Any kind of re-uploading of vanilla content without modification is strictly forbidden even if its for the same game. The reason being that Bethesda doesn't want the game re-uploaded piecemeal.

 

See this thread, posts #9 and #10 in particular (mod authors only)

 

Its similar to Morroblivion I imagine they had to redo their textures and  some of their meshes after threats of legal action from Zenimax/Bethesda as they were imported straight from Morrowind, they had to recreate them from scratch.

 

n.b. you can contact Nexus admins via email I believe no need to create an account if you don't wish too.

Edited by soupdragon
Link to comment
Share on other sites

  • 2 weeks later...

You may be able to skip the unfuzing and just rename the file... but doing it this way is a better showcase for a tutorial.  And the voice files have been modified and will only work with this quest s'far as I know that's the definition of modding and no one's called me on breaking any rules yet.

Edited by Vain
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...