Jump to content

OSex+ The Greatest Virtual Sex Ever


Recommended Posts

 

Latest version. I added GetScale so you can see exactly what happens to the actor's overall size. You'll see that the player is being spammed and the NPC is not. Either that, or netimmerse functions run multiple times from one call. The zAmount is not always the same on the same NPC but surprisingly, it is sometimes correct on RaceToScale NPCs.

 

Event OnSnapSc(string eventName, string zType, float zAmount, Form sender)
; Migal
float fGetScale
float fPreScaling
float fPostScaling
String PlayerOrNPC
If Actra != PlayerRef
	PlayerOrNPC = "NPC"
else
	PlayerOrNPC = "Player"
endif
fPreScaling = NetImmerse.GetNodeScale(Actra, zType, false)
fGetScale = Actra.Getscale()
utility.wait(2.0)
debug.messagebox("Pre Scaling: " + fPreScaling + "\n GetScale was: " + fGetScale + "\n zAmount was: " + zAmount + "\n" + PlayerOrNPC)
; end Migal

NetImmerse.SetNodeScale(Actra, zType, zAmount, false)

; Migal
fPostScaling = NetImmerse.GetNodeScale(Actra, zType, false)
fGetScale = Actra.Getscale()
utility.wait(2.0)
debug.messagebox("Post Scaling: " + fPostScaling + "\n GetScale was: " + fGetScale + "\n zAmount was: " + zAmount + "\n" + PlayerOrNPC)
; end Migal

EndEvent
PS: If we could stop the spamming, I'd probably have this thing working as pure papyrus in pretty short order. I already know GetSCale is working, which means we can use it to replace the t-pose. I understand what your actionscript and settings do and I believe I can modify my original solution to work so you don't have to change them.
Link to comment

 

Ok here we go I need help (again sorry)

 

Current Function:

NetImmerse.SetNodeScale(Actra, nodeType, newValue, false)
 
I want it to be:
NiOverride.AddNodeTransformScale(Actra, false, gender, nodeType, ????????, newValue)

 

I believe that function is supposed to apply a scaling on a single axis (from the way it is worded).  So key 0 = x, key 1 = y, key 2 = z.  That would mean that you'd need 3 calls for each usage to scale the node universally.

Link to comment

 

The irony I'm about to report is delicious.

 

CEO. You want your scaling to start working again? Remove all code in OnSnapSC. All of it, including the netimmerse scaling function.

 

I believe that right now, both OnBlendSC and OnSnapSC are being called.

 

This was my test:

 

1. I removed all code from OnSnapSC except for one of my GetScale/messagebox pairs.

2. Starting a scene should have produced two messageboxes, one for player and one for NPC. It produced eleven.

3. The NPC was scaled correctly (frontal kiss good alignment). This is with no netimmerse code in OnSnapSC.

 

I'm going to go comment out OnBlendSC to verify.

 

Edit: It's not OnBlendSC. Same exact test results with OnBlendSC's BlendSC function commented out. And again, the actors were scaled correctly.

 

Something other than OnSnapSC and OnBlendSC is scaling the toons. Scaling breaks because OnSnapSC tries to scale them again. Any chance in previous versions you used a different scaling method and it is still hanging around somewhere?

 

Edit2: Did a grep search through all your scripts and OnSnapSC is not being called by any papyrus code. It has to be getting triggered by actionscript. Not that it matters. The scaling happens without it.

 

Edit3: I have removed all SetNodeScale commands from all 0S papyrus scripts (there were only two scripts) and the NPCs are still getting scaled.

Link to comment

hey guys I would like to ask you something

 

I made a fresh install with a new game and installed all the requirements.

 

everything in order so far.

 

when I now confront a npc and press 0 to start the scene, they start holding each other and a HUD appears ( which looks awesome btw   :D  )

 

anyway, I can switch through the hud by pressing the numbers on the numlog, but thats it, in the versions before I was able to play scenes by pressing num1 + dpad right and so on.

 

But doing so ends in nothing at all, I managed to make her wrap her leg and turn her around but thats it :/

 

have the controlls changed in any way? if so. is there a new guide for this somewhere? or am I simply doing something wrong? D:

 

 

