BMac Posted June 28, 2018 Share Posted June 28, 2018 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. 18 Link to comment Share on other sites More sharing options...
TT1 Posted June 28, 2018 Share Posted June 28, 2018 Oh lord Jesus, yeah 1 Link to comment Share on other sites More sharing options...
AndreaColombo Posted June 28, 2018 Share Posted June 28, 2018 Mega kudos to Obsidian for this! "Time is not your enemy. Forever is." — Fall-From-Grace, Planescape: Torment "It's the questions we can't answer that teach us the most. They teach us how to think. If you give a man an answer, all he gains is a little fact. But give him a question, and he'll look for his own answers." — Kvothe, The Wise Man's Fears My Deadfire mods: Brilliant Mod | Faster Deadfire | Deadfire Unnerfed | Helwalker Rekke | Permanent Per-Rest Bonuses | PoE Items for Deadfire | No Recyled Icons | Soul Charged Nautilus Link to comment Share on other sites More sharing options...
GravitonGamer Posted June 28, 2018 Share Posted June 28, 2018 In the documentation, I noticed that some functions are using Guid like: Boolean IsClassAccruedResourceCount(Guid, Guid, Operator, Int32) But previously, I have seen the same function being used as: Boolean IsClassAccruedResourceCount(Guid, CharacterClass, Operator, Int32) Which makes me want to ask: When can we use enums to replace guids? (If it is still supported.) Link to comment Share on other sites More sharing options...
SiliconMage Posted June 29, 2018 Share Posted June 29, 2018 Thank you guys so much for doing this! We really appreciate it! I have a couple of question regarding the AttackBaseComponent and its AffectedTargetConditional field. I was trying to write up a spell like "See Invisible" that would allow the caster to see and target invisible individuals as though they weren't. However, one of the status effects that Invisibility in the game grants is a status effect of the type Nontargetable, which is pretty self explanatory. :D So my first question is does the AffectedTargetConditional field override a status effect like Nontargetable? If I ran the HasStatusEffectType script and passed in the NonTargetable status effect, would the conditional return true and allow me to target the Nontargetable individual anyway? My second question concerns whether or not there is a status effect or script that allows one to ignore status effects on an individual. For example, I would want a status effect that lets the person affected ignore status effects applying to other targets. I did some digging through the documentation, and I cannot seem to find a reference to anything, but it's definitely possible that I simply overlooked it. Thanks for your time, and thanks for helping to make an awesome game! Link to comment Share on other sites More sharing options...
TT1 Posted June 30, 2018 Share Posted June 30, 2018 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. Any chance of implementing a search on the documentation website ? 2 Link to comment Share on other sites More sharing options...
peardox Posted June 30, 2018 Share Posted June 30, 2018 In the documentation, I noticed that some functions are using Guid like: Boolean IsClassAccruedResourceCount(Guid, Guid, Operator, Int32) But previously, I have seen the same function being used as: Boolean IsClassAccruedResourceCount(Guid, CharacterClass, Operator, Int32) Which makes me want to ask: When can we use enums to replace guids? (If it is still supported.) Classically an ENUM is 1,2,3,4 etc for various types A SET is 1,2,4,8 (each time doubling the previous value) We therefore use DEFINE's to replace the one with the other I noticed that lot in the DOCs - easy enough to automatically process but NOT to use in exported etc This may sound pointless but it's not as it you pre-process a MOD you can replace the defines. I have a process in mind that would auto-build most of the skeleton of a MOD OK Fair warning has been applied I'm gonna move the domain to https://perspak.com early Feb but will keep all content There are reasons behind this move which basically boil down to unifying my release schedule My friends are welcome to play (I'll set you up your own areas if you desire them) Please note that this process is messy so may take a few weeks Link to comment Share on other sites More sharing options...
BMac Posted July 2, 2018 Author Share Posted July 2, 2018 In the documentation, I noticed that some functions are using Guid like: Boolean IsClassAccruedResourceCount(Guid, Guid, Operator, Int32) But previously, I have seen the same function being used as: Boolean IsClassAccruedResourceCount(Guid, CharacterClass, Operator, Int32) Which makes me want to ask: When can we use enums to replace guids? (If it is still supported.) 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. Thank you guys so much for doing this! We really appreciate it! I have a couple of question regarding the AttackBaseComponent and its AffectedTargetConditional field. I was trying to write up a spell like "See Invisible" that would allow the caster to see and target invisible individuals as though they weren't. However, one of the status effects that Invisibility in the game grants is a status effect of the type Nontargetable, which is pretty self explanatory. :D So my first question is does the AffectedTargetConditional field override a status effect like Nontargetable? If I ran the HasStatusEffectType script and passed in the NonTargetable status effect, would the conditional return true and allow me to target the Nontargetable individual anyway? My second question concerns whether or not there is a status effect or script that allows one to ignore status effects on an individual. For example, I would want a status effect that lets the person affected ignore status effects applying to other targets. I did some digging through the documentation, and I cannot seem to find a reference to anything, but it's definitely possible that I simply overlooked it. 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 for your time, and thanks for helping to make an awesome game! Thanks! Any chance of implementing a search on the documentation website ? 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. I noticed that lot in the DOCs - easy enough to automatically process but NOT to use in exported etc 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. 3 Link to comment Share on other sites More sharing options...
peardox Posted July 2, 2018 Share Posted July 2, 2018 Any chance of implementing a search on the documentation website ? 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. I noticed that lot in the DOCs - easy enough to automatically process but NOT to use in exported etc 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. I'm working on a search function for devs in reply to TT1's - bear with me by friend - something cool will result I've only done items.gamedatabundle but it's easy to extract them now I'm unsure as to which file to do next - characters is an obvious target but I've got a shed load of hanging ability lists etc This makes my next step confusing Everything will come together in the end It appears that most people like making new items so I may expand that branch of my research On the other hand, people like writing SpellBooks and new classes I'm pretty chock full of promises this week so tell me which you want and I'll do the research My promises for this week (delayed owing to the SaveGame issue) are conversationbundle and new items (somone - TT1? can prob write the latter) OK Fair warning has been applied I'm gonna move the domain to https://perspak.com early Feb but will keep all content There are reasons behind this move which basically boil down to unifying my release schedule My friends are welcome to play (I'll set you up your own areas if you desire them) Please note that this process is messy so may take a few weeks Link to comment Share on other sites More sharing options...
mammasaura Posted July 2, 2018 Share Posted July 2, 2018 (edited) 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. I must admit that all the targeting is a bit confusing but something that's worth to play with. I tried all the attack components and I found that the AoE component has a really nice option with "ExcludePrimaryTarget". I also tried to replicate this behavior with the target conditionals on the first target of a bounce attack but without success (I actually created a bounce attack with another attack on impact, and placed the conditional on this last one to not trigger if the current target is the primary target, but there isn't a conditional like this). If it's trivial having "ExcludePrimaryTarget" or a conditional for this would be amazing! 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. Thank you for this! I was checking the abilities bundle in the beta patch and found the record "AbilityClass" changed to "AbilityClassID". Thank you for making the game so much customizable. I also noticed that in the character bundle the SubClassGameData doesn't have anymore the "Subclass" record, so the subclasses aren't bound to the any enum, even if was possible to pair it with "Invalid" without any problem, like you suggested in another topic. Edited July 2, 2018 by mammasaura 1 Link to comment Share on other sites More sharing options...
GravitonGamer Posted July 3, 2018 Share Posted July 3, 2018 In the documentation, I noticed that some functions are using Guid like: Boolean IsClassAccruedResourceCount(Guid, Guid, Operator, Int32) But previously, I have seen the same function being used as: Boolean IsClassAccruedResourceCount(Guid, CharacterClass, Operator, Int32) Which makes me want to ask: When can we use enums to replace guids? (If it is still supported.) 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. Thanks! That's exactly what I needed to know! I already updated my mods to use Guids instead. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now