-
Announcements
-
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.
-
-
Content count
1,682 -
Joined
-
Last visited
Posts posted by astymma
-
-
Just wanted to point out that SexoutPositioning functions as both a guide to using NX Vars AND as a guide to utilizing the callback system... specifically to obtain information you're discussing.
Here's SexoutPosBEMainS which does the heavy lifting:
scn SexoutPosBEMainS
ref rActor
ref rTemp
ref rTarget
int iAbort
float fTemp
int iStage
float fTimer
int iQuiet
int iPlayerInvolved
int iDispel
Begin ScriptEffectStart
set rActor to GetSelf
if rActor
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: BEMainS starting on Actor:(%i)[%n]" rActor rActor
endif
else
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: BEMainS starting on NULL Actor... Aborting."
endif
set iAbort to 1
set iStage to 2
return
endif
set rTemp to rActor.NX_GetEVFo "Sexout:Start::spellTarget"
if rActor != rTemp
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: BEMainS cast on different actor(%i)[%n] than SexouNGBegin(%i)[%n]. Switching to SpellTarget to get NX Vars. Continuing." rActor rActor rTemp rTemp
endif
set rActor to rTemp
else
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: BEMainS cast on same actor as SexouNGBegin(%i)[%n]. Continuing." rActor rActor
endif
endif
if rActor == Player
set fTimer to 0
set iStage to 0
set iQuiet to 0
set rTarget to rActor
;start with NULL state
rActor.Dispel SexoutPosSpMonitor
rActor.Dispel SexoutPosSpReset
rActor.Dispel SexoutPosSpTerminate
else
set rTemp to rActor.NX_GetEVFo "Sexout:Start::actorA"
if rTemp
;start with NULL state
rActor.Dispel SexoutPosSpMonitor
rActor.Dispel SexoutPosSpReset
rActor.Dispel SexoutPosSpTerminate
endif
if rTemp == Player
set iPlayerInvolved to 1
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: Actor not player but Actor A is... recasting on A."
endif
set rTarget to rTemp
endif
set rTemp to rActor.NX_GetEVFo "Sexout:Start::actorB"
if rTemp
;start with NULL state
rActor.Dispel SexoutPosSpMonitor
rActor.Dispel SexoutPosSpReset
rActor.Dispel SexoutPosSpTerminate
endif
if rTemp == Player
set iPlayerInvolved to 1
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: Actor not player but Actor B is... recasting on B."
endif
set rTarget to rTemp
endif
set rTemp to rActor.NX_GetEVFo "Sexout:Start::actorC"
if rTemp
;start with NULL state
rActor.Dispel SexoutPosSpMonitor
rActor.Dispel SexoutPosSpReset
rActor.Dispel SexoutPosSpTerminate
endif
if rTemp == Player
set iPlayerInvolved to 1
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: Actor not player but Actor C is... recasting on C."
endif
set rTarget to rTemp
endif
if 0 == rTarget
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: Player is not actor A, B or C or NX Vars are missing from (%i)[%n]... Aborting." rActor rActor
endif
set iStage to 2
set iAbort to 1
set iQuiet to 1
if rActor
;return actor to NULL state
rActor.Dispel SexoutPosSpMonitor
rActor.Dispel SexoutPosSpReset
rActor.Dispel SexoutPosSpTerminate
endif
return
else
;start with NULL state
set SexoutPosActive to 0
endif
endif
End
Begin ScriptEffectUpdate
if 1 == iDispel
return
endif
if 0 == iStage
if fTimer < 5.00
set fTimer to (fTimer + ScriptEffectElapsedSeconds)
return
else
set iStage to 1
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: Timer elapsed, moving on."
endif
return
endif
endif
if 1 == iStage
set rTemp to rActor.NX_GetEVFo "Sexout:Start::actorA"
if rTemp
set SexoutPosQVars.rActorA to rTemp
set SexoutPosQVars.iHasA to 1
set fTemp to rTemp.NX_GetEVFl "Sexout:PosX"
set SexoutPosQVars.PosOrigAX to fTemp
set fTemp to rTemp.NX_GetEVFl "Sexout:PosY"
set SexoutPosQVars.PosOrigAY to fTemp
set fTemp to rTemp.NX_GetEVFl "Sexout:PosZ"
set SexoutPosQVars.PosOrigAZ to fTemp
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: Actor A(%i)[%n] found, PosOrigA values set." rTemp rTemp
endif
else
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: Actor A not found, PosOrigA values not set."
endif
endif
set rTemp to rActor.NX_GetEVFo "Sexout:Start::actorB"
if rTemp
set SexoutPosQVars.rActorB to rTemp
set SexoutPosQVars.iHasB to 1
set fTemp to rTemp.NX_GetEVFl "Sexout:PosX"
set SexoutPosQVars.PosOrigBX to fTemp
set fTemp to rTemp.NX_GetEVFl "Sexout:PosY"
set SexoutPosQVars.PosOrigBY to fTemp
set fTemp to rTemp.NX_GetEVFl "Sexout:PosZ"
set SexoutPosQVars.PosOrigBZ to fTemp
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: Actor B(%i)[%n] found, PosOrigB values set." rTemp rTemp
endif
else
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: Actor B not found, PosOrigB values not set."
endif
endif
set rTemp to rActor.NX_GetEVFo "Sexout:Start::actorC"
if rTemp
set SexoutPosQVars.rActorC to rTemp
set SexoutPosQVars.iHasC to 1
set fTemp to rTemp.NX_GetEVFl "Sexout:PosX"
set SexoutPosQVars.PosOrigCX to fTemp
set fTemp to rTemp.NX_GetEVFl "Sexout:PosY"
set SexoutPosQVars.PosOrigCY to fTemp
set fTemp to rTemp.NX_GetEVFl "Sexout:PosZ"
set SexoutPosQVars.PosOrigCZ to fTemp
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: Actor C(%i)[%n] found, PosOrigC values set." rTemp rTemp
endif
else
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: Actor C not found, PosOrigC values not set."
endif
endif
set rTemp to rActor.NX_GetEVFo "Sexout:Start::spellTarget"
if rTemp
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: rActorOrig being set to spellTarget(%i)[%n]" rTemp rTemp
endif
set SexoutPosQVars.rActorOrig to rTemp
else
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: spellTarget is NULL, unable to set rActorOrig... Aborting." rTemp rTemp
endif
set iAbort to 1
set iStage to 2
return
endif
if 1 == SexoutPosQVars.iHasB
set rTemp to SexoutPosQVars.rActorB
set SexoutPosQVars.rActorCur to rTemp
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: rActorCur being set to B:(%i)[%n]" rTemp rTemp
endif
else
if 1 == SexoutPosQVars.iHasA
set rTemp to SexoutPosQVars.rActorA
set SexoutPosQVars.rActorCur to rTemp
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: rActorCur being set to A:(%i)[%n]" rTemp rTemp
endif
elseif 1 == SexoutPosQVars.iHasC
set rTemp to SexoutPosQVars.rActorC
set SexoutPosQVars.rActorCur to rTemp
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: rActorCur being set to C:(%i)[%n]" rTemp rTemp
endif
else
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: iHasA, iHasB, iHasC all set to False. Can't set rActorCur. Aborting."
endif
set iAbort to 1
set iStage to 2
return
endif
endif
set iStage to 2
return
endif
if 2 == iStage
if 1 == iAbort
if 0 == iQuiet
ShowMessage SexoutPosMsgAbort
endif
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: Generic Abort... check previous console messages for cause."
endif
set iDispel to 1
rActor.Dispel SexoutPosSpMain
else
if SexoutPosQVars.iDebug
printtoconsole "SexoutPos: BEMainS completed successfully... dispelling SpMain on actor(%i)[%n] and casting SpMonitor on actor(%i)[%n]" rActor rActor rTarget rTarget
endif
if rTarget != Player
printtoconsole "SexoutPos: BEMainS completed successfully but rTarget(%i)[%n] is not the same actor as the Player... Aborting." rTarget rTarget
set iAbort to 1
set iStage to 2
return
endif
rTarget.CIOS SexoutPosSpMonitor
set iDispel to 1
rActor.Dispel SexoutPosSpMain
endif
endif
EndNote the spell target checks and such code designed to handle the spell not being cast on the actual spell target.
0 -
As far as I know, the suction cup artifact is fixed by Spells> Batch> Update All Tangent Spaces
1 -
I'm curious, you know a lot about what's "behind the scenes" concerning some commands. These things are not explained in the Beth guide, is there a place where I can find them?
Unfortunately, like I did... Google. Reading blogs, forums, GECK wiki talk pages... and my FAVORITE... finding out that the GECK wiki authors didn't write something in the GECK wiki if it was already written in the Oblivion CS wiki... fucking GRRR... like the talk pages... you know, the ones where scripters detail how the behavior has gotchas and give actual behavior as compared to expected behavior.
EDIT: Oh... and I'm a programmer with over 30 years of experience writing code... that helps too
0 -
AJ, the main reason I stated MoveTo updates the 3d Scene Graph is that when a call updates the graph it blocks thread execution until it completes. MoveTo , unless the Player is the one being moved, immediately performs the move and updates the graph... this transfers control AWAY from your script to the rendering engine. Basically, ANY command which updates the scene graph will be the LAST command executed in a script THAT frame. The engine will try to get back to your script in the normal scheduling of script time and execute what came after that call... maybe. More likely it will run the script as if it were a new frame of execution.
Typically you solve this by updating a stage variable and then doing a MoveTo. When your script receives control again, the updated stage variable moves execution after the MoveTo to finish what needs to be done.
Your pseudo code might be:
Begin
int StageVar
if StageVar == 0
Do I need to move?
No = return
Yes = set StageVar = 1, Move NPC
elseif StageVar == 1
Run a Timer for a couple of seconds
Timer Complete?
No = keep running timer
Yes = set StageVar = 2
elseif StageVar == 2
Set StageVar = 0
Perform Cleanup (Disable, MarkForDelete)
Endif
End
0 -
In fact you may want to try something like:
If (MyFollowerREF.GetDistance Player > SomeDistance)
if (IsReference MyMarkerReference)
MyFollowerREF.MoveTo MyMarkerReference
else
set MyMarkerReference to player.placeatme XMarker 1
endif
else
if (IsReference MyMarkerReference)
MyMarkerReference.Disable
MyMarkerReference.MarkForDelete
else
return
endif
endif
1 -
As far as I know, the distance and direction parameters to PlaceAtMe don't work. The engine finds the nearest safe location and places the copy there. Although it may take the direction as a hint and try to put it there...
I would not do the following:
MyFollowerREF.Moveto MyMarkerReference
MyMarkerReference.Disable
MyMarkerReference.MarkForDeleteI would do this:
integer iDoCleanup
if (IsReference MyMarkerReference)
MyFollowerREF.Moveto MyMarkerReference
set iDoCleanup to 1
endif
...
;different stage of script
if (1 == iDoCleanup)
MyMarkerReference.Disable
MyMarkerReference.MarkForDelete
endifMoveTo causes an update of the 3d Scene Graph and will thus take many frames to complete.
0 -
What are your random issues?
A few things to remember about PlaceAtMe...
- It takes a few frames for the function to complete. (MyReference could evaluate as true and still NOT point to an existing in world object... for a few frames)
- If you pick up the item created, the reference is now invalid. (i.e. player picks it up and puts in inventory).
- Many reference types will be unloaded on cell reset if created by PlaceAtMe.
0 - It takes a few frames for the function to complete. (MyReference could evaluate as true and still NOT point to an existing in world object... for a few frames)
-
I don't think any kind of consumable (food, medicine, alcohol, caps, ammo) in inventory has a reference, but I could be wrong.
If they do, they'll all start with FF and be fairly useless references to save in a variable... since they'll change frame to frame at the whim of the engine.
0 -
Yeah, I initially advised using 0 to initialize refs but also mentioned that if that doesn't work, try ANY constant reference... playerRef should be fine... though I'd probably use a reference unlikely to be edited ( an XMarker you place in your own mod in a closed, unreachable cell for example). Or one that is unrelated to your task... if you are gonna store an actor in it dynamically, use something OTHER than an actor as your constant. Helps with debugging.
0 -
As long as you follow a procedure of initializing your local variables to a CONSTANT before then applying a DYNAMIC value to them, you should be fine...
Like so:
ref DangerousREF
set DangerousREF to SafeConstantREF; constant assigned
...
set DangerousREF to GetActionRef; dynamic return value assigned
1 -
The hard part... putting the token BACK in the container....
0 -
ContainerRef.RemoveAllItems ActorREF 0 1
That moves all items from a container and gives them to the actor. The only actual MOVE of the object functions. Everything else is a copy and/or destroy.
EDIT: RemoveAllTypedItems also is a MOVE. RemoveItem is a delete.
2nd EDIT: Oh and YES... the method you discussed is the only way AFAIK to have dynamic mobile quest targets.
1 -
You can obtain the editor location reference id of any reference by preceding the reference with "ref.". It's shorthandJust when I think I'm starting to know shit, astymma walks in

