Jump to content

OSex+ The Greatest Virtual Sex Ever


Recommended Posts

 

 

 

Tried it. Doesn't work.

Next insult, bitch?

Let me rephrase. 

It DOES work. It will load fine. Scenes will START. 

You cannot ADVANCE scenes. 

So. Try again.

 

 

I didnt even start insulting you but seems you are insulted anyway so im happy about that part. :D

Unlucky for you im not so easily offended especialy when dumb people try to offend me.

Learn to mod then come back and act like normal person if you want any help or advice.

Link to comment

 

Weirdness comes natural. For all to be normal is the real weird. We're all humas, we differ. Diversity makes the life. 

 

What we want is more 0Sex updates, so speaking of that, do you guys need some artwork being done? I cun fire up Illustrator for ya.

 

Thanks Fitness Bunny, vector skills could help a lot. I have templates for the buttons I can post and you can do whatever you want from there. They have a few size format criterias they follow but outside of that it's anything goes.

 

 

Please do that. Make them zipped and upload via WeTransfer or something you find fit. 

Kindly find my requirements for the involvement below:

  • Format -  I need vector files, EPS files if you have would be great. If you have raster only, I can try with trace option to make them into dots. 
  • Artwork - Tell me more about the exact style you are implementing here. Is it just sexy comic style, how did you do the previous ones, etc, some sources of imagery you think will fit the best.
  • ETA - I have a full-time job with part time designing and branding going on. And a girlfriend. Yeah, this might might be overwritten by higher-priority tasks, I must warn, but since I like your project and your guys' work so much, I will do my best. I can relocate 1-2 hours per day for this. I'll see depending on the qty you require and the way we organize. Kindly forward your contacts (fb I prefer) so we can arrange properly and not clog the forum too much with details.

Wow. I'm in it. This's gonna be good. :)

Link to comment

 

 

 

 

Tried it. Doesn't work.

Next insult, bitch?

Let me rephrase. 

It DOES work. It will load fine. Scenes will START. 

You cannot ADVANCE scenes. 

So. Try again.

 

 

I didnt even start insulting you but seems you are insulted anyway so im happy about that part. :D

Unlucky for you im not so easily offended especialy when dumb people try to offend me.

Learn to mod then come back and act like normal person if you want any help or advice.

 

Not only that, his initial post about that Dynwhatever mod was just rude as hell. Learn some fucking manners.

Link to comment

 

Greetings

Ly

 

Hi Ly,

Just so you know I did put in the latest demo documents where you can change the key bindings. I'm wondering if you tried this and it didn't work. In some cases it seems people aren't able to get the keys registered in the new system.

 

 

 

 

They work slightly the same as a "paired animation"  which has the animations of both actor put into one nif as opposed to how most mods do it by having an animation per actor and using papyrus to stick them together. There's a bunch of limitations and loss of control that come with paired animation as opposed to single but in this case it sounds like it could be a nice solution to have it play out like interacting with normal furniture in Skyrim except as a "Pair". I like it, I'd have to play around a bit but it seems promising.

 

There is a bone for the camera and having some kind of cinematic control for it would be awesome, I'll look into that and see. I know there's a bone rig for it and documentation in Fore's pdf on setting up some stuff for the camera so maybe it is possible.

 

 

Your "I believe" and my Mod Organizer do not agree.

This is with 1.06 activated. Nexus version. 

attachicon.gifUntitled2.jpg

 

The patch replaces the following script from 1.06: 

_0SA_Sex_MF_Cn.pex

 

If I remember properly, the JsonUtil.pex script is the one that tells DynDOLOD what version of PapyrusUtils you have. 

 

If 1.08 is fixed... I suggest you make it available for download somewhere.

 

Until I am notified, via PM, that all compatibility issues with other mods are fixed?

This mod will be removed from my guide. 

 

 

I invested and still am investing a lot of time to make sure this runs as an isolated thing that has no impact on any other mod, the entire thing is designed that way. PapyrusUtil i don't write or manage so it's out of my control. I will look into it but most likely Dyn is what has the compat issue. 

 

 

 

 

Sounds awesome, I'm packing it up but it's a small file I"ll put it all up in a zip, thank you! Everything related to the buttons will be in one .AI file, all vector.

 

- In terms of the art work I will most likely see OSex's visuals all the way to the end myself as I enjoy drawing them and would like the aesthetic to be as unified as possible but OSA as a framework needs more buttons. I don't want to confine developers to just my buttons as a lot of them are directly related to OSex scenes and over user of the same graphics for things not exactly what they are for might be confusing / unsatisfying. 

 

What I mean is you can draw pretty much anything you want for any kind of scenes, that would be a huge help, to make a nice foundation of buttons that developers can choose from for their own scenes so not everything has to use the OSex buttons.

 

The buttons are divided up usually in 3 parts, which is the "Base", and an "Icon" that goes over the base. In the case of 1.08 as an example the black circle is the base that the icon gets put on. They have an overlay which is put over the base but under the icon when a button is selected (The icons on the page menu and actor menu use this to light up.)  and the last part is the halo which is a rotating graphic (generally has to be a circle graphic intended for a circle button.)

 

