Jump to content

FNIS for Modders / FNIS 4.0 [WIP]


fore

Recommended Posts


float StageStop = GetCurrentRealTime() + 10
while StageStop > GetCurrentRealTime()
  Utility.wait(0.2)
endwhile

does the same with less effort from the processor

 

 

Touché. Minimizing code has never been my strong suit.

 

Though again, as noted on the creation kit wiki, Utility.Wait( NbLoops * LoopDuration ) will be inaccurate as it's dependent on frame rate and papyrus workload. So if accuracy with the timing is at all important, Utility.Wait() is an imperfect solution. If timing isn't important though than it's a perfectly fine solution to it.

Link to comment

Don't want to add to this timing discussion, since I'm still convinced that RegsiterForSingleUpdate() is the "right" way. With this busy loop you just add too much unnecessary load to the system. And you have one BIG disadvantage. While you are in this loop, you can't receive other events. So if you want to synchronize 2 characters in a quest script, wait() is a unusable solution.

 

But I have another solution for thor to be activated on every cycle. Why not separate the loop into single acyclic animations? Like

 

s -a AEenter AnimEnter.hkx

+ -a AELoop AnimLoop.hkx

+ AEendLoop AnimDummy.hkx

+ -a AEexit AnimExi.hkx

 

Then you can register for "AEendloop", wake up after every turn, and make a new SAE("AEloop"). You might have to experiment a little bit with this wake-up time. I'm using a "LocalTime" of -0.3 in the triggerArray. A usual practicve in the behavior which probably means that this event fires 0.3 sec before the animation is done.

Link to comment
  • 4 weeks later...

Short update on FNIS 4.0.

 

4.0 Beta 2 is released. See the initial post for more details. Took longer than planned, what a surprise :D I had planned to add AnimationDriven animations, but ran into a problem which I cannot solve right now. I just cannot figure out how to set the AnimDriven behavior variable inside the graph. It works when setting the variable by script, but I'm afraid this can have side effects.

 

Instead I have released the orm offset animation. I think the demand for that was even higher. So here you are.

 

There is also good news for "doggystyle" lovers. I have a dog running FNIS animations. So this is the start of CREATURE animations, guys. I have still one problem to solve: I don't know how to end these animations, even an acyclic animation ends with a stiff doggy. But that should be manageable, and the generator integration doesn't seem to be too hard.

Link to comment

In relation to fnis to sexlab, could these new furniture based animation breakthroughs lead to things like blowjobs while sitting down on a chair etc?

 

Yes, exactly. And it even doesn't need a (visible) chair. I used the word, because it's the Bethesda term. By they also use it for many things where there is no "furniture" involved (mining, smithing, ...)

 

The sweet thing about these animation is that they force the actors into the exact position, and keep them there without any collision effect. Although, before I promise too much, how precise 2 actors can be placed at one furniture object, and if this is sufficient for a close-up blowjob has still to be confirmed by an animator (I hope they start soon!).

 

But in Oblivion it worked very well, and I'm sure, Skyrim will be as good. No more fiddling with positioning by scripts, and no more collision teleport.

Link to comment

 

 

So this is the start of CREATURE animations, guys

So creature animations, once the other issues get sorted out, could eventually be called on creatures using "SAE"? 

 

 

That's what my doggy is doing right now. And hopefully soon most other creatures.

 

The problem I have mentioned does not exist. I just had to understand what's going on, and what seemed to be a problem even comes handy.

 

You probably have noticed that dogs have a lot of movement. Up, down, wiggle, scratch. All of this stationary movement is implemented with behavior. Something you probably don't want to see in a sex scene. Now every FNIS animation will prevent this kind of movement, until a special event is raised (returnToDefault). It just took some time to understand, cause in that respect creatures differe from characters.

Link to comment
  • 2 weeks later...

How does fnis for user make the change for creatures now ?? do they update the creature section just like what happens to npc when using fnis for users ??

 

fnis 3.5 works fine on my system, but after i update to 4.0 beta 3 i get an error code 13 and my game freezes when looking around or running,

Link to comment