Come to think of it, other than startconversation, I can't think of a function that specifically requires or takes editor refIDs.
I think the reason why StartConversation specifically takes those IDs is to facilitate pathing. Having the refIDs allows the engine to not have to traverse the Scene Graph to find the pertinent navmeshes for pathing. It has reference to them from the call. It can immediately start working on pathing the actor to the target.
Specifically, I believe that when the editor ref is loaded, it's kept updated by the engine in real time in memory. Providing the reference gives the current information for the actor. It's why prefacing a reference with "ref." is useful. Alternatively, if that's not correct... then it's used as a shortcut into the pathing algorithm... what we call in AI a pathing hint. It shears leaves off the binary search tree.
0 -
SmallerTalk actually uses this:
refHolder.StartConversation player, SmallerTalkGreeting ref.refHolder ref.Player 1 1refHolder being the holder of the token
Basically...
The holder of the token is refHolder, it calls StartConversation...
the player is the one who will be targeted...
refHolder will use topic_id of SmallerTalkGreeting when conversation is initiated...
the starting location reference if movement is required is ref.refHolder...
the ending location reference if movement is required is ref.player...
head tracking is allowed so the NPC looks at the player during the process...
because movement to the target is permitted.
You can obtain the editor location reference id of any reference by preceding the reference with "ref.". It's shorthand.
Using the location refs is what allows SmallerTalk to permit movement of speaker towards target even through cell transitions.
The point being that the call is neither "mental" nor "superfluous"... but required...
1 -
By default the engine determines B's current rotation and uses that as the base. It then turns A 180 degrees to face B. If there's a C, it's given the same rotation as B.
0 -
The base Sexout install includes the male erect nifs in a BSA file. Depends on which body you chose during installation but you'll have either "Sexout - Breezes.bsa" or "Sexout - Roberts.bsa". Unless, of course, you chose the install no body, I'll install my own body option.
0 -
Well I don't want it to be "easy" I just don't like having to wait on some chance conversation to only have a possibility of getting it rather than simply activating some dialogue to attempt it. But anyway, thanks for the help, I'll look around and see what I can come up with.
Your best bet is SexoutSex. It's the Generic, no failure, sex dialogue mod.
0 -
Would love to see this ported into FONV. The old MAC mod made the attempt at adding a porn studio in Freeside, but the quests that went along with it were fairly detached and didn't really lead anywhere. For as much Sexout content we have for NV now, its surprising something like a porn studio and strip clubs haven't been made yet for the Strip and surrounding areas.
There's a revised version of MAC here. It contains a lot more content. I would only really use it if you're comfortable using FNVEdit to merge lists and NPC records though as it requires Lings , NCCS and FoxyFiends (a fiend overhaul) in addition to wsex. It's by the guy who made Love Shacks and Art of Seduction and Marriage (both fairly good quest mods).
Basically, if you play a male PC, these mods are great for adding content... and god knows male content is hard to find, sadly.
0 -
No sex pics just yet since I'm having a hard time to get any sexmod working properly with Groovatron.
Check this link, korea227.
Or my original post that that one was based on.
0 -
This chilled the f* out of me man, beautiful music: beautiful video. Definitely 10/10/

