Conversation oddity - turning camera

I’m having a situation where the PC and the companions enter a trigger, I then teleport them nearby to a waypoint just to get there exact location. The script looks like this:

void main()
{
	
object oPC = GetEnteringObject();
if(!GetIsPC(oPC)) return;
if(GetLocalInt(OBJECT_SELF,"Done")) return;
object oPC1 = GetFirstPC();

object oWP = GetObjectByTag("talktolazarus");

SetLocalInt(OBJECT_SELF,"Done",1);

object oFM = GetFirstFactionMember(oPC1,FALSE);

	while(GetIsObjectValid(oFM))
	{
	
		AssignCommand(oFM, ClearAllActions());
		AssignCommand(oFM, ActionJumpToObject(oWP));
		
		oFM = GetNextFactionMember(oPC1, FALSE);
	}

AssignCommand(oPC1, ClearAllActions());
AssignCommand(oPC1, ActionJumpToObject(oWP));	
	
SetCutsceneMode(oPC1);	
	
object oLazarus = GetObjectByTag("lazarus");	
			
DelayCommand(0.5,AssignCommand(oLazarus, ActionStartConversation(oPC1, "c_sa_lazarustalk", FALSE, FALSE, TRUE, FALSE)));

}

When the conversation starts it’s some other NPCs than the owner of the conversation that talks on two nodes. On the first node I have a script I got from @kevL_s and @travus which I really like:

//  ga_jump_face_npc
/*
	Jumps companions into formation and makes them face the sFacee at random intervals.
	The party will then be immobilized to prevent them from moving around during the convo.
	Place this on the very first node of the dialog.
	Use this in conjunction with the remove_csi script to remove the immobilization effect.
	
	sFacee - The tag of the NPC to talk to. 
	fSpacing - The spacing between party menbers. The minimum is 0.8.
	
	script by travus with additions by kevL_s
*/

#include "ginc_group"
#include "nw_i0_spells"

void FaceParty(object oPC, string sFacee)
{
	vector v = GetPosition(GetObjectByTag(sFacee));
	object oFM = GetFirstFactionMember(oPC, FALSE);

	while (GetIsObjectValid(oFM))
	{
		AssignCommand(oFM, ClearAllActions());
		DelayCommand(GetRandomDelay(), AssignCommand(oFM, SetFacingPoint(v, TRUE)));
		ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneImmobilize(), oFM);
		oFM = GetNextFactionMember(oPC, FALSE);
	}	
}

void main(string sFacee, float fSpacing)
{
	object oPC = GetFirstPC();
	
	if (fSpacing < 0.8) fSpacing = 0.8f;
	
	ResetGroup(PARTY_GROUP_NAME);
	GroupAddFaction(PARTY_GROUP_NAME, oPC, GROUP_LEADER_FIRST, TRUE);	
	GroupSetBMAFormation(PARTY_GROUP_NAME, fSpacing);
	GroupSetNoise(PARTY_GROUP_NAME);	
	GroupMoveToFormationLocation(PARTY_GROUP_NAME, GetLocation(oPC), MOVE_JUMP_INSTANT);
	DelayCommand(0.1f, FaceParty(oPC, sFacee));
}

Now, the problem I have with this conversation is that on the third red node on the conversation, the owner of the conversation starts to talk. When he does that the camera sort of “turns around” to focus on him. And the camera does that whenever he speaks in the conversation. The camera doesn’t do this on any of the other NPCs or when the PC that speaks. At first I felt like this is no biggie, but having tested this conversation a few times, I have found that I’m quite annoyed by this.

Does anyone know what causes this strange behaviour?

I tried with removing the last script and that actually seemed to solve the issue. However, I would have liked to be able to keep the last script since it looks better with where the companions locate themeselves.

@travus or @kevL_s - Since you made this this script for me (ok, I think I might have edited it a tiny bit, I don’t know), do you perhaps know why this happens when using this script?

… perhaps try using an IPoint for the owner of that particular dialog … ?

/idk

Ok, that could be a solution perhaps…

