Post by giftfish on Feb 23, 2017 17:10:02 GMT
Yay, first research thread!
----
I'm not entirely certain the content below is more technical research or more modder's research. It will have impact on toolset coding (or it should), the problem is that I don't know exactly how. I've identified an issue, but don't have a good answer for why it's happening.
----
About two years ago when I initially did testing for Thane's romance scene for TM, I discovered that sometimes matinee objects for gestures (BioEvtSysTrackGesture) can cause actors to relocate within a scene. Other classes that can cause (or seemingly cause) this behavior are InterpTrackMove, BioSetPawnFacing, and Teleport objects. When none of those are present (or they are turned "off), and the relocation still happens, then the gesture is the culprit.
Until now, I didn't have solid proof of this, and more importantly, I didn't know how to fix it. I now have both. I have indirect evidence that the toolset is missing data related to gestures. Whether this is an issue with the property library or what, I don't know.
Here's the situation.
I ran into an issue with one of Bailey's dialogues where this was happening -- his actor was moving to a new location when I didn't want him to. To be clear, I'm talking this:


At first, I thought this was due to the PawnFacing (BioEvtSysTrachSetFacing) objects present in the branch of dialogue. Here's the outline, with the PawnFacing objects assigned to their lines for reference:
So, the first step was to remove these PF instances. To do that, I located a different branch of the same convo where he stayed stationary, so I could use it as an example for my modded branch. The branch I found works like this:
So, to solve my problem, I removed the PF from lines 2 and 5 in Branch 1. That way it would match the structure of Branch 2, where Bailey never moved.
Result: Bailey still relocated in the same pattern.
At that point, gestures were the only explanation, since there were no other objects in these lines that could cause the relocation. So, I took a closer look at all of the BioEvtSysTrackGesture objects in Branch 2. There was a single head nod gesture in one. All others were present, but "blank" (referred to a StartingPose Idle, only). From there, I did a series of tests to Branch 1/Line 2 (since the initial move occurs there) in an attempt to figure out what was going on. Below is a summary of those tests, using some simplified notation for ease of discussion. All "Obj" references are to Bailey's BioEvtSysTrackGesture object for that line. "Ges X" indicates varying types of gestures referenced by those objects.
So... any gesture assigned to Obj 1 causes Bailey to move. As long as I use a different object -- one where a move doesn't happen -- then I can assign Gesture C to that object and it works perfectly. Assigning that exact same gesture to Object 1 does not work. Object 1 is what is causing the relocation.
I stepped through the hex for "BioEvtSysTrackGesture Object 1" and I cannot find any missing properties. The hex and unreal line up and there is no binary. There is no attached script. I don't know how it is happening, but it is definitely happening. Somehow there is location-related data inside this object. Using a different gesture object where Bailey doesn't move -- or a blank gesture object -- fixes the problem. It is apparently lacking whatever information is causing the move.
I'm pretty confounded by this. Back when I figured out we were missing the tertiary field for the cameras, I was able to locate the unread hex in the array property. In this case, I can't find anything. I've search multiple objects over the past two years when I've ran across this problem, so it seems to be consistent. I'd say my results are wrong, but I know they are not. Yet, I can't for the life of me figure out HOW we're missing this information. At least now we do know how to fix it: you must clone a different BioEvtSysTrackGesture that doesn't trigger a relocation for the actor. Then you can make it reference any gesture you want, add it to the interpgroup, and you're done. Great! But... we should still know how it's happening in the first place.
If anyone has ideas, I'd love to hear them
I hesitate to put this on Git atm, since I don't know where the problem lies in the toolset.
----
I'm not entirely certain the content below is more technical research or more modder's research. It will have impact on toolset coding (or it should), the problem is that I don't know exactly how. I've identified an issue, but don't have a good answer for why it's happening.
----
About two years ago when I initially did testing for Thane's romance scene for TM, I discovered that sometimes matinee objects for gestures (BioEvtSysTrackGesture) can cause actors to relocate within a scene. Other classes that can cause (or seemingly cause) this behavior are InterpTrackMove, BioSetPawnFacing, and Teleport objects. When none of those are present (or they are turned "off), and the relocation still happens, then the gesture is the culprit.
Until now, I didn't have solid proof of this, and more importantly, I didn't know how to fix it. I now have both. I have indirect evidence that the toolset is missing data related to gestures. Whether this is an issue with the property library or what, I don't know.
Here's the situation.
I ran into an issue with one of Bailey's dialogues where this was happening -- his actor was moving to a new location when I didn't want him to. To be clear, I'm talking this:


