Jump to content

(Cleantool In Beta) Viral Save Corruption by PregnancyNormalmapSwapper


Recommended Posts

UPDATED PROBLEM SUMMARY:

 

Racemenu never cleans up obsolete overrides and overlays. Instead it assumes that mods using racemenu are responsible to clean up no longer needed textures. This bad design is made worse, by overrides and overlays propagating into racemenu presets. And then on top of this skyrim doesn't clean up itself either, unless you restart it, so it's very easy for invalid overrides and overlays spill over between savegames. Mechanically this is the same situation that enabled floppy disk viruses in the 80s: Skyrim is the bad kernel design, racemenu is the bootloader, and your savegames are the floppy disks.

 

Enter PregnancyNormalmapSwapper. Users who download this mod likely expect it to dynamically "swap" body normalmaps "on-the-fly". But that's not what it does. Instead PNS acts as the equivalent of the floppy disk virus: It uses racemenu to permanently add skin-overrides to every char you ever met in your game. And it never removes them. Travel around skyrim, and eventually every NPC in the game has a skin-override. This persists across saves, it spreads into racemenu presets, and it can even spread across playthroughs and into new games if you don't restart skyrim. 

 

Okay, so that's really bad software design. But where's the damage? Simple: Either PNS or the racemenu skin-override feature is bugged. It causes the glitch in the picture down below. And since those overrides are permanent and spread across saves, basically all your saves and RM presets are poisoned.

 

User Traison generously has created a cleanup mod that appears to work well. However, it has only been tested on my setup so far. Please read Traison's instructions carefully on how to use it. Also there is a V3 version further down in the thread, which is probably better than V2.

 

_____

 

GENERAL FIX FOR SKYRIM LEAKING ACROSS SAVES:

 

Clean Save Auto-Reloader: https://www.nexusmods.com/skyrimspecialedition/mods/88219

 

This will NOT fix already corrupted saves. Neither will it stop racemenu from putting bad overrides/overlays into RM presets when you export a character. It just stops skyrim from leaking data across saves, when you load a game without restarting skyrim first. In other words: It stops automatic spreading across saves.

 

It does so by simply preventing you from soft reloading: If you're ingame and try to load a save, the above mod automatically restarts skyrim and then loads the save you selected. Yes it's annoying because you have to wait much longer for reloads, but this lazyness kinda is the problem, isn't it?

 

_____

 

OLD POST:

 

So i've been slowly building my AE setup one step at a time. I saved adding companions for last, since i knew they're trouble. What i did not expect was debugging weird graphics glitches appearing ONLY on followers. And i mean EVERY follower, not specific ones. After all: Why would graphics bugs care about if i hired someone or not?

 

Yet that's what i have now: A full setup of 300 mods, and the moment i test followers as the last step, i'm getting this:

 

sse-follower-shaderglitch.jpg.94ec90199564b0353efacff562beb953.jpg

 

As you can see, only the head and hands are rendered properly. The torso, legs and feet instead look as if half of the shader-pipeline failed. And this happens ONLY to active followers during cell changes, especially fast-travel. My char and every other NPC renders just fine. Even those "followers" render fine if i dismiss them.

 

A soft save and reload doesn't fix it by the way. Game restart does fix it, as does executing disable enable on those chars. 

 

By now i have excluded over a dozen mods that deal with graphics and overlays. Since it only happens to active followers, i'm starting to suspect the pain in the ass that is NFF to be the culprit.

 

Anyone seen something like this before?

 

Edited by libertyordeath
Link to comment

POSSIBLE SOLUTION FOUND!

 

This bug appears to have multiple causes, with different workarounds working for different people. All of them are however related to racemenu, or mods interacting with racemenu. 

 

We do know the bug has NOTHING to do with any of the following:

- RAM/VRAM

- Body textures or meshes

- OS, GPU, Drivers

- ENB or Reshade

- Parallax

- Effect shaders like soakingwet

- NFF

 

In my case at least, it also was unrelated to savegame corruption or stuck overlays.

 

Here's what worked for some people, but not others:

- In SKEE.INI set "bBipedAttach=0". Possible drawbacks unknown.

- In SKEE.INI set "iAlphaFlags=4844" and "iAlphaThreshold=128". Possible drawbacks unknown.

 

Here's what worked for everyone:

- Disabling racemenu and all mods depending on it. It's not really a solution however, since so many features rely on racemenu. And disabling it midgame may cause savegame corruption. 

 

Here's what worked for my case:

- Downgrade from racemenu 4.19.14 AE GOG to 4.19.13 AE GOG. No changes needed in SKEE.INI. 

- Both of the above versions luckily are built for SKSE 2.2.3, and available for steam and GOG skyrim. So there are no compatibility issues with downgrading. You're just missing whatever the racemenu dev "improveworsened" in 4.19.14.

 

At this time, i don't know yet if the downgrade fixes the bug for other people too. If it does, then the real problem is everyone affected is stuck with the current game and SKSE version. You will not be able to update in the future, until racemenu fixes whatever's causing the bug in 4.19.14.