Which is why I love listening to it... perfect for just chilling...
0 -
Each animation has a priority. Animations with equal priority play the last one assigned. So, to play an animation that ONLY animates say the face on top of an animation that animates everything, play the single modifier animation after the multipart animation.
1 -
I couldn't get the facial Morphs to stay on during animations; they would reset instantly
back to the vanilla (lack of) expression before I could even attempt to move the camera into
position. The only issue with the facial Expressions are these bright white elongated triangular
artefacts that appear next to characters in some poses, particularly open-mouth poses... that and
you can't get the mouth open far enough to get a dick in without clipping on the lips. Those
dicks are just too damn big... :0
If you engage the facial expression during animation the character will reset position briefly to a
standing idle, but will return to the animated position after a few seconds, so no harm done. The
Positioning mod really comes in handy for oral stuff.
The T-pose of almost every animation has an expression assigned. It's the T-pose expression. Unfortunately it resets any current idle you're playing as an expression. Generally you want the animation you want to modify to be playing and then apply your modified expression.
0 -
-
As far as I know you absolutely must be in third person AND have tfc active... follow the FAFF instructions listed at the page I linked. Also note that nothing will happen to the player until the console is closed usually.
0

Sexout, facial expressions, and you
in Fallout Technical Support
Posted
I think with Scanti's tools you could create OBJ files of all the expressions you need and then simply append them to the head tri as available expressions.
Basically:
Just a thought.
EDIT: Er, assuming the expressions achieved through dialogue being played during the sex act still works...
EDIT: Attached my instructions I typed up for messing with expressions in TRI files ( was for Head06)