Skip to content

Param inconsistencies

Phil25 edited this page Mar 23, 2023 · 5 revisions

Last checked version: 1.09


Overview

This page documents all (that I know of) instances of inconsistencies in the official game params and how to fix them. Their impact on the game ranges from small to medium -- usually just balancing issues. The fix is very easy because, once you understand what the problem is, all it takes is changing a few values.

Summaries

item fixed in problem solution
Cold Antspur Rapier 1.09 Scarlet Rot buildup is 0 from +6 and higher swap values in fields spEffectBehaviorId0 (107500 in 1.07) and spEffectBehaviorId1 (6600 in 1.07)
Cold Serpentbone Blade* - Poison buildup is 0 from +6 and higher swap values in fields spEffectBehaviorId0 (107500 in 1.07) and spEffectBehaviorId1 (6510 in 1.07)
Blood Rotten Greataxe 1.09 Scarlet Rot buildup is 0 from +3 and higher swap values in fields spEffectBehaviorId0 (6603 in 1.07) and spEffectBehaviorId1 (105200 in 1.07)
Perfumer Robe (Altered) - Sleep and Madness resistances differ change field resistSleep (63 in 1.07) to match resistMadness (57 in 1.07)
Mask of Confidence - Hemorrhage and Frost resistances differ change field resistFreeze (10 in 1.07) to match resistBlood (11 in 1.07)
Rock Blaster - held FP consumption differs from one shown in the menu change field mp_charge (4 in 1.07) to match consumeLoopMP_forMenu (5 in 1.07), or other way around

* - issue not observable in standard gameplay

Cold Anstpur Rapier

Weapons have 3 param fields responsible for attack-applied status effects: spEffectBehaviorId0, spEffectBehaviorId1 and spEffectBehaviorId2 (I'm gonna refer to them as "slot" 1, 2 and 3). These fields either link to the SpEffectParam IDs or are set to -1 when not applicable. SpEffectParam governs many effect contexts (buffs, item uses, etc...) and weapon status effects is just one of them. Weapon status effects themselves are in practice split into two categories "standard" (IDs 105000-108275) and "special" (IDs 6400-6805); not actual names. The way the game upgrades status effects along with the weapon, is it adds that weapon level to the status effect ID -- ex. Cold Dagger +0 has ID 107500 at spEffectBehaviorId1 (slot 2), and 107508 when at +8 (107508 is slighter beefed up version of Frost than 107500).

Now, we have 3 effect slots, but the game has to figure out which one to increment when upgrading the weapon. This is where the ReinforceParamWeapon table comes in. Rows in this table come in sets of 11 (0 + 10 upgrade levels) or 26 (0 + 25 upgrade levels), each level is just one ID higher than the previous. Every affinity of every weapon points to an upgrade set of ReinforceParamWeapon, and its upgrade level tells the game which specific ID to use. Under this ID, among other upgrade multipliers, we find the effect offset for each weapon effect slot, fields: spEffectId1, spEffectId2 and, spEffectId3 (suffix numbers don't match the weapon fields'). Here we find that, for example, reinforcement ID 908 (Cold +8) has effect offsets 0, 8 and 0, meaning only spEffectBehaviorId1 (slot 2) will be increased.

Only 3 reinforcement sets (correlating to affinities) buff status effects (because the corresponding affinity applies it): Cold (900-925), Poison (1000-1025) and Blood (1100-1125). Now here's the catch: Cold only increases slot 2 (spEffectBehaviorId1), Poison also only increases slot 2 (spEffectBehaviorId1) and Blood only increases slot 1 (spEffectBehaviorId0). This means that each weapon row must be careful in which slots to place which effects.

So what's going on with Cold Antspur Rapier specifically? Changing affinities changes up the effect IDs in each slot, since it's technically a different armament. In case of the Cold affinity for this particular weapon, the effect IDs are simply in the wrong slots: slot 1 has 107500 ("standard" Frost) and slot 2 has 6600 (unique Scarlet Rot), but it should be the other way around instead. The Cold affinity upgrades slot 2, which bumps the Scarlet Rot effect to 6605 at +5, which still exists, and then to 6606 at +6, which doesn't. The "special" effects were never meant to be upgraded and there are no effects defined for IDs 6606-6625. The item description still expects to pull this information but defaults to 0 in such a case. This also means that the lonely Frost effect at slot 1 stays at base.

In short, we are lucky there isn't some unused "999 Scarlet Rot" effect at ID 6609 or instakill at 6619 or crash-your-game at 6625.

Cold Serpentbone Blade

Cold Serpentbone Blade has exactly the same issue as Cold Antspur Rapier. However, Serpentbone Blade affinity cannot be changed, despite having all affinity variants defined in the params.

Blood Rotten Greataxe

Blood Rotten Greataxe has a similar issue to Cold Antspur Rapier, so no extra explanation. Blood infusion upgrades slot 1, yet it's occupied by Scarlet Rot, while Bleed is set at slot 2. The IDs should be swapped.

One thing to note is that slot 1 points at Scarlet Rot ID 6603, so the breaking point occurs at +3.

Blood Rotten Greataxe was broken in update 1.05.

Perfumer Robe (Altered)

The "Focus" stat of armor governs resistance to Sleep and Madness, but in game those params are separate values. These values differ only for Perfumer Robe (Altered) of any armor in the game. In-game, the Focus value of 57 (one of Madness) is shown.

Mask of Confidence

The "Robustness" stat of armor governs resistance to Hemorrhage and Frost, but in game those params are separate values. These values differ only for Mask of Confidence of any armor in the game. In-game, the Robustness value of 11 (one of Hemorrhage) is shown.

Rock Blaster

For magic items, the field consumeLoopMP_forMenu is set to a value other than -1 when it's a spell that can be held down; judging by the field name it's meant to be for menu display only. However, the actual consumption is defined by mp_charge (which is also utilized when the spell is charged). In-game tests do indeed show that 4 FP per continuous attack is consumed, while the menu shows 5 -- this is contrary to other spells.

It was likely broken in an update lowering FP consumption for Rock Blaster, but ERDB doesn't parse magic yet.