Edited by libertyordeath
Link to comment
  • libertyordeath changed the title to (NOT Solved) Racemenu Bodytex Glitch On Cellchange

UPDATE: NOT SOLVED

 

Yes, downgrading to racemenu 4.19.13 fixes the mentioned glitch on my setup. It also makes all overlays stop working.

 

So the choice i have right now is:

A) Use racemenu 4.19.13 and have no overlays at all.

B) Use racemenu 4.19.14 and have followers glitch out on cellchange.

 

I'm out of ideas. Here's my modorder (from MO2, so priority is reversed: Top is last, bottom is first). Plugins are loaded in the same order when possible (ESMs etc obviously jump, but relative order is kept):

 

Spoiler

# This file was automatically generated by Mod Organizer.
+CBPC Override
---- FINAL OVERRIDE ---_separator
+LOD DynDOLOD Output
+LOD TexGen Output
+LOD DynDOLOD Plugin
+LOD Cat-Land xLODGen Res
+LOD Resources SE
+Map Clear Map of Skyrim Roads
+LOD XLODGen Output
---- LOD Gen ---_separator
+Anim Nemesis Output
+Anim FNIS Output
+Body Bodyslide Output
---- BODY Gen ---_separator
+SLab Better Pilories
+SLab Anims Baka
+SLab Anims FunnyBiz
+SLab Anims Psyche
+SLab Anims K4
+SLab Anims Snarok
+SLab Anims Milky
+SLab Anims Mike
+SLab Anims Billy New
+SLab Anims Billy Old
+SLab Anims Anub Creature
+SLab SLAL
---- SL Anims ---_separator
+Bashed Patch
---- BASH ---_separator
+Hack DecoratorHelper
---- PRE-BASH OVERRIDE ---_separator
+SLab SLA Monitor
+SLab Manipulator
+SLab Puppetmaster
+SLab Dirty Deeds
+SLab TDF Prostitution
+SLab Radiant Prostitution
+SLab Sisterhood Dibella
+SLab Apropos
+SLab Confabulation
+SLab Solutions
+SLab More Creatures
+SLab Animal ABC
+SLab Animal SOS Werewolf Fix
+SLab Animal SOS SE
+SLab Aroused Creatures
+SLab MNC v12
+SLab CreatureFramework
+SLab HentaiPreg
+SLab Cum Overlays Ext
+SLab Slavetats
+SLab Dripping when aroused
+SLab Eager NPCs
+SLab Pos Selector
+SLab ZAZ 8
+SLab OSL Aroused
+SLab LightMeUp
+SLab Cumsound Replacer
+SLab Sexlab
---- SLAB ---_separator
+Tweak Skill Uncapper
+Tweak Store Questitems
+Tweak Speak Only If Facing
+Tweak Im Walking Here
+Tweak TavernAITweaks
+Tweak Unl Bookshelves
+Tweak Run For Your Lifes
+Tweak Reasonable Movespeed
+Tweak Modern Horse Cam
+Tweak Faster Horse Mount Dismount
+Tweak Better Horses
+Tweak Hold To Sprint
+Tweak Regen Tweaks
+Tweak Sneak Range Tweaks
+Tweak MoreGoldLoot
+Tweak PlayerCollisionOptions
+Tweak ExhaustedEnemiesCantBlock
+Tweak Arrow Bolt Tweaks
+Tweak Unequip Quiver
+Tweak Glowing Arrows
---- TWEAKS ---_separator
+Quest Sidequests of Skyrim
+Quest Missives
+Quest Thief Guild Reqs
+Quest Alternate Start
+Quest Timing Is Everything
+Quest The Choice Is Yours
---- QUESTS ---_separator
+NPC NFF
+NPC Simplest Horses
+NPC Simple Offense Supression
+NPC Travelers Lite
+NPC Adventurers & Travelers
+NPC Immersive Wenches
+NPC Immersive Patrols
+NPC Extended Encounters
+NPC Go On Ahead
+NPC Killable Children
+NPC ArcadiaNoSicknessRemark
+NPC Quiet Dogs
---- NPC ---_separator
+Game Simply Knock
+Game TakeAPeek
+Game Khajit Fences
+Game TakeWorthlessItems
+Game Weapon Auto-Recharge
+Game Soulgems Multithreaded
+Game No Enchant Restrictions
+Game Armor Rating Rescaled
+Game One With Nature
+Game Campfire
+Game iNeed
---- GAMEPLAY ---_separator
+Eco Wergild Deprecation
+Eco Bounty Gold
+Eco Trade And Barter
+Eco Simple Taxes
+Eco Inn Price 20gold
+Eco More Expensive Spells
+Eco Ars Metallica Smithing
+Eco Nordic Cooking
+Eco Survival Cooking
+Eco Better Hunting Prices
+Eco Immersive Meats
+Eco Portable Alchemy
+Eco Grind Stuff
+Eco Useful Butter Churns
---- ECONOMY ---_separator
+Anim GoToBed Patches
+Anim GoToBed Lite
+Anim DAR Eating Anims Patches
+Anim DAR Eating Anims
+Obj HQ Food
+Anim Warming Hands
+Anim VioLens
+Anim Immersive Looting
+Anim CombatPrecision
+Anim Enemy Search Anim
+Anim Vanargand Bow Anims
+Anim Pretty Combat Anims
+Anim Iceskating Fix
+Anim Expressive Facial Anims F
+Anim Motion Revolution
+Anim Nemesis PCEA
+Anim Nemesis Payload Interpreter
+Anim Nemesis
+Anim FNIS
+Anim DAR
+Anim BetterJumping
+Anim Faster Getup
---- ANIMS ---_separator
+Cloth Ravens Seduction Mashup
+Cloth Scout Leather Armor Reskin
+Cloth Rustic Armor
+Cloth Rustic Clothing
---- CLOTHES ---_separator
+Body ShowRacemenu Alt
+Body Racemenu 4.19.14
-Body Racemenu 4.19.13
+Body ApachiiHair
+Body 3BA Pregbelly Auto-Normalmap
+Body SOS Female Pubes Addon
+Body Bijin Skin 3BA
+Body CBBE 3BA
+Body CBBE AE-CC Outfits
+Body CBBE Base
+Body SOS
+Body Eye Normalmap Fix
+Body BodySlide
+Body CBPC 3BA Addon
+Body CBPC
+Body XP32Max Skeleton SE
---- BODY ---_separator
+Sound Better Animal Footsteps
+Sound Acoustic Space Fixes
+Sound Reverb Interior Expansion
+Sound Regional Sound Expansion
+Sound Immersive Sounds Compendium
---- SFX ---_separator
+GFX Candlelight Magelight Fix
+GFX ENB Light
+GFX Embers HD
+GFX Soaking Wet
+GFX Storm Lightning
+GFX RudyENB Cat Weathers Fix
+GFX RudyENB Splashes of Storms Fix
+GFX Splashes Of Storms
---- GFX ---_separator
+Loc More Banditcamps
+Loc Cozy Tavers Vis Overhaul
+Loc Cozy Taverns
+Loc Hearthfire Extended
+Loc Revrun Starter Homes
+Loc Lupus Breezehome
+Loc Riverwood Tenthome
+Loc Whiterun Safehold
+Loc Gildergreen Regrown
+Loc BuyBreezehomeViaGildertree
---- LOCS ---_separator
+World Water for ENB
+World Crows
+World SkygazerMoons
+World Whiterun Cobblestone
+World Whiterun Wood Replacer
+World Real Wood Replacer
+Para Cat Land Green Parallax
+Para Dungeon Parallax
+Para Farmhouse Parallax
+Para Whiterun Parallax
+Para Icecave Parallax
+World ELFX SMIM Patch
+World ELFX Int & Flicker Fixes
+World ELFX
+World Cat-Weather MCM
+World Cat-Weather
+World Cat Land Green
+World Assorted Meshfixes
+World SMIM No Ropes
+World ENB Particle Patch
---- WORLD ---_separator
+Fix Critterspawn Congestion Fix
+Fix Combat Escape Fix
+Fix Animals Dont Report Crimes
+Fix Stagger Direction Fix
+Fix Shields Block Poison
+Fix Special Item Enchant Fix
+Fix AI ProcessPos Fix
+Fix Anim Queue Fix
+Fix Anim Static Reload Fix
+Fix Actorlimit Fix
+Fix Dead Body Cleaner
+Fix Dont Push Me Around
+Fix Dragon Stalking Fix
+Fix Journal Limit Fix
+Fix FuzRoDoh
+Fix AutoParallax
+Fix Blackface Fixer
+Fix MFGFix
+Fix Scrambled Bugs
+Fix Bugfixes SSE
---- FIXES ---_separator
+Map HD Localmap
+Map Atlas Map Markers
+Map Clear Map of Skyrim
+Map Unique Mapweather Framework
---- MAP ---_separator
+GUI Less Intrusive HUD
+GUI Customizable Camera
+GUI Equip HUD
+GUI Matter Of Time
+GUI DisplayEnemyLevel
+GUI Floating Damage
+GUI Horse Stamina HUD
+GUI JS Lockpick UI
+GUI Show Player In Menus
+GUI Whoms Quest Is It
+GUI MoreHUD Inventory
+GUI Convenient Dialogue
+GUI Better Msgbox Control
+GUI Message Log
+GUI MoreInfo Console
+GUI Remove QSave & Help
+GUI StayAtSysPage
+GUI YesImSure
+GUI Clean Mainmenu
---- GUI ---_separator
+SkyUI MCM Asskicker
+SkyUI Essential Favs
+SkyUI Extended Favs
+SkyUI NL-MCM
+SkyUI MCM Helper
+SkyUI UIExtensions
+SkyUI LargerMCM
+SkyUI ScaleFormTranslate
+SkyUI Craft Categories
+SkyUI Better Container Controls
+SkyUI Ghost Item Fix
+SkyUI Fix Note Icon
+SkyUI Better Sorting
+SkyUI 5.2
---- SKYUI ---_separator
+SSEPatch EqualRaceHeight
+SSEPatch Ravenrock Horse Exit Fix
+SSEPatch Proj Optimization No-Homes
+SSEPatch Skyrim Landscape & Water Fixes
+SSEPatch WACCF
+SSEPatch Unofficial CC Patch
+SSEPatch Vanilla Scriptfixes
+SSEPatch Unofficial SSE Patch
---- VANILLA PATCHES ---_separator
+Base Formlist Manipulator
+Base Craft Recipe Distributor
+Base Keyword Item Distributor
+Base SpellPerkItem Distributor
+Base Soundrec Distributor
+Base Behavior Data Injector
+Base AnimObject Swapper
+Base Base Object Swapper
+Base FISSES
+Base Anim Limit Crashfix
+Base TAA Flicker Fixer
+Base Display Tweaks
+Base Papyrus Tweaks
+Base Papyrus Extender
+Base Power3 Tweaks
+Base ConsoleUtil
+Base PapyrusUtil
+Base JContainers
+Base Cleansave Autoreloader
---- BASELIBS ---_separator
*Creation Club: ccAFDSSE001-DweSanctuary
*Creation Club: ccASVSSE001-ALMSIVI
*Creation Club: ccBGSSSE001-Fish
*Creation Club: ccBGSSSE002-ExoticArrows
*Creation Club: ccBGSSSE003-Zombies
*Creation Club: ccBGSSSE004-RuinsEdge
*Creation Club: ccBGSSSE005-Goldbrand
*Creation Club: ccBGSSSE006-StendarsHammer
*Creation Club: ccBGSSSE007-Chrysamere
*Creation Club: ccBGSSSE008-Wraithguard
*Creation Club: ccBGSSSE010-PetDwarvenArmoredMudcrab
*Creation Club: ccBGSSSE011-HrsArmrElvn
*Creation Club: ccBGSSSE012-HrsArmrStl
*Creation Club: ccBGSSSE013-Dawnfang
*Creation Club: ccBGSSSE014-SpellPack01
*Creation Club: ccBGSSSE016-Umbra
*Creation Club: ccBGSSSE018-Shadowrend
*Creation Club: ccBGSSSE019-StaffofSheogorath
*Creation Club: ccBGSSSE020-GrayCowl
*Creation Club: ccBGSSSE021-LordsMail
*Creation Club: ccBGSSSE025-AdvDSGS
*Creation Club: ccBGSSSE031-AdvCyrus
*Creation Club: ccBGSSSE034-MntUni
*Creation Club: ccBGSSSE035-PetNHound
*Creation Club: ccBGSSSE036-PetBWolf
*Creation Club: ccBGSSSE037-Curios
*Creation Club: ccBGSSSE038-BowofShadows
*Creation Club: ccBGSSSE040-AdvObGobs
*Creation Club: ccBGSSSE041-NetchLeather
*Creation Club: ccBGSSSE043-CrossElv
*Creation Club: ccBGSSSE045-Hasedoki
*Creation Club: ccBGSSSE050-BA_Daedric
*Creation Club: ccBGSSSE051-BA_DaedricMail
*Creation Club: ccBGSSSE052-BA_Iron
*Creation Club: ccBGSSSE053-BA_Leather
*Creation Club: ccBGSSSE054-BA_Orcish
*Creation Club: ccBGSSSE055-BA_OrcishScaled
*Creation Club: ccBGSSSE056-BA_Silver
*Creation Club: ccBGSSSE057-BA_Stalhrim
*Creation Club: ccBGSSSE058-BA_Steel
*Creation Club: ccBGSSSE059-BA_Dragonplate
*Creation Club: ccBGSSSE060-BA_Dragonscale
*Creation Club: ccBGSSSE061-BA_Dwarven
*Creation Club: ccBGSSSE062-BA_DwarvenMail
*Creation Club: ccBGSSSE063-BA_Ebony
*Creation Club: ccBGSSSE064-BA_Elven
*Creation Club: ccBGSSSE066-Staves
*Creation Club: ccBGSSSE067-DaedInv
*Creation Club: ccBGSSSE068-Bloodfall
*Creation Club: ccBGSSSE069-Contest
*Creation Club: ccCBHSSE001-Gaunt
*Creation Club: ccEDHSSE001-NorJewel
*Creation Club: ccEDHSSE002-SplKntSet
*Creation Club: ccEDHSSE003-Redguard
*Creation Club: ccEEJSSE001-Hstead
*Creation Club: ccEEJSSE002-Tower
*Creation Club: ccEEJSSE003-Hollow
*Creation Club: ccEEJSSE004-Hall
*Creation Club: ccEEJSSE005-Cave
*Creation Club: ccFFBSSE001-ImperialDragon
*Creation Club: ccFFBSSE002-CrossbowPack
*Creation Club: ccFSVSSE001-Backpacks
*Creation Club: ccKRTSSE001_Altar
*Creation Club: ccMTYSSE001-KnightsOfTheNine
*Creation Club: ccMTYSSE002-VE
*Creation Club: ccPEWSSE002-ArmsOfChaos
*Creation Club: ccQDRSSE002-Firewood
*Creation Club: ccRMSSSE001-NecroHouse
*Creation Club: ccTWBSSE001-PuzzleDungeon
*Creation Club: ccVSVSSE001-Winter
*Creation Club: ccVSVSSE002-Pets
*Creation Club: ccVSVSSE003-NecroArts
*Creation Club: ccVSVSSE004-BeAFarmer
---- CC ---_separator
*DLC: Dawnguard
*DLC: Dragonborn
*DLC: HearthFires
*Creation Club: ccQDRSSE001-SurvivalMode
---- AE ---_separator
 

 