thank you again for the great mod and the effort and thanks in advance for the answer :3

Link to comment

hey guys I would like to ask you something

 

I made a fresh install with a new game and installed all the requirements.

 

everything in order so far.

 

when I now confront a npc and press 0 to start the scene, they start holding each other and a HUD appears ( which looks awesome btw   :D  )

 

anyway, I can switch through the hud by pressing the numbers on the numlog, but thats it, in the versions before I was able to play scenes by pressing num1 + dpad right and so on.

 

But doing so ends in nothing at all, I managed to make her wrap her leg and turn her around but thats it :/

 

have the controlls changed in any way? if so. is there a new guide for this somewhere? or am I simply doing something wrong? D:

 

 

thank you again for the great mod and the effort and thanks in advance for the answer :3

Everything is on the num pad now, inluding num-enter.

Link to comment

 

hey guys I would like to ask you something

 

I made a fresh install with a new game and installed all the requirements.

 

everything in order so far.

 

when I now confront a npc and press 0 to start the scene, they start holding each other and a HUD appears ( which looks awesome btw   :D  )

 

anyway, I can switch through the hud by pressing the numbers on the numlog, but thats it, in the versions before I was able to play scenes by pressing num1 + dpad right and so on.

 

But doing so ends in nothing at all, I managed to make her wrap her leg and turn her around but thats it :/

 

have the controlls changed in any way? if so. is there a new guide for this somewhere? or am I simply doing something wrong? D:

 

 

thank you again for the great mod and the effort and thanks in advance for the answer :3

Everything is on the num pad now, inluding num-enter.

 

 

wow ok ... you will laugh at me, I tried many things, even the enter button but ... not the enter button on numpad ... xD

 

it's working like a charm

 

thank you for the help!

Link to comment

New test code. Note that setnodescale isn't being called at all.

 

int iOnScaleSCcnt = 0
float fGetScale
float fPreScaling
String PlayerOrNPC

Event OnSnapSc(string eventName, string zType, float zAmount, Form sender)
; Migal
iOnScaleSCcnt = iOnScaleSCcnt + 1
If Actra != PlayerRef
	PlayerOrNPC = "NPC"
else
	PlayerOrNPC = "Player"
endif
fPreScaling = NetImmerse.GetNodeScale(Actra, zType, false)
fGetScale = Actra.Getscale()
utility.wait(4.0)
debug.messagebox("Pre Scaling: " + fPreScaling + "\n GetScale was: " + fGetScale + "\n zAmount was: " + zAmount + "\n" + PlayerOrNPC + "\n OnScaleSC call count: " + iOnScaleSCcnt)
; end Migal

;NetImmerse.SetNodeScale(Actra, zType, zAmount, false)
EndEvent

 

Screenshot shows good scaling without it. Note that these are tests done on different actors without loading a saved game. I am COC'ing from the game menu. So, scaling is taking place without SetNodeScale, but it is not from a cached or stored actor setting. Unscaling fails, however.

 

The count matches the size of your array in ActorScale.as. Coincidence?

post-23801-0-00813100-1465083310_thumb.jpg

Link to comment

The characters that show up currently in OSA are a result of a failed code page type. The failure is happening in the string in papyrus itself so it's being sent to the UI as incorrect characters. The UI's display (As long as we export with a font that has the characters) currently is correct but it's receiving the wrong characters from Papryus.

No. It is a little not exactly as you understood. Currently the failure happens because of BOTH reasons. We have non only one problem here - we have two different problems. And to fix it correctly we must fix it on BOTH levels:

1. On the Papyrus side we must make so, that the ingame string data must be converted into UTF-8 before it will be sent to Flash (this step needs Papyrus changes).

2. And on the Flash side we must include the fonts, which contains the needed characters to display the recieved text correctly (this step needs swf changes).

 

Let i show you visually:

If we only have encoded the text to UTF-8 on papyrus side but we have not embedded the correct fonts into OSA.swf (for example if we just leave your current OSA.swf untouched), it will look like this:

 

27428323536_4aba3a6cb9_z.jpg

Flash recieves the symbols with correct codes, but it has no letters with this codes in the font to show this symbols, so it shows them all as squares.

 

