Skyrim Special Edition

The Problem

Mods usually use conditions on MQ104 quest (Dragon Rising), such as "if MQ104 is (not) completed", "if stage X of MQ104 is (not) done" or "if current stage of MQ104 is larger/lesser than X":

  • to check if the player is known as Dragonborn / knows that they're Dragonborn or not
  • to check if the player is a thane of Whiterun or not
  • to check if dragons have already appeared in the world or not
In vanilla all the three events happen at the same time, when you complete Dragon Rising. But with Skyrim Unbound it's tree different independent events, not matching conditions that work for vanilla game. In the original Skyrim Unbound MQ104 is completed from the game start. In Skyrim Unbound Reborn v2.0.0+ MQ104 gets completed when you absorb your first dragon soul, so that at least dragonborn conditions work fine. This results in the player being always recognized a thane of Whiterun (and in the original Skyrim Unbound - dragonborn as well) by other mods, even if they aren't.

Unfortunately, this can't be fixed on this mod side without restoring the vanilla approach to the main quest, dragons and Whiterun thaneship. So, the only solution is creating necessary patches by changing conditions to the ones that work with Skyrim Unbound (Reborn). I have already provided some patches in the installer, including GDO, RDO, More To Say, Trade & Barter, Sofia Follower and Simple Smithing Overhaul.


How to find mods and records that require patching?

Find them in the game, then in xEdit
If you see that some mod incorrectly recognizes you as a thane of Whiterun in the game, it means that it requires patching.
You can try to find the problematic records in xEdit. If the problem is a dialogue that plays under incorrect conditions, such as NPCs calling a thane of Whiterun, you can find it in xEdit using my xEdit scripts that allow you to find dialogues by a fragment of text: "Find Dialogue Info" for NPC lines and "Find Dialogue Topic" for player lines.

Identify potential problems by mod description
If a mod description says that it includes some functionality related to being thane of Whiterun, this mod may require patching. For example, if you see that a mod features dialogues refering to player as a thane of Whiterun, a speech bonus for thane of Whiterun, a crafting recipe for Whiterun guard armor that only becomes available if you're a thane, this mod may require a patch for Skyrim Unbound.

