Jump to content

FNIS 6.0, the next step: Dynamic Animation Replacers [modder feedback requested]


fore

Recommended Posts

So my understanding is FNIS 6.0 will allow XPSME to not have to separate single and dual wield animations, correct? I downloaded XPSME 3.29, but it doesn't have that option - I assume it's not implemented yet?

Like I already said 3.29 is just 3.21 working for FNIS6.0, I need to do alot of edits to update XPMSE for FNIS 6 with the new feature, and I have to do alot of edits to get newest NiOverride features running.

 

I said I can make it with FNIS 6, not it works out of the box.

Link to comment

Hey, the Aternate_AnimationGroups.txt can I assume that files not in there are basically unused bethesda files?

 

Like, bow_drawheavy and dualmagic_Idle for exapmle?

 

Some other thing

should

mag_runstrafeleft.hkx 101000000110000000
mag_runstraferight.hkx 101000000110000000
not be in _magmt
and
magcast_runstrafeleft.hkx 100000000110000000
magcast_runstraferight.hkx 100000000110000000
not be in _magcastmt
and
magic_sprintforward.hkx 000000000000000100

could go in _magmt?

Link to comment

 

I've been playing with the new framework to replace the animations of _mtidle _mt and _mtx with the crawling on all fours animations.

 

I've gotten it to work for everything except the idle and I can't figure out what I'm doing wrong or if the framework is to blame. The idle animation stays as the normal standing idle animation.

 

In my FNIS list file I have the entry: AAset _mtidle 1

The idle file name is named "spw0_mt_idle.hkx"

The script uses the line FNIS_aa.SetAnimGroup(akActor, "_mtidle", my_mtidle_base, 0, "PetWalk")

 

It all works for _mt and _mtx, but _mtidle isn't getting replaced.

 

FNISGenerateForUsers is detecting the correct number of animation sets and replacement files.

 

On another less important note, when I activate the animation set change my camera zooms in.

 

You are experiencing the same problem why I never made an "Sexy Idle". For NPCs the mt_idle is not just one file, but a sequence of different postures. To make things less boring.

 

I will look into that one more time. Try to make something which switches off that NPC sequence. But I can't promise that this will be soon.

 

And can you describe exactly what and when the camera zooms. Keep in mind that the camera fies in under many conditions: moving, equipping, ..

 

 

The camera zooms right as I execute the following three lines. I have it set so they execute upon equipping a silver ring, but I doubt that's relevant.

FNIS_aa.SetAnimGroup(akActor, "_mt", my_mt_base, 0, "PetWalk")

FNIS_aa.SetAnimGroup(akActor, "_mtx", my_mtx_base, 0, "PetWalk")

FNIS_aa.SetAnimGroup(akActor, "_mtidle", my_mtidle_base, 0, "PetWalk")

 

The camera switches to 3rd person mode if it was in 1st person mode and it zooms in as far as it can in 3rd person mode without switching back to 1st person mode. The camera change happens whether you're in 1st person or 3rd person mode and always changes to that particular state.

Link to comment

Hey, the Aternate_AnimationGroups.txt can I assume that files not in there are basically unused bethesda files?

 

Like, bow_drawheavy and dualmagic_Idle for exapmle?

 

Some other thing

should

mag_runstrafeleft.hkx 101000000110000000
mag_runstraferight.hkx 101000000110000000
not be in _magmt
and
magcast_runstrafeleft.hkx 100000000110000000
magcast_runstraferight.hkx 100000000110000000
not be in _magcastmt
and
magic_sprintforward.hkx 000000000000000100

could go in _magmt?

 

You're right in everything. 

I made the list from defaultmale.hkx, and if animations are not in there, they cannot be used anywhere.

 

And those 5 animations I have missed. magic is simply not my specialty.  

But as you see, there are 15 changes in 6 different files. And my tool for making these changes works on virgin files, not on changed ones. A lot of manual work, and I don't know if anyone will ever use them. I just put it on my list for now.

Link to comment

 

Hey, the Aternate_AnimationGroups.txt can I assume that files not in there are basically unused bethesda files?

 

Like, bow_drawheavy and dualmagic_Idle for exapmle?

 

Some other thing

should

mag_runstrafeleft.hkx 101000000110000000
mag_runstraferight.hkx 101000000110000000
not be in _magmt
and
magcast_runstrafeleft.hkx 100000000110000000
magcast_runstraferight.hkx 100000000110000000
not be in _magcastmt
and
magic_sprintforward.hkx 000000000000000100