But if we not convert the text into UTF-8 on papyrus side, then we will have this:

 

27413675946_c0c860995e_o.jpg

 

And this will happen disregarding to has the swf correct symbols in the font or not (disregarding have we included the needed fonts or not), because the symbols, which it has recieved has other codes, so it just associates it with the another letters in the font (even if the font itself contains the letters of needed language). In result we see just the ugly mess consisting from visible but absolutely random letters.

 

So we will success only if we will change BOTH things in conjunction - OSA.swf (by including the correct fonts into it and recompiling it with them), and all papyrus scripts which collect the text data about the player (by wrapping each string, which will be sent to flash, into the codepage conversion function).

 

There's no way we can perform this code page conversion once it gets to flash?

This is also one of the variants to solve this problem. I thought about this too. But as i see, flash natively supports only UTF-8, and also the same as the papyrus has no built-in codepage-conversion functions in it. So the handmade implementation of such conversion function in the flash will be too large, too ineffective in performance, and it will have very limited functionality - in other words for each different codepage we will need to write the separate very large function. The SKSE implementation will be more universal and reliable IMHO. And the other advantage is the possibility to use such dll for another mods when (and if :D) it will be done. Because the dll written in C++ has much more potential possibilities, than reduced-functionality script languages, like ActionScript and Papyrus. Theoretically such conversion can be done even in flash itself, but the implementation will be too much perverted IMHO. But i can be mistaken about this, because i know about flash built-in functions not so much, maybe it has such conversion functionality, but it is just not very good documented or i still missed to read about it.

 

It seems like you are looking to make a DLL that will either natively convert all string types to the proper UTF conversion needed or it will be some kind of function that wraps around the result and converts it?

Yes, it will be the function which wraps the needed string and returns it in other codepage. It will look similar to iconv from PHP:

string iconv (string in_charset, string out_charset, string str)
So, if to imagine that such function will exist in papyrus in the future (will be injected through SKSE plugin into it), we will need to modify for example this code:

string[] function sendActraDetails(actor actra, string FormID, actor PlayerRef) global
actorBase ActB = actra.GetActorBase()
string[] details = new string[16]
details[0] = FormID
details[1] = ActB.GetName()
into something like this:

string[] function sendActraDetails(actor actra, string FormID, actor PlayerRef) global
actorBase ActB = actra.GetActorBase()
string[] details = new string[16]
details[0] = FormID
details[1] = iconv("cp1251", "UTF-8", ActB.GetName())
or better into this:

string[] function sendActraDetails(actor actra, string FormID, actor PlayerRef) global
actorBase ActB = actra.GetActorBase()
string[] details = new string[16]
details[0] = FormID
details[1] = iconv(Codepage_Setting_Variable_Stored_Into_ini_File, "UTF-8", ActB.GetName())
to have the ability to change the codepage through the option from ini file depending from the language of the game. And we must call such function for any similar strings, which we want to prepare for sending to flash.

 

Here's one question that is a different angle on this and I'm curious to your thoughts and knowledge. In some cases like the translate system the text is not being pulled directly from Papyrus but is instead being taken from the .ini file, to translate the text on the scene menu pages etc. Are those in the current system able to take Russian characters? Do I need to do additional things for the XML and INI texts that Actionscripts receives to have those work as well, or is this problem limited only to papyrus?

The most simple and most obvious solution is just to save the ini files themself in the UTF-8 codepage. So the text, which papyrus will be load from them, will be already in UTF-8. So regarding to ini files no code changes will be needed on papyrus side. But only if the all string in the certain ini file are used only for sending them to flash. Because, if some of such strings will be also used somewhere in the game by papyrus itself, like:

Debug.Notification("Hello world " + Some_String_From_ini)
this code will show us in the game something like this:

Hello world ÁÁÃèÔØÓÿ

So we will have the opposite codepage incompatibility in result - the incompatibility with the papyrus output. So here can be 2 variants of the solution:

1. Use one ini files only for interface (they must be saved as UTF-8), and other ini files use only for ingame messages (they must be saved in windows default codepage).

2. Or if we use some ini file for both purposes simultaneously, then we must to convert the strings obtained from it through our SKSE conversion function regarding from the codepage, in which the file was saved into the codepage which we need for flash or for papyrus.

 