Check all records that use MQ104 quest in xEdit
You can check all records that reference MQ104 quest in a mod. Not all of them require patching but some may do.
1. Open MQ104 "Dragon Rising" [QUST:0002610C] record in xEdit (find it in Skyrim Unbound.esp or enter 2610C into the "FormID" bar at the left top corner)
2. Go to Referenced By tab. There are all records that contain links to MQ104 quest record.
3. Sort by "File" column (click on it)
4. Scroll down until you find the target mod
5. Click on the first record of this mod to select it
6. Click on the last record of this mod with Shift pressed to select all records between the first one and the last one
7. Right click and choose "Copy as override" or "Copy as override (with overwriting)"
8. Choose a new plugin (better with ESL flag if you're on SE)
9. Now you can check all the copied records in the created plugin, patch the ones that need patching and remove the ones that don't.


What conditions work with Skyrim Unbound Reborn?

Dragonborn

There are multiple possible conditions that can be used in different cases:
1. Whether the player has absorbed a dragon soul
Vanilla conditions on MQ104 work on Skyrim Unbound Reborn v2.0.0+.
The following conditions work on all versions of Skyrim Unbound and Skyrim Unbound Reborn:
Option 1. Check vanilla global value DragonsAbsorbed (the total number of dragon souls absorbed).
Option 2. Check if global value SoulAbsorbed is 1 (otherwise if it's 0), i.e. Subject.GetGlobalValue(SoulAbsorbed [GLOB:xx0022F0]) = 1/0. It doesn't show the number of souls absorbed, just if it happened once.
Option 3. Check is stage 10 of MQ105 quest is done or current stage is >= 10 (it's set to 10 right after the player absorbs their first dragon soul, not when Greybeards call them), i.e. Subject.GetStage(MQ105 "The Way of the Voice" [QUST:000242BA]) >= 10 if already absorbed a soul and < 10 otherwise or Subject.GetStageDone(MQ105 "The Way of the Voice" [QUST:000242BA], 010) = 1 if already absorbed a soul and 0 otherwise. This conditions is vanilla-compatible.
2. Whether the player has learned a word
Check if global value WordLearned is 1 (otherwise if it's 0), i.e. Subject.GetGlobalValue(WordLearned [GLOB:xx0022F1]) = 1/0. It doesn't show the number of words learned, just if it happened once.
3. Whether the player is dragonborn in fact, even if they don't know that yet (the MCM or randomized choice)
Check if global value DragonSoulsEnabled is 1 (otherwise if it's 0), i.e. Subject.GetGlobalValue(DragonSoulsEnabled [GLOB:xx0022EC]) = 1/0.
4. Whether the player can learn words (the MCM or randomized choice: dragonborn or non-dragonborn with word walls enabled)
Check if global value WordWallsEnabled is 1 (otherwise if it's 0), i.e. Subject.GetGlobalValue(WordWallsEnabled [GLOB:xx0022EB]) = 1/0.
5. Whether the player is already called by Greybeards
Use this only if "whether the player has absorbed a dragon soul" conditions can't be used. This was not tested but should work: Subject.GetStageDone(MQGreybeardCall [QUST:0010EC61], 010) = 1. This conditions is vanilla-compatible.

(Skyrim Unbound Reborn only) Thane of Whiterun
Since the way you become a thane is different in SUR and the original SU, the following condition only works to Skyrim Unbound Reborn.
To check if the player is a thane of Whiterun, you need to check if stage 25 of Favor253 quest is done. If it's done then the player is a thane of Whiterun, if it's not done then no, i.e. Subject.GetStageDone(Favor253 "Thane of Whiterun" [QUST:000A2C9E], 025) = 1/0.
This condition is the same as for becoming thane again after Stormcloaks take Whiterun in vanilla, so it may be already used in the conditions list being patched like "this condition OR mq104 completed", then it's enough to remove the condition on MQ104 and change OR to AND.

Dragons
There are multiple possible conditions that can be used in different cases:
1. If word wall dragons have already appeared
Whether the word wall dragons have appeared is defined by whether DefaultDragonEnableMarker [REFR:0005EACD] is enabled (if enabled then already appeared, if disabled then not appeared yet), i.e. DefaultDragonEnableMarker [REFR:0005EACD].GetDisabled = 0/1 (Run On of this condition should be set to Reference). This conditions is vanilla-compatible.
2. If random dragons have already appeared
Check if global value DragonsReturned is 1 (otherwise if it's 0), i.e. Subject.GetGlobalValue(DragonsReturned [GLOB:00042851]) = 1/0. This conditions is vanilla-compatible.
3. If dragons are not disabled in the MCM
Check if global value DragonsEnabled is 1 (otherwise if it's 0), i.e. Subject.GetGlobalValue(DragonsEnabled [GLOB:0009F24F]) = 1/0.
5. If random dragons are not disabled in the MCM
Check if global value RandomDragons is 1 (if they are disabled, it's 0). i.e. Subject.GetGlobalValue(RandomDragons [GLOB:xx012C1D]) = 1/0.
6. (Skyrim Unbound Reborn only) Whether all dragons that the player wants to be enabled are already enabled (in case the player haven't enabled some or all dragons)
Check if global value AllDragonsAppeared is 1 (if not all are appeared then it's 0). If none are enabled, it's 1. i.e. Subject.GetGlobalValue(AllDragonsAppeared [GLOB:xxC54273]) = 1/0.

Dialogues that mention a dragon in Whiterun better should be disabled using an always-false condition. Any always-false condition can be used but Bethesda uses this one: Subject.GetGlobalValue(TRUEGlobal [GLOB:000216A9]) = 0.

(Skyrim Unbound Reborn only) Fighting/Killing Dragons
Sometimes you may want to know if or how many dragons player killed/fought even if they're non-dragonborn, so the number of dragon souls absorbed or the main quest progress can't be used for that. For this a global variable DragonsFought [GLOB:xxC63577] is added, it stores the number of dragons "fought". Currently its value gets increased when a dragon is killed by a player, their followers, summons and other actors flagged as teammates, or if the player was nearby when the dragon was killed. It means that it may be not 100% accurate depending on what you want to use it for.
(If you saw vanilla global variable DragonsKilled, it's unused)

Article information

Added on

Edited on

Written by

lilebonymace