could go in _magmt?

 

You're right in everything. 

I made the list from defaultmale.hkx, and if animations are not in there, they cannot be used anywhere.

 

And those 5 animations I have missed. magic is simply not my specialty.  

But as you see, there are 15 changes in 6 different files. And my tool for making these changes works on virgin files, not on changed ones. A lot of manual work, and I don't know if anyone will ever use them. I just put it on my list for now.

 

I will just write everything so that when you add those to those groups it will work^^

Link to comment

 

 

The camera zooms right as I execute the following three lines. I have it set so they execute upon equipping a silver ring, but I doubt that's relevant.

FNIS_aa.SetAnimGroup(akActor, "_mt", my_mt_base, 0, "PetWalk")

FNIS_aa.SetAnimGroup(akActor, "_mtx", my_mtx_base, 0, "PetWalk")

FNIS_aa.SetAnimGroup(akActor, "_mtidle", my_mtidle_base, 0, "PetWalk")

 

The camera switches to 3rd person mode if it was in 1st person mode and it zooms in as far as it can in 3rd person mode without switching back to 1st person mode. The camera change happens whether you're in 1st person or 3rd person mode and always changes to that particular state.

 

Yes, the player goes to 3rd person when the animation variables are set. Because you cannot set 3rd person animvars in 1st person, and vice versa. 

 

And yes, FNIS intentionally doesn't go back to 1st. Because if you set AA animations they are 3rdp, and you most likely will use them right away. So it makes no sense to go 1st -> 3rd -> 1st -> 3rd. The user will get dizzy.

 

And actually I would need SKSE to figure out if the player was in 1stperson at the beginning.

 

But no. There is no camera zoom caused by FNIS. FNIS is only setting animvars, and besides forcing 3rdp it doesn't do anything to the player. And although I was 100% certain of that, I still tested it. And there is no zoom whatsoever. Maybe your standing in front of something? Or maybe you went forward rightaway?

Link to comment

 

Yes, the player goes to 3rd person when the animation variables are set. Because you cannot set 3rd person animvars in 1st person, and vice versa. 

 

And yes, FNIS intentionally doesn't go back to 3rd. Because if you set AA animations they are 3rdp, and you most likely will use them right away. So it makes no sense to go 1st -> 3rd -> 1st -> 3rd. The user will get dizzy.

 

And actually I would need SKSE to figure out if the player was in 1stperson at the beginning.

 

But no. There is no camera zoom caused by FNIS. FNIS is only setting animvars, and besides forcing 3rdp it doesn't do anything to the player. And although I was 100% certain of that, I still tested it. And there is no zoom whatsoever. Maybe your standing in front of something? Or maybe you went forward rightaway?

 

 

It seems like it's gotta be FNIS causing this somehow. I'm not doing anything else. It's just a ring that calls those fnis functions when equipped. And it happens every time no matter where I'm standing or what I'm doing. I've seen it happen like 30 times now so it's not just some fluke based on something weird I was doing at the time.

 

It does it when I change the animations to the new ones and when I change them back to vanilla.

 

Maybe it has something to do with the animations I'm using. My animations set the camera position in them in order to lower the 3rd person camera. It's the same way that sneak animations work. I imagine normal run/walk animations don't include this and maybe you've only tested the system with those.

 

I've attached my mod files here so you can test it yourself. Pet Walk.7z

Note: In my scripts I do some stuff to disable player controls and slow movement speed, but the camera zoom problem happened before I added those things.

Link to comment

First of all: there is a problem with the mt_idle in general. I tested with player and NPC, and it just doesn't work. NPC didn't surprise me, but player does. I checked everything, and everything is in place. The problem with mt_idle is that it is used almost 20 times in different behaviors, and especially the node where I think the general mt_idle takes place. Apparently that is not the case. Although I can't believe it. 

 

Camera position? Standard walk forward does not have a special camera position. Of course I tested that only with "regular" walk forward (Sexy Move), because there is no way that I will support anything else. I wasn't aware that sneak is doing something to the camera. There are 2 or 3 nodes for sneak which I don't understand. Don't  look like zoom/camera, but who knows. They are not documented.

 

AA is a replacement for all specific files, and you cannot expect to magically find features you have seen at other places. If you want to do something like sneak, then you have to replace sneak.

 