In any case it still looks fine now when I’ve tested without the last script, but I’ll try what you suggested.

I agree with KevL - change the owner of the dialog to someone that’s not in the party - an NPC or IPoint.

Or you could set-up a static camera and use it for that particular node.

2 Likes

It’s really weird. I changed to an ipoint speaker being the owner of the conversation. Still, the object called Lazarus, when he speaks, the camera turns, but now it’s even weirder. Now, Lazarus won’t face the player when he has in a previous node faced another NPC. From my experience an NPC always faces the PC unless told otherwise.
For your information it’s the object Lazarus that the party is facing, the sFacee so to speak.

I think think I have to, for the meantime, remove the ga_jump_pace_npc script and just do without it.

yeh :\

facing and camera can get so frikkin tricky sometimes … best to carry on i guess

You’re right about that. NWN2 isn’t trustworthy at all when you’re in the middle of a conversation in the game. All sorts of random stuff can happen.

1 Like

andgalf… This is a pain in the £$&% issue which I have had a lot of time %$£@ing about with to no effect. It seems completely random but turns up on some conversations despite them having exactly the same set up as another one that doesn’t do it.

I tried changing owners of conversations and nodes and all sorts of things to no effect. I actually suspect it’s to do with position of the talking person, almost as if the camera moves to hunt them down while filming and it hasn’t got a definite location.

Personally I just gave up and moved on it wasn’t worth the brain ache, the conversation worked and that was the important bit to me.

But you’re right it is annoying !

1 Like

Interesting. I might have had this problem before but I’m not sure.

So you think this might not have to do with the script I used here, since you had this problem too? Weird thing is that the camera turning goes away when removing this particular script at least in this conversation.
Another odd thing is that I’ve used this script before and I remember it working splendidly and I don’t believe the camera was turning then. So maybe it is as you say, that it has to do exactly where the PC is standing…

it might depend on whether it’s on a PC or NPC node …

i didn’t see anything unusual in the script itself

I mainly use speak triggers not scripts for conversations and can safely say that it happens with a trigger and no script because I distinctly remember one particularly annoying time. The party walked into an area hit the trigger owned by one of the companions and it happened.

But this might help explain something… I spawn random NPCs to set off triggers in areas with populations or invisible kobolds in other places. You get to a point in a quest, I spawn an NPC that owns the trigger you’ve walked over loads of times but this time when you cross it the trigger works because the NPC is there.

Now, one time the camera move happened and it was during a party chat but the trigger was owned by an npc not included in the conversation. So I presumed it was the computer wanting to go to the owner then realising it wasn’t their turn to speak and spinning back to the speaker.

It doesn’t explain the other times but you could try messing about with who owns the conversation. If you have a permanent companion use their tag.

I can’t remember this happening in my older mods and it was only the latest one which aslo makes no sense because I make things the same way and there have been no updates…

Really what is going on is as clear as mud so good luck hunting andgalf !

1 Like

And in my case the one where the camera was spinning was the conversation owner, so it can’t be that either then.

It’s a mystery, it’s annoying, it’s a pain in the $£@* !

I’ve been there andgalf :weary:

Use a static camera or many ?

When it “turn around” like this it’s beceause the engine is left to decide.

1 Like

Yep, and the engine makes some really weird choices I’ve noticed when and what to show with the camera when using NWN2 style conversations, most having to do with distance to the one the PC talks to but also the angle at which you have the “camera” when walking in to the conversation.

andgalf… Shallina’s nailed it and it’s what I suspected, the engine wondering what to do, so at least you know your script’s good.

I think that over all the engine’s pretty amazing when making cutscenes, it might put a camera through a wall, or a head or spin about sometimes but it’s dealing with things that are moving and not in the same place even if you jump them. In the thousands of lines of conversations I’ve made it doesn’t happen that often. Normally it can find the face of the speaker and does a good job, preferable to us having to place all cameras, face people at them for every single line of conversation then fill in the settings.

That’s why we notice and get annoyed when it doesn’t work exactly right… But it’s still really good.

2 Likes