Jump to content

FNIS for Modders / FNIS 4.0 [WIP]


fore

Recommended Posts

Posted

Are you going to update the beta with the fixed behavior files? I've gone ahead released a patch with the fixed SexLab behavior files, but since that only half fixes it I also included some instructions on how to fix the current FNIS behaviors included in 4.1, and well; I'm sure you know how people are with instructions...

Posted

The newest beta appears to generate files. Furniture no longer works though. Has anything else changed in how furniture is defined (apart from syntax)?

 

Example:

fu -a ZazWoodenHorse01_EnterInstant ZazAPCAO024.hkx
+ ZazWoodenHorse01_Enter ZazAPCAO024.hkx
+ -a ZazWoodenHorse01_Exit ZazFurnitureExit.hkx
With those lines, it should work the same as before, right?
Posted

Are you going to update the beta with the fixed behavior files? I've gone ahead released a patch with the fixed SexLab behavior files, but since that only half fixes it I also included some instructions on how to fix the current FNIS behaviors included in 4.1, and well; I'm sure you know how people are with instructions...

 

I have just updated to FNIS Behaviors 4.0 Beta 4.2 and Creature Pack 4.0.2. Hope, the worst is over now.

 

So I'm still set to release final on Wednesday (if xaz can give me ok). So why do you care about mentioning Beta?

 

The newest beta appears to generate files. Furniture no longer works though. Has anything else changed in how furniture is defined (apart from syntax)?

 

Example:

fu -a ZazWoodenHorse01_EnterInstant ZazAPCAO024.hkx
+ ZazWoodenHorse01_Enter ZazAPCAO024.hkx
+ -a ZazWoodenHorse01_Exit ZazFurnitureExit.hkx
With those lines, it should work the same as before, right?

 

 

You almost gave me a heart attack.  :D But fortunately you mixed Enter and EnterInstant. EnterInstant is the one which you supposedly do when the character already is in furniture, i.e. Enter was already run.

 

But as I mentioned before. I did some new tests a few days ago. For me, this "Instant" seems of no use. For the vanilla I used for testing, and for FNIS anyway. So I recommend to call this something else (like "loop"), and delete the EnterInstant Idle definition in the CK.  

 

This should do it.

 

Full script in the spoiler

 

Thanks jbezorg for the nice script. I will add that to my Modder's document. Once I find time with all these bugs.

 

Unfortunately I couldn't compile myself, because of that SKSE dependency. Although I have installed SKSE, maybe an older version. Can you give me a hint what to do? I just don't want to spend any time for that right now. 

Posted

Unfortunately I couldn't compile myself, because of that SKSE dependency. Although I have installed SKSE, maybe an older version. Can you give me a hint what to do? I just don't want to spend any time for that right now. 

 

 

 

 

If you installed the CK after SKSE, you need to reinstall SKSE in order to compile SKSE related scripts, as installing the CK overwrites many of the source scripts SKSE provides.

Posted

i downloaded the latest fnis but tool still refer to 4.0 instead of 4.2 ?? I did noticed the creature part is no longer needed to generate. But how can i know if it was even done correctly now ??

Posted

 

The newest beta appears to generate files. Furniture no longer works though. Has anything else changed in how furniture is defined (apart from syntax)?

 

Example:

fu -a ZazWoodenHorse01_EnterInstant ZazAPCAO024.hkx
+ ZazWoodenHorse01_Enter ZazAPCAO024.hkx
+ -a ZazWoodenHorse01_Exit ZazFurnitureExit.hkx
With those lines, it should work the same as before, right?

 

 

You almost gave me a heart attack.  :D But fortunately you mixed Enter and EnterInstant. EnterInstant is the one which you supposedly do when the character already is in furniture, i.e. Enter was already run.

 

But as I mentioned before. I did some new tests a few days ago. For me, this "Instant" seems of no use. For the vanilla I used for testing, and for FNIS anyway. So I recommend to call this something else (like "loop"), and delete the EnterInstant Idle definition in the CK.

 

I thought they were just names, so I used those names to make the animations compatible with what was already defined in the CK.

 

I'll remove the EnterInstant entries and make the other changes and see if that helps.

 

Edit: Works now. I'll have to try and solve some minor issues like the idle animation playing after furniture exits, but at least the generator does what I want it to. :)

 

Edit2: Solved those issues too by brushing up my reading skills and actually reading through the readme in FNIS.

Posted
But as I mentioned before. I did some new tests a few days ago. For me, this "Instant" seems of no use. For the vanilla I used for testing, and for FNIS anyway. So I recommend to call this something else (like "loop"), and delete the EnterInstant Idle definition in the CK.

