File information
Last updated
Original upload
Created by
NuascuraUploaded by
NuascuraVirus scan
Tags for this mod
About this mod
Findom taxation system for Skyrim. A modular, customizable, and dedicated implementation of "licenses" using modern dependencies and contemporary scripting affordances.
- Requirements
-
Nexus requirements
Mod name Notes Equip Enchantment Fix Situational Dependency PapyrusUtil SE - Modders Scripting Utility Functions powerofthree's Papyrus Extender Scrab's Papyrus Extender Mods requiring this file
Mod name Notes OSL and B.O.O.B.I.E.S. Keywords (KID) - Armor Mods Patch Hub optional for corresponding patch - Permissions and credits
-
Credits and distribution permission
- Other user's assets All the assets in this file belong to the author, or are from free-to-use modder's resources
- Upload permission You are not allowed to upload this file to other sites under any circumstances
- Modification permission You are allowed to modify my files and release bug fixes or improve on the features so long as you credit me as the original creator
- Conversion permission You can convert this file to work with other games as long as you credit me as the creator of the file
- Asset use permission You are allowed to use the assets in this file without permission as long as you credit me
- Asset use permission in mods/files that are being sold You are not allowed to use assets from this file in any mods/files that are being sold, for money, on Steam Workshop or other platforms
- Asset use permission in mods/files that earn donation points You are allowed to earn Donation Points for your mods if they use my assets
Author notes
Verbatim or near-verbatim uploads are strictly forbidden. This mod may not be resold or otherwise repurposed for direct monetary benefits. Source code for this mod is free to use in non-profit projects. Patches cannot contain unnecessary and/or unmodified assets. Projects derived or released as part of or under this mod must carry appropriate attribution and inherit this mod's terms of use.
File credits
This project contains work derived from or created by the following authors: Alpia, BananasManiac, Taki17.
Additional acknowledgements: krzp, Mister X, Monoman1, ponzipyramid, Scrab.Donation Points system
Please log in to find out whether this mod is receiving Donation Points
- Mirrors
- Changelogs
-
-
Version 1.23.4
- Optimize: Moderator Alias player actor usage.
- Fix: Invalid property handling if SexLab isn't installed.
-
Version 1.23.3
- Add: Change tattoo colors via SkyUI color palette for improved accessibility.
- Fix: Possible conflicting event between BM_LenientCurfewViolation and BM_D_ForceArrest.
- Fix: Guards don't transfer the player if first time violation is Travel Violation.
- Fix: Erroneous conditions for manual curse removal request.
- Fix: Repeated jail node reception via Prison Alternative events.
- Improve: General outward compatibility with jail-entry events from Prison Alternative, Devious Interests, and Prison Overhaul Patched.
- Change: Separate World Interaction quests into base, Guard, and Uncommon.
- Change: Lower misc dialogue quest priorities from 90 to 50.
- Optimize: Quest stop procedure.
- Optimize: Jail release detection and associated events.
- Remove: Devious Interests hard-coded event release function call.
- Update: Dialogue patch.
- Update: Localization files.
-
Version 1.23.2
- Fix: Unequip process erroneously considers already unequipped/inventory items.
- Fix: LPO erroneously stores Ignored WorldSpace form.
- Fix: Missing follow-up violation topic for default dialogue if first violation of playthrough is a Magic Violation.
- Improve: Handling of invalid and ignored worldspaces.
-
Version 1.23.1
- Fix: Inventory items aren't confiscated after confrontation event.
- Fix: DD Restraint refresh does not wait until item is properly unequipped before proceeding.
-
Version 1.23.0
- Add: Equipment slot filtering.
- Add: Option to adjust global Comment Chance.
- Add: Auto Load and Auto Start flags.
- Improve: Compressed function to reduce logic fragmentation.
- Improve: Handling of internal mod state.
- Improve: Insurance fame calculation procedures.
- Improve: Utility Count functions.
- Improve: Violation Check thread handling.
- Improve: LOS Detection thread handling.
- Improve: Handling of Global Variables on mod shutdown.
- Improve: Curfew global var state dynamism.
- Change: Locational Thaneship status now checks relationship rank with closest Jarl instead of Thaneship variables directly. This change reduces dependency on vanilla variables while allowing alternate ways to gain immunity. Insurance fame multipliers will still depend on true Thaneship statuses.
- Remove: BM_Licenses_ThaneshipCheck script.
- Update: Localization files.
- Fix: Quests occasionally fail to stop on mod restart if Licenses is updated on running playthroughs.
- Fix: Tracked location desync on mod restart.
-
Version 1.22.1
- Fix: Bounty quest may erroneously terminate during player dialogue with enforcer.
- Fix: Bikini keyword array creation.
- Fix: Bikini keyword string delimiter.
- Fix: Possible "none" object for sourceContainer from OnItemRemoved event.
-
Version 1.22.0
- Add: Exterior WorldSpace and Location detection.
- Add: BM_WICommentChance.
- Add: Additional safeguards against improper walkaway topic initiation.
- Add: Walkaway topic delayed termination.
- Add: Kaxat's GetMatchingForms shim function for 1.5 game versions.
- Change: Ambience misc dialogues require Kinky Dialogue to be enabled.
- Change: Check IsInScene == 0 for bounty ref alias fill.
- Change: Check GetAllowWorldInteractions == 1 for bounty ref alias fill.
- Change: Curse leniency internal reset condition.
- Change: Set invisible walkaway topics for Bounty End dialogues where appropriate to prevent player escapes.
- Optimize: Player actor reference retrieval.
- Fix: FirstTimeViolation dialogue is sometimes erroneously blocked by feature-specific leniency dialogue.
- Remove: Deprecated scripts: PayFineFirstTime, PayFineFirstTimeKinky.
- Update: Dialogue patch.
- Update: Ambience extension.
- Update: Bruma patch.
-
Version 1.21.2
- Add: Additional keywords: BarterItem, ArmorItem, ClothingItem, JewelryItem, WeaponItem, AmmoItem, MagicItem.
- Change: Ignore items with keyword zad_QuestItem.
- Change: License book item names.
- Change: License book item contents.
- Change: Unhide Config Save/Load options while mod operations are disabled.
- Change: Attach vanilla keywords directly as script objects.
- Fix: Workaround DD mod event desync.
- Fix: Erroneous license activation limit flags.
- Update: Dialogue patch with overwriting Book Item records.
- Update: Ambience extension with support for LPO keywords.
-
Version 1.21.1
- Adjust: Collar check method.
- Adjust: Dialogue line "I refuse to pay that fine" to "I won't pay the fine."
- Removed Devious Devices masters from Ambience extension.
- Removed SexLab master from Ambience extension to allow for non-SexLab setups.
- Updated dialogue patch.
-
Version 1.21.0
- Adjustment: Bounty dialogue branch now offers the option to refuse your fine.
- Adjustment: Player now sheathes weapon after item confiscation.
- Adjustment: License-related query dialogues can now only be initiated if player is inside a City or Town per MCM settings.
- Fix: Possible outdated cached Insurance cost display.
- Fix: DF resistance adjustment divide by zero logic gap.
- Add: Leniency for first curfew violation of each day.
- Add: Additional contextual dialogue for first time violations.
- Add: Idle animations for some dialogue lines.
- Reworked bounty dialogue branches for improved clarity.
- Refactor follower detection: shift process burden to violation detection module; use PO3 Papyrus Extender function.
- Migrated utility calls for PyramidUtils to corresponding SPE scripts/functions.
- Updated dialogue patch.
- Updated Bruma patch.
-
Version 1.20.0
- Fix: Duplicated calls to Periodic Check if user stresses the system.
- Fix: Duplicated calls to Collar Equip functions, which may leave an unused DD item in the player's inventory.
- Fix: Collared harnesses erroneously passing device validation.
- Fix: Save bloat from unused collar ObjectReferences.
- Improved ease of integration via StorageUtil global vars.
- Optimized device restraint sequence.
- Optimized OnItemRemoved event function sequence.
- Updated internal dependency checks, migrating from PyramidUtils to Scrab's Papyrus Extender with backwards compatibility.
- Updated localization files.
- Added preliminary support for add-on integration.
-
Version 1.19.1
- Fix: Hostile actors no longer report the player.
- Fix: Tracked location values now correctly update even in interior cells that lack a LocationCenterMaker ref type.
- Fix: LPO no longer flags the player as In Animation unless the scene actually starts.
- Added keyword BM_LicensesBikiniItem.
- Added color codes to Licenses MCM.
- Added additional safeguards against erroneously populated FormLists pre-check.
- Adjusted item retrieval processing burden to better guard against heavy script load.
- Adjusted DD filter array order.
- Changed debug cell name (BM_Licenses_ItemStorageCell -> LPOItemStorageCell). Left editor ID as is.
- Increased internal Bikini keyword array limit from 15 to 32.
- Increased Loc Change minimum safety (inactive) range from 100 to 1000.
- Improved robustness of curfew violation detection.
- Improved robustness of travel violation detection.
- Optimized OnLocationChange event calls for increased papyrus performance and efficacy.
-
Version 1.19.0
- Adjustment: Item Retrieval dialogue now only appears if the Confiscate parent toggle is enabled.
- Adjustment: Item Retrieval now only works one-way via Gift Menu rather than two-way via Container Menu.
- Fixed "missing dependencies" notification showing under unnecessary circumstances.
- Fixed false positive warning for 1.5.97 game version's PapyrusUtil detection.
- Fixed missing stop call for Violation Check quest on mod shutdown, which may cause the quest to erroneously persist and hang LPO functions.
- Fixed an issue where moderator setup sequence is skipped and never run if the game is loaded while Licenses is disabled.
- Reduced repetitive calls from Curfew and Workbench detection scripts.
- Updated dialogue patch.
- Updated Bruma patch.
- Updated localization files.
- Added a new localizable Item Unequipped message object.
- Added API function: GetLicenseTimeLeft().
- Added mod events: BM-LPO_LicenseAdded, BM-LPO_LicenseRemoved, BM-LPO_LicensePurchased, BM-LPO_LicenseExpired.
- Implemented a new equipment verification logic.
- Implemented a new equipment force-unequip process.
- Removed bikini item detection via MCM.
- Removed equipment slot filtering.
- Moved SlaveTats functions to separate script interface.
- Tweaked Curfew notification wordings.
-
Version 1.18.3
- Adjustment: Curfew detection now runs regardless of location.
- Adjustment: Log Notifications are now disabled by default.
- Fixed immediate Travel Violation flag if moved from Tamriel Worldspace directly to interior cell due to newer location detection logic.
- Fixed cached current location failing to update last location property if player moves directly from one settlement location to another. Thanks for the report, @Andb.
- Fixed confiscation logic ignoring insurance status for single item confiscations (when not confiscating inventory items). Thanks for the report, @Andb.
- (Regression) Fixed Curfew state cancelling itself, erroneously preventing Curfew Violations when player is in a habitation.
- Added new localizable Curfew and Item Confiscation message objects.
- Added additional MCM script safeguards against missing plugins.
- Added API documentation PDF.
- Optimized Curfew cycle conditions.
- Optimized single item confiscation process.
- Optimized location tracking.
- Mitigated potential player marker and player location desyncing.
- Increased Curfew check rate to 30secs.
-
Version 1.18.2
- Fixed Insurance validity erroneously overriding confiscation setting even if the Insurance feature itself is disabled.
- Moved Debug Functions MCM section from right-side to above Advanced Settings section.
- Updated option descriptions with clarifying details.
- Updated localization files.
-
Version 1.18.1
- Restructured MCM with additional system details for easier debugging and improved accessibility.
- Adjustment: Curfew detection only runs if player is not in an interior AND is not in location with keyword LocTypeHabitation.
- Adjustment: Workbench detection now runs on exclusion rather than inclusion conditional logic, reducing pressure on native Spell polling. Spell excludes furniture objects on sit states and then checks for crafting menu rather than solely check for valid workbench furniture.
- Adjustment: Log Notifications are now solely for debug notifications and are clearly differentiated from Game Messages.
- Adjustment: Life Insurance now overrides your setting and prevents item confiscations. This adds more value to the Insurance feature and distinguishes it from being just a secondary taxation.
- Added message items for Curfew, Crafting, and Water state detections to improve localization convenience.
- Updated localization files.
- Fixed errored return value if GameMessage() function is passed a none-object as parameter 1.
- Fixed scripts with outdated references to hasInsurance rather than isInsured.
- Reduced Curfew detection polling to once every 120 seconds.
- Allowed Curfew Violation to persist, much like Travel Violation does. When paired with lower Curfew Violation polling, the new violation tracking method should help increase papyrus performance and fair gameplay leniency.
-
Version 1.18.0
- Added OStim support.
- New feature: Confiscated items are now sent to an LPO-specific chest instead of the confronting enforcer's crime faction evidence chest.
- New feature: Confiscated items now retain player ownership and can be retrieved from guards in settlement locations.
- New feature: Guards will now move the player to an inn or exterior location center marker for first time violations, if applicable and possible.
- Adjustment: Curfew detection will now wait 10 seconds before actually flagging violation for bounty consideration, incidentally fixing a soft lock where the player is continuously jailed for Curfew Violations without the necessary gold to pay their fine.
- Adjustment: Settings.json now health checks against "Licenses - Player Oppression" verbatim.
- Adjustment: Config Warn setting will now automatically enable on both mod shutdown and startup events.
- Adjustment: Valid Armor Licenses will no longer change Clothing and Bikini license statuses, visually apparent on the MCM splash screen, so to reduce potential variable change conflict. AL will still provide CL and BL immunity.
- Adjustment: Global license immunity from Thaneships will no longer affect license Boolean values, instead directly halting bounty start at the end of each violation check cycle.
- Adjustment: Insurance immunity from Thaneships will no longer affect license Boolean value to guard against potential interference from isThane variable.
- Adjustment: Active Tattoos are now cached to allow greater flexibility and adjustment while applied.
- Adjustment: Curfew and Workbench detection now obeys LOS and standard violation check sequence.
- Improved license purchase conversation branch with options to refuse purchase and exit dialogue.
- Improved MCM accessibility by reducing calls to ForcePageReset(), instead adjusting individual option flags immediately after toggles where possible.
- Changed MCM Mod Name to "Licenses - Player Oppression".
- Added debug storage cell, coc BM_Licenses_ItemStorageCell.
- Added additional safeguards against failed quest starts.
- Added FormList BM_LicensesIgnoreWorldspace.
- Changed Thaneship checker to validate against quest alias fill. This change reduces the need for hard-coded script properties and offloads the majority of related papyrus processing to the game engine.
- Changed Worldspace checker to validate against interior load door destinations rather than estimate based on last registered space.
- Changed Insurance validity to check against isInsured full property rather than hasInsurance Boolean auto property directly.
- Increased bounty alias termination distance from 2500 to 5000 units.
- Tweaked dialogue flags and list priority.
- Fixed none object error if SexLab.esm is not detected in load order.
- Fixed stored worldspace value persisting after mod deactivation.
- Fixed Refresh Features debug function sometimes enabling license Booleans when cooldowns are active.
- Fixed Travel Violation detection module processing none object when player location doesn't exist if after a previous location had been marked down for savedLoc.
- Fixed fomod UBE texture install location.
- Fixed Travel Permit quick buy dialogue not appearing in Bruma.
- Fixed missing walkaway topic when player is caught outside a settlement with a Travel Violation, allowing players to exit dialogue without consequences.
- Fixed Travel Violation arrest dialogue not satisfying conditions for arrest if another non-arrest violation dialogue overwrites in priority.
- Fixed Violation Check flagging Travel Violation if player is moved from a Tamriel Worldspace cell directly to an interior cell in a city worldspace.
- Fixed erroneous variable instantiations when mod is restarted on an existing playthrough due to outdated data. This issue could be overcome with a manual Refresh Status call. LPO now automatically calls the related function on startup.
- Fixed Curfew Violation sometimes persisting even when player has escaped violating conditions.
- Fixed MCM isBikini flag not updating until config menu is entirely re-opened.
- Optimized license book item add/remove event sequence.
- Optimized bounty enforcer alias fill conditions.
- Optimized quest start sequences.
- Moved curfew, workbench, and water detection magic effects to DetectState spell umbrella.
- Removed isCurseActive auto property in favor of directly checking for presence of Nullify Magicka magic effect.
- Removed Thaneship check functions and variables under ProximityActors quest.
- Renamed ProximityActors quest as ProximityCheck.
- Bumped PyramidUtils dependency check.
- Updated localization files.
- Updated Bruma patch.
- Updated dialogue patch.
-
Version 1.17.4
- Added magic effect for Follower checking to improve check accuracy and reactivity.
- Detached Follower-conferred immunity from Travel Permit variable to avoid conflicting changes. Travel Permit immunity will no longer show as valid permit on MCM splash screen.
- Moved BM_ME_DetectStateJail from DetectLoc to new DetectState spell umbrella.
- Removed license refunds on mod deactivation, incidentally fixing a gold loophole where conferred immunity refunds the player gold that they never used toward a respective license.
- Updated Bruma Patch.
-
Version 1.17.3
- Added feature: The limited device whitelist will now restrict LPO to a single collar type across its entire DD API interface, where valid.
- Fixed erroneous worldspace detection flagging Travel Violations while the player remains inside valid spaces.
- Fixed rare situations of erroneous Travel Permit rule immunity when exiting city worldspaces.
- Fixed location verification process occasionally lagging after player forfeits Travel Permit.
- Fixed Nullify Magicka curse not applying during normal magic violations, outside jail, when a source is given but Active Curse Enforcement is disabled.
- Fixed Magic Violation check behavior inconsistency depending on whether license or insurance exists on-hand.
- Optimized location caching.
- Optimized Magic Violation check conditions.
- Updated localization files.
- Improved License Reporter responsiveness when exiting city worldspaces.
- Removed unused global updates.
- Removed unnecessary functions and events.
-
Version 1.17.2
- Added feature: guard can send the player character to a nearby inn if they are violating curfew.
- Fixed BM_IsInJail flag erroneously changing to False when player enters jails without the LocTypeJail keyword.
- Fixed rare situations where BM_IsInJail fails to update after Skyrim loses track of player jail state around Cidhna Mine. Resolution: Piggyback on GetDaysInJail value.
- Fixed curse removal dialogue not appearing for Cyrodiil guards when the Bruma patch is installed.
- Reduced redundancies in exception state checking.
- Updated dialogue.
- Updated dialogue patch.
- Updated Bruma patch.
- Updated localization files.
- Optimized startup process.
- Regenerated SEQ.
-
Version 1.17.1
- Added additional API Function: ClearViolations().
- Fixed erroneous location detection behavior.
- Renamed function BM_PurchaseInsurance() as BM_PurchaseLifeInsurance().
- Renamed function BM_ExpireInsurance() as BM_ExpireLifeInsurance().
- Removed Moderator OnCellLoad() event due to unreliability.
-
Version 1.17.0
- Added UBE textures by @normal24yearoldstudent for Nullify Magicka tattoos. Patch is available via the FOMOD installer.
- Fixed Magic Violation logic hole flagging missing curse even if player has a magic license.
- Added additional papyrus trace for active drawn weapon/spell detection.
- Added additional mod events: ViolationCheck, ViolationFound, BountyStart, BountyEnd.
- Added additional API functions: GetModVersion(), GetLicenseID()
- Changed FlagViolation violation index.
- Changed mod event prefixes to "BM-LPO_". Event registers should probably use "LPO_" if mod authors want to follow current LPO conventions.
- Renamed function OnJailed() as PlayerJailed() for function name consistency.
-
Version 1.16.2
- Implemented option to disable license enforcers separately from disabling mod.
- Implemented secondary validation layer for dynamic weapon detection.
- Fixed dynamic weapon detection behavior erroneously flagging fists for weapon violation. This issue only affected users of some perk or combat mods, which stretched CK native conditions beyond intended range.
- Fixed occasional cases where magic violations don't flag uninsured violations due to Weapon module logic hole.
- Added new registerable mod events.
- Segmented CheckLicenseStatus function sequence.
- Reduced license check condition redundancy in ViolationCheck armor, magic, and weapon modules.
- Moved enchanted weapon check from ViolationCheck_Weapon module to ViolationCheck_Magic module.
- Regression: Additional dialogue tweaks to remove grammatical redundancy.
- Updated Bruma patch.
- Updated localization files.
-
Version 1.16.1
- Increased plugin file headers to 1.71.
- Added skip condition to spell checks if player is not in weapon drawn state.
- Added option to disable ammo checks under Weapon License section.
- Added option to disable update message box warnings.
- Added options to separately restrict Armor and Clothing under Bikini License.
- Added dynamic checking of weapon and magic unsheathed states for potential violations.
- Simplified some option names.
- Fixed sub-license item settings not promptly updating confiscation keyword arrays.
- Fixed jail confiscation function ignoring Bikini License settings.
- Fixed Prison Alternative state not showing inside MCM.
- Changed some notification wordings.
- Updated NPC dialogue.
- Added additional PurchaseLicense, ExpireLicense, and RemoveLicense API calls.
- Changed FlagViolation function to immediately call for bounty quest rather than check for other possible violations on push.
- Improved internal spell functions to account for scroll spells.
- Improved logic efficiency for OnSpellCast event, which may help limit the need for FormList patches.
- Migrated spell checks to OnAnimationEvent.
- Limited workbench checker to city and town locations.
- Updated dialogue patch.
- Updated localization files.
- Cleaned unused script property from Workbench and Curfew detector scripts.
- Differentiated internal mod name from MCM mod name string.
- Regression: Changed Curfew and Workbench detector scripts to directly call violations rather than use common function.
-
Version 1.16.0
- Added guard actor dialogue to remove curse outside usual license purchase events.
- Added License Renewal feature.
- Added a whitespace after MCM name string: Workaround for Licenses MCM capitalization.
- Fixed Active Curse Enforcement erroneously activating Deplete Magicka curse due to insufficient check priority of isMagicViolation boolean.
- Fixed Bounty Quest validity logic hole which may cause violations to erroneously persist if violation existed but bounty quest couldn't later pass a validation check. Resolved by applying a same priority check to both conditions and clearing violations, parameter 0, if AND condition fails.
- Reworked license purchase dialogue.
- Added register for Devious Interests Served Time event.
- Added API call to manually flag violations.
- Added additional papyrus traces to Travel Permit Violation Checker.
- Adjusted Travel Permit behavior to flush saved location and saved worldspace values immediately after flagged violation.
- Changed trace prefix from "BMLE" to "BM-LPO".
- Fixed incorrect debug log prints under Moderator Alias.
- Consolidated Workbench and Curfew violation calls under common utility function.
- Disabled Workbench violation checker if player is in location with LocTypePlayerHouse keyword.
- Updated dialogue patch.
- Updated Bruma patch.
- Updated localization files.
- Updated NPC dialogue branches.
-
Version 1.15.1
- Renamed "Refresh Timers" function as "Refresh Status".
- Bikini License no longer confers Clothing Violation immunity.
- Fixed enchanted items being filtered out by bikini keywords.
- Fixed Travel Permit privileges being conferred by follower presence even if relevant setting is disabled.
- Fixed KeywordConfiscation array fill logic to consider bikini license feature.
- Added a small delay to story Jail event to guard against improper device equips.
- Added exception state checking to Refresh Status function.
- Adjusted jail approximation method to always run unless prison mod is installed. This change may better guard against other scenarios where the BM_IsInJail value gets stuck, such as when escaping from Cidhna Mine.
- Updated localization files.
-
Version 1.15.0
- Added support for Prison Alternative events.
- Added Whore Violation bounty dialogue. These won't appear unless flagged by an external mod.
- Fixed Uninsured Violation erroneous condition setup.
- Fixed Collar Exemption game message warning erroneously using cooldown timer instead of expiration timer to calculate time remaining.
- Fixed DHLP event reception function name.
- Fixed spells not being dispelled from player's hands if Confiscate Inventory option is enabled.
- Fixed bounty validation not processing curfew violations.
- Fixed bounty quest tagging combat actors for alias.
- Fixed Travel Permit forfeit dialogue topic not showing for Bulwark guards.
- Patched edge case of bounty guard in dialogue with player: alias script is unregistered from update, yet bounty dialogue didn't activate during the conversation, so bounty quest has no chance to stop whether from walkaway or otherwise.
- Patched edge case of bounty guard reserving alias despite not running quest-invoked forcegreet package during unrelated quest scene.
- Allowed guard forcegreet if player is on horse.
- Updated Bruma patch to properly allocate dialogue and bounty aliases.
- Adjusted MCM layout.
- Adjusted jail immunity removal logic.
- Relocated violation checks to individual scripts under BM_Licenses_ViolationCheck quest.
- Relocated license status-related inventory events and immunity-checks to dedicated Moderator quest.
- Merged Follower and Thaneship scanners.
- Increased polling interval for workbench and curfew violations to reduce violation flag frequency.
- Improved MCM debug function feedback.
- Added additional safeguards against bounty quest papyrus stacks.
- Added additional safeguards to barter alias item events.
- Added condition check IsScenePackageRunning to prevent bounty quest from tagging scene aliases.
- Added Allow Reserved flag for bounty aliases.
- Bounty quest now terminates after valid fast travel event.
- Simplified countValidLicenses().
- Inventory filters for license books are now added and removed from purchase and expire functions, respectively.
- Reduced log spam from CountActiveLicenses().
- Updated localization files.
-
Version 1.14.0
- Added support Prison Overhaul Patched (AE).
- Added option for DDFilter limited list.
- Added support for DHLP events.
- Added support for SS events.
- Added dedicated function for checking Uninsured Violations.
- Added Trading Violation bounty dialogue.
- Removed Trading Violation block features.
- Removed Trading Violation message box items.
- Fixed player dialogue's punctuation for consistency. NPC dialogue hasn't changed.
- Fixed condition setup for License Limit dialogue.
- Fixed guards initiating dialogue again during the same bounty cycle that the player has already completed.
- Fixed LOS erroneous detection due to uncleared isDetected variable.
- Fixed bounty quest erroneously stopping if called multiple times in quick succession.
- Fixed Uninsured Violation erroneously being flagged when player has yet to purchase an associated primary license.
- Fixed LOS detection quest tagging non-playable races for aliases.
- Fixed Bounty quest rare inability to clear aliases when requested due to missing alias array.
- Fixed violations not clearing after Bounty quest time-out.
- Fixed violations not clearing after Bounty quest invalid alias setup.
- Fixed GetFine() function erroneously using Trading License cost to calculate Travel Violation fine.
- Fixed items equipment being unequipped or confiscated even though they didn't flag any violation during the pre-confrontation violation checker.
- Bounty quest aliases are now linked to their own scripts and terminate via said script rather than from the quest's polling script.
- Individual license book items now send for individual inventory event filters.
- Added BM_LicensesIgnoreSpell for ignoring custom spells.
- Added Magic Effect location checking for LocTypePlayerHouse keyword.
- Removed dependency on isDetected variable.
- Removed isHome script variable for BM_IsInPlayerHome global variable.
- Removed isPrisoner script variable for BM_IsInJail global variable.
- Updated dialogue patch.
- Switched to use of PO3E AddAllEquippedItemsToArray() for equipped item scanner.
- UnlockCursedTattoos() function regression to pre-1.13 logic.
-
Version 1.13.1
- FinishConfrontation() function regression to partial pre-1.13 logic.
- Fixed misnamed variable under Nullify Magicka magic effect scripts.
- Fixed misnamed function under WalkAway papyrus fragments.
- Fixed possible case of repeated guard confrontation from script's inability to curse the player due to missing Magic Violation. Resolution: Consider Active Curse Enforcement boolean in OR logic.
- Added additional call to stop bounty quest when resetting violations post-confrontation. This may help stop erroneous bounty starts during short lapses in player's immunity from said start calls, such as when entering jail as a prisoner.
-
Version 1.13.0
- Added location checking for Helgen location where valid. This provides soft compatibility with Alternate Perspective and other mods that maintain pre-MQ Helgen.
- Added option to disable Nullify Magicka active curse enforcement. If this option is disabled, curse will no longer be a decider for violation but rather a deterrant that the player can remove without fear of punishment.
- Added First Time Violation dialogue.
- Added Refresh Tattoos function.
- Added option to reduce tattoo slot usage.
- Added Curse Violation-specific dialogue. This dialogue branch takes priority over base Magic Violation dialogue and allows the player to be cursed without incurring a fine.
- Increased height of thigh tattoo.
- Improved Dragonborn Solstheim compatibility with the following changes:
- > Removed Skaal Village from BM_Towns form list.
- > Allowed Adril Arano as possible license seller under Steward designation.
- > Allowed Raven Rock Bulwark Faction guards, or Redoran guards, to sell licenses under Guard designation.
- > Allowed Redoran guards to enforce license rules.
- Guards will now disenchant player's collar if they purchase a Magic License but lack a Collar Exemption.
- Guards will no longer dispell player's Nullify Magicka curse unless they have both Magic License and Life Insurance on-hand, where applicable.
- Mod deactivation function will now attempt to remove Nullify Magicka curse.
- Implemented magic effect method for checking location form lists. This should improve performance, increase worldspace check accuracy for 'open-world' cities like Solstheim, and reduce unnecessary checks.
- Implemented alias checking and conditional cycle restart for LOD detection quest.
- Removed Collar Violation Pay Fine unique dialogue.
- Moved tattoo lock and unlock calls to Magic Effect script.
- Moved tattoo verification function to utility script.
- Fixed LOS detection quest erroneous conditional setup.
- Fixed missing logic to exclude bikini-flagged items under inventory confiscation function.
- Fixed incorrect BHUNP tattoo texture file paths.
- Fixed missing dialogue link in dialogue patch. Resolution: Forwarded Curfew Violation kinky dialogue record to dialogue patch.
- Fixed logic issue where curse is removed from purchasing Magic License but re-applied via Insurance Violation.
- Fixed incorrect conversation branches due to missing conditions under Collar PayFine Topic Info.
- Fixed bounty dialogue erroneously diverting to arrest via Licenses enforcer when Add Fine to Bounty is enabled. Jail events from lack of gold should've been handled via vanilla guard arrest events with this setting enabled.
- Fixed mismatched ResetViolations() function call under player alias script.
- Fixed Travel Permit quick purchase topic appearing under conversation menu due to insufficient condition checks.
- Fixed erroneous flagging of player as prisoner when jail SME quest nodes are disabled.
- Fixed cursed tattoo array not repopulating when relevant body-part options are toggled.
- Fixed collar removal logic attached to Collar Exemption purchase function.
- Fixed bounty being added from walkaway topic when multiple guards confront the player at the same time.
- Adjusted Travel Violation checker logic.
- Adjusted tattoo apply and removal logic.
- Adjusted item checker logic to be based around Pyramid Utils' functions by retrieving inventory snapshot rather than checking dynamically at mid-function call runtime. This change more closely aligns checker with confiscator logic to guard against edge cases on either side, such as where violating items aren't removed or non-violating items are removed. This change also better guards against soft-locks from cases where users persist to use this mod without its hard dependencies.
- Improved robustness of license expire functions.
- Updated dialogue patch.
- Updated Bruma patch.
- Updated localization files.
- Minor script optimizations and migrations.
-
Version 1.12.4
- Fixed bounty quest hang when aliases are too far away.
- Fixed dialogue issue where bounty conversation erroneously and prematurely exits due to needsArrest boolean.
- Fixed missing dialogue link for Curfew Violation kinky dialogue, which may cause conversation to exit if player has insufficient gold.
- Fixed Travel Forfeit script fragment mislinked function.
- Fixed cases where location doesn't refresh in time after activating Licenses, leading to a premature and sometimes erroneous Travel Violation.
- Fixed unlinked script fragments under dialogue patch's walkaway record.
- Fixed Travel Violation variable resetting erroneously when it should persist after being set as True.
- Added a message warning against mod reset function to prevent accidental presses.
- Improved debug trace clarity for Fine generation function.
- Optimized violation checker.
- Optimized shutdown process.
- Updated dialogue patch.
- Updated localization files.
- Additional minor script changes and unifications for shared function calls.
-
Version 1.12.3
- Fixed a rare issue that may cause the periodic checker to skip its daily license validation cycle if the player somehow skips directly from one midnight to the next, thus disallowing the spell from re-checking its conditions. Resolution: Detached logic of underlying spell from game CurrentTime condition.
- Added "BM_LicensesIgnoreItem" keyword.
- Added additional localization tokens that were missing in previous versions.
- Floored generated cooldown time values.
- Adjusted item checks to ignore items with "BM_LicensesIgnoreItem" keyword.
- Adjusted MCM layout.
- Improved MCM function feedbacks and perceived responsiveness.
- Changed wording of Curfew Warning notification.
-
Version 1.12.2
- Fixed issue where LOS aliases, specifically, fill with non-actor references, causing a stall in the violation checker script. Resolution: Adjusted LOS quest aliases to check for actor type.
- Fixed cases of erroneously missing LOS enforcers. Resolution: Changed LOS quest aliases to allow reserved references.
- Fixed regression causing bounty quest to erroneously stop during bounty dialogue. Resolution: Exchanged native Find() for PapyrusUtil CountActors().
- Fixed bounty quest stalling when player moves to a cell that prohibits previously-tagged actors from following. Resolution: Call for validity check on cell or loc change.
- Fixed MCM Cooldown Time notification's mismatched localization token.
- Added a Refresh Timers debug function.
- Reimplemented distance-based bounty alias validity checks.
- Adjusted Magic Effect OR CK conditions to correct OR logic format.
- Adjusted Bounty quest aliases to check against reference dead state and actor type.
- Adjusted Bounty quest periodic checker logic.
- Floored generated expiration time values. Negative values should hereon only denote errored expiration times.
- Removed unused FirstTimeSetup property from MCM script.
- Disabled page reset when LOS setting is toggled.
- Improved description clarity for Enforcer Count setting.
- Stored mod name as in-script explicit property.
-
Version 1.12.1
- Increased bounty guard maximum from one to five.
- Fixed duplicate remove item notifications.
- Fixed missing Devious Devices punishments on jail arrest node.
- Fixed rare case of detection quest failure: Applied "optional" tag to LOS detection quest aliases so that not all five aliases have to be filled.
- Fixed cases where expired Travel Permit doesn't appropriately update saved location.
- Fixed location checker not whitelisting home locations.
- Added array method for bounty alias validity checking.
- Added array method for detection alias validity checking.
- Reduced complexity of bounty quest auto-expiry logic.
- Removed some unnecessary behaviors under forcegreet package.
- Changed jail node inventory scan to operate per enabled license features. This change should incidentally improve compatibility with other mods that affect jail inventory items.
- Filtered ally NPCs from being tagged as general Enforcer aliases.
- Assigned forcegreet dialogue to only come from tagged guard actors. This fixes a rare issue where, for example, a female guard provides arrest dialogue via player-invoked communication even as only male enforcing guards were enabled.
- Updated dialogue patch.
- Updated MCM.
- Minor function migrations.
-
Version 1.12.0
- Added a dedicated function for checking location validity in utility script.
- Added whitelist keyword for Zaz devices.
- Added PyramidUtils as hard dependency.
- Added SlaveTats as soft dependency.
- Added MCM checks for hard dependency validity.
- Added Nullify Magicka magic effect as spell.
- Added Cursed Tattoos as alternative to Cursed Collar. Thanks to Alpia for the textures.
- Added a dedicated TopicInfo segment for bounty goodbye dialogues. This fixes an issue where guards continue chasing the player after they've already paid the fine. Issue was caused because quest cannot stop before PayFine() function has finished running.
- Added VendorItemBook keyword to license book items. This should allow the items to be stolen via some 'Defeat mod' robbery events.
- Added an option to curse the player with Nullify Magicka without depending on Devious Devices' collar item.
- Renamed plugin as "Licenses".
- Improved dialogue lines.
- Redirected bounty failure sequences to violation reset. This should fix erroneously persisting violations.
- Improved inventory confiscation with Pyramid Utils functions.
- Improved NPC merchant check with Pyramid Utils function.
- Changed Weapon License to allow for Staffs.
- Changed central mod functions to start as inactive. BMLE will no longer start its primary license enforcement quests until the mod is enabled via the MCM.
- Edited localization tokens.
- Updated lang files.
- Updated dialogue patch.
- Tweaked MCM layout.
- Fixed Fine calculation not considering Magic Violation fine.
- Fixed Insurance cost and Curfew Exemption cost erroneously affecting fine calculation during Magic Violations.
- A whole bunch of other stuff that I can't remember.
-
- Donations
-
No donations accepted