So about ini files we have two choices - to change the encoding of the ini files itself OR to leave the ini in windows codepage and parse the text recieved from them in papyrus through our conversion function before sending this text to Flash. If the text in the ini is used only for interface, then the first choice is more simple. But if the text from ini files will be used not only for flash-based purposes, but also for the MCM and ingame messages for example, then we will need to convert it dynamically in the papyrus.

 

For example in your image: "Turn her around." that text is being given to the UI directly from a .ini document. Would that currently be translatable now and work as long as it's set to a font that does have the characters using your export process? A majority of the text is gathered from .ini or .xml, the only exception to this is the actor's name, their race, and the item names of their equipment.

If stick to the first variant from the shown above, then we need just to save the ini file as UTF-8. This is very simple to do even with the usual windows Notepad, just open the ini file in it and save it as shown on the next screenshot:

 

26853128744_e8c36b36e4_c.jpg

 

in result we instantly have the correct text from the ini to the flash:

 

"Turn her around" translation

26853128254_60d5ea4ea7_z.jpg

By the way seems the girls have different sizes. It rescales one girl larger than another. But seems this is a well known issue here.

But of course even for this simple thing we still need OSA.swf with the correctly embedded fonts, so i will show you how to embed them. First open the fla file into Adobe Flash, then press Text->Fonts Embedding in the menu:

 

27428322896_f51a3c21a7_z.jpg

 

in the font embedding dialog select each font and for each font check all checkboxes with the letter sets, do this for each font and then press OK:

 

Sorry for the typos on the screenshots.

26853528034_a79177038c_z.jpg

 

Then save the fla file and compile it into swf.

 

BUT BEFORE EMBEDDING, BE SURE THAT THE FONT WHICH YOU WANT TO EMBED, CONTAINS THE CYRILIC AND OTHER LANGUAGE SYMBOLS ITSELF, OTHERWISE DOWNLOAD ANOTHER FONT, INSTALL IT IN YOUR WINDOWS, AND THEN REPLACE THE FONTS IN YOUR FLASH WITH THIS NEW FONT. Otherwise you can embed only squares anyway, even if you do all the steps shown above correctly.

Link to comment

tumblr_o83r8bk2iL1ubnr1mo6_r1_1280.jpg

 

A note to people that help this project. You will not see this error box, since you've already been set up for this.

Anyone that has hudmenu.gfx conflict from BSA or left over files will get this now instead of the infinite loop crash. I wanted to point this out in case people are asking about it and you have no idea what they are talking about. With the change to the XPMS requirement this should reduce troubleshooting by 90000% as we'll know exactly what the issue is. Also people can't say it's not the case when it is since this warning box is very definitive on the error.

 

There is a .001% chance this error is also a result of no translation file for the client language being installed and also no _english.ini translation. The _english is intended to be a back up in case a translation for the client language isn't installed if neither is there this error will also come but that's very unlikely without extensive tampering of the files.

 

 

 

 

 

Migal I've tried out the code prior to this one and got the spam results however I was able to remember what it is. All scaling goes through that function so that's also reflecting the scaling of the 8 genital bones for the dom. I'll take a look at this next part now. Hopefully that helps clear it up.

 

I know the places that need to be changed exactly now from your explanation but I need some pointers on the details.

 

Is it involving a boneScale + objectReference scale setting?

 

Your advice that scale in game is a pure thing related to objectReference helped a lot. I guess that object reference scale of an actor is already an output of their race+height? I want to double check this because if it's returning a 1.0 let's regardless I would be more confused on how to implement this. Basically is 1.0 (1.4) creationkit scaled actor going to return a 1.04 objectReference scale or a 1.0?

 

I'll need to write a scale function in Actraga most likely that functions the same as scaleSnap but just adjusts the object reference scale.

 

Once I understand these I'll make a mock up of it, the persistent quest has a hashed out area for testing we can use. I'll build it and post so we can compare results.

 

 

 

 

 

 

Hi Scorpion,

Thank you very much I understand now.

 