At first, I thought this was due to the PawnFacing (BioEvtSysTrachSetFacing) objects present in the branch of dialogue. Here's the outline, with the PawnFacing objects assigned to their lines for reference:
BRANCH 1
Line 1 - PF=node 5
Line 2 - PF=node 2 (bailey moves)
Line 3 - no PF (bailey stays put)
Line 4 - no PF (bailey stays put)
Line 5 - PF=node 5 (bailey moves back to location at Line 1)
Line 1 - PF=node 5
Line 2 - PF=node 2 (bailey moves)
Line 3 - no PF (bailey stays put)
Line 4 - no PF (bailey stays put)
Line 5 - PF=node 5 (bailey moves back to location at Line 1)
So, the first step was to remove these PF instances. To do that, I located a different branch of the same convo where he stayed stationary, so I could use it as an example for my modded branch. The branch I found works like this:
BRANCH 2
Line 1 - PF=node 5
Line 2 - no PF (bailey stays put)
Line 3 - no PF (bailey stays put)
Line 4 - no PF (bailey stays put)
Line 5 - no PF (bailey stays put)
Line 1 - PF=node 5
Line 2 - no PF (bailey stays put)
Line 3 - no PF (bailey stays put)
Line 4 - no PF (bailey stays put)
Line 5 - no PF (bailey stays put)
So, to solve my problem, I removed the PF from lines 2 and 5 in Branch 1. That way it would match the structure of Branch 2, where Bailey never moved.
Result: Bailey still relocated in the same pattern.
At that point, gestures were the only explanation, since there were no other objects in these lines that could cause the relocation. So, I took a closer look at all of the BioEvtSysTrackGesture objects in Branch 2. There was a single head nod gesture in one. All others were present, but "blank" (referred to a StartingPose Idle, only). From there, I did a series of tests to Branch 1/Line 2 (since the initial move occurs there) in an attempt to figure out what was going on. Below is a summary of those tests, using some simplified notation for ease of discussion. All "Obj" references are to Bailey's BioEvtSysTrackGesture object for that line. "Ges X" indicates varying types of gestures referenced by those objects.
B1/L2: Obj 1 = Ges A = Bailey moves (vanilla)
B1/L2: Obj 1 = Ges C = Bailey moves (but new gesture works; this is the gesture I want to use)
B1/L2: Obj 2 = Ges B = Bailey doesn't move (Obj 2 sourced from B2/L2)
-- CLONE OBJ 2 TO CREATE OBJ 3 --
B1/L2: Obj 3 = Ges C = Bailey doesn't move (and new gesture works)
B1/L2: Obj 1 = Ges C = Bailey moves (but new gesture works; this is the gesture I want to use)
B1/L2: Obj 2 = Ges B = Bailey doesn't move (Obj 2 sourced from B2/L2)
-- CLONE OBJ 2 TO CREATE OBJ 3 --
B1/L2: Obj 3 = Ges C = Bailey doesn't move (and new gesture works)
So... any gesture assigned to Obj 1 causes Bailey to move. As long as I use a different object -- one where a move doesn't happen -- then I can assign Gesture C to that object and it works perfectly. Assigning that exact same gesture to Object 1 does not work. Object 1 is what is causing the relocation.
I stepped through the hex for "BioEvtSysTrackGesture Object 1" and I cannot find any missing properties. The hex and unreal line up and there is no binary. There is no attached script. I don't know how it is happening, but it is definitely happening. Somehow there is location-related data inside this object. Using a different gesture object where Bailey doesn't move -- or a blank gesture object -- fixes the problem. It is apparently lacking whatever information is causing the move.
I'm pretty confounded by this. Back when I figured out we were missing the tertiary field for the cameras, I was able to locate the unread hex in the array property. In this case, I can't find anything. I've search multiple objects over the past two years when I've ran across this problem, so it seems to be consistent. I'd say my results are wrong, but I know they are not. Yet, I can't for the life of me figure out HOW we're missing this information. At least now we do know how to fix it: you must clone a different BioEvtSysTrackGesture that doesn't trigger a relocation for the actor. Then you can make it reference any gesture you want, add it to the interpgroup, and you're done. Great! But... we should still know how it's happening in the first place.
If anyone has ideas, I'd love to hear them
