• Announcements

    • Ashal

      SITE MOVED - IN READ ONLY MODE   12/08/2015

      Please use http://www.loverslab.com moving forward. Site has been restored to a previous version, and this one placed into a read-only mode. This is available for a limited time so users may reference/copy content that has been lost in the transition. This will no longer be accessible by December 22nd, 2015.
prideslayer

SexoutNG - Beta (2.10.93b10) release thread

1,519 posts in this topic

Not even sure if you can consider this a bug, but using sexout system and exit and load another save game will transport you to room with no floor. :D so the only fix is fully exout fallout new vegas and and then run it again. Can something be done about this or is it something we need to live with ??

0

Share this post


Link to post

2.8.90Beta2 in OP

Changes:

- All items (Armor, Ammo, Weapon, Misc) in main item formlist. Modders should add items they want removed to this list, via a script. Cleanup is called during Unlock, at the end of an act.

- Cleanup UDF now removes all items in the main sexout item formlist.

- Added some ZAZ items I missed before, somehow.

Modders, the list in question is "SexoutItemsList". As usual, do not add things to this list via the GECK, as that overrides the record in Sexout.ESM -- use a script to add items. Any items you add will be removed from the actor when the scene is completed and the actor is being unlocked.

0

Share this post


Link to post

So basically I am some kind of absentminded idiot today. Everything is already in DATA. I'm removing it from CORE now and will update the beta2 download in a moment.

0

Share this post


Link to post

2.8.90Beta2 in OP

Changes:

- All items (Armor, Ammo, Weapon, Misc) in main item formlist. Modders should add items they want removed to this list, via a script. Cleanup is called during Unlock, at the end of an act.

- Cleanup UDF now removes all items in the main sexout item formlist.

- Added some ZAZ items I missed before, somehow.

Modders, the list in question is "SexoutItemsList". As usual, do not add things to this list via the GECK, as that overrides the record in Sexout.ESM -- use a script to add items. Any items you add will be removed from the actor when the scene is completed and the actor is being unlocked.

(Just the bare ESM this time, as it should be.)

0

Share this post


Link to post

2.8.90Beta3 in OP

Changes:

- fnSexoutActRunFull -- This is a standalone UDF you can call to prep, set, and run an act all at once. It takes a single argument, a (string)map array. See the wiki for more details.

Ok so this one bears a little explanation, and demonstration is usually the easiest way to explain, so lets start with an example. In the SexoutNGDoPlayerVaginal spell script, I've replaced all of this:

set self to GetSelfcall fnSexoutActPrepcall fnSexoutActSetInt "isVaginal" 1call fnSexoutActSetRef "actorA" selfcall fnSexoutActSetRef "actorB" playerRefcall fnSexoutActRun
With this single line:

call fnSexoutActRunFull ar_Map "actorA"::0 "actorB"::playerRef "isVaginal"::1
That alone should explain to y'all just what this UDF does and is for, with one exception. At a suggestion (and a brilliant one, I might add), you pass in an integer (any will do, I use 0 by convention) for an actor reference that you want to be substituted by GetSelf.

You should ONLY do this in places where GETSELF actually makes sense. This UDF calls GetSelf for you when it sees an integer, which will fail spectacularly if called from a normal quest script, token script, etc.

The main reason behind this is that dialog result scripts cannot safely declare variables, and both UDFs and the NX functions cannot evaluate an expression -- you cannot pass "getself" to them as a parameter, you must pass the actual parameter value.

So again in summary:

1. You can use this UDF anywhere you want, in any script, as a "one shot" way of starting an act. You can even build the array it takes as a parameter elsewhere as a normal array_var and pass that in.

2. If you are in a place where "getself" would normally work, you can pass in an integer to any of the actor vars, and UDF will call getself for you.

0

Share this post


Link to post

Bumped to Beta4.

Missed actorX in the new UDF in Beta3.

0

Share this post


Link to post

I'm using the new ZAZ ref-surfacing for a script heavy orgy:


 


1) Making a ref-surface ZAZ call with a mismatched animation number for the static prop seems to crash the game.


 


This is easier to do than it might sound, because there are several different versions of the pillory, post, etc, and the correct one for each animation isn't specified anywhere (that I know of).


(scof logs:)



 


 


2) ZAZ animation 601 (Super mutant pillory) is misaligned- actorB misrotated 180 degrees. Perhaps this was always the case, I have never tested it before now.

post-158171-0-08125000-1421104927_thumb.


 