I've changed the encoding of all ini's to UTF-8 so on that front it should be ready. The issue is most likely now that the font I am packing with doesn't not have all the characters. It's listed as having 22 Cyrillic characters but I guess that isn't enough for this.  I do like how the futura looks aesthetically for the UI so I guess the problem is a compromise here. Until I can find something with the same aesthetic but in support of different characters I will use this one but export a second .swf that has an alternate font with all of the characters needed.

 

Now the final step is to wait for your awesome DLL. Hopefully it goes well Scorpion, thank you so much. And also thank you for all this explanation you've made the whole thing very clear to me.

 

Link to comment

 

 

But it seems like Scorpion is on good lead anyway.

 

Hi Kinky,

If you want to conclude this will be it. You'll want to use your profile that is crashing with OSex installed already, not the testing one we've been using in the last 2 crash tests.

 

Go Here:

Data\meshes\actors\character\behaviors\

 

Put these files somewhere else: 

 

FNIS__ESG_0ER_F_Behavior

FNIS__ESG_0ER_M_Behavior

 

FNIS_0SA_System_Behavior

FNIS_0Sex_0MF_D_Behavior

FNIS_0Sex_0MF_K_Behavior

FNIS_0Sex_0MF_M_Behavior

FNIS_0Sex_0MF_S_Behavior

FNIS_0Sex_0MF_U_Behavior

 

Make sure there are no more OSex or OSA one's left in there. Also you tested the wiz sex plugin for me so make sure that is turned off for the test.

 

I'm assuming if these are all gone that the game will work correctly. When you have time if you could bring them back one at a time or hot and cold etc. and tell me which one is the one causing the crash.

 

 

Hey sorry i was out with friends most of the night i will try to do those tests tomorrow if its still needed. ( looks like it since there are only 8 listed and scorpion mentioned he removed 9).

 

I see Scorpion joins the sexy army im glad to see that :)

Link to comment

 

Hi, I love this mod and have had almost no problems with it. Just one, when I start the scene for some reason my female becomes a couple inches (relative gamewise) taller than the male. Is there a way to check the scaling in this?

 

CEO and other guys are working on scaling issues.

 

You can check few things:

 

Go to meshes\0SA\_0S\Config and oper _config.ini with notepad.

 

If you have sortRoleByAnimGender=1 this should always make female sub (lower then male)

 

Change sortTieBreaker=2 if you want that your female character is sub (lower) in a scene with another female who is by default taller then your player girl.

 

You can check scaling from scene menu within game if you go on info about actors.

 

 

Ok just tried this, nothing has changed, not complaining. I hope this helps in some small way. My female PC still scales larger than the male in the scene.

 

Link to comment

 

I've changed the encoding of all ini's to UTF-8 so on that front it should be ready. The issue is most likely now that the font I am packing with doesn't not have all the characters. It's listed as having 22 Cyrillic characters but I guess that isn't enough for this.  I do like how the futura looks aesthetically for the UI so I guess the problem is a compromise here. Until I can find something with the same aesthetic but in support of different characters I will use this one but export a second .swf that has an alternate font with all of the characters needed.

 

Now the final step is to wait for your awesome DLL. Hopefully it goes well Scorpion, thank you so much. And also thank you for all this explanation you've made the whole thing very clear to me.

 

Nice, actually i need 33, but 22 it's already something i can work with! Cheers!

Hatiko mode ON.

Link to comment

Migal I've tried out the code prior to this one and got the spam results however I was able to remember what it is. All scaling goes through that function so that's also reflecting the scaling of the 8 genital bones for the dom. I'll take a look at this next part now. Hopefully that helps clear it up.

 

I know the places that need to be changed exactly now from your explanation but I need some pointers on the details.

Makes sense. That's why the ActorScale.as array matches my test messagebox count on the papyrus side. I don't use SOS so I wouldn't visually see the other parts. But, I also said something else I think is very important. The NPC is getting scaled (correctly) when I completely disable OnSnapSC. That means scaling is happening someplace else. However, the NPC's scale is not reverted back to original after the scene without OnSnapSC.

 

For GetScale/SetScale to be used for actor scaling instead of bone measuring, your papyrus needs:

1. A separate function (or event) for SOS bone manipulation and scaling.

