Pages

113 posts / 0 new
Last post
digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
QUEST Conversion Hub and Tutorial - Skywind

Quest Conversion Tutorial

by digitalparanoid and thermador


Working on quests for Skywind is actually a fairly straightforward, repetitive process.  However, it is a steep learning curve for the first few quests, especially if you have never worked with the Creation Kit before.  This guide should help introduce you to the basics of the Creation Kit, and specifically, how to work on Skywind quests.  If you are already very experienced with the Creation Kit, see these quick notes for advanced users.

Tutorial index:

For advanced users:

 

 

 


Prerequisites - Installing Software


 

Step 1: Clean installs of Skyrim and Oblivion

This guide assumes that you are starting from scratch.  If you are have pre-existing installations of Skyrim, Oblivion, and optionally, Morrowind make full backups of your game directories and then uninstall the games and delete their directories.

If you have purchased or registered these games through Steam, it is easy to install them all in the background without having to worry about getting all the patches and updates, etc.

 

Step 2: Install the Skyrim Creation Kit and the Oblivion Construction Set

  • optional: install the Morrowind Construction Set (on your Morrowind CD-Rom, or available through Steam)

The Skyrim Creation Kit (CK) can be installed through Steam once Skyrim is installed - click here for instructions.

The Oblivion Construction Set (CS) can be installed once Oblivion is installed by downloading the files - click here for instructions & download links.  Note that you need to install both the Installer and the Patcher.

 

Step 3: Install the latest version of Morroblivion and install the latest version of Skywind

  • optional: if you are working on Skyblivion, then install that instead, and you don't need to install Morroblivion obviously

The easiest way to install Morroblivion is to use the complete installation - click here for instructions & download links.

The easiest way to install Skywind is to download the latest version from the project release thread - click here for instructions & download links.

 

Step 4: Set up the Skywind Exchanger

While you can load both Skyrim.esm and Skywind.esm at the same time in the Construction Kit, it is easier to swap out the Skyrim.esm file with one that has been "stripped" of most of its content.  This reduces the time required to load the Creation Kit by over 50%, speeds up the Creation Kit while you are using it, and makes it much easier to find the Skywind content in the Creation Kit because most of the Skyrim content is not present.

Skywind Exchanger is a simple application that swaps back and forth the original Skyrim.esm file with the "stripped" version as needed. 

Click here to download the Skywind Exchanger.  Click here to download the stripped Skyrim.esm.

Instructions:

  • Add a folder entitled "0Skyrim" to your Skyrim\Data directory (so your folder path is \Skyrim\Data\0Skyrim\). 
  • Copy your stripped .esm inside, and name it "Stripped.esm".
  • Copy your original Skyrim.esm (from the \Data\ folder) inside and rename it "Original.esm"
  • Leave the original Skyrim.esm in your \Data\ folder with the original Skyrim.esm name. 
  • Start the Skywind Exchanger.exe application from anywhere on your computer
  • At the top of the Exchanger window, enter your Skyrim path and press save
  • Launch the Creation Kit or the Game from one of the buttons and the program will automatically swap the correct ESM file for you.

 

Step 5: Get set up for efficiency (optional)

Efficiency is a somewhat personalized decision, but if you have any additional monitors lying around, now is a good time to set up the second one, so that you can have the Oblivion Contruction Set on one and the Skyrim Creation Kit on the other, since you will be switching back and forth a lot.

For each program you intend to use regularly, set up convenient shortcuts in your preferred method.  I typically pin programs to my taskbar in Windows 7.  From left to right: Skywind Exchanger, Creation Kit, TES5Edit, Notepad++, and the Oblivion Construction Set.

 

If you plan on working with scripts a lot, then you will probably want to set up an external editor.  Note that the Creation Kit natively supports editing in external editors.  Personally, I prefer Notepad++, a free windows text editor.  There are setup instructions for Notepad++, Sublime Text, Emacs, UltraEdit, and Vim on the Creation Kit Wiki.  If you don't have a preferred text editor, either skip this step, or set up Notepad++, which is probably the most widely used.

Why use an external text editor?

It is the difference between editing like this (no color coding, no autofill):

and this (color coding, autofill, syntax highlight, etc.):

 

Step 6: Extract the scripts from Skywind.bsa (optional)

Following this BSA unpacking tutorial, use the program BSA Unpacker to extract just the scripts from the Skywind.bsa file.  Add them to your \Skyrim\Data\Scripts\ folder. 

This will allow you to look at the scripts on other quests in Skywind.esm.  If you are new to scripting and want to see how other people have set up their scripts, this extra step is highly recommended.  Note that you will have to do this step each time an updated version of Skywind.bsa is released.

Note that if you DON'T do this step you will see the message

;CODE NOT LOADED

when you try to view a script in the Creation Kit that you haven't personally created.

 


Getting Started - Finding Quests, using the CK and CS


Now that you've got everything set up, this next section will focus on starting out with quest work.

 

Step 1: Open the Creation Kit and set your preferences.

Go to File -> Preferences:

Scroll over to "Scripts" and set your script prefix to "FBMW":

 

Step 2: Loading files in the CK and CS

In the Oblivion CS, open the Morrowind_ob.esm file by clicking the folder button:

In the window that pops up, double click on Morrowind_ob.esm

Note that it checks a box next to it.  Any other files that are "parent masters" (the list on the right) will be loaded as well, so you only need to check the one box.  Then press OK.

While the CS is loading (for any errors that pop up, click "yes to all"), go back to the Creation Kit.  Make sure to run the program through the Skywind Exchanger. 

Then, in a similar fashion, open the Skywind master file, Skywind.esm:

On any errors that pop up, just click "Yes to all"

 

Step 3: Pick a quest to work on

Have a look at the quest tracker - click here to view - and find a quest that hasn't been taken.  Post a note in this thread that you are planning on working on that quest or questline, and the spreadsheet will be updated later.

Find that quests article on a wiki like UESP - that will be your reference for the quest.  For this tutorial, we will be doing the Thieves Guild Quest "The Vintage Brandy".

 

Step 4: Find the quest in the Skyrim Creation Kit

In the CK, open an object window, and navigate to "Character" -> "Quest" and then find the quest named fbmwTGVintageBrandy

  • fbmw = prefix used for legacy reasons
  • TG = thieves guild, usually a guild prefix
  • VintageBrandy = the name of the quest, not always the same as the name of the quest on the Morrowind Wiki or the name you see in the game.

and double click on it.

This will open Skyrim's quest window, which you will see a lot of as you work on this:

 

Step 5: Find the quest in the Oblivion Construction Set

In the Oblivion Construction Set, press the "Q" button at the top:

This opens Oblivion's quest window:

Double click on the bar at the top of the list to expand the names:

Then find the quest in the list:

 

 

 


The Quest Data Tab


The Quest Data tab in the CK sets up some of the basics of the quest.

 

Step 1: Check basic settings and copy basic quest conditions:

Odds are, you won't see anything here that you need to change.  The main thing is the quest conditions section (the big white area in the center).  We want to make sure we have two basic conditions for this quest's dialogue to run.

To make it easier, go back to the list of quests and open a quest that's already been completed (you can have multiple quests open at once), such as fbmwMQ01 or, in this case, fbmwTGOverduePayments.

Right-click in the conditions window and choose "Copy all Conditions" as shown.

Close the quest and go back to the quest you're working on (fbmwTGVintageBrandy).  Right click and choose "Paste Conditions":

 

Step 2: Save your work

Click "OK" at the bottom of the quest window and save your work.

The first time you save a new plugin, you will be asked for a name.  Name it whatever you want (I usually use the name of the quest or the quest line) and save it.  Let's say you name it fbmwTGDiamonds, because you are working on that quest.

When you open the Creation Kit later, you will want to set your plugin (ESP file) as the active file and load that instead of just Skywind.esm:

And, when you start the game to test your work (using the button in the Skywind Exchanger of course), you'll want to make sure your plugin is active in your load order:

 

 

 


The Quest Stages Tab


The Quest Stages tab in the CK sets up the "stages" of the quest.  Usually this is something like "Stage 10, get the quest from the quest-giver; Stage 20, you found the item; Stage 100, you brought back the item and received a reward, completing the quest"  Obviously it can get more complicated than that.

 

Step 1: Check the individual quest stages and make sure they are the same in the Oblivion CS and the Skyrim CK.

Looking at the Oblivion CS, in this case, the quest only has four stages, and stage 1 is just a blank placeholder. 

Stages don't always have to add a log entry (journal entry).  For example, you may want to just add stages without journal data (just to have a script fragment) to update objectives for example.

We see that on Stage 100 of this quest, there is a one-line result script attached to the stage.

 

Step 2: Copy the result scripts over from Morroblivion to Skywind

Result scripts can be attached to a variety of things in the game, but you will most likely find them attached to quest stages and to dialogue lines.