3) ZAZ animation 230 (Boxed Bitch: Gomorrah) is misaligned, Actors seems to be elevated slightly in Z-axis.

post-158171-0-63096000-1421105063_thumb.


post-158171-0-08125000-1421104927_thumb.

post-158171-0-63096000-1421105063_thumb.

wqeqqq.txt

nopw11a.txt

0

Share this post


Link to post

Thanks Odessa, I'll look into them.

I know there are a bunch of different ones that look the same and honestly I couldn't tell the difference between them at first. It might be that some are spun 180deg from the other or something for some reason. I know some have collision enabled on them, while others don't, so you can walk through them when they're placed..

You're making heavier use of it than anyone has so far so unfortunately, you get to run into all the rough edges first. I'll check out those two and get them fixed soon.

0

Share this post


Link to post

Will calling GetSelf in a UDF that itself has been called from a dialogue result return the Subject ref? I've got my own UDF for a mod variation I'm planning on releasing shortly that works and acts in a similar way to fnSexoutActRunFull but I've been passing on my variables via code like this:



array_var vars
ref rbuf
let rbuf := GetSelf

let vars := Ar_Map "ActorA"::rbuf, "ActorB"::PlayerREF, "SexType"::"Anal", "Give"::"Get", "Position"::"Spoon", "CBSpellA"::SexoutCertAfterTrigger
call fnSexoutCertifiedRufusSex vars

I'd love to get rid of those variables in the result script if I'm able to, fnSexoutActRunFull itself is going to get rid of about 10 variables in my scripts and heavily simplify my code. 


 


0

Share this post


Link to post

Yes that works fine. Also check the current beta, there's a new UDF you can use there that does the same thing basically, without the need for getself. fnSexoutActRunFull.

You call it with an ar_map basically just like you're doing, but if you want it to use getself, just pass in an integer for that actor; e.g. "ActorA"::0.

The UDF will replace that with getself when called. It does the prep/set/run for you.

Edit: The current beta being this one. ;)

1

Share this post


Link to post

Yes that works fine. Also check the current beta, there's a new UDF you can use there that does the same thing basically, without the need for getself. fnSexoutActRunFull.

 

My UDF script has its own animation selection code, it pulls a list from a nested series of string arrays stored in the main quest that uses specific keys for each animation type.

 

Right now the arguments passed on by the array are stored in additional variables, it checks to see if theres a specific key in the array via Ar_HasKey and then does the normal Sexout calls, with fnSexoutActRunFull I can just pass on the initial array after removing my custom entries used for specific dialogue topics, it'll get rid of about 40-50 LOC from my UDF since I won't have to do the checks for CBSpell and the other SO arguments.

 

I'm loving this new function from an efficiency standpoint.  

0

Share this post


Link to post

You don't even have to remove your entries, as long as they don't conflict with sexout options. Sexout only cares about sexout stuff. The beauty of arrays. ;)

0

Share this post


Link to post

Is it possible that an act that fails to execute or perhaps be cleared out for whatever reason can stop a new act from happening if called from the same calling script? I have a report in the SexoutLust thread where NG prints out


 


fnSAP: WARNING! Caller 4A000ADF (<no name>) already has an act prepped, gonna get sideways!


 


and can't come up with another explanation atm. The act is called by a UDF, in turn called by a spell script cast from dialog, but I'm pretty confident it isn't accidentally calling it twice.


0

Share this post


Link to post

Hmm.

That error/warning means that Prep was called, but Run wasn't before Prep was called again, so you're getting a union of all the Sets from both Preps.

If your script knows that Run wasn't called, but Prep was, you can call fnSexoutActReset before the next call to Prep.

If you DID call run, but it somehow failed and left the act prepped.. that's going to take some digging to figure out.

0

Share this post


Link to post

The calling script only has one prep in it.

 

scn LUSTSexCall



ref ActorA
ref ActorB
int isRape

ref rLucky
ref rHelper
int iRand
int iPassOK

Begin Function {ActorA ActorB isRape}

if ActorA.NX_GETEVFL "Lust:Act:Tracked"
    let rLucky := ActorA
    let rHelper := ActorB
elseif ActorA.NX_GETEVFL "Lust:Act:Scanned"
    let rLucky := ActorB
    let rHelper := ActorA
endif
ActorA.NX_CLrEVFL "Lust:Act" 2
let iRand := GetRandomPercent + 1
if (rLucky.GetIsSex Male) && (NX_IsInList LustSameSexOK rLucky)
    let iPassOK := 1
elseif rLucky.GetIsSex Female
    let iPassOK := 1
