Jump to content

OSex+ The Greatest Virtual Sex Ever


Recommended Posts

How do I start the animation in this new version , what is the default key ? 

I read on previous pages and people said that you have to bind it yourself , well which one is it , on previous versions it said clearly "START key = NP0"

, on the first MCM page i can only find the ENDkey with is NP.

Link to comment

How do I start the animation in this new version , what is the default key ? 

I read on previous pages and people said that you have to bind it yourself , well which one is it , on previous versions it said clearly "START key = NP0"

, on the first MCM page i can only find the ENDkey with is NP.

 

Read install instructions for 1.07.

Link to comment

 

How do I start the animation in this new version , what is the default key ? 

I read on previous pages and people said that you have to bind it yourself , well which one is it , on previous versions it said clearly "START key = NP0"

, on the first MCM page i can only find the ENDkey with is NP.

 

Read install instructions for 1.07.

 

 

Yes, it's VERY IMPORTANT.

 

 

On a side note; how many times have you answered this question, Kinky? I've been following this thread, and I seam to have lost count, lol.

 

You are a saint.

 

Link to comment

 

 

 

 

I uncovered a new issue. For some reason, I am only able to modify an XML file once. After the first modification, it just doesn't seem to record further changes.

 

I'm double-checking the Flash. But, this might be some kind of issue with MiscUtil.WriteToFile. Maybe it leaves a write stream open, blocking new attempts to write?

 

 

Following up on this. It turns out that it is not an issue with MiscUtil.WriteToFile.

 

Flash caches files that it loads. So, if that file changes after you've loaded it and you load it again, it doesn't actually re-load the updated file. It just sends you the old cached version.

 

There is an easy workaround for this when working on-line with URLs. You simply add a random code to the end of the URL like "?43534543543" and it tricks Flash into reloading it. But, when loading local files, adding a URL code like that simply causes it to fail to load the file.

 

Still researching to see if there is a fix for this. But, in the meantime, the workaround is to never reload a file. In other words, anything that you load that needs to be modified and saved multiple times, keep that data stored in Flash. After the first load, just modify the stored record and re-save if needed.

 

Really, it isn't a workaround because theoretically its best practice to not reload files if you can efficiently avoid doing so with code. But, requires some extra programming to check when/if something is already loaded, etc.

Link to comment

 

 

How do I start the animation in this new version , what is the default key ? 

I read on previous pages and people said that you have to bind it yourself , well which one is it , on previous versions it said clearly "START key = NP0"

, on the first MCM page i can only find the ENDkey with is NP.

 

Read install instructions for 1.07.

 

 

Yes, it's VERY IMPORTANT.

 

 

On a side note; how many times have you answered this question, Kinky? I've been following this thread, and I seam to have lost count, lol.

 

You are a saint.

 

 

 

Heh. Playing devils advocate a bit here. But, if the same question has to be asked so many times about the same thing, isn't that an indication of something that needs to be fixed?

 

Maybe a default should be set up out of the box for no other reason than to save people from having to answer that question. Better to have to occasionally explain how to add a custom module than to have to explain a thousand times how to use the default one.

 

Just sayin. :)

Link to comment

 

 

 

Thanks Pipdude, that makes sense thanks! Working with JSON was similar where once a file was open it was cached, there was a way around it was a little weird. The way it's turning now it shouldn't be a problem because once the files are in the UI keeps them so outside of being able to refresh the scene live like in development it shouldn't be a problem I think.

 

A question while you're here. I'm having trouble fitting xml into another block my structure is kind of messy as a result I have to but a buffer .buffer. between things to make it go in.

 

For example:

 

<actor name="Fione" gen="F">
       <otherstats>
       <otherstats>
</actor
 
I've managed to do it in some ways but either I wipe the block I'm putting it into or if I .push it offsets the <actor> block out by 1 level past the array i want to slide it into. In the awards example it's generating a new award but it's a little different in that I have a fully wrapped actor block and I want to slide it into the array. Ideally one that's not written as var NewNode but is already a separate data object that can be attached in the right spot to the main data block. In the case of the UI loading a new segment of data that fits into a space it has already defined, I'm curious what the best way would be to fit something like that into the main data object.
 
