Skyrim Special Edition

Introduction

Welcome to my guide for creating a patch for Skyrim Reputation. Below I will outline the inner workings of Skyrim Reputation and how you can tap into it; using the reputation it generates as a variable in another mod or injecting data, from a mod or otherwise, into the reputation calculations.
I am writing this because I simply will not have the time to make patches for many popular mods. I would instead like to enable others to make patches, either for their own use or to publish them on the Skyrim Nexus. (I strongly recommend first asking the mod author of any mods you aim to make patches for, if that mod is not your own).

So, if you're still reading this I am assuming that you are looking to create a patch for Skyrim Reputation and some other mod, to make the two play better together, or to allow one to use the data generated by the other. I will also assume that you have some experience using the Creation Kit, and some insight into the workings of the mod you are hoping to create a Skyrim Reputation patch for. If you are new to creating patches - don't worry - there are useful guides out there. For example, Darkfox127 over on YouTube has several Creation Kit Tutorials, even one for creating a patch.




Reputation mechanic overview

Before we start, you need to be aware of the basics of the reputation mechanic - I promise its not complicated. In essence, the mechanic keeps track of what you've done in the game so far; quest you've completed, crimes committed, skills gained etc. Technically speaking, it does this through the game's own tracked stats, and when those are not available it has scripts that track certain quests and actions to increment reputation scores. These scores are all fed into one central script, which tally all scores and weighs them against one another to produce a good or bad reputation. 

If you wish to manipulate the player’s reputation you will need to add some code and/or attach your own scripts within your patch, in order to feed the reputation mechanic’s central script new reputation scores. But before you can do that you need to know what scores to feed it. To help with this I have categorised all reputation scores on three scales or dimensions: 

  • Devotion (with the good reputation score Aedric Devotion and the bad reputation score Daedric Taint, at opposite ends), 
  • Lawfulness (with the good reputation score Law and the bad reputation score Crime, at opposite ends), and 
  • Proclivity (with the good reputation score Dependability and the bad reputation score Power-hunger, at opposite ends).

What is important to note here is that opposing scores are weighed against each other, with the total of good reputation scores weighed against the total bad reputation scores. Players get a good reputation when they have higher total scores for Aedric Devotion, Law and/or Dependability. Likewise they will get a bad reputation when they have higher scores for Daedric Taint, Crime and/or Power Hunger. How good or bad the reputation is will depend on the size of the difference between the good and bad scores  as well as the amplifier score - simply called the Fame score. 

Scores are always going up. To move the player towards a certain reputation, for example towards a bad reputation after supporting a Daedric Prince in a quest, you would not decrease the Aedric Devotion score, but instead increase the Daedric Taint score to achieve the same effect. The scores you can manipulate, or increase, are:

  • Fame - Increases when you do anything that might catch the attention of people living in the towns and cities, and it amplifies the player's good or bad reputation
  • Aedric Devotion - Increases when you kill Daedra, resist Daedric Lords, help at temples, do divine quests etc. (weighed against Daedric Taint)
  • Law- Increases when you complete quests that stops/kills criminals, help guards, solve crime, restore order, etc.(weighed against Crime)
  • Dependability - Increases when you complete Misc. Quests, are generally helpful, keep true to your word, etc.(weighed against Power-hunger)
  • Daedric Taint - Increases when you do the bidding of Daedra, become their champion, use their gifts, give into their temptations, etc. (weighed against Aedric Devotion)
  • Crime - Increases when you complete quests with dubious legality, support criminals, commit crimes, etc. (weighed against Law)
  • Power-hunger - Increases when you put your own desires over the well-being of others, betray allies, pursuing power for power's sake, etc. (weighed against Dependability)