As I have said before, I think about adding a feature for custom AnimEvents in a later release. So for example you could add Start/Stop AnimatedCamera as event. That's what I know. But that's not what sneak is doing. So I can't promise the same result.

Link to comment

First of all: there is a problem with the mt_idle in general. I tested with player and NPC, and it just doesn't work. NPC didn't surprise me, but player does. I checked everything, and everything is in place. The problem with mt_idle is that it is used almost 20 times in different behaviors, and especially the node where I think the general mt_idle takes place. Apparently that is not the case. Although I can't believe it. 

 

Camera position? Standard walk forward does not have a special camera position. Of course I tested that only with "regular" walk forward (Sexy Move), because there is no way that I will support anything else. I wasn't aware that sneak is doing something to the camera. There are 2 or 3 nodes for sneak which I don't understand. Don't  look like zoom/camera, but who knows. They are not documented.

 

AA is a replacement for all specific files, and you cannot expect to magically find features you have seen at other places. If you want to do something like sneak, then you have to replace sneak.

 

As I have said before, I think about adding a feature for custom AnimEvents in a later release. So for example you could add Start/Stop AnimatedCamera as event. That's what I know. But that's not what sneak is doing. So I can't promise the same result.

 

So I guess it's a framework problem then for why mt_idle isn't working.

 

I decided to test if my idea about the camera position in the animation files was causing the zoom problem. I swapped my crawl animations with some vanilla run cycle animations that don't set the camera height, but the camera zoom problem still occurs. So it appears the zoom problem has nothing to do with the camera position in the animation files.

 

It might be worth noting that the zoom problem only happens when the player changes their animation set. It doesn't happen if I change the animation set of a follower.

Link to comment

Short update.

 

I found the general problem with mt_idle. I have to add an alternate list to idlebehavior.hkx. This seems to be the standard mt_idle.

 

And it works almost perfectly for the player with your animations. No zoom whatsoever. Maybe the playercontrols. I don't know. I certainly don't see an issue. But I also don't see anything what you might have done to the camera.

 

What I can see is that you probably have to add turn animations as well. Whenever move the camera around the player and then start moving again, the player attempts to get up to execute a turn. Not very good. Would probably not happen on the NPC though.

 

Apropos NPC. As expected the NPC switches all the time between you mt_idle and 1 or 2 others from the NPC idle selection. That's the next I will attempt to surpress now. Since I know which mt_idle is leading, this shouldn't be too hard now. :)

Link to comment

I've discovered a new thing about the camera zoom bug. The bug only occurs when I equip my ring via the normal inventory menu. If I equip it through the favorites menu or a favorites hotkey, the bug does not occur. How weird. Maybe I should start disabling UI mods and see if that makes the bug go away.

Link to comment

Short update.

 

I found the general problem with mt_idle. I have to add an alternate list to idlebehavior.hkx. This seems to be the standard mt_idle.

 

And it works almost perfectly for the player with your animations. No zoom whatsoever. Maybe the playercontrols. I don't know. I certainly don't see an issue. But I also don't see anything what you might have done to the camera.

 

What I can see is that you probably have to add turn animations as well. Whenever move the camera around the player and then start moving again, the player attempts to get up to execute a turn. Not very good. Would probably not happen on the NPC though.

 

Apropos NPC. As expected the NPC switches all the time between you mt_idle and 1 or 2 others from the NPC idle selection. That's the next I will attempt to surpress now. Since I know which mt_idle is leading, this shouldn't be too hard now. :)

 

So, in theory, would these scripts work?

Scriptname myModQuestScript extends Quest 

int myModID
int myModCRC

int my_mtidle_base
int my_sneakidle_base
int my_1hmidle_base

Event OnInit()
	Initialize()
EndEvent

Function Initialize()
	myModCRC = FNIS_aa.GetInstallationCRC()
	if (myModCRC == 0)
		;error, no AA
	else
		myModID = FNIS_aa.GetAAModID("mym", "PlayRandomIdle")
		my_mtidle_base = FNIS_aa.GetGroupBaseValue(myModID, FNIS_aa._mtidle(), "PlayRandomIdle")
		my_sneakidle_base = FNIS_aa.GetGroupBaseValue(myModID, FNIS_aa._sneakidle(), "PlayRandomIdle")
		my_1hmidle_base = FNIS_aa.GetGroupBaseValue(myModID, FNIS_aa._1hmidle(), "PlayRandomIdle")
	endif

	bool b_mtidle = FNIS_aa.SetAnimGroup(Game.GetPlayer(), "_mtidle", my_mtidle_base, 9, "PlayRandomIdle")
	bool b_sneakidle = FNIS_aa.SetAnimGroup(Game.GetPlayer(), "sneakidle", my_sneakidle_base, 0, "PlayRandomIdle")
	bool b_1hmidle = FNIS_aa.SetAnimGroup(Game.GetPlayer(), "1hmidle", my_1hmidle_base, 0, "PlayRandomIdle")
	
	if(!b_mtidle || !b_sneakidle || !b_1hmidle)
		;Error
	EndIf

