pipdude Posted June 3, 2016 Posted June 3, 2016 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?
Kinky Posted June 3, 2016 Posted June 3, 2016 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.
pipdude Posted June 3, 2016 Posted June 3, 2016 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?
Kinky Posted June 3, 2016 Posted June 3, 2016 Have you tried running 0Sex with only the bare minimum mods installed? No i will create new profile in MO and try that.
CEO 0S Posted June 3, 2016 Author Posted June 3, 2016 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.
pipdude Posted June 3, 2016 Posted June 3, 2016 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.
Kinky Posted June 3, 2016 Posted June 3, 2016 Tried with bare minimum: 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! Someone on nexus just reported getting crash on load of save that was created post install of 0sex.
migal130 Posted June 3, 2016 Posted June 3, 2016 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.
pipdude Posted June 3, 2016 Posted June 3, 2016 Tried with bare minimum: 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! 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.
pipdude Posted June 3, 2016 Posted June 3, 2016 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?
Kinky Posted June 3, 2016 Posted June 3, 2016 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
pipdude Posted June 3, 2016 Posted June 3, 2016 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.
CEO 0S Posted June 3, 2016 Author Posted June 3, 2016 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.
Kinky Posted June 3, 2016 Posted June 3, 2016 Updated my previous post with results. As you can see its very random. Only issue being 0sex.
migal130 Posted June 3, 2016 Posted June 3, 2016 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.
CEO 0S Posted June 3, 2016 Author Posted June 3, 2016 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
migal130 Posted June 3, 2016 Posted June 3, 2016 ... 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.
CEO 0S Posted June 3, 2016 Author Posted June 3, 2016 ... 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.
sfll Posted June 3, 2016 Posted June 3, 2016 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
pipdude Posted June 3, 2016 Posted June 3, 2016 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.
pipdude Posted June 3, 2016 Posted June 3, 2016 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?
CEO 0S Posted June 3, 2016 Author Posted June 3, 2016 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.
pipdude Posted June 3, 2016 Posted June 3, 2016 Did I do this right? ActionScript + Flash + Papyrus Scripts for the project. https://github.com/CE0/OSA- Side note: The way you are handling packages (directories of classes basically) isn't right. In your Actionscript Settings, you really should only have two or three entries. One for local scripts (ie scripts that are in the same directory as the fla). One for the skyui folder. And optionally one for your 0Sex scripts. These may be local to the fla already so this entry might not be needed. Then, you should be putting the full path to each class in each class declaration. So, instead of just: class ActorBody { } It should be: class core.Actra.ActorBody { } The folders (ie packages) should always be all lower case. If you find that you are using a word repeatedly in a series of classes, it's a sign that they probably should be put into a new package. For example, instead of ActorXYZ.as and ActorABC.as you would make a folder called "actor" and put classes XYZ.as and ABC.as into it. These are just best practices that help make things easier to follow and organize. But, adding a new actionscript setting for every new package you make is pretty unwieldy. Especially if you end up setting the environment up again somewhere.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now