Some time ago I found accidentally that EnterInstant might be used by NPCs that were sitting before they get unloaded by engine, so that they appear sitting instantly after they got loaded back (gaining isEnteringInteractionQuick), without playing the whole sequence again. So EnterInstant might be actually more useful than we thought. Would keep it.

 

Posted

i downloaded the latest fnis but tool still refer to 4.0 instead of 4.2 ?? I did noticed the creature part is no longer needed to generate. But how can i know if it was even done correctly now ??

It still refers to 4.1 instead of 4.2. Again one of those errors you make when releasing in a hurry.

 

The creature part IS needed. I just removed the extra button, cause otherwise people will never know what they did. I just kept the Creature Pack seperate. I see no need to burden all users who don't use creature mods (still the majority) with this big folder structure.

 

 

Edit2: Solved those issues too by brushing up my reading skills and actually reading through the readme in FNIS.

 

 

I have uploaded a seperate pdf "FNIS 4.0 for Modders Documentation". Probably easier to read.

 

 

But as I mentioned before. I did some new tests a few days ago. For me, this "Instant" seems of no use. For the vanilla I used for testing, and for FNIS anyway. So I recommend to call this something else (like "loop"), and delete the EnterInstant Idle definition in the CK.

Some time ago I found accidentally that EnterInstant might be used by NPCs that were sitting before they get unloaded by engine, so that they appear sitting instantly after they got loaded back (gaining isEnteringInteractionQuick), without playing the whole sequence again. So EnterInstant might be actually more useful than we thought. Would keep it.

 

 

Excellent point, zax. That's probably it. So I used this in the "FNIS 4.0 for Modders Documentation". Thanks.

Posted

 

 

Unfortunately I couldn't compile myself, because of that SKSE dependency. Although I have installed SKSE, maybe an older version. Can you give me a hint what to do? I just don't want to spend any time for that right now. 

 

If you installed the CK after SKSE, you need to reinstall SKSE in order to compile SKSE related scripts, as installing the CK overwrites many of the source scripts SKSE provides.

I'm so used to OBSE that I always forget to install scripts as well. Thanks  :)

 

 

This should do it.

Full script in the spoiler

 

I'm just adding your functions to the Modders doc. I have 2 questions. What if....

 

... the user hasn't installed SKSE? Will your script return some arbitrary result?

... the user hasn't installed SKSE without scripts (like I did)? I assume this will work (LogicalAnd directly going to the SKSE Math? No scripts in between)

 

Sorry that I'm not testing myself. Wednesday is tomorrow.

Posted

The StringUtil functions are all SKSE too so without SKSE it won't work. SKSE *.pex files are needed by all users. The *.psc files are needed for the creation kit.

 

So, a SKSE clean version.

 

Doc in spoiler and in archive

 

 

 

FNIS Versioning
created by: jbezorg@yaiws.com
 
FNIS.VersionToString()
This function returns the concatenation of Major & minor versions as well as the version flags. A period (full stop) delimiter is used.
 
@param bool abCreature - check FNIS Creature Pack version info. defaults to false and FNIS Behavior version info.
@return string - concatenated version info
string function VersionToString( bool abCreature = false ) global
 
FNIS.VersionCompare()
Compares the major, minor1 & minor2 versions ints passed as attributes to the current version of FNIS installed. This function returns an int reflecting the result of the comparison between Major, Minor1 & Minor2 version numbers.
 
Note that FNISFlags values are not compared.
 
0 = Both versions match.
1 = The installed version is newer/greater than the compared version.
-1 = The installed version is older/less than the compared version.
 
@param int iCompMajor  - Major version
@param int iCompMinor1 - Mminor1 version
@param int iCompMinor2 - Mminor2 version
@param bool abCreature - check FNIS Creature Pack version info. defaults to false and FNIS Behavior version info.
@return int - 0, 1, -1 
int function VersionCompare( int iCompMajor, int iCompMinor1, int iCompMinor2, bool abCreature = false ) global
 
call FNIS.GetMajor()
Major changes and upgrades
 
@param bool abCreature - check FNIS Creature Pack version info. defaults to false and FNIS Behavior version info.
@return int - major version
int function GetMajor( bool abCreature = false ) global
 
call FNIS.GetMinor1()
Functional enhancements
 
@param bool abCreature - check FNIS Creature Pack version info. defaults to false and FNIS Behavior version info.
@return int - minor1 version
int function GetMinor1( bool abCreature = false ) global
 
call FNIS.GetMinor2()
Bug fixes
 
@param bool abCreature - check FNIS Creature Pack version info. defaults to false and FNIS Behavior version info.
@return int - minor2 version
int function GetMinor2( bool abCreature = false ) global
 