It is important to keep in mind that opposing scores are weighed against each other,  especially if you are incrementing more than one score at the same time. Like Law together with Dependability as the reputation reward/consequence of completing a certain quest. In these cases, I recommend only selecting scores on either the good reputation side (i.e. Aedric Devotion, Law and/or Dependability), or the bad reputation side (i.e. Daedric Taint, Crime and/or Power Hunger). If you for example increment Daedric Taint by 1 and Law by 1 after the same quest, these two will cancel each other out and the player's reputation wouldn't change. This thinking extends to scoring entire quest lines; with you having to plan in advance how much and in what direction the overall quest arch should influence the player's reputation, and then go back to add the code to score the individual quests or actions.


How to manipulate the player’s reputation 

Manipulating the player's reputation comes in three steps: (1) Listing the quests, actions, etc., in the mod you're patching, that you would like to influence the player's reputation; (2) choosing how much and in which direction these should influence the player's reputation; and (3) finding noninvasive ways (if possible) to track them in the mod you are patching. As mentioned you will need to add some code. If you are new to scripting in papyrus, don’t worry, I have made feeding the reputation mechanic as easy as I could. You need to know how to add properties and call functions, so if you don't know what that means, you'll need to look that up first. 

(1) The first step is to identify what it is you would like affecting the player's reputation, in the mod you are patching. This will usually either be a quest, or the crossroad of some moral choice, or certain actions. So start by listing all the different moral and reputation worthy choices and actions available in the mod you're patching and how those choices might fit with the categories above. Wherever possible, I recommend listing both "good" and "bad" choices so that players can be rewarded reputation for however they choose to play.

(2) With your wish-list of things you want to influence the player's reputation, you can start scoring the (a) quests and (b) actions.

