Update Post : Succubus Heart 5.3.6 DEV [Skyrim Mod]

Got another update out, this time with some ‘real’ fixes for OStim! I think… maybe.. hopefully? Turns out I was right in my post last update about Ostim’s internal systems not working correctly, so I was able to get more information, figure out some stuff I was doing incorrectly (I was given false information before when I got help with OStim which caused some issues) and made some work arounds for the issues caused directly by OStim. In addition to your usual set of bug fixes and QOL improvements I also transitioned all the consumable items in Succubus Heart into being either food (Sexual Fluids) or into untagged potions (Soul of items, souls, rare drops). This means Sexual Fluids ‘should’ now be fully compatible with survival/hunger mods! I tested with SunHelm which pops up a menu asking what the ‘food’ should be considered (I chose soup so it fills both hunger and thirst a small amount).
Some users of OStim have still reported animation trigger issues, however I can’t confirm whether it’s Succubus Heart, their set-ups, or OStim at this time, but hopefully I can get more information at some point to get OStim support into a proper release version at some point! OStim also will have a few features for NPC exclusive acts given the previous issues I ran into which would require some sort of extensive work around that I haven’t decided whether is worth the effort and script weight or not...
Full Changelog
Succubus Heart 5.3.6 DEV
- Added : "Only Use Framework Pref." to Settings MCM, this setting makes Succubus Heart only apply drain and effects from the prefered framework set.
- - - - - OStim has been having issues, so this allows people to have both SexLab and OStim enabled without having to deal with OStim's instabilities by setting SexLab as the prefered framework while ignoring OStim.

- Changed/Added : New Sperm/Breast Milk obtained will now be a new food variant which has the same effects as before but has compatibility with survival/hunger mods as well as cooking recipe support (The previous ingredient versions will still be in your inventory and function just as they did before)
- Changed/Added : New Souls of ___ and rare drops obtained will now show up as a potion (Just like with sexual fluids, the ingredient versions are still there and function just like before)
- Changed/Added : New Soul Pet items obtained will now show up as a potion (Just like the other 2 changes like this, the ingredient versions are still there and function just like before)
- Changed : Increased the time 'SexLab AI Fix' waits to apply to hopefully make it more consistent
- =Changed : Some effects like "Prevent Deaths during Sex" no longer function for NPC only animations while using OStim (This is caused by a workaround for an oversight in OStim and directly related to a fix, these functions were broken before anyways)
- =Changed : Reverted increase to Sexual Fluids effect on Lust when on low arousal (was too aggressive of an increase)
 - Changed : (Backend) Pet Soul items now register via Keyword similar to other items

- =Fixed : Lust Levels hover text in Status MCM now correctly states Sexual Fluids at High Lust Levels decreases Lust
- Fixed : "Succubus Heart : Exhausted" 'ability' having a null effect (These are still just cosmetic and may not show up in your game at all)
- =Fixed : DOM not correctly responding to player downed state if OStim was used but SexLab was not installed
- =Fixed : OStim should now properly apply end-of-sex effects and no longer get stuck in a player animating state
- =Fixed : OStim should now properly apply orgasm effects and grant items
- Fixed : Integrated the VR item crash fix into the main dev path (this fix applies empty effects to the ingredient variants, this causes some weird issues in the non-VR version however since the ingredient versions are being depreciated this shouldn't be an issue moving forward)

Succubus Heart 5.3.5 DEV
=Fixed : NPC characters not having all end of animation effects applying properly (caused an assortment of issues)
Fixed : When using DOM, the player should no longer get stuck in the bleedout animations if they re-enter bleedout once an animation starts to register

Detailing the OStim Issue

Since the last update I was able to get some additional help over on the OStim Standalone Discord that helped me solve some of the issues we’ve been having with OStim support (thank you to those that helped me out! ^-^). Firstly I found out I was given some false information on what events I should use and when they trigger, I was lead to believe the mod event ostim_thread_orgasm would trigger when any actor orgasmed, however it was actually ostim_actor_orgasm! I was using a different event for the player, so that was triggering orgasms events properly but the one used for NPC was just straight up invalid so it was never called (something I had found out previously, though the fact the player event triggered had me a bit confused thinking it was just inconsistent).

The real confusing part comes from the end animation event. For Succubus Heart’s systems to work properly it needs both a start and end point, for SexLab I just use the begin anim and end anim events to toggle between states and manage when certain effects go off, but when transitioning this system to OStim I didn’t realize the 2 frameworks handle these sorts of cases in fundamentally different ways. SexLab’s tracking requires you to register/apply what actors you wish to track then sends an event call for every actor being tracked, Succubus Heart already has to track all NPCs to apply various effects such as combat seduction so we just use that method to track all relevant actors. OStim on the other hands doesn’t track actors, instead it only manages individual animation ‘threads’ without any tracking of actors. This means that while SexLab always sends the required event, once for every actor in an animation meaning I can just execute the required code specifically to each actor, OStim only reports the thread of the animation that sent the event, this means I have to manually pull the actors and then loop over them to apply the correct code. Because my code base is relatively modular this isn’t a ‘difficult’ task, just slightly annoying, all I had to do for this to work in theory was have events from each framework fire off their own event function, then get the relevant actors before sending it to the proper function, wish SexLab just being “hey, this actor has done the thing” and working just like before, but with OStim we have to pull data from the animation thread.

Notice how I said in theory? Yeah, SexLab works as expected with no issues and functions exactly as it did before (actually slightly faster since we don’t have looping code to account for OStim built into the general function anymore), but OStim has a major design flaw that doesn’t affect SexLab. Since OStim doesn’t track actors and only the animation thread, this means when an animation ends and the data clears itself, we can’t pull any data besides the ID for the animation that just ended! SexLab stores this data until it needs to be altered or overwritten, from what I understand it holds this information until the internal cache is filled or a set time has passed, this allows us to reference the animation and pull relevant data even if the animation has ended. OStim on the other hand appears to clear all of its data as part of the end procedure, meaning once the animation has ended and papyrus sends the end event to trigger our code in Succubus Heart, the relevant data has already been cleared, meaning in this example, we can’t get the actors from the animation and run the required code.

This is a pretty big issue and a major oversight by OStim, I do have a work-around however, manual tracking! The issue is I’m not sure it’s worth the performance cost and script weight to implement this for NPC only interactions. For player involved animations I already track the NPCs in the animation for the drain functions so my solution there is if the animation runs through OStim I simply send those NPC references to the proper end animation function (which isn’t required by SexLab) but for NPC animations I would need to create my own tracking system. OStim does have a way to quickly check if an animation includes the player however, which is quite nice! The player animation in OStim always returns with a threadID of 0, so we can use that to quickly check if the player is involved to set up whether we need to process the starting effects or not (skipping these effects/triggers for NPC only animations). I think currently I just won’t have NPC/NPC interactions being tracked, the vast majority of effects still apply such as orgasm so I don’t think most people will really mind all that much, but if it does become an issue we can create a tracking system for NPC animations using the ThreadID as identifiers to hopefully make up for that. (As a note, SexLab will obviously remain fully functional.)