Jump to content

Obsidian - Will you provide xml documentation or other editing tools on release?


Recommended Posts

Hello,

 

1. Are you going to write up a how-to guide on the exported xml files and how to do things like add dialogue/quests/items/spells? I've done all of those and I wonder if something like that is planned. I know whatever I write can't be nearly as extensive as anything you make, having a lot more experience. 

 

2. Are there any other neat releasable tools to add content to the game with? I'm sure you're well aware how much well-supported modding tools can add to a games community, having worked on many with them. Right now I can't seem to find a way to actually edit enemy spawns efficiently (I can think of one hack-y way to do it), but I know you're using unity which really wasn't meant for that. Another big modding hurdle is dialogue. Can you add lines purely through xml? Yeah if you hate your life. If the fabled obsidian dialogue tool can't be released maybe just some documentation on how things are laid out would be great. 

 

3. Maybe most importantly, are you considering adding an overwrite folder (like Baldurs Gate / Witcher 3)? A folder you can add custom files to (icons textures etc) and have them able to be pulled into the xml. An overwrite folder would also allow you to edit the xml without actually touching your base xml data itself. Imagine if two people want to add weapons, if you both have to edit bb_items it's going to be madness trying to get things to work together.

 

I've probably put more time into messing with the xml files than playing the beta at this point, haha. I've asked these questions in other places but having them here makes the most sense, probably. I am so insanely hyped for poe2.

 

-mort

  • Like 3
Link to comment
Share on other sites

update on my findings aka, I'm dumb!

 

I just assumed you had to overwrite the same json data files but it will load anything you put in there as long as its formatted correctly. I suspected this was the case but I was more interested in finding what was possible.

What I thought was the case:
-You had to edit the bb_items.gamedatabundle directly and add things to it
-This would be a nightmare if the game updated or you wanted to add more than one thing

What is actually the case:
-You can make a file called mort_is_dumb.gamedatabundle and add in anything you can think of, with properly formatted json, even just a single item or ability etc, and it'll load it into the game.
-You could technically have a self-contained single file that adds tons of items, skills, characters, etc.
-Entries are overwritten by the latest loading file. If you make a new file and copy estoc's data, then change the value to 9999 and save it, all estocs will inherit those stats.
-No overwrite folder is necessary, it's built in.

The good news for modders:
-Your life is going to be a lot easier than I thought
-A modding tool is as simple as a fillable json page

The good news for everyone:
-Mods are going to be very easy to install and uninstall.

The bad news:
-I can't seem to add or change custom strings in the same way. All entries in the data don't have their display names or descriptions in the json, they reference a number which pulls from the localized stringtable depending on what language you choose.
-I can add custom strings by editing the original stringtables but that will get sloppy.
-I also cannot edit original strings in the same way that I can edit the gamedatabundle entries by making a new file and overwriting
-I still don't know if custom assets can be loaded or things can be placed in world by modders.

tl;dr modding is good, I assumed the worst but we're in good shape folks, its very similar to BG modding

  • Like 4
Link to comment
Share on other sites

update on my findings aka, I'm dumb!
 
I just assumed you had to overwrite the same json data files but it will load anything you put in there as long as its formatted correctly. I suspected this was the case but I was more interested in finding what was possible.
 
What I thought was the case:
-You had to edit the bb_items.gamedatabundle directly and add things to it
-This would be a nightmare if the game updated or you wanted to add more than one thing
 
What is actually the case:
-You can make a file called mort_is_dumb.gamedatabundle and add in anything you can think of, with properly formatted json, even just a single item or ability etc, and it'll load it into the game.
-You could technically have a self-contained single file that adds tons of items, skills, characters, etc.
-Entries are overwritten by the latest loading file. If you make a new file and copy estoc's data, then change the value to 9999 and save it, all estocs will inherit those stats.
-No overwrite folder is necessary, it's built in.
 
The good news for modders:
-Your life is going to be a lot easier than I thought
-A modding tool is as simple as a fillable json page
 
The good news for everyone:
-Mods are going to be very easy to install and uninstall.
 
The bad news:
-I can't seem to add or change custom strings in the same way. All entries in the data don't have their display names or descriptions in the json, they reference a number which pulls from the localized stringtable depending on what language you choose.
-I can add custom strings by editing the original stringtables but that will get sloppy.
-I also cannot edit original strings in the same way that I can edit the gamedatabundle entries by making a new file and overwriting
-I still don't know if custom assets can be loaded or things can be placed in world by modders.
 
