diff --git a/src/NosCore.Data/Enumerations/Buff/AdditionalTypes.cs b/src/NosCore.Data/Enumerations/Buff/AdditionalTypes.cs
index c540af286..f37b0fc7a 100644
--- a/src/NosCore.Data/Enumerations/Buff/AdditionalTypes.cs
+++ b/src/NosCore.Data/Enumerations/Buff/AdditionalTypes.cs
@@ -110,7 +110,13 @@ public enum Block : byte
ChanceRangedIncreased = 31,
ChanceRangedDecreased = 32,
ChanceMagicalIncreased = 41,
- ChanceMagicalDecreased = 42
+ ChanceMagicalDecreased = 42,
+
+ ///
+ /// Per-critical reduction over a run of hits, not a chance like 11-42.
+ ///
+ CriticalDamageReducedPerHit = 51,
+ CriticalDamageReducedPerHitNegated = 52
}
public enum BossMonstersSkill : byte
@@ -631,16 +637,36 @@ public enum Morale : byte
IgnoreEnemyMoraleNegated = 52
}
+ ///
+ /// 21-22 are a percentage and 41-42 are flat, which the names do not say. 11-12 and 51-52
+ /// carry the same text as each other in the files, so the X2 slot has no meaning of its own.
+ ///
public enum Move : byte
{
MovementImpossible = 11,
MovementImpossibleNegated = 12,
+
+ /// Movement speed is increased by %s%%.
MoveSpeedIncreased = 21,
+
+ /// Movement speed is decreased by %s%%.
MoveSpeedDecreased = 22,
- SetMovement = 31,
- SetMovementNegated = 32,
+
+ ///
+ /// Your movement speed is increased by %s while you are hidden. Not a "set
+ /// movement" of any kind: it is a flat bonus that only applies while invisible.
+ ///
+ SpeedWhileHiddenIncreased = 31,
+
+ /// Your movement speed is decreased by %s while you are hidden.
+ SpeedWhileHiddenDecreased = 32,
+
+ /// Movement speed is increased by %s. This is the unconditional flat one.
MovementSpeedIncreased = 41,
+
+ /// Movement speed is decreased by %s.
MovementSpeedDecreased = 42,
+
TempMaximized = 51,
TempMaximizedNegated = 52
}
@@ -1292,14 +1318,21 @@ public enum Type103 : byte
DecreaseConcentration = 52
}
+ ///
+ /// 52 targets allies, not enemies - it is not the negation of 51.
+ ///
public enum Type104 : byte
{
ReflectOnDeff = 11,
ReflectOnDeffNegated = 12,
AreaDamageEachSecond = 21,
+ AreaDamageEachSecondNegated = 22,
SummonMonsterOnDef = 31,
- //SubType 4 didn't exist.
- AreaBuffEachSecond = 51
+ SummonTwoMonstersOnDef = 32,
+ MateAttackIncreased = 41,
+ MateAttackIncreasedNegated = 42,
+ AreaBuffEachSecond = 51,
+ AreaBuffOnAlliesEachSecond = 52
}
public enum Type107 : byte
diff --git a/src/NosCore.GameObject/Services/SpeedCalculationService/SpeedCalculationService.cs b/src/NosCore.GameObject/Services/SpeedCalculationService/SpeedCalculationService.cs
index 6e1237e81..5df15dfaf 100644
--- a/src/NosCore.GameObject/Services/SpeedCalculationService/SpeedCalculationService.cs
+++ b/src/NosCore.GameObject/Services/SpeedCalculationService/SpeedCalculationService.cs
@@ -18,7 +18,12 @@ private byte CalculateSpeed(IAliveEntity aliveEntity, byte defaultSpeed)
// return 0;
// }
- var bonusSpeed = 0; /*(byte)GetBuff(CardType.Move, (byte)AdditionalTypes.Move.SetMovementNegated)[0];*/
+ // The movement BCards are still not read. The placeholder that used to sit
+ // here reached for subtype 32, which the files say is "movement speed is
+ // DECREASED by %s while you are hidden": wrong slot and wrong condition for a
+ // general speed bonus. The unconditional flat pair is 41-42, and 21-22 is the
+ // percentage.
+ var bonusSpeed = 0;
if (defaultSpeed + bonusSpeed > 59)
{
return 59;