Since we don't know exactly what this line of script does, but we know it's important, we need to copy it to the equivalent Skywind quest stage:

Note that we put a semicolon ; in front of the line.  When the game runs a script line with a semicolon, it ignores whatever is behind the semicolon - a "comment" if you will, or just something we disable until we figure it out.  If you can't figure out what a script line does, just copy it over with a ; in front for now.

Also, when you create a new result script, you may find that you need to close the window you are in (press [OK]) and to reopen it for the script box to work correctly.

So here it is in the Skyrim CK:

 

Step 3: Remember to save your work.

 

 

 


The Quest Objectives Tab


The Quest Objectives tab in the CK sets up the actual objectives (and compass markers) that the player wants to accomplish.  These are what are listed in the Skyrim Journal (J key while playing the game). 

Usually the objective has the same number as the stage that completes the objective. So if stage 10 says "go fetch", and stage 20 is when you fetch it, then the objective completed at stage 20 should be #20.  This will become more clear below:

 

Step 1: Compare the quest objectives with the old quest targets

In the Oblivion CS, these are called "Quest Targets" and are similar, conceptually, but work in very different ways:

Looking at the Oblivion CS Quest targets we can see some simple quest targets - these are used to define where your compass market points.  They typically point to an NPC or item, and have conditions on them that show the marker only during a certain stage of the quest.

Skyrim does things a little differently.  Instead, quests have objectives, which are displayed to the player and completed when the player does a certain thing.  They typically have fewer conditions,  but need to be set up a little differently.

In this quest there are basically two objectives: get the brandy, and return it to the quest-giver, Sugar-Lips Habasi.

 

Step 2: Create the new quest objectives

Go the the Skyrim CK, Quest Objectives Tab, and right click the window and choose New:

You can always edit these later so play around.  You have to write them out yourself, since no such thing existed in Morrowind or Oblivion.

Here, I've created two objectives that will be completed at stages 20, and 100.

 

Step 3: Save your work

 

 

 


The Quest Aliases Tab


Once you set up your basic objectives, you need to create Aliases.  Think of an Alias like an overcoat.  You can put it on anything in the game, or take it off anything.  Quest Aliases get put on something in the game during the quest.  In the Skyrim CK, we need to set up Aliases so the quest objectives can work.

 

Step 1: Create those Aliases

Since we only have two objectives, we only need two aliases.  Well, actually three - one for the intermediate step where we switch objectives.

Right-click to create a new reference alias.  We won't be using location aliases in this tutorial; they are useful for radiant quests mainly.

The first alias is a unique actor, Ralen Hlaalo.  Or if we wanted the compass to point somewhere else, we could pick "specific reference" and pick his front door, or the bottle of Vintage Brandy itself.  But actors are faster to set up.

Since he is dead, make sure you check the box "allow dead" at the top.  Otherwise, the quest won't start because the aliases (overcoats) can't be filled.

Next, we'll create another alias for Sugar-Lips Habasi, since that's who we'll return the brandy to.

Finally, we'll create one more for the Player (this will be used for the objective switching when the player picks up the Brandy):

Name the alias, and check "Specific Reference" then press the button to the right.

A box pops up.  Chose (any) for the cell and then PlayerRef should autofill the "Ref" field below.  Press OK

 

Step 2: Save your work

 

 

 


Filling out the Quest Objectives with Aliases


Now that we've got our aliases, we can finish up our quest objectives. 

 

Step 1: Add a target to each objective, and associate it with an alias

First, go back to that Quest Objectives Tab, and right-click in the middle box to add a new target ref:

Click on the line and set the target alias: Since this stage is to find the Brandy in Ralen Hlaalo's house, set him to be the target alias.

Repeat this exercise for the other objectives.  In this case, we set objective 100's target alias to Habasi.

Now, we need to copy an important condition to these quest objectives - you can find in any other completed quest and copy it (such as in MQ02).  Open another quest and copy the condition (or just create it manually): GetGlobalValue Global:fbmwShowQuestMarker==1.  This will be used to allow players to turn off quest markers (quest objectives).

Once you copy the condition, go back to the quest you're working on and paste it in to the quest objective:

 

Step 2: Going back to the quest stages and adding result scripts to each stage to Display and Complete these objectives