------------------------
 
I hear your point on the pre-binding but in trying to switch this into framework mode instead of just OSex I think maybe in the future if I leaving it prebound there'd be the reverse question popping up even more: "I downloaded this module for OSA but all it does is start an OSex scene."
Link to comment

 

 

 

 

Thanks Pipdude, that makes sense thanks! Working with JSON was similar where once a file was open it was cached, there was a way around it was a little weird. The way it's turning now it shouldn't be a problem because once the files are in the UI keeps them so outside of being able to refresh the scene live like in development it shouldn't be a problem I think.

 

A question while you're here. I'm having trouble fitting xml into another block my structure is kind of messy as a result I have to but a buffer .buffer. between things to make it go in.

 

For example:

 

<actor name="Fione" gen="F">
       <otherstats>
       <otherstats>
</actor
 
I've managed to do it in some ways but either I wipe the block I'm putting it into or if I .push it offsets the <actor> block out by 1 level past the array i want to slide it into. In the awards example it's generating a new award but it's a little different in that I have a fully wrapped actor block and I want to slide it into the array. Ideally one that's not written as var NewNode but is already a separate data object that can be attached in the right spot to the main data block. In the case of the UI loading a new segment of data that fits into a space it has already defined, I'm curious what the best way would be to fit something like that into the main data object.
 
------------------------
 
I hear your point on the pre-binding but in trying to switch this into framework mode instead of just OSex I think maybe in the future if I leaving it prebound there'd be the reverse question popping up even more: "I downloaded this module for OSA but all it does is start an OSex scene."

 

 

Something my Dad always told me when I was younger was "When all else fails; Read instructions". lol, not that I myself have always followed this sagely advice, but it is a good tidbit to live by. You're all good CEO, and I'm still blown away by how great 0Sex is, and all the work you and Pipdude are doing.

 

Thanks for the dedication and hard work, and the new UI is looking amazing

 

 

Link to comment

Yeah its all good as it is. People just have to read instructions if they cant figure out things for themselves. Its not like instructions are not there. Important info is even written in huge font size. But perhaps prebind base module is not bad idea to have things running out of the box.

Link to comment

 

 

A question while you're here. I'm having trouble fitting xml into another block my structure is kind of messy as a result I have to but a buffer .buffer. between things to make it go in.

 

For example:

 

<actor name="Fione" gen="F">
       <otherstats>
       <otherstats>
</actor
 
I've managed to do it in some ways but either I wipe the block I'm putting it into or if I .push it offsets the <actor> block out by 1 level past the array i want to slide it into. In the awards example it's generating a new award but it's a little different in that I have a fully wrapped actor block and I want to slide it into the array. Ideally one that's not written as var NewNode but is already a separate data object that can be attached in the right spot to the main data block. In the case of the UI loading a new segment of data that fits into a space it has already defined, I'm curious what the best way would be to fit something like that into the main data object.
 
------------------------
 
I hear your point on the pre-binding but in trying to switch this into framework mode instead of just OSex I think maybe in the future if I leaving it prebound there'd be the reverse question popping up even more: "I downloaded this module for OSA but all it does is start an OSex scene."

 

 

I'm having a hard time following what you are trying to do. I get moving a block of data into an existing one. But, I'm getting lost following the details you give. So, its difficult to troubleshoot. Here is a general explanation that hopefully covers what you're asking:

 

A. The node name, in the data structure, is actually the name of the array.

B. Within the node arrays are objects. Those contain variables which are the attributes. They can also contain arrays which would be child nodes.

 

To make the data chunk you wrote:

actor = []; // OR, if there are already other actors, you skip this part and push the object created below onto the existing actor array.

var newNode = {};
newNode.name = "Fione";
newNode.gen = "F";

newNode.otherstats = [];
newNode.otherstats.push({});
newNode.otherstats.push({});

actor.push(newNode); // OR, as mentioned above, reference the existing actor array and push newNode into that.

To move an internal chunk of data into a separate data structure, you should be able to do something like:

yourDataA.theWorld[0].actor.push(yourDataB.otherWorld[0].actor[4]);

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

 

Regarding pre-binding. Good intention. And again just my 10 cents. But, it seems like you will get that question way more from people using it for the first time with the default module than you would from more advanced users that have moved on to installing custom mods (that should include how-to-bind instructions in their mod description).

Link to comment

 

Something my Dad always told me when I was younger was "When all else fails; Read instructions". lol, not that I myself have always followed this sagely advice, but it is a good tidbit to live by. You're all good CEO, and I'm still blown away by how great 0Sex is, and all the work you and Pipdude are doing.

 

Thanks for the dedication and hard work, and the new UI is looking amazing

 

Yeah its all good as it is. People just have to read instructions if they cant figure out things for themselves. Its not like instructions are not there. Important info is even written in huge font size. But perhaps prebind base module is not bad idea to have things running out of the box.

 

Yes. But, the mark of a good UI in software is that you don't need to read instructions to use the application. That's pretty much the goal of all modern software design (other than Adobe and 3DSMax products apparently :) ).

 

Besides, it isn't really the new users that suffer over this. It's the poor fellows that are feeling compelled to answer the same question every day.

Link to comment

 

Yes. But, the mark of a good UI in software is that you don't need to read instructions to use the application. That's pretty much the goal of all modern software design (other than Adobe and 3DSMax products apparently :) ).

 

Besides, it isn't really the new users that suffer over this. It's the poor fellows that are feeling compelled to answer the same question every day.

 

 

True but this questions are unavoidable no matter how well or user friendly final product is made. Some people simply rather ask then spend 3 minutes to read instructions. Lazyness is real for many. :D

 

Link to comment

 

 

Yes. But, the mark of a good UI in software is that you don't need to read instructions to use the application. That's pretty much the goal of all modern software design (other than Adobe and 3DSMax products apparently :) ).

 

Besides, it isn't really the new users that suffer over this. It's the poor fellows that are feeling compelled to answer the same question every day.

 

 

True but this questions are unavoidable no matter how well or user friendly final product is made. Some people simply rather ask then spend 3 minutes to read instructions. Lazyness is real for many. :D

 

 

 

Agreed. Then we are faced with a dilemma: Either make the software as easy to use as possible so that laziness affects other people less OR refuse to help people who ask out of laziness and be comfortable with their discontent. :)

Link to comment

 

 

 

Something related to this to watch out for:

 

There are some circumstances in Flash where you will be passing on a reference to data/object/function rather than copying that information to a new variable/object/etc.

 

In other words:

a = b; // You might think that this always just means copying whatever b is into a

But, sometimes you will later change b and it will affect references to a. My actionscript is too rusty for me to remember exactly what the different circumstances/objects are that do this.

 

Just keep that in mind as you build things and maybe get stuck. That might even have something to do with what you're having trouble with now. Here is someone writing about it in the context of arrays (along with a bunch of solutions in the comments): https://www.kirupa.com/forum/showthread.php?243675-Flash8-Actionscript-passing-array-variables-by-Value-not-Reference

Link to comment

 

 

 

Thanks Pipdude! Still not sure maybe this will help explain what I'm stuck on:

 

 

OPath is a link  to the second level of my DataObject

 

DataObject.Stage.   is OPath and I want to put the actor data nested in the Stage that they are currently Acting in.

 

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

 

var parser = new XMLParser();
var newNode = parser.parseXML(xml_string);
 
OPath.push(newNode);
 
--------------
 
<actors name="" gen="">
<otherstuff>
</otherstuff>
</actors>
 
is an example of what I'm trying to put in there. Each actor is reporting on their own when their data is prepared.
 
OPath.a.push(newNode); is the only way I've been able to make it work kind of but that puts an .a. in the middle of the data which most likely is bad.  Opath.a.actors[1] for example
 
If I go to Opath.actors.push or OPath.push it results in the actors either overwriting each other, overwriting the OPath entirely or making a actors[0].actors[0].name kind of thing.
 
----------------------------------------
 
