@@ -15,6 +15,16 @@ var burstFrames []int
1515
1616const paleHymnDur = 15 * 60
1717
18+ const (
19+ paleHymnC6 = 0
20+ paleHymnMoonsong = 1
21+ paleHymnBurst = 2
22+
23+ paleHymnC6Key = "lauma-pale-hymn-c6"
24+ paleHymnMoonsongKey = "lauma-pale-hymn-moonsong"
25+ paleHymnBurstKey = "lauma-pale-hymn-burst"
26+ )
27+
1828func init () {
1929 burstFrames = frames .InitAbilSlice (115 ) // Q -> walk
2030 burstFrames [action .ActionAttack ] = 111
@@ -36,7 +46,7 @@ func (c *char) Burst(p map[string]int) (action.Info, error) {
3646 c .DeleteStatus (moonSongIcdKey )
3747 c .Core .Tasks .Add (func () {
3848 c .c1OnBurst ()
39- c .addPaleHymn (18 )
49+ c .addPaleHymnBurst (18 )
4050
4151 c .AddStatus (burstKey , paleHymnDur , true ) // should this be here?
4252 c .moonSongOnBurst ()
@@ -95,66 +105,59 @@ func (c *char) initBurst() {
95105}
96106
97107func (c * char ) paleHymnCount () int {
98- c .removeExpiredPaleHymn ()
99- return c .paleHymnStacksSrc .Len () + c .paleHymnStacksSrcC6 .Len ()
108+ return c .paleHymn [paleHymnBurst ] + c .paleHymn [paleHymnMoonsong ] + c .paleHymn [paleHymnC6 ]
100109}
101110
102- func (c * char ) addPaleHymn (amount int ) {
103- startFrame := c .TimePassed
111+ func (c * char ) addPaleHymnBurst (amount int ) {
112+ ind := paleHymnBurst
113+ c .paleHymn [ind ] += amount
114+ c .paleHymnSrc [ind ] = c .Core .F
115+ c .AddStatus (paleHymnBurstKey , paleHymnDur , true )
116+ c .QueueCharTask (c .removeExpiredPaleHymn (c .paleHymnSrc [ind ], ind ), paleHymnDur )
117+ }
104118
105- for range amount {
106- c .paleHymnStacksSrc .PushBack (startFrame )
107- }
108- c .QueueCharTask (c .removeExpiredPaleHymn , paleHymnDur + 1 )
119+ func (c * char ) addPaleHymnMoonsong (amount int ) {
120+ ind := paleHymnMoonsong
121+ c .paleHymn [ind ] += amount
122+ c .paleHymnSrc [ind ] = c .Core .F
123+ c .AddStatus (paleHymnMoonsongKey , paleHymnDur , true )
124+ c .QueueCharTask (c .removeExpiredPaleHymn (c .paleHymnSrc [ind ], ind ), paleHymnDur )
109125}
110126
111127func (c * char ) addC6PaleHymn (amount int ) {
112- startFrame := c .TimePassed
113- for range amount {
114- c .paleHymnStacksSrcC6 .PushBack (startFrame )
115- }
116- c .c6PaleHymnExpiry = c .TimePassed + paleHymnDur
117- c .QueueCharTask (c .removeExpiredPaleHymn , paleHymnDur + 1 )
128+ ind := paleHymnC6
129+ c .paleHymn [ind ] += amount
130+ c .paleHymnSrc [ind ] = c .Core .F
131+ c .AddStatus (paleHymnC6Key , paleHymnDur , true )
132+ c .QueueCharTask (c .removeExpiredPaleHymn (c .paleHymnSrc [ind ], ind ), paleHymnDur )
118133}
119134
120135// attempts to consume a pale hymn.
121136func (c * char ) consumePaleHymn () {
122- c .removeExpiredPaleHymn ()
123- if c .paleHymnStacksSrc .Len () == 0 && c .paleHymnStacksSrcC6 .Len () == 0 {
124- // error?
125- // panic("consumePaleHymn() called on without Pale Hymn stacks")
137+ if c .paleHymn [paleHymnC6 ] > 0 {
138+ c .paleHymn [paleHymnC6 ]--
126139 return
127140 }
128141
129- if c .paleHymnStacksSrc . Len () == 0 {
130- c .paleHymnStacksSrcC6 . PopFront ()
142+ if c .paleHymn [ paleHymnMoonsong ] > 0 {
143+ c .paleHymn [ paleHymnMoonsong ] --
131144 return
132145 }
133146
134- if c .paleHymnStacksSrcC6 . Len () == 0 {
135- c .paleHymnStacksSrc . PopFront ()
147+ if c .paleHymn [ paleHymnBurst ] > 0 {
148+ c .paleHymn [ paleHymnBurst ] --
136149 return
137150 }
138151
139- // pop whichever one is closer to expiry
140- paleHymnSrc := c .paleHymnStacksSrc .Front ()
141- paleHymnSrcC6 := c .paleHymnStacksSrcC6 .Front ()
142-
143- if paleHymnSrc < paleHymnSrcC6 {
144- c .paleHymnStacksSrc .PopFront ()
145- } else {
146- c .paleHymnStacksSrcC6 .PopFront ()
147- }
152+ // err or panic?
153+ // panic("consumePaleHymn called when there are no pale hymn stacks")
148154}
149155
150- func (c * char ) removeExpiredPaleHymn () {
151- currentFrame := c .TimePassed
152-
153- for c .paleHymnStacksSrc .Len () > 0 && c .paleHymnStacksSrc .Front ()+ paleHymnDur < currentFrame {
154- c .paleHymnStacksSrc .PopFront ()
155- }
156-
157- if c .c6PaleHymnExpiry < currentFrame {
158- c .paleHymnStacksSrcC6 .Clear ()
156+ func (c * char ) removeExpiredPaleHymn (src , index int ) func () {
157+ return func () {
158+ if c .paleHymnSrc [index ] != src {
159+ return
160+ }
161+ c .paleHymn [index ] = 0
159162 }
160163}
0 commit comments