Go back to the Quest Stages tab.  (Actually, you can do this any time since the script compiler doesn't check to see if the objectives you set actually exist)

For some of the quest stages, we will need to set objectives, and for others, we will need to complete objectives.

For example, at stage 100 when we return the Vintage Brandy to Habasi, we will be completing objective 100.  So that stage should have a result script like so:

SetObjectiveCompleted(100)

Stage 10, on the other hand needs to start an objective for the next stage, so it should have the result script:

SetObjectiveDisplayed(20)

You MUST have a setObjectiveDisplayed(xx) papyrus fragment on the startup stage (usually the first or second stage of the quest), otherwise the quest will not show up in the journal.

 

But what about in the middle?  How do we know when the player has grabbed the Brandy ( SetObjectiveCompleted(20) ) and needs to know what to do next ( SetObjectiveDisplayed(100) ) ?  Where do we put those lines?  That will be answered in the next section.

 

Step 3: Save your work

 

 

 


Assigning a Script to an Alias


At some point we need to know when the player picks up the Brandy.  This is why we created the Player alias - it is an overcoat on the player that basically is used to monitor the player during the quest.  We can assign a script to this alias that reacts when the player adds Brandy to their inventory.

 

Step 1: Add a script to the Player Alias

Open up the Aliases tab in the quest and double-click the one for the player.  Over on the right you will see a section for scripts:

Click the "Add" button and a window pops up:

Double-click new script; and then another window:

Here, we can name our script.  Please use a name that has the quest name as the prefix.  This helps keep the scripts organized.

 

Step 2: Add properties to the script for the Player Alias

Once you've created the script, you'll need to create some "properties".  Properties are required for Skyrim's scripts and are a new part of the scripting workflow.

Basically, anything in the game that you refer to in a script will need a property defined.  (You can go back and add properties after you write a script, but it's easier to add them first because the script will fail to compile if its properties aren't defined.)

By default, double-clicking on a script will open the properties box.  (Or right click on a script and choose "edit properties)

Next, click "add property".  This opens another window:

The only really good thing about Properties is that if you name your property the same as the base item, it is less work.  So, we will need a quest property, so we set the top box to quest, and then the name to the name of the quest.  Since we named it the same as the quest, the Property's "value" (the base object in the game) is filled out automatically:

Then we need a property for the vintage brandy itself (the item the quest-giver sends the player to fetch).

So we add a new property for the brandy itself, but we don't know what the item is called.  This is where we go back to the Object Window and use the search filter in the top:

And so we find that the base item is called 0FoodVintageBrandySo, we go to "add property" and type that in, and select "Potion" as the type.  Oops, it won't take names with a number at the beginning.  Fine.  That means it won't auto-fill the property's value, since the name isn't an exact match.

So, click "Edit Value":

And find the item 0FoodVintageBrandy in the list.

In this case, that's all the properties we need, but remember, anything in the game that you refer to in a script will need a property defined.

 

Step 3: Write the script for the Player Alias

You can go back to the quest window, then open the Player Alias, and then and edit the script by right-clicking on it and choosing "Edit Source".  (If you choose "open in external editor" and you have properly set up Notepad++, it will open that.)

When your editor window pops up, you'll need to add some lines of script - what we want to happen in the game to the Player:

Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer)
    if (akBaseItem == FoodVintageBrandy)
    fbmwTGVintageBrandy.SetObjectiveCompleted(20)
    fbmwTGVintageBrandy.setObjectiveDisplayed(100)
    endif
EndEvent

What does this script do? 

  • Event OnItemAdded It runs when the player adds an item to his or her inventory
  • if (akBaseItem == FoodVintageBrandy) checks to see if the item added was the property we defined earlier (FoodVintageBrandy).  As you recall, this property points to the base brandy item 0foodvintagebrandy that we found using the object window.
  • fbmwTGVintageBrandy.SetObjectiveCompleted(20) tells the game to complete Objective #20 for this quest and update the player's journal (since the player now has the Brandy).
  • fbmwTGVintageBrandy.setObjectiveDisplayed(100) tells the game to update the player's journal with a new objective - which we defined earlier as the one to return the Brandy to Sugar-Lips Habasi.
  • EndIf closes out the IF statement so the game knows we are done with the list of things we want it to do if the player has added the brandy to his/her inventory.
  • EndEvent closes out the event, finishing the script.

Put into the script, it looks like this:

When you save it (Ctrl+S) the game will try to compile the script (basically, evaluate it and make sure it works). 

If all goes well, you should see the message "Compilation Succeeded".  Othewise, the compiler will try to tell you why it failed and give you some hints as to how to fix it.

When you write a complicated script, make sure to explain what you're doing - ;comment your scripts - it helps reading them, for you and for the others.

 


Side Note on Objectives (advanced):

It is also possible to have multiple aliases on a single objective:

example1: multiple NPC to kill for the same quest

example2: objective is "fetch itemX for NpcY" and you just have two stages [10: I have been asked to fetch] & [100: I have fetched]
You can set one objective #100 with an alias on the itemX and an alias on the questgiver. Use conditions on the objectives accordingly to display the right alias at the right moment (eg getItemCount)

 

Step 4: Save your work

 

 

 


The Player Dialogue Tab & Finding Missing Dialog Topics


Now that we've got the basic of the quest stages and objectives set up, and you are a little more familiar with how the scripting system works, we need to go through the dialogue.

 

Step 1: Compare the Dialogue Lines Between the Games

In the Skyrim Construction Kit, go to the "Player Dialogue" view.

For the Vintage Brandy quest, it looks like this:

The ORDER of the topic infos (the list on the right) is EXTREMELY IMPORTANT! Do not change the order!

 

 

In the Oblivion Construction Set, click the equivalent, the "Topics" view.

You will see some similarities; however, with the Oblivion CS there is an extra line called "1corruption".   If you look at the text and the speaker, it obviously doesn't belong on this quest.  This is an error in the Morroblivion ESM file, unfortunately.

So, we can ignore that one.  Otherwise all of the dialogue is there.  Except for the GREETING topic.

If you see something weird, like topics that don't belong, please post about it in this thread.

 

Step 2: Compare, create, and find/move any missing GREETING/Hello lines.

So this gets a little weird.  In the Oblivion CS there was a dialogue topic called "GREETING" for every quest, which held the lines that the NPC said to the player when the player first initiated a conversation with the NPC.

In Skyrim, it works a bit differently.  Instead, there is the "Misc" tab on the quest window, which holds all the other types of dialogue, including the Skyrim equivalent of GREETING called "Hello".

If you take a look at the Vintage Brandy quest in the Oblivion CS, you'll note there is one GREETING.  So we have to find this in the CK and move it to a newly-created Misc/Hello topic.

Side note: If you can't find the greeting that starts a quest in Morroblivion, and you are working on a misc. quest, in the Oblivion CS try checking the quest fbmwMSGreetings (Greetings to Start Various Quests) for your greeting there.

 

IMPORTANT - only move greetings to a quest if the greeting is obviously a PART of the quest - if you're unsure, DON'T move it.

In the CK, go to the "Misc" tab:

Click New Topic:

Select "Hello" from the list:

Give it a name - usually the quest name + "GREETING":

Next, we use the "Edit" -> "Find text..." menu at the top of the CK to find the missing line:

Double-click on it in the search box to open the quest where it's hiding, then right-click on it and choose "Move to Topic"

Next, select the GREETING topic you just created.  You will have to uncheck the boxes at the top to show all topics.

Click ok to move it, resulting in this:

 

Compare the rest of the lines of dialogue by clicking through both the Skryim CK and the Oblivion CS and make sure everything is in its right place.  It is.  Good.

 

Step 5: Save your work

 

 

 


The Player Dialogue Tab & Dialog Conditions


Next, we need to make sure all of the dialogue in the quest in the Skyrim Creation Kit has the appropriate conditions.

 

Step 1: Basics of dialogue conditions:

A condition is basically like a constraint (or set of constraints) that limits when the dialogue topic will be said by someone.  Typically this is something like "GetIsID == Name of NPC" so only the dialogue topic is said by one NPC.  There are also conditions like "GetStage == XX" so that the topic is only said during a certain stage of the quest.  There are many, many ways to set these up, but luckily all we have to do is copy them. 

Here's our Skyrim CK Dialogue window.  If you double-click on a line on the right (highlighted blue below), it opens a window to work with that piece of dialogue:

In the Oblivion CS, you don't have to double-click.  Everything (conditions, etc.) is below the line, and changes when you click a new line.

Notice that there are three conditions on this line. 

  • GetIsID == 0habasi == 1 makes sure that only Sugar-Lips Habasi says the line.
  • GetPCExpelled == Faction:0ThievesSGuild == 1 makes sure that this line is only said if the player has been expelled from the guild.
  • GetInFaction == Faction:0factMorrowind == 1 is a legacy system from Morroblivion - there is no need to copy it

So we have to conditions to create on the equivalent line in the Creation Kit.

If you get into a situation with OR operators, instead of AND, make sure you keep the exact same order of the conditions
For details on how the game evaluates AND/OR logicals in dialogue conditions, read these posts.

Going back to the CK, double click on that same line:

First, at the top, check "Force Subtitle" -- do this on all the lines always so that if the player doesn't have subtitles turned on, they still see the lines.  (Yes, people are idiots)

Next, click on that middle section and add a new condition:

Use the condition menu to set up the condition:

And again for the "GetPCExpelled" condition:

 

Step 2:  A few IMPORTANT tips on working with conditions

Make sure that you set "Subject" and "Target" correctly for dialogue lines. 

In the Oblivion CS it is a checkbox called "target" to toggle back and forth.  In the CK, you have more options.

 

Where you can, use >=, <= instead of == .  If you have a condition like getDeadCount == 1, getItemCount == 1 etc... If that doesn't break the logic of other topic infos, use >= 1 (so that your conditions support more cases, like if the Player has more than one of the item, or somehow killed someone twice.)

 

If your quest comes with conditions already set: review them! they might not be complete/correct.  You should also double-check your conditions that you create on each dialogue line (just look at them a second time) to avoid errors, especially when you're just starting out.

 

Make sure your conditions will restrict this topicInfo to Skywind and will not bleed over to vanilla NPCs

This is pretty important: For example, if your only condition is getIsRace Khajiit == 1, then all khajiit in vanilla Skyrim or any mod loaded will be impacted.  (This is why in Morroblivion we used GetInFaction == Faction:0factMorrowind == 1)

Most of the time, the conditions on factions, locations, and specific NPCs are enough to restrict the dialogue to only Skywind NPCs.

In case of doubt, add a condition getInCurrentLoc OMorrowindLocation == 1 and you're good.

Speaking of conditions on location, you can use getInCurrentLoc for exterior areas and getInCell for interiors.

 

You can copy and paste conditions from one line to another to save time:

 

Note that in some dialogue topics you have choices - these point to other dialogue branches that are editable in the main dialogue window.  These should already be set up.  They are highlighted below in blue so you know where they're at.

 

Step 3: Save your work

 

 

 


The Player Dialogue Tab & Adding Scripts to Dialogue


Now that all of the dialogue lines are in place, and all of the dialogue conditions are in place, we need to make sure we copy over the dialogue scripts

 

Step 1: The basics of result scripts

In the Oblivion CS, there is a white text area for each dialogue line where you can type in a result script.

For example, it may just be a one-liner to set the appropriate stage in the script:

These lines are pretty easy to copy; you just have to:

  • find the equivalent (same) line in the Skyrim CK
  • copy over the script line
  • convert it to the format of a Skyrim script

so:

SetStage fbmwTGVintageBrandy 10

becomes:

GetOwningQuest().SetStage(10)

And then we add a couple of comments (with a ; before them so the game engine know they are comments, and not code) which are helpful for keeping track of things.

Most importantly, for the sake of everyone else, put in a comment telling people what quest this script is for.  Additionally, if it helps you to stay organized, include the original Oblivion script commands with a ; before them for your reference.

So our script becomes:

;quest is fbmwTGVintageBrandy
;SetStage fbmwTGVintageBrandy 10
GetOwningQuest().SetStage(10)

 

Step 2: Working with more complicated result scripts

The same basic process applies, but there is more to keep track of.  Like the scripts on our aliases earlier, we need to define properties for everything that we refer to in the script.

Let's look at a more complicated result script, where you complete the quest and you get your reward from Sugar-Lips Habasi.

Note that the box for result scripts in Oblivion is very small and it is easy to miss lines that are not shown - make sure to catch them all!

While only two lines are shown, there are actually about six lines if you scroll the box:

First, copy those lines to the Skyrim CK in the appropriate place, and put comments in front of them:

Next, go line by line and figure out the equivalent script for Skyrim.  This will get easier as you go, because most Morrowind quests have very simple result scripts, so there are only a few commands to know.

The final script will be:

;quest is fbmwTGVintageBrandy

;setstage fbmwtgvintagebrandy 100
GetOwningQuest().SetStage(100)

;player.removeitem 0puvintagecomberrybrandy1 1
Game.GetPlayer().RemoveItem(FoodVintageBrandy, 1)

;player.additem gold001 1000
Game.GetPlayer().AddItem(Gold001, 1000)

;additem 0puvintagecomberrybrandy1 1
Game.GetPlayer().AddItem(Greef, 1)

;modfactionreaction 0thievessguild playerfaction 5
ThievesGuild.ModReaction(PlayerFaction, 5)

;moddisposition player 10

Note that you have to define five properties for this script (in bold text above) for this script to compile.

If you forgot how to define properties, click here to jump to that section of the guide.

At the end, your properties look like this:

If you did everything right, you should be able to successfully compile the script (press the "compile" button) and check it for errors.

 

Step 3: Save your work

 

 

 


Cleaning your Mod in TES5Edit


Remember that mistake I made in this quest?  Moving the dialogue line "1corruption" when I shouldn't have?

Luckily, there is an easy way to edit our mod files (the .esp file you've been saving so regularly).A

A little program called TES5Edit - download link - will let you fix your mistakes.  Download the program, and extract the files to your main \Skyrim\ folder (not \Skyrim\Data\).

If you want to learn more about how powerful a tool TES5edit can be, there are plenty of links and reading at the download link.

 

Step 1: Removing your mistakes from a mod (very basic)

Then double click on your mod (or check its box and press OK).

When you run TES5edit, it will ask you what file, or multiple files, to open. 

Right-click and choose "Select None". 

Then double click on your mod (or check its box and press OK).

Wait for the program to finish loading your mod and its master files.

In this example, we know what we're looking for (the dialogue topic), so we open up the tree on the left and find it.  Then we right-click it and choose "Remove".

The first time you choose "Remove" you get a warning message:

Just wait and press "Yes I'm absolutely sure."  (Even if you mess up, you can close the program without saving, so no big deal)

There's one more part we need to remove (the dialogue branch) and then we're done with that:

 

Step 2: Cleaning your mod

Now, we get to a sore subject with many modders - dirty mods.  No not that kind of dirty - what we mean is that there are pieces of data in the mod that we don't need, or even want, but they are either added by mistake, or added due to bugs in the creation kit.

For more info on mod cleaning, see this article and this article.

Luckily, TES5edit can automate this process.

First, we go to the top and right-click on the header row for our .esp file, and choose "Apply Filter"

Next, we make sure the only box that is checked at the bottom that says "Conflict status inherited by parent."  The rest of the sections should be unchecked, as shown below.

Once the program is done applying the filter, we can right-click again and click "Remove "Identical to Master" records"

Once that's done, you'll see a message below with what it removed.  Note that it removes two records that I didn't even mess with, but for some reason (thanks CK) they were included in the mod's file.

If you see something there that you didn't WANT removed, make sure to NOT save the file and maybe start over or clean the mod by hand by looking for things that shouldn't be there and removing them.

Finally, we save the mod.

 

 

 

 


Testing your work


Step 1: Make sure your mod is active in your load order.

Step 2: Make sure you are familiar with the way the quest works

Go to UESP and find your quest, and make sure you know how it is supposed to work.

Step 3: Make a savegame just before you start the quest

This will really speed up the testing.

Step 4: Play through the quest every way possible

Many quests have multiple ways to play through them, so make sure to test them all.

Step 5: Note any problems and go back and fix them

Don't worry if you don't get them right the first time - that almost never happens. 

Useful in-game quest commands from the console

In game, press the tilde key (~, to the left of the number 1 key) and open the console.

Then type "StartQuest fbmwTGVintageBrandy" (or whatever your quest's name is).

You can check if it worked by typing: "GetQuestRunning fbmwTGVintageBrandy" (or whatever your quest's name is).

You can check the status of the quest's variables with "SQV fbmwTGVintageBrandy" (or whatever your quest's name is).

You can also use SetStage, GetStage, GetStageDone, CompleteQuest, StopQuest and other quest commands.

 

HELP my quest won't start!

If, for some reason the quest won't start at all, there are a few things to try:

Figure out what is supposed to start the quest normally

If you can't get a quest to start, make sure that somewhere in your quest's dialogue, the quest actually is started, either with

questname.start()

or

questname.setstage(# of the first real (non-blank) stage of the quest)

If there is no dialogue to start your quest in the quest itself, and it's a misc. quest, check the Morroblivion quest called fbmwMSGreetings (Greetings to Start Various Quests).  The greeting that starts your quest is probably there.  Then you need to use "Find Text" in the CK, and move it to a new Misc/Hello branch that you have created for it.  Then copy the result script over from Morroblivion, dialogue conditions, etc.

Make sure you have a setObjectiveDisplayed on the first stage

Remember, you MUST have a setObjectiveDisplayed(xx) fragment on the startup stage (usually the first or second stage of the quest, otherwise the quest will not show up in the journal.

Check your aliases

A quest won't start if it's aliases can't be filled.  Usually this is because either an alias wasn't fully set up (created, but not all the required settings were filled out) or if an alias points to something that can't actually fill that alias.  For example, if your alias points to a dead body, and you didn't check the "allow dead" box, then the alias can't be filled.

You can check if this is causing the problem by opening the console (described above) and starting the quest manually with the StartQuest command. Then use the GetQuestRunning command to see if the quest was successfully started (it will return "1" if it started, and "0" if it didn't).

 

Optional: getting an object's form ID

A few console commands require the use of a "form ID" instead of the name.  Here's how to find it and use it. (note that for quests it's not necessary, since you can just use the name of the quest, but that's what I used in the example for finding a form ID):

Look up the item you are interested in, in the object window, and get the ID (that long number to the right of the name):

So, the number is 0100F999 (the "form ID" of the quest).

However, the first two digits (01) will change based on your load order:

Since Skywind.esm is actually at position 05, the form ID we'll type in-game is 0500F999.

What?  Well, Skyrim.esm is 00, Update.esm is 01, then comes Dawngaurd (02), Hearthfires (03), Dragonborn (04) and finally Skywind (05). 

Your load order may be different of course, but that's the general process for finding Form ID's.  If you don't know your load order index, you can just try a few different first-two-digit possibilities in the console and you'll eventually get it.

 

 

 


Packing your mod to upload to Morroblivion.com


Once you're done with your mod to the best of your ability, you've got to get it ready to upload.  In the old days, you usually needed just an .esp file. 

With Skyrim's CK, you need to get the scripts you wrote too.

 

Step 1: Recompile all your scripts

For each quest you edited or worked on, open the quest window in the CK, and on the first tab (Quest Data) click the button "Recompile All Papyrus Scripts"

A window will pop up and inform you of the progress.  Wait for it to complete.

 

Step 2: Find your scripts

The reason we recompile all the scripts is so that all of their "modified dates" in windows get updated.

Then go to your \Skyrim\Data\Scripts folder, and sort it by date modified.  Then find the scripts that were updated a few minutes ago when you recompiled them.

Next, find the equivalent files in \Data\Scripts\Source:

These are the scripts (the four in the \Data\Scripts\ folder and the four source versions in \Data\Scripts\Source\ you need to include with your upload.

 

 

Step 3: Archive your files with 7zip or a similar program

If you are uploading more than one or two files, it's best to archive them in a single compressed folder.

The best program to do this is probably 7zip - download link -

Once you get it installed,

  • Create a new folder somewhere on your computer.
  • Copy your .esp file to that folder (just 1 file in our example)
  • Create a new folder within it and call it "Scripts". 
  • Copy all of the script files you recompiled to that folder (4 files in our example)
  • Create a new sub-folder under "Scripts" called "Source".
  • Copy all of the equivalent source script files you recompiled to that folder (4 more files in our example)

Again, make sure you include both the compiled scripts AND the source versions

Select both your .esp file and the Scripts folder that you have created.  Then right-click and choose "add to (foldername).7z"

7-zip will create the archive containing the files.  This is the file you upload to Morroblivion.com

 

Step 4: Upload the file to Morroblivion.com (or wherever, who cares)

Go to the quest hub thread.

Post a new comment and attach your file.

 

In the comment explain what you did, and what if anything you DIDN'T FINISH. 

... so hopefully someone else can figure it out and finish it.  :-)

 

 

 


Useful Websites and Links


Skyrim Creation Kit site - a particularly useful reference for the CK. 

Unofficial Elder Scrolls Pages (UESP) - a wiki covering all the content of the original Morrowind game, as well as the other games

Oblivion Construction Set site - if you are having trouble using the Oblivion CS

 

 

 


Useful Scripts for Dialogue


If you're looking for something that's not on here, try searching for it on the Skyrim Creation Kit site

 

Setting a quest stage:

Oblivion:
syntax: setstage questname #
example: setstage fbmwtgvintagebrandy 100

Skyrim:
syntax: property.SetStage(#)

example: GetOwningQuest().SetStage(100)
;does not require a property defined

example: fbmwtgvintagebrandy.SetStage(100)
;requires a property defined for the quest

 

Starting a quest:

Oblivion:
syntax: StartQuest questname
example: startquest fbmwtgvintagebrandy

Skyrim:
syntax: property.start()
example: fbmwtgvintagebrandy.start()
;requires a property defined for the quest

 

Displaying & Completing Quest Objectives:

Oblivion: N/A

Skyrim:
syntax: property.SetObjectiveDisplayed(#)
;if setting a objective for a quest other than the one that you are in

syntax: GetOwningQuest().SetObjectiveDisplayed(#)
;if setting an objective for the current quest you are working on

syntax: SetObjectiveDisplayed(#)
;if you are in that quest's stage tab

example:  fbmwtgvintagebrandy.SetObjectiveDisplayed(10)
;requires a property defined for the quest

example:  GetOwningQuest().SetObjectiveDisplayed(10)
;no properties needed

example: SetObjectiveDisplayed(10)
;no properties needed

For completing objectives, replace SetObjectiveDisplayed with SetObjectiveCompleted

 

Adding and removing items from the Player:

Oblivion:
syntax (remove): player.removeitem itemref #
example (remove): player.removeitem 0puvintagecomberrybrandy1 1

syntax (add): player.additem itemref #
example (add): player.additem gold001 1000

Skyrim:
syntax (remove): property.RemoveItem(property, #)

example (remove): Game.GetPlayer().RemoveItem(FoodVintageBrandy, 1)
;requires only the item's property defined

example (remove): playerref.RemoveItem(FoodVintageBrandy, 1)
;requires both the "playerref" property and the item's property defined

syntax (add): property.AddItem(property, #)

example (add): Game.GetPlayer().AddItem(Gold001, 1000)
;requires only the item's property defined

example (add): NPCref.AddItem(Gold001, 1000)
;requires both the "NPCref" property and the item's property defined (it could be anyone, or a container, or the player)



Adding or removing items from the NPC (speaker):

Oblivion:
syntax (remove): removeitem itemref 1
example (remove): removeitem Gold001 1000

syntax (add): additem itemref 1
example (add): additem 0puvintagecomberrybrandy1 1

Skyrim:
syntax (remove): akSpeakerRemoveItem(property, 1)
example (remove): akSpeaker.RemoveItem(Gold001, 1000)
;requires a property defined for the item

syntax (add): akSpeakerAddItem(property, 1)
example (add): akSpeaker.AddItem(FoodVintageBrandy, 1)
;requires a property defined for the item

 

Changing a faction reaction:

Oblivion:
syntax: modfactionreaction faction1 faction2 #
example: modfactionreaction 0thievessguild playerfaction 5

Skyrim:
syntax: Property1.ModReaction(Property2, #)
example: ThievesGuild.ModReaction(PlayerFaction, 5)
;requires two properties defined, one for each faction

 

Changing a faction rank:

Oblivion:
syntax: Player.SetFactionRank faction, rank#
example: Player.SetFactionRank 0ThievesSGuild, 1

Skyrim:
syntax: property.SetFactionRank(property, rank#)
;requires two properties defined -one for the actor, one for the faction

example: Game.getPlayer().SetFactionRank(ThievesSGuild, 0)
;requires only the faction property since we use "Game.getPlayer()"

 

Starting combat with the player:

Oblivion:
example: startcombat player

Skyrim:
syntax: property1.startCombat(property2)
example: akspeaker.startCombat(Game.GetPlayer())
;does not require any properties if it's in a dialogue result script

 

 

 


Quick Guide for those who are already experienced with the Skyrim Creation Kit


 

Requirement

Set the following script prefix in your CK preferences : FBMW (all your TIF will be named FBMW_TIF_XYZABCD)

  • use « ; » to write comments (for exemple commenting the script with the name of the quest it comes from is really useful)

 

Main Steps

 

  • Have a look at the quests tracker https://docs.google.com/spreadsheet/ccc?key=0AubmRhWYZsEbdDFaNEtxb1F4R0NOOXZrVkhBbE82c2c and reserve a quest that is not yet reserved.

  • find its article on a wiki like UESP (that will be your reference)

  • download the latest Skywind master

  • open Oblivion's construction set and load morrowind_ob.esm, this will be your reference). You can also use Morrowind's construction set, but the quests are organized a bit differently).

  • open Skyrim's creation kit and load Skywind.esm (used the stripped version of skyrim.esm)

  • Find your quest

    • In Creation Kit, under character > Quest

    • In Oblivion's Construction Set, push the Q button in the toolbar

  • Before starting implementation, check that you understand and apply all the rules/settings described here : http://morroblivion.com/forums/skyrim/skywind-mod-releases/3306

  • Implement the quest to the extent of capability

  • Save your changes in a esp file

  • package an archive with the esp file and the scipts files (both source and compiled versions)

  • Merge/Propose the esp for merge (caution about merging and packaging : if merging with the CK, the names of the script files are modified)

  • Once the esp file is merged, update the tracker to unreserve the quest and note what you did and what you weren't able to do.

 

Implementation

 

  • Your quest stages should've already been created. You will have to script them.
  • Aliases and Objectives will have to be created
  • Dialogues: They should be there as well. If the dialogue is not in your current quest. Try to find its location by using the "find text" menu in the CK. Check in the quest tracker if the quest is currently reserved. If no, then reserve the quest, go ahead and do your change. If yes, then contact the modder who reserved and coordinate with him or her. If your dialogue already have conditions, verify and fix them as this was a first rough pass. If the conditions haven't been done, you will have to implement them by comparing with morroblivion or morrowind.
  • Dialogues: You will have to script the topic info fragments in order to advance the quets, give items to PC/NPC, etc....
  • Some quests will need further scripts (like advancement in factions). Have a look at the quests that have already been implemented to understand how that was done.

If you never implemented a quest and feel lost, please have a look at the CreationKit.com tutorials, they're really well done.

 

a few points to know:

 

  • Quest Data : the description of the quest

    • ID : internal ID

    • Quest Name : appears in the journal

    • Priority

    • Start Game Enabled : is it started as soon as the game start (most of the times, no)

    • Quest conditions / Quest dialogue conditions

 

All these fields must be the same than in morroblivion (value, checked/unchecked, conditions)

 

  • Quest stages : the different steps of the quest

    • check « complete quest » if necessary

       add script fragment if necessary (add comments using « ; »)
  • Quest Aliases

    • If you want to add a quest marker to any of your objectives, you need to use aliases

 

  • Quest Objectives

  • identify the various objectives of your quest (kill NPCxxx, bring itemYYY for every stage)

  • Create an objective for each one of them

    • for more clarity, the objective index usually matches the stage that describes this action being done.

    • add correct conditions

    • add aliases (that would be your quest markers).

 

Objective Index

Display text

Target Ref

100

Bring shipment to Bivale Teneran

Bivale Teneran [getStage fbmwVTraderLater ==30]

 

 

  • Player Dialogue / Topics

  • all your dialogue will be there, except the greetings and special dialogue (see below)

  • Misc Tab

  • 99% of the GREETINGS should be in the MISC tab. If you're greeting is missing in your quest, verify if it's not in another quest. if it's nowhere to be found, you can create it.

Tips

 

  • The order of the topic infos is extremely important ! Do not change it, unless you're confident in your change.

  • Check « force subtitle » on every topic info

  • order of the conditions: read this http://morroblivion.com/forums/skyrim/skywind-mod-releases/3...

  • Pay attention to the conditions you are writing ? Does it apply on the NPC talking or on the player ? Select subject or target

  • If a condition like getDeadCount == 1, getItemCount == 1 etc.. If that doesn't break the logic of other topic infos, use >= 1 (so that your conditions support more cases).

  • If you don't know how to do something for now, keep track of it ! (use Skywind's bugtracker and the quest tracker)

  • when a topic info fragment script is created, it usually needs to close the topic info screen [OK] and to reopen it to work correctly.

  • if you need to have a script, in order to declare properties, you can just type a « ; » character and a script will appear.

  • Comment  your scripts ! (it helps reading them, for you and for the others)

  • For conditions involving disposition, have a look at http://morroblivion.com/forums/skywind/skywind-development/2772
  • SAVE OFTEN !

  • File > Preferences > Script : Prefix allows you to define an automatic prefix for your scripts

Tests

 

  • At least verify that all your scripts compile.

  • To test, run Skyrim with skyind.esm and your esp checked.

  • Try to walkthrough your quest.

Release

You have to send to Skywind's team (drop a line in the quest hub forum thread) :

  • your esp

  • the scripts (compiled and source), found in Skyrim/data/Scripts and Skyrim/data/Sources

    • Find them using the prefix of FBMW and the timestamp

    • In case of doubt, open your quest and on Quest Data, click « Recompile All Papyrus Scripts », it will update the corresponding files in your scripts folder (updating their timestamps).

Tutorial / Links

http://mw.modhistory.com/download-106-5552   A good dialogue tutorial for Morrowind modding, if you work with Morrowind's and want to understand what's in there.

Edited by: grumpycat on 12/08/2013 - 16:28
digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
Good luck to read all that !I

Good luck to read all that !

I lost 3 hours with camCorder so I decided to write it down. If someone wants to do a video, then I'm all for it ;)

PS : maybe that's worth to make this thread sticky ?

Clint
Clint's picture
Member
Offline
Last seen: 1 year 3 months ago
Joined: 03/08/2011 - 04:00
Karma: 985
Thank you a ton for this

Thank you a ton for this tutorial Digitalparanoid! This was sorely needed! Stickied! :)

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
Thanks ! You're welcome. I'll

Thanks ! You're welcome. I'll probably update the original post if some questions are asked and (answered !) in this thread.

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
Considering the problems

Considering the problems we've had to merge the first quest (bear with us, it's the first quest ! ;) ), we need to add a new best pratice : rename your scripts (prefix them with the name of your quest)

example : when you create a topic info and add a piece of script, you will get a fragment created e.g. TIF_XYZ123.

Just above the text area, go to the advanced tab and click "rename" : type <THISQUESTID>_TIF_XYZ123 and click ok.

So when you're done with your work and want to package everything, you will be able to look for <THISQUESTID> in your Skyrim/Scripts and Skyrim/Scripts/Source folders and find them easily (just package the scripts you have modified)

[orginal post updated]

Mehh
Mehh's picture
Member
Offline
Last seen: 1 month 3 weeks ago
Joined: 08/12/2012 - 10:38
Karma: 1478
Since I'm a bit burned out on

Since I'm a bit burned out on making npcs(god help me) I decided to try my luck at making quests! Anyway, I've followed your instructions so far, and I'm making this quest. http://www.uesp.net/wiki/Morrowind:The_Beauty_and_the_Bandit

I've done all the log entry stuff, but where do I add the scripts like this "AddTopic 1MaurrieSAurmine"? Do I copy it into the kymQuest box? I did that and Papyrus bitched at me. =|

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
@Mehh ok so here's what you

@Mehh

ok so here's what you have to do

1/ you need to have the 1MaurrieSAurmine dialogue created in dialogue views (with a branch and a topic, you can add the topic infos later, that's not an issue) - I checked the filtered dialogue and the topic is only in this quest, so that's the only topic we have to worry about.

1/ on stage 100, type anything in Papyrus Fragment (usually just ';' so that it compiles)

2/ click ok to close the quest, it will generate the script fragment (invisible)

3/ reopen the quest and go back on stage 100

4/ hit properties

5/ add a new property of type "Topic", click ok

6/ select the new property and click edit value

7/ in the drop down box, pick the topic you have created

8/ click ok

9/ back in the fragment, remove your incorrect code

10/ "translated in papyrus", this will be <yourPropertyName>.add()

Here you are !

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
added a tip about dialogue

added a tip about dialogue condition involving disposition.

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
added the tip:File >

added the tip:

File > Preferences > Script : Prefix

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
added some details about

added some details about linking dialogue topics (some of them, you don't really need to)

Dark_Ansem
Dark_Ansem's picture
Member
Offline
Last seen: 9 months 1 week ago
Joined: 09/27/2012 - 14:14
Karma: 62
Skyrim has radiant quests.

Skyrim has radiant quests. would they be good candidates for quests like this one, who are trivial and non-essential?

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
Well, I've never really

Well, I've never really played with radiant quests in the CK...

My assumption was to process all existing quests as "normal" quests.

If time permits and modders want to work on then obviously, we can add radiant quests, as an optional esp.

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
Updated the tutorial with

Updated the tutorial with regards to the new master (should take less time now !)

Xander9009
Xander9009's picture
Member
Offline
Last seen: 10 months 3 days ago
Joined: 04/08/2013 - 16:22
Karma: 18
I was thinking of giving

I was thinking of giving quest conversion a shot. So, should I go ahead and start using these instructions even though they're apparently going to change soon, or should I wait for it to be updated before seeing if I'm up for it. (Mind you, I definitely intend to help SOMEWHERE. I just haven't decided where yet. Creatures seem to be in the most need, but that's the area I'm least experienced in lol.)

Alternatively, if there's somewhere else I should start 'cause it needs more work now, let me know. I just don't want to do voice or meshes/textures. I'm going to look into the mesh/texture making soon, but I'd rather start somewhere that I have a bit of pre-loaded know-how.

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
I didn't have a lot of time

I didn't have a lot of time to update the OP (lot of work at my job AND for Skywind).

But all in all, the process is much more simple than it is described in the current tutorial. You can read the OP to get the idea of what's needed to do for a quest.

But keep in mind, that

1/ quest stages are already here

2/ dialogue topics are here as well

2.1 some of them already have conditions (although it's better to check if they are correct)

2.2 some of them might be under another quest, you can edit it (as long as the quest is not reserved by someone => if so, please coordinate with that person to avoid conflicts) but DO NOT MOVE THEM TO ANOTHER QUEST for now. We need to adress that globally (will be my next action item).

2.3 Greetings are either there or missing depending on the quests. Don't work on it as this is my current action. You can drop me a note if you need something done, but let's avoid conflicts.

3/ Actions to do

select a quest in the tracker and tell me you're reserving it, so I can update the tracker

script quest

script quest stages

create objectives and aliases

check dialogue conditions

script topic info fragments

play and test :)

 

Good luck !

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
OP updated with a very simple

OP updated with a very simple process !

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
OP updated with a link to a

OP updated with a link to a morrowind dialogue tutorial.

zilav
zilav's picture
Contributor
Offline
Last seen: 1 month 2 weeks ago
Joined: 11/26/2012 - 12:51
Karma: 1338
Not about conversion, but how

Not about conversion, but how to reuse Skyrim's courier quest, might be useful

http://forums.bethsoft.com/topic/1460233-tutorial-using-the-...

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
That can be an alternative to

That can be an alternative to rumors that start a quest. I'm keeping the link.

thanks!

EnvyDeveloper
EnvyDeveloper's picture
Member
Offline
Last seen: 6 months 1 week ago
Joined: 05/02/2011 - 05:00
Karma: 490
Yeah, that could help with

Yeah, that could help with Bloodmoon's first quest as well. Nice little twist to the game :)

SBB64
SBB64's picture
Contributor
Offline
Last seen: 1 year 4 months ago
Joined: 06/23/2013 - 11:21
Karma: 375
Can't update the spreadsheet

Can't update the spreadsheet for some reason. Attached is the start of the Imperial Cult quests. Quests so far:

Join Cult, Marshmerrow, Muck, agree to help Iulus and Kaye to trigger their first quest. The Marshmerrow and Muck quests only work within the chapel. I can't figure out how to correct the farmer's dialog for each of these.

BTW, if it hasn't already been mentioned, leaving the chapel's downstairs to go up the stairs will CTD halfway up the first flight of stairs.

Mehh
Mehh's picture
Member
Offline
Last seen: 1 month 3 weeks ago
Joined: 08/12/2012 - 10:38
Karma: 1478
Nice job, and I found the

Nice job, and I found the cause of the crashes in the Imperial chapel.

For now remove these files from your Skywind, until the meshes are fixed.
morrowind\architecture\imperial\interior\imp_smallstairs01.nif(you're going to have to tcl to go down the stairs)
morrowind\architecture\velothi\interior\vel_smallwall01.nif
Removing this should fix your temple crashes.

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
Yes, the tracker is read

Yes, the tracker is read only, so that I avoid vandalism ;) I reserved all the Imperial cult quests to your name so no one would conflict with you.

I'm pleased to see you start on this :) I'll test and give feedback asap.

SBB64
SBB64's picture
Contributor
Offline
Last seen: 1 year 4 months ago
Joined: 06/23/2013 - 11:21
Karma: 375
Don't go getting all crazy on

Don't go getting all crazy on this. I just did the basics I know how. Even then it was pulling what little hair I have left. I've never programmed in TES environments before and the CK is, well, lacking in many ways. I'll do what I can to get each quest started but I don't understand code enough to do promotion advancements, even with looking at the code for the fighters guild quests. I'm also finding that the dialog files pulled from Morrowind don't work well in Skyrim. The dialog back then allowed for "choices" of responses and it seemed to have a better pathway from one brance to another. The farmer for the marshmerrow quest seems to now have a pile of sentences with very little linking between them. I tried to rebuild the dialog to have multiple options but it just didn't work like I wanted it to. So I removed it for now.

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
mmm. Not sure what you

mmm. Not sure what you mean... I'll have a look at your plugin tonight. Don't feel any pressure from me, sorry if you felt it. I just meant for you to be able to have a look in those quests without fear that anyone would conflict with you. I can unreserve at will.

 

Also I can certainly code the advancement script, if necessary.

thermador
thermador's picture
Administrator
Offline
Last seen: 18 hours 19 min ago
Joined: 12/16/2010 - 04:00
Karma: 1403
Donor
Definitely steal the

Definitely steal the advancement scripts from Morroblivion - they are pretty cool pieces of script engineering.  It will save you a lot of time.  :-)

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
I clearly inspired myself of

I clearly inspired myself of these scripts when I worked on the morag tong.

SBB64
SBB64's picture
Contributor
Offline
Last seen: 1 year 4 months ago
Joined: 06/23/2013 - 11:21
Karma: 375
Since the ingredient quests

Since the ingredient quests are similar to some in Skyrim, I took a look that code and realized I am missing all sorts of commands and checkboxes. I've now completed the ingredient quests and the alms donation quests. However, I'm finding that the two quest givers aren't displaying their additional quests after the first one. Is there a built in timer or some other issue I am missing? I can force the next quest by setting it to 1 and I will then get the next dialog, but I can't get that first dialog which triggers the quest (where they say GREETING).

In the meantime, I'll see about the more complicated quests for Kaye. At this point, I may as well do all of the IC quests or at least the basics to them.

thermador
thermador's picture
Administrator
Offline
Last seen: 18 hours 19 min ago
Joined: 12/16/2010 - 04:00
Karma: 1403
Donor
Imperial Cult quests were a

Imperial Cult quests were a little weird in Morrowind because a lot of them were based on the greeting, not when the player selected a specific dialog topic.  So you talk to him, he says as a greeting "I have another job for you", and you accept, the next time you talk to him, he asks you "how is the job is going" and you tell him you are done (for the reward) or not done (for a decrease in disposition).  In the original Morrowind Construction Set these characters had a ton of different greetings with conditions on them so that you always got the right one depending on where you were in the quest line.

I don't know if this would be feasible in Skyrim or not.  Either way, it is a pain to organize.  You may just find it easier to change these quests so that they are started/updated/completed by a dialogue topic that the player picks out of the list, like a normal Skyrim quest.

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
@SBB64 I didn't have the time

@SBB64 I didn't have the time to review completely your previous plugin yesterday night. Do you want to upload your current work ? I can complete it with the greetings and stuff. If you send me and continue working on quests, start a new plugin, so we don't conflict.

SBB64
SBB64's picture
Contributor
Offline
Last seen: 1 year 4 months ago
Joined: 06/23/2013 - 11:21
Karma: 375
Here are the rest of the IC

Here are the rest of the IC quests except for the Oracle series and Advancement (other than joining). This file doesn't touch changes to the first file. So no overwriting should be necessary.

Right now, the dialog options are the same as Morroblivion in that the quests are handled by the GREETING dialog prompt. I think I may change it to something else like "Is there something I can help with?" or anything other than just the word GREETING. I'm also seeing that every possible topic is listed with each person. So the GREET is sometimes very far down the list. I have bumped up the priority on some to see if that pushes it up the list. I do see it happen but it isn't consistant.

There is a command to review a topic but it looks like we currently have all of them set to be displayed. Not sure if anyone was planning to set them to not display or if that is even possible in Skyrim. I'm still trying to figure out the dialog system. The tutorials aren't much help beyond the basic "Hi there". We have actors with tons of dialogs, there must be a way to control how and when the player sees all of them.

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
In the old days (understand

In the old days (understand Morrowind and Oblivion), we could add a topic to the available list by using addTopic.

There's still something like this:

http://www.creationkit.com/Add_-_Topic

 

However, look here: http://www.creationkit.com/Topic_Info_Fragments

"Do not have any properties or variables pointing at a topic info fragment script. For memory reasons, these do not stick around and may cause odd behavior if you try to hold onto them."

So it's a big no-no. Admittedly, they say nothing about adding topics in stage scripts (or any other script).

But the approach followed so far is:

1/ base the topics on quests

- general (lore) topic or multi quests topic > in morroDefaultQuest

- quest specific topic > in its specific quest

With that done, the lore dialogue are always available (as morroDefaultQuest is always running) and the quest specific dialogues only appear when their quest is started.

2/ make best possible use of conditions

Conditions should tell you when to display the dialogue options and when not to display them (Remember if no topic info has matching conditions, the topic will not appear in the list).

3/ Unclutter the topic list

a. Go a step farther than the conditions in morrowind and morroblivion. Don't hesitate to hide completely a topic at some point if it doesn't make sense anymore. (ex: caius dialogues from the first quest don't need to appear in the seventh quest)

b. for all (most) of lore dialogues, I put them as "normal" topic (opposed to top level topic) and they're available when you click the "what do you know about..." option. So you basically have a sublist for lore dialogues and your initial list is shorter.

Regarding Greetings. They actually need to be organized:

They either go in a blocking dialogue branch: best example is the courrier quests in skyrim: "come here I have a letter for you blabla" or in the misc tab, in a "hello" topic depending on the need. Also, need to use the condition "isInDialogueWithPlayer" (0/1) to have greetings said out loud when you pass close to a NPC and those that should be told only when you engage a real conversion. At the end of the day, there should be no GREETING dialog option.

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

What I'm working on with regards to the dialogue:

I'm currently reorganizing the dialogue topics so that they're put in the best location possible (as described above). I'm adding missing dialogue from morrowind (not present in morroblivion) and also modifying the order.

Why all this ?

1/ to have a definitive, final deal on dialogues. The scripts that converted the dialogues have reorganized things in the best way they can and it was agreed we would complete that work manually. When that is done, the only work would be to add/verify conditions

2/ Because the name of the quest, branch, topic info order, etc... factor in the name of the voice file, so we need to have something stable.

3/ because I'm masochistic

This is a massive reorganization, even though very little is seen on-screen. Topics starting with A,B,C (in morrowind) are already done and will be available in the next release. I'm now working on D.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

What I will be working on, someday in the future:

Replace the prompts in the dialogue list. Instead of having just one or two words, form full sentence, like in Skyrim.

ex: "Popular potions"

--> topicInfo #1 for Arrille "What are your best-selling potions, Arrille ?"

--> topicInfo #2 for a smuggler "I'm looking for counterfeit potions that sell well"

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
SBB, I will review your

SBB, I will review your plugins and complete them.

thermador
thermador's picture
Administrator
Offline
Last seen: 18 hours 19 min ago
Joined: 12/16/2010 - 04:00
Karma: 1403
Donor
Here is the thieves guild

Here is the thieves guild joining / advancement quest, and the first three thieves guild quests.

Everythings done and tested, including result scripts etc.  The objectives could probably use some improvement, but they work anyway.

I cleaned the file in TES5edit but I only removed the "identical to master" stuff.  It may need a second cleaning.

Apparently, the advancement script isn't quite working properly.  I need an event type that runs the script continuously like "begin gamemode" did in TESIV.  This is the script if anyone has any ideas.

http://pastebin.com/app5tU2v

 

AttachmentSize
Plain text icon fbmwTGDiamonds.esp52.88 KB
zilav
zilav's picture
Contributor
Offline
Last seen: 1 month 2 weeks ago
Joined: 11/26/2012 - 12:51
Karma: 1338
"Running continuously" is the

"Running continuously" is the main problem of save game bloating from papyrus. I hope there are some other means to make it work.

Also what about Story Manager? Why Skywind doesn't use it? Is it pointless?

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
OnInit() will only be called

OnInit() will only be called once, when the script initializes.

If you want something that checks regularly something, you need registerForUpdate(), unregisterforupdate(), onUpdate().

I'm not saying that it's the best solution.

I guess what you could do is have a method computeAdvancement() that you call on every final quest stage that fills the necessary script properties (they need to be declared as conditional - as well as the script) in order to refer to them in dialogues conditions with getVMQuestVariable/getVMScriptVariable. Alternatively, you can use global variables instead of script properties.

 

PS: can you please post the scripts along with the esp? Without them we cannot test.

thermador
thermador's picture
Administrator
Offline
Last seen: 18 hours 19 min ago
Joined: 12/16/2010 - 04:00
Karma: 1403
Donor
digitalparanoid

digitalparanoid wrote:

OnInit() will only be called once, when the script initializes.

If you want something that checks regularly something, you need registerForUpdate(), unregisterforupdate(), onUpdate().

I'm not saying that it's the best solution.

This is what SBB64 came up with to fix my script:

Function PromotionCheck()
  RegisterForUpdate(10)
endFunction

Event OnUpdate()  ; use this instead of OnInit()

So hopefully that will work?

digitalparanoid wrote:

I guess what you could do is have a method computeAdvancement() that you call on every final quest stage that fills the necessary script properties (they need to be declared as conditional - as well as the script) in order to refer to them in dialogues conditions with getVMQuestVariable/getVMScriptVariable.

That is how the guy who did the fighters guild did it.  Whoops.  Reinventing the wheel.  Which method should we use?  SBB64 is working on this for the Imperial Cult and making good progress, so I will probably try to copy whatever he does.

 

digitalparanoid wrote:

PS: can you please post the scripts along with the esp? Without them we cannot test.

Sorry digital, I will upload the full versions with scripts tonight.  I forget about these things (scripts being not embedded into the mods).  I also forgot a result script on the last stage of quest three, so I will fix that and hopefully the advancement script as well and then repost.

 

thermador
thermador's picture
Administrator
Offline
Last seen: 18 hours 19 min ago
Joined: 12/16/2010 - 04:00
Karma: 1403
Donor
zilav wrote: Also what about

zilav wrote:

Also what about Story Manager? Why Skywind doesn't use it? Is it pointless?

The Story Manager seems pretty complex - I took a look at some of the tutorials and I still don't understand what it's for exactly.  (http://www.creationkit.com/Story_Manager)

Since most Morrowind quests (if not all) are triggered by dialogue, it is easier to just stick with that system and copy the existing quests over, instead of trying to convert them to a different type of system.

If, at some point, they get updated with dialogue trees, story managers, and other fancy Skyrim stuff, then that would be awesome, but I'm not sure what the benefits would be.

 

SBB64
SBB64's picture
Contributor
Offline
Last seen: 1 year 4 months ago
Joined: 06/23/2013 - 11:21
Karma: 375
The scripting has been a

The scripting has been a serious learning task. However, I think the method used for the TG seems cleaner than the one for the FG (if such is possible). The FG advancement requires Globals to be defined. As long as you reference the Advancement script in your other scripts, you can update variables without needing Global defined ones. I do use them for the quests that want multiple items. This seems to be the only way to get the quantity to display in the Objective (at least that is what the tutorial claims).

Still have a problem that a quest giver will only talk about the first quest. Once that is completed, the GREETING prompt is gone and you can't get the next quest. The tutorial claims that quest dialogs will only appear if the quest has started. So I guess I could either load all quests to start at game start, or trigger each one in series once you complete them, like how the main quest of Skyrim always runs the next quest in line for you. 

thermador
thermador's picture
Administrator
Offline
Last seen: 18 hours 19 min ago
Joined: 12/16/2010 - 04:00
Karma: 1403
Donor
In Skyrim, instead of

In Skyrim, instead of GREETING they use the "Misc" type of dialogue (toward the far right, a tab on the quest window).  The type is a "Hello".

http://www.creationkit.com/Misc_Tab

That is where I have been putting the GREETING topics for the TG quests - creating a new Misc/Hello.  (most of them were attached to other quests when originally imported, but I found them with Edit Menu -> Find Text..., and then double clicked on them, then right clicked and selected "Move to" and then picked the new Misc/Hello that I had created as the destination)

Of course, the TG Misc/Hello's don't drive the quests forward so I don't know how that would work for IC, but it should be able to work with a result script on the Misc/Hello, right?

Either way, I think the goal of moving them is that the player shouldn't have to ever click on GREETING in a dialogue menu.

SBB64
SBB64's picture
Contributor
Offline
Last seen: 1 year 4 months ago
Joined: 06/23/2013 - 11:21
Karma: 375
I have tried various ways to

I have tried various ways to get the quest to trigger and always found results less then appealing. So after looking at Skyrim's redesign, I see that most quests start with an empty stage flagged as the start. The next stage is the first one to have information in it like a log or conditions. So I have taken all of the IC ingredient quests and changed stage 1 to 2 and added a new stage 1. By telling the closing script of the prior quest to start the new quest, the quest giver has always had the next quest ready to talk about without the quest popping up before I talk to him. It works! I did have to set a few dialog conditions to now check for stage 2 instead of 1 but this seems to be the answer that gives the best results.

I've also got all the ingredient quests to work like the Riften ingredient quests where it tracks the number of ingredients you have and when you need to head back to the quester. Working through the alms quests now to vary the reputation points based on doubled donations. So far the scripts seem to work correctly.

thermador
thermador's picture
Administrator
Offline
Last seen: 18 hours 19 min ago
Joined: 12/16/2010 - 04:00
Karma: 1403
Donor
Nice work!  Here are the

Nice work!  Here are the first four thieves guild quests, and an updated advancement quest script that ... probably ... works.   With scripts this time.

When I did the last quest I took a ton of screenshots of each step using a cool freeware app called Greenshot.

So I will try to do a tutorial writeup tomorrow using all those pics.  Time for bed.

 

AttachmentSize
File first-four-tg-quests.7z18.63 KB
Mooncat
Mooncat's picture
Member
Offline
Last seen: 3 years 5 months ago
Joined: 04/05/2011 - 07:53
Karma: 226
thermador wrote: That is how

thermador wrote:

That is how the guy who did the fighters guild did it.  Whoops.  Reinventing the wheel.  Which method should we use?  SBB64 is working on this for the Imperial Cult and making good progress, so I will probably try to copy whatever he does.

Without having looked at his code, that method sounds cleaner and less prone to causing problems down the line.

Also, general best practice is to use RegisterForSingleUpdate() instead of RegisterForUpdate(), and just have the Update event call the RegisterForSingleUpdate() every time it runs. That said, I really don't see the need to use the Update event, because a function like this doesn't need to constantly run in the background. Like zilav said, we should be using the story manager for this.

Here's what you do: Make your PromotionCheck() function, and stuff all of the code necessary to calculate when the player is ready and update their journal in it. In the code you posted to PasteBin, it's the stuff in the OnInit event. Now, whenever the player games reputation by completing a quest for the guild (I assume that's how it works), make a call to PromotionCheck().

Next, make a new quest. This quest's only purpose is to work with the story manager. Set it up as a Skill Increase event quest (that's in the quest data tab) and for the quest script, have the OnStoryIncreaseSkill event check if it's a skill related to that faction's school. If it is, then call PromotionCheck().

Hmm. Come to think of it, we should probably use the same implementation for all of our factions, so we only need one story manager event for everyone. If everyone is on board with that, I might try to free up some time this weekend to play with a universal promotion checking framework.

 

[Edit] I hope my tone isn't coming off as condescending or anything. I'm pretty tired at the moment, and if that's the case it's unintended. I'm only butting in because I have a bit of experience with the story manager, and Skyrim's scripting, while more powerful, is also more prone to chew up save games than it was in Oblivion.

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
3 additional points: - when

3 additional points:

- when expected dialogues are not showing up, it's always worth trying saving and reloading.

- Greetings should be a mix between the "hello" topic in the misc tab and a blocking branch in the player dialogue tab. In the misc tab, you would have things like "oh thank you for killing blablah" and in the blocking branch you would have things like "hey you, stop, I need your help !". The GREETING topic should never appear in the possible choices.

- would be good to have a unified approach for the factions advancement, use scripts inheritance.

 

Mooncat
Mooncat's picture
Member
Offline
Last seen: 3 years 5 months ago
Joined: 04/05/2011 - 07:53
Karma: 226
digitalparanoid wrote: -

digitalparanoid wrote:

- would be good to have a unified approach for the factions advancement, use scripts inheritance.

I'm think we don't even need inheritance. We could give all of the advancement quests the exact same script, and set the details such as faction skills as properties. Unless I'm forgetting something? (I might be -- I haven't rummaged around the CK in ages.)

digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
Might be enough indeed, I

Might be enough indeed, I just wondered if all the advancement scripts are supposed to work exactly the same ?

thermador
thermador's picture
Administrator
Offline
Last seen: 18 hours 19 min ago
Joined: 12/16/2010 - 04:00
Karma: 1403
Donor
Yeah they are all basically

Yeah they are all basically the same script except for the faction skills.

Mooncat
Mooncat's picture
Member
Offline
Last seen: 3 years 5 months ago
Joined: 04/05/2011 - 07:53
Karma: 226
Well, I've practically

Well, I've practically written the pseudo-code for this in my head. Shall I take a crack at it (this weekend at the earliest), or do you guys want to keep on at it?

Also, would anyone object to me re-implementing the secondary skill check? Right now it only makes sure you have one skill at the primary skill level, but with some minor restructuring I see no reason why it couldn't check both.

SBB64
SBB64's picture
Contributor
Offline
Last seen: 1 year 4 months ago
Joined: 06/23/2013 - 11:21
Karma: 375
A secondary skill check would

A secondary skill check would probably be helpful and closer to the original game. I am somewhat surprised at how skill importance became diluted with each generation of the game.

SBB64
SBB64's picture
Contributor
Offline
Last seen: 1 year 4 months ago
Joined: 06/23/2013 - 11:21
Karma: 375
Here are the Imperial Cult

Here are the Imperial Cult quests up to the Boots of the Apostile. I have bumped into a glitch I've seen before but this time can't fix. Once in awhile, you can't get a setstage command to work. Normally I find some other mod is overlapping somehow (even without touching that quest). So unloading the offending mod fixes the problem. But this time I just have Skywind and my mod loaded. I can't get the fbmwICCorkbulb quest to setstage past 0. Same problem for the Silver Staff. On the Oracle's quest, I can't get her to even talk about her quests. Even with manually starting the quests, she stays silent. The only one who completely works is the alms quest series.

AttachmentSize
File SBB64ICQuests_0.rar233.93 KB
digitalparanoid
digitalparanoid's picture
Member
Offline
Last seen: 6 months 4 days ago
Joined: 03/31/2011 - 06:37
Karma: 1219
Hey SBB, let me have a look

Hey SBB,

let me have a look at your issue, I'll get back to you (Don't know if I will have the time today).

Pages