File information

Last updated

Original upload

Created by

Brin_aSair

Uploaded by

BrinaSair

Virus scan

Safe to use

Tags for this mod

About this mod

Sets crime bounties to decrease over time. Can be set as percentage, coin, or both. Can be set at universal values for all Holds or specific values for each Hold. Other options exist and can be configured.

Requirements
Permissions and credits
Changelogs
Wergild Depreciation - Crime Bounty Reduction over Time
(Originally created for SSE, now also converted for Classic Skyrim)

With this mod crime bounties can gradually decrease over time. Eventually your bounty becomes zero. You can choose how much it decreases each night, and whether it decreases by percent or by a set amount of coin, or both. You can choose whether being in the hold will prevent reduction (Requires Exile), or whether reduction is only prevented if you are inside or near the capital city of that hold. You can choose whether gaining a new bounty will restore all bounty removed since your bounty was last zero, or whether only offenses worse than a certain a threshold lead to such a restoration. And you can choose whether to use a single default set of values for all Holds or to customize each Hold to treat their bounties differently. Finally, you can choose whether breaking exile in a hold allied with a hold where you have a bounty will prevent the bounty from being reduced in that hold (or will only have a chance of being reduced, or will be reduced to a lesser degree).

Since the only thing this mod touches is the the current bounties of each hold - which it checks every night at midnight, re-determining it if necessary - it should hopefully be compatible with all other mods. I have tried using it with Open Cities, and it is compatible. I have also built in compatibility for Falskaar and Bruma.

Origin of this Mod
Spoiler:  
Show

This mod started as a personal port of Crime Bounty Decay, but when I looked into the mod's scripts I found it did not support Dragonborn's Solstheim / Raven Rock, and its Exile system was not as well implemented as it could have been - often failing if you were not in a named location. Finally, most of its features were hard-coded in the script and could not be changed (such as by console commands or an MCM), and I also wanted some features that it did not have. So I decided to re-write the scripts from scratch, making as many variables as possible into globals that could be altered via xEdit or console commands. So while this is a new mod, it was inspired by Crime Bounty Decay.

Features

Configuration
Spoiler:  
Show

You can set whether or not you will receive messages when the bounties are reduced each night: A) whether any bounty has reached zero, B) whether a bounty has been restored (due to gaining more of a bounty than the Forgiveness Threshold), and C) the reduction of each bounty. The Alerts tab also contains an option to disable this mod. After disabling it, please wait at least 24 in-game hours to be sure all updating scripts are no longer running. While it should be okay after the next daily update was to occur, I generally suggest the better safe than sorry approach.

You can decide if Holds allied with either the Imperials and/or the Stormcloaks exchange information on bounties, such that either there is a chance that a bounty will not decrease if breaking exile in an allied Hold - or that it will continue to decrease but at a reduced rate.

You can choose which aspects of Default Values apply to all Holds. Perhaps you want all Holds to use the same percentage / coin reduction, or all Holds to use the same Forgiveness Limit, or all Holds to be willing to Forgive and Forget, or all Holds to Require Exile. Each of these options can be set to True or False, and if True then the next time any bounty updates all Holds will have their equivalent values set to those set on the Default Values page. You can also set Default values to whatever you wish the use an option on the Use of Default tab to set any or all of those values to the equivalent in every Hold. Beware, this is NOT reversible.

Finally, for both the Default values and for each individual Hold you can decide the percentile decrease, the coin reduction decrease, whether Forgive and Forget applies or not, what its Forgiveness Threshold is, and whether Exile from the entire Hold (rather than only its capital city) is required allow the bounty to decrease. At the top of each Hold's page its current bounty is listed. At the bottom is a toggle to erase that bounty, but you will need to exit and reenter the MCM to see the change.

Alliance
Spoiler:  
Show

The mod keeps track of which Holds follow the Imperials and which follow the Stormcloaks. For each of these sides you can set Alliance to True or False. If True, then the Holds in that alliance share information on fugitives. If you are breaking exile in a Hold - even if you do not have a bounty in that Hold - if you have a bounty in a Hold with which it is allied then that Hold will not reduce your bounty, just as if you had broken exile in that Hold instead.

Keep in mind that you can have Holds with different Exile values. One Hold in an alliance may require being in / near its capital city, while another may require being anywhere inside the Hold. If the player has a bounty with the latter, and is in the former, then only if the player is in / near the capital city of the former will exile be broken.

Furthermore, you can choose whether this will always occur or will occur in a percentile manner. Perhaps only 20% of the time the player is noticed and the information forwarded to the other Holds in the alliance. Or perhaps the information trickles in, and as a result the bounty still decreases - but at a reduced rate of only 80% the normal rate of decrease. Both options are available, but only one or the other.

Finally, just as fast traveling can prevent this mod from noticing the change in location until the next hourly check, so too will civil war battles (or the briefly peace agreement in High Hrothgar) that change Hold affiliations not be noticed until the next hour. But so long as the next hour is not also the hour when the daily adjustment is made, it should not make a difference for affecting the bounties in other allied Holds.