Maybe this will help seeing the wall I'm hitting. I'm using this as a temporary solution to keep progress going at least as a bandaid: A temp xml block called xfer that is one level to deep that copies itself over to the lower level property place right when it's received. The best I could do at the time to get past it.
 
 
var L = OPath.a[OPath.a.length-1]
L.name = L.xfer[0].name
Link to comment

Very nice so far!  Getting some major clipping on cowgirl where the... umm...special parts, actually appear to be piercing through her stomach from the inside.  Maybe I'm just missing something on my end to make it work though.

Press Enter + 3 to enter repositioning system and use shift and alt keys + arrow keys to get a better positioning through the scenes.

How do I start the animation in this new version , what is the default key ? 

I read on previous pages and people said that you have to bind it yourself , well which one is it , on previous versions it said clearly "START key = NP0"

, on the first MCM page i can only find the ENDkey with is NP.

You'll have to bind it through MCM menu,

Link to comment

 

 

 

I'll just post this pipdude, maybe if you have time you can take a look and see things that are going really wrong. A lot of it is me learning and I got stuck on a few things the last day or two hence my debug got pretty messy sorry! hopefully it's kind of clear at least what I'm trying to do.

 

For debugging: Dpad up simulates the scene being initiated by the player in Skyrim. At that point it waits for the actors to get measured and recorded by papyrus, scale, name height etc. The actors check in when they are complete. When both check in the loop starts.

 

Dpad left simulates the actor check in so DPAD up + two lefts will initiate the loop. wasd move the UI, R confirms your selection, just for testing only the top option (arch back and lean forward.) can be confirmed (one way) to switch from the start scene to a transition to the next scene.

 

Gist of it is:

1,On start it loads the "Stage"

2. Checks if the scene data it needs is loaded if not it loads it.

3. Waits for actor check in.

4. When actors check in it puts them into the block.

5. When they both check in it makes a reference index for them then starts the loop.

 

I would like to rearrange the data. I'm trying to set it up in a way that multiple simultaneous scenes can occur, but I see some mistakes that I made so far in trying to put to much in the designated ID'ed scene. I think it would be best if, like you suggested, I keep everything organized and have the scene call on what it needs. 

 

I think the designated scene is the way a small part of it in terms of storing live sensitive data around coordinating the timing of the sceen but that's about it, everything else most likely should be organized and waiting to be accessed.

 

example: in the loop I need things like o.cur o.go o.length o.timer o.mod but that's all I need to house in there I think. Now that I see how to build the reference arrays this Idea made a lot more sense to me where the live script would just have to change the index's it's referencing whenever something major happened. Main reason for this that it needs auto pilot to manage the AI and OSA auto creates transitions unless they need to be specified but I'm trying to set them up in the same way here: Where all the information needed to play a transition can be made without any data input by looking at the two looping scenes that are joined together. Reduces the data needed down to like 20% of what it would be if every transition needed to be treated like an actual looping scene.

 

Overall though I'm not comfortable enough controlling the blocks to make something concrete yet so I'm just going to keep practicing until i can. After breaking it down this is the categories most likely needed:

 

osa (level0 data object) 

 

branches for all data to be stored that is loaded by any scene in the current play session - branch for settings 

 

all scene data branches to:

identity branch (holds ID  packs that have been loaded so far) - scene branch (bst9adore) will hold animations - stage branch (osex) - actor branch - and designated stage branch in there that just holds coordinating data for managing the loop per instance of the scene.

 

 

 

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

 

The papyrus OSA has kind of a tumbling feel to the code, where it's chaotic but always moving forward as a whole, like the millennium falcon escape from the Death Star scene before it blows up., hard to explain what I'm trying to say but i've rewritten this a few times so it's kind of the only way I know how to do it so that's where I'm starting, I'm sorry if it's confusing and kind of crazy.

Link to comment

 

 

 

 

Also pip dude here's a simplified mock up trying to show what I'm struggling with. Post push I'm not able to understand I guess how the data is assembled or the correct way too assemble it:
 
 var Foundation = "<config /> <odata> <actors><actor name=\"fione\"></actor></actors> <ostages></ostages> <oscenes></oscenes> <oidentity></oidentity>  </odata>"
 
