Jump to content

Recommended Posts

Hello, everyone.

 

I'm trying to put together a mod for the Shifter subclass that would make it select a single Spiritshift form at character creation, and that form would be a modal ability that disables spellcasting while it's active.

 

My first step is to try and turn the Shifter's Spiritshift forms into a Modal ability (they already disable spellcasting, so I don't need to change that part.) Once nailed, I'll move on to making the class select just one form at character creation. Final step will be updating descriptions accordingly.

 

I'm very new to modding Deadfire, so please bear with me :)

 

Here's what I tried.

 

In abilities.gamedatabundle I found entries for each Spiritshift form that are specific to the Shifter sublcass. To my surprise, they're all set to "IsModal: true" by default; what I did was change a few other fields to match one of the two versions of Duality of Mortal Presence (probably version A). Altered code for one of the forms in spoiler tags:

 

 

 

{
            "$type": "Game.GameData.GenericAbilityGameData, Assembly-CSharp",
            "DebugName": "Spiritshift_Bear_Shifter",
            "ID": "41fa0d2c-27a8-46bc-9d96-7dc7a84f8d77",
            "Components": [
                {
                    "$type": "Game.GameData.GenericAbilityComponent, Assembly-CSharp",
                    "KeywordsIDs": [],
                    "DisplayName": 634,
                    "Description": 878,
                    "UpgradeDescriptions": [],
                    "UpgradedFromID": "00000000-0000-0000-0000-000000000000",
                    "Vocalization": "NoVocalization",
                    "Icon": "gui/icons/abilities/druid/spiritshift_bear.png",
                    "UsageType": "None",
                    "UsageValue": 0,
                    "AbilityClassID": "568f1c26-1398-4e67-8b81-0f6a60e6cdde",
                    "AbilityLevel": 0,
                    "IsPassive": "false",
                    "StackingRuleOverride": "Default",
                    "TriggerOnHit": "false",
                    "IsModal": "true",
                    "ModalGroupID": "56a9c7ab-12f8-45ff-8fc9-41bd39fd1d7d",
                    "IsCombatOnly": "true",
                    "IsNonCombatOnly": "false",
                    "HideFromUI": "false",
                    "HideFromCombatLog": "false",
                    "UniqueSet": "None",
                    "NoiseLevelID": "82bc1ce9-3a81-41ca-a61a-cc1f73a53de7",
                    "DurationOverride": 0,
                    "OverrideEmpower": "Default",
                    "ClearsOnMovement": "false",
                    "CannotActivateWhileInStealth": "false",
                    "CannotActivateWhileInvisible": "false",
                    "ActivationPrerequisites": {
                        "Conditional": {
                            "Operator": 0,
                            "Components": []
                        }
                    },
                    "ApplicationPrerequisites": {
                        "Conditional": {
                            "Operator": 0,
                            "Components": []
                        }
                    },
                    "DeactivationPrerequisites": {
                        "Conditional": {
                            "Operator": 0,
                            "Components": [
                                {
                                    "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats",
                                    "Data": {
                                        "FullName": "Boolean HasStatusEffectWithKeyword(Guid, Guid)",
                                        "Parameters": [
                                            "011111e9-0000-0000-0000-000000000000",
                                            "a457d3b9-b5c7-4c2c-817b-65c2835b19cf"
                                        ],
                                        "Flags": "",
                                        "UnrealCall": "",
                                        "FunctionHash": -1392641717,
                                        "ParameterHash": 1889353659
                                    },
                                    "Not": true,
                                    "Operator": 0
                                }
                            ]
                        }
                    },
                    "PowerLevelScaling": {
                        "ScalingType": "Never",
                        "BaseLevel": 0,
                        "LevelIncrement": 1,
                        "MaxLevel": 0,
                        "DamageAdjustment": 1,
                        "DurationAdjustment": 1,
                        "BounceCountAdjustment": 0,
                        "ProjectileCountAdjustment": 0,
                        "AccuracyAdjustment": 0,
                        "PenetrationAdjustment": 0
                    },
                    "StatusEffectKeywordsIDs": [
                        "a457d3b9-b5c7-4c2c-817b-65c2835b19cf"
                    ],
                    "StatusEffectsIDs": [
                        "f5b64334-8b07-4a27-bf3b-0cffd6222dec",
                        "44f79497-1c0d-4f00-a489-925a9546e0f7",
                        "67b5a416-ae58-4308-8222-2e1fe3b658c6",
                        "6bf3088e-08f0-460d-be61-c93efef69ed4"
                    ],
                    "VisualEffects": [
                        {
                            "VisualEffect": "prefabs/effects/abilities/druid/fx_spiritshift.prefab",
                            "AttachPoint": "Ground",
                            "AttachObject": "Caster",
                            "AttachMode": "Position",
                            "MeshType": "None",
                            "Event": "OnActivate"
                        },
                        {
                            "VisualEffect": "prefabs/effects/abilities/druid/fx_spiritshift.prefab",
                            "AttachPoint": "Ground",
                            "AttachObject": "Caster",
                            "AttachMode": "Position",
                            "MeshType": "None",
                            "Event": "OnDeactivate"
                        }
                    ],
                    "SelfMaterialReplacementID": "00000000-0000-0000-0000-000000000000",
                    "AttackID": "00000000-0000-0000-0000-000000000000",
                    "AITargetingConditional": {
                        "Conditional": {
                            "Operator": 0,
                            "Components": []
                        },
                        "Scripts": []
                    },
                    "AudioEventListID": "11505d3a-349b-4d51-838b-ba942c09cea0"
                },
                {
                    "$type": "Game.GameData.ProgressionUnlockableComponent, Assembly-CSharp"
                }
            ]
        }

 

 

 