EndFunction
Scriptname myMod_PlayerAlias extends ReferenceAlias

myModQuestScript Property _myModQuestScript  Auto

Event OnPlayerLoadGame()
	_myModQuestScript.Initialize()
EndEvent
Link to comment

 

Short update.

 

I found the general problem with mt_idle. I have to add an alternate list to idlebehavior.hkx. This seems to be the standard mt_idle.

 

And it works almost perfectly for the player with your animations. No zoom whatsoever. Maybe the playercontrols. I don't know. I certainly don't see an issue. But I also don't see anything what you might have done to the camera.

 

What I can see is that you probably have to add turn animations as well. Whenever move the camera around the player and then start moving again, the player attempts to get up to execute a turn. Not very good. Would probably not happen on the NPC though.

 

Apropos NPC. As expected the NPC switches all the time between you mt_idle and 1 or 2 others from the NPC idle selection. That's the next I will attempt to surpress now. Since I know which mt_idle is leading, this shouldn't be too hard now. :)

 

So, in theory, would these scripts work?

Scriptname myModQuestScript extends Quest 

int myModID
int myModCRC

int my_mtidle_base
int my_sneakidle_base
int my_1hmidle_base

Event OnInit()
	Initialize()
EndEvent

Function Initialize()
	myModCRC = FNIS_aa.GetInstallationCRC()
	if (myModCRC == 0)
		;error, no AA
	else
		myModID = FNIS_aa.GetAAModID("mym", "PlayRandomIdle")
		my_mtidle_base = FNIS_aa.GetGroupBaseValue(myModID, FNIS_aa._mtidle(), "PlayRandomIdle")
		my_sneakidle_base = FNIS_aa.GetGroupBaseValue(myModID, FNIS_aa._sneakidle(), "PlayRandomIdle")
		my_1hmidle_base = FNIS_aa.GetGroupBaseValue(myModID, FNIS_aa._1hmidle(), "PlayRandomIdle")
	endif

	bool b_mtidle = FNIS_aa.SetAnimGroup(Game.GetPlayer(), "_mtidle", my_mtidle_base, 9, "PlayRandomIdle")
	bool b_sneakidle = FNIS_aa.SetAnimGroup(Game.GetPlayer(), "sneakidle", my_sneakidle_base, 0, "PlayRandomIdle")
	bool b_1hmidle = FNIS_aa.SetAnimGroup(Game.GetPlayer(), "1hmidle", my_1hmidle_base, 0, "PlayRandomIdle")
	
	if(!b_mtidle || !b_sneakidle || !b_1hmidle)
		;Error
	EndIf

EndFunction
Scriptname myMod_PlayerAlias extends ReferenceAlias

myModQuestScript Property _myModQuestScript  Auto

Event OnPlayerLoadGame()
	_myModQuestScript.Initialize()
EndEvent

 

Except that _mtidle doesn't work yet. As discussed with Cocein

Link to comment

 

 

Short update.

 

I found the general problem with mt_idle. I have to add an alternate list to idlebehavior.hkx. This seems to be the standard mt_idle.

 

And it works almost perfectly for the player with your animations. No zoom whatsoever. Maybe the playercontrols. I don't know. I certainly don't see an issue. But I also don't see anything what you might have done to the camera.

 

What I can see is that you probably have to add turn animations as well. Whenever move the camera around the player and then start moving again, the player attempts to get up to execute a turn. Not very good. Would probably not happen on the NPC though.

 

Apropos NPC. As expected the NPC switches all the time between you mt_idle and 1 or 2 others from the NPC idle selection. That's the next I will attempt to surpress now. Since I know which mt_idle is leading, this shouldn't be too hard now. :)

 

So, in theory, would these scripts work?

Scriptname myModQuestScript extends Quest 

int myModID
int myModCRC