call FNIS.GetFlags()
Version flags.
 
 0 = Pre-alpha
 1 = Alpha
 2 = Beta
 3 = Release
 
@param bool abCreature - check FNIS Creature Pack version info. defaults to false and FNIS Behavior version info.
@return int - minor2 version
int function GetFlags( bool abCreature = false ) global
 
call FNIS.IsAlpha()
Returns true if the installed FNIS version is flagged as an alpha.
 
@param bool abCreature - check FNIS Creature Pack version info. defaults to false and FNIS Behavior version info.
@return bool
Bool function IsAlpha( bool abCreature = false ) global
 
call FNIS.IsBeta()
Returns true if the installed FNIS version is flagged as an beta.
 
@param bool abCreature - check FNIS Creature Pack version info. defaults to false and FNIS Behavior version info.
@return bool
Bool function IsBeta( bool abCreature = false ) global
 
call FNIS.IsRelease()
Returns true if the installed FNIS version is flagged as a stable release.
 
@param bool abCreature - check FNIS Creature Pack version info. defaults to  false and FNIS Behavior version info.
@return bool
Bool function IsRelease( bool abCreature = false ) global

 

 

 

 

 

 

FNIS.7z

Posted

 

The StringUtil functions are all SKSE too so without SKSE it won't work. SKSE *.pex files are needed by all users. The *.psc files are needed for the creation kit.

 

So, a SKSE clean version.

 

 

Thanks.

 

I had no problem if your scripts would require SKSE. Most likely you guys here will mostly use it.

 

But then there should be a way to determine if SKSE is installed. If there is one, we could simply put it into documentation and use the SKSE based version.

 

I leave it up to you. And all others here who might use it. I just need a quick response.

Posted

I'd go with the non-SKSE version. Functionally it's the same at this point and it will require a lot less support at the cost of a little extra work.

 

We can create our own FNIS wrapper functions that use SKSE if we really want to.

Scriptname FNIS_SKSE Hidden

int function VersionCompare( string asVersion, bool abCreature = false ) global
	int iCharPos

	iCharPos  = StringUtil.Find(asVersion, ".")
	int iCompMajor = StringUtil.Substring(asVersion, 0, iCharPos) as int
	asVersion = StringUtil.Substring(asVersion, iCharPos + 1)

	iCharPos   = StringUtil.Find(asVersion, ".")
	int iCompMinor1 = StringUtil.Substring(asVersion, 0, iCharPos) as int
	asVersion  = StringUtil.Substring(asVersion, iCharPos + 1)

	iCharPos   = StringUtil.Find(asVersion, ".")
	int iCompMinor2 = StringUtil.Substring(asVersion, 0, iCharPos) as int
	asVersion  = StringUtil.Substring(asVersion, iCharPos + 1)
	
	return FNIS.VersionCompare( iCompMajor, iCompMinor1, iCompMinor2, abCreature )
endFunction
Posted

I have put the non-SKSE version into the release, and uploaded a new doc. Thanks again.

 

So now this overload you here as a download, or where?

 

Posted

FNIS 4.0 is released (final and finally) 

 

Thank you all for your patience during the last days and weeks. I hope it's working now for you. 

 

It was pretty stressful at the end. Just yesterday I realized, that Beth had mixed behavior updates for some creatures (dog, wolf, draugr, falmer) into their DLC bsas. Big mistake. For character they always did it right (into the Update.bsa), but for creatures ... I can't believe they did that. So that took me another couple of hours which I didn't expect.

 

Oh yes. Or no. If you think there could be an implicit fix for this dog/wolf problem.... Unfortunately not.

 

Posted

FNIS 4.0 is released (final and finally) 

 

Thank you all for your patience during the last days and weeks. I hope it's working now for you. 

 

It was pretty stressful at the end. Just yesterday I realized, that Beth had mixed behavior updates for some creatures (dog, wolf, draugr, falmer) into their DLC bsas. Big mistake. For character they always did it right (into the Update.bsa), but for creatures ... I can't believe they did that. So that took me another couple of hours which I didn't expect.

 

Oh yes. Or no. If you think there could be an implicit fix for this dog/wolf problem.... Unfortunately not.

Finally!! Excellent work!

 

Now to update all the mods to take advantage of the latest features.

Posted

I've been running into a lot of issues lately. In xpo when I wait in the pillories, the jailer will typically not break his animation leaning against things and just teleport to wherever his ai packages is supposed to move him. He will not move from this spot by himself.

 

If I then force him into another idle with the console, he'll start moving again as his ai dictates.

 