Whatever catches your interest for content and the style you prefer would be great, menu graphic icons like on page or actor tab bars or the buttons themselves, whatever you like. I'd just like to have the button library expanded for other developers. Thank you and I'm really excited to see what happens, no worries about time, however long it takes is fine. I'll have them up today at some point.

 

To show an example of how the buttons would be eventually used by developers:

 

<bt t="A" b="a_ci_bw" h="h_gid_ic" i="a_osx_180bust01_f">

 

That's an example of a button in XML where the developer defines the name of the  base "b"  h "Halo" and i "Icon". 

 

New button graphics is one of the few things developers can't add to their scene so they have to choose from what is packed in the mod. They could coordinate with me and I could put in what they needed but most likely being able to draw vector is a niche skillset and might not get that much play so I think most developers will be limited to the buttons that the mod has included which is why I'd like it to have as much depth and choice as possible.

Link to comment

I invested and still am investing a lot of time to make sure this runs as an isolated thing that has no impact on any other mod, the entire thing is designed that way. PapyrusUtil i don't write or manage so it's out of my control. I will look into it but most likely Dyn is what has the compat issue. 

The first part of this is fantastic to hear. It's good to see a mod author so dedicated to making a quality mod that has minimal conflicts. 

 

As far as DynDOLOD having compatibility issues, I looked into it. The only issue is %/scripts/JsonUtil.pex. 

 

If the copy of that script that is included in v1.06 is not required for your mod to run, this is a simple fix. All that needs done is that script gets hidden, or not installed at all. 

 

However: That is the script that tells other mods what version of PapyrusUtils you have installed, and is crucial not only for DynDOLOD, but other mods as well. 

 

EDIT: Hid the script "JsonUtil.pex" contained in 0SEX. All mods work as intended.

Figured I would pass that on, for others who experience the same issue.

Link to comment

 

 

Hi Pipdude,

A question when/if you have time regarding a small issue I'm hitting in actionscript. I found work arounds but I feel like it's an issue with my actionscript understanding that would lead to stronger solutions if I had a grasp on what's happening:

 

The example of the issue involves the "Stage" movie clip which is running the scenes it has the identity movie clipped attached to it when the current scene has identity data and removes it on conclusion of the current scene. 

 

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

 

 

 

 

The stage movie has these for starting and removing the Identity Expression / Voice engine.

 

public function beginIdentity(Role){
Identity[Role] = this.attachMovie("OIdentity", Identity[Role], this.getNextHighestDepth(), {Core:Core});
}
 
 
public function endIdentity(){
for (var i=0; i < Actor.length; i++){
Identity.End()
}
}

 

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

 

 

in the identity End() it removes the movie clip (And the clips attached to Identity.)

 

 

public function End(){
EngineExpression.removeMovieClip()
EngineVoice.removeMovieClip()
this.removeMovieClip()
}
 
----------------------------------

 
It's set up like | Stage.Identity |
The issue I'm having is the "this.removeMovieClip()" in "Identity" is removing the "Stage" movie clip sometimes. I had a variation of the beginIdentity function that had a second End() call in case the scene in the future went about things in different ways to make sure the clip was removed before adding a new one. This removed the Stage scene 100% of the time it was called. Like this:
 

public function beginIdentity(Role, IdentyPack){
Identity[Role].End()
Identity[Role] = this.attachMovie("OIdentity", Identity[Role], this.getNextHighestDepth(), {Core:Core});
}
 
--------------------------------
 
Just curious is there anything you can see here that would cause Identity this.removeMovieClip from removing the movie clip on the previous level? My only though is that it's not being removed but something with Depth making it disappear but I'm not entirely sure. If the .End() is replaced with an Identity.removeMovieClip() it still disappears the parent movie. I use the End() approach because Identity has a timer and i find they need more careful endings as I've had cases of the timer persisting even after the movie that held the class with the timer's removal.
 
Thanks!
Link to comment

I want to make a post on sound forms also since I expect it to be the thing people are going to want to change the most through SexDentity. XML has a lot of benefits in terms of how we can organize the data but the UI power makes one challenge in that it's hard to translate a form ID into a sound and takes 1 frame to turn the serial number into a sound which isn't ideal.

 

 

This is different from the past SexDentity so for people with Papyrus Knowledge / Creation Kit experience or anyone I'm interest in feedback before finalizing the setup which I'm working on now. It will be the only part of the mod that really needs more creation kit papyrus tie in.

 

Here's my plan:

 

1. Sound Packs are segmented into different categories per pack. For example there is Impact, Spank, Voice, etc.Voice might get more in depth to be spread for  dialogue, and mouth stuffed etc or it might all go into one. This is just for sex but combat or whatever else would get it's own pack. The reason for segmenting is to allow each section to be customized individually per actor.

 

2. Each one of these segments will be a list of sound forms put into a CK form list. So as a default there would be a Voice FormList, Impact FormList (Voice, Spanks etc.). for both genders.

 

3. The actors identity file has a path for each of these sound packs. The path is the form ID of the Form list which gets sent to the actor when the scene starts for their script to bind their blank Form List to their choosen voice pack's CK formlist.

 

4. An xml map is also made of the formlist saying what each sound is: Sound titles with the index they can be found at in the form list.

 

<moan i="1">

   <ofx "ph" type="0" am="20"

   <ofx "wait" am="2">

   <ofx "ph" "0" "0"

</moan>

<moan i="2"/>

 