int my_mtidle_base
int my_sneakidle_base
int my_1hmidle_base

Event OnInit()
	Initialize()
EndEvent

Function Initialize()
	myModCRC = FNIS_aa.GetInstallationCRC()
	if (myModCRC == 0)
		;error, no AA
	else
		myModID = FNIS_aa.GetAAModID("mym", "PlayRandomIdle")
		my_mtidle_base = FNIS_aa.GetGroupBaseValue(myModID, FNIS_aa._mtidle(), "PlayRandomIdle")
		my_sneakidle_base = FNIS_aa.GetGroupBaseValue(myModID, FNIS_aa._sneakidle(), "PlayRandomIdle")
		my_1hmidle_base = FNIS_aa.GetGroupBaseValue(myModID, FNIS_aa._1hmidle(), "PlayRandomIdle")
	endif

	bool b_mtidle = FNIS_aa.SetAnimGroup(Game.GetPlayer(), "_mtidle", my_mtidle_base, 9, "PlayRandomIdle")
	bool b_sneakidle = FNIS_aa.SetAnimGroup(Game.GetPlayer(), "sneakidle", my_sneakidle_base, 0, "PlayRandomIdle")
	bool b_1hmidle = FNIS_aa.SetAnimGroup(Game.GetPlayer(), "1hmidle", my_1hmidle_base, 0, "PlayRandomIdle")
	
	if(!b_mtidle || !b_sneakidle || !b_1hmidle)
		;Error
	EndIf

EndFunction
Scriptname myMod_PlayerAlias extends ReferenceAlias

myModQuestScript Property _myModQuestScript  Auto

Event OnPlayerLoadGame()
	_myModQuestScript.Initialize()
EndEvent

 

Except that _mtidle doesn't work yet. As discussed with Cocein

 

 

Cool. That explains why it doesn't work, yet. :)

Link to comment

 


int my_mtidle_base
	bool b_mtidle = FNIS_aa.SetAnimGroup(Game.GetPlayer(), "_mtidle", my_mtidle_base, 9, "PlayRandomIdle")
	bool b_sneakidle = FNIS_aa.SetAnimGroup(Game.GetPlayer(), "sneakidle", my_sneakidle_base, 0, "PlayRandomIdle")
	bool b_1hmidle = FNIS_aa.SetAnimGroup(Game.GetPlayer(), "1hmidle", my_1hmidle_base, 0, "PlayRandomIdle")

Except that _mtidle doesn't work yet. As discussed with Cocein

 

 

Cool. That explains why it doesn't work, yet. :)

 

 

It was too late last night. The part above is syntactically correct, but doesn't make sense.

 

These calls are not supposed to go into an initialize function. You have to call them every time you want to change these idles. You don't make a fire and forget?

 

The problem with such mods is that they conflict with one another. They share the same AninVars, and if one mod changes this animvar as well, the value you have set is gone. Forever. No Stacking.

 

Changing the AnimVars for a certain time like in Coceins mod is fine. Changing animvars forever is doubtful.

Link to comment

I tried disabling literally every mod apart from mine and the camera zoom bug still persists. So it's not being caused by some kind of weird interaction between different mods.

 

So it's YOUR mod. But it's not FNIS.

 

Because I'm doing exactly the same. Install your animations, and run them on the player and one NPC. And except for this NPC issue described above, and the missing turn for the player, everything is fine. No zoom.

 

Here is my code. Pure, nothing else.

int[] AllMyBases_tst = FNIS_aa.GetAllGroupBaseValues( FNIS_aa.GetAAmodID("tst", "MyTest", true), "MyTest", true)
bool result
result = FNIS_aa.SetAnimGroup(self, "_mtidle", AllMyBases_tst[FNIS_aa._mtidle()], 0, "MyTest", true)
result = FNIS_aa.SetAnimGroup(player, "_mtidle", AllMyBases_tst[FNIS_aa._mtidle()], 0, "MyTest", true)
result = FNIS_aa.SetAnimGroup(player, "_mt", AllMyBases_tst[FNIS_aa._mt()], 0, "MyTest", true)
result = FNIS_aa.SetAnimGroup(player, "_mtx", AllMyBases_tst[FNIS_aa._mtx()], 0, "MyTest", true)
Link to comment

Is it normal that my behaviour file is always the same file size, regardless how many groups and sets I use?

 

Yes. Because if you only have AA definition, your behavior file only contains an empty tree. Everything is done in the user generator.

 