Specifically, I changed:

 

  • UsageType from "Per Encounter" to "None"
  • UsageValue from 1 to 0
  • DurationOverride from 22 to 0
  • ModalIDGroup from an alphanumeric something I don't understand to whatever alphanumeric blurb Duality of Mortal Presence had.

 

I then tried it in-game and this is the result:

 

  • During character creation, Spiritshift forms are no longer displayed in the ability selection screen (only tried a Shifter but I doubt other subclasses could or should be affected.) IIRC in the unmodded game they are all shown at once and you cannot choose (because you gain all of them regardless if you're a Shifter.) No idea why this happened.
  • Upon entering combat, Spiritshift forms still appear to have a 22s duration. Once the duration is over, Spiritshift goes into a cooldown (like when you deactivate a Modal and go through a cooldown before you can re-activate it) at the end of which it automatically activates again. No matter what form you initially chose, automatic reactivation always defaults to the Bear form, which is the first one in the list.

So, something is still forcing these forms to have a duration even though I changed the DurationOverride to 0. Somehow these changes also affected the character creation screen for some reason.

 

I changed ModalIDGroup to whatever Duality of Mortal Presence had, but I do not know what those numbers mean. Perhaps that was a bad move?

 

Any idea what I should be looking at to remove the duration and make this behave like a proper modal? (We can handle character creation once the modal aspect's taken care of; I was gonna change that to work in the same way as it does for other Druids anyway.)

Edited by AndreaColombo

"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

I can't help much with the second issue - ability modding is still pretty opaque to me - but the first sounds like a progression table issue. You'll find the druid's progression table under PT_Druid in progressiontables.gamedatabundle. Copy the entire PT_Druid object to your mod file, then find the entries granting the Shifter versions of Spiritshift (just ctrl-f "shifter") and change the UnlockStyle from "Autogrant" to "Unlock".

  • Like 1

If I'm typing in red, it means I'm being sarcastic. But not this time.

Dark green, on the other hand, is for jokes and irony in general.

Link to comment
Share on other sites

About the duration it's related to the status effects inducted from the ability so you have to change also all their durations .

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

About the duration it's related to the status effects inducted from the ability so you have to change also all their durations .

 

What's the effect of the DurationOverride, then? Does it take precedence, or something?

If I'm typing in red, it means I'm being sarcastic. But not this time.

Dark green, on the other hand, is for jokes and irony in general.

Link to comment
Share on other sites

 

About the duration it's related to the status effects inducted from the ability so you have to change also all their durations .

 

What's the effect of the DurationOverride, then? Does it take precedence, or something?

 

 

According to the documentations

DurationOverride  Override for how long (in seconds) all Status Effects associated with the Ability component will last.
Single            0

so should be the overall duration of all the applied effects which have again a different individual duration with minor or equal value

 

 

  • Like 1
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...