<pant i="11"/>

 

 

the ofx is a list of commands handled sequentially for events to make the lip sync and mouth shape for the sound.

 

5. A final document is used per scene tag to say what sounds to make. I call this the sound play pattern. Any map made above should be able to plug into an sound play pattern, so this wouldn't have to be made per sound pack. To show how I plan to connect it though:

 

<SP>  (Let's say for Speed 3 Arousal 2

<sound id="moan" per="25">

<sound id="pant" per="50">

</SP>

 

The types are meant to be standard "moan" "pant" etc. to allow them to interact with any play pattern you can add your own however but it would require a custom play pattern that has those new additions included.

 

25 percent of the time the actor will moan, another 25 they will pant and 50 of the time will do nothing.

 

6. When it sees "moan" it gets the Index from the map, if there's multiple it picks one randomly so in this case it might take index 2 for a moan.

 

7. It sends the index number to the actor and they play from that formlist pack index 2.

 

As a note "Speed" Is being changed to intensity, some scenes go up to 6-7 speeds and I found a lot of the speed+arousal redundant in the prior version. In the scene file you'll put in a number for the Intensity of the scene at a certain speed capping it most likely at 4 so it's more modular(0 idle > 4 highest intensity)

 

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

 

In assigning new voice packs this means a formlist in the CK would have to be made that holds all the sound for that pack, then a map of what kind of sounds are at the different indexes, Once that's done it can interact with any premade sound play pattern or a new custom sound play pattern can be made for it.

 

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

 

Curious on if anyone sees a better way of going about this / thoughts on it.

 

 

 

 

Link to comment

 

The example of the issue involves the "Stage" movie clip which is running the scenes it has the identity movie clipped attached to it when the current scene has identity data and removes it on conclusion of the current scene. 

 

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

 

 

 

 

The stage movie has these for starting and removing the Identity Expression / Voice engine.

 

public function beginIdentity(Role){
Identity[Role] = this.attachMovie("OIdentity", Identity[Role], this.getNextHighestDepth(), {Core:Core});
}
 
 
public function endIdentity(){
for (var i=0; i < Actor.length; i++){
Identity.End()
}
}

 

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

 

 

in the identity End() it removes the movie clip (And the clips attached to Identity.)

 

 

public function End(){
EngineExpression.removeMovieClip()
EngineVoice.removeMovieClip()
this.removeMovieClip()
}
 
----------------------------------

 
It's set up like | Stage.Identity |
The issue I'm having is the "this.removeMovieClip()" in "Identity" is removing the "Stage" movie clip sometimes. I had a variation of the beginIdentity function that had a second End() call in case the scene in the future went about things in different ways to make sure the clip was removed before adding a new one. This removed the Stage scene 100% of the time it was called. Like this:
 

public function beginIdentity(Role, IdentyPack){
Identity[Role].End()
Identity[Role] = this.attachMovie("OIdentity", Identity[Role], this.getNextHighestDepth(), {Core:Core});
}
 
--------------------------------
 
Just curious is there anything you can see here that would cause Identity this.removeMovieClip from removing the movie clip on the previous level? My only though is that it's not being removed but something with Depth making it disappear but I'm not entirely sure. If the .End() is replaced with an Identity.removeMovieClip() it still disappears the parent movie. I use the End() approach because Identity has a timer and i find they need more careful endings as I've had cases of the timer persisting even after the movie that held the class with the timer's removal.
 
Thanks!

 

 

I'd have to see the source to get better context. But, it sounds like you're misusing MovieClip. Are you generating new MovieClips only to start new blocks of code? Or, do they also place and control something visual in the UI?

 

MovieClip should only be used to organize/hold something visual. Otherwise, you should be making new instances of classes unattached to MovieClips instead. Presuming that you have attached a class to each type of MovieClip you are creating at run time, you could instead just do "savedReferenceToClass = new YourClass(this);". That will make your life much easier as you can skip all the depth matters and special cleanup required for MovieClip.

 

To answer your question about what is happening in this case, I suspect that it's a matter of "this" referring to a scope that you don't expect. There are situations where "this" can be written multiple times in the same class and refer to multiple different locations depending on the code around it. For example, if you are using Delegate.create you could be establishing that "this" refers to the Stage. An easy way to check what is going on there is to run a trace of "this" right before the offending line to see what scope the code is running from in that moment. Another common culprit for confusing scope shifts is when you define a function as a variable and then run "this" within that function like this:

var myNewFunction = function()
{
        this.someMovieClip._visible = false;
}
...
myNewFunction(); // Wait. What "this.someMovieClip" just got turned off?!

Typically, to fix that situation you have to do something like this:

var thatMovieClip = this.someMovieClip;
var myNewFunction = function()
{
       thatMovieClip._visible = false;
}
...
myNewFunction(); // There we go.

True that SetInterval requires some extra care cleaning up. In fact, it's not really a best practice to use it at all in most cases. Instead, it's better to use MovieClip.onEnterFrame because that ties when code fires to a frame. This is kind of an unusual case because we're working with a multi-platform situation and relying on a specific timer to fire functions is just too tempting in simplicity. To use onEnterFrame properly you would want to use EventDispatcher so that you're only running one onEnterFrame. It's not really difficult once you learn that set up (it's how the built in Flash API is supposed to be used). But, it probably doesn't return much gains if your Flash needs are limited to Skyrim mods. Just good to know if you ever end up doing more with Flash.