I just don't want to distinguish between mods with basic content, and those without.

Link to comment

 

I tried disabling literally every mod apart from mine and the camera zoom bug still persists. So it's not being caused by some kind of weird interaction between different mods.

 

So it's YOUR mod. But it's not FNIS.

 

Because I'm doing exactly the same. Install your animations, and run them on the player and one NPC. And except for this NPC issue described above, and the missing turn for the player, everything is fine. No zoom.

 

Here is my code. Pure, nothing else.

int[] AllMyBases_tst = FNIS_aa.GetAllGroupBaseValues( FNIS_aa.GetAAmodID("tst", "MyTest", true), "MyTest", true)
bool result
result = FNIS_aa.SetAnimGroup(self, "_mtidle", AllMyBases_tst[FNIS_aa._mtidle()], 0, "MyTest", true)
result = FNIS_aa.SetAnimGroup(player, "_mtidle", AllMyBases_tst[FNIS_aa._mtidle()], 0, "MyTest", true)
result = FNIS_aa.SetAnimGroup(player, "_mt", AllMyBases_tst[FNIS_aa._mt()], 0, "MyTest", true)
result = FNIS_aa.SetAnimGroup(player, "_mtx", AllMyBases_tst[FNIS_aa._mtx()], 0, "MyTest", true)

 

 

I've finally identified the root cause of the camera zoom bug. It's the line Game.ForceThirdPerson()

 

First I commented out all the SetAnimGroup lines in my mod to confirm that FNIS had something to do with it. As expected, the zoom bug disappeared when I removed only those lines. So then I decided to dig into the SetAnimGroup source code and see if I could replicate the bug using individual lines from inside the function. It turned out to be the first one I tried.

 

I modified the script on my ring so that it contains only this:

Event OnEquipped(Actor akActor)
	Game.ForceThirdPerson()
EndEvent

So now FNIS isn't getting called at all and that little line is the only script getting executed. When I equip the ring through the normal inventory menu, the zoom bug occurs just from that line. I can't say why, but it's a vanilla skyrim bug. Something about OnEquipped, ForceThirdPerson, and the inventory menu just don't get along.

 

It was popping up in my mod because SetAnimGroup calls ForceThirdPerson and I was calling SetAnimGroup from the OnEquipped event. If you couldn't replicate the bug, it was probably because you were calling SetAnimGroup from somewhere else.

Link to comment

 

 

 

I've finally identified the root cause of the camera zoom bug. It's the line Game.ForceThirdPerson()

 

First I commented out all the SetAnimGroup lines in my mod to confirm that FNIS had something to do with it. As expected, the zoom bug disappeared when I removed only those lines. So then I decided to dig into the SetAnimGroup source code and see if I could replicate the bug using individual lines from inside the function. It turned out to be the first one I tried.

 

I modified the script on my ring so that it contains only this:

Event OnEquipped(Actor akActor)
	Game.ForceThirdPerson()
EndEvent

So now FNIS isn't getting called at all and that little line is the only script getting executed. When I equip the ring through the normal inventory menu, the zoom bug occurs just from that line. I can't say why, but it's a vanilla skyrim bug. Something about OnEquipped, ForceThirdPerson, and the inventory menu just don't get along.

 

It was popping up in my mod because SetAnimGroup calls ForceThirdPerson and I was calling SetAnimGroup from the OnEquipped event. If you couldn't replicate the bug, it was probably because you were calling SetAnimGroup from somewhere else.

 

What do you consider being a camera bug???

 

I went back to your original definition:

 

 

The camera switches to 3rd person mode if it was in 1st person mode and it zooms in as far as it can in 3rd person mode without switching back to 1st person mode. The camera change happens whether you're in 1st person or 3rd person mode and always changes to that particular state.

 

 

At that point I didn't ask further, because it appeared that you said that your camera moved to this "close behind the PC" position independent if you are in first person or in third person.

  • If you are in 1stp and something calls Game.ForceThirdPerson() then this is the regular default position -> no bug
  • If you camera is anywhere in 3rdp and moves after calling Game.ForceThirdPerson() to this default position -> that would be a "bug". But: I do not have such a behavior when being in 3rdp.

So either 

  •  We both talk massively at cross-purpose, or
  •  ONLY you have this issue, then you should ask yourself "why?"

 

I have a very vanilla system. Especially none that has one of those camera mods. Is it possible that you have such mod?

 