How does fnis for user make the change for creatures now ?? do they update the creature section just like what happens to npc when using fnis for users ??

 

fnis 3.5 works fine on my system, but after i update to 4.0 beta 3 i get an error code 13 and my game freezes when looking around or running,

As we have clarified in our pms, this is a bug in "Check Consistence" part.

 

In the meantime I found that it is caused by SexAddicts. THere are a few doubled Animation Events. I have modified the generator to find these, but apparently I didn't do it all that well.

 

So just skip the CC part.

Link to comment
  • 3 weeks later...

Moin Fore...

 

done a little mod to test your furniture anims.

As you will see it uses ZaZ-Animations.

 

in the CK i defined idleChairExitStart as standard exit anim.... but instead uses the idleshackledexit defined in my FNIS_$myanimations_List.

i think the animations in FNIS_$myanimations_List overrides the animtion-exit event in the CK Animation tree.

 

May be a usefull information ....

 

 

Moin

Oli

Link to comment

Moin Fore...

 

done a little mod to test your furniture anims.

As you will see it uses ZaZ-Animations.

 

in the CK i defined idleChairExitStart as standard exit anim.... but instead uses the idleshackledexit defined in my FNIS_$myanimations_List.

i think the animations in FNIS_$myanimations_List overrides the animtion-exit event in the CK Animation tree.

 

May be a usefull information ....

 

 

Moin

Oli

 

Hi Oli,

I even take fellow Germans as feedback providers. Keep it comin'   :D

 

How do you define idleshackledexit? Since the current syntax doesn't provide means for defining furniture exits.

 

But it is possible that you get the desired effect with other animEvents. This IdleChairExitStart is just one of 2 "standard" exit conditions (the other one is termination of the package. But that doesn't mean that other AEs will terminate the furniture as well. E.g. IdleForceDefaultState. I just can't foresee in these cases what will happen, and if there are side effects (which is not very likely).

Link to comment

 

Moin Fore...

 

done a little mod to test your furniture anims.

As you will see it uses ZaZ-Animations.

 

in the CK i defined idleChairExitStart as standard exit anim.... but instead uses the idleshackledexit defined in my FNIS_$myanimations_List.

i think the animations in FNIS_$myanimations_List overrides the animtion-exit event in the CK Animation tree.

 

May be a usefull information ....

 

 

Moin

Oli

 

Hi Oli,

I even take fellow Germans as feedback providers. Keep it comin'   :D

 

How do you define idleshackledexit? Since the current syntax doesn't provide means for defining furniture exits.

 

But it is possible that you get the desired effect with other animEvents. This IdleChairExitStart is just one of 2 "standard" exit conditions (the other one is termination of the package. But that doesn't mean that other AEs will terminate the furniture as well. E.g. IdleForceDefaultState. I just can't foresee in these cases what will happen, and if there are side effects (which is not very likely).

 

 

How do you define idleshackledexit? -> is defined in FNIS_$myanimations_List,

i copied the (extracted)hkx in my folder-

 

i the CK IdleChairExitStart is the exit anim event.

 

further information: IdleChairExitStart is used when i command my follower to follow before the idle ends.

idleshackledexit is used when the idle has its normal end.

 

"fu xcross01 ZazAPCAO025.hkx ZazAPCAO025.hkx idleshackledexit.hkx" <- definiton in my list

 

moin

Oli

Link to comment

 

 

 

How do you define idleshackledexit? -> is defined in FNIS_$myanimations_List,

i copied the (extracted)hkx in my folder-

 

i the CK IdleChairExitStart is the exit anim event.

 

further information: IdleChairExitStart is used when i command my follower to follow before the idle ends.

idleshackledexit is used when the idle has its normal end.

 

"fu xcross01 ZazAPCAO025.hkx ZazAPCAO025.hkx idleshackledexit.hkx" <- definiton in my list

 

moin

Oli

 

 

You are confusing me.

 

IdleChairExitStart is an AnimEvent, as you said. And you should use that as AnimEvent parameter for your 3rd subidle definition in your CK definition.

 

And if you do, and then send the IdleChairExitStart in your script, the exit animation is played. Which is IdleShackledExit.hkx according to your fu definition. So where is the problem? Do you see a different animation played?

 

Maybe there is one issue which confuses you. If a furniture animation is run the first time (after load), the exit animation will NOT be played. From the 2nd time on it will. But this is not an FNIS bug. You will see the same when you use vanilla furniture idles. But noone (me included) ever realized. But with the use of FNIS furnitures I'm afraid many modders and users will stumble about it. And think it'S FNIS.

Link to comment

I'm about to release a new version of Zaz with furniture support. Is there a good reason not to create furniture support for all the existing pillories? (Just copy paste, do some search/replace etc)

 

Specifically, is there a practical limit on the amount of animations and so on you can load up in your system. Essentially, this'll double the size of the animation file, or at least make it a lot longer.

 

Obviously, that means the new Zaz will depend on a beta of FNIS generators. On the plus side, it'll generate a lot more testing, and it seems pretty stable right now (as always, I might add). On the minus side, it'll generate some support issues for me as I try to push out the message that users must upgrade to a beta.

 

I'm willing to do this, so just asking your opinion on the matter ....

Link to comment

I'm about to release a new version of Zaz with furniture support. Is there a good reason not to create furniture support for all the existing pillories? (Just copy paste, do some search/replace etc)

Do it - and i can kick out my crappy nif edits ;)

 

 

Moin

Oli

Link to comment

 

I'm about to release a new version of Zaz with furniture support. Is there a good reason not to create furniture support for all the existing pillories? (Just copy paste, do some search/replace etc)

Do it - and i can kick out my crappy nif edits ;)

 

 