Link to comment

 

 

 

 

Thanks a lot Pipdude, that all makes sense to me and should help me narrow down what's causing the issue.

 

For some of the more important things like the data library and the stage I opt to put them in movie clips due to some knowledge walls I hit, I'm able to get movie clips to do exactly knowledge wise, so you're right in that regard that I'm most likely over using them. They seem easier for me to absolutely know if they are gone and also to reference by _parent or exact location. The depth of non movie clips isn't what I expect in some cases, it seems like they are maybe parallel? and I'm not sure how to get point to the _parent to access the variables in that case.

 

This might help me, in this example:

 

savedReferenceToClass = new YourClass(this);

 

compared or trying it to conform it to have the same functionality as:

 

Identity[Role] = this.attachMovie("OIdentity", Identity[Role], this.getNextHighestDepth(), {Core:Core,Actra:Actra,IDUnit:IDUnit});

 

The advantage that I don't know how to handle the other way is that I know exactly where it's located in terms of _parent or putting together a path to access it's variables, where as calling a new "Class" doesn't seem to always put it one step above, for example I found calling _parent from the new class doesn't reference the prior class sometimes in scope but movieclips at "this.getNextHighestDepth()" I know how to reach.

 

Would

 

Identity[Role] = new OIdentity(this); have roughly the same effects in terms of scope as the above movie clip? also is there a way to assign public var on creation the same way like  

 

Identity[Role] = new OIdentity(this, {Core:Core,Actra:Actra,IDUnit:IDUnit})

 

I suppose that last part I could just assign and run a function after initializing it without using the constructor though if not possible.

 

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

 

I get what you mean about Delegate, and the scope of things, LoadVars even makes it challenging. In Papyrus it's always clear to me exactly what the script is going to do in order and where the thread is going to be, but with these things in Actionscript it gets vague. I came up with a solution with LoadVars where it passes 2 functions with it "Short Command" and "Long Command" with a point to the originating function so I can control the timing of the thread. For example if I'm loading in a new scene and don't want things to happen until I'm sure all the documents are loaded. I used a timer that kept checking for all the files to be loaded but this is what was causing the scene crash in 1.08 draft 2, under some circumstances the timer would be set to an interval of 0. Couldn't ever really figure out why.

 

Passing along the functions lets me check for data and the thread is stopped until it's returned with a function that starts the next step at least so I got some control of it despite not really knowing the full extent of these things:

 

lv.onData = ODelegate.create(this, giveIdentity, DataSuite,CommandSuite)

 

In this new setup Actor basic data is the only one that depends on a timer to recheck data before starting, since it needs to wait for whenever Papyrus can send the information the rest have gates for the thread in place so regardless of how much of the XML is currently missing but is needed for the next action to occur it will get it all before proceeding. I'm sure there's a million things I did wrong but it seems pretty good compared to what I was doing before at least.

 

Also concluding note: the changes you made on the final XMLparser are awesome, very large xmls many back to back at once, it's instant, leaves no sign it ever happened. Identity is making it do a lot of stuff at the start and it's completely smooth.

 

 

 

 

 

 

 

Link to comment
 

 

 

For some of the more important things like the data library and the stage I opt to put them in movie clips due to some knowledge walls I hit, I'm able to get movie clips to do exactly knowledge wise, so you're right in that regard that I'm most likely over using them. They seem easier for me to absolutely know if they are gone and also to reference by _parent or exact location. The depth of non movie clips isn't what I expect in some cases, it seems like they are maybe parallel? and I'm not sure how to get point to the _parent to access the variables in that case.

 

 

Non-MovieClip classes are not parallel to the relationships of MovieClips. They exist within scopes which could be any kind of class, including a MovieClip. _parent is a property built into the MovieClip class. It references the MovieClip that a given MovieClip is within. So, unless you define _parent within a class it does not have a _parent property. But, it is a common practice to pass references to a "parent" class into classes as they are created. Which leads to:
 

 

This might help me, in this example:

 

savedReferenceToClass = new YourClass(this);

 

compared or trying it to conform it to have the same functionality as:

 

Identity[Role] = this.attachMovie("OIdentity", Identity[Role], this.getNextHighestDepth(), {Core:Core,Actra:Actra,IDUnit:IDUnit});

 

The advantage that I don't know how to handle the other way is that I know exactly where it's located in terms of _parent or putting together a path to access it's variables, where as calling a new "Class" doesn't seem to always put it one step above, for example I found calling _parent from the new class doesn't reference the prior class sometimes in scope but movieclips at "this.getNextHighestDepth()" I know how to reach.

 

Putting "this" in the constructor is a way to pass in a reference to the class that created a sub-class. Essentially, you're setting up your own parent system. You have to define what the constructor does with that data in the sub-class. Something like this:

class Actor
{
   private var stageReference:Stage;

   public function Actor(stage)
   {
      stageReference = stage;
   }
}

Now that instance of Actor has a saved reference to its "parent". You could even use the word "parent" for the variable. But, I think its a better practice to try to make it more specific to what type of reference the class expects (a Stage, an Animation, etc.).

 

 

 

Would

 

