Jump to content

[Help needed] (WiP) Beast of Winter Extended mod


Recommended Posts

Hi everyone !

First of all, sorry for my bad english, french here =)

At first I wanted to make a romance mod for Vatnir but with suggestions from people on Tumblr (and because I realized that I love modding), I decided to push the project further by extending the Beast of Winter DLC.

So far, I've managed to get by, to understand logically how dialogs, nodes, variables work, how to add stuff to what already exists, how to put it all properly in an override folder. I even managed to create a passive effect to add to the player after a certain event (I thank all the people in this forum who took the time to explain how to do all these things, it clearly helped me!).

I still have a lot of work to do but I'm stuck on one thing: adding a brand new dialogue. Even if I followed the few infos I could find on this subject, I didn't succeed (and I admit I don't want to spend days testing. It was fun at the beginning but now I just want to move forward on this project).

Here's what I'm trying to do: I'd like to create a hub dialog for Vatnir like the other companions that is in a separate file (so a new dialog). The problem is that no matter what I do, when I talk to him in the game, the harbinger_leader dialog starts (the file where his main conversations are in the vanilla game). How do I make the game understand that I'd like it to start another one?

I hope this is understandable ^^'

  • Like 2
Link to comment
Share on other sites

I think which conversations are triggered when speaking to characters are hardcoded in the Unity asset files.

You could try inserting a TriggerConversationNode at the right place (and with the right conditionals) in harbinger_leader to intercept the conversation and trigger your own.

an example from 04_cv_queen_onezaka_ii_wahaki_quest:

Spoiler

{
	"$type": "OEIFormats.FlowCharts.Conversations.TriggerConversationNode, OEIFormats",
	"ConversationGuid": "07069a05-0efc-4b25-b883-57621d1d3f4d",
	"StartNodeID": 0,
	"NotSkippable": false,
	"IsQuestionNode": false,
	"HideSpeaker": false,
	"IsTempText": false,
	"PlayVOAs3DSound": false,
	"PlayType": 0,
	"Persistence": 0,
	"NoPlayRandomWeight": 0,
	"VOPositioning": 0,
	"DisplayType": 1,
	"NodeID": 29,
	"ContainerNodeID": -1,
	"Links": [],
	"ClassExtender": {
		"ExtendedProperties": [
			"SpeakerAnimation,0",
			"ListenerAnimation,0",
			"DoNotClearText,False",
			"FocusedSpeaker,",
			"VOEventOverride,None"
		]
	},
	"Conditionals": {
		"Operator": 0,
		"Components": []
	},
	"OnEnterScripts": [],
	"OnExitScripts": [],
	"OnUpdateScripts": []
}

 

 

  • Like 1
Link to comment
Share on other sites

19 hours ago, Noqn said:

You could try inserting a TriggerConversationNode at the right place (and with the right conditionals) in harbinger_leader to intercept the conversation and trigger your own.

This seems to work, thank you!!

Gonna make more dialogues and tests but the new convo is taken into account and appears in the game 😃

Quick question: Is it possible to add audio files (voice files to be exact) via override? I have a feeling it doesn't work. =/

Edited by Glub
  • Like 2
Link to comment
Share on other sites

Only way I have gotten my audio mods to work is by placing the files inside of a folder in StreamingAssets\Audio\Windows\Voices\English(US). Placing audio inside a mod's override folder doesn't work from what I can tell. 

I am really interested to see it might be possible to add new audio and dialogue!

Edited by Kvellen
  • Like 2
Link to comment
Share on other sites

  • 2 weeks later...
On 1/20/2021 at 5:53 PM, Kvellen said:

Only way I have gotten my audio mods to work is by placing the files inside of a folder in StreamingAssets\Audio\Windows\Voices\English(US). Placing audio inside a mod's override folder doesn't work from what I can tell. 

I am really interested to see it might be possible to add new audio and dialogue!

Hey! Didn't manage to find how to make audio files work other way yet. But, about dialogues, Nonq's solution worked well! Vatnir has now a hub conversation with more than 100 entries \0/

Now I've reached the point in the mod where I'd like to try to make Waidwen a companion. Before I start, I'd like to know if it's even possible?
I came across a post where someone explained that it was possible to create a new companion from an existing NPC but without any more details.
I'll look a little on my side but if someone has info, I'll take it. ;)

  • Like 1
Link to comment
Share on other sites

That's awesome!

I found a reply from a developer regarding if audio files can be placed in the override folder. 

Regardless I believe adding audio to a new conversations is possible! It's simply a case of naming the audio files such that they have the title of the conversation they correspond to, in addition to the node number they should play on (Eg. lax02_01_cv_harbinger_leader_0001.wem, lax02_01_cv_harbinger_leader_0003.wem, lax02_02_cv_dracolich_phylactery_0175.wem, etc). I've only tested this with pre-existing conversations, but I don't see why it shouldn't work for a completely new conversations as well!

  • Like 1
Link to comment
Share on other sites

@Kvellen Yeah, I had tested this on an existing conversation and I have just tested it on a new one, I can confirm that it also works very well. 👍 Thank you!

 

Now I'm trying to create a new companion without success so far.
I've tried to make Waidwen a companion by using what already exists on him and adding some data from Edér but it doesn't seem to be working.

Basically, in lax2_characters.gamedatabundle, I added some stuff to LAX02_CHA_02_Waidwen (I can't remember what exactly, I'll have to check the backup) and I created 'CompanionWaidwen' with the same data as 'CompanionEder' (which is in characters.gamedatabundle) and new IDs where needed. For the prefabs, I took the ones you can find from Waidwen (assets/prefabs/characters/lax02_poe2_npcs/lax02_npc_02_wandering_soul_waidwen.prefab)

Spoiler

{

            "$type": "Game.GameData.CharacterStatsGameData, Assembly-CSharp",

            "DebugName": "LAX02_CHA_02_Waidwen",

            "ID": "1291ce93-b9f3-4374-85c6-a9e935961e52",

            "Components": [

                {

                    "$type": "Game.GameData.CharacterStatsComponent, Assembly-CSharp",

                    "DisplayName": 1599,

                    "Gender": "Male",

                    "RaceID": "74e606b7-022a-40af-858d-83dd90a98e62",

                    "SubraceID": "6cdda9a5-05d4-406a-92b2-2fd3f69f5403",

                    "CultureID": "8759fdd6-fc2c-4af3-84de-0679b41738f1",

                    "CharacterProgressionTableID": "c6842b0c-75a9-49a8-8e2b-2283bdecd558",

                    "BaseClassLevel": 1,

                    "SpeakerID": "8f8fa428-8a08-436b-b5e9-f93381163eca",

                    "NakedArmorMaterial": "None",

                    "CreatureTypeGDID": "00000000-0000-0000-0000-000000000000",

                    "BestiaryEntryID": "00000000-0000-0000-0000-000000000000",

                    "BackgroundID": "05594ae8-9d20-4592-97b5-62a1d69c1ddb",

                    "KeywordsIDs": [

                        "8b258944-236a-47cf-8bc2-534dd0e011f6"

                    ],

                    "BaseMight": 10,

                    "BaseConstitution": 10,

                    "BaseDexterity": 10,

                    "BasePerception": 10,

                    "BaseIntellect": 10,

                    "BaseResolve": 10,

                    "SkillsList": [],

                    "ImmuneToEngagement": "false",

                    "ImmuneToAttacks": "false",

                    "PerceptionType": "Normal",

                    "StealthDetectionID": "4b59d454-61f3-472f-906f-ff36afd861c0",

                    "StealingAdjustmentID": "00000000-0000-0000-0000-000000000000",

                    "StartingMaxEngageableEnemyCount": 0,

                    "StartingAttackSpeedMultiplier": 1,

                    "StartingRateOfFireMultiplier": 1,

                    "StartingReloadTimeMultiplier": 1,

                    "PersonalityID": "414cb4f8-afb6-44da-9976-b6934922e00e",

                    "AnimationAudioEventListID": "61f5933a-6899-4c1d-9ef1-43b3b444965f",

                    "MinLevelAdjustment": -50,

                    "MaxLevelAdjustment": 50,

                    "IsNamedCharacter": "false"

                },

                {

                    "$type": "Game.GameData.EquipmentSetComponent, Assembly-CSharp",

                    "HeadID": "00000000-0000-0000-0000-000000000000",

                    "NeckID": "00000000-0000-0000-0000-000000000000",

                    "CapeID": "00000000-0000-0000-0000-000000000000",

                    "ChestID": "cf0258c3-ecc3-413a-9d3c-53bf53208517",

                    "HandsID": "00000000-0000-0000-0000-000000000000",

                    "RightHandRingID": "00000000-0000-0000-0000-000000000000",

                    "LeftHandRingID": "00000000-0000-0000-0000-000000000000",

                    "FeetID": "00000000-0000-0000-0000-000000000000",

                    "WaistID": "00000000-0000-0000-0000-000000000000",

                    "GrimoireOrTrinketID": "00000000-0000-0000-0000-000000000000",

                    "PetID": "00000000-0000-0000-0000-000000000000",

                    "WeaponSets": [

                        {

                            "PrimaryWeaponID": "1a3485bc-ec1a-4089-8086-28da996c2aad",

                            "SecondaryWeaponID": "a7cabebc-a444-45b7-b60b-4927f29ee542"

                        },

                        {

                            "PrimaryWeaponID": "0bc6b44a-df87-4995-af66-196fbfd1d821",

                            "SecondaryWeaponID": "00000000-0000-0000-0000-000000000000"

                        }

                    ],

                    "PropsIDs": [

                        "d00d6d3b-1a5d-40bc-9657-51a5b62c3bd5"

                    ]

                }

            ]

        },

Spoiler

{

            "$type": "Game.GameData.CompanionGameData, Assembly-CSharp",

            "DebugName": "CompanionWaidwen",

            "ID": "3fd48add-b6b0-4a58-b1e9-12ecf7f84ebd",

            "Components": [

                {

                    "$type": "Game.GameData.CompanionComponent, Assembly-CSharp",

                    "CompanionGuidString": "b1a7e811-0000-0000-0000-000000000000",

                    "ScriptName": "c_eder",

                    "Prefab": "assets/prefabs/characters/lax02_poe2_npcs/lax02_npc_02_wandering_soul_waidwen.prefab",

                    "SpeakerID": "8f8fa428-8a08-436b-b5e9-f93381163eca",

                    "Topics": [

                        {

                            "TopicID": "2a640694-a441-456c-94f6-043d101e35da",

                            "Axis": "Negative",

                            "WeightID": "d8cd9f8e-5be6-4036-a8cb-48afbd7edc54",

                            "Conditional": {

                                "Operator": 0,

                                "Components": []

                            }

                        },

                        {

                            "TopicID": "2f84723b-2330-4248-a199-cde68fe4a005",

                            "Axis": "Negative",

                            "WeightID": "d8cd9f8e-5be6-4036-a8cb-48afbd7edc54",

                            "Conditional": {

                                "Operator": 0,

                                "Components": []

                            }

                        },

                        {

                            "TopicID": "60a2b7d7-e104-4f5a-aa7a-8d373451a528",

                            "Axis": "Positive",

                            "WeightID": "c131acce-6af4-4d78-b0e2-48b26e6631b1",

                            "Conditional": {

                                "Operator": 0,

                                "Components": []

                            }

                        },

                        {

                            "TopicID": "9ef259f0-29c7-4862-a5ff-e148188e3f48",

                            "Axis": "Positive",

                            "WeightID": "d8cd9f8e-5be6-4036-a8cb-48afbd7edc54",

                            "Conditional": {

                                "Operator": 0,

                                "Components": []

                            }

                        },

                        {

                            "TopicID": "e79eabe7-8d68-4cf4-9a07-3e84b154d6ec",

                            "Axis": "Positive",

                            "WeightID": "c131acce-6af4-4d78-b0e2-48b26e6631b1",

                            "Conditional": {

                                "Operator": 0,

                                "Components": []

                            }

                        },

                        {

                            "TopicID": "841c7801-3f8a-4190-ba5d-abc5375f415e",

                            "Axis": "Negative",

                            "WeightID": "d8cd9f8e-5be6-4036-a8cb-48afbd7edc54",

                            "Conditional": {

                                "Operator": 0,

                                "Components": []

                            }

                        },

                        {

                            "TopicID": "54839ad8-07dd-454a-9627-69e663201577",

                            "Axis": "Positive",

                            "WeightID": "d8cd9f8e-5be6-4036-a8cb-48afbd7edc54",

                            "Conditional": {

                                "Operator": 0,

                                "Components": []

                            }

                        },

                        {

                            "TopicID": "f03d4876-6981-4b74-bf24-1041a5f3a101",

                            "Axis": "Positive",

                            "WeightID": "c131acce-6af4-4d78-b0e2-48b26e6631b1",

                            "Conditional": {

                                "Operator": 0,

                                "Components": []

                            }

                        }

                    ],

                    "TopicReactions": [

                        {

                            "ChangeStrengthID": "54772c0d-cf3f-4589-8cab-9f3601d575c2",

                            "Axis": "Positive",

                            "Lines": [

                                {

                                    "String": 3

                                },

                                {

                                    "String": 67

                                },

                                {

                                    "String": 76

                                },

                                {

                                    "String": 81

                                },

                                {

                                    "String": 82

                                }

                            ]

                        },

                        {

                            "ChangeStrengthID": "e19a6f92-2165-4e34-be10-c65e8de970eb",

                            "Axis": "Positive",

                            "Lines": [

                                {

                                    "String": 5

                                },

                                {

                                    "String": 69

                                },

                                {

                                    "String": 77

                                }

                            ]

                        },

                        {

                            "ChangeStrengthID": "54772c0d-cf3f-4589-8cab-9f3601d575c2",

                            "Axis": "Negative",

                            "Lines": [

                                {

                                    "String": 70

                                },

                                {

                                    "String": 79

                                },

                                {

                                    "String": 1

                                },

                                {

                                    "String": 72

                                },

                                {

                                    "String": 73

                                }

                            ]

                        },

                        {

                            "ChangeStrengthID": "e19a6f92-2165-4e34-be10-c65e8de970eb",

                            "Axis": "Negative",

                            "Lines": [

                                {

                                    "String": 71

                                },

                                {

                                    "String": 2

                                },

                                {

                                    "String": 74

                                },

                                {

                                    "String": 75

                                }

                            ]

                        }

                    ],

                    "PlayerRelationship": [

                        {

                            "Threshold": "Neutral",

                            "Conversation": {

                                "GuidString": "00000000-0000-0000-0000-000000000000"

                            },

                            "Node": 0,

                            "Conditionals": {

                                "Operator": 0,

                                "Components": []

                            }

                        },

                        {

                            "Threshold": "Positive",

                            "Conversation": {

                                "GuidString": "311098db-e08c-4cd4-a611-b07c54f4159b"

                            },

                            "Node": 0,

                            "Conditionals": {

                                "Operator": 0,

                                "Components": []

                            }

                        },

                        {

                            "Threshold": "VeryPositive",

                            "Conversation": {

                                "GuidString": "311098db-e08c-4cd4-a611-b07c54f4159b"

                            },

                            "Node": 0,

                            "Conditionals": {

                                "Operator": 0,

                                "Components": []

                            }

                        },

                        {

                            "Threshold": "Negative",

                            "Conversation": {

                                "GuidString": "311098db-e08c-4cd4-a611-b07c54f4159b"

                            },

                            "Node": 0,

                            "Conditionals": {

                                "Operator": 0,

                                "Components": []

                            }

                        },

                        {

                            "Threshold": "VeryNegative",

                            "Conversation": {

                                "GuidString": "311098db-e08c-4cd4-a611-b07c54f4159b"

                            },

                            "Node": 0,

                            "Conditionals": {

                                "Operator": 0,

                                "Components": []

                            }

                        }

                    ],

                    "CompanionRelationships": [

                        {

                            "CompanionID": "5e73e8f1-9228-4271-92ec-6cc85d6fa3f3",

                            "RelationshipThresholds": [

                                {

                                    "Threshold": "Neutral",

                                    "Conversation": {

                                        "GuidString": "00000000-0000-0000-0000-000000000000"

                                    },

                                    "Node": 0,

                                    "Conditionals": {

                                        "Operator": 0,

                                        "Components": []

                                    }

                                },

                                {

                                    "Threshold": "Positive",

                                    "Conversation": {

                                        "GuidString": "00000000-0000-0000-0000-000000000000"

                                    },

                                    "Node": 0,

                                    "Conditionals": {

                                        "Operator": 0,

                                        "Components": []

                                    }

                                },

                                {

                                    "Threshold": "VeryPositive",

                                    "Conversation": {

                                        "GuidString": "00000000-0000-0000-0000-000000000000"

                                    },

                                    "Node": 0,

                                    "Conditionals": {

                                        "Operator": 0,

                                        "Components": []

                                    }

                                },

                                {

                                    "Threshold": "Negative",

                                    "Conversation": {

                                        "GuidString": "00000000-0000-0000-0000-000000000000"

                                    },

                                    "Node": 0,

                                    "Conditionals": {

                                        "Operator": 0,

                                        "Components": []

                                    }

                                },

                                {

                                    "Threshold": "VeryNegative",

                                    "Conversation": {

                                        "GuidString": "00000000-0000-0000-0000-000000000000"

                                    },

                                    "Node": 0,

                                    "Conditionals": {

                                        "Operator": 0,

                                        "Components": []

                                    }

                                }

                            ]

                        },

                        {

                            "CompanionID": "66817b77-8b74-4ca5-a3f8-bf536d5db2b8",

                            "RelationshipThresholds": [

                                {

                                    "Threshold": "Neutral",

                                    "Conversation": {

                                        "GuidString": "00000000-0000-0000-0000-000000000000"

                                    },

                                    "Node": 0,

                                    "Conditionals": {

                                        "Operator": 0,

                                        "Components": []

                                    }

                                },

                                {

                                    "Threshold": "Positive",

                                    "Conversation": {

                                        "GuidString": "ed333d7a-dfde-4f8c-9f8c-a45cdbacbcfe"

                                    },

                                    "Node": 16,

                                    "Conditionals": {

                                        "Operator": 0,

                                        "Components": [

                                            {

                                                "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats",

                                                "Data": {

                                                    "FullName": "Boolean IsGlobalValue(String, Operator, Int32)",

                                                    "Parameters": [

                                                        "n_xoti_relationship_eder_banter",

                                                        "EqualTo",

                                                        "1"

                                                    ],

                                                    "Flags": "",

                                                    "UnrealCall": "",

                                                    "FunctionHash": 901380568,

                                                    "ParameterHash": -1060131068

                                                },

                                                "Not": false,

                                                "Operator": 0

                                            },

                                            {

                                                "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats",

                                                "Data": {

                                                    "FullName": "Boolean IsGlobalValue(String, Operator, Int32)",

                                                    "Parameters": [

                                                        "b_Xoti_dead",

                                                        "EqualTo",

                                                        "1"

                                                    ],

                                                    "Flags": "",

                                                    "UnrealCall": "",

                                                    "FunctionHash": 901380568,

                                                    "ParameterHash": -665091540

                                                },

                                                "Not": true,

                                                "Operator": 0

                                            },

                                            {

                                                "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats",

                                                "Data": {

                                                    "FullName": "Boolean IsCompanionActiveInPartyOrPresent(Guid)",

                                                    "Parameters": [

                                                        "b1a7e800-0000-0000-0000-000000000000"

                                                    ],

                                                    "Flags": "",

                                                    "UnrealCall": "",

                                                    "FunctionHash": -419637131,

                                                    "ParameterHash": 30861781

                                                },

                                                "Not": false,

                                                "Operator": 0

                                            }

                                        ]

                                    }

                                },

                                {

                                    "Threshold": "VeryPositive",

                                    "Conversation": {

                                        "GuidString": "00000000-0000-0000-0000-000000000000"

                                    },

                                    "Node": 0,

                                    "Conditionals": {

                                        "Operator": 0,

                                        "Components": []

                                    }

                                },

                                {

                                    "Threshold": "Negative",

                                    "Conversation": {

                                        "GuidString": "ed333d7a-dfde-4f8c-9f8c-a45cdbacbcfe"

                                    },

                                    "Node": 16,

                                    "Conditionals": {

                                        "Operator": 0,

                                        "Components": [

                                            {

                                                "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats",

                                                "Data": {

                                                    "FullName": "Boolean IsGlobalValue(String, Operator, Int32)",

                                                    "Parameters": [

                                                        "n_xoti_relationship_eder_banter",

                                                        "EqualTo",

                                                        "1"

                                                    ],

                                                    "Flags": "",

                                                    "UnrealCall": "",

                                                    "FunctionHash": 901380568,

                                                    "ParameterHash": -1060131068

                                                },

                                                "Not": false,

                                                "Operator": 0

                                            },

                                            {

                                                "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats",

                                                "Data": {

                                                    "FullName": "Boolean IsGlobalValue(String, Operator, Int32)",

                                                    "Parameters": [

                                                        "b_Xoti_dead",

                                                        "EqualTo",

                                                        "1"

                                                    ],

                                                    "Flags": "",

                                                    "UnrealCall": "",

                                                    "FunctionHash": 901380568,

                                                    "ParameterHash": -665091540

                                                },

                                                "Not": true,

                                                "Operator": 0

                                            },

                                            {

                                                "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats",

                                                "Data": {

                                                    "FullName": "Boolean IsCompanionActiveInPartyOrPresent(Guid)",

                                                    "Parameters": [

                                                        "b1a7e800-0000-0000-0000-000000000000"

                                                    ],

                                                    "Flags": "",

                                                    "UnrealCall": "",

                                                    "FunctionHash": -419637131,

                                                    "ParameterHash": 30861781

                                                },

                                                "Not": false,

                                                "Operator": 0

                                            }

                                        ]

                                    }

                                },

                                {

                                    "Threshold": "VeryNegative",

                                    "Conversation": {

                                        "GuidString": "ed333d7a-dfde-4f8c-9f8c-a45cdbacbcfe"

                                    },

                                    "Node": 16,

                                    "Conditionals": {

                                        "Operator": 0,

                                        "Components": []

                                    }

                                }

                            ]

                        }

                    ],

                    "ProgressionTablesIDs": [

                        "5dd582c1-044a-41d2-8f4e-bf1965f0d6ff",

                        "3593fca2-5d9d-4e33-a76a-c50fb86b41d8",

                        "85df7158-f55b-4324-8362-fd5010a21388"

                    ],

                    "IsSidekick": "true"

                }

            ]

        },

 

What am I doing wrong? Is there something missing? Can someone help me? ^^'

Edited by Glub
  • Like 1
Link to comment
Share on other sites

  • 1 year later...
On 1/30/2021 at 5:46 PM, Glub said:

Now I've reached the point in the mod where I'd like to try to make Waidwen a companion. Before I start, I'd like to know if it's even possible?
I came across a post where someone explained that it was possible to create a new companion from an existing NPC but without any more details.
I'll look a little on my side but if someone has info, I'll take it. ;)

Hey, hope you're doing well, and sorry for the very late reply!

I've done a bit of looking into modding companions recently, and remembered your post asking for information on the subject, and thought I might share something that might be useful.

For companion data, the GUID on the "CompanionGuidString" line refers to the ID of the actual in game object of the character. This is a different GUID to the ones found in "lax2_characters.gamedatabundle", and is pretty hard to track down. But opening up the game an using the "PrintInstance oei_hovered" console command while hovering your mouse over Waidwen should get you the right ID.

If so then replacing the "b1a7e811-0000-0000-0000-000000000000" in your code with this ID, as well as in the script you're using to add him to the party, could possibly work?

Maybe... I haven't actually tried it with an NPC. 🤷‍♂️

Edited by Kvellen
Link to comment
Share on other sites

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...