Notice
Please understand that while a lot of work has been put into Apotheosis, perfect software doesn't exist - there's always a risk of your mod's files being affected by unforseen bugs.
For larger projects it is highly recommended to use source control.
First Time Setup
The first time Apotheosis is launched, it will ask you to specify where your Deadfire executable is located.
Most commonly, for Windows + Steam users, this would be
C:\Program Files (x86)\Steam\steamapps\common\Pillars of Eternity II\PillarsOfEternityII.exe
After that, Apotheosis will ask to extract and build a few icon sheets from unity asset bundles as well as compiling the gamedata bundle files.
These files will be located in
PillarsOfEternityII_Data\apotheosis_exported
GameData Editor
In the rightmost panel, select the "Game Data" tab.
On its right, you will see a list of expandable rows. The top level rows represent GameData Categories, each corresponding to a *.gamedatabundle
file you'd find in PillarsOfEternityII_Data/exported
, e.g. abilities.gamedatabundle
.
Each child row of a "category row" represents a GameDataObject type. Select a "type row" and the panel to the right will be populated with a list of all GameDataObjects of that type.
Selecting an entry in that panel will display that GameDataObject in the preview tab. Double-clicking the entry will pin the tab.
You are free to edit the Object here.
Saving Edits
Note that edits to a GameDataObject can be saved to any *.gamedatabundle
file in your mod folder. A single GameDataObject can have its edits split across several different files.
If you are writing a larger mod, it is recommended to utilize this and split up your edits to several different files, making it easier to debug things and work with version control. In addition, it can also be used to make the mod more modular for users by bundling individual "features" into single files.
You may notice this bar
The text signifies to where all the pending edits would be saved (in this case gamedata\items.gamedatabundle
).
If your mod already has saved edits to the object, the default path will be the first .gamedatabundle that contains those edits. Otherwise it will fall back to gamedata\{category}.gamedatabundle
.
(If already have edits made to a specific property in one .gamedatabundle and then save a pending edit of the same property to a different path, then that edit will be removed from the old path, and instead written to the new.)
To change the path, either click the drop-down widget and select your desired path.
The following options will be populated in the drop-down list:
- Every existing .gamedatabundle in your mod folder.
- The fallback path mentioned above -
gamedata\{category}.gamedatabundle
- A second fallback path -
gamedata\{category}\{DebugName}.gamedatabundle
You can press the Refresh button to revert to the default path.
If you want to specify a new path (or just get a clearer overview in case your mod has a lot of bundles), press the blue locator button.
This will open up a dialog where you can select old or define new paths.
Italicized paths indicates that they have no actual corresponding .gamedatabundle
file saved in your mod folder. Note that creating a new path here or selecting an italicized path will NOT create a new .gamedatabundle
file, not until edits have actually been saved to it.
StringTable Indexes
All text seen in-game are defined in StringTables. GameDataComponents may contain StringTableIndex properties that refer to individual entries in these tables. (For example an ItemComponent's DisplayName property.) From here you can choose to point to a different index in the table, create a new entry in the table, or edit the text of the current entry.
Note that edits to StringTableEntry text through the GameData editor will not be store in the undo-redo "history", and that edits to StringTableEntry text will only be written when the Save button in the application's headerbar is clicked.
GameData References
If the row you hoover gets underlined, that property is a GameData Reference, and the text you see is the DebugName of the referenced GameDataObject.
If you click the row, you'll get a popup where you can select a new Object to reference.
For example, clicking the "AbilityClass" property of the "Fireball" object lets you among all the CharacterClassGameData objects.
If you instead right-click the row, you have the option to open the referenced object in the editor in a new tab, among other special options.
Expressions
- Official Scripts Documentation
- Official Conditionals Documentation
- On how to write expressions in Apotheosis, see Expressions.md
Clicking the edit icon right next to a Expression property will display a popup text area where you can. Once you've entered a valid script, the "Accept" button will be clickable.
ProgressionTables
If you edit a CharacterProgressionTable, ClassProgressionTable or BaseProgressionTableAppend object, you can open up the table in a special editor. Simply click the edit icon next to the AbilityUnlocks property:
When you're finished, rightclick anywhere and select 'Apply Edits' or 'Discard Edits'.
Please note that if you only need to ADD new abilities to a ProgressionTable, you should not edit the table directly. Instead, create a new BaseProgressionTableAppend object and add the abilities there instead! There's a context menu shortcut for this:
Creating New GameDataObjects
Naviage the type selector panel and right-click a type. You should now get this popup:
(Note that some types can only have one valid object, e.g. the GlobalGameSettings
type. The popup will not show up for these types.)
In the text field, enter the desired DebugName of the new object. You may also choose which path to save the new object to, see above.
Once you press Accept, a new object of that type will be generated with the default Components and values.
Adding new Components to an Object
If you want to add a missing Component to one of your objects, rightclick the topmost row in the GameData editing page and select "Add Component..."
You now get to choose among the valid components that are not yet added to the GameDataObject:
GameData Queries
An alternative for finding. See Queries for full documentation.
Notice regarding non-GameData Saving
Unlike GameData, there's no undo-redo functionality in place for the other data kinds:
- StringTables
- Conversations
- Quests
- GlobalVariables
- GlobalExpressions
Pending edits of these kinds are written when the Save button in the headerbar is clicked.
Conversation Editor
Due to the abovementioned lack of undo-redo functionality when working with Conversations, there's an increased risk of accidental edits sneaking their way into your mod.
For that reason, if you are working with Conversations at any capacity, is highly recommended to use source control.
Sorry for the inconvenience.
Conversation Nodes:
The four buttons/icons grouped together in the top left corner represent Expressions defined in the node.
Left to right these are:
- Conditional
- OnEnterScript
- OnExitScript
- OnUpdateScript (rarely -if ever- used)
If one appears as a button and not just an icon, it means it has an Expression already defined. You can hoover the button to see the current Expression text:
Click the buttons/icons to open an Expression editing popup.
There's sadly no official documentation on Conversations. More documentation on conversations may be added here in the future.