Jump to content

Official Game Data Documentation Released


Recommended Posts

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.

  • Like 18
Link to comment
Share on other sites

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

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

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

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 ?

  • Like 2
Link to comment
Share on other sites

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

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.

  • Like 3
Link to comment
Share on other sites

 

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

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 by mammasaura
  • Like 1

CzSyX91.jpg

Link to comment
Share on other sites

 

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...