Link to comment

Confirmed!

 

Previously i did test disabling PregnancyNormalmapSwapper (PNS) - but on a current (corrupted) save. The glitch still happened i excluded it as a candidate.

 

Later i tested for savegame corruption, by COCing to riverwood straight from the mainmenu, using cheats to set all cities as discovered, and then used NFF to recruit someone and fast-travel across skyrim. Glitch still happened, but duh! I had PNS enabled.

 

NOW i disabled PNS, and did the same as above: COC from mainmenu, recruit someone and use cheats to fast-travel across skyrim. 8 times. No glitch.

 

Unfortunally, because of how PNS works (described in the linked flamepost above), ALL MY SAVEGAMES ARE CORRUPT - 200 hours of playtime. Basically the moment you add PNS to your game, it starts adding racemenu skin-overrides to every NPC you meet in the game. And because it's racemenu, those overrides are permanent, not dynamic. And because the dev only thought about making stuff work, not cleaning after him - it's like a virus. Worse, as someone pointed out in the other thread - skyrim doesn't clean up either between saves, reloads, or even NEW GAMES, unless you restart it. A user literarily reported in the PNS thread, how he tried to get rid of PNS by starting a new game - but he forgot to restart skyrim, so his new game got infected too.

 

So, yeah.

 

 