Note that Bruma is always allied with the Imperials. You can choose whether or not Alliance takes Bruma into account or not only because it is possible that different parts of the empire do not take the effort to share fugitive information across their borders, in which case Bruma may not receive information from Skyrim and vice versa.

Bounty Reduction
Spoiler:  
Show

A bounty can be reduced by a percentage, by a coin reduction, or by both. In the case of both being used, the percentage is applied first, and then the coin reduction is applied. The percentage kept has a maximum of 100%, as otherwise - for example in the case of 110% - the bounty would grow larger every night rather than decrease. I have given it a minimum of 50%, which by itself would remove even a bounty of 1000 in only nine days. Coin reduction has a minimum of 1, as otherwise - due to rounding - it would be possible for a bounty to never reach zero - to reach 1 septim and then never reduce further. Thus, at a minimum, all bounties will reduce by at least 1 septim every night while this mod is active and exile is not being broken.

The default values used by this mod are 96% and 4 coins. This results in the following times to reduce the bounties to zero: 10 (2 days), 50 (9 days), 100 (16 days), 500 (42 days), 1000 (57 days), 5000 (94 days), 10k (111 days). I have also included with this mod a text file showing the number of days required to remove a 1000 bounty for percentages ranging from 85% to 99% combined with coin reductions ranging from 1 to 10. To show another example, the defaults used by Crime Bounty Decay (90%, 5 coins) results in: 10 (2 days), 50 (7 days), 100 (11 days), 500 (23 days), 1000 (29 days), 5k (44 days), 10k (51 days).

Violent Crime Bounties
The game treats violent bounties separately from non-violent bounties, but then it uses yet a third variable to hold the sum of both types of bounties. While console commands can alter non-violent crime bounties (and thus indirectly the total), they cannot affect violent crime bounties. This is important because both non-violent and violent bounties use basically the same value (999 for nonviolent, 1000 for violent) for their Arrest-on-Sight thresholds, and if the violent is not decreasing, then it does not matter much that the non-violent is decreasing. (Oddly, my testing showed that even if these thresholds were altered, if either of the bounties were over either threshold then the guards would stop you. This was true even when I altered the values.)

Initially I handled this by reducing violent crime bounties by the equivalent amount as the non-violent crime bounties, but a bug was found that turned out to be a result of this presumption. The game returns the total bounty when using the script that should only receive the non-violent bounty. Because I was adjusting this received bounty and setting it to the non-violent bounty , this resulted in any violent bounty (although reduced) being added twice into the new total, resulting in an ever-increasing bounty if the player had any violent bounty.

The only means that could be found to prevent this issue (updated in v2.11) was to accept that the received bounty would be the total - which meant that the violent bounty needed to be set to zero to prevent it being added twice into the new total. Unfortunately, this means that Wergild Depreciation may have a compatibility issue with any mod that alters the Arrest on Sight thresholds for non-violent or violent crime bounties from their vanilla values (999, 1000) or that modifies the quest the game uses to determine whether guards arrest on sight or are willing to take a bribe ( quest "DialogueCrimeGuards" [000267EB] ).

Forgiveness
Spoiler:  
Show

If "Forgive and Forget" is set to True for a Hold, then every night when the bounty for that Hold is reduced, the amount removed is permanently gone. PriorBounty is always kept at zero, so if a new bounty is gained there is nothing to add to the current bounty. If "Forgive and Forget" is set to False, then every night the amount removed from the current bounty is added into PriorBounty, and if ever a day passes during which the bounty for that Hold increases to more than the (configurable) Forgiveness Threshold, then everything currently in PriorBounty is added back into the current bounty for that Hold. Basically, your bounty is fully restored to its original non-reduced value. Forgiveness Threshold is current set to a default of 30, due to assault creating a bounty of 40, but as mentioned it can be set to anything, down to 0 (which would effectively disable this feature).

Exile
Spoiler:  
Show

If "Requires Exile" is set to True for a Hold, then the bounty for that Hold will not reduce unless you are not inside that Hold. Otherwise the bounty will not reduce only if you are in (or near) the capital city of that Hold.

There are two exceptions: the Orc Strongholds and the village of Skaal. These places record their own bounties, independent of the Hold in which they are located. Therefore, I am treating them as semi-autonomous from the Holds in which they are located. Because of this, neither the Orc Strongholds nor Skaal has the Exile option available, but being in those locations does not count as being in a Hold for the purpose of that Hold's Exile.

For example, if Exile is set as True for Solstheim, and you are Skaal when the bounties update, the bounty for Solstheim will be reduced as if you were not in the Solstheim. Similarly, if you are in a Hold where you have a bounty, but you are in an Orc Stronghold at every hourly check prior to the daily period when the bounties are updated, then your bounty for that Hold will decrease as normal.

While it is true that in the vanilla game Skaal only has a bounty for trespassing, and it has no means of ever collecting on that bounty, there are mods that grant Skaal its own guards, jail area, and the normal bounties for all crimes (murder, assault, theft, etc), so I fully included Skaal in this mod.

Support for other Mods
Spoiler:  
Show