Identity[Role] = new OIdentity(this); have roughly the same effects in terms of scope as the above movie clip? also is there a way to assign public var on creation the same way like  

 

Identity[Role] = new OIdentity(this, {Core:Core,Actra:Actra,IDUnit:IDUnit})

 

I suppose that last part I could just assign and run a function after initializing it without using the constructor though if not possible.

 

 

Yes. I do that all the time. You can treat the constructor like an initialize function and pass in whatever startup data or references the class will need. You just need to define the constructor like any other function and have it store the passed in data/references into class properties so that the other functions can later reference them.

 

 

I get what you mean about Delegate, and the scope of things, LoadVars even makes it challenging. In Papyrus it's always clear to me exactly what the script is going to do in order and where the thread is going to be, but with these things in Actionscript it gets vague. I came up with a solution with LoadVars where it passes 2 functions with it "Short Command" and "Long Command" with a point to the originating function so I can control the timing of the thread. For example if I'm loading in a new scene and don't want things to happen until I'm sure all the documents are loaded. I used a timer that kept checking for all the files to be loaded but this is what was causing the scene crash in 1.08 draft 2, under some circumstances the timer would be set to an interval of 0. Couldn't ever really figure out why.

 

Passing along the functions lets me check for data and the thread is stopped until it's returned with a function that starts the next step at least so I got some control of it despite not really knowing the full extent of these things:

 

lv.onData = ODelegate.create(this, giveIdentity, DataSuite,CommandSuite)

 

In this new setup Actor basic data is the only one that depends on a timer to recheck data before starting, since it needs to wait for whenever Papyrus can send the information the rest have gates for the thread in place so regardless of how much of the XML is currently missing but is needed for the next action to occur it will get it all before proceeding. I'm sure there's a million things I did wrong but it seems pretty good compared to what I was doing before at least.

 

Yeah. A timer polling for something is not a good/efficient solution. You should be able to make everything happen sequentially in a chain reaction. Like a machine. This sounds like a good case for the loader script I sent a while back. That is designed to send a bunch of load commands into it and run them sequentially.
 

 

Also concluding note: the changes you made on the final XMLparser are awesome, very large xmls many back to back at once, it's instant, leaves no sign it ever happened. Identity is making it do a lot of stuff at the start and it's completely smooth.

 

Cool. Yeah. The original version was built with no thought for performance. The later iterations replaced a bunch of split and join commands that needlessly applied to the entire file.

Link to comment

 

 

 

Awesome wow, that makes so much sense. You're the best PipDude.  I was going that path with "Core" which is a reference to the root widget that most of the important things are attached to, so I was trying to do something like that but didn't understand the _parent property. I thought it was failing due to the scope of non-movieclips being different and had no clue it wasn't returning what I expected because it wasn't a native thing to non movieclips.

 

Doesn't seem like much work to fix, just some small adjustments and replacing and usage of _parent in scripts related to it. All my classes have "Core" so they can access the xml library and since I figured out to do that I point to things relative to the core so it's upwards(?) without the use of _parent, hopefully it will be a very small rework to fix. What kind of advantages would it be to use a class outside of a class in a movie clip, is it a maintenance thing in dealing with movie clips, performance thing where movie clips are more intensive?

 

Thinking about it the last piece is that I can "turn off" a movie clip and make it dump everything but when doing that to a class without an MC it would need it's own functions to clean out variables etc. I guess I'm asking... is there a way to delete a class and replace it with a fresh version of the class like a movieclip. I get the usage of regular classes in terms of a one time thing, that does a series of function and then ends but a lot of my classes are meant to be persistent, for a duration of time and do things consistently in reaction to other classes so I feel like they need a concrete way to be destroyed and recreated/replaced by slightly different instances, basically they generally don't have a task they do and then are complete they manage a segment of stuff that a hub is prompting them when/if to do something else.

 

The main reason for needing that is the xml defines the classes sometimes with a string for things that are being handled very differently depending on the choice, so sometimes I need them to be completely gone and restarted with a different class.

 

 

Thank you, thank you, thank you!

Link to comment

 

Doesn't seem like much work to fix, just some small adjustments and replacing and usage of _parent in scripts related to it. All my classes have "Core" so they can access the xml library and since I figured out to do that I point to things relative to the core so it's upwards(?) without the use of _parent, hopefully it will be a very small rework to fix. What kind of advantages would it be to use a class outside of a class in a movie clip, is it a maintenance thing in dealing with movie clips, performance thing where movie clips are more intensive?

 

Yeah, should be an easy adjustment. You had the structure generally right. Just instantiating the wrong thing. Using classes should allow you to clean the code up some.
 
The MovieClip class contains a lot of things. So, it's kind of just messy code-wise to add every classes code on top of that. Also, MovieClips are unique and can only be created and destroyed in certain ways with a unique API. So, they just create obstacles to have to code around.
 
There could be some performance issue. But, probably not noticeable in an application like this. They also don't allow you to pass variables into the constructor.
 

 

Thinking about it the last piece is that I can "turn off" a movie clip and make it dump everything but when doing that to a class without an MC it would need it's own functions to clean out variables etc. I guess I'm asking... is there a way to delete a class and replace it with a fresh version of the class like a movieclip. I get the usage of regular classes in terms of a one time thing, that does a series of function and then ends but a lot of my classes are meant to be persistent, for a duration of time and do things consistently in reaction to other classes so I feel like they need a concrete way to be destroyed and recreated/replaced by slightly different instances, basically they generally don't have a task they do and then are complete they manage a segment of stuff that a hub is prompting them when/if to do something else.

 