Link to comment
  • libertyordeath changed the title to (No Solution. New Game Required) Longterm Save Corruption by PregnancyNormalmapSwapper

If one can add overrides with papyrus, its quite likely you can remove them with papyrus as well. You'd probably have to walk around with a cloak spell for the rest of the playthrough though, one that scrubs all nearby npcs. I think if I was to attempt to save this situation, I'd alter PNS to clean up its own mess. I mean it already has the infrastructure to spread it - reversing it should be possible.

 

Edit: Yeah working on a fix, this should be doable. Will take a while, maybe in an hour. Also I won't be able to test it obviously, not affected by this issue.

Edited by traison
Link to comment

Try this on top of your existing PNS install. It stops the distribution of PNS' spell and instead distributes another that cleans things up.

 

Edit: Download removed, new version can be found below.

Edited by traison
Link to comment

Awesome, thank you! Before i cause any more damage, which of the following should i do:

 

- Run your fix along with PNS (with your fix later in the LO)?

- Disable PNS and run your fix in its place (no resaver cleaning)?

- Clean save with resaver, disable PNS, run your fix in its place?

 

Also, does your fix only clean PNS skin-overrides if found, or every skin override it finds? Asking because if it's the later, i would actually like to run this permanently as a poor man's way to disable the skin-override feature of racemenu. I looked for a way to disable it in skee.ini, but found nothing. It's got switches for everything except texture overrides.

 