Is your purse sagging from all your Draugr crypt Gold? Did you ever feel like Skyrim just ain't xenophobic enough? Or have you found your player character with way too much freedom? Come settle your findom needs here and let Licenses oppress your character!
Licenses, or LPO, allows you to define Skyrim's laws as roleplay elements and/or gold sinks. Transform your Skyrim into the oppressive world of your fantasy. This is the premier license mod for Skyrim.
Note: This archive is adjusted for a Nexus Mods release, so some update notes may not be relevant. Core mod functionality is unaffected. Deprecated versions will not receive support.
ALWAYS FLEXIBLE - Licenses offers you a variety of ways to customize the mod. Change which body slots LPO checks via the Slot Filtering page. Tag your modded items with relevant VendorItem or LPO-specific keywords. Adjust how exactly LPO enforces your laws. It's all up to you.
ALWAYS VERSATILE - Other mods focus only on either SFW or NSFW. Licenses follows a hybrid model instead, allowing you to fit taxation into either gameplay style.
CAREFULLY COMPATIBLE - Unlike similar mods in its class, Licenses avoids worldspace edits and NPC additions, preferring instead to place a primacy on your vanilla game world. Licenses leverages existing NPCs while also endeavoring to reduce what footprint you see of it inside your game. This ideology leads to what I call "sweetened vanilla": It's like vanilla, but with more sugar. Thus, no need to worry about common incompatibilities with other mods.
SAFELY INTEGRATED - Licenses integrates with a variety of mods to protect your gameplay experience. Find fun times with supported mods and feel safe with a guarantee that Licenses won't intrude where and when it ain't welcome.
MILK DRINKER'S PARADISE - The Kinky Dialogue option allows a more forceful belittling of the player by in-game guards, tailored for each license feature you've enabled. Fits right in with all the "sweet roll" and "arrow-in-the-knee" bantering.
LIKE A KHAJIT ON SKOOMA - License checks run with both native conditions and multi-threaded script processing. Equipment checks, a known horker-of-a-beast, are processed swiftly with Scrab's Papyrus Extender.
TINKER IT - Change your LPO settings to whatever you want them to be. Manage your Skyrim laws with the click of a button! Each feature has its own clear conceptual boundaries, and the MCM exposes all details so you can design for your play-style.
RENEW IT - By default, LPO establishes a strict active license cycle wherein the player temporarily loses any ability to regain license privileges should they lose their license copy, but you may avoid this trap with the Renewal feature. Take care: License renewal fees are not prorated!
LIMIT IT - The number of active licenses can be capped via an MCM option. You can also disable immediate post-expiration purchases with the License Cooldown setting. Find your limitation beyond the gold in your purse.
Primary Licenses
- Armor License
- Bikini License
- Clothing License
- Magic License
- Weapon License
Secondary Licenses
- Crafting License
- Trading License
- Curfew Exemption
- Travel Permit
- Life Insurance
Tertiary Licenses
- Whore License (Open Integration)
- Collar Exemption (Devious Devices)
Check the user manual for more in-depth information on basic license features. There are more features that aren't cataloged online. Check the in-game settings menu for more information on this mod's feature set.
When upgrading some existing saves with newer minor (major.minor.patch) updates, you may see the following notification: "Detected potential config version conflict." Licenses will automatically prompt you to reset your MCM quest. If you'd like to defer this action, you may later go to [Licenses > Auxiliary > Reset MCM] to properly upgrade your save game. This prompt is a product of excessive caution, though you may still opt for it to flush any cached MCM-specific variables incorrect for your current LPO version.
If you are multiple versions behind the latest release in any capacity, you may need to first deactivate LPO in-game and create a new save file with it deactivated before installing a newer version. Pay careful attention to the version number; Licenses follows semantic versioning.
Assume that downgrading saves is always unsafe.
Hard Dependencies
PapyrusUtil
PO3's Papyrus Extender
Scrab's Papyrus Extender
Soft Dependencies
Arousal Framework (ex. OSL Aroused)
Devious Devices 🔗
Fuz Ro D'oh
SlaveTats 🔗
Situational Dependencies
Backported Extended ESL Support
- Required if game version < 1.6.1130
- Recommended if using Devious Devices. Fixes an engine bug that disables Cursed Collar's effects in some situations.
External
Beyond Skyrim - Bruma
- Allows Licenses' features to work in Bruma.
Alternate Perspective - Alternate Start
- Enables Helgen location monitoring while the town still stands.
- Provides NPC voices (xVASynth).
- Provides NPC voices (Tortoise TTS + RVC).