Moin

Oli

 

Eeh... ahem ... the major nif edits will come at a later time. I've added furniture tags and stuff to all of them though, and fixed some apparent collision problems (among the ones that are easy to fix).

 

Tbh, I just want to push this one out to "kick life" into ZAP again. Then I'll start working through the nifs and stuff.

Link to comment

I'm about to release a new version of Zaz with furniture support. Is there a good reason not to create furniture support for all the existing pillories? (Just copy paste, do some search/replace etc)

 

Specifically, is there a practical limit on the amount of animations and so on you can load up in your system. Essentially, this'll double the size of the animation file, or at least make it a lot longer.

Yes, actually there is a limit. I didn't talk about it yet, because I'm still hoping to find the reason why I can't seperate the furnitures into a custom file as well. But since you ask: it's about 270 furniture animations the way they are defined today. And without any offset animations. This is simply due to the node numbers I have available in mt_behavior.hkx (#5200 to #9999), and how many I need to define one furniture.

 

Obviously, that means the new Zaz will depend on a beta of FNIS generators. On the plus side, it'll generate a lot more testing, and it seems pretty stable right now (as always, I might add). On the minus side, it'll generate some support issues for me as I try to push out the message that users must upgrade to a beta.

 

I'm willing to do this, so just asking your opinion on the matter ....

I'm sorry it's taking that long, but I only have a few hours per week for actually working on the mod. And everyone who knows programming also knows how much time this can take.

 

Originally the main task for 4.0 were furnitures, but since people convinced me not to wait for creature animations any longer I have put that in between. In a few days I hope I can release the next beta with some streamlining of creatures (including custom creatures, creature AnimObjects, tail), and then I can go back to furnitures.

 

See, I don't want to release furnitures without adding sequenced animation functionality. That wiil change the syntax, and that I REALLY wanted to avoid after releasing the final. 

Link to comment

 

I'm about to release a new version of Zaz with furniture support. Is there a good reason not to create furniture support for all the existing pillories? (Just copy paste, do some search/replace etc)

 

Specifically, is there a practical limit on the amount of animations and so on you can load up in your system. Essentially, this'll double the size of the animation file, or at least make it a lot longer.

Yes, actually there is a limit. I didn't talk about it yet, because I'm still hoping to find the reason why I can't seperate the furnitures into a custom file as well. But since you ask: it's about 270 furniture animations the way they are defined today. And without any offset animations. This is simply due to the node numbers I have available in mt_behavior.hkx (#5200 to #9999), and how many I need to define one furniture.

 

In that case, I'll just stop right where I am now, and explain to modders how they can add their own furniture in the future using this system. Furniture where the head is stuck or similar isn't good for furniture anyway, and a lot of nifs in ZAP are designed like that.

 

 

Obviously, that means the new Zaz will depend on a beta of FNIS generators. On the plus side, it'll generate a lot more testing, and it seems pretty stable right now (as always, I might add). On the minus side, it'll generate some support issues for me as I try to push out the message that users must upgrade to a beta.

 

I'm willing to do this, so just asking your opinion on the matter ....

I'm sorry it's taking that long, but I only have a few hours per week for actually working on the mod. And everyone who knows programming also knows how much time this can take.

 

Originally the main task for 4.0 were furnitures, but since people convinced me not to wait for creature animations any longer I have put that in between. In a few days I hope I can release the next beta with some streamlining of creatures (including custom creatures, creature AnimObjects, tail), and then I can go back to furnitures.

 

See, I don't want to release furnitures without adding sequenced animation functionality. That wiil change the syntax, and that I REALLY wanted to avoid after releasing the final.

 

No problem with the mod taking long. I was mostly trying to get an answer on wether I should include full furniture support, or just a subset. I guess the subset is the right way to go at the moment.

 

I still think it's a good idea to release now, even if I have to redo the syntax at some later time. Better get something out now, and show how other modders can benefit, than wait too long.

Link to comment
  • 2 weeks later...

I think it's signed. I just pass "INT32" to the behavior xml, and there is no other INT. But in an case you have to read it with Papyrus GetAnimationVariableInt(). And that's certainly signed.

Link to comment

I think it's signed. I just pass "INT32" to the behavior xml, and there is no other INT. But in an case you have to read it with Papyrus GetAnimationVariableInt(). And that's certainly signed.

 

The main page of the CK wiki mentions unsigned ints and that's the last I see of them. Anyone want to check my work around? See any flaws with these?

 

I'll also try passing a form ID from a mod with a load order greater than 7F into an AnimVar and then back into Game.GetForm(). Should be fun. Kinda like Schrödinger's box. Put a cat's form ID into the AnimVar and we won't know if the cat still exists or was destroyed/transformed until we try to get it back out with Game.GetForm().

; BIT UTILITIES ===============================================================
;
Int function _setBitFlag(Int aiFlag, Int aiShift, Bool abSet)
	if abSet
		return Math.LogicalOr(aiFlag, Math.LeftShift(1, aiShift))
	else
		return Math.LogicalAnd(aiFlag, Math.LogicalNot(Math.LeftShift(1, aiShift)))
	endIf
endFunction

Bool function _getBitFlag(Int aiFlag, Int aiShift)
	return Math.LogicalAnd(aiFlag, Math.LeftShift(1, aiShift)) as Bool
endFunction

; unsigned 0 to 65,535
Int function _getUnsignedWord(Int aiDword, Bool abHighWord = false)
	if abHighWord
		return Math.RightShift(Math.LogicalAnd(0xFFFF0000, aiDword), 16)
	else
		return Math.LogicalAnd(0x0000FFFF, aiDword)
	endIf
endFunction

; unsigned 0 to 65,535
Int function _setUnsignedWord(Int aiDword, Int aiValue, Bool abHighWord = false)
	Int iLWord = Math.LogicalAnd(0x0000FFFF, aiDword)
	Int iHWord = Math.LogicalAnd(0xFFFF0000, aiDword)

	; if we are setting the high word we want to preserve the low word
	; and vice-versa. Hence the logical or with the opposite word.
	if abHighWord
		return Math.LogicalOr(Math.LeftShift(aiValue, 16), iLWord)
	else
		return Math.LogicalOr(Math.LogicalAnd(0x0000FFFF, aiValue), iHWord)
	endIf
endFunction
Link to comment

 

I think it's signed. I just pass "INT32" to the behavior xml, and there is no other INT. But in an case you have to read it with Papyrus GetAnimationVariableInt(). And that's certainly signed.

 

The main page of the CK wiki mentions unsigned ints and that's the last I see of them. Anyone want to check my work around? See any flaws with these?

 

I'll also try passing a form ID from a mod with a load order greater than 7F into an AnimVar and then back into Game.GetForm(). Should be fun. Kinda like Schrödinger's box. Put a cat's form ID into the AnimVar and we won't know if the cat still exists or was destroyed/transformed until we try to get it back out with Game.GetForm().

; BIT UTILITIES ===============================================================
;
Int function _setBitFlag(Int aiFlag, Int aiShift, Bool abSet)
	if abSet
		return Math.LogicalOr(aiFlag, Math.LeftShift(1, aiShift))
	else
		return Math.LogicalAnd(aiFlag, Math.LogicalNot(Math.LeftShift(1, aiShift)))
	endIf
endFunction

Bool function _getBitFlag(Int aiFlag, Int aiShift)
	return Math.LogicalAnd(aiFlag, Math.LeftShift(1, aiShift)) as Bool
endFunction

; unsigned 0 to 65,535
Int function _getUnsignedWord(Int aiDword, Bool abHighWord = false)
	if abHighWord
		return Math.RightShift(Math.LogicalAnd(0xFFFF0000, aiDword), 16)
	else
		return Math.LogicalAnd(0x0000FFFF, aiDword)
	endIf
endFunction

; unsigned 0 to 65,535
Int function _setUnsignedWord(Int aiDword, Int aiValue, Bool abHighWord = false)
	Int iLWord = Math.LogicalAnd(0x0000FFFF, aiDword)
	Int iHWord = Math.LogicalAnd(0xFFFF0000, aiDword)

	; if we are setting the high word we want to preserve the low word
	; and vice-versa. Hence the logical or with the opposite word.
	if abHighWord
		return Math.LogicalOr(Math.LeftShift(aiValue, 16), iLWord)
	else
		return Math.LogicalOr(Math.LogicalAnd(0x0000FFFF, aiValue), iHWord)
	endIf
endFunction

 

By all means, try it, but the documentation says it won't work: http://www.creationkit.com/GetForm_-_Game

 

As the FormID is intended to be a 32-bit unsigned integer and Papyrus uses signed integers, this function is not reliable for forms from higher-ordered mods. Specifically, any FormID with the MSB set (load order 0x80 and above) will fail to return a valid object.

For _getUnsignedWord, just be wary about if bit shifts are signed or unsigned. If sign is extended by the shift, you should "LogicalAnd" after the shift, not before. (Compare operators >> and >>> in Java, as an example of what I mean.)

Link to comment

Just a short update on FNIS 4.0.

 

I have everything ready what I wanted to be in the next Beta (Beta4), including

  • Support for tails and plants/activators
  • Creature's AnimObjects
  • Support for custom creatures (actually custom "behaviored objects", i.e. everything which uses behaviors)
  • Fixed many bugs with the creatures and generator for the creatures
  • Fixed and improved the "Consistence Check" 

But releases take more and more time, even betas. And I think, LL modders have enough problems to make users aware of an FNIS Beta.

 

So I thinkk I ill skip this release, and start working on that missing piece which is the reason why 4.0 is still Beta: extend furniture animations. I now going to extend furnitures to the Sequenced Animations functionality (so you can define furnitures with as many animations and anima Objects as you like; simply say "fu" or "FU" instead of "sa" or "SA").

 

As soon as I have it ready I'll make a "restricted" Beta, to allow modders to switch to the new syntax before I release to final.

Link to comment

Lame question: how do I make custom furniture object with multiple furniture markers (each using different animations)?

Honestly, I have no idea. 

 

Although, why do you want to use a furniture object with 2 markers, instead of 2 different objects? I wouldn't know how to make an NPC access one out of many markers. With a sit target package you only can use the object, without any parameters. Maybe it'S possible to make a new sittarget procedure. But I have no idea. And I don't see a reson to do so. Use 2 markers. Then you automatically have 2 animations. 

 

Is there any particular reason that I don't see?

Link to comment

Archived

This topic is now archived and is closed to further replies.

  • 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