Edited by libertyordeath
Link to comment
  • libertyordeath changed the title to (Cleantool In Testing) Viral Save Corruption by PregnancyNormalmapSwapper

Fix is to be loaded after PNS, with PNS unaltered loaded before it. You can't really remove PNS anymore without potentially bricking your save, so the best we can do is disable it and turn the virus into a vaccine as it were.

 

As for what it removes:

  1. The spell (ability) added to all npcs. This is what would most likely brick your save if PNS was removed.
  2. The skin override added to all npcs. I am not familiar with skin overrides, but considering the function takes a key and an id among other things, I would assume its only going to remove the override added by PNS.

As for what it affects:

 

It's using the same distribution method as PNS was originally, which is SPID. This has its own filters, and I did not look into what they all mean. I am going by the assumption that we want to target the same NPCs that were a target previously as well. I don't think this could be turned into a catch-all solution, but it certainly could be used to target overrides from other mods as well; just need their key, id and such.

 

Edit: Oh and just to make sure its clear, none of this should be run permanently as a fix for something unrelated. This is very much a precision fix for this specific issue. There's no reason to install PNS and this fix to fix an issue in another mod. A separate mod can and should be written for that purpose.

Edited by traison
Link to comment

Just realized the spell that does the cleaning is going to get stuck on npcs as well.

 

This will not clean up the cleaner from the previous version. So use a save from before the first cleaner was used. After using this for a bit, use ReSaver and make sure you have no lingering instances of "PNSMEF_fix".

PNS_fix_2.7z

Link to comment

Result: 3 Followers, 10 fast travels, 0 glitches.

 

Not even after the first loadscreen, which i would have expected. But now that i think about it, since i had to be near those followers when i recruited them, your fix basically cleaned them before i even started travelling.

 