endif
set LustQst.rLinedUp to 0
call fnSexoutActPrep
if isRape == 1
    call fnSexoutActSetRef "raper" rLucky
endif
if iRand <= LustQst.iOralF
    call fnSexoutActSetRef "ActorA" rLucky
    call fnSexoutActSetRef "ActorB" rHelper
    call fnSexoutActSetInt "IsOral" 1
    call fnSexoutActRun
    return
elseif iPassOK
    call fnSexoutActSetRef "ActorA" rHelper
    call fnSexoutActSetRef "ActorB" rLucky
else
    call fnSexoutActSetRef "ActorA" rLucky
    call fnSexoutActSetRef "ActorB" rHelper
endif

if (iRand > (100 - LustQst.iAnF)) || ((rLucky.GetisSex Male) && (rHelper.GetIsSex Male))
    call fnSexoutActSetInt "IsAnal" 1
else
    call fnSexoutActSetInt "IsVaginal" 1
endif
call fnSexoutActRun

End

0

Share this post


Link to post

Oh I'm sure it only prepped once, but did perhaps your script crash between calling prep and run, and then later on run again and call prep?

I've looked at the run script and can't see any way that a prepped act can be left around if run is called, even if the act doesn't succeed, unless run itself crashed before clearing the act.

0

Share this post


Link to post

It's possible but I'm not really spotting anything crash-prone in it. I didn't put much in the way of debug in it because of that. Acts called by a different UDF handling masturbation seem to work fine though so my theory probably doesn't add up.


0

Share this post


Link to post

Yeah there's not a lot of logging going on in Run either because it's so simple, there's really little that can go wrong. I'll add a debug line in at the start, and one at the end for cleanup, so you can see for sure if it's run that's crashing or not. Give me a few minutes and I'll update the beta.

0

Share this post


Link to post

Ok, beta5 is up in the OP. This adds two sexout debug messages to run. One at the start (3rd line in the block):

let rCaller := GetCallingScriptset iCaller to rCallerDebugPrint "fnSAR: Starting for %x8" iCaller
One at the end, last line in the block UNLESS run is called on an unprepped act, which results in the normal message.

DebugPrint "fnSAR: Completed for %x8" iCaller
0

Share this post


Link to post

Doc, if you're in your code messing around with acts using the sexout UDFs, you could also switch to the one-shot UDF which will shorten your script up quite a bit.

For example:

call fnSexoutActRunFull ar_map "actorA"::someRef "actorB"::playerRef
I documented this a few pages back. It's only in the beta right now but I plan on taking it live today to get that UDF into production. I haven't forgotten about the token stuff either, just busy with BodyMorph before and now NX.
0

Share this post


Link to post

I'm aware of it, seems handy - but for SexoutLust it's better if it set things separately as in the script above, with ActorA or B depending on who is actually the horny one, sex type options like "anal" depending on genders, sexual orientation and who'd be the dominant one etc. Not much advantage in switching over in this case, I believe.


 


I'll add some more debug to my own, and hopefully get the reporter to do another log.


0

Share this post


Link to post

Jaam! We need real expression evaluation! And ternary operators!

 

all fnSexoutActRunFull ar_map "actorA"::(call getHorniest) "actorB"::(call getValidPlayerOrCompanion)
Wouldn't this be slick?!

*ducks*

0

Share this post


Link to post

v90 has been promoted to release. CORE updated in the official thread.

0

Share this post


Link to post

So... I got a new log back about that issue - the LustSexCall UDF worked fine this time, but the MastCall UDF now gets this 'already prepped' readout. I kinda forgot to tell him to turn on NG's debugmode too however.

 

The masturbation call is so simple I can't imagine any script crash (would be a good candidate to be replaced by a FullRun line):

 

let rSelf := GetSelf
DebugPrint "LustMastCall called on %n, %i" rSelf rSelf
call fnSexoutActPrep
call fnSexoutActSetRef "ActorA" rSelf
call fnSexoutActRun
 

Mystery abounds.

0

Share this post


Link to post

I've been keeping an eye on that thread, though haven't downloaded any of the files. Without the SO debug enabled.. well.. you know.. heh. ;)

Where is your script being called from? Importantly, is it in an ever problematic quest or dialog result script? I ask because there is a rare but possible edge case with the prep/set/run UDFs in those cases that I've tried to keep everyone aware of, that isn't present in any of the other interfaces (including fullrun).

0

Share this post


Link to post
Guest
This topic is now closed to further replies.