var parser = new XMLParser();
o = parser.parseXML(Foundation);
 
trace(o.odata[0].actors[0].actor[0].name)// = Fione
 
var NewStuff = "<odata><actors><actor name=\"guy\"></actor></actors></odata>"
var NewXML = parser.parseXML(NewStuff);
 
trace(NewXML.odata[0].actors[0].actor[0].name)
 
o.push(NewXML)

 

the issue is I can't find "name Guy" and i can't really find eveidence of the pushed results.

 

Can I change the .wav for moans/spanking on 1.7c without any problems? I want to see if the ones I recorded work!

 

 Teachnically yes it's all there in 1.07C. The easy way would be to replace the wav files which are numbered and titeled I think in the skyrim/sound/OS folder. You can also expand on the sound files that are used but it gets a little complicated if you want to expand that. Not so bad though.

 

In Data\meshes\0SA\_Id\Sex\F\_Base\_sound (or \M\ for male) you'll see 3 files VoPrimal Phys Spank. If you open one up you'll see a list of of empty "" and Skyrim forms. Each one of these entries you have to imagine are numbered 0-120. These are the 120 sounds your characters can make per palette (at the moment they get 3 VoicePrimal, Phys and Spank)  The number is made up of the last 6 digits of the form ID (In decimal), you look at the form ID of the sound marker in creation kit and type it into windows calculator with "program mode". Tick the circle next to "Hex" first then after typing it in click DEC and it should convert it. After that you tack on the name of the mod the sound is from at the end.

 

Next step is you look for the "map"s which are in here:

 

Data\meshes\0SA\_Id\Sex\F\_Base\_map\Sound\Voice

 

You'll see they have different names. These are relating to key words the developer assigns to scenes. So for example if you wanted to change the sounds they make during RearStandingHard Sex (Note for now all sex scenes use that one for sound.) you would open up that one.

 

 

You'll see a bunch of blocks like this:

 

"_s3_1":[                             <------- At this arousal level and speed (speed 3) (Arousal 1)
        32,95,60,15,0,0,          <------- "32" is for the script so leave it , 95,60,15 are % chance of different tiers of sounds
 
        0,0,0,0,6,6,             <-------- Tier 1
        6,6,6,6,6,6,             <---------Tier 2
        54,54,54,54,54,54     <-------Tier 3
 
_s3: means at speed 3          _1:    means at arrousal 1

 

the first line starts with 32 which is a special number to tell the script to have 3 tiers of sound.

 

95 is the chance of the first row happening,  60 is the chance of the 2nd row and 15 is the chance of the 3rd row happening. Basically let's you use crazier sounds without worrying that they are going to be spammed.

 

Generally i put breath and pants on row 1, soft moans on row 2 and heavy/crazy sounds on row 3.

 

the numbers you see there are 1 of 6 possible sound markers the scene will pick from in the row for the tier it rolled.

 

----------

 

To try to translate: There's a 95% chance for a sound event to occur for that actor, if it does occur there's a 60% chance for a second tier sound to happen. Let's say it fails the second tier roll and only does a first tier sound. It will roll a  6 and pick from 0,0,0,0,6,6 to play

 

Take those numbers and  look at the first chart we originally looked at. The form in the 0 position which is 56591|0SACT.esp and the form in the 6th position which is 56597|0SACT.esp

 

4 out of 6 times it will play the first one and 2 out of 6 times it will play the last one if it rolls a first tier sound.

 

 

Below those forms you'll see length, and phoneme_type. These positions are tied in together, so the 0 form uses the 0 length and uses the 0 phoneme.  length is how long the sound is (so your character isn't doing 3 moans at once) and type is what phoneme shape they should use for lip syncing when they make that sounds.

 

 

VoPrimal - Is Moan Pants, mouth open or mouth stuffed.   Spank is Spank.  Phys is impact sounds ranging from no contact with just wet sound increasing with arousal to impact sounds like body smacking against ass etc.

 