Can't say anything about what goes on under the hood, other than dropping SKEE and papyruslogs, because the tools to inspect NPC data ingame are basically nonexistent. Heck, racemenu itself doesn't even show the skinoverride slot - just overlays. IMO that's the real problem here: This racemenu feature should never have been released, without also releasing tools to manage said feature, and for example wipe all skinoverides or all overlays from a savegame. But then again, the whole situation also shouldn't exist in the first place. So i guess this is a case of one bad decision leads to the next.

 

Again, THANK YOU for this, Traison! Do you want me to post this in the PNS thread, or do you prefer to do it yourself?

 

EDIT: There's a divide by zero error about PNS in the papyruslog. Attaching:

Spoiler

[04/30/2023 - 01:00:46AM] Papyrus log opened (PC)
[04/30/2023 - 01:00:46AM] Update budget: 1.500000ms (Extra tasklet budget: 1.500000ms, Load screen budget: 600.000000ms)
[04/30/2023 - 01:00:46AM] Memory page: 256 (min) 4096 (max) 8388608 (max total)
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse03Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse03Plaque01 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse03Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse03Plaque02 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse03Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse03Plaque03 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse03Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse03Plaque04 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse03Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse03Plaque05 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse03Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse03Plaque06 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse03Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse03Plaque07 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse03Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse03Plaque08 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse03Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse03Plaque09 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtProudspireManorPlaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtProudspireManorPlaque01 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtProudspireManorPlaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtProudspireManorPlaque02 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtProudspireManorPlaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtProudspireManorPlaque03 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse02Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse02Plaque01 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse02Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse02Plaque02 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse02Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse02Plaque03 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse02Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse02Plaque04 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse02Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse02Plaque05 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse02Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse02Plaque06 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse02Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse02Plaque07 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse02Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse02Plaque08 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse02Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse02Plaque09 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse01Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse01Plaque01 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse01Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse01Plaque02 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse01Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse01Plaque03 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse01Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse01Plaque04 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse01Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse01Plaque05 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse01Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse01Plaque06 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse01Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse01Plaque07 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse01Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse01Plaque08 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] Error: Element of property FishAtHouse01Plaques on script ccbgssse001_dlcdetectionscript attached to alias Player on quest ccBGSSSE001_DLCDetectionQuest (060008BF) cannot be bound because alias FishAtHouse01Plaque09 on quest ccBGSSSE001_FishPlaqueQuest (06000F4E) is not the right type
[04/30/2023 - 01:01:08AM] VM is freezing...
[04/30/2023 - 01:01:08AM] VM is frozen
[04/30/2023 - 01:01:08AM] Reverting game...
[04/30/2023 - 01:01:13AM] Loading game...
[04/30/2023 - 01:01:14AM] VM is thawing...
[04/30/2023 - 01:01:14AM] error: Native static function DetachMesh could find no matching static function on linked type NiOverride. Function will not be bound.
[04/30/2023 - 01:01:14AM] error: Native static function AttachMesh could find no matching static function on linked type NiOverride. Function will not be bound.
[04/30/2023 - 01:01:14AM] error: Native static function GetNodeTransformScaleMode does not match existing signature on linked type NiOverride. Function will not be bound.
[04/30/2023 - 01:01:14AM] error: Native static function GetCachedMorphNames could find no matching static function on linked type NiOverride. Function will not be bound.
[04/30/2023 - 01:01:15AM] Error: Cannot divide by zero
stack:
    [None].PNSMEF.UpdateSkinTexture() - "PNSMEF.psc" Line ?
    [None].PNSMEF.ResetSkinTexture() - "PNSMEF.psc" Line ?
    [None].PNSMEF.OnEffectFinish() - "PNSMEF.psc" Line ?
[04/30/2023 - 01:03:01AM] Error: Unable to call RegisterForNiNodeUpdate - no native object bound to the script object, or object is of incorrect type
stack:
    [None].PNSMEF.RegisterForNiNodeUpdate() - "<native>" Line ?
    [None].PNSMEF.OnEffectStart() - "PNSMEF.psc" Line ?
[04/30/2023 - 01:03:02AM] Error: Cannot divide by zero
stack:
    [None].PNSMEF.UpdateSkinTexture() - "PNSMEF.psc" Line ?
    [None].PNSMEF.ResetSkinTexture() - "PNSMEF.psc" Line ?
    [None].PNSMEF.OnEffectFinish() - "PNSMEF.psc" Line ?
[04/30/2023 - 01:05:02AM] Error: Unable to call RegisterForModEvent - no native object bound to the script object, or object is of incorrect type
stack:
    [None].SOS_ActorMagicEffect_Script.RegisterForModEvent() - "<native>" Line ?
    [None].SOS_ActorMagicEffect_Script.OnEffectStart() - "SOS_ActorMagicEffect_Script.psc" Line ?
[04/30/2023 - 01:05:02AM] Error: Unable to call Dispel - no native object bound to the script object, or object is of incorrect type
stack:
    [None].PNSMEF_fix.Dispel() - "<native>" Line ?
    [None].PNSMEF_fix.OnEffectStart() - "PNSMEF_fix.psc" Line ?