Falskaar technically has three Holds, but one is small and also antagonistic until it is defeated, and another has a capital city that you can only briefly enter just before a certain quest event, and afterward it becomes inaccessible. So I decided to use Amber Creek as a default capital for all of Falskaar for the purpose of determining whether the player is breaking exile.

Bruma is also supported by this mod. At present there are no issues, but keep in mind that when the whole of Beyond Skyrim - Cyrodiil comes out I will need to map out the borders of each of its provinces [holds] in order to use the polygon method of determining the player's location - which may take a while as I have not been able to find any highly detailed maps of Cyrodiil's province borders. At present I simply use the worldspace: if the player is in the same worldspace as Bruma, they are treated as in Bruma. This method will not work once the other provinces are accessible.

Additional Files
In the Misc Files section I also include the script I use to determine in which Hold the player is located. It is similar to Hold Checker's equivalent script, except that I mapped my own coordinates so as to be as closely in alignment with the Hold borders as possible. I make it freely available as a modder resource for anyone else whose mod requires needing to know which Hold the player is currently in.


Known Issues
Spoiler:  
Show

There are a few issues to be aware of:

First, when starting a new game via Alternate Start - Live Another Life, if you spend more than an in-game hour before leaving via the bed, there is a chance you will be noticed as being in Eastmarch. Also, until the first 24-hour check / adjustment occurs after starting the game, some features may not take effect.

Second, if you have no bounty in any Hold and then gain one, the first update will occur the first midnight at least 24 hours after you gain the bounty. So if you gain a bounty at 2 hours after midnight, then the bounty will undergo its first reduction 46 hours later (the midnight after next). If you already have a bounty elsewhere, then the new bounty will be updated when all other bounties are updated at the very next midnight (even if midnight is only a few hours away).

Third, if Exile is set to only require not being in the capital city of a Hold, it will also hold true if outside and near the city. This is due to using the Location data to determine if the player is in the city or not. Cells used in Civil War battles near a city also have the same city Location data attached to them.

Fourth, the player's location is checked every hour to learn if s/he is breaking exile or not. If the player enters and leaves a Hold before that hourly check (within 3 minutes, given the default 1:20 rate used by the game), then their breaking of exile will not be noticed. The same is true if Exile is set to only require not being in the capital city: you could enter and leave the city area within three minutes and not be noticed as breaking Exile.

Fifth, if the player fast travels (whether by normal fast travel, use of a carriage or ferry, or use of coc console commands) the mod will not notice the change in location until the next hourly check. So if you do a lot of fast traveling this mod may not notice more than one of the Holds you visit in a given day.

Sixth, while I myself have not yet noticed this, per the author of Crime Bounty Decay hired thugs will sometimes attack on the same day that a bounty is fully reduced to zero. My guess is that it depends on which runs first - the script that decides to send thugs after you or the script that reduces the bounty to zero (thus removing the reason for thugs to be sent after you).

Seventh, I use two means for determining where the player is located for the purpose of whether or not Exile will prevent the bounty from decreasing. If either of these say the player is in a given Hold, the script treats the player as being in that Hold.

The first - also used in the mod Crime Bounty Decay - checks the Location data of the cell the player is in. But upon examining the cells of the worldspace I found that in some sub-blocks as many as three-quarters of the worldspace cells lack that information. Still, most locations with a name or a map marker (or adjacent to such a place) have Location data, and Location data seems to be recursive, so if you are in a cave, a ruin, a house, or a city that has its own worldspace, from the Location data the Hold can still be determined.

The second was inspired by the wonderful modder's resource Hold Checker. It works by using the same equation initially translated into papyrus by Chesko for his Frostfall mod to determine the location of the player and whether the player was in a tundra region, a forested region, a coastal region, or so forth - but Hold Checker replaces those coordinates with ones that outline each Hold, thus allowing the script to state whether the player is in a given Hold or not.

Unfortunately, in order to keep the number of points to a minimum, Hold Checker sometimes skims the edges of Holds, with results such as the southeastern edge of the town of Dragon Bridge showing as being in Hjaalmarch instead of Haafingar. So I created my own version using the in-game map (used in some loading screens), the Paper Map version of the world map on nexus, and the google version of the Skyrim map. On average I use about half-again as many coordinates per Hold (21.1 vs 13.7), which certainly increases the calculations required to locate the player, but the result is a map that very closely follows the actual borders of each Hold.

That said, using this polygon method has the obvious limitation of only working in the Skyrim worldspace: it cannot notice what Hold you are in when the player is inside an interior space (such as a a mine, an inn, etc), and it cannot be used for Solstheim or other worldspaces. (This will become more of an issue when Beyond Skyrim releases the whole of Cyrodiil, as at present the Bruma support only needs to check if the player is in the BSHeartland worldspace or not.)

At present I am fortunate that both Bruma and Falskaar use only a single worldspace and (at present for Bruma, and effectively for Falskaar) both only have a single Hold to consider within that worldspace. This allows me to check for whether or not the player is within hat worldspace as a substitute for the second method of using coordinates and polygons.