Sorry it is pretty complicated to get your feet on the ground with it I know. Most likely it would be best to start by putting one sound in the creation kit and seeing if you can get the form entered right and tied in with the map and test if you can get it to play. After you see it through once I'm sure the rest will be easy. I can help if you post the files here if you get stuck.

 

if you really want to get fancy too you can change the default keywords of the scenes to point to different maps too (Doggystyle instead of rearstanding for example.) I haven't got that far myself in organizing the default identity but it's possible to customize.

 

-------

Disclaimer: I wouldn't go to overboard at the moment in making custom stuff as a majority of the documents are being shifted to XML which will be easier to read and understand. The gist will most likely be very close, so dabbling would give you an idea of how the system works but if you get into a big project you might wind up having to do a lot of redata entry until the xml version comes out.

 

Link to comment

Probably just me being a noob, but on install, I agreed for 0S to overwrite some existing stuff. My assumption being that the 0S files were named the same, but had 'extra' content. 

Wrong assumption, it seems. Some warning errors on game load about papyrusUtil being out of date, that SKSE wasn't happy etc.

NMM uninstall to roll back to the original files, then reinstall, but didn't let it overwrite the originals = another happy customer.

 

Very nice animations, very nice transitions, very nice guides and explanations. Very nice work altogether. 

 

With most people being right handed, though, wouldn't it have made more sense to put the control keys on the left of the keyboard?

 

lol

 

Link to comment

 

Also pip dude here's a simplified mock up trying to show what I'm struggling with. Post push I'm not able to understand I guess how the data is assembled or the correct way too assemble it:
 
public function OSI()
{
super();
   var Foundation = "<config /> <odata> <actors><actor name=\"fione\"></actor></actors> <ostages></ostages> <oscenes></oscenes> <oidentity></oidentity>  </odata>"
 
var parser = new XMLParser();
o = parser.parseXML(Foundation);
 
trace(o.odata[0].actors[0].actor[0].name)// = Fione
 
var NewStuff = "<odata><actors><actor name=\"guy\"></actor></actors></odata>"
var NewXML = parser.parseXML(NewStuff);
 
trace(NewXML.odata[0].actors[0].actor[0].name); // = Guy
 
//Below are my attempts to get data out of the push, all produce undefined.
//o.odata.actors.actor.push(NewXML)
//o.odata[0].actors[0].actor.push(NewXML)
//o.push(NewXML)
//o.odata.push(NewXML)
 
trace(o.odata[0].actors[0].actor[0].name)// = Fione
 
trace(o.odata[1].actors[1].actor[1].name)// = undefined
trace(o.odata[1].actors[1].actor[0].name)// = undefined
}
}

 

Ok. This, I can follow.

 

There looks to be two problems:

 

A. You're pushing the wrapper structure that is around the actor when it looks like you want to send it without the wrapper.

B. You may be misunderstanding how the numbers in the arrays work. When you push an actor onto the actor array, you would reference a second actor with "[1]" but the numbers in the earlier arrays of that reference would still be under the same parent nodes. So, those would remain "[0]".

 

Try:

 

public function OSI()
{
   super(); // I'm assuming that OSI() is the constructor?
   var Foundation = "<config /> <odata> <actors><actor name=\"fione\"></actor></actors> <ostages></ostages> <oscenes></oscenes> <oidentity></oidentity>  </odata>";

var parser = new XMLParser();
o = parser.parseXML(Foundation); // Unless 'o' is just a temporary variable, I suggest giving it a more descriptive name.

trace(o.odata[0].actors[0].actor[0].name);// = Fione

var NewStuff = "<odata><actors><actor name=\"guy\"></actor></actors></odata>";
var NewXML = parser.parseXML(NewStuff);

trace(NewXML.odata[0].actors[0].actor[0].name); // = Guy

o.odata[0].actors[0].actor.push(NewXML.odata[0].actors[0].actor[0]); // Push only the actor data into the actor array that is a child node of the first (and maybe only) 'odata' node and the first (and maybe only) 'actors' node.

trace(o.odata[0].actors[0].actor[0].name);// = Fione
trace(o.odata[0].actors[0].actor[1].name);// = Guy
}
}

Make sense?

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