Jump to content

OSex+ The Greatest Virtual Sex Ever


Recommended Posts

 

It sounds like sfll's solution involves adjusting scale on some parts that require adjusting multiple bones. That is sometimes necessary to avoid distortion (see racemenu source for reference). But, I had thought that the main character scale bone was one that just needed one bone changed. Anyway, have to look to understand...

 

 

Looks like he is just calling the distance between two nodes. That could work. Though, I would prefer to first rule out simply using getscale since it's native.

 

 

Exactly. Except I can't do the actionscript.

 

From a practical standpoint, more would need to be done because of the INI role-swap-on-start setting and the Arrange feature in Flash, but for testing, it doesn't matter if those are temporarily broken.

 

 

Yeah. I'm assuming that the actionscript is sound. If it is not, it shouldn't be difficult to troubleshoot that part anyway. The first thing to test is only if the data the actionscript is receiving is consistently what we expect.

 

I'm just going to start looking at it one simple step at a time and ask questions along the way. This probably seems redundant and ground already covered by you guys. But, I need to approach it this way to better understand where it is broken:

 

Step 1: I made a simple test using getScale on targeted actors. It does not always return 1. Different races/gender combos have variations. I've seen 1.03, 1.0, 1.005, etc. Is that expected? If that number is sent in to 0Sex, does it work?

 

 

 

CEO is not getting crashes, also people from nexus are not complaining which is kinda strange.

(i dont have LL mods installed beside SOS and its addons + 0sex but now using nexus version)

 

Im getting crashes on load a lot. I dont have ENB. I use Reshade. First i was suspecting that there is incompatibility with new mod in my setup Skyrim reloaded (imitates enb) and 0sex coz i was getting random crashes with both of them installed, but then i was getting same crashes with only 0sex installed. More about testing results you can find here.

 

Also i suspected it could be about machine power since my machine isnt really powerfull for todays standards but guys with machines that are beasts are also getting same random crashes.

 

Note: my mod setup is super stable without 0sex installed.

 

 

How many others are experiencing these symptoms? Can you get some of them to try removing 0Sex and confirming that it becomes stable also?

Link to comment

How many others are experiencing these symptoms? Can you get some of them to try removing 0Sex and confirming that it becomes stable also?

 

 

Besides me there is migal and his modding partner also Scorpion_SK seems to be having same issues. There could be others that are simply silent and waiting for a fix.

 

If you think there is mod conflict you can see here what mods i have in common with Scorpion_SK

or here mods that i have in common with CEO.

 

 

Link to comment

 

How many others are experiencing these symptoms? Can you get some of them to try removing 0Sex and confirming that it becomes stable also?

 

 

Besides me there is migal and his modding partner also Scorpion_SK seems to be having same issues. There could be others that are simply silent and waiting for a fix.

 

If you think there is mod conflict you can see here what mods i have in common with Scorpion_SK

or here mods that i have in common with CEO.

 

 

Have you tried running 0Sex with only the bare minimum mods installed?

Link to comment

I'll see if I get the whole thing on Git right now. (I suck at computers so if I setup Git wrong let me know please so I can fix it.) I'm out today with work but I'll go through all this tomorrow and see if we can get a new draft done with correct scaling.

 

The only thing is testing the actionscript in Flash takes a lot of secret key presses to mimic the various function calls it's expecting to get from Skyrim along the way at the moment.

 

Link to comment

I'll see if I get the whole thing on Git right now. (I suck at computers so if I setup Git wrong let me know please so I can fix it.) I'm out today with work but I'll go through all this tomorrow and see if we can get a new draft done with correct scaling.

 

The only thing is testing the actionscript in Flash takes a lot of secret key presses to mimic the various function calls it's expecting to get from Skyrim along the way at the moment.

 

Cool. I haven't actually uploaded to Git either. I'm old school and have only used SVN. As long as someone can download the source in a structure that allows it to compile, should be good.

 

Regarding testing, I never tested things in the Flash debugger anyway. I just compile and test in game using ad hoc trace windows, etc. if needed.

 

My problem testing is that I'm still too lazy to read up on how to do everything in the mod. I've been waiting for the UI to get to a point where I can figure out how to use it without additional reading. :)

 

I fired it up now and was able to do some things. It is very stable for me. I just couldn't figure out how to navigate to animations beyond a few relatively tame holding-like situations.

Link to comment

Tried with bare minimum:

 

 

image.jpg

 

 

 

and getting crashes as well.

out of 10 tries at least 4 were instant ctd on load (probably FootIk error but without Crash fixes mod i cant tell) when loading cleaned save. If i first coc somewhere then load that same save i dont get ctd.

 

Just to make things more clear: I tried to load that same save with same bare minimum of mods but without 0sex and it was successfull load 10/10.

 

PS this was extremely boring test to do but ... for the science! :D

 

Someone on nexus just reported getting crash on load of save that was created post install of 0sex.

 

Link to comment

Step 1: I made a simple test using getScale on targeted actors. It does not always return 1. Different races/gender combos have variations. I've seen 1.03, 1.0, 1.005, etc. Is that expected? If that number is sent in to 0Sex, does it work?

I'm going to call this confirmation #1.  GetScale not working is a myth.  I tested it against a calculator after checking actor height, race and sex for each tested NPC in the CK.  The number it produces is accurate and one has to assume that if 0Sex or actionscript require a number, it's going to work.  Although currently, everything is based on netimmerse bone measurement instead.  So, I don't know that a GetScale result fed straight into the pipeline will currently work.

 

Confirmation #2 (SetScale also works) may not happen unless you either go back and read the posts I've written to explain my code, or read what I posted on the CK wiki this morning.  I know a lot of people don't read what I write because I tend to be a wall-of-text tour de force.  But in this case, it really is necessary.

 

So glad you're involved.

Link to comment

Tried with bare minimum:

 

 

image.jpg

 

 

 

and getting crashes as well.