Again: I don't understand any more what you call a Skyrim bug.

Link to comment

 

What do you consider being a camera bug???

 

I went back to your original definition:

 

 

The camera switches to 3rd person mode if it was in 1st person mode and it zooms in as far as it can in 3rd person mode without switching back to 1st person mode. The camera change happens whether you're in 1st person or 3rd person mode and always changes to that particular state.

 

 

At that point I didn't ask further, because it appeared that you said that your camera moved to this "close behind the PC" position independent if you are in first person or in third person.

  • If you are in 1stp and something calls Game.ForceThirdPerson() then this is the regular default position -> no bug
  • If you camera is anywhere in 3rdp and moves after calling Game.ForceThirdPerson() to this default position -> that would be a "bug". But: I do not have such a behavior when being in 3rdp.

So either 

  •  We both talk massively at cross-purpose, or
  •  ONLY you have this issue, then you should ask yourself "why?"

 

I have a very vanilla system. Especially none that has one of those camera mods. Is it possible that you have such mod?

 

Again: I don't understand any more what you call a Skyrim bug.

 

 

The 1st person one doesn't concern me much because if it's going to switch from 1st to 3rd then you're already having some kind of camera change so it doesn't seem out of place. To the point that I can see why you wouldn't even call it a bug. The 3rd person zooming thing is the one that bothers me.

 

Say I'm in 3rd person mode and I zoom way out. I equip the ring through the inventory and suddenly the camera zooms in as far as it can. It's not really a big deal, but it's something I don't want to happen. It's certainly not what I'd expect to happen if I called Game.ForceThirdPerson() while I was already in third person. What I'd expect to happen is nothing at all.

 

You say you don't have this behavior. If that's the case then I can only think of three possibilities.

  1. You aren't replicating my conditions properly. IE: Calling Game.ForceThirdPerson() from an OnEquipped event on an item you equip specifically through the normal inventory menu. If you haven't tried it, please do. If you have, please say so, because I can't rid myself of the thought that you're just doing something different than I am and that's why you're not seeing it.
  2. You have some mod that is patching this particular issue without you realizing it and I don't.
  3. My skyrim installation is fucked up in some way that only seems to manifest as this one issue.

That aside, I think I know an easy way to fix the problem. Just throw something like this around the Game.ForceThirdPerson() call.

if(Game.GetCameraState() != 8 && Game.GetCameraState() != 9)
    Game.ForceThirdPerson()
endif

GetCameraState is an SKSE function. The documentation says it returns 8 for "third person 1" and 9 for "third person 2". I'm not sure why there are two third person camera states though. The documentation doesn't say any more than that. One of them might need to be removed if it's something weird.

 

Anyways that would circumvent the Game.ForceThirdPerson() call from doing anything weird if it was already in third person.

Link to comment

No I hadn't made the ring script. Because I didn't think that this would make a difference.

 

But now I have. And still everything is working as expected. There is no camera change in 3rd person.

 

The only thing I made different (because I already had a simila ring scrip available): I have a check if the player has equipped:

 
Event OnEquipped(Actor akActor)
If akActor == Game.GetPlayer()
Game.ForceThirdPerson()
EndIf
EndEvent

 

Link to comment

 

Event OnEquipped(Actor akActor)
If akActor == Game.GetPlayer()
Game.ForceThirdPerson()
EndIf
EndEvent

 

 

@fore, don't use Game.getPlayer(), especially if this event will be triggered often.

Game.getPlayer() is about 1000 times slower that using a PlayerRef Property. (Confirmed in script profiling many times.)

 

 

Actor Property PlayerRef Auto
 
Event OnEquipped(Actor akActor)
  If akActor == GetPlayerRef
    Game.ForceThirdPerson()
  EndIf
EndEvent
Link to comment

 

No I hadn't made the ring script. Because I didn't think that this would make a difference.

 

But now I have. And still everything is working as expected. There is no camera change in 3rd person.

 

The only thing I made different (because I already had a simila ring scrip available): I have a check if the player has equipped:

 
Event OnEquipped(Actor akActor)
If akActor == Game.GetPlayer()
Game.ForceThirdPerson()
EndIf
EndEvent

 

 

Well I'm mystified then. Because when I run that exact same code I get the bug.

 

Turns out my solution I posted earlier won't work either. It seems the camera state while in a menu returns 7 for "tweenmenu" whether you're in 1st or 3rd person.

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