2. A separate function (or event) that measure's the actor before sending anything to actionscript

3. A separate function (or event) for actor scaling (beginning of scene)

4. A separate function (or event) for reverting actors back to their original scale (after scene).

 

Example code for items 2, 3 and 4 are in my spoilers here. There are two versions of item 3, one that no longer calculates actor scale in actionscript and one that continues to calculate actor scale in actionscript.

 

Is it involving a boneScale + objectReference scale setting?

Like I said, scaling is happening someplace other than just OnSnapSC, so I can't really answer that. I don't know how or where the actors are really being scaled at scene start. The last screenshot I posted proves that at scene start, actors are being scaled even when the OnSnapSC event contains no code at all. Dicks may not be getting scaled when OnSnapSC contains no code, but I don't know because my game males are vanilla and don't have a johnson.

 

Your advice that scale in game is a pure thing related to objectReference helped a lot. I guess that object reference scale of an actor is already an output of their race+height? I want to double check this because if it's returning a 1.0 let's regardless I would be more confused on how to implement this. Basically is 1.0 (1.4) creationkit scaled actor going to return a 1.04 objectReference scale or a 1.0?

Yes! Almost all my posts since I first posted my solution are me trying to tell you this. Actor.GetScale() will not return 1.0 unless the actor is actually 1.0. This is a fact. You do not need to test it. Yes, actors return objectreference scales, because actors *are* objectreferences. GetScale, SetScale and the entire Actor Script Class are members of the ObjectReference Script Class. Look at the top of the Actor Script wiki page. Actor Extends ObjectReference.

 

http://www.creationkit.com/index.php?title=Actor_Script

 

That means any ObjectReference function or event can be used on an Actor. An Actor is an ObjectReference. A sword in the game is also an ObjectReference. Worrying about an actor's Race, Sex and ActorBase Height are analogous to worrying about a sword's pommel size, hilt size and blade size. You don't need to measure the sword's pommel, hilt and blade. You need to measure the entire sword, which is what GetScale does.

 

I'll need to write a scale function in Actraga most likely that functions the same as scaleSnap but just adjusts the object reference scale.

This will only work if you are no longer scaling someplace other than OnSnapSC. Is your Johnson scaling routine also accidentally scaling the entire actor? Something other than OnSnapSC is scaling the actor at the beginning of the scene.

 

Once the mysterious scaling outside OnSnapSC is resolved, your code to scale an actor without calculating in actionscript should look something like this:

 

 

 

float fNaturalScale
float fScalingFactor
float fCurrentScale


Event OnSnapSc(string eventName, string zType, float zAmount, Form sender)

; NOTE: This code assumes desired actor sizes are always 1.0 for sub and 1.03 for dom. Replace those
; numbers with variables that come from a settings file if necessary

; Warning: This should only be used to scale the actor at scene start. A separate event must be
; used to scale the actor back to original size after scene is over

; the fScalingFactor variable is a replacement for all ActionScript code that returns zAmount:

; --- scaling operations
fNaturalScale = Actra.GetScale()
if Actra == PlayerRef
if fNaturalScale != 1.03 ; 1.03 could be a variable from config setting instead
fScalingFactor = (1.03 / fNaturalScale)
Actra.SetScale(fScalingFactor)
endif
else
if fNaturalScale != 1.0 ; 1.0 could be a variable from config setting instead
fScalingFactor = (1.0 / fNaturalScale)
Actra.SetScale(fScalingFactor)
endif
endif
fCurrentScale = Actra.GetScale()
; remove Actor scaling from Actionscript because it is no longer needed
; Johnson/dick scaling and manipulation still requires netimmerse but it is handled separately
; send fNaturalScale to actionscript for Natural Scale display
; send fCurrentScale to actionscript for Current Scale display

endEvent

 

 

Or, the below version should work if you are still doing the scaling calculations in Actionscript (still using zAmount):

 

 

 

Event OnSnapSc(string eventName, string zType, float zAmount, Form sender)

; Warning: This should only be used to scale the actor at scene start. A separate event must be
; used to scale the actor back to original size after scene is over

; --- scaling operation
Actra.SetScale(zAmount)
; Johnson/dick scaling and manipulation still requires netimmerse but it is handled separately