Same thing happened with the smith in Falkreath.

 

I've also seen guards in Whiterun jail do this (and I don't modify their ai packages at all). They were frozen in a sitting motion outside a cell, as if they were supposed to be patrolling, but were sitting.

 

I've no idea where this comes from, but I'm guessing that for some reason furniture isn't working perfectly.

 

Also, animations in xpo are broken. I'm logging when the script attempts to play an animation, and what typically happens is that on the first "attempt" to play the animation, another pose is selected using the same AO. On the second attempt at playing an animation, the correct one is played.

 

At least that is how it appears.

 

Rolling back to 4.0 beta 3 solved the issue with animations not triggering. The jailer is still behaving strangely. I'll investigate more ....

Posted

Updated: Tried 3.5 with no improvement.

 

What is weird is that actors retain idles that were normally reserved for furniture or idle markers, when moved out of those through the console. They also will not move when instructed by ai packages. But if I break the animation with the console, they'll resume the expected ai routine.

 

Maybe it was always like this and I never noticed, but it seems kind of game breaking and obvious (actors leaning against something will not follow ai, for instance).

 

Force moving actors through the console does not break idle animations, like it usually does. I tested this behavior on 3.5, where it breaks idles and with 4.0 where it didn't break idles. After downgrade to 3.5, then upgrade to 4.0, force moving again broke idles (as expected).

 

Edit: I take it all back. Uninstalling SexLab and Zap, then reinstalling those on top of 3.5 (temp removing furniture from Zap) solved the issues. I'll try reupgrading. Any advice on what could have gone wrong is greatly appreciated, because I don't feel I want to recommend this procedure to everyone.

 

Edit2: Reinstalling FNIS 4.0, the problems with animations not playing are back. Jailer, however, behaves normally. As does everyone else when force moving them through the console.

Posted

Just pointing out that this happens only to the actor in the pillory, so the other actors plays animations normally. It also happens with Debug::SendAnimationEvent as well as Actor::PlayIdle.

 

I'm examining possible workarounds, like doubling the nr. of calls to play idles. No success so far.

Posted

xaz, I have really problems to comprehend what the problem is. I don't have time now to really try to understand the details. But you should please break it down to what the problem is, using which(EXACT) AnimDefinition, doing what with your mod.

 

I'm reading a lot about console operation. Quite honestly, I'm VERY reluctant to even talk about that. Since all I'm doing is undocumented territory, I can only reproduce what the game shows me how to do. And console function are not part of the game. I have actually no idea what they do, and especially how they will interact with furniture animations, should you use one in this environment,

 

Also you said you didn't change packages for guards you use. But you have to. I had to do this from the beginning with FNIS Spells. Behaviors have NO IMPACT AT ALL on packages and movements. So whenever you work with vanilla NPCs you have to give them your own packages. And that's possible without modifying these vanilla NPCs.

Posted

xaz, I have really problems to comprehend what the problem is. I don't have time now to really try to understand the details. But you should please break it down to what the problem is, using which(EXACT) AnimDefinition, doing what with your mod.

The first problem with guards still playing sitting idles disappeared after reinstalling SexLab, Zaz and FNIS. So in order to keep the discussion clean, I'll focus on the other issue.

 

I play all idles from scripts. I normally use Actor::PlayIdle, but sometimes use Debug::SendAnimationEvent. The later is the one used by SexLab.

 

In PrisonOverhaul, the pillory animations go through a sequence of idles, similar to how SexLab does it.

 

When I script the player to play an anim event in the pillory, the pillory is correctly included in the animation, but the wrong idle (or pose) is played on the player. On the next call to change idle (in the sequence), the correct idle is played. In this way, the game alternates between wrong idle and correct idle.

 

Now you're thinking "he's sending the wrong anim event". There are two good reasons why this is not the case:

1. I'm logging all calls to play the idle. The correct idle is passed to the function to play it.

2. The idle actually playing is not defined in the animation file.

 

So far, this problem only affects the pillory animations. My guess is that anim objects are the problem because I've not seen it on any other kind of animations.

 

These problems also appear on Zaz pillory animations run through SexLab.

 

Attaching screenshots of the problem soon.

Posted

Screenshots of the problem when running through SexLab. The same problems are visible in Prison Overhaul (where I can control and debug the scripting better). The reason I used SexLab is that it was easier to trigger the behavior this way (for screenshots) rather than going through the prison.

 

There is no animation definition which uses the idle from the broken.jpg in combination with the pillory animated object.

 

So why do I suspect FNIS?

 

Because if I install 4.0 beta 3 instead of the release, this problem disappears.

