Skip to content

Commit 14b3873

Browse files
committed
Fix Effect Application
Effects aren't placed at <= 0 hp Battle Director effectively handles false status application Battle director creates instances of status effects for each enemy, if multiple Renamed GetInstance for clarity
1 parent 1a9670a commit 14b3873

4 files changed

Lines changed: 26 additions & 9 deletions

File tree

Classes/StatusEffects/StatusEffect.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public StatusEffect InitStatus(
116116
return this;
117117
}
118118

119-
public StatusEffect GetInstance(int count = 1)
119+
public StatusEffect CreateInstance(int count = 1)
120120
{
121121
StatusEffect result = GD.Load<PackedScene>(LoadPath).Instantiate<StatusEffect>();
122122
result.SetCount(count);

Globals/Scribe.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.Linq;
34
using FunkEngine;
@@ -96,7 +97,7 @@ public partial class Scribe : Node
9697
{
9798
if (timing == Timing.Miss)
9899
return;
99-
director.AddStatus(Targetting.Player, StatusEffect.Block.GetInstance()); //todo: should scale with timing????
100+
director.AddStatus(Targetting.Player, StatusEffect.Block.CreateInstance()); //todo: should scale with timing????
100101
}
101102
),
102103
new Note(
@@ -135,7 +136,7 @@ public partial class Scribe : Node
135136
{
136137
if (timing == Timing.Miss)
137138
return;
138-
director.AddStatus(Targetting.First, StatusEffect.Poison.GetInstance((int)timing));
139+
director.AddStatus(Targetting.First, StatusEffect.Poison, (int)timing);
139140
}
140141
),
141142
new Note(
@@ -178,6 +179,17 @@ public partial class Scribe : Node
178179
);
179180
}
180181
),
182+
new Note(
183+
13,
184+
"Parasifly",
185+
GD.Load<Texture2D>("res://Classes/Notes/Assets/Note_Parasifly.png"),
186+
1,
187+
(director, note, timing) =>
188+
{
189+
int amt = Math.Max((3 - (int)timing) * note.GetBaseVal(), 0);
190+
director.AddStatus(Targetting.All, StatusEffect.Block, amt);
191+
}
192+
),
181193
};
182194

183195
public static readonly RelicTemplate[] RelicDictionary = new[]
@@ -395,7 +407,7 @@ public partial class Scribe : Node
395407
e is BattleDirector.Harbinger.OnDamageInstanceArgs dmgArgs
396408
&& dmgArgs.Dmg.Target == e.BD.Player
397409
&& dmgArgs.Dmg.Damage > 0
398-
&& e.BD.Player.HasStatus(StatusEffect.Block.GetInstance())
410+
&& e.BD.Player.HasStatus(StatusEffect.Block.CreateInstance())
399411
)
400412
{
401413
e.BD.DealDamage(Targetting.First, val, null);

Scenes/BattleDirector/Scripts/BattleDirector.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -371,16 +371,19 @@ public void DealDamage(Targetting targetting, int damage, PuppetTemplate source)
371371
}
372372
}
373373

374-
public void AddStatus(Targetting targetting, StatusEffect status)
374+
public void AddStatus(Targetting targetting, StatusEffect status, int amount = 1)
375375
{
376+
if (amount == 0)
377+
return;
376378
PuppetTemplate[] targets = GetTargets(targetting);
377379
foreach (PuppetTemplate target in targets)
378380
{
379-
target.AddStatusEffect(status);
381+
StatusEffect eff = status.CreateInstance(amount);
382+
if (!target.AddStatusEffect(eff))
383+
continue;
384+
eff.StatusEnd += RemoveStatus; //If new status, add effect events
385+
AddEvent(eff);
380386
}
381-
382-
status.StatusEnd += RemoveStatus;
383-
AddEvent(status);
384387
}
385388

386389
public void RemoveStatus(StatusEffect status)

Scenes/Puppets/Scripts/PuppetTemplate.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ public int GetCurrentHealth()
170170
/// <returns></returns>
171171
public bool AddStatusEffect(StatusEffect effect)
172172
{
173+
if (CurrentHealth <= 0)
174+
return false;
173175
int index = StatusEffects.FindIndex(sEff => sEff.StatusName == effect.StatusName);
174176
if (index != -1) //If status of same name -> stack -> return false
175177
{

0 commit comments

Comments
 (0)