[04/30/2023 - 01:08:36AM] Error: Unable to call RegisterForNiNodeUpdate - no native object bound to the script object, or object is of incorrect type
stack:
    [None].PNSMEF.RegisterForNiNodeUpdate() - "<native>" Line ?
    [None].PNSMEF.OnEffectStart() - "PNSMEF.psc" Line ?
[04/30/2023 - 01:08:36AM] Error: Cannot divide by zero
stack:
    [None].PNSMEF.UpdateSkinTexture() - "PNSMEF.psc" Line ?
    [None].PNSMEF.ResetSkinTexture() - "PNSMEF.psc" Line ?
    [None].PNSMEF.OnEffectFinish() - "PNSMEF.psc" Line ?

 

EDIT: Nothing interesting in skee log, other than two missing string lookups. Maybe unrelated:

Spoiler

Loading...
Loaded Morph: CME_ChinWidth - Value: -0.210000
Loaded Morph: RANs_Age - Value: -0.110000
Loaded Morph: RANs_HeadShape - Value: 4.000000
Loaded Morph: CME_ChinUpDown - Value: -0.210000
Loaded Morph: CME_NoseSellionWidth - Value: -0.110000
Loaded Morph: SPG_TeethForwardBack - Value: -0.260000
Loaded Morph: RANs_ForeheadBackForward - Value: -0.010000
Loaded Morph: NSK_LipThickness - Value: -0.260000
Loaded Morph: NSK_NoseWidth - Value: 0.010000
Loaded Morph: CME_AroundNoseBackForward - Value: -0.010000
Loaded Morph: CME_LowerLipHeight - Value: -0.260000
Loaded Morph: CME_NoseSellionBackForward - Value: -0.260000
Loaded Morph: CME_NoseUpDown - Value: 0.060000
Loaded Morph: CME_UpperLipHeight - Value: 0.210000
Loaded Morph: ECE_NoseBridgeWidth - Value: -0.510000
Loaded Morph: ECE_NoseTipWidth - Value: 0.060000
Loaded Morph: CME_MouthUpDown - Value: 0.210000
Loaded Morph: ECE_ChinBackForward - Value: -0.010000
Loaded Morph: NSK_CheekShape - Value: -0.310000
Loaded Morph: CME_MouthHeight - Value: -0.510000
Loaded Morph: RANs_LipDuckly - Value: -0.510000
Loaded Morph: CME_ChinBackForward - Value: 0.010000
Loaded Morph: NSK_JawShape - Value: -0.510000
Loaded Morph: NSK_NoseBridge - Value: 0.010000
Loaded Morph: NSK_NoseSellionWidth - Value: 0.210000
Loaded Morph: RANs_Weight - Value: -0.110000
Loaded Morph: NSK_MouthSmile - Value: 1.010000
Loaded Morph: CME_EyesSize - Value: 0.060000
Loaded Morph: CME_EyesSlope - Value: 0.210000
Loaded Morph: CME_JawUpDown - Value: 0.510000
Loaded Morph: CME_MouthWidth - Value: -0.160000
Loaded Morph: CME_MouthBackForward - Value: -0.210000
Loaded Morph: EXPR_DialogueHappy - Value: 0.110000
Loaded Morph: CME_JawBackForward - Value: -0.010000
Loaded Morph: CME_UnderChinSlope - Value: 0.760000
Loaded Morph: CME_EyeballInOut - Value: -0.610000
Loaded Morph: CME_EyesInOut - Value: -0.110000
Loaded Morph: CME_BrowSlope - Value: 0.010000
Loaded Morph: NSK_BrowAngle - Value: -0.110000
Loaded Morph: CME_EyeballUpDown - Value: -0.110000
StringTable::ReadString - Error loading string from table
StringTable::ReadString - Error loading string from table
 

 

EDIT: Just took a look at your source. It doesn't even touch the PNS script in question. So that's another bug present in PNS itself.

Edited by libertyordeath
Link to comment

PNSMEF is bound to the spell that my fix spell removes. So most likely its angry because it was doing something when it got removed:

no native object bound to the script object, or object is of incorrect type

 

This error from PNSMEF_fix could be a race condition of some kind, I wouldn't care about this one unless it was getting spammed excessively - or instances of PNSMEF_fix was getting left behind in the save (ReSaver):

Unable to call Dispel

 

You need to keep an eye on things in ReSaver, at least in the early days. PNSMEF_fix instances should never be piling up, you may see a few if you're lucky, but never increasing amounts. PNSMEF instances should also be going down as you encounter NPCs that get scrubbed.

 

As for posting it elsewhere; my main concern is it leaving PNSMEF_fix instances in the save, because then we're just replacing one problem with another. If you've already played for a bit and seen NPCs that used to be broken, and ReSaver finds no instances of PNSMEF_fix - then I say you can spread the word. If you want you can mention me in the posts, so that I can keep an eye on feedback.

Link to comment

Thanks! Will do.

 

Just tested what happens if i just remove PNS (never saved that obviously. Closed SAE right after). Yeah, then every body normalmap goes foobar. Not just followers - everyone, including my own char. No cellchanges needed anymore either. Straight from gameload. I'm not sure if that technically counts as "bricking", but it's certainly not a state worth playing.

 

