• 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.

astymma

Contributor
  • Content count

    1,682
  • Joined

  • Last visited

Posts posted by astymma


  1. There is an anim var.  Pride told me to set it in addition to setting animA, etc., when something I was doing didn't work.  They're doing different things, but the animation kf for each pose is combined into an anim number group.

     

    EDIT:  The exception to that being Actor X, who is a bystander/next in line and with whom I've never worked with.

    0

  2. They ARE cleared from the SexoutNG *quest* variables.


     


    However, they ARE written to the actor involved in the sex act labelled as the "spellTarget".


    The "spellTarget" NX Var is written to all actors in the sex act.


     


    So... assuming this is a script for a spell added to the callback list for sex act START...



    ref ActorInvolvedREF
    ref SpellTargetREF
     
    ref refNXVar1
    ref refNXVar2
    ref refNXVar3
    float fNXVar4
    float fNXVar5
    float fNXVar6
     
    Begin ScripEffectStart
     
        set ActorInvolvedREF to GetSelf
        set SpellTargetREF to ActorInvolvedREF.NX_GetEVFo "Sexout:Start::spellTarget"
     
        ;start obtaining NX_Vars
        set refNXVar1 to SpellTargetREF.NX_GetEVFo "Sexout:Start::BlahBlah1"
        set refNXVar2 to SpellTargetREF.NX_GetEVFo "Sexout:Start::BlahBlah2"
        set refNXVar3 to SpellTargetREF.NX_GetEVFo "Sexout:Start::BlahBlah3"
        set fNXVar4 to SpellTargetREF.NX_GetEVFl "Sexout:Start::BlahBlah4"
        set fNXVar5 to SpellTargetREF.NX_GetEVFl "Sexout:Start::BlahBlah5"
        set fNXVar6 to SpellTargetREF.NX_GetEVFl "Sexout:Start::BlahBlah6"
     
    End ;ScriptEffectStart

    1

  3. Check out the SexoutPositioning mod in my sig. Small esp and contains callback usage, nx var usage, and usage of the positioning support built into the anim script of Sexout. Makes a good practical example.


     


    In particular, it shows how to:


     


    • use the callbacks to cast a spell on sex activation
    • obtain the current spellTarget of the sex act
    • obtain nx var information from the spellTarget ref
    0

  4. Um, I feel like quoting the Lyrics from "Broken Hearts are for Assholes" by Frank Zappa...

    Hey! do you know what you are?

    You're an asshole! an asshole!

    Some of you might not agree

    'cause you probably likes a lot of misery

    But think a while and you will see...

    Broken hearts are for assholes

    Broken hearts are for assholes

    Are you an asshole?

    Broken hearts are for assholes

    Are you an asshole too?

    Whatcha gonna do, 'cause you're an asshole...

    Maybe you think you're a lonely guy

    Maybe you think you're too tough to cry

    So you went to the grape,

    Just to give it a try

    And dagmar

    Without a doubt, the ugliest sonofabitch I ever saw in my life

    Was his name...

    One two three four!

    The whiskers sticking out from underneath of his

    Pancake make-up

    And yet he was a beautiful lady

    Nearly drove you insane

    Let's talk about leather: leatherrrrrr

    And so you kissed a little sailor

    Tex abel, starring in the latest shepperton production:

    Who had just blew in from spain

    Sir richard pump-a-loaf

    You sniffed the reeking buns of angel

    The story of a demented bread-boffer

    And acted like it was cocaine

    Cucumber pud annexed to a fine whole-wheat loaf

    You were dazzled by the exciting new costume of ko-ko

    Then on tuesday night, ceasar's back in town

    In a way you can't explain

    Facing off in a no-holds-barred tag team grudge match

    With kona.

    And so you worked the wall with michael

    Three-hundred-seventy-nine pounds of samoan dynamite

    Which gave your back an awful strain

    Volcanic hell

    But you came back on sunday for the gong show

    Next thursday, teen town's finest...

    But you forgot what I was sayin'

    'cause you're an asshole, you're an asshole

    That's right

    You're an asshole, you're an asshole

    Yes, yes

    You're an asshole, you're an asshole

    That's right

    You're an asshole, you're an asshole

    Now you been to the grape 'n' you been to the chest

    'n' now I think you know what you are: you're an asshole

    You say you can't live with what you been through

    Well, ladies you can be an asshole too

    You might pretend you ain't got one on the bottom of you,

    But don't fool yerself girl

    It's lookin' at you

    Don't fool yerself girl

    It's winkin' at you

    Don't fool yerself girl

    It's blinkin' at you

    That's why I say

    I'm gonna ram it, ram it, ram it

    Ram it up yer poop chute Corn hole

    Ram it, ram it, ram it

    Ram it up yer poop chute Fist fuck

    Ram it, ram it, ram it

    Ram it up yer poop chute Wrist-watch; crisco

    Ram it, ram it, ram it

    Ram it up yer poop chute

    Pud!

    Don't fool yerself, girl

    It's goin' right up yer poop chute

    Don't fool yerself, girl

    It's goin' right up yer poop chute (etc., repeats)

     

    Aw, I knew you'd be surprised...

    0

  5. Equipping/Unequipping is what I do in SmallerTalk. Since it does AddItem to add its conversation token I ran into the weapon bug too.


     


    So I have:





    scn SmallerTalkScript

    ref refTarget
    int intChecked
    ref refWeapon
    short doTimer
    float fTimer

    Begin GameMode

        if ((IsControlPressed 5) && (0 == doTimer))

            set intChecked to 0
            set refTarget to GetCrosshairRef
            
            if 1 == SmallerTalkVars.iVariable4 && 1 == Player.IsSneaking
                return
            endif

            if 0 == SmallerTalkVars.iVariable3 && 1 == refTarget.GetIsCreature
                return
            endif

            if 0 == reftarget.IsActor
                return
            endif

            if 0 == refTarget
                return
            endif

            if 1 == refTarget.GetDead || 1 == refTarget.IsInCombat
                return
            endif

            if refTarget.GetSleeping > 0
                return
            endif

            if ListGetFormIndex SmallerTalkIgnoreList refTarget >= 0
                return
            endif

            if refTarget.GetInFaction SmallerTalkIgnoreFaction == 1
                return
            endif

            set intChecked to 1

            set refWeapon to refTarget.GetEquippedObject 5

            if refWeapon
                refTarget.UnequipItem refWeapon 0 1
                set doTimer to 1
                set fTimer to .2            
            endif

            refTarget.AddItem SmallerTalkResetAIToken 1 1
            refTarget.AddItem SmallerTalkDialogueToken 1 1

            if 1 == SmallerTalkVars.iVariable2
                printtoconsole "SmallerTalk: Target under crosshair: %n", refTarget
                printtoconsole "SmallerTalk: FormID of Target: %i", refTarget
                printtoconsole "SmallerTalk: Value of intChecked: %.0f", intChecked
            endif        

            if 0 == intChecked
                set refTarget to 0        
            endif

        endif

        if 1 == doTimer
            if fTimer > 0
                set fTimer to fTimer - GetSecondsPassed
            else            
                set doTimer to 0
                set fTimer to 0
                refTarget.EquipItem refWeapon 0 1
            endif
        endif
        
    End ; GameMode

    Begin MenuMode 1075

        if 1 == intChecked
            if 0 == SmallerTalkVars.iVariable6
                set intChecked to 0
                refTarget.RemoveItem SmallerTalkResetAIToken 1 1
                refTarget.RemoveItem SmallerTalkDialogueToken 1 1
            endif
        endif

    End ; MenuMode


     


    Checks if they have a weapon... unequips it, does the additems for the tokens, runs a .2sec timer, re-equips it...


    0

  6. Is there some way to artificially force Sexout to treat a subject as the opposite gender for animation purposes? I've managed to transfer a half-decent lady penis onto an armor model.

     

    I believe you cast the two spells from Sexout called:

     

    SexoutSheMaleEffect to make Sexout think a female is a male for this sex act.

    SexoutHeFemaleEffect to make Sexout think a male is a female for this sex act.

     

    Fairly sure that the Sexout scripts check or IsSpellTarget for those two effects to see if they're running before setting the available gender of the actor for that sex act.

     

    So basically, set NX Callver, set NX Actor variables, CIOS applicable sexchange spell, CIOS SexoutBegin.

     

    OR... if it's clothing/armor, add it to the strapon list or the items not to be removed when having sex list.

    0

  7. The only thing I'd change in your code is to iterate your list without removing anything. Decrement (or increment) your index into the list instead each frame.


     


    Once you've completed processing, one frame per item, and the index goes below 0 (you're iterating (count-1) down to (zero)... or (zero) up to (count-1) in which case stop when index==count), empty the list in the cleanup stage.


     


    The whole point of this method is an outside process is saying "here's a list" and you want to go "thanks, but I'll just take a copy of it so I can work on it later".


     


    Also, take a look at "reference scripts" as well... for ways of processing scan results in a new script process for each scan result as it comes in.


    0

  8. Well, the solution I tend to recommend with any "list" of values is to store it. Especially something like scanner results.


     


    Often this involves brute force copying of values into a list... which isn't as memory intensive as iterating them and performing functionality on every one (as jaam mentioned previously as a bad thing, which I definitely agree with). You should try to think of iterating lists of values as a stack... unless you're using ListAddForm with an index defined, always a LIFO stack (last in first out). You pile things onto the stack all at once... then you can take things off, one at a time, at your leisure, and process them.


     


    What I generally do is this:


     


    Stage 1 = Copy all of my items into a list to be processed later.


    Stage 2 = Get the count of items in the list


    Stage 3 = Process One item from the list and decrement the count by 1 each frame until list is completed.


    Stage 4 = Clean up.


     


    This is the least intensive and least unstable method... it's also a play well with others method.


     


    This isn't to say that using label-goto is a bad idea... clearing a list is best done in that manner.


    0

  9. IMO you should never do a full loop through of a set of values in one frame unless it's a very small set... that's begging for trouble AND is an irresponsible usage of script time. Just think of how bad the game will run if everyone decides to just run a buttload of code every frame...


     


    Iterate one value per frame of execution.


     


    If looping through an entire set of values in one frame is how something needs to be handled... refactor it so it does not require that. That solution should only be a last resort...


    1

  10. That depends on the compiler AND the language itself. IF the behavior of the language is to evaluate ALL of a conditional before returning false or stop when it meets the first condition that makes it false is language dependent. If all conditions get evaluated before a return then the code snippets you listed are not identical.


     


    For example:


     


    if a


        if b


            do something


     


    Short circuits out and returns if a is false.


     


    In a language where all of a conditional must be evaluated the code generated by the compiler for:


     


    if a && b


     


    is not the same as


     


    if a


        if b


     


    In that situation,  if a && b has additional stack manipulation code and uses registers for return value storage.


    It does both if's and stores their return values... if then does a quick bitwise ( and, in this case, logical) AND


    of the return values and returns that.


     


    As far as I know, the scripting language we're dealing with DOES evaluate every single condition in a conditional.


    If the second half of a conditional would generate a run-time error, it WILL... even if the first half is false.


     


    This will error with a message about NaN.


    if (0) && (1/0)


     


    Because of the additional stack and register code, a compound conditional will always be slower than nested.


     


     


    2

  11. Well, as far as I know... the EGM contains the morphs that are used during character creation, i.e. deforming the head using the sliders to get the shape of the face and its elements like nose and mouth, etc..


     


    The TRI file, and this I know for sure since I've edited them, contains the morphs for emotions, facial expressions and phonemes.


     


    You can use Scanti's head tools, specifically AddMorph to insert an OBJ file of a head edited into the expression you want as a named morph. As an example, the mod I did of Head06 I edited the named morphs DispHappy1, DispHappy2, DispHappy3 and DispHappy4. Using FaceGen I changed the expression and exported the change as an OBJ file. I then used AddMorph in replace mode to replace the morphs I just listed with the edited OBJ file contents.


     


    EGM and TRI files are archives of OBJ file fragments. They contain offsets from the original head NIF which represent morphs from the base mesh.


     


    What I was saying is that we can add NEW morphs to a TRI file and, I'm assuming, the dropdown would show them... assuming the dropdown is being populated from the TRI... if it's a  hardcoded list... well, we're boned. My assumption is that they'll show, since FaceGen itself repopulates its morph list directly from the TRI. FaceGen's code was used directly in Beth's products.


     


    EDIT: And if anyone is wondering where Scanti's tools are, links to all the tools are in the txt file I attached in the previous post.


    0