The main reason for needing that is the xml defines the classes sometimes with a string for things that are being handled very differently depending on the choice, so sometimes I need them to be completely gone and restarted with a different class.

 

Classes are definitely meant to handle systems like the one you describe.

 

Easy removal of classes is one of the strengths of Actionscript. All you have to do is remove all active references to the instance. So, you can just replace the old instance with a new one using the same property and the old one is gone. If you have an array of instances, you can remove all of the instances in the array simply by resetting the array: arrayOfInstances = [];

 

That said, there are cases where some cleanup is needed. You found one with SetInterval. The timers it sets up don't go away when the class that started it goes away. So, you have to keep track of and remove those with cleanup functions. And of course there will just be times that you want a class to do a few things before being destroyed.

 

Example:

var chief = new Actor(this, "red");

if(chief.isDead)
{
   chief = new Actor(this, "blue");
}

Assuming that the chief is dead, after this code, the red chief class is gone and has been replaced by a new instance of the blue chief.

Link to comment

 

 

 

Perfect, that makes total sense.

 

I have fear with actionscript that things are still alive and the variable is only a pointer, for  var boss =  new blueboss: I would have assumed that repointing or clearing the variable just changed the pointer of the variable but the boss lived on invincible floating in actionscript somewhere I could never reach him again doing Delegating delay timers at 0 intervals and all kinds of other stuff to sabotage OS3ksy. It seems I would be wrong in that assumption. The variable it's assigned to is not just a pointer for the class but is the thing that the class code is running in.

 

with boss = []

 

the class would actually be completely gone. I'd have to figure out what happens in the case of delay timers or an active thread going on in the class at the time of removal but this will help me a lot, thank you as always.

 

in your example (this, "blue") of the chief. How do I access those once I'm in the new class? I'm assuming I can pass as much i want into there but from your prior post example it didn't look like I could access them just as a public var in the class script?

 

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

 

It's strange to think about in terms of other variables, I'll have a hard time wrapping my head totally around this one for a while I think. An extreme example:

 

in this case:

 

var Boss = new BlueBoss

var MyOtherVarForSameBoss = Boss

 

Two vars are now pointed at the boss. I'd be curious if each then is a representation (like how arrays work where they are always pointers) in that case would the class live on until all variables pointing at it are cleared. It sounds like from your description that as long as the class is attached to something it exists, once all pointers are removed it's garbage collected. 

 

I'll prob hit issues for a bit in terms of what qualifies as a pointer. Example:

 

Core.lib.ActraLib.actra[1]

 

lib is a movieclip currently but might be turned into just a class. A ton of my stuff is storing the pointer Core.lib.ActraLib.actra[ActorIndex] as the data hub for a specific actor. Might not be the case here (and a bad example) but I wonder if there's some obstacles I'm going to hit where things like that might count as a reason to make the class live on.

 

If MyOtherVarForSameBoss was on a totally different scope it seems like the class would adapat and exist on a totally different scope when the var is cleared from the original. MoveClip does seem to offer some kind of stability to me I guess that benefits my weaker knowledge as a crutch in that they are more tangible but you're always right Pipdude even if I can't see it at the time, so I'm going to push the new adjustments to do things properly.

 

Link to comment

I want to make a post on sound forms also since I expect it to be the thing people are going to want to change the most through SexDentity. XML has a lot of benefits in terms of how we can organize the data but the UI power makes one challenge in that it's hard to translate a form ID into a sound and takes 1 frame to turn the serial number into a sound which isn't ideal.

 

 

That's an awful lot of work to replace what most modders know as the actor.say() function.  But, I understand what you're trying to accomplish.

 

Documentation is going to be crucial.  What you're describing isn't like anything else I've seen, so you'll need to document with examples like Fore did with FNISforModders.  Aside from that, I don't see much trouble with your concept.  Lots of flexibility, which I suppose is the idea.

 

One question:  The form list you mention, would that be a form list of our own creation and name, or  an OS form list we are supposed to modify?

Link to comment
 

 

I have fear with actionscript that things are still alive and the variable is only a pointer, for  var boss =  new blueboss:

 

I would have assumed that repointing or clearing the variable just changed the pointer of the variable but the boss lived on invincible floating in actionscript somewhere I could never reach him again doing Delegating delay timers at 0 intervals and all kinds of other stuff to sabotage OS3ksy.

 

To confirm it seems I would be wrong in that assumption. The variable it's assigned to is not just a pointer for the class but is the thing that the class code is running in.

 

 

You are correct that the variable is technically only a pointer. But, Actionscripts deletion system is designed to remove items from memory when nothing is pointing to them. More about how it works here: http://blog.gskinner.com/archives/2006/06/as3_resource_ma.html
 

 

with boss = []

 

the class would actually be completely gone. 

 

 

Well. "[]" is equivalent to "new Array()". So, either a whole list of classes would be completely gone or you would have replaced an instance of a class with a new Array.

 

 

 

in your example (this, "blue") of the chief. How do I access those once I'm in the new class? I'm assuming I can pass as much i want into there but from your prior post example it didn't look like I could access them just as a public var in the class script?

 

 