Next i'll visit every area i've been to with your fix. Problem is i have about 100 travelling NPC (adventurers and travellers - that kinda stuff), and i'm pretty sure they get recycled on death. I'll report what happens over time.

Link to comment

If I understand right, this problem affect post SE versions plus PNS users.

Deactivate PNS culprit by changing the spell effect distributed, like not an overlay but a e.g. +10 health

(turn bad virus into a good one)

would fix the spread.

To understand the problem right, would recycleactor fix a npc, if it gots infected by the "good" PNS infection ?

 

Edit

Same for RM 

If it has not it's own cleanser, one has to feed it with an external cleanser.

If one knows the amount of RM slots and the mechanics how to fill the slots,

fill all slots with a NulRef.

 

Edited by Tlam99
Link to comment
4 hours ago, Tlam99 said:

Deactivate PNS culprit by changing the spell effect distributed, like not an overlay but a e.g. +10 health

 

While a good idea, I do not really trust the game engine to remove the script from the save with this. Since I can't test this myself either, I just had to go the safest route I could think of, which was just to replicate the structure and make it work in my favor. In theory if SPID distributes the spell quick enough the affected user won't see the problem anymore at all with my fix. After a while they can remove it (and potentially PNS) from their save entirely using ReSaver.

 

4 hours ago, Tlam99 said:

fill all slots with a NulRef.

 

Issue is the function that removes the override expects an actor reference.

Link to comment
1 hour ago, traison said:

remove the script

If it's distributed to tons of actors, it's difficult. One needs to delete the script plus all references.

Would be worth a try, as only the save will be affected, resp. the duplicate of the save.

Needs to be investigated in an infected save. The crux is, not the base id but the ref id will have the culprit.

And the Ref ID actor rebuilds only on level up.

That's I asked for recycleactor if this removes the attached script.

The  new ref id (ingameactor) will be rebuild like a normal respawn or first encounter.

 

I write this, because I had a similar case. Made a bad script and did not proceed with a save before.

30 levels later I had an encounter with this actor (troll, no leveled, that's the reason).

Calmed him and recycleactor, bad script was gone.

Even thought about making a recycleactor spell, but that's not needed for single actors.

Edited by Tlam99
Link to comment

Day 1 (2 hours playtime):

 

To get a baseline, i loaded the original save from before the fix, hired all 4 of my homeguests, fast travelled to whiterun and went into every building. The reason WR makes a good baseline is, that i spent half of my prior playtime there. Also with it being the center of skyrim, it almost certainly is a hub for travelling NPCs.

 

Ingame behavior:

- No glitches, no nothing. The game worked as if PNS didn't exist.

 

Papyrus:

- Over 40 PNSMEF.psc div-by-zero

- 9 PNSMEF_fix type-errors

- 4x unable to call dispell

 

Resaver:

- PNSMEF all over the place

- No active PNSMEF_fix instances

- No hung stackframes

 

EDIT: Linked Cleansave Autoreloader in the first post. Fixes skyrim leaking across saves, by preventing users from soft-reloading, and turning every soft reload into a hard reload. Translation: It automatically restarts skyrim when you try to reload.

 

Edited by libertyordeath
Link to comment
2 hours ago, Tlam99 said:

If the origin spell still exists, not only MGEF, use removespell instead.

 

Yeah that's something I was considering, the wiki is useless at distinguishing between Dispell and RemoveSpell. I've had issues with this in the past. It does however still seem to do its job, regardless of Dispell failing: @libertyordeath reported no lingering instances of PNSMEF_fix.

 

If there turns out to be issues with Dispel in the future. Here's one that uses RemoveSpell, is backwards compatible with the previous fix and calls RemoveSpell in OnUpdate just to be sure. Optional update. Would not recommend unless the previous fix is leaving instances of itself behind.

PNS_fix_3_optional.7z

Link to comment

I've decided to continue with PNS-Fix v3 instead of v2, against Traison's recommendation. There's two reasons for this:

 

1. The safety of this playthrough is no longer a concern. It's just there to get useful data. I've already concluded that i need a stable and unstable branch to play skyrim without ruining my saves. No mod is save to install - regardless of how popular - because every setup is different, and some cases of save corruption even come down to pure luck (race conditions). I'm looking at you, SLAC! So i'll be using this playthrough as the unstable branch - the testbed. I have already started a new playtrough in a seperate skyrim-install, with seperate MO2 profiles and Cleansave Autoreloader to kill soft reloads. That will be the stable branch. So technically there should be no way for spillover between the two branches. And if the unstable branch gets bricked, i'll just copy over the stable and use that as the new unstable.

 

2. I've already given V2 a testdrive and it seemed to work fine. Today may be the last chance for a stresstest, because i'll be visiting every other town/city i've been to. After that it's gonna be hunting leftovers, especially travellers. So i'll give the benefit to V3 using the proper method for removal, to see if it works just as well or better.

 

If Traison thinks there's good reason against this, say something and i'll abort this session. I'll start playing in about an hour.

Edited by libertyordeath
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use