(aQuests are the bulk of the reputation scores and weight heavier than actions. They tend to add up more quickly than you might think and should be used with some restraint. When assigning points for completing quests, I'd recommend incrementing scores between 1 and 5 points, for each completed quest-line, with a recommended maximum of around 10-12 quest points total for any one mod, if you want your patch to markedly change the reputation of the player. 

(bActions, like killing bandits and capturing souls, also contribute to the player's reputation. They add to the same dimensions as quests, but are smaller in weight and have limited influence (i.e. they can max out). They are however an important part of the reputation mechanic and a potentially useful thing to tap into. Apart from the already tracked actions I have added empty variables for each if the reputation dimensions that you can increase every time the player does something you wish would manipulate their reputation. These scores are differently weighed depending on how frequently the player is predicted to do them in a play-through. 
  • "Small" scores are for actions that are potentially performed several hundreds of times; 
  • "Medium" scores are for actions that are potentially performed between fifteen and a hundred times; and 
  • "Large" scores are for actions that are performed between one and fifteen times in a single play-through

(3) When increasing reputation scores for the player, simply call these functions: 

Click for Quest script functions:
Spoiler:  
Show

SR_RQC_SCR Property SR_RQC_QST Auto; Make sure you fill this property, in the Creation Kit, with the quest SR_RQC_QST. It should auto-fill when you ask it to.

;In addition to incrementing the reputation scores values, you'll need to update the new total max score for each of the scores.

;Call these two functions in tandem to increase the quest based Fame score
SR_RQC_QST.IncrementQuestFame(1); Change the numeric value to match the desired increase of this score, from 1-10
SR_RQC_QST.IncrementQuestFameMax()
 
;Call these two functions in tandem to increase the quest based Aedric Devotion score
SR_RQC_QST.IncrementQuestAedric(1); Change the numeric value to match the desired increase of this score, from 1-10
SR_RQC_QST.IncrementQuestAedricMax()
 
;Call these two functions in tandem to increase the quest based Daedric Taint score
SR_RQC_QST.IncrementQuestDaedric(1); Change the numeric value to match the desired increase of this score, from 1-10
SR_RQC_QST.IncrementQuestDaedricMax()
 
;Call these two functions in tandem to increase the quest based Law score
SR_RQC_QST.IncrementQuestLaw(1); Change the numeric value to match the desired increase of this score, from 1-10
SR_RQC_QST.IncrementQuestLawMax()
 
;Call these two functions in tandem to increase the quest based Crime score
SR_RQC_QST.IncrementQuestCrime(1); Change the numeric value to match the desired increase of this score, from 1-10
SR_RQC_QST.IncrementQuestCrimeMax()
 
;Call these two functions in tandem to increase the quest based Dependability score
SR_RQC_QST.IncrementQuestDependability(1); Change the numeric value to match the desired increase of this score, from 1-10
SR_RQC_QST.IncrementQuestDependabilityMax()
 
;Call these two functions in tandem to increase the quest based Power Hunger score
SR_RQC_QST.IncrementQuestAmbition(1); Change the numeric value to match the desired increase of this score, from 1-10
SR_RQC_QST.IncrementQuestAmbitionMax()


Click for Action script functions:
Spoiler:  
Show

SR_RQC_SCR Property SR_RQC_QST Auto; Make sure you fill this property, in the Creation Kit, with the quest SR_RQC_QST. It should auto-fill when you ask it to.

;Call one of these three functions to increase the action based Fame score
SR_RQC_QST.IncrementFameVariableSmall(); e.g. locations visited
SR_RQC_QST.IncrementFameVariableMedium(); e.g. dragons killed
SR_RQC_QST.IncrementFameVariableLarge(); e.g. properties owned

;Call one of these three functions to increase the action based Aedric Devotion score
SR_RQC_QST.IncrementAedricVariableSmall(); e.g. undead killed
SR_RQC_QST.IncrementAedricVariableMedium(); e.g. Daedra killed
SR_RQC_QST.IncrementAedricVariableLarge(); e.g. beggars helped

;Call one of these three functions to increase the action based Daedric Taint score
SR_RQC_QST.IncrementDaedricVariableSmall(); e.g. necks bitten as vampire
SR_RQC_QST.IncrementDaedricVariableMedium(); e.g. blood magic displays
SR_RQC_QST.IncrementDaedricVariableLarge(); e.g. times seen in werewolf form

;Call one of these three functions to increase the action based Law score
SR_RQC_QST.IncrementLawVariableSmall(); e.g. bandits killed
SR_RQC_QST.IncrementLawVariableMedium(); e.g. rogue mages killed
SR_RQC_QST.IncrementLawVariableLarge(); e.g. Companions quests completed

;Call one of these three functions to increase the action based Crime score
SR_RQC_QST.IncrementCrimeVariableSmall(); e.g. items stolen
SR_RQC_QST.IncrementCrimeVariableMedium(); e.g. people assaulted
SR_RQC_QST.IncrementCrimeVariableLarge(); e.g. people murdered

;Call one of these three functions to increase the action basedDependabilityscore
SR_RQC_QST.IncrementDependabilityVariableSmall(); e.g. persuasions
SR_RQC_QST.IncrementDependabilityVariableMedium(); e.g. misc. quests completed 
SR_RQC_QST.IncrementDependabilityVariableLarge(); e.g. brawls won

;Call one of these three functions to increase the action based Power-hunger score
SR_RQC_QST.IncrementAmbitionVariableSmall(); e.g. souls trapped
SR_RQC_QST.IncrementAmbitionVariableMedium(); e.g. bribes
SR_RQC_QST.IncrementAmbitionVariableLarge(); e.g. seen necromancy

;Call one of these two functions to increase the action based Vampire Suspicion score
SR_RQC_QST.IncrementExtVampirismSmall(); e.g. necks bitten as vampire
SR_RQC_QST.IncrementExtVampirismLarge(); e.g. seen feeding as vampire

;Call one of these two functions to increase the action based Werewolf Suspicion score
SR_RQC_QST.IncrementExtLycanthropySmall(); e.g. werewolf transformations
SR_RQC_QST.IncrementExtLycanthropyLarge(); e.g. times seen in werewolf form


As a note on making the patch noninvasive: Once you know what quests and actions you would like affecting the player's reputation, you will need to find the location within the mod where you can add the code. For example, you can call functions at the finishing stage of said quest to achieve this, but this can introduce changes that make the patch version specific.
Click for example script
Spoiler:  
Show

Scriptname QF_ExampleQuestFragmentScript extends Quest Hidden
{This script shows the non-recommended way of adding reputation contribution for a completed quest at the end of the finishing quest stage}

;BEGIN FRAGMENT CODE - Do not edit anything between this and the end comment

;BEGIN FRAGMENT Fragment_11
Function Fragment_11()
;BEGIN CODE
;this stage denotes a certain choice the player has made
SetObjectiveCompleted(40, 1)
SR_RQC_QST.IncrementQuestLaw(1)
SR_RQC_QST.IncrementQuestLawMax()
SR_RQC_QST.IncrementQuestDependability(1)
SR_RQC_QST.IncrementQuestDependabilityMax()
;END CODE
EndFunction
;END FRAGMENT
;END FRAGMENT CODE - Do not edit anything between this and the begin comment

SR_RQC_SCR Property SR_RQC_QST Auto


Alternatively, a way that doesn't require you to make changes in the quest is to create a monitoring script in a checking quest of your own, that runs a script checking if the target quest is finished. This way makes the patch less liable to changes and updates in the mod you are patching and also adds the reputation change for players who completed the quest before installing the patch. If you add this to the checking quest to the story manager, even better. Much of the Skyrim Reputation is set up this way. 
Click for example script
Spoiler:  
Show

Scriptname QUEST1_REP extends Quest  
{This script show how you can add reputation contribution for a completed quest in a separate tracking quest}

Quest Property QUEST1 Auto; Fill this property with the quest you wish to check
SR_RQC_SCR Property SR_RQC_QST Auto; Make sure you fill the property with SR_RQC_QST.

Event OnInit()
    RegisterForSingleUpdateGameTime(1)
EndEvent
 
auto State QUEST1Unchecked; The quest will be continually checked on UpdateGameTime
    Event OnUpdateGameTime()
        if (QUEST1.IsStageDone(40)); this stage being completed denotes a certain choice the player has made
            SR_RQC_QST.IncrementQuestLaw(1)
            SR_RQC_QST.IncrementQuestLawMax()
            SR_RQC_QST.IncrementQuestDependability(1)
            SR_RQC_QST.IncrementQuestDependabilityMax()
            debug.trace ("Skyrim Reputation marked questQUEST1 as completed, for choice 1")
            gotoState("QUEST1Checked")
         elseif (QUEST1.IsStageDone(50)); this stage being completed denotes another choice the player has made
            SR_RQC_QST.IncrementQuestCrime1)
            SR_RQC_QST.IncrementQuestCrimeMax()
            SR_RQC_QST.IncrementQuestAmbition(1)
            SR_RQC_QST.IncrementQuestAmbitionMax()
            debug.trace ("Skyrim Reputation marked questQUEST1 as completed, for choice 2")
            gotoState("QUEST1Checked")        
        else
            RegisterForSingleUpdateGameTime(1)
        endIf
    EndEvent
EndState
 
State QUEST1Checked; The quest was checked as completed and contibuted its reputation points
; Do nothing here
EndState



Making use of the reputation variables generated

You can making use of the reputation variables generated by Skyrim Reputation in your patch, if you so desire. There are four sets of Global Variables that could be useful for you in doing so: (1) the first player's current reputation status, (2) where the player falls on the three morality dimensions, (3) Werewolf and Vampire suspicion levels, and the final being (4) the mods "disable reputation" variable. 

(1) The current reputation of the player is set in one global variable, which is updated every in-game hour. This variable is linked to voiced responses, ai-packages, note delivery and pretty much all aspects of the mod. You could use its value to determine if a player is famous enough to start a quest or if someone should or shouldn’t say some dialogue when approached. If you are also manipulating the players reputation, as per previous section, be sure to not paint the quest into a corner and adjust the player's reputation in such a way that you cannot progress the quest lines afterwards.
Click for example script
Spoiler:  
Show

GlobalVariable property SR_Global_Reputation auto

SR_Global_Reputation.GetValue()
;0 = Unknown (New start)
;1 = Unknown (Newcomer)
;2 = Neutral
;3 = Disliked
;4 = Liked
;5 = Hated
;6 = Admired
;7 = Feared
;8 = Hero


(2) There are three other global variables that play into the reputation mechanic, also set every in-game hour, and those are the three morality dimensions of the mechanic: (1) Aedric vs. Daedric, (2) Law vs. Crime, and (3) Dependability vs. Power-hungry. These play into how/why the player has their current reputation, and give a more refined picture of a players morality or play style. For example, these are currently used when determining whether or not guards and citizens will treat you with suspicion (i.e. SR_Global_LawCrime >=4), or if the Vigil of Stendarr will become hostile towards the player (SR_Global_AedricDaedric == 6).
Click for example script
Spoiler:  
Show

GlobalVariable Property SR_Global_AedricDaedric Auto

SR_Global_AedricDaedric.GetValue()
;1 = High Aedric
;2 = Medium Aedric
;3 = Low Aedric
;4 = Low Daedric
;5 = Medium Daedric
;6 = High Daedric

GlobalVariable Property SR_Global_LawCrime Auto

SR_Global_LawCrime.GetValue()
;1 = High Law
;2 = Medium Law
;3 = Low Law
;4 = Low Crime
;5 = Medium Crime
;6 = High Crime

GlobalVariable Property SR_Global_DependabilityAmbition Auto

SR_Global_DependabilityAmbition.GetValue()
;1 = High Dependability
;2 = Medium Dependability
;3 = Low Dependability
;4 = Low Power-hungry
;5 = Medium Power-hungry
;6 = High Power-hungry


(3) There are two additional global variables that play into one specific part of the reputation mechanic, namely the Vampire and Werewolf suspicion levels towards the player. These are set together with the rest of the global variables, every in-game hour. These current;y only affects some NPC greetings relating to the player's Lycanthropy and Vampirism and, if enabled in the MCM, determines if the player can trigger a hostile reaction when suspicion levels are very high. I'm sure there are more creative uses, but I'll leave that for you to explore.
Click for example script
Spoiler:  
Show

GlobalVariable Property SR_Global_WerewolfSuspicion Auto

SR_Global_WerewolfSuspicion.GetValue()
;0 = 0-9%No suspicion 
;1 = 10-19% Very low suspicion 
;2 = 20-29% Very low suspicion 
;3 = 30-39% Low suspicion 
;4 = 40-49% Low suspicion 
;5 = 50-59% Moderate suspicion
;6 = 60-69% Moderate suspicion
;7 = 70-79% High suspicion
;8 = 80-89% High suspicion
;9 = 90-100% Very High suspicion

GlobalVariable Property SR_Global_VampireSuspicion Auto

SR_Global_VampireSuspicion.GetValue()
;0 = 0-9%No suspicion 
;1 = 10-19% Very low suspicion 
;2 = 20-29% Very low suspicion 
;3 = 30-39% Low suspicion 
;4 = 40-49% Low suspicion 
;5 = 50-59% Moderate suspicion
;6 = 60-69% Moderate suspicion
;7 = 70-79% High suspicion
;8 = 80-89% High suspicion
;9 = 90-100% Very High suspicion


(4) The final variable I'll mention, that I think could be useful, is the Disable Reputation variable. This is a global variable that blocks all the reputation related magic effects, which in turn causes the player's reputation to disable. I see this being useful when patching mods dealing with stealth and disguises, or if you just need to toggle it off for a bit, for compatibility reasons. If you use this toggle, do remember to toggle it back again once you're finished, otherwise Skyrim Reputation will stop working...
Click for example script
Spoiler:  
Show

GlobalVariable Property SR_MCM_MagicEffectToggle Auto

SR_MCM_MagicEffectToggle.SetValue(1)
;0 = Reputation disabled
;1 = Reputation enabled



Thank you for reading this guide to patching for Skyrim Reputation. I hope it was somewhat helpful and let me know if you have any questions.

Article information

Added on

Edited on

Written by

dcyren

0 comments