Skip to content

Commit 9ec1440

Browse files
authored
Change blooms to calc dmg at hitmark frame (#2325)
1 parent b4f5f05 commit 9ec1440

File tree

2 files changed

+58
-52
lines changed

2 files changed

+58
-52
lines changed

internal/characters/nilou/bountifulcore.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,19 @@ func newBountifulCore(c *core.Core, p geometry.Point, a *combat.AttackEvent) *Bo
2727

2828
char := b.Core.Player.ByIndex(a.Info.ActorIndex)
2929
explode := func() {
30-
ai, snap := reactable.NewBloomAttack(char, b)
31-
ap := combat.NewCircleHitOnTarget(b.Gadget, nil, 6.5)
32-
c.QueueAttackWithSnap(ai, snap, ap, 1)
33-
34-
// self damage
35-
ai.Abil += reactions.SelfDamageSuffix
36-
ai.FlatDmg = 0.05 * ai.FlatDmg
37-
ap.SkipTargets[targets.TargettablePlayer] = false
38-
ap.SkipTargets[targets.TargettableEnemy] = true
39-
ap.SkipTargets[targets.TargettableGadget] = true
40-
c.QueueAttackWithSnap(ai, snap, ap, 1)
30+
c.Tasks.Add(func() {
31+
ai, snap := reactable.NewBloomAttack(char, b)
32+
ap := combat.NewCircleHitOnTarget(b.Gadget, nil, 6.5)
33+
c.QueueAttackWithSnap(ai, snap, ap, 0)
34+
35+
// self damage
36+
ai.Abil += reactions.SelfDamageSuffix
37+
ai.FlatDmg = 0.05 * ai.FlatDmg
38+
ap.SkipTargets[targets.TargettablePlayer] = false
39+
ap.SkipTargets[targets.TargettableEnemy] = true
40+
ap.SkipTargets[targets.TargettableGadget] = true
41+
c.QueueAttackWithSnap(ai, snap, ap, 0)
42+
}, 1)
4143
}
4244
b.Gadget.OnExpiry = explode
4345
b.Gadget.OnKill = explode

pkg/reactable/bloom.go

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -116,24 +116,25 @@ func NewDendroCore(c *core.Core, shp geometry.Shape, a *combat.AttackEvent) *Den
116116

117117
explode := func(reason string) func() {
118118
return func() {
119-
ai, snap := NewBloomAttack(char, s)
120-
ap := combat.NewCircleHitOnTarget(s, nil, 5)
121-
c.QueueAttackWithSnap(ai, snap, ap, 1)
119+
s.Core.Tasks.Add(func() {
120+
ai, snap := NewBloomAttack(char, s)
121+
ap := combat.NewCircleHitOnTarget(s, nil, 5)
122+
c.QueueAttackWithSnap(ai, snap, ap, 0)
122123

123-
// self damage
124-
ai.Abil += reactions.SelfDamageSuffix
125-
ai.FlatDmg = 0.05 * ai.FlatDmg
126-
ap.SkipTargets[targets.TargettablePlayer] = false
127-
ap.SkipTargets[targets.TargettableEnemy] = true
128-
ap.SkipTargets[targets.TargettableGadget] = true
129-
c.QueueAttackWithSnap(ai, snap, ap, 1)
124+
// self damage
125+
ai.Abil += reactions.SelfDamageSuffix
126+
ai.FlatDmg = 0.05 * ai.FlatDmg
127+
ap.SkipTargets[targets.TargettablePlayer] = false
128+
ap.SkipTargets[targets.TargettableEnemy] = true
129+
ap.SkipTargets[targets.TargettableGadget] = true
130+
c.QueueAttackWithSnap(ai, snap, ap, 0)
130131

131-
c.Log.NewEvent(
132-
"dendro core "+reason,
133-
glog.LogElementEvent,
134-
char.Index,
135-
).
136-
Write("src", s.Src())
132+
c.Log.NewEvent(
133+
"dendro core "+reason,
134+
glog.LogElementEvent,
135+
char.Index,
136+
).Write("src", s.Src())
137+
}, 1)
137138
}
138139
}
139140
s.Gadget.OnExpiry = explode("expired")
@@ -164,21 +165,23 @@ func (s *DendroCore) Attack(atk *combat.AttackEvent, evt glog.Event) (float64, b
164165
case attributes.Electro:
165166
// trigger hyperbloom targets the nearest enemy
166167
// it can also do damage to player in small aoe
167-
ai, snap := NewHyperbloomAttack(char, s)
168-
// queue dmg nearest enemy within radius 15
169-
enemy := s.Core.Combat.ClosestEnemyWithinArea(combat.NewCircleHitOnTarget(s.Gadget, nil, 15), nil)
170-
if enemy != nil {
171-
ap := combat.NewCircleHitOnTarget(enemy, nil, 1)
172-
s.Core.QueueAttackWithSnap(ai, snap, ap, 60)
168+
s.Core.Tasks.Add(func() {
169+
ai, snap := NewHyperbloomAttack(char, s)
170+
// queue dmg nearest enemy within radius 15
171+
enemy := s.Core.Combat.ClosestEnemyWithinArea(combat.NewCircleHitOnTarget(s.Gadget, nil, 15), nil)
172+
if enemy != nil {
173+
ap := combat.NewCircleHitOnTarget(enemy, nil, 1)
174+
s.Core.QueueAttackWithSnap(ai, snap, ap, 0)
173175

174-
// also queue self damage
175-
ai.Abil += reactions.SelfDamageSuffix
176-
ai.FlatDmg = 0.05 * ai.FlatDmg
177-
ap.SkipTargets[targets.TargettablePlayer] = false
178-
ap.SkipTargets[targets.TargettableEnemy] = true
179-
ap.SkipTargets[targets.TargettableGadget] = true
180-
s.Core.QueueAttackWithSnap(ai, snap, ap, 60)
181-
}
176+
// also queue self damage
177+
ai.Abil += reactions.SelfDamageSuffix
178+
ai.FlatDmg = 0.05 * ai.FlatDmg
179+
ap.SkipTargets[targets.TargettablePlayer] = false
180+
ap.SkipTargets[targets.TargettableEnemy] = true
181+
ap.SkipTargets[targets.TargettableGadget] = true
182+
s.Core.QueueAttackWithSnap(ai, snap, ap, 0)
183+
}
184+
}, 60)
182185

183186
s.Gadget.OnKill = nil
184187
s.Gadget.Kill()
@@ -193,18 +196,19 @@ func (s *DendroCore) Attack(atk *combat.AttackEvent, evt glog.Event) (float64, b
193196
case attributes.Pyro:
194197
// trigger burgeon, aoe dendro damage
195198
// self damage
196-
ai, snap := NewBurgeonAttack(char, s)
197-
ap := combat.NewCircleHitOnTarget(s, nil, 5)
198-
199-
s.Core.QueueAttackWithSnap(ai, snap, ap, 1)
199+
s.Core.Tasks.Add(func() {
200+
ai, snap := NewBurgeonAttack(char, s)
201+
ap := combat.NewCircleHitOnTarget(s, nil, 5)
202+
s.Core.QueueAttackWithSnap(ai, snap, ap, 0)
200203

201-
// queue self damage
202-
ai.Abil += reactions.SelfDamageSuffix
203-
ai.FlatDmg = 0.05 * ai.FlatDmg
204-
ap.SkipTargets[targets.TargettablePlayer] = false
205-
ap.SkipTargets[targets.TargettableEnemy] = true
206-
ap.SkipTargets[targets.TargettableGadget] = true
207-
s.Core.QueueAttackWithSnap(ai, snap, ap, 1)
204+
// queue self damage
205+
ai.Abil += reactions.SelfDamageSuffix
206+
ai.FlatDmg = 0.05 * ai.FlatDmg
207+
ap.SkipTargets[targets.TargettablePlayer] = false
208+
ap.SkipTargets[targets.TargettableEnemy] = true
209+
ap.SkipTargets[targets.TargettableGadget] = true
210+
s.Core.QueueAttackWithSnap(ai, snap, ap, 0)
211+
}, 1)
208212

209213
s.Gadget.OnKill = nil
210214
s.Gadget.Kill()

0 commit comments

Comments
 (0)