Jump to content

Recommended Posts

Posted (edited)

A problem I encountered in my compilation efforts is that sometimes the skill check is associated with the node you end up at if you pass the check, and sometimes with the node you cannot press unless you pass the check. Typically the first kind exists in scripted interactions, and the second in regular conversations, but not always.

This was mostly an annoyance that I handled by including the strings of both the nodes before and after the skill check node, thus providing enough context to figure out which one is really the check and perhaps "what it's all about" too. However, now that I want to add alternate ways to pass the check, I can no longer be in doubt about this. I've been trying to find a pattern to no avail. The bottom of my post has four JSON entries, from which I removed a few parameters they all had in common.

The first one is for a wilderness scripted interaction on Maje Island, in which you can choose to search the area. re_si_wilder_trap.conversationbundle
The second one is the node you arrive at if you choose to search the area with the Watcher and the Watcher has 1 survival. This is what my program will consider the node associated with the skill check, as the skill check is a conditional on that node. re_si_wilder_trap.conversationbundle
The third one is for an interaction with Bekarna in TFS, in which you can impress her by passing a 19 Arcana check. The option isn't available if you don't have 19 Arcana. This is what my program will consider the node associated with the skill check, as the skill check is a conditional on that node. lax03_00_cv_bekarna.conversationbundle 
The fourth one is the node you reach after wooing her with the 19 Arcana line. lax03_00_cv_bekarna.conversationbundle 

Here are some of my discarded theories:

  1. PlayerResponseNode always leads to skill checks: Negative, there are such nodes where there is a skill check neither on the source nor target nodes.
  2. TalkNode is always the result of a skill check: Negative, same reason.
  3. If a TalkNode has conditions, it's the result of a skill check: Mayyyybe, but there are TalkNodes with check conditionals on themselves, who also have links to other nodes, with checks (even if not necessarily skill checks) attached to those links. Check 00_cv_ruanu.conversationbundle, node 277, for example. If this is the logic, it's hyper spaghetti.

Update: This logic might be waterproof! If the prior node has the Void InteractionSelectPartyMember(Int32) stuff in it, it's the "real" node. If that doesn't exist, the skill check node itself is. Now in theory, there can be multiple prior nodes, and at times there are, but probably not in these cases...

Search the area

{
	"$type": "OEIFormats.FlowCharts.Conversations.PlayerResponseNode, OEIFormats",
	"Persistence": 3,
	"NodeID": 290,
	"ContainerNodeID": -1,
	"Links": [
		{
			"$type": "OEIFormats.FlowCharts.Conversations.DialogueLink, OEIFormats",
			"RandomWeight": 1,
			"PlayQuestionNodeVO": true,
			"QuestionNodeTextDisplay": 0,
			"FromNodeID": 290,
			"ToNodeID": 73,
			"PointsToGhost": false,
			"Conditionals": {
				"Operator": 0,
				"Components": []
			},
			"ClassExtender": {
				"ExtendedProperties": []
			}
		},
		{
			"$type": "OEIFormats.FlowCharts.Conversations.DialogueLink, OEIFormats",
			"RandomWeight": 1,
			"PlayQuestionNodeVO": true,
			"QuestionNodeTextDisplay": 0,
			"FromNodeID": 290,
			"ToNodeID": 148,
			"PointsToGhost": false,
			"Conditionals": {
				"Operator": 0,
				"Components": []
			},
			"ClassExtender": {
				"ExtendedProperties": []
			}
		},
		{
			"$type": "OEIFormats.FlowCharts.Conversations.DialogueLink, OEIFormats",
			"RandomWeight": 1,
			"PlayQuestionNodeVO": true,
			"QuestionNodeTextDisplay": 0,
			"FromNodeID": 290,
			"ToNodeID": 74,
			"PointsToGhost": false,
			"Conditionals": {
				"Operator": 0,
				"Components": []
			},
			"ClassExtender": {
				"ExtendedProperties": []
			}
		},
		{
			"$type": "OEIFormats.FlowCharts.Conversations.DialogueLink, OEIFormats",
			"RandomWeight": 1,
			"PlayQuestionNodeVO": true,
			"QuestionNodeTextDisplay": 0,
			"FromNodeID": 290,
			"ToNodeID": 289,
			"PointsToGhost": false,
			"Conditionals": {
				"Operator": 0,
				"Components": []
			},
			"ClassExtender": {
				"ExtendedProperties": []
			}
		},
		{
			"$type": "OEIFormats.FlowCharts.Conversations.DialogueLink, OEIFormats",
			"RandomWeight": 1,
			"PlayQuestionNodeVO": true,
			"QuestionNodeTextDisplay": 0,
			"FromNodeID": 290,
			"ToNodeID": 286,
			"PointsToGhost": false,
			"Conditionals": {
				"Operator": 0,
				"Components": []
			},
			"ClassExtender": {
				"ExtendedProperties": []
			}
		}
	],
	"ClassExtender": {
		"ExtendedProperties": [
			"SpeakerAnimation,0",
			"ListenerAnimation,0",
			"DoNotClearText,False",
			"FocusedSpeaker,",
			"VOEventOverride,None"
		]
	},
	"Conditionals": {
		"Operator": 0,
		"Components": []
	},
	"OnEnterScripts": [
		{
			"Data": {
				"FullName": "Void InteractionSelectPartyMember(Int32)",
				"Parameters": [
					"0"
				],
				"Flags": "",
				"UnrealCall": "",
				"FunctionHash": 997632775,
				"ParameterHash": 1233874279
			},
			"Conditional": {
				"Operator": 0,
				"Components": []
			}
		}
	],
	"OnExitScripts": [],
	"OnUpdateScripts": []
}

 