(Reinstalling includes regenerating behavior files for Zaz, ie. running modders _and_ user tools.)

 

Did you change anything with animation objects or similar for the release?

 

An example line from animations that behave this way:

o ZazAPPillSXSpank01B ZazAPPillSXSpank01B.hkx AOZaZPunishmentPillory

post-79381-0-47104800-1380957094_thumb.jpg

post-79381-0-05104200-1380957104_thumb.jpg

Posted

I have noticed this too as well  , but its happening via console too 

when switching animations 

player.playidle zazapcao010  ------------------------------Pillory  Animation plays 

 

player.playidle zazapcao011  ------------------------------- (Post  appears ,  R post animation is meant to be played .  , but  its playing the first animation ie " zazapc001 " this animation is cyclic without ao) 

 

on typing 

player.playidle zazapcao011

again the animation works 

 

Cheers

 

Posted

Screenshots of the problem when running through SexLab. The same problems are visible in Prison Overhaul (where I can control and debug the scripting better). The reason I used SexLab is that it was easier to trigger the behavior this way (for screenshots) rather than going through the prison.

 

There is no animation definition which uses the idle from the broken.jpg in combination with the pillory animated object.

 

So why do I suspect FNIS?

 

Because if I install 4.0 beta 3 instead of the release, this problem disappears.

(Reinstalling includes regenerating behavior files for Zaz, ie. running modders _and_ user tools.)

 

Did you change anything with animation objects or similar for the release?

 

An example line from animations that behave this way:

o ZazAPPillSXSpank01B ZazAPPillSXSpank01B.hkx AOZaZPunishmentPillory

 

 

Try using the modder tool from the release version to regenerate all the behaviors in the character folder, including all the ones from FNIS and other mods, then running user tool. You may simply have some behavior file that was generated using the broken beta 4 generator.

Posted

 

Screenshots of the problem when running through SexLab. The same problems are visible in Prison Overhaul (where I can control and debug the scripting better). The reason I used SexLab is that it was easier to trigger the behavior this way (for screenshots) rather than going through the prison.

 

There is no animation definition which uses the idle from the broken.jpg in combination with the pillory animated object.

 

So why do I suspect FNIS?

 

Because if I install 4.0 beta 3 instead of the release, this problem disappears.

(Reinstalling includes regenerating behavior files for Zaz, ie. running modders _and_ user tools.)

 

Did you change anything with animation objects or similar for the release?

 

An example line from animations that behave this way:

o ZazAPPillSXSpank01B ZazAPPillSXSpank01B.hkx AOZaZPunishmentPillory

 

 

 

Try using the modder tool from the release version to regenerate all the behaviors in the character folder, including all the ones from FNIS and other mods, then running user tool. You may simply have some behavior file that was generated using the broken beta 4 generator.

 

Thanks, but sadly ...

 

... as I wrote above, I uninstalled all mods that used FNIS (and verified that it was indeed at zero using FNIS), then I reinstalled the mods. Problem persists.

 

Before anyone points out that FNIS is at a minimum two mods: yes, I uninstalled the behavior files from FNIS too. :)

 

I use wrye bash for installing mods, so I'm fairly confident there are no leftovers, but I did go through the relevant folders manually just in case.

Posted

 

Thanks, but sadly ...

 

... as I wrote above, I uninstalled all mods that used FNIS (and verified that it was indeed at zero using FNIS), then I reinstalled the mods. Problem persists.

 

Before anyone points out that FNIS is at a minimum two mods: yes, I uninstalled the behavior files from FNIS too. :)

 

I use wrye bash for installing mods, so I'm fairly confident there are no leftovers, but I did go through the relevant folders manually just in case.

 

 

So what you indicate is, that either the animfile or the animevent is mixed up. For this ZazAPPillSXSpank01B

 

I downloaded the newest ZaZ (V0ß053), generated for modders, and checked the result with CondenseBehavior. This tool shows immediately are somehow broken in the xml. Because then it couldn't get the names of file and AnimEvent together. No problem there.

 

What I noticed is that you release ZaZ with a behavior file dated 2013-09-29. So this was NOT generatad with 4.0 final. And as Ashal says, there were problems because of the wrong DefaultState. I didn't thing it would be so severe, but maybe that has to do with your console activation.

 

But one request for the next time. Screenshots are helpful to understand the problem, but insufficient for me to test. I need exact detail.

- What's the Anilmist 

- Which AnimList line(s)

- Which was wrong (in this case: which file did you see instead of the one you pointed out)

 

I have your mods available, but not fully installed. I simply don't have the time to test on user level. Or FNIS 4.1 will come out in a year. :D

Archived

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

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...