tl;dr modding is good, I assumed the worst but we're in good shape folks, its very similar to BG modding

 

I was just messing with those files. I was worried also that you would have to reedit those file everytime an update came out but nice to know you can create your own mod file.

Edited by draego
Link to comment
Share on other sites

-You can make a file called mort_is_dumb.gamedatabundle and add in anything you can think of, with properly formatted json, even just a single item or ability etc, and it'll load it into the game.

-You could technically have a self-contained single file that adds tons of items, skills, characters, etc.

-Entries are overwritten by the latest loading file. If you make a new file and copy estoc's data, then change the value to 9999 and save it, all estocs will inherit those stats.

-No overwrite folder is necessary, it's built in.

If you don't want to rely on the order of the files for overriding, there is an override folder you can use.  This is probably a slightly better way to do mods.

 

The game's data is in Pillars of Eternity II\PillarsOfEternity2_Data\exported\design\gamedata, which is what you're using.  The override folder is Pillars of Eternity II\PillarsOfEternity2_Data\override\gamedata (you'll have to create it).  Files in the override folder will always take priority over ones in the exported folder.

 

Note that the override folder is broken in the current release, but it will work in the next.

 

-I can't seem to add or change custom strings in the same way. All entries in the data don't have their display names or descriptions in the json, they reference a number which pulls from the localized stringtable depending on what language you choose.

-I can add custom strings by editing the original stringtables but that will get sloppy.

-I also cannot edit original strings in the same way that I can edit the gamedatabundle entries by making a new file and overwriting

This is a good point.  I will make a note that we should take a look at this.

 

-I still don't know if custom assets can be loaded or things can be placed in world by modders.

Unfortunately, it's unlikely that scene modding will be any different than Pillars 1.

  • Like 10
Link to comment
Share on other sites

  • 2 months later...

The newest backer beta has added support for overriding string table entries. You can both override existing strings and add entirely new strings.

 

To do this, you create a .stringtable file in the override directory where the path matches that of the table you want to override. For example, if you want to override the English for \Pillars of Eternity II\PillarsOfEternity2_Data\exported\localized\en\text\game\abilities.stringtable, you need to create the file \Pillars of Eternity II\PillarsOfEternity2_Data\override\[YOUR MOD]\localized\en\text\game\abilities.stringtable.  The file should look the same, except that you only need to include blocks for the entries you want to change or add.

 

Example abilities.stringtable overriding the Holy Radiance ability name and adding a new ability name:

<?xml version="1.0" encoding="utf-8"?>
<StringTableFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>game\abilities</Name>
  <Entries>
    <Entry>
      <ID>2</ID>
      <DefaultText>Unholy Space Jam</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>10000</ID>
      <DefaultText>Reap the Rappers</DefaultText>
      <FemaleText />
    </Entry>
  </Entries>
</StringTableFile>

You don't have to put override gamedatabundles in a [YOUR MOD] folder like this, but I'd recommend that to keep your mods organized.

  • Like 10
Link to comment
Share on other sites

BMac, can we also have some possibility to set the load order of our mods?

For example, I have:
\Pillars of Eternity II\PillarsOfEternity2_Data\override\[MOD_A]
\Pillars of Eternity II\PillarsOfEternity2_Data\override\[MOD_B]
\Pillars of Eternity II\PillarsOfEternity2_Data\override\[MOD_C]


and would like to add an (optional) file:
\Pillars of Eternity II\PillarsOfEternity2_Data\override\mod.order.json

{
  "mods":[
    {"name":"MOD_C", "enabled": 1, "params": {}},
    {"name":"MOD_A", "enabled": 1, "params": {}},
    {"name":"MOD_B", "enabled": 0, "params": {}}
  ]
}

This will really help in future, if there will be some partially conflicting mods.

 



Also, can you give at least some general, vague pointers on how to create a custom, sidekick-like hireling, and attach custom barks and on-event banter? :)
  • Like 2
Link to comment
Share on other sites

That's a good idea and it's on my list, though we'll be pretty busy with the game until release, so it may not come until after that.

 

 

 

I think in order to create your own sidekick, these are the major steps you'd have to do:

 

Make CharacterStatsGameData and SpeakerGameData objects for your character in an override gamedatabundle.  Make a name string for the character in an override stringtable.  Hook up the name and Speaker to the CharacterStats.

 

Make a chatter file for the character, which defines which lines they'll say, and when. The different chatter setups for each character go in chatterbundles, which can be overridden exactly like gamedatabundles. The actual game files, for reference, are in PillarsOfEternity2_Data\exported\design\chatter.  Hook up the chatter file to the Speaker you made.

 