Survival 1 Watcher skill check

{
	"$type": "OEIFormats.FlowCharts.Conversations.TalkNode, OEIFormats",
	"EmotionType": "",
	"EmotionStrength": 0.5,
	"PersistEmotion": true,
	"EmotionDelay": 0.0,
	"SpeakerGuid": "6a99a109-0000-0000-0000-000000000000",
	"ListenerGuid": "b1a8e901-0000-0000-0000-000000000000",
	"ExternalVO": "",
	"HasVO": false,
	"Persistence": 0,	
	"NodeID": 73,
	"ContainerNodeID": -1,
	"Links": [
		{
			"$type": "OEIFormats.FlowCharts.Conversations.DialogueLink, OEIFormats",
			"RandomWeight": 1,
			"PlayQuestionNodeVO": true,
			"QuestionNodeTextDisplay": 0,
			"FromNodeID": 73,
			"ToNodeID": 75,
			"PointsToGhost": false,
			"Conditionals": {
				"Operator": 0,
				"Components": []
			},
			"ClassExtender": {
				"ExtendedProperties": []
			}
		}
	],
	"ClassExtender": {
		"ExtendedProperties": [
			"SpeakerAnimation,0",
			"ListenerAnimation,0",
			"DoNotClearText,False",
			"FocusedSpeaker,6a99a109-0000-0000-0000-000000000000",
			"VOEventOverride,None"
		]
	},
	"Conditionals": {
		"Operator": 0,
		"Components": [
			{
				"$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats",
				"Data": {
					"FullName": "Boolean AreGuidsSameObject(Guid, Guid)",
					"Parameters": [
						"4e3d0000-0000-0000-0000-000000000000",
						"b1a8e901-0000-0000-0000-000000000000"
					],
					"Flags": "",
					"UnrealCall": "",
					"FunctionHash": -2074419224,
					"ParameterHash": -790561223
				},
				"Not": false,
				"Operator": 0
			},
			{
				"$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats",
				"Data": {
					"FullName": "Boolean IsSkillValue(Guid, Guid, Operator, Int32, Boolean, Boolean)",
					"Parameters": [
						"4e3d0000-0000-0000-0000-000000000000",
						"9c7962b8-bf69-4670-ba67-acc86a09fca8",
						"GreaterThanOrEqualTo",
						"1",
						"True",
						"False"
					],
					"Flags": "",
					"UnrealCall": "",
					"FunctionHash": 193829831,
					"ParameterHash": 691694871
				},
				"Not": false,
				"Operator": 1
			}
		]
	},
	"OnEnterScripts": [],
	"OnExitScripts": [],
	"OnUpdateScripts": []
}

 

You can press me if you have Arcana 19

{
	"$type": "OEIFormats.FlowCharts.Conversations.PlayerResponseNode, OEIFormats",
	"Persistence": 3,
	"NodeID": 160,
	"ContainerNodeID": -1,
	"Links": [
		{
			"$type": "OEIFormats.FlowCharts.Conversations.DialogueLink, OEIFormats",
			"RandomWeight": 1,
			"PlayQuestionNodeVO": true,
			"QuestionNodeTextDisplay": 0,
			"FromNodeID": 160,
			"ToNodeID": 163,
			"PointsToGhost": false,
			"Conditionals": {
				"Operator": 0,
				"Components": []
			},
			"ClassExtender": {
				"ExtendedProperties": []
			}
		}
	],
	"ClassExtender": {
		"ExtendedProperties": [
			"SpeakerAnimation,0",
			"ListenerAnimation,0",
			"DoNotClearText,False",
			"FocusedSpeaker,",
			"VOEventOverride,None"
		]
	},
	"Conditionals": {
		"Operator": 0,
		"Components": [
			{
				"$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats",
				"Data": {
					"FullName": "Boolean IsSkillValue(Guid, Guid, Operator, Int32, Boolean, Boolean)",
					"Parameters": [
						"b1a8e901-0000-0000-0000-000000000000",
						"e5f33551-ec5c-4cc8-b5f2-1eb03d210374",
						"GreaterThanOrEqualTo",
						"19",
						"True",
						"False"
					],
					"Flags": "",
					"UnrealCall": "",
					"FunctionHash": 193829831,
					"ParameterHash": -409713188
				},
				"Not": false,
				"Operator": 0
			}
		]
	},
	"OnEnterScripts": [],
	"OnExitScripts": [],
	"OnUpdateScripts": []
}

 

Gellarde, a fellow nerd, sayeth Bekarna

{
	"$type": "OEIFormats.FlowCharts.Conversations.TalkNode, OEIFormats",
	"EmotionType": "",
	"EmotionStrength": 0.5,
	"PersistEmotion": true,
	"EmotionDelay": 0.0,
	"SpeakerGuid": "934adb9c-d294-46b0-8dd7-5e6d79d7000d",
	"ListenerGuid": "b1a8e901-0000-0000-0000-000000000000",
	"ExternalVO": "",
	"HasVO": true,
	"Persistence": 0,
	"NodeID": 163,
	"ContainerNodeID": -1,
	"Links": [
		{
			"$type": "OEIFormats.FlowCharts.Conversations.DialogueLink, OEIFormats",
			"RandomWeight": 1,
			"PlayQuestionNodeVO": true,
			"QuestionNodeTextDisplay": 0,
			"FromNodeID": 163,
			"ToNodeID": 146,
			"PointsToGhost": true,
			"Conditionals": {
				"Operator": 0,
				"Components": []
			},
			"ClassExtender": {
				"ExtendedProperties": []
			}
		}
	],
	"ClassExtender": {
		"ExtendedProperties": [
			"SpeakerAnimation,0",
			"ListenerAnimation,0",
			"DoNotClearText,False",
			"FocusedSpeaker,934adb9c-d294-46b0-8dd7-5e6d79d7000d",
			"VOEventOverride,None"
		]
	},
	"Conditionals": {
		"Operator": 0,
		"Components": []
	},
	"OnEnterScripts": [],
	"OnExitScripts": [],
	"OnUpdateScripts": []
}
Edited by omgFIREBALLS

My Deadfire mods
Out With The Good: The mod for tidying up your Deadfire combat tooltip.
Waukeen's Berth: Make all your basic purchases at Queen's Berth.
Carrying Voice: Wider chanter invocations.
Nemnok's Congregation: Lets all priests express their true faith.

Deadfire skill check catalogue right here!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...