You can access them as a var property in the script that created them:

class Plains
{
   private var chief:Actor;

   public function Plains()
   {
      var chief = new Actor(this, "green");
   }

   public function startStrongWinds()
   {
      chief.shieldEyes();
   }
}

The chief property contained in the Plains class is a pointer to an instance of Actor. You can replace it with a new actor or remove the instance by setting it to "undefined". And you can run functions on the Actor instance via the chief pointer (ie shieldEyes above).

 

 

It's strange to think about in terms of other variables, I'll have a hard time wrapping my head totally around this one for a while I think. An extreme example:

 

in this case:

 

var Boss = new BlueBoss

var MyOtherVarForSameBoss = Boss

 

Two vars are now pointed at the boss. I'd be curious if each then is a representation (like how arrays work where they are always pointers) in that case would the class live on until all variables pointing at it are cleared or is the original a secret "owner" of that class and not a pointer

 

 

I'm pretty sure that it would live on until both pointers are cleared. In theory, it kind of sounds like things could get confusing with a bunch of references. But, it doesn't. I think because it is so illogical to make a class that would have two references to the same thing. I can't remember ever having a problem with that.

Link to comment

 

lib is a movieclip currently but might be turned into just a class. A ton of my stuff is storing the pointer Core.lib.ActraLib.actra[ActorIndex] as the data hub for a specific actor. Might not be the case here (and a bad example) but I wonder if there's some obstacles I'm going to hit where things like that might count as a reason to make the class live on.

 

If MyOtherVarForSameBoss was on a totally different scope it seems like the class would adapat and exist on a totally different scope when the var is cleared from the original. MoveClip does seem to offer some kind of stability to me I guess that benefits my weaker knowledge as a crutch in that they are more tangible but you're always right Pipdude even if I can't see it at the time, so I'm going to push the new adjustments to do things properly.

 

 

I may not be explaining it technically perfect. There may be differences between a real pointer and a pointer to a pointer. I can just say that I've never had a problem with this. Not because of any skill or experience or anything. It just works as expected. Put your data in one property and have many references to it. If you replace the data in that same place all of the other pointers will see it as having been replaced.

Link to comment

 

I want to make a post on sound forms also since I expect it to be the thing people are going to want to change the most through SexDentity. XML has a lot of benefits in terms of how we can organize the data but the UI power makes one challenge in that it's hard to translate a form ID into a sound and takes 1 frame to turn the serial number into a sound which isn't ideal.

 

 

That's an awful lot of work to replace what most modders know as the actor.say() function.  But, I understand what you're trying to accomplish.

 

Documentation is going to be crucial.  What you're describing isn't like anything else I've seen, so you'll need to document with examples like Fore did with FNISforModders.  Aside from that, I don't see much trouble with your concept.  Lots of flexibility, which I suppose is the idea.

 

One question:  The form list you mention, would that be a form list of our own creation and name, or  an OS form list we are supposed to modify?

 

 

Sorry I'm unaware of the actor.say() maybe this will fix a lot of things and make it easier. I have no idea how to make actors talk through conventional means outside of packages which are limited and dialogue trees which I can't get to conform to the scene.

 

Do you have documentation on how it works I can see, or explain.

 

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

That's the gist of OSA in a sense that it is an expansion to the creation kit, where it can accept information needed to make these scenes as intricate and customizable as possible. It's meant to be a bridge so an animator can make a full scene without investing months to learn papyrus for example and learn the in and outs of the creation kit. Development for OSA is almost entirely done in XML (for developers) and actionscript (me) and the only time creationkit is used is when forms have to be added which only is needed for spell effects, shaders, sounds, and music. That doesn't apply to how the events could impact story lines etc. which is still in the hands of developers to do whatever they want with in the creation kit / papyrus from the API the scenes will generate. It's the construction and management only of the animated scenes and the effects in the animated scene that are completely handed over to xml as opposed to papyrus/creationkit.

 

I will fully document it because I like doing that and it's roughly the same as the JSOn version which i already completed documentation for so it wont be to much work to bring it up to speed. The main goals are I needed it to be very interchangeable without forcing a large amount of esps or access to the OSA.esp to make changes, every actor needs to be able to be unique, and it has to conform to tags in the scenes to do the appropriate stuff. A plus is that SexDentity for expressions follows the same format except it only uses the pattern map (Doesn't need the form list or the map) so in a sense all identity is one single learning curve to manage any part of an npc.

 

It will be straight forward with just a little practice, xml is pretty easy for a human read as opposed to JSON so it's mainly just counting the index of the form id and deciding what kind of sound it is. The OFX is a little fancy but it only does a few things really, which is change mfg modifier and phonomes or wait X amount of time in between those actions, to plan out the mouth movement. I'll try to be as thorough as I can in documentation and provide assistance here as much as possible.

 

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

 

OSA will come with default form lists so the mod has sounds without anyone adding to it. If you wanted to add a new sound pack let's say for voice during sex, you'd make a new form list in a new esp with new sound files and sound markers, link up the sounds then put them all in the form list. You'd record the FormID in the creation kit of the FormList.

 

Once that is done you apply it by typing in the FormID of the formlist into an XML file. There's 2 places you could add it:

1. You could add it to a default identity that is mixed in at random, or the main default file if there's only one.

 