out of 10 tries at least 4 were instant ctd on load (probably FootIk error but without Crash fixes mod i cant tell) when loading cleaned save. If i first coc somewhere then load that same save i dont get ctd.

 

Just to make things more clear: I tried to load that same save with same bare minimum of mods but without 0sex and it was successfull load 10/10.

 

PS this was extremely boring test to do but ... for the science! :D

 

Someone on nexus just reported getting crash on load of save that was created post install of 0sex.

 

I don't use FNIS Creature Pack. Can you try running it without that?

 

And is this still with that ENB-like mod installed?

 

 

Step 1: I made a simple test using getScale on targeted actors. It does not always return 1. Different races/gender combos have variations. I've seen 1.03, 1.0, 1.005, etc. Is that expected? If that number is sent in to 0Sex, does it work?

I'm going to call this confirmation #1.  GetScale not working is a myth.  I tested it against a calculator after checking actor height, race and sex for each tested NPC in the CK.  The number it produces is accurate and one has to assume that if 0Sex or actionscript require a number, it's going to work.  Although currently, everything is based on netimmerse bone measurement instead.  So, I don't know that a GetScale result fed straight into the pipeline will currently work.

 

Confirmation #2 (SetScale also works) may not happen unless you either go back and read the posts I've written to explain my code, or read what I posted on the CK wiki this morning.  I know a lot of people don't read what I write because I tend to be a wall-of-text tour de force.  But in this case, it really is necessary.

 

So glad you're involved.

 

 

Thank you.

 

Step 2: Can you please point me to where 0Sex gathers the scale and sends it into Actionscript in the Papyrus scripts? I have the latest version from Nexus installed.

Link to comment

 

 

 

Sorry for request in step 2. I got lucky and found the place where scale is called quickly.

 

There is a discrepancy there.

 

GetScale returns the varying numbers.

 

The scale of the root node always returns 1.0.

 

That is because the root node number is relative and the getscale number is more like a property.

 

The next question is, what number is needed to accomplish the goals of 0Sex? I am assuming that always get "1.0" is kind of useless since you could just assume it is 1 and not actually call it ever. In other words, what is this number actually used for?

Link to comment

I don't use FNIS Creature Pack. Can you try running it without that?

 

And is this still with that ENB-like mod installed?

 