Make the audio files that are referenced by the chatter file. They are packed in a Wwise format and they're at PillarsOfEternity2_Data\StreamingAssets\Audio\GeneratedSoundBanks\Windows\Voices.  You can probably get the free version of Wwise to produce these. We don't support an override folder for them, though.

 

Actually creating a character prefab is probably the hardest.  This will be the actual object in the game, where you'd attach the CharacterStatsGameData you created and set up the character's appearance. They live in the characters assetbundle (PillarsOfEternity2_Data\assetbundles). I think there are ways to unpack and repack these but I haven't messed with them myself.

 

You could then use console commands to instantiate the character and add it to your party.

  • Like 4
Link to comment
Share on other sites

That's a good idea and it's on my list, though we'll be pretty busy with the game until release, so it may not come until after that.

That's great! :)

And it's not like there will be many pre-release mods anyway.

 

I think in order to create your own sidekick, these are the major steps you'd have to do: [..list..]

Thank you a lot for the pointers!

Will definitely attempt to make a sidekick at some point.

 

Actually creating a character prefab is probably the hardest.  This will be the actual object in the game, where you'd attach the CharacterStatsGameData you created and set up the character's appearance. They live in the characters assetbundle (PillarsOfEternity2_Data\assetbundles). I think there are ways to unpack and repack these but I haven't messed with them myself.

*scratching head* while looking at the characters.unity3d filesize of 0.98GB... is there a specific reason, why you guys decided to bundle into such big packs, instead of lets say:

/assetbundles/characters/character_a.unity3d

/assetbundles/characters/character_b.unity3d

/assetbundles/characters/character_c.unity3d

...

because atm in order to add/edit at least one character prefab, modder would have to unpack/do_stuff/repack the whole characters.unity3d and if he's successful to somehow also redistribute it.

Am not even sure if nexus even permits such big sizes; plus repeating all this on each update :shiver:

Also, with smaller .unity3d files modder can tinker with the help of AssetsBundleExtractor. While if the file is big, you are literally getting lost there ^^ (having to literally check all monobehaviours when you want to find a specific one). Sure there is also DevXUnity-Unpacker Studio (which looks more user-friendly, and supports repacking), but it is far from free.

 

Was the copying speed somehow of a problem due to the big amount of files?

Link to comment
Share on other sites

Is there any way to get character position in-game? (Stand next to Vektor, open console, type in some code, get "X" and "Y" position/location of one selected character or center between selected characters, and use that information to summon custom sidekick/NPC/quest giver with mods).

Furthermore, does AI NPC's have "Patrolling"-, "Facing direction"-, "Tasks"-scripts that you can call for and is that scripts you can use in making a custom NPC appear in the world? Would it then also be possible to add "overhead text" that you can see on NPC's. I.E. "Psst! Over here!" or something.

"Approach/MoveTowards Watcher/Player/Selected/%NAME%" script into "Start Dialogue" script?

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

because atm in order to add/edit at least one character prefab, modder would have to unpack/do_stuff/repack the whole characters.unity3d and if he's successful to somehow also redistribute it.

Am not even sure if nexus even permits such big sizes; plus repeating all this on each update :shiver:

Yeah, this is definitely not an ideal setup for modding. Hopefully we'll be able to look at override support for assetbundles.

 

Is there any way to get character position in-game? (Stand next to Vektor, open console, type in some code, get "X" and "Y" position/location of one selected character or center between selected characters, and use that information to summon custom sidekick/NPC/quest giver with mods).

Try "GetTransform ". It doesn't have tab-completion, though, so you'll have to have the full object name from FindObject.

 

Furthermore, does AI NPC's have "Patrolling"-, "Facing direction"-, "Tasks"-scripts that you can call for and is that scripts you can use in making a custom NPC appear in the world? Would it then also be possible to add "overhead text" that you can see on NPC's. I.E. "Psst! Over here!" or something.

 

"Approach/MoveTowards Watcher/Player/Selected/%NAME%" script into "Start Dialogue" script?

The NPC AI system might be a bit opaque and I don't know too much about it myself - but for anyone who wants to dig into it, you want to check out ScheduleGameData in the AI gamedatabundle and the AIController component on the character prefabs (assetbundle).  There are also some scripts you can use for one-off stuff ('find ai').

 

The overhead text is referred to as "barks" or "bark strings".  They're set up as Conversations and played with the startconversation script.

  • Like 3
Link to comment
Share on other sites

×
×
  • Create New...