2. You could add it to the unique identity for a specific npc so only they used that voice pack.

 

The system suits more in favor of custom followers, custom npcs, story lines etc. as then the esp would already have to exist to include the formlist in. In the cases of just adding sound packs it's a little less elegant as an esp would have to be made to house just the sound pack expansion, there's no way around adding in new sound files without an esp that I know so I don't see another way around that requirement since sound forms would have to be made to add new sounds anyways. A full sound pack would be a really nice asset and enhancer so I don't think anyone would mind the added esp and potentially coordinating could be done to combine them up into one major sound booster (as much as possible).

 

Identity for face and other things is the same format but easier in that it doesn't need forms so it's only one step instead of 3 and doesn't require an esp at all to adjust faces for the default or for a unique npc.

 

 

 

Link to comment

I have a side question about Papyrus you might know the answer to:

 

Is there a way to get EquipItem to work on the player character in TFC camera mode? It works fine on NPCs. But, once you unequip something from the player character it doesn't show on the character until you leave TFC mode. Seems like there must be some kind of refresh command. Or, maybe it has something to do with SOS?

Link to comment

I have a side question about Papyrus you might know the answer to:

 

Is there a way to get EquipItem to work on the player character in TFC camera mode? It works fine on NPCs. But, once you unequip something from the player character it doesn't show on the character until you leave TFC mode. Seems like there must be some kind of refresh command. Or, maybe it has something to do with SOS?

 

Pip thanks for the help on the Actionscript,

 

I have the problem as well, something caught my eye the other day like ninodeupdate() command (which I think will only fix up the face if certain things are changed), I think I saw something that might potentially force the game to update equipment. OSA has the issue as well that you are talking about where the player doesn't always visually have their equipment removed. My body system has the same problem at times because I layer equipment with priority for enhanced stripping without worrying about clipping but under certain circumstances it doesn't give a F about priority and loads both and needs some kind of hard refresh.

 

Maybe we're talking about something different though, once you leave TFC the changes are made? I've noticed a good portion of stuff just stops working in certain camera modes, if you're in first person during OSA like a ton of the features just don't get process. Honestly no idea why, even key presses and debug.animationevent seem to not work sometimes. TFC though I haven't noticed anything and I hadn't tied in the issue of equipment not being visually removed when it is actually off on the player to TFC mode so potentially there is some kind of mod conflict here. 

 

I have to look through my notes on where I found it, potentially it is DLL related and it's something I found poking around in C. It might not be possible and just a constant bug of Skyrim, I didn't test what I found it just sounded hopeful. Let me see if I can find what it was and I'll post it.

Link to comment

 

I have the problem as well, something caught my eye the other day like ninodeupdate() command (which I think will only fix up the face if certain things are changed), I think I saw something that might potentially force the game to update equipment. OSA has the issue as well that you are talking about where the player doesn't always visually have their equipment removed. My body system has the same problem at times because I layer equipment with priority for enhanced stripping without worrying about clipping but under certain circumstances it can't load and needs some kind of hard refresh, In terms of the player luckily putting something on updates them but in terms of an NPC it takes a loadscreen I find.

 

Maybe we're talking about something different though, if you leave TFC the changes are reflected? I've noticed a good portion of stuff just stops working in certain camera modes, if you're in first person during OSA like a ton of the features just don't get process. Honestly no idea why, even key presses and debug.animationevent seem to not work sometimes.

 

I have to look through my notes on where I found it, potentially it is DLL related and it's something I found poking around in C. It might not be possible and just a constant bug of Skyrim, I didn't test what I found it just sounded hopeful. Let me see if I can find what it was and I'll post it.

 

 

I think that my issue is slightly different. Unequip seems to work fine. But, equipping doesn't show while in TFC. But, as soon as you turn TFC off it updates and the equipment is there. NPCs work fine even in TFC mode. Equipment goes on and off.

 

There is "QueueNiNodeUpdate". I tried that and it didn't work... I turned SOS off and then unequip stopped working also.

 

-----------

 

I think that I botched the explanation of pointers earlier. It sounds like there is more going on that you should correct:

 

You do want to avoid having properties on multiple classes pointing to the same thing. Instead, you should make references to the original thing:

 

Don't do this:

class Bread
{
   public var slices:Number = 20;

   public function Bread()
   {
      var butter = new Butter(this);
   }
}

class Butter
{
   private var slices:Number;

   public function Butter(bread)
   {
      slices = bread.slices;
   }
}

Instead, do this:

class Bread
{
   public var slices:Number = 20;

   public function Bread()
   {
      var butter = new Butter(this);
   }
}

class Butter
{
   private var myBread:Bread;

   public function Butter(bread)
   {
      myBread = bread;
   }

   private function eatSlice()
   {
      bread.slices--;
   }
}

See the difference?

Link to comment

Sorry... My fault... Haven't seen that you put a doc in the packet to change the keybindings. Great.. I will download it soon and test it... *a big hug* :)

 

Hi Ly,

It might not work I've had reports from people who don't have access to the num0 at the start that the rebinding doesn't work either but if you want to try it I'd like that to see if you're able to rebind. I'm able to do it mine and not sure what could be causing it to not work in some cases so feedback on it will help. It most likely will but I'm sorry if it doesn't!

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