I could try without creature pack but i doubt it will make any difference. (there were no creatures in this cell im trying to load (riverwood inn).

Only ENB like mod that i have installed is Reshade (adds vibrance and sharpening)  so you cant see that one on the list but no i didnt have Skyrim Reloaded either during this tests.

I also highly doubt it is issue with Reshade. Reshade was not created specificaly for skyrim but can be plugged in to any game. Also i doubt other guys have Reshade installed. Most ppl just use ENBs.

 

But for the science i will remove reshade (only one dll to remove) and creature pack and try to load that same save again with only bare mods.

-----------------------------------------------------------------------------------------------------------------------------

1st try successfull load

2nd try ctd on load

3rd try T pose and ctd on load

4th try ctd on load

5th try ctd on load

Link to comment

 

I don't use FNIS Creature Pack. Can you try running it without that?

 

And is this still with that ENB-like mod installed?

 

I could try without creature pack but i doubt it will make any difference. (there were no creatures in this cell im trying to load (riverwood inn).

Only ENB like mod that i have installed is Reshade (adds vibrance and sharpening)  so you cant see that one on the list but no i didnt have Skyrim Reloaded either during this tests.

I also highly doubt it is issue with Reshade. Reshade was not created specificaly for skyrim but can be plugged in to any game. Also i doubt other guys have Reshade installed. Most ppl just use ENBs.

 

But for the science i will remove reshade (only one dll to remove) and creature pack and try to load that same save again with only bare mods.

 

 

We're running out of other options to be able to reproduce the issue.

 

I think that if we're dealing with crashes, a dll and/or large amounts of additional animations in the creature pack are on the table as possibilities.

Link to comment

Did I do this right?

 

ActionScript + Flash + Papyrus Scripts for the project. 

 

https://github.com/CE0/OSA-

 

Disclaimer: I learned actionscript doing this project and have no idea really what I'm doing.

 

Brief Summary of it:

 

OMajor is the main script it has the start function hash tagged out which makes debugging not work unless you unhash it the game is intended to send that event. Do note that a majority of OMajor is setting up simulation keys that have no effect in game for debugging, only the top opening function is really relevant. Sim is the .as script that holds debug simulation stuff.

 

You can use o.debugOutput("TEXT HERE") to pin white text on the screen at any point with whatever values you want for testing in game like a trace or also since the trace log is muddy to clearly see what you want.

 

 

There's 3 main elements

Diaso (Stage)

Actro (Actors)

Lib (Library)

 

Diaso (Stage Organizer) makes and indexes Diasa(s) (Actual Stage Instances) 

Diasa(s) load Scena(s) (Scene Instances) Like cassettes for the current scene that should be playing

 

Actro (Actor Organizer) makes and indexes Actra(s) (Actual Actor Instances) 

Actra is an object that contains a billion supporting scripts for managing the actors data

 

Lib (Lib is where xml is pinned to once it's loaded, for scenes modules profiledata) 

Each xml data type gets a "Cache" that holds that type of information and indexes it

Actra has it's own data storage for Papyrus information ActorLib and it's contained in the Actra Object

For the most part Diasa and Actra point to xmlData directly as it is pinned to the lib object

In some rare cases like the codex lib (installed persona's and sounds) it takes the xml and assembles it into new organizations

 

 

COM & GLYPH: These are primarily how Skyrim communicates with the script. This is meant to be an interchangeable script so you can replace the game communication to a different game besides Skyrim adjusting the code to adapt.

Link to comment

The next question is, what number is needed to accomplish the goals of 0Sex? I am assuming that always get "1.0" is kind of useless since you could just assume it is 1 and not actually call it ever. In other words, what is this number actually used for?

CEO wants the Dom to be 1.03 and the sub to be 1.0. I assumed he was talking about the actor's scale and not a bone measurement.

 

If I understand what CEO's code was doing correctly, the player always starts as dom. However, I believe CEO recently implemented a way to check to see whether the target actor or player is taller and make the taller actor be the dom instead of the player. An error in that change might explain the scaling issue, but in all honesty, I don't think this should be getting done with actionscript or netimmerse anyway. It's cleaner and safer to keep it native if possible.

 

CEO's current code (unless he changed it for Nexus release) somehow passes a var called oheight to actionscript and I believe actionscript then does calculations based on that number, which are then demonstrated in 0SA display windows known as Current Scale and Natural Scale. That's why my code includes separate vars for both current and natural scale. These need to be passed to actionscript if actionscript is no longer performing the calculation.

 

Hit <num-Enter> to see the right-side menu in 0S. From there look at Info. I believe you then are looking for Character, but my memory could be wrong. It might be Actor. That's where you'll find current scale and natural scale. You can press <num-9> to swap actors for that display.

Link to comment

 

The next question is, what number is needed to accomplish the goals of 0Sex? I am assuming that always get "1.0" is kind of useless since you could just assume it is 1 and not actually call it ever. In other words, what is this number actually used for?

CEO wants the Dom to be 1.03 and the sub to be 1.0. I assumed he was talking about the actor's scale and not a bone measurement.

 

If I understand what CEO's code was doing correctly, the player always starts as dom. However, I believe CEO recently implemented a way to check to see whether the target actor or player is taller and make the taller actor be the dom instead of the player. An error in that change might explain the scaling issue, but in all honesty, I don't think this should be getting done with actionscript or netimmerse anyway. It's cleaner and safer to keep it native if possible.

 

CEO's current code (unless he changed it for Nexus release) somehow passes a var called oheight to actionscript and I believe actionscript then does calculations based on that number, which are then demonstrated in 0SA display windows known as Current Scale and Natural Scale. That's why my code includes separate vars for both current and natural scale. These need to be passed to actionscript if actionscript is no longer performing the calculation.

 

Hit <num-Enter> to see the right-side menu in 0S. From there look at Info. I believe you then are looking for Character, but my memory could be wrong. It might be Actor. That's where you'll find current scale and natural scale. You can press <num-9> to swap actors for that display.

 

 

Hi Migal,

Just to check in here, the Dom and sub scale is still flexible each module can define the sizes they want the actor to be but that's the scale OSex uses I don't think this would matter since the formula would address whatever the scale requirements are.

 

Here's a break down of the arranging script and the scaling script:

 

 

 

The arranging script that decides who the dom or sub is based on height or gender or whatever criteria is assigned to, it doesn't really have an impact on deciding the scale of the actors. It sends a mod event to Skyrim with a single number, that number represents which actor is the starting location of the scene but nothing more. It's done in these events in Actro:

 

event onAlignToActra(string eventName, string actorLocHub, float numArg, Form sender)
align = true
int stageIDint = StageID as int
align = alignCycleLock(0, OSO.GlobalPosition[stageID as int], getStageLocArray(actra[actorLocHub as int]))
endEvent
 
bool function alignCycleLock(int cycler, objectReference vehicle, float[] locationData)
if align == true
    if cycler <= 2
 
    int count = 0
    while count < totalActra
    enforceAngle(actra[count], locationData)
    enforcePosition(actra[count], vehicle, locationData)
    count+=1
    endWhile
    
    cycler += 1
    utility.wait(0.1)
    alignCycleLock(Cycler, vehicle, locationData)
    return true
    else
    return false
    endIf
endIf
endFunction

 

 

;It gets the index for the actor in Actro's actra[] array and gets that actors position moves the other actor to that position, sets their angle then sets their vehiicle. Cycler spams it a few times since once wasn't enough to get Sven in Riverwood in place.

 

 

The scaling is done at some point in the script just by sending this event in Actraga:

 

Event OnSnapSc(string eventName, string zType, float zAmount, Form sender)
NetImmerse.SetNodeScale(Actra, zType, zAmount, false)
EndEvent
 
;Once it knows which actor is actor0 and actor1 it sends each of them a float that it wants them to adjust the scale of their root bone node by. It gets this information by running some math on values in the module.xml here:
 
<modify cmd="oheight" actor="0" oheight="123.834412"/>
<modify cmd="oheight" actor="1" oheight="120.227661" />
 
The formula for making the oheight is in Core/Actra/ActraBody/ActorScale.as
 
public function calcOHeight(GoalOH:Number, NativeOH:Number){return ((GoalOH - NativeOH) / NativeOH) + 1.0}
 
and the function for sending the oheight is also there as:
 
public function snapOHeight(oheightValue){
modifiedOHeight = oheightValue
// Records the modified height 
body.snapScale(calcOHeight(oheightValue, oheight))
// Sends the event to scale the actors
actra.body.calculateWeight("current")
// Makes the RP calculations for US or metric weight.
}
 
 
The sorting scripts and modify at initiation script (to set their scale). Are in:
 
core/Stage/ModInit.as
(SortActors is a bulk of this script but I wouldn't worry about it, it's a beast function to putting as many mismatched females and mismatched males into desired roles as it possibly can based on the module.xmls prefered gender in role settings.) More so to suit 2+ actor scenes for the future.
 
core/Stage/ModModify.as
 
and are triggered from Diasa.as (in various places)
 
-----------------------------------------------------------
 
Summary of the process:
- It receives the actors then decides based on config setting which of the actor is 0 and which is 1
- It looks at the module/config settings to see which actor should be the start location of the scene and sends the above event to root the actors to that location
- It looks at the module.xml to see what scale the actors should be then sends to each one's individual actraga the SnapSc event with a float of the scale the rootNode Bone should be.
 
 
The sort function is only generating an array numbering the actors by role. For example Dom=0 sub=1
 
If let's say the second actor was expected to be the dom it would send information like this to papyrus as a comma separated list.
 
actor[1] = 0
actor[0] = 1
 
1,0
 

The scaling is done at the conclusion of figuring out exactly which actor is what role. It sends a single event per actor holding it's desired new root bone scale. That scale is generated by some math on the native oheight and desired oheight

 

 

 

Link to comment

... a lot, but Migal read all of it without claiming instant understanding.

Two questions:

 

1. Is the actual calculation that deduces the scaling for animation done in actionscript. or in papyrus? You posted some actionsctript a few days ago, but I wasn't certain that was the actual scaling calculation, or just something used for character display.

 

2. Where does your animation scene end? With most spells, there is an OnEffectFinish event, which gets called when the spell is dispelled. I figured this was getting called when someone pressed <num .> until I realized the event doesn't exist in Actraga. For a papyrus scaling solution to work, the SetScale(1.0) scale reversion needs to take place right after the scene is stopped, so we need to know where that happens.

 

As for what you've done with the Arrange and the other stuff, it would mean basing my code on vars instead of assumed roles and 1.03/1.0, but as you said, the formula would still work.

Link to comment

 

... a lot, but Migal read all of it without claiming instant understanding.

Two questions:

 

1. Is the actual calculation that deduces the scaling for animation done in actionscript. or in papyrus? You posted some actionsctript a few days ago, but I wasn't certain that was the actual scaling calculation, or just something used for character display.

 

2. Where does your animation scene end? With most spells, there is an OnEffectFinish event, which gets called when the spell is dispelled. I figured this was getting called when someone pressed <num .> until I realized the event doesn't exist in Actraga. For a papyrus scaling solution to work, the SetScale(1.0) scale reversion needs to take place right after the scene is stopped, so we need to know where that happens.

 

As for what you've done with the Arrange and the other stuff, it would mean basing my code on vars instead of assumed roles and 1.03/1.0, but as you said, the formula would still work.

 

 

For 1.

 

 

 

-In Papyrus: The first step is the Oheight measurement is the animation event in actraga, measuring root to head. This is sent to the UI and stored. 

 

-In ActionSript Now:  When a module starts in the module.xml it can contain "modify" commands to adjust things about the actor like their genital scale or height.

-OSex has a modify command for height so when the actionscript gets to that point it sees the modify command and does this:

 

Looks here at the modify command in the module.xml to get the desired oheight:

<modify cmd="oheight" actor="0" oheight="123.834412"/>
<modify cmd="oheight" actor="1" oheight="120.227661" />
 
Runs it through this math:
public function calcOHeight(GoalOH:Number, NativeOH:Number){return ((GoalOH - NativeOH) / NativeOH) + 1.0}
 
(GoalOH is what is listed in the modify command, native oheight is the value papyrus sent up for their original oheight)
 
It plugs the outcome of that formula into this:
 
public function snapOHeight(oheightValue){
modifiedOHeight = oheightValue
body.snapScale(calcOHeight(oheightValue, oheight))
actra.body.calculateWeight("current")
}
 
Body.snapscale() sends it to this:
 
public function snapScale(scaleValue){
current = scaleValue
modified = true
skse.SendModEvent("0SAA"+actra.id+"_SnapSc", String(id), Number(scaleValue))
}
 
Which sends the command to papyrus. The actor's Actraga Papyrus receives it and then sets the scale:
 
Event OnSnapSc(string eventName, string zType, float zAmount, Form sender)
NetImmerse.SetNodeScale(Actra, zType, zAmount, false)
EndEvent

2

 

 

When the UI Actionscript decides the "stage" is ended it sends two commands. These varies and depends on settings for example if ESG is enabled and the actors have removed clothes it takes each one and puts them into a new redressing stage, but it gives them each a separate stage since redressing is a scene meant to hold only 1 actor. A stage basically encompasses all module initiation and configuration settings that it applies to it. There's a number of quirky reasons in doing this, a main one for example is being able to decide if the player is in the stage still to know if it still should display the UI nav panel or not.

 

OSex (2 Actors One stage)

If both stripped it forks off into two separate stages.>

Actor1's Redressing Stage

Actor2's Redressing Stage

 

Stage is insync with Actro Papyrus. Each stage requires one Actro

 

So depending on things it's ending Actro's and ending Actragas at different times.

 

When the actro ends it just shuts down since an Actor could be still in scene but being moved to a new stage. (Stage isn't a scene it's an entire module basically of scenes but a new one has to be made when you switch between them which going from OSex > Redressing does involve.)

 

This is the event Actionscript will send when it decides a Stage has ended:

skse.SendModEvent("0SAO"+id+"_OEnd")
 
This is the event Actionscript will send when it thinks an actor is done:

skse.SendModEvent("0SAA"+actra.id+"_ActraEnd")

 

You can tell by the prefix of the mod event where the event is heading OSAO is going to actro, OSAA is going to Actraga.

 

This will close out the papyrus script (and unlock the actor, turn their AI on etc.) but before it does that it cleans the actor up in terms of scales in Actionscript

 

with this Actionscript function in core/actra/actra.as

 

function clean(){
formBound = false
body.scale.restore()
body.scale.modeOCock = false
}
 
Basically sets all scales that were flagged as being modified back to what the actor's natural value was. Then it sends the end event. You'll notice in the snapScale() function I posted above that it sets modified = true on anything it adjusts so this is how it knows which to revert. Scales are handled by a shared ActorBodyScalePart class but OCock and OHeight have special treatment since they require some additional flags, the rest of the nodes follow just one function.

 

 

 

Link to comment

Are there people that never see the crash? For instance, have you ever seen it happen?

 

The only time I've seen frequent random startup crash like this, it ended up being related to ENB.

 

I'm doubtful that the UI activity is the cause. This one is tough to even have a lead because it's probably related to users computer (how powerful their machine is) + some other mod/ENB.

 

 

I do not experience any CTD on load, I'll post my load order, specs, and other relevant information below.

 

If anyone wants me to try changing something to test let me know.  If someone has a small mod setup that they know crashes including ENB, SKSE, INI tweaks, etc. and they want me to recreate it for testing I will try to accommodate.

 

Also, has anyone tried SKSE minidump / crash logging?

 

 

 

Load Order (marks next to ones I remember cleaning or modify, 90% accurate):

 

Skyrim.esm

Update.esm (cleaned)

Dawnguard.esm (cleaned)

[JmV]LTTF.esm (cleaned)

HearthFires.esm (cleaned)

Dragonborn.esm (cleaned)

RaceCompatibility.esm

Unofficial Skyrim Legendary Edition Patch.esp

Skyrim Project Optimization - Full Version.esm (cleaned)

EFFCore.esm

Lanterns Of Skyrim - All In One - Main.esm

AmethystHollowsMaster.esm (cleaned)

ApachiiHair.esm

KS Hairdo's.esm

Schlongs of Skyrim - Core.esm

SexLab.esm

ZaZAnimationPack.esm

OSA.esm

Cutting Room Floor.esp

Guard Dialogue Overhaul.esp

BetterQuestObjectives.esp

BetterQuestObjectives-CRFPatch.esp

Weapons & Armor Fixes_Remade.esp

Weapons & Armor_TrueOrcish&DaedricWeapons.esp

Weapons & Armor_TrueWeaponsLvlLists.esp

EnhancedLightsandFX.esp (cleaned)

ELFX - Exteriors.esp (cleaned)

Clothing & Clutter Fixes.esp

imp_helm_legend.esp

Hothtrooper44_ArmorCompilation.esp

Immersive Weapons.esp

WeaponsArmorFixes_ImmersiveWeapons_Patch.esp (cleaned)

Radiant and Unique Potions Poisons and Booze.esp (cleaned)

ADS.esp (cleaned)

Animated Weapon Enchants.esp

Bring Out Your Dead - Legendary Edition.esp

aMidianBorn_ContentAddon.esp

Complete Crafting Overhaul_Remade.esp

Complete Crafting_TrueWeaponsLvlLists.esp

Book Covers Skyrim.esp

hearthfireextended.esp

DeadlySpellImpacts.esp (cleaned)

Elemental Staves.esp (cleaned)

ExplosiveBoltsVisualized.esp (cleaned)

TheChoiceIsYours.esp

InvisEyeFixes.esp (cleaned, modified)

InvisEyeFixesEFFPatch.esp (cleaned, modified)

The Paarthurnax Dilemma.esp

RealisticWaterTwo.esp (cleaned)

RealisticWaterTwo - Legendary.esp (cleaned)

AOS.esp (cleaned)

IHSS.esp (cleaned)

Improved Combat Sounds v2.2.esp (cleaned)

BlockSparkles.esp (cleaned)

ELE_Legendary_Lite.esp (cleaned)

NonEssentialChildren.esp (cleaned)

NoAnimalsReportCrimes-DG+DB.esp

GQJ_DG_vampireamuletfix.esp

Soul Gems Differ - NW.esp (cleaned)

DawnguardRuneWeaponsFXSReplacer.esp (cleaned)

SkyrimCoinReplacerRedux.esp (cleaned)

STEP Extended Patch.esp (cleaned, modified)

Elemental Destruction.esp (cleaned, modified)

Apocalypse - The Spell Package.esp

Apocalypse - Dragonborn Staff Crafting.esp

Ordinator - Perks of Skyrim.esp

Elemental Destruction - Ordinator Patch Injected.esp (cleaned, modified)

Apocalypse - Ordinator Compatibility Patch.esp

Aurora - Standing Stones of Skyrim.esp

Thunderchild - Epic Shout Package.esp

Wintermyst - Enchantments of Skyrim.esp

Wintermyst - Increased Damage.esp

AOS2_DSI Patch.esp

AOS2_IWIE Patch.esp

Skyrim Immersive Creatures.esp (cleaned)

Skyrim Immersive Creatures - DLC2.esp (cleaned)

High Level Enemies - SIC.esp (cleaned)

RaceCompatibilityUSKPOverride.esp

Brevi_MoonlightTalesEssentials.esp (cleaned)

Better Vampires.esp (cleaned)

Vampirelordroyal.esp (cleaned)

BVandRB_Formlist.esp

SkyrimImprovedPuddles-DG-HF-DB.esp (cleaned)

Gildergreen Regrown.esp (cleaned)

Moss Rocks - Legendary.esp (cleaned)

83Willows_101BUGS_V4_HighRes.esp (cleaned, modified)

Skyrim Flora Overhaul.esp (cleaned)

SFO - Dragonborn.esp (cleaned)

SkyFalls + SkyMills + DG + DB.esp (cleaned)

Point The Way.esp

FarmhouseChimneys.esp (cleaned)

GM_SnazzyHDNobleBedsMix.esp

GM_Snazzy HD Noble Beds - Cutting Room Floor - PATCH.esp

Oblivion Gates v3 - Skyrim + Dawnguard DLC.esp (cleaned)

WayshrinesIFT.esp (cleaned)

AmethystHollowsUpdate.esp (cleaned)

HoamaiiClearskyHideout.esp (cleaned)

Tiny Little Living Origin.esp (cleaned)

Tirashan.esp (cleaned)

ClamsDropPearls.esp (cleaned)

Elemental_Dragons.esp (cleaned, modified)

ORM-Arvak.esp (cleaned)

ColdharbourDaedra.esp (cleaned)

ColdharbourDaedraAtronachForge.esp

SPTConsistentOlderPeople.esp (cleaned)

BijinAIO-2016_3.1.esp

Sapphire.esp

Elisif Makeover.esp (cleaned)

Serana.esp (cleaned)

CarryOnSkyrimBenAsFollowerV2.2.esp (cleaned)

FollowerCiceria.esp (cleaned)

CompanionValfar.esp (cleaned)

Norae Follower.esp (cleaned)

zMirai.esp (cleaned)

Recorder Follower Base.esp (cleaned)

Victoria Velina Revamped.esp (cleaned)

EFFDialogue.esp

Dynamic Dialogue Followers.esp

BetterQuestObjectives-EFFPatch.esp

Blowing in the Wind.esp

Watercolor_for_ENB_RWT.esp

Skyrim Particle Patch for ENB - Flame Atronach Fix.esp

mintylightningmod.esp

Vivid Weathers.esp

Vivid Weathers - AOS patch.esp

Vivid Weathers - Lanterns of Skyrim Preset.esp

Vivid Weathers - Minty Lightning patch.esp

Vividian - Torches Preset.esp

WondersofWeather.esp

Mage Outfit Texture Overhaul.esp (cleaned)

BladesBikini.esp (cleaned)

BlackSacramentArmor.esp (cleaned)

CrimsonTwilightArmor.esp

Emfy Cleric Robes.esp

DragonCarvedArmorSet.esp

Evil MasterMind Armor.esp

LustmordVampireArmor.esp (cleaned)

Medusa and Drakul Armors.esp

Contractor Armor.esp

Mavari Armor.esp

ArmorOfIntrigue.esp (cleaned)

Merta Assassin Armor.esp

Merta Black Rose Armor.esp

Sotteta Huntress Armor.esp

Sotteta Necromancer Outfit.esp

Tembtra Thief Armor.esp

Daedric Reaper Armor.esp

Osare Culort Outfit.esp (cleaned)

WestWindMisfit.esp

El_WayfarersCoat.esp

Raven Witch Armor.esp (cleaned)

Battlemage Armour.esp (cleaned)

VSArcheressDress v1.0.esp

LindsRobesPack01_NoReq.esp

LindsVaerminaHood.esp

KS Jewelry.esp (cleaned)

lilithssickle.esp

The Huntsman.esp (cleaned)

HDTPhysicsWeaponSling.esp

TailRemovalKit.esp

ApparelLayer.esp (cleaned)

DragonShoutVoice.esp

dD-No Spinning Death Animation Merged.esp

Dead Body Collision.esp

randomthunder.esp

PilgrimsDelight.esp (cleaned)

Traps Make Noise.esp (cleaned)

WM Trap Fixes.esp (cleaned)

Better Stealth AI for Followers.esp (cleaned)

UIExtensions.esp

iHUD.esp

AHZmoreHUD.esp

Extended UI.esp

Atlas Legendary.esp (cleaned)

Atlas Compass Tweaks.esp (cleaned)

RaceMenu.esp

RaceMenuPlugin.esp

RaceMenuMorphsUUNP.esp

RaceMenuOverlays.esp

EnchantedArsenal.esp

UnreadBooksGlow.esp

ViewableFactionRanksBothDLC.esp

AddItemMenu.esp

SkyUI.esp

Auto Unequip Ammo.esp

Convenient Horses.esp (cleaned)

Dual Wield Parrying_SKSE.esp

Lock Overhaul.esp (cleaned)

Run For Your Lives.esp

When Vampires Attack.esp

TimingIsEverything.esp

QuickLight.esp

VioLens.esp (cleaned)

Beards.esp

Brows.esp

LindsMerEyes.esp

dredtent.esp

LunariRace.esp

Schlongs of Skyrim.esp

SOS - VectorPlexus Regular Addon.esp

NonSexLabAnimationPack.esp

SexLabTools.esp

SexLabDefeat.esp

CitrusHead - Standalone.esp

FISS.esp

Grimy Utilities Interface.esp

SkyTweak.esp

Real Flying.esp (cleaned)

FNIS.esp

FNIS_PCEA2.esp

Alternate Start - Live Another Life.esp (cleaned)

BetterQuestObjectives-AlternateStartPatch.esp

Cleaner Loading Screen.esp (modified)

ASIS-Dependency.esp

TES5EditMerged.esp

Bashed Patch, 0.esp

ASIS.esp

GrimyCombatPatch.esp

 

 

Skyrim .ini tweaks (possibly relevant):

 

[General] (tweaks to threads)

sLanguage=ENGLISH
uExterior Cell Buffer=36
bPreemptivelyUnloadCells=0
uGridsToLoad=5
fDefaultFOV=85
sIntroSequence=
iEnumRefsAllowedPerFrame=-5
fCloakEffectUpdateInterval=-2.5
fFlickeringLightDistance=8192
iNumHWThreads=6
iHWThread6=6
iHWThread5=6
iHWThread4=6
iHWThread3=4
iHWThread2=4
iHWThread1=4
iAIThread2HWThread=5
iAIThread1HWThread=3
iRenderingThread2HWThread=1
iRenderingThread1HWThread=0
bUseThreadedParticleSystem=1
bUseThreadedMorpher=1
bBackgroundLoadVMData=1
bParallelAnimUpdate=1

 

[Papyrus]

fUpdateBudgetMS=2.2 (larger than default)
fExtraTaskletBudgetMS=2.0 (larger than default)
fPostLoadUpdateTimeMS=500.0
iMinMemoryPageSize=128
iMaxMemoryPageSize=512
iMaxAllocatedMemoryBytes=76800
bEnableLogging=1
bEnableTrace=0
bLoadDebugInformation=0
bEnableProfiling=0

 
ENB v305 w/ Vividian 7.46 Vivid Weathers; enblocal.ini:

[PROXY]
EnableProxyLibrary=true
InitProxyFunctions=true
ProxyLibrary=d3d9_smaa.dll
 
[GLOBAL]
UsePatchSpeedhackWithoutGraphics=false
UseDefferedRendering=true
IgnoreCreationKit=true
 
[PERFORMANCE]
SpeedHack=true
EnableOcclusionCulling=true
EnableZPrepass=false
 
[MULTIHEAD]
ForceVideoAdapterIndex=false
VideoAdapterIndex=0
 
[MEMORY]
ExpandSystemMemoryX64=false
ReduceSystemMemoryUsage=true
DisableDriverMemoryManager=false
DisablePreloadToVRAM=false
EnableUnsafeMemoryHacks=false
ReservedMemorySizeMb=512
VideoMemorySizeMb=4096
EnableCompression=false
AutodetectVideoMemorySize=false
 
[THREADS]
DataSyncMode=1
PriorityMode=0
EnableUnsafeFixes=false
 
[MULTIHEAD]
ForceVideoAdapterIndex=false
VideoAdapterIndex=0
 
[WINDOW]
ForceBorderless=true
ForceBorderlessFullscreen=true
 
[ENGINE]
ForceAnisotropicFiltering=true
MaxAnisotropy=8
ForceLodBias=false
LodBias=0.0
AddDisplaySuperSamplingResolutions=false
EnableVSync=true
VSyncSkipNumFrames=0
 
[LIMITER]
WaitBusyRenderer=false
EnableFPSLimit=false
FPSLimit=30.0
 
[iNPUT]
//shift
KeyCombination=16
//f12
KeyUseEffect=123
//home
KeyFPSLimit=36
//num /       106
KeyShowFPS=106
//print screen
KeyScreenshot=44
//enter
KeyEditor=13
//f4
KeyFreeVRAM=115
//B
KeyBruteForce=66
 
[ADAPTIVEQUALITY]
Enable=false
Quality=1
DesiredFPS=30.0
 
[ANTIALIASING]
EnableEdgeAA=true
EnableTemporalAA=false
EnableSubPixelAA=true
EnableTransparencyAA=false
 
[FIX]
FixGameBugs=true
FixParallaxBugs=false
FixParallaxTerrain=false
FixAliasedTextures=true
IgnoreLoadingScreen=true
IgnoreInventory=true
FixTintGamma=false
RemoveBlur=false
FixSubSurfaceScattering=true
FixSkyReflection=true
FixCursorVisibility=true
FixLag=false
[LONGEXPOSURE]
EnableLongExposureMode=false
Time=1.0
BlendMax=0.0
 
[MIST]
DensityNight=1.5
DensityInteriorDay=1.5
DensityInteriorNight=1.5
VerticalFadeSunrise=4.0
VerticalFadeDay=4.0
VerticalFadeSunset=4.0
VerticalFadeNight=4.0
VerticalFadeInteriorDay=4.0

 
Other relevant:
  • FNIS Behaviors 6.2
  • FNIS PCEA 1.3
  • XPMSE 3.84 (always overwrites other skeletons)
  • Crash Fixes v6
SKSE (1.7.3) and Plugins / Settings:
 
DLLs loaded:

AddItemMenu.dll
AHZmoreHUDPlugin.dll
chargen.dll
CrashFixPlugin.dll
DienesTools.dll
EnchantReloadFix.dll
EnchArsenal.dll
ffutils.dll
fiss.dll
Flying_Physics.dll
Fuz Ro D'oh.dll
GrimyTools.dll
hdtPhysicsExtensions.dll
hudextension.dll
JContainers.dll
MagExtender.dll
MfgConsole.dll
nioverride.dll
QuickLoot.dll
SchlongsOfSkyrim.dll
SexLabUtil.dll
SKSE_Elys_Uncapper.dll
SKSE_EnhancedCamera.dll
Smart Souls.dll
StorageUtil.dll

 
SKSE.ini:

[General]
ClearInvalidRegistrations=1
;EnableDiagnostics=1
 
[Debug]
;WriteMinidumps=1
 
[Memory]
DefaultHeapInitialAllocMB=768
ScrapHeapSizeMB=256

 
CrashFixPlug.ini

[Patch]
AlignHeapAllocate=1
StrCmp=1
StrLen=1
UnkUniqueId=1
Render650=1
UnkObjRef4D4EB0=1
NullSeenData=1
StringRefSetNull=1
SkipStrLenCrash=1
bhvGraphUpdateLoad=1
Unk11=1
MissingNode=1
IndexError1=1
InitialAnimationLoad=1
MovementPlannerAgentWarp=1
UnallocatedMovaps=1
CellNullCrash=1
CombatMEProjectile=1
MountNodeCrash=0
MountNodeWarn=1
IKCrashWarn=1

 

Machine specs:

 

 

CPU Type: HexaCore Intel Core i7-5930K, 4400 MHz (44 x 100), HT On

Ram Type: 64GB Quad Channel DDR-4, 1200 Mhz

Video Adapter: EVGA GeForce GTX Titan X 12GB, ForceWare 364.51

Operating System: Windows 10

 

 

 

 

Link to comment

Did I do this right?

 

ActionScript + Flash + Papyrus Scripts for the project. 

 

https://github.com/CE0/OSA-

 

Looks good to me. Thank you. Are the flash files set up so that you can publish from those folders and the deployables go to the right places?

 

Updated my previous post with results. As you can see its very random. Only issue being 0sex.

 

Hm. Unfortunately, I think that the next step is to clean up Skyrim itself to be sure that something isn't wrong with the install or errant files causing problems somewhere.

 

We have to get to a point where we have eliminated the possibilities of what is unique about your machine since it is apparently stable on the majority of installs.

 

 

CEO wants the Dom to be 1.03 and the sub to be 1.0. I assumed he was talking about the actor's scale and not a bone measurement.

 

If I understand what CEO's code was doing correctly, the player always starts as dom. However, I believe CEO recently implemented a way to check to see whether the target actor or player is taller and make the taller actor be the dom instead of the player. An error in that change might explain the scaling issue, but in all honesty, I don't think this should be getting done with actionscript or netimmerse anyway. It's cleaner and safer to keep it native if possible.

 

CEO's current code (unless he changed it for Nexus release) somehow passes a var called oheight to actionscript and I believe actionscript then does calculations based on that number, which are then demonstrated in 0SA display windows known as Current Scale and Natural Scale. That's why my code includes separate vars for both current and natural scale. These need to be passed to actionscript if actionscript is no longer performing the calculation.

 

Hit <num-Enter> to see the right-side menu in 0S. From there look at Info. I believe you then are looking for Character, but my memory could be wrong. It might be Actor. That's where you'll find current scale and natural scale. You can press <num-9> to swap actors for that display.

 

 

 

 

 

Hi Migal,

Just to check in here, the Dom and sub scale is still flexible each module can define the sizes they want the actor to be but that's the scale OSex uses I don't think this would matter since the formula would address whatever the scale requirements are.

 

The arranging script that decides who the dom or sub is based on height or gender or whatever criteria is assigned to, it doesn't really have an impact on deciding the scale of the actors. It sends a mod event to Skyrim with a single number, that number represents which actor is the starting location of the scene but nothing more. It's done in these events in Actro:

 

event onAlignToActra(string eventName, string actorLocHub, float numArg, Form sender)
align = true
int stageIDint = StageID as int
align = alignCycleLock(0, OSO.GlobalPosition[stageID as int], getStageLocArray(actra[actorLocHub as int]))
endEvent
 
bool function alignCycleLock(int cycler, objectReference vehicle, float[] locationData)
if align == true
    if cycler <= 2
 
    int count = 0
    while count < totalActra
    enforceAngle(actra[count], locationData)
    enforcePosition(actra[count], vehicle, locationData)
    count+=1
    endWhile
    
    cycler += 1
    utility.wait(0.1)
    alignCycleLock(Cycler, vehicle, locationData)
    return true
    else
    return false
    endIf
endIf
endFunction

 

 

;It gets the index for the actor in Actro's actra[] array and gets that actors position moves the other actor to that position, sets their angle then sets their vehiicle. Cycler spams it a few times since once wasn't enough to get Sven in Riverwood in place.

 

 

The scaling is done at some point in the script just by sending this event in Actraga:

 

Event OnSnapSc(string eventName, string zType, float zAmount, Form sender)
NetImmerse.SetNodeScale(Actra, zType, zAmount, false)
EndEvent
 
;Once it knows which actor is actor0 and actor1 it sends each of them a float that it wants them to adjust the scale of their root bone node by. It gets this information by running some math on values in the module.xml here:
 
<modify cmd="oheight" actor="0" oheight="123.834412"/>
<modify cmd="oheight" actor="1" oheight="120.227661" />
 
The formula for making the oheight is in Core/Actra/ActraBody/ActorScale.as
 
public function calcOHeight(GoalOH:Number, NativeOH:Number){return ((GoalOH - NativeOH) / NativeOH) + 1.0}
 
and the function for sending the oheight is also there as:
 
public function snapOHeight(oheightValue){
modifiedOHeight = oheightValue
// Records the modified height 
body.snapScale(calcOHeight(oheightValue, oheight))
// Sends the event to scale the actors
actra.body.calculateWeight("current")
// Makes the RP calculations for US or metric weight.
}
 
 
The sorting scripts and modify at initiation script (to set their scale). Are in:
 
core/Stage/ModInit.as
(SortActors is a bulk of this script but I wouldn't worry about it, it's a beast function to putting as many mismatched females and mismatched males into desired roles as it possibly can based on the module.xmls prefered gender in role settings.) More so to suit 2+ actor scenes for the future.
 
core/Stage/ModModify.as
 
and are triggered from Diasa.as (in various places)
 
-----------------------------------------------------------
 
Summary of the process:
- It receives the actors then decides based on config setting which of the actor is 0 and which is 1
- It looks at the module/config settings to see which actor should be the start location of the scene and sends the above event to root the actors to that location
- It looks at the module.xml to see what scale the actors should be then sends to each one's individual actraga the SnapSc event with a float of the scale the rootNode Bone should be.
 
 
The sort function is only generating an array numbering the actors by role. For example Dom=0 sub=1
 
If let's say the second actor was expected to be the dom it would send information like this to papyrus as a comma separated list.
 
actor[1] = 0
actor[0] = 1
 
1,0
 

The scaling is done at the conclusion of figuring out exactly which actor is what role. It sends a single event per actor holding it's desired new root bone scale. That scale is generated by some math on the native oheight and desired oheight

 

 

Thank you for this breakdown. Will go through it in detail and follow up.

Link to comment

 

The scaling is done at the conclusion of figuring out exactly which actor is what role. It sends a single event per actor holding it's desired new root bone scale. That scale is generated by some math on the native oheight and desired oheight

 

 

So, to make sure I understand:

 

1. oheight is a number created from a formula. Where are those two native and goal inputs coming from exactly?

 

2. oheight is then later used in another formula that calculates what the scales should be. Where is that formula?

 

I see oheight set in a module.xml. But, then there is a formula for creating an oheight number as well. Which number (calculated or hardcoded in xml) is used in which cases?

Link to comment

 

 

The scaling is done at the conclusion of figuring out exactly which actor is what role. It sends a single event per actor holding it's desired new root bone scale. That scale is generated by some math on the native oheight and desired oheight

 

 

So, to make sure I understand:

 

1. oheight is a number created from a formula. Where are those two native and goal inputs coming from exactly?

 

2. oheight is then later used in another formula that calculates what the scales should be. Where is that formula?

 

I see oheight set in a module.xml. But, then there is a formula for creating an oheight number as well. Which number (calculated or hardcoded in xml) is used in which cases?

 

 

Hi Pip, 

 

NativeOHeight:

 

Actraga papyrus script gets the oheight's native value when it tposes them:

 

OHeight[1] = NetImmerse.GetRelativeNodePositionZ(Actra, "NPC Root [Root]", "NPC Head [Head]", false)

 

 

GoalOH:

 

the module.xml's modify value is the goalOheight and what the module developers wants the actors scale to be in scene. Example:

 

<modify cmd="oheight" actor="0" oheight="123.834412"/>

 

 

Output:

 

the math converts this into a proportionate scale for the root node bone of the actor:

 

public function calcOHeight(GoalOH:Number, NativeOH:Number){return ((GoalOH - NativeOH) / NativeOH) + 1.0}

 

(this is in core/actra/body/ActorScale.as)

 

As a simplified example if the actor's oheight = 100 and the module.xml wants it at 200.It will return 2.0 for the scale of the root bone and send that value to the snapSC function in actraga Papyrus to have the actor scaled up.

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