endEvent

 

 

Below is the separate event (could be a function instead) to reverse the scaling after the scene. (I edited this post later so scaling back to original could be done in your CompleteEnd function instead of like this, look toward bottom of this post). *Do not* believe you can use one of the above scaling routines to revert the actor back to its original scale. It would not work, because SetScale always operates on the actor's original scale:

 

 

 

Event OnReverseSnapSc(I don't know if you need to pass anything here, maybe Actra?)

; NOTE: SetScale operates on the actor's original scale so we only have to tell
; the actor to be its original scale.

Actra.SetScale(1.0) ; translation: actor's original scale * 1
; Johnson/dick scaling and manipulation still requires netimmerse but it is handled separately

endEvent

 

 

Finally, replace everything related to t-pose measuring in papyrus with something like this. You should be able to do it with a function and no mod event or animation event, but you could adjust to your preference:

 

 

 

Idle Property ResetRoot Auto ; You must auto-fill this property in the CK.

Function MeasureActor(Actor ActraToMeasure, FormID) ; call this function like this: MeasureActor(Actra, FormID)

; Warning: This function should only be called one time for each actor.

; --- RaceToScale section
; --- Pulls the NPC out of the furniture and auto-scales them to natural
; --- Side benefit of avoiding crash on sleeping NPCs
if ActraToMeasure != PlayerRef && ((ActraToMeasure.GetSitState() > 2) || (ActraToMeasure.GetSleepState() > 2))
ActraToMeasure.PlayIdle(ResetRoot)
ActraToMeasure.MoveTo(Game.GetPlayer(), (40 * Math.Sin(Game.GetPlayer().GetAngleZ())), (40 * Math.Cos(Game.GetPlayer().GetAngleZ())), 0.0, abMatchRotation = false)
endif
;--- end RaceToScale section ---

string[] OHeight = new string[2]
OHeight[0] = FormID
OHeight[1] = ActraToMeasure.GetScale()
UI.InvokeStringA("HUD Menu", "_root.WidgetContainer."+glyph+".widget.com.skyActraOHeight", OHeight)
; ActorMeasured = True (I don't think this is needed because not spamming)

endFunction

 

 

Remember, none of the above matters if we don't first figure out why actors are currently being scaled at scene start when OnSnapSC looks like this:

 

 

 

Event OnSnapSc(string eventName, string zType, float zAmount, Form sender)
; nothing
EndEvent

 

 

If you hadn't told me OnSnapSC scales the actors, I would believe OnSnapSC's actual intention was only to revert the scale back to original and that another event or function is for scaling actors when the scene is starting.

 

Looking at your code, you should not be running OnSnapSC one time for each element in the actionscript array. You should run onSnapSC one time for *all* elements in the actionscript array. Although, the dick and the actor should be separate events if you want to use GetScale and SetScale.

 

Edit: Instead of adding a new function, you could revert scaling back to original like this:

 

 

 

function completeEnd()
if actra != none
ActorLight(Actra, "Remove", OSO.OLightSP, OSO.OLightME)
FactionClean(Actra, OSO.OFaction)
MfgConsoleFunc.ResetPhonemeModifier(Actra)
packageClean(Actra, OSO.OPackage)
Actra.ClearExpressionOverride()
Actra.SetAnimationVariableBool("bHumanoidFootIKDisable", false)
ActorUnlock(Actra, PlayerRef)
; new
Actra.SetScale(1.0)
; end new
endIf
endFunction

 

Link to comment

Shinji72 did an awesome review + showcase of OSex:

"Most INNOVATIVE Skyrim Mod ever - 0sex updated"

 

 

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

 

Check it out please, and subscribe: if not because Shinji is awesome then because he's the only review with the sack to showcase OSEXY.

Thank you very much Shinji, pleasure as always and an honor working with you.

Link to comment

Question: Does 0sex have mcm menu? I got a msg that new mod have been added to mcm but no 0sex there.

Also suggestion to maybe somehow make 0sex scenes block incoming sexlab scenes. In my game i have comcial situations when during 0sex scenes arousal of both actors rise so high that they decide to rape themselves and sexlab scene begin to play, i have "sexecption" goin on.

Link to comment

Question: Does 0sex have mcm menu? I got a msg that new mod have been added to mcm but no 0sex there.

Also suggestion to maybe somehow make 0sex scenes block incoming sexlab scenes. In my game i have comcial situations when during 0sex scenes arousal of both actors rise so high that they decide to rape themselves and sexlab scene begin to play, i have "sexecption" goin on.

 

I liked your description of what happens when the event occurs lol.

 

No MCM all config is in .ini for now and the crucial stuff will be moved to my own menus shortly in a config menu. I use a script that is kind of like an MCM script as I wanted to extend some of the options that it provides but it has no MCM menus in it. It's possible it might still trigger the message and just not show anything or it could be related to a left over remains of it in your script getting triggered by having the quest showing up again.

 

There's not so much I can do about mods that try to take control of the character as it's mostly papyrus stuff that I can't really shut down. Most likely it would be the kind of thing that both Sexlab and OSA add in to prevent aggressive mods that use the frameworks from triggering scenes on each other. I'll keep it in mind and see what I can do though.

 

 

 

Migal thank you so much for this thorough explanation. I will try to build a mock up today to test and will post it shortly based on your findings. I believe the extra scale you are encountering is the magic scale I'm talking about and what messes up Oheight from working. The math in oheight is woring I believe but I do see the double visual click where they for a frame become the correct size based on Oheight but then get scaled again. I believe this is the mysterious scale flag being disabled, causing some kind of size reset.

 

Will post again shortly to coordinate on the mock up, thank you!

Link to comment

Will post again shortly to coordinate on the mock up, thank you!

Just FYI, I believe the t-pose replacement function in my last post would work even if you continue to scale the actor with bones. This is because your Actionscript calculation should generate the same scaling factor (zAmount) based on the GetScale command.

 

This is because the actionscript calculation (and my first spoiler in the previous post) doesn't need to be fed a specific number. It produces a percentage of whatever number you feed it. All we need in order to perform scaling is the percentage.

 

Example:

 

100 / 200 = 0.5

 

1 / 2 = 0.5

 

All we need is the 0.5. That's what gets fed to GetScale or SetNodScale (for actors). It doesn't really matter if all that t-pose code generates the number the percentage is based on, or if a single GetScale produces the number.

Link to comment

CEO just to make sure im doing this right:

1. I install 0sex

2. and then run FNIS

3. and after that remove behaviour files

4. and then add them one by one back?

 

Or do i have to run FNIS every time i return one of them?

 

I did those first 3 steps and went to game. Game loaded with actors T posed but wouldnt crash even if i used spells or went to other cell.

 

Link to comment

CEO just to make sure im doing this right:

1. I install 0sex

2. and then run FNIS

3. and after that remove behaviour files

4. and then add them one by one back?

 

Or do i have to run FNIS every time i return one of them?

 

I did those first 3 steps and went to game. Game loaded with actors T posed but wouldnt crash even if i used spells or went to other cell.

 

Yea on the save\settings you've been using in the past that crashes a lot. Take out all he behavior files OSA or OSex then run FNIS. I believe it will stop crashing. If it does stop the crashing add each behavior back one by one, or in a hot and cold group to find the culprit, please you'll have to run FNIS after each test yes. Should work fine if they aren't there I think maybe try FNIS again.

Link to comment

CEO just to make sure im doing this right:

1. I install 0sex

2. and then run FNIS

3. and after that remove behaviour files

4. and then add them one by one back?

 

Or do i have to run FNIS every time i return one of them?

 

I did those first 3 steps and went to game. Game loaded with actors T posed but wouldnt crash even if i used spells or went to other cell.

You have to run FNIS after every time you add or remove behavior files.

 

Although, I'm not 100% certain this is going to work correctly as a test because there is more to FNIS than behavior files. There is also a text file list FNIS needs that declares the behavior files. So, FNIS may report an error if you just remove behavior files.

Link to comment

I will try to do this in groups then to minimize the need to run FNIS.

 

I got FootIk error by having only last 4 behaviour files in folder and i run fnis on those 4 before loading save.

 

Will try same with first 5 files next. (Also got FootIk error).

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