Skip to content

Commit 3b3e1ad

Browse files
DamageShieldBehaviour class now tracks whether it has fully initialised or not
1 parent d4ac897 commit 3b3e1ad

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

InscryptionAPI/Card/DamageShieldBehaviour.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,13 @@ public abstract class DamageShieldBehaviour : AbilityBehaviour
2020
public abstract int StartingNumShields { get; } // how many shields this sigil will provide initially
2121
public bool HasShields() => NumShields > 0;
2222

23+
public bool initialised = false;
2324
public virtual void Start()
2425
{
2526
if (base.Card != null)
2627
numShields = StartingNumShields;
28+
29+
initialised = true;
2730
}
2831

2932
public virtual void AddShields(int amount, bool updateDisplay = true)

InscryptionAPI/Card/ShieldManager.cs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private static bool PreventShieldReset(PlayableCard target)
104104
[HarmonyPrefix, HarmonyPatch(typeof(PlayableCard), nameof(PlayableCard.ResetShield), new Type[] { })]
105105
private static void ResetModShields(PlayableCard __instance) // runs before the base ResetShield logic
106106
{
107-
foreach (var com in __instance.GetComponents<DamageShieldBehaviour>())
107+
foreach (DamageShieldBehaviour com in __instance.GetComponents<DamageShieldBehaviour>())
108108
com.ResetShields(false);
109109

110110
// if we're using the broken shield portrait, reset to the default portrait - if we're MudTurtle
@@ -216,23 +216,26 @@ private static List<Ability> HiddensOnlyRemoveStacks(List<Ability> abilities, Li
216216
{
217217
// remove all abilities that hide the entire stack
218218
abilities.RemoveAll(x => hiddenAbilities.Contains(x) && !x.GetHideSingleStacks());
219-
foreach (var ab in hiddenAbilities.Where(x => x.GetHideSingleStacks()))
219+
foreach (Ability ab in hiddenAbilities.Where(x => x.GetHideSingleStacks()))
220220
abilities.Remove(ab);
221+
221222
return abilities;
222223
}
223224
private static void CorrectHiddenAbilityRender(PlayableCard card)
224225
{
225-
foreach (var com in card.GetComponents<DamageShieldBehaviour>())
226+
foreach (DamageShieldBehaviour com in card.GetComponents<DamageShieldBehaviour>().Where(x => x.initialised))
226227
{
227228
if (com.HasShields())
228229
{
229230
if (com.Ability.GetHideSingleStacks())
230231
{
231232
// if there are more hidden shields than there should be
232-
int removeStacks = card.Status.hiddenAbilities.Count(x => x == com.Ability) - com.NumShields;
233-
for (int i = 0; i < removeStacks; i++)
233+
if (card.Status.hiddenAbilities.Count(x => x == com.Ability) >= com.NumShields)
234234
{
235-
card.Status.hiddenAbilities.Remove(com.Ability);
235+
for (int i = 0; i < com.NumShields; i++)
236+
{
237+
card.Status.hiddenAbilities.Remove(com.Ability);
238+
}
236239
}
237240
}
238241
else
@@ -245,11 +248,13 @@ private static void CorrectHiddenAbilityRender(PlayableCard card)
245248
{
246249
if (com.Ability.GetHideSingleStacks())
247250
{
251+
card.AddShieldCount(1, Ability.DeathShield);
248252
int shieldsLost = com.StartingNumShields - com.NumShields;
249253
if (card.Status.hiddenAbilities.Count(x => x == com.Ability) < shieldsLost)
250254
{
251255
for (int i = 0; i < shieldsLost; i++)
252256
{
257+
//Debug.Log($"{com.StartingNumShields} {com.NumShields} {shieldsLost} Add hidden");
253258
card.Status.hiddenAbilities.Add(com.Ability);
254259
}
255260
}
@@ -271,7 +276,7 @@ private static void CorrectHiddenAbilityRender(PlayableCard card)
271276
card.RenderCard();
272277
}
273278

274-
[HarmonyPostfix, HarmonyPatch(typeof(PlayableCard), nameof(PlayableCard.AddTemporaryMod))]
279+
[HarmonyPrefix, HarmonyPatch(typeof(PlayableCard), nameof(PlayableCard.AddTemporaryMod))]
275280
private static void AddTemporaryShieldCount(PlayableCard __instance, CardModificationInfo mod)
276281
{
277282
if (__instance == null || mod == null)
@@ -287,7 +292,7 @@ private static void AddTemporaryShieldCount(PlayableCard __instance, CardModific
287292
{
288293
DamageShieldBehaviour behaviour = __instance.TriggerHandler.triggeredAbilities.Find(x => x.Item1 == ability).Item2 as DamageShieldBehaviour;
289294
behaviour.AddShields(1);
290-
//InscryptionAPIPlugin.Logger.LogInfo($"Add: {__instance.Info.name} {behaviour.NumShields} <-- {behaviour.NumShields - 1}");
295+
//InscryptionAPIPlugin.Logger.LogInfo($"Add: {__instance.Info.name} {behaviour.NumShields - 1} --> {behaviour.NumShields}");
291296
}
292297
}
293298
}

0 commit comments

Comments
 (0)