-
Posts
418 -
Joined
-
Last visited
-
Days Won
1
Content Type
Profiles
Forums
Blogs
Everything posted by BMac
-
"Chanter trait" ability
BMac replied to gkathellar's topic in Pillars of Eternity II: Deadfire: Modding (Spoiler Warning!)
Chanter Trait is pretty important for chanters as it tracks their learned phrases and their phrase count in combat. I see it in Pallegina's Paladin_Chanter table. -
Twitch Stream
BMac replied to peardox's topic in Pillars of Eternity II: Deadfire: Modding (Spoiler Warning!)
I'll get the patch notes out a bit earlier for v2.0.0. The patch beta won't include any Beast of Winter content. -
Status effects often have variable parameters, e.g. an ArmorRating effect can have a specific damage type it's good against. These parameters can often be omitted to make the effect work against everything, so the Wildcard String is used instead of the Display String when that happens. It's possible if we have time, I'll note it.
-
"Error loading next map, returned to main menu"
BMac replied to Gibbscape_Torment's question in Patch Beta Bugs and Support
That's very strange. Could you check if this file exists in the game folder? This is the file that the game appears to be unable to find. \PillarsOfEternityII_Data\exported\design\conversations\03_neketaka_vailian_district\03_cv_vd_vendor_huntingandsundries.conversationbundle. -
"Error loading next map, returned to main menu"
BMac replied to Gibbscape_Torment's question in Patch Beta Bugs and Support
I can confirm the problem is still ocurring to me whenever I try to enter Neketaka — both in old and new games (although I used the same world state for them). Here are my files uploaded (some other people also are having the same problem and provided their files here). Just as mbunkus stated, there are no crash files. Thanks for the output_log! It looks like in your case, your game is failing to find a particular data file. Have you tried "Verify Integrity of Game Files" in Steam? (if you're running on Steam, otherwise you may need to redownload the game) -
Unable to start a new game
BMac replied to Kozuka's question in Pillars of Eternity II: Deadfire Technical Support (Spoiler Warning!)
It looks like some of your data isn't loading correctly. If you're running from Steam, have you tried "Verify Integrity of Game Files" in Steam (from the Properties/Local Files menu)? -
[Request] Open slots for pets
BMac replied to fxluk's topic in Pillars of Eternity II: Deadfire: Modding (Spoiler Warning!)
No, I don't think this is easy to change with a mod. It would require code changes. Sorry! -
[Request] Open slots for pets
BMac replied to fxluk's topic in Pillars of Eternity II: Deadfire: Modding (Spoiler Warning!)
There's a command line cheat called Unlock Pets, if you're fine with enabling cheats. -
I looked at the code and the way it's structured will unfortunately make it difficult to grant different numbers of skill points on level up. It would be nice to change this, but I don't think it will be a priority for the next patch.
-
Follow-up tutorials: Adding New Icons, Adding Items to a Store, How to Upload Mods to the Steam Workshop. This is a text version of the video tutorial available here: In this tutorial, I'm going to show you how to create a simple data mod for Pillars of Eternity II: Deadfire. By creating your own game data bundle files, you can create new items, abilities, classes, and other content; modify existing content; and also modify how some parts of the game work, as I'm about to do. First, you need to create a folder to put your modified files in. Locate the Pillars of Eternity II: Deadfire folder. I've installed the game using Steam, so my game is in the steamapps folder. Inside the folder "PillarsOfEternityII_Data", create a folder called "override", if it doesn't exist already. This is where all your mods and mods you download from the internet will go. Inside the "override" folder, create a folder for your mod. Next, you need to provide some information about your mod. Inside your mod folder, create a file called "manifest.json". Open that file in a text editor, and type the following text into it. { "Title" : { "en" : "Per-Rest Resources" }, "Description" : { "en" : "Changes spells and class resources to reset on rest instead of after each encounter." }, "Author" : "BMac", "ModVersion": "1.0", "SupportedGameVersion" : { "Min" : "1.1.0", "Max" : "1.2.0" } } "Title" is the name of the mod. You can provide the text in multiple languages, each identified by its standard two-letter language code. In this example, I only provide English - "en". "Description" is a short, one-sentence description of the mod, and can also be provided in multiple languages. "Author" is the name or handle of the mod's creator. "ModVersion" is the version number of your mod. You should increase this each time you release a new version of your mod. "SupportedGameVersion" specifies the minimum and maximum versions of Pillars of Eternity II: Deadfire that your mod is known to be compatible with. The game will warn your users if they are using your mod with an incompatible version, but your mod will still load if it's enabled. Change the contents of this file to describe your mod, then save and close the file. You may also create a thumbnail image that will represent your mod in the Mod Manager UI. This image will go in your mod's folder. It needs to be named "thumb.png" and the dimensions should be 149x84. Now you're ready to actually modify the game's data. For this mod, I'm going to change spells and class resources from resetting after each encounter to resetting on rest. Let's take a look at the vanilla game data, the data the unmodified game uses. This data is located at "PillarsOfEternityII_Data/exported/design/gamedata". I happen to know that the data I want is in the "global" gamedata bundle. Open that file in a text editor. The file is hard to read because it isn't formatted. There are many tools available for formatting JSON data. I'm using Visual Studio Code, so I just need to press Shift+Alt+F to format this document and make it easier to read (note: you'll need to associate the .gamedatabundle extension with the JSON format. link). Now I'm going find the properties I want to edit. I'll just use my text editor's search function (Ctrl+F) and search for the text "spell". To learn what all of these properties do, refer to the Game Data Documentation. I found the data. It's on the object called "GlobalGameSettings", so that's the object I need to override in my mod. I won't be changing all the values on this object, but I'm going to copy the whole thing for now, starting from the curly brace "{" shown below, all the way to the matching closing curly brace. Create a new .gamedatabundle file in your mod directory. Enter the text shown, and paste the object you copied. { "GameDataObjects":[ (PASTE OBJECT HERE) ] } Now I'll remove the data I don't want to override. Note that I always need to leave the "$type" and "ID" properties of the object, and the "$type" property of any components I want to alter. That leaves me with this: { "GameDataObjects":[ { "$type": "Game.GameData.GlobalGameSettingsGameData, Assembly-CSharp", "ID": "eddfc852-ccb9-4884-b901-e77e8ca31b48", "Components": [ { "$type": "Game.GameData.CharacterStatsSettingsComponent, Assembly-CSharp", "PowerPoolUsageType": "PerEncounter" }, { "$type": "Game.GameData.SpellSettingsComponent, Assembly-CSharp", "SpellUsageType": "PerEncounter" } ] } ] } Now I'll change all spells and class power pools to reset on rest instead of after each encounter by changing "PowerPoolUsageType" and "SpellUsageType" from "PerEncounter" to "PerRest". { "GameDataObjects":[ { "$type": "Game.GameData.GlobalGameSettingsGameData, Assembly-CSharp", "ID": "eddfc852-ccb9-4884-b901-e77e8ca31b48", "Components": [ { "$type": "Game.GameData.CharacterStatsSettingsComponent, Assembly-CSharp", "PowerPoolUsageType": "PerRest" }, { "$type": "Game.GameData.SpellSettingsComponent, Assembly-CSharp", "SpellUsageType": "PerRest" } ] } ] } That's it. My mod is now ready to test.
-
No, we haven't extended that at all yet. It's still just based on the priest/paladin dispositions. You can't add or change small icons yet because they're in texture atlases that require some additional data. I'm hoping to be able to add support for that soon. No, you can't make a property that isn't an array into an array without changing the code.
-
An array is a property that has a list of things in it rather than just one value. In JSON, you can identify them because the value(s) are inside [square braces]. { "Array":[1, 2, 3], "NotArray":4 }, { "ArrayOfObjects":[{"Name":"A"},{"Name":"B"}], "NotArrayObject":{"Name":"C"} } Yes, "Components" itself is technically an array, but we handle that one specially so you can override individual components and ignore others entirely. The upcoming tutorial will cover this somewhat. That's right.
-
This is a lot to catch up on, but it's probably going to be prohibitively difficult to add an entirely new vendor to the game because important data for doing so is in the Unity scene, not game data. There's a Vendor object in the scene (this is the object referred to by OpenStore) that ties together a number of different containers (also in the scene), some visible and some not. This is why you see different behavior from different loot lists - some of the loot lists are used to generate those containers (the first time that scene is loaded), which others are used to regenerate hidden inventories full of less-unique items. All of this is specified on Unity components in the scene.
-
We have a tutorial that covers this and some other things coming out soon™. Unfortunately arrays are treated as a single property, so you won't be able to individually modify array elements or any properties on them. If you specify any data for the array, what you specify will always completely replace the default. The behavior the ships default to when they have no data probably just closely resembles what they were set to do. I know there are a few use cases where modifying arrays would be very useful, so we'll see if we can do something about that in the next patch.
-
The only safe way to reload them right now is to quit to the main menu and Refresh in the mod manager. You can force a hot reload by twiddling the state of one of your mods with the SetModLoadIndex or SetModEnabled commands, but this isn't something we officially support for this patch. It will cause some problems with references to the data in the loaded game, which may be fixed by loading a save, but you still have a scene load to deal with there.
-
This is a list of changes from 1.1.1.0064 to 1.2.0.0017 that specifically affect modding the game. Thanks for your feedback and suggestions - we'll continue to implement more of these in the future. For full patch notes, see the thread Patch Notes for 1.2.0.0017. Modding Patch Notes for 1.2.0.0017 Added the Mod Manager UI, which is accessed from the Options window on the Main Menu. This UI allows you to view installed mods, enabled and disable them, and change their load order. Game Data Objects from mods can now partially override existing objects. Properties that a mod doesn't need to change can be deleted from the mod object and will be left unmodified. Some textures in the game can be added or modified via mods. The textures should appear at the specified path inside the mod's override folder (e.g. "Override/MyMod/GUI/InnIcons/icon.png"). PNG and JPG images are supported. Some textures that can be modded this way include: Large item icons (but not small ones) (ItemGameData.IconTextureLarge) Loading screen images (LoadScreenComponent) Inn room images (InnRoomComponent.DisplayImage) Vendor logo images (VendorComponent.StoreIconPath) Bestiary images (BestiaryEntryComponent.PicturePath) Scripted interaction illustrations (SetInteractionImage script) End-game slide images (SetEndGameSlide script) Ship portrait images (ShipComponent.ShipPortrait) (Breaking) Made it possible to add new classes via mods. Mods that change the following values will need to be updated. Removed CharacterClassComponent.Type CharacterProgressionDataComponent.HybridClassTitles moved to CharacterClassComponent.HybridClassTitles (on a per-class basis) AbilitySettingsComponent.ClassResourceConversionRates moved to CharacterClassComponent.ResourceConversionRate (on a per-class basis) Replaced StatusEffectValueType.Phrases/Wounds/Focus with generic StatusEffectValueType.AccruedResource. Changed AIDecisionTreeDataComponent.CharacterClass from enum to Guid Changed EquippableComponent.RestrictedToClass from enum[] to Guid[] Changed GenericAbilityComponent.AbilityClass from enum to Guid Changed StatusEffectComponent.ClassValue from enum to Guid Changed ClassProgressionTable.CharacterClass from enum to Guid Changed ProgressionPowerLevelRequirement.Class from enum to Guid Changed StatusEffectAttackFilter.ClassType from enum to Guid Changed StatusEffectDynamicValueAdjustment.Class from enum to Guid Exposed BaseMaxFocus, MaxFocusPerLevel, and StartingFocusRatio on FocusTraitComponent Fixed some syntax errors in base game gamedatabundles. Removed BackgroundComponent.Type Removed CharacterSubClassEnum Removed CharacterSubClassComponent.Subclass *.conversationbundle and conversation.manifest files can now be loaded from mod directories rather than only the root override directory.
-
Enums and Guids aren't interchangeable - enums are represented as strings in all data (e.g. "Wizard"), while Guids are guids. The reason you've seen the different signatures is that this function was recently changed to expect the Guid of the CharacterClassGameData object of the class you want to check rather than the enum name. The old signature Boolean IsClassAccruedResourceCount(Guid, CharacterClass, Operator, Int32) will not work anymore. This change is happening globally in 1.2.0 to make it possible to create new classes in mods. None of the target type conditionals can override one another. If a character is NonTargetable, the code won't even check the conditional scripts. Unfortunately I also don't think it's possible to ignore status effects on a target for a particular character. You could potentially attempt to set something up that applies a SuspendBeneficialEffects status effect to the target before the character hits someone, but that won't help in this particular case because you won't be able to attack the target at all. Thanks! That's a good idea, but I don't know if we'll have time to do it. Since all of the content of a each type is on the same page, your browser's Ctrl+F function should work fairly well. Yeah, the documentation is a bit bugged when it comes to bitmask enums such as WorldMapEncounterSpawn.AppearsInDifficulty. I'll do something about that as we update.
-
We've released official documentation for the Deadfire game data formats. The documentation includes: Game Data Types - which components are needed on each type Components / Structures - the properties on each component or structure, including comment information that wasn't available before Enums - the valid values for each enum, including some comments Scripts and Conditionals - all available scripts and conditionals, with comment information from the DLL https://eternity.obsidian.net/game-data-formats You can reply to this thread if you find any issues with the documentation or have any suggestions. This link has been added to the sticky.
- 10 replies
-
- 18
-
The logic that excludes priest/paladin subclasses based on your subclass in the other is based on the PositiveDispositions and NegativeDispositions of the respective Paladin Order and Deity. If any dispositions are Positive for one subclass and Negative for the other, those subclasses aren't compatible. I'll make a note that we could add data to allow you to manually mark certain subclasses as incompatible.