Posts posted by Kvellen
-
-
Edited by Kvellen
Hey, I took a quick look over it. The Fleshrender_Weapon.gamedatabundle file seems fine, but several of the other .gamedatabundle files you've posted seem to contain instances of incorrect and missing parameters.
A few examples:
Fleshrender_StatusEffects.gamedatabundle, None of the following seem to be status effect properties: https://eternity.obsidian.net/game-data-formats/components#statuseffectcomponent
- "TickInterval",
- "TickEffectValue",
- "StackingType",
- "ApplicationEvent",
- "AffectedStat",
- "DamageType",
- VisualEffectID"
Fleshrender_EnchantRecipes.gamedatabundle, each entry starts with the header "ItemEnchantmentGameData" which isn't a valid gamedata type from what I can tell. Fleshrender_Enchantment.gamedatabundle has similar problem with the "StatusEffectItemModComponent" header.
I'm not really sure how this happened, did you use an old mod as the basis for your mod maybe?
-
-
Edited by Kvellen
Found another chatter specific issue. When Play Type is set to Random or CycleRandom on a node it's links aren't getting random weight set. Which seems to prevent any of the linked nodes playing at all.
Dove into the chatter editor a little more just now and it's looking superb!
Was able to remake something that in the past took me several days of tedium in just under an hour!On 7/6/2025 at 4:49 PM, Noqn said:2025-07-06 (2)
- Added "Open WEM" button to Conversation Talk Nodes.
Really fantastic feature! Was going to say this would make a great addition to conversations as well. Even better that you've set it to play a .wem off of nodes using Exterior VO as well! Great work!
-
Edited by Kvellen
Thanks a lot, I'll give this a proper look when I can!
A quick glance, I did notice these 2 things:
- ScriptNodes in the chatter editor seem to be missing the Persistence and Play Type dropdowns menus. I'm not sure if Persistence is actually used in chatter, but one key place PlayType is used on a ScriptNode specifically is Selected chatter. If you take a look at companion and player chatter for this event you'll see that they all start by linking to 2 ScriptNodes. The first is for playing only the rare Humorus lines only when the character is clicked 15 times, and the second the more common selection lines that play otherwise. The PlayType on each 2 ScriptNodes needs to be able to be set to random play the nodes they are linking to. Otherwise it will only ever play first line from each.
- In the exported .chatterbundle files "Links": [] seems to be higher in the order of node parameters than normal. I haven't actually tested to see if this prevents it functioning but it stuck out to me when comparing to normal chatter.
-
Pissed off Pale Elf.
On 8/17/2024 at 6:25 PM, artubi said:Hey everyone! Is there anyone here who would be able to help me (or tell me how can I do it myself) recolor this image to make it island aumaua? Naturally it depicts coastal aumaua, and I am desperatelly trying to get an island amuaua picture (which of course means skin colour closer to orange/light brown). I tried various online editors, but failed miserably
Gave it a shot.
Source: PoE Aumaua Mage By I2ebis
And the original as well:
-
Edited by Kvellen
On 6/20/2025 at 9:26 AM, beatspores said:It would be a NPC from the first game that I really wanted to see more of. It's not one of the companions and it would probably be a very surprising choice for most Pillars players.
Intriguing! 😯
On 6/20/2025 at 9:26 AM, beatspores said:Of these I could myself produce this:
- custom dialogue / trees
- I think good enough voice "sound / identity" .wem
- custom face geometry / texture
- custom items
Honestly using an Adventurer as a stand-in to prototype the Items, voice set, and dialogue is a pretty good place to start such a project! As you'll be able to see how these all work in game.
On 6/20/2025 at 9:26 AM, beatspores said:Tying it together and placing them in the world, the script launching a dialogue or bark, is something I would need help with. And directed to which files I need to duplicate and customize. I know bits of React and Python, and might be able to manage some of the scrips if I can look at existing examples close enough to what I need.
I don't know if this is what you are asking about, but a ModScriptHook that triggers the StartConversation script might be what you are looking for. Though be aware this has the limitation of only launching at the start of a level loading or on loading the game from a save.
I'd recommend looking into Apotheosis if you haven't already as that tool, amongst making modding Deadfire in general a easier, takes a lot of the headache out working with the game's scripting. Additionally the conversations editor is the best thing available for modding Deadfire's conversations as it's closer to how Obsdian's narrative designers actually worked with dialogue.
I could write up an example of a simple scripthook that triggers a conversation if that would be helpful?
On 6/20/2025 at 9:26 AM, beatspores said:So if I understand you correctly, and seeing your Durance mod:
- custom voice .wem's are possible
- iniating a dialogue and choosing a class is possible through an item script
- full start-to-end dialogue trees are possible
- but the player themself iniating a dialogue through speaking to a NPC placed in a map / level is unknown?
- and also placing a character in a map / level at all is also unkown?
- what about scripts for entering an area launching a bark or conversation?
- what about a custom face geometry / glb file?
- Yup! I mentioned a bit about the naming convention for audio file related to conversations in my second post of this thread. If you have any question about this let me know!
- The "InspectOnUseButton" on items is the only way I'm aware to get player input to launch the StartConversation script.
- Indeed. Once a conversation is launched it can go on for as long as needed. Or get stuck in a loop forever if you're like me and forgot to put in an exit while testing...
- Correct. Linking a conversation to any character is not directly supported.
- Correct. The contents of maps aren't modifiable and the only way to spawn a character into scene is with a console command that requires their prefab to already exist in the games asset files.
- As I mentioned this can be done with a ModScriptHook that runs only on map/game loading. Otherwise there are a few conversation that are triggered for various points of interest that can be used to have a bark play just like other companions.
- I don't know if this is possible. It's not something I have looked into myself. I would guess this would require making additions to one or more of the .unity3d files. "character_hd.unity3d", "character_headandskin_hd.unity3d", or "characters.unity3d" maybe? Which isn't something I've seen in any Deadfire mods.
-
Edited by Kvellen
Sadly there are a number of technical limitations and hurdles that would need to be overcome first to do that. Which aren't really possible with the built in modding support, and I'm honestly not well versed in advanced forms of Unity engine modding to know if it's possible at all.
The Adventurer Character Object (know as a "prefab" in Unity I think) that all Adventurers share doesn't support being talked to, as it completely lacks a component called "NPCInteraction" responsible for that interaction. This is what enables interaction with companions through the "Talk To x" button and on clicking on an npc. Which will point to a designated conversation GUID and load it when triggered.
There is a very hacky way to add the "NPCInteraction" to an Adventurer, and doing so shows the "Talk To x" button. Though it's completely non-functional sadly.
As for getting the character to spawn into a scene. I don't even know where to start.
The good news is that if someone were to figure out how to get around these hurdles everything else touched on in this thread is already supported by the game!
-
-
Edited by Kvellen
Oooo that's look great! Have had a few projects I have been putting off due to drudgery of making manual edits to .chatterbundle entries.
Thanks a lot for the break down, this does confirm a lot of assumptions I've had over the years on how these files worked!
The need for a manifest entry isn't something I have come across though. The couple of new chatters I have made from duplicating existing ones then generating a new GUID, have seemed to function without the need for one. Additionally in my experience .chatterbundle files seem to have no need to maintain the same directory structure as their origin file.
I wonder if maybe the need for a manifest entry is some vestige from Deadfire's development. Like the "ConversationType" having 2 states: "0" for Conversations, or "1" for Chatter. But this never seeming to be used in conversations from what I have seen.
Maybe at some point conversations and chatters once shared a filetype and structure?
14 hours ago, Noqn said:-
StringTableFilenames - Defines which StringTables the Chatter should fetch entries from. Each Chatter will utilize its own unique table (should be the first in the StringTableFilenames list), but also has the option to fetch entries from other "generic" tables.
Which table in StringTableFilenames a ChatterNode should fetch text from will be determined from the NodeID.
Nodes with a NodeID starting with X0'000 will fetch the table with (zero-based) index X in StringTableFilenames.
If we have for example "NodeID": 20017, then the from the tables below it should fetch "chatter/parents/chp_chanter_casts.stringtable" (the 3rd entry in the list)"StringTableFilenames": [ "chatter/00_companions/ch_companion_pallegina_voice_set.stringtable", "chatter/parents/chp_barbarian_shout.stringtable", "chatter/parents/chp_chanter_casts.stringtable", "chatter/parents/chp_cipher_casts.stringtable", "chatter/parents/chp_common.stringtable", "chatter/parents/chp_ko.stringtable", "chatter/parents/chp_paladin_commands.stringtable", "chatter/parents/chp_wizard_casts.stringtable" ],
The stringtables always seemed an odd inclusion to me when I was looking at .chatterbundles purely as voice sets. With the knowledge that a lot of the ambient townie barks comes from chatter it make more sense.
I'm still not really sure what function the "generic" stringtables serve in game though. The thought of chatter appearing as text in game would have been a bit of a nightmare! 😄
-
StringTableFilenames - Defines which StringTables the Chatter should fetch entries from. Each Chatter will utilize its own unique table (should be the first in the StringTableFilenames list), but also has the option to fetch entries from other "generic" tables.
-
Edited by Kvellen
10 hours ago, Larena27 said:Yeah, there's an alternate version of the conversation that triggers on rest I was having trouble with. I assume on-rest scripts aren't easily moddable?
Ah I thought I had remembered there being a version of it on rest.
Annoyingly on-rest scripts are located in an ".assets" or sometimes a "level" file. Unless they have a referenced to a globalscript/globalexpression it's not something that Apotheosis is capable of editing. And as far as my experience goes, even with a tool like UABE that can open assetbundles, such files seem prone to corrupting or are very finicky to make alterations to.
10 hours ago, Larena27 said:I ended up figuring out that either version of the conversation is triggered by a "xoti_nightmare" variable and so I just removed that from the conversation node that triggers it, and added a script to her initial dialogue hub node that triggers it if Magran's teeth is completed and that *seems* to work.
Removing the script setting "b_Xoti_Nightmare" from the Gaun statue conversation would have been my next suggestion. Really my only hesitation in suggesting it first, would be that doing so makes it so that once that conversation has played the next step in Xoti's quest becomes reliant on the mod to progress.
All things considered though, it's the best solution. I would suggest moving your script for Magran's teeth completion to a mod scripthook instead. That way you'll avoid the possibility of conflicts arising from other mods that make changes to Xoti's hub.
Great idea for a mod by the way! The pacing of Xoti's quest has always struck me as pretty bizarre.
-
On 5/21/2025 at 8:52 PM, Noqn said:
I remember ranting to a friend who had played through each game on Path of the Damned about how frustrating this bug was. Expecting him to know what I was talking about. His response "I never saw that".
Turns out the mad man didn't use any AI behaviours and just micro manages every attack his party makes... -
Edited by Kvellen
Hey @Larena27, I've looked at somethings around Xoti's quest before. Did you try adding the condition on Conversation Tigger node "403" of "companion_cv_xoti_main"?
That's what seemed to start the conversation that leads into the final parts of the quest when I was looking into it.
Though maybe there is another place it can trigger like after a rest? If that's the case it could be tricky to alter as, just like Conversation Tigger nodes, scripts will ignore any condition on whatever node it points at by design. -
My pleasure!
7 hours ago, SenSx said:How did you know the proper ID for this specific unique weapon enchantment was 204 thouh ?
I use a tool called Apotheosis, that organises all the exported gamedata and text in every supported language into a gui interface that can be searched through more easily. I looked in the ItemMod section for "Champions_relic", which lead me to the status effects responsible for the bonus. There there is a parameter of status effects called "OverrideDescriptionString" that's been used to overwrite the text in this instance. That's where the reference ID was.
I noticed the issue with the Replacement Token by swapping between "English" and "Francais" from a dropdown.
-
Edited by Kvellen
Really looking forwards to the crafting changes especially, it's the main thing that's keeping me from seeing this game through to the end.
Had a bit of trouble with reading the text in that image.
This is what's it says for anyone needing to zoom in:
Spring - 2025 NOW LIVE
- Arachnophobia Safe Mode
- Mouse and Keyboard Support for Xbox
- Fog of War Improvements
- More Gold and Crafting materials
- Soul Pods will now dispel illusions
- Unique gear improvements
Summer - 2025
- Cooking and Crafting improvements
- New NPC abilities and behaviors
- New active and passive abilities
- New Unique weapons and armor
- Custom Map markers
Fall 2025
- New Game Plus
- Photo Mode
- New weapon type
- Changing appearance in world
- New character presets
- More Godlike feature presets
-
Edited by Kvellen
Yup, the game should automatically replace {0:extravalue:percent} with a "3%" from the status effect gamedata just like it does elsewhere. That's pretty much where my knowledge of this stuff extends haha. Not sure where exactly in the game data it's getting this value from... just that this seems to be how it works.
That said if you run across any other instances of something not functioning across the localisations I'll be happy to take a look! -
What seems to be the root of the problem is that the wrong Replacement Token was used in several of the Deadfire's translations.
A replacement token is basically a small bit of code in the text string that's dynamically filled with a specified bit of information sourced from the gamedata the text applies to. Such as adding a numerical value. This allows for the game to reuse a single piece of text "{0:extravalue:percent} Melee Damage for each Engaged target" for each possible instance, rather needing multiples copies.Anyway, that is all to say that in this instance the French translation for this text incorrectly uses {0:value:percentbonus} instead of {0:extravalue:percent} which is why the value in game is shown as 0%.
1 hour ago, SenSx said:Which text file should I use?
Abilities (probably not) gui file or statuseffects file ?
Should I write the ID of the enchantment and then the description of the effects ?
I tried something like that but it did not work
<Entry>
<ID>Champions_relic</ID>
<DefaultText>+3% aux dégâts de corps à corps pour chaque cible engagée, Ennemis engagés +2</DefaultText>
<FemaleText />
</Entry>"statuseffects.stringtable" and the entry with the mistake seems to be "204". Something like this should work:
<Entry> <ID>204</ID> <DefaultText>{0:extravalue:percent} aux dégâts de corps à corps pour chaque cible engagée</DefaultText> <FemaleText /> </Entry>The "Ennemis engagés +2" part will come from another stringtable entry which the game combines with the previous entry at runtime. I can't find the ID for it at the moment, but I'm pretty sure it is possible to override it. If that's something you need to make changes to let me know and I'll try to track it down.
-
Edited by Kvellen
Weird at what point does the "End Conversation" button appear?
Is it just after this text:QuoteAn emaciated figure hunches over a stack of books. As you enter the room, it rises, and you feel as though you can see each rib and vertebrae shift into place beneath a pale film of flesh.
It turns, twisting wasted skin and tendons around its bones. Two eyes burn from its angular, shrunken face.
If that is the case, what Background (Laborer, Colonist, etc) did you pick at character creation?
The text that is supposed to play is different depending on this. Could be that it isn't account for for some reason. 🤔 -
Edited by Kvellen
3 hours ago, Boeroer said:Iirc those tags are used in Deadfire, aren't they?
Deadfire only has <DefaultText /> and <FemaleText /> entries in all it's .stringtable files. Which are used for reactivity to the player's choice of gender in character in creation.
Interestingly there is a "Neuter" gender in both Pillars of Eternity games. But is only ever used by creatures and maybe the occasional npc. It isn't implemented to be applicable to player characters from what I have seen.
3 hours ago, Boeroer said:I assume some (inhouse?) tool might add those tags nowadays which it didn't back in the old PoE days - and since they didn't patch PoE for a very long time it might be that the updated tool just automatically added those in the scope of the newest patch?
That would be my own assumption as well. Most likely the result of a more recent addition made to OEI Tools (the internal tool used by Obsidian) for use in Avowed, Outer Worlds 2, and future Obsidian games. And not really indicative of any specific plans for a Pillars games.
-
Edited by Kvellen
3 hours ago, Phenomenum said:Emmm. You're missing the point)
1. Added
<GenderNeutralText />2. Turn-Based Combat.
So, i think, we can see Pillars of Eternity 3. More than that, a'm sure: because BG3 has hurt a Josh's ego.
And i'm sure, Josh haven't said it all yet about Pillars.
To be fair I was staring at that previous post for quite a while before I saw anything that looked different. No one outside of modders is really all too familiar with stringtable entry structures I guess 😄
It is an interesting find! Though searching through the files there are no instances of the populated <GenderNeutralText> . So perhaps part of an initial set up for the option that'll be patched in alongside the Turn-based mode? Or maybe just something the OEITools puts into the .stringtable files now as a result of updates to the tools made to account for the option in Avowed.
-
Edited by Kvellen
I have been doing a lot of investigation into quests, there are a few things I noticed as far as Apotheosis.
To start there is a bug where no changes made in the "Experience Level" field are ever saved.
_____________________________________________
Quest/Objective nodes seem to always have 2 strings entries attached to each node.
"0" is always the name of the quest, and "10000" is the initial description.
After that any single digit stringtable entry is an Objective Title, with an additional ~1000* entry that is will be the description for that objective.Using the quest Bounty - Ikorno (BOUNTY_TSK_Battlemage) as an example:
-
Node: 0
- Quest title (0) : Bounty - Ikorno
- Quest Description (10000) : Ikorno, an aumaua wizard, makes sport of killing elite Huana warriors. Those who suspect him of being a Rauataian agent have put a bounty on his head.
-
Node: 1
- Objective (1) : Kill Ikorno.
- Description (10001) : Ikorno was last seen on the central isles of the Kua o Rikuhu chain. When I find him I can kill him for the bounty.
-
Node: 2
- Objective (2) : Return to Okauro.
- Description (10002) : I dealt with Ikorno. Okauro in the Sacred Stair district of Neketaka will want evidence of the kill in exchange for the reward.
It would be great to be able to have both string displayed and able to be edited on the relevant node in the Node Diagram.
_____________________________________________
An update on this issue. I think I have pinned it down to not being an problem with Apotheosis making additions to the the quest, but rather it seems there is a limitation in place that stops the adding of new nodes to a quest mid-game in general.
I realised I'd only ever tested this by loading a pre-existing save. What you know, upon starting a new game and triggering the quest to start on the new quest node (19) it seems to work without issue. Further testing on other quests and with adding nodes elsewhere in the sequence yields the same results. New game: the quest appears to continue just fine when it hits a new node. Existing save: the quest bugs out when it hits a new node.
This is also the case for new quests: While brand new quests can be added mid-game, they will run into the same issue once they become part of the game as it were.
On 3/8/2025 at 12:32 AM, Noqn said:I'm always happy to get new feature requests 😀
Just from a first quick look, I think a lot can luckily be reused from the Conversation flowchart models (even moreso than Quests/AI Trees)
Oh, and if I implement Chatters, the only remaining stuff from the design folders will be .aibehaviorbundle files 🥳
Fantastic! Looking forward to it!
-
Node: 0
-
Edited by Kvellen
Probably, but the character is at the end of the day only an adventurer that you can just recreate at any inn.
All you need is this mod for Dyrwood Culture, and the portraits which are are in the gui folder of the .character (it's pretty much a zip file). Save your game and exit.
For the voice you can either remove the conditional statement in between the [square brackets] after "Components": [] "PlayerVoice_Durance.gamedatabundle" or select it later in the character customizer
once you have done following.
Change all the instances of "135d47bd-5a32-4af1-8a44-1f7d3822b0f9" in the mod's files to whatever the new GUID is for the character. You can find their GUID by hovering the mouse cursor over the character and entering this command into the console:
PrintInstance oei_hovered
It'll be in the combat log and should be on your clipboard for you to paste somewhere outside of game to reference.
-
-
Edited by Kvellen
Hey noqn, could I make a request for a chatter editor as future addition? Meant to ask about it in the past but always stopped short of typing up a request for it. What with interest in voice modding being a real niche within a niche. And the need to expend the capabilities of an existing voice being a niche within that niche. But mainly because honestly .chatterbundle file structures are a pretty weird layout amongst the other node based data types. I wouldn't even be able to describe how the layout for that should look!
But I thought it couldn't hurt to ask. 😄
14 hours ago, lalolalo9 said:Actually
ModScriptHook was the key.So what I did was make a ModScripthook that calls a GlobalScript after 2 hours.
This GlobalScripthoook will then call itself every 2 hours. It will check what the player is doing on the world map (walking) and if thee player hast been ambushed at night yet it will trigger an encounter, if he has been ambushed, then it will wait until daytime to reset the globalvalue, it works quite well actually.
Now only thing left is to generate those random encounter and put in an nice mix of mobs in these encounters. How I'll find out 😜As much as the idea of looping scripts scare me, that's actually a really good solution!
-
Hmm, assuming I'm looking at the right conversion in Apotheosis I think I can see what is causing the problem.
Is it possible you have skipped the quests centred on Crookspur maybe?
Would you mind loading your save and opening the console with the ` or ~ key (Don't worry this won't disable achievements).
Then pasting the following:PrintGlobal n_FQP_Slavers_Quest_Stage & PrintGlobal n_Crookspur_Kua_Outcome & PrintGlobal n_Slaver_Boss_State
Does the message in the combat log look like this? :
'n_FQP_Slavers_Quest_Stage': 0
'n_Crookspur_Kua_Outcome': 0
'n_Slaver_Boss_State': 0

Apotheosis - Mod Editor for Deadfire
in Pillars of Eternity II: Deadfire: Modding (Spoiler Warning!)
·
Edited by Kvellen
There are a few weird quirks in the .chatterbundle files that Apotheosis generates. The only potentially serious one is that adding a chatternode from a parent file doesn't seem to be adding it to "AudioLookup" list.
Otherwise it's all pretty minor stuff that isn't affecting the functionality of chatter from what I can tell.
Like the "Audiolookup" will rearrange when new nodes are added to existing chatter.
This sort of thing happens:
"AudioLookup": { "22": "ability_cast_interrupted_0022", "80": "ability_cast_interrupted_0080", "97": "ability_cast_interrupted_0097", "40001": "attack_40001", "40002": "attack_40002", "40003": "attack_40003", "10001": "barbarian_shout_10001", "28": "battlecry_0028", "29": "battlecry_0029", "30": "battlecry_0030"And that I'm still not quite used to the order of things on chatternodes being different what they usually look like in Deadfire. Weirdly... Close to how "TalkNodes" are laid out for .conversation files in PoE1... What's with that? 🤨
Anyway, I can work these issues, thanks a lot Noqn!