Skip to content

Commit 4da47f0

Browse files
authored
ci: add check for "point-zero" timeline lint (OverlayPlugin#110)
Addresses @JLGarber 's comment in OverlayPlugin#106 about linting for "xx.0" float parameters for keyword values in timelines that should just be ints. (Also fixes an inadvertent bug that was causing a few mis-ordered keywords to not be linted properly.) Given that this will again touch a decent number of old timelines (although not as many as OverlayPlugin#106), I've temporarily added a control to limit the lint scope, and this PR only includes changes to EW+ShB timelines (+sophia_ex and zurvan_ex due to sync-files). Will do follow-on PRs for SB (there are a lot) and ARR+HW before the expac control filter is removed.
1 parent 8a68042 commit 4da47f0

28 files changed

+113
-89
lines changed

test/helper/test_timeline.ts

+48-24
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,17 @@ class TimelineParserLint extends TimelineParser {
4646
private ignoreSyncOrder = false;
4747
// Capture lint errors separately from TimelineParser's errors so we can do a separate unit test
4848
public lintErrors: LintError[] = [];
49+
// TEMPORARY: To control scpe of linting & file changes; will remove in future PR
50+
public _CURR_FILE = '';
51+
private _EXPAC_FILTER = ['05-shb', '06-ew'];
4952

5053
constructor(
5154
text: string,
5255
triggers: LooseTimelineTrigger[],
56+
filename: string, // TEMPORARY: Remove when all files are linted
5357
) {
5458
super(text, [], triggers); // calls TimelineParser's parse() method
59+
this._CURR_FILE = filename; // TEMPORARY: Remove when all files are linted
5560
this.lintTimelineFile(text);
5661
}
5762

@@ -185,17 +190,22 @@ class TimelineParserLint extends TimelineParser {
185190
return;
186191

187192
// From this point, we should expect [time] [name] [type] [NetRegex]
188-
// So just check keyword ordering (everything after), and 'window' format.
193+
// So just check keyword ordering & values (everything after).
189194
const keywords = lineParts.slice(4);
190195
if (keywords.length === 0)
191196
return;
192197

193-
const keywordList = keywords.filter((_, i) => i % 2 === 0);
194-
for (let i = 0; i < keywordList.length - 1; i++) {
195-
const thisKeyword = keywordList[i];
198+
// Assume that every keyword comes in a [keyword] [param] format
199+
// If we ever implement a keyword with no (or multiple) parameters, update this logic
200+
for (let i = 0; i < keywords.length; i += 2) {
201+
const thisKeyword = keywords[i];
196202
if (thisKeyword === undefined)
197203
throw new UnreachableCode();
198204

205+
// TEMPORARY: Remove when all files are linted
206+
if (!this._EXPAC_FILTER.some((e) => this._CURR_FILE.includes(e)))
207+
return;
208+
199209
if (!syncKewordsOrder.includes(thisKeyword)) {
200210
this.lintErrors.push({
201211
lineNumber: lineNumber,
@@ -205,29 +215,42 @@ class TimelineParserLint extends TimelineParser {
205215
return;
206216
}
207217

218+
const keywordParam = keywords[i + 1];
219+
if (keywordParam === undefined) {
220+
this.lintErrors.push({
221+
lineNumber: lineNumber,
222+
line: origLine,
223+
error: `Missing parameter for "${thisKeyword}" keyword`,
224+
});
225+
return;
226+
}
227+
228+
if (
229+
!isNaN(parseFloat(keywordParam)) &&
230+
keywordParam.endsWith('.0')
231+
) {
232+
this.lintErrors.push({
233+
lineNumber: lineNumber,
234+
line: origLine,
235+
error: `Unnecessary float "${keywordParam}" - use an integer instead.`,
236+
});
237+
// don't return; continue processing the line
238+
}
239+
208240
// check that `window` is in a [number],[number] format
209-
if (thisKeyword === 'window') {
210-
const windowKwIdx = keywords.indexOf('window');
211-
const windowArgs = keywords[windowKwIdx + 1];
212-
if (windowArgs === undefined) {
213-
this.lintErrors.push({
214-
lineNumber: lineNumber,
215-
line: origLine,
216-
error: `Missing parameter for 'window' keyword`,
217-
});
218-
return;
219-
}
220-
if (!/^\d+(\.\d)?,\d+(\.\d)?$/.test(windowArgs)) {
221-
this.lintErrors.push({
222-
lineNumber: lineNumber,
223-
line: origLine,
224-
error: `Invalid 'window' parameter "${windowArgs}": must be in [#],[#] format.`,
225-
});
226-
// don't return; continue processing the line
227-
}
241+
if (
242+
thisKeyword === 'window' &&
243+
!/^\d+(\.\d)?,\d+(\.\d)?$/.test(keywordParam)
244+
) {
245+
this.lintErrors.push({
246+
lineNumber: lineNumber,
247+
line: origLine,
248+
error: `Invalid 'window' parameter "${keywordParam}": must be in [#],[#] format.`,
249+
});
250+
// don't return; continue processing the line
228251
}
229252

230-
const nextKeyword = keywordList[i + 1];
253+
const nextKeyword = keywords[i + 2];
231254
if (nextKeyword === undefined)
232255
break;
233256

@@ -396,6 +419,7 @@ const testTimelineFiles = (timelineFiles: string[]): void => {
396419
timeline = new TimelineParserLint(
397420
timelineText,
398421
triggerSet.timelineTriggers ?? [],
422+
timelineFile, // TEMPORARY: Remove when all files are linted
399423
);
400424
});
401425
// This test loads an individual raidboss timeline and makes sure

ui/raidboss/data/03-hw/trial/sophia-ex.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ hideall "--sync--"
3030
# Intermission.
3131
# Divine Spark can be pushed and thus is not synced.
3232
# Gnostic Rant and Infusion are purely HP-based pushes.
33-
110.6 "Cloudy Heavens" Ability { id: "19BE", source: "Sophia" } window 110.6
33+
110.6 "Cloudy Heavens" Ability { id: "19BE", source: "Sophia" } window 110.6,0
3434
111.6 "--untargetable--"
3535
111.6 "--adds spawn--"
3636
120.9 "Horizontal Kenoma/Vertical Kenoma" Ability { id: ["19BB", "19BC"], source: "The First Demiurge" }

ui/raidboss/data/03-hw/trial/zurvan-ex.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ hideall "--sync--"
4141
95.3 "Metal Cutter" Ability { id: "1C70", source: "Zurvan" }
4242
102.4 "Wave Cannon (avoid)" Ability { id: "1C73", source: "Zurvan" }
4343

44-
108.5 "Metal Cutter" Ability { id: "1C70", source: "Zurvan" } jump 80.0
44+
108.5 "Metal Cutter" Ability { id: "1C70", source: "Zurvan" } jump 80
4545
113.6 "Metal Cutter"
4646
118.7 "Metal Cutter"
4747
123.8 "Metal Cutter"

ui/raidboss/data/05-shb/alliance/the_puppets_bunker.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ hideall "--sync--"
121121

122122
1103.7 "Maneuver: Long-Barreled Laser" Ability { id: "5212", source: "Light Artillery Unit" }
123123
1119.6 "Maneuver: Volt Array" Ability { id: "5211", source: "Light Artillery Unit" }
124-
1129.9 "Authorization: No Restrictions" Ability { id: "520E", source: "Light Artillery Unit" } window 50,50 jump 1036.0
124+
1129.9 "Authorization: No Restrictions" Ability { id: "520E", source: "Light Artillery Unit" } window 50,50 jump 1036
125125
1135.6 "Surface Missile Impact" #Ability { id: "520F", source: "Light Artillery Unit" }
126126
1137.6 "Homing Missile Impact" #Ability { id: "5210", source: "Light Artillery Unit" }
127127
1153.7 "Initiate Self-Destruct" #Ability { id: "5215", source: "Light Artillery Unit" }

ui/raidboss/data/05-shb/alliance/the_tower_at_paradigms_breach.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ hideall "--sync--"
344344
4780.7 "Cruelty" Ability { id: "6013", source: "Red Girl" }
345345

346346
# loop
347-
4788.8 "Generate: Barrier" Ability { id: "6005", source: "Red Girl" } window 100,100 jump 4581.0
347+
4788.8 "Generate: Barrier" Ability { id: "6005", source: "Red Girl" } window 100,100 jump 4581
348348
4798.9 "Point: Black" #Ability { id: "6020", source: "Black Lance" }
349349
4798.9 "Point: White" #Ability { id: "601F", source: "White Lance" }
350350
4805.0 "Generate: Barrier" #Ability { id: "6005", source: "Red Girl" }

ui/raidboss/data/05-shb/dungeon/heroes_gauntlet.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ hideall "--sync--"
3737
141.0 "Coward's Cunning" Ability { id: "4FD7", source: "Chicken Knife" }
3838
145.6 "Spectral Gust" Ability { id: "53CF", source: "Spectral Thief" }
3939

40-
148.8 "Papercutter" Ability { id: "4FD[12]", source: "Spectral Thief" } jump 69.0
40+
148.8 "Papercutter" Ability { id: "4FD[12]", source: "Spectral Thief" } jump 69
4141
163.0 "Spectral Dream"
4242
168.2 "Chicken Knife"
4343
175.3 "Shadowdash"

ui/raidboss/data/05-shb/eureka/bozjan_southern_front.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ hideall "--sync--"
358358

359359
# Loop!
360360
61100.7 "Ready x4" duration 6.1 #Ability { id: "5191", source: "Lyon The Beast King" }
361-
61110.7 "Obey" Ability { id: "517D", source: "Dawon" } window 90,90 jump 61012.0
361+
61110.7 "Obey" Ability { id: "517D", source: "Dawon" } window 90,90 jump 61012
362362
61112.8 "Swooping Frenzy"
363363
61115.6 "Frigid/Fervid Pulse"
364364
61118.0 "Swooping Frenzy"

ui/raidboss/data/05-shb/eureka/delubrum_reginae_savage.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ hideall "--sync--"
397397
# Probably a loop, but you shouldn't see this charge, let alone the previous one.
398398
6367.8 "Hot Charge 1" Ability { id: "5773", source: "Dahu" }
399399
6372.6 "Hot Charge 2?" Ability { id: "5773", source: "Dahu" }
400-
6374.4 "--sync--" StartsUsing { id: "5774", source: "Dahu" } window 100,100 jump 6228.0
400+
6374.4 "--sync--" StartsUsing { id: "5774", source: "Dahu" } window 100,100 jump 6228
401401
6379.4 "Firebreathe" Ability { id: "5774", source: "Dahu" }
402402
6398.6 "Reverberating Roar" #Ability { id: "576D", source: "Dahu" }
403403
6407.7 "Reverberating Roar" #Ability { id: "576D", source: "Dahu" }

ui/raidboss/data/05-shb/eureka/zadnor.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ hideall "--sync--"
426426
25824.2 "--lasers--" Ability { id: "5CBC", source: "The Diablo Armament" }
427427
25828.2 "--line stack--" Ability { id: "5CBE", source: "The Diablo Armament" }
428428

429-
25842.2 "Void Systems Overload" Ability { id: "6314", source: "The Diablo Armament" } window 100,100 jump 25805.0
429+
25842.2 "Void Systems Overload" Ability { id: "6314", source: "The Diablo Armament" } window 100,100 jump 25805
430430
25852.3 "Pillar Of Shamash" Ability { id: "5CB9", source: "The Diablo Armament" }
431431
25853.8 "Pillar Of Shamash" Ability { id: "5CBA", source: "The Diablo Armament" }
432432
25855.3 "Pillar Of Shamash" Ability { id: "5CBB", source: "The Diablo Armament" }

ui/raidboss/data/05-shb/raid/e11s.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,8 @@ hideall "--sync--"
171171
725.7 "Burnished Glory" Ability { id: "56A4", source: "Fatebreaker" }
172172

173173
728.2 "--center--" Ability { id: "5908", source: "Fatebreaker" } window 30,30
174-
737.2 "Cycle Of Faith" Ability { id: "568A", source: "Fatebreaker" } jump 900.0
175-
737.2 "--sync--" Ability { id: "569A", source: "Fatebreaker" } jump 800.0
174+
737.2 "Cycle Of Faith" Ability { id: "568A", source: "Fatebreaker" } jump 900
175+
737.2 "--sync--" Ability { id: "569A", source: "Fatebreaker" } jump 800
176176
737.3 "Elemental Break"
177177
739.8 "Sinsight/Sinsmite/Sinsmoke"
178178
741.7 "Burnt Strike"
@@ -193,8 +193,8 @@ hideall "--sync--"
193193
825.7 "Burnished Glory" Ability { id: "56A4", source: "Fatebreaker" }
194194

195195
828.2 "--center--" Ability { id: "5908", source: "Fatebreaker" } window 30,30
196-
837.2 "Cycle Of Faith" Ability { id: "5692", source: "Fatebreaker" } jump 700.0
197-
837.2 "--sync--" Ability { id: "568A", source: "Fatebreaker" } jump 900.0
196+
837.2 "Cycle Of Faith" Ability { id: "5692", source: "Fatebreaker" } jump 700
197+
837.2 "--sync--" Ability { id: "568A", source: "Fatebreaker" } jump 900
198198
837.3 "Elemental Break"
199199
839.8 "Sinsight/Sinsmite/Sinsmoke"
200200
841.7 "Burnt Strike"

ui/raidboss/data/05-shb/raid/e12n.txt

+11-11
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ hideall "--sync--"
2525
118.1 "Conflag Strike" Ability { id: "585D", source: "Eden's Promise" }
2626
128.7 "Ferostorm" Ability { id: "585E", source: "Eden's Promise" }
2727
140.1 "Maleficium" Ability { id: "5872", source: "Eden's Promise" }
28-
145.9 "--sync--" Ability { id: "585A", source: "Eden's Promise" } window 145.9
28+
145.9 "--sync--" Ability { id: "585A", source: "Eden's Promise" } window 145.9,0
2929
148.4 "--untargetable--"
3030

3131
# Intermission. Can be pushed, unknown threshold, maybe 70% HP?
@@ -57,8 +57,8 @@ hideall "--sync--"
5757

5858

5959
568.6 "Stock" Ability { id: "5860", source: "Eden's Promise" } window 15,30
60-
578.3 "Junction Shiva?" Ability { id: "5862", source: "Eden's Promise" } jump 700.0
61-
578.3 "Junction Titan?" Ability { id: "5863", source: "Eden's Promise" } jump 800.0
60+
578.3 "Junction Shiva?" Ability { id: "5862", source: "Eden's Promise" } jump 700
61+
578.3 "Junction Titan?" Ability { id: "5863", source: "Eden's Promise" } jump 800
6262
589.0 "Diamond Dust?"
6363
589.0 "Earthen Fury?"
6464
594.0 "Impact 1?"
@@ -93,8 +93,8 @@ hideall "--sync--"
9393
738.2 "--sync--" Ability { id: "5879", source: "Eden's Promise" }
9494
747.6 "Release" Ability { id: "5861", source: "Eden's Promise" }
9595

96-
756.6 "--sync--" Ability { id: "5879", source: "Eden's Promise" } jump 900.0
97-
761.5 "Stock?" Ability { id: "5860", source: "Eden's Promise" } jump 1000.0
96+
756.6 "--sync--" Ability { id: "5879", source: "Eden's Promise" } jump 900
97+
761.5 "Stock?" Ability { id: "5860", source: "Eden's Promise" } jump 1000
9898
766.2 "Cast?"
9999
770.2 "Formless Judgment?"
100100
776.9 "Cast?"
@@ -116,8 +116,8 @@ hideall "--sync--"
116116
836.9 "--sync--" Ability { id: "5879", source: "Eden's Promise" }
117117
846.3 "Release" Ability { id: "5861", source: "Eden's Promise" }
118118

119-
855.3 "--sync--" Ability { id: "5879", source: "Eden's Promise" } jump 900.0
120-
860.2 "Stock?" Ability { id: "5860", source: "Eden's Promise" } jump 1000.0
119+
855.3 "--sync--" Ability { id: "5879", source: "Eden's Promise" } jump 900
120+
860.2 "Stock?" Ability { id: "5860", source: "Eden's Promise" } jump 1000
121121
864.9 "Cast?"
122122
868.9 "Formless Judgment?"
123123
875.6 "Cast?"
@@ -131,8 +131,8 @@ hideall "--sync--"
131131
928.0 "Maleficium" Ability { id: "5872", source: "Eden's Promise" } window 15,15
132132

133133
940.9 "Stock" Ability { id: "5860", source: "Eden's Promise" }
134-
950.5 "Junction Shiva?" Ability { id: "5862", source: "Eden's Promise" } window 15,15 jump 700.0
135-
950.5 "Junction Titan?" Ability { id: "5863", source: "Eden's Promise" } window 15,15 jump 800.0
134+
950.5 "Junction Shiva?" Ability { id: "5862", source: "Eden's Promise" } window 15,15 jump 700
135+
950.5 "Junction Titan?" Ability { id: "5863", source: "Eden's Promise" } window 15,15 jump 800
136136
961.2 "Diamond Dust?"
137137
961.2 "Earthen Fury?"
138138
966.2 "Impact 1?"
@@ -148,8 +148,8 @@ hideall "--sync--"
148148
1020.9 "Release" Ability { id: "5861", source: "Eden's Promise" }
149149

150150
1034.8 "Stock" Ability { id: "5860", source: "Eden's Promise" }
151-
1044.4 "Junction Shiva?" Ability { id: "5862", source: "Eden's Promise" } jump 700.0
152-
1044.4 "Junction Titan?" Ability { id: "5863", source: "Eden's Promise" } jump 800.0
151+
1044.4 "Junction Shiva?" Ability { id: "5862", source: "Eden's Promise" } jump 700
152+
1044.4 "Junction Titan?" Ability { id: "5863", source: "Eden's Promise" } jump 800
153153
1055.1 "Diamond Dust?"
154154
1055.1 "Earthen Fury?"
155155
1060.1 "Impact 1?"

ui/raidboss/data/05-shb/raid/e1n.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ hideall "Vice And Virtue"
7979
476.9 "Eden's Flare" Ability { id: "3D97", source: "Eden Prime" }
8080
488.4 "Eden's Gravity" Ability { id: "3D94", source: "Eden Prime" }
8181

82-
502.0 "Vice And Virtue" Ability { id: "44E4", source: "Eden Prime" } window 100,100 jump 360.0
82+
502.0 "Vice And Virtue" Ability { id: "44E4", source: "Eden Prime" } window 100,100 jump 360
8383
502.7 "Vice Of Vanity"
8484
512.5 "Spear Of Paradise"
8585
514.0 "Heavensunder"

ui/raidboss/data/05-shb/raid/e1s.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,4 @@ hideall "--sync--"
8787

8888

8989
### Enrage
90-
900.0 "Fragor Maximus (Enrage)" StartsUsing { id: "45E4", source: "Eden Prime" } duration 10.0 window 500,0
90+
900.0 "Fragor Maximus (Enrage)" StartsUsing { id: "45E4", source: "Eden Prime" } duration 10 window 500,0

ui/raidboss/data/05-shb/raid/e5n.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ hideall "--sync--"
6262
382.0 "Volt Strike" Ability { id: "4CF2", source: "Ramuh" }
6363
388.5 "Gallop" Ability { id: "4B96", source: "Will Of Ixion" }
6464
389.1 "Volt Strike" Ability { id: "4CF2", source: "Ramuh" }
65-
399.5 "Crippling Blow" Ability { id: "4BA3", source: "Ramuh" } window 30,30 jump 272.0
65+
399.5 "Crippling Blow" Ability { id: "4BA3", source: "Ramuh" } window 30,30 jump 272
6666

6767
412.7 "Stratospear Summons"
6868
417.6 "Impact"

ui/raidboss/data/05-shb/raid/e7n.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ hideall "--sync--"
8989
667.6 "False Twilight" Ability { id: "4C59", source: "The Idol Of Darkness" }
9090
667.7 "Light's Course" # Ability { id: "4C40", source: "Unforgiven Idolatry" }
9191
671.6 "Stygian Sword" Ability { id: "4C55", source: "The Idol Of Darkness" } window 30,30
92-
676.6 "Silver Sledge" Ability { id: "4C54", source: "The Idol Of Darkness" } jump 541.0
92+
676.6 "Silver Sledge" Ability { id: "4C54", source: "The Idol Of Darkness" } jump 541
9393

9494
685.6 "Unjoined Aspect"
9595
690.8 "Betwixt Worlds"

ui/raidboss/data/05-shb/trial/wol-ex.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ hideall "Limit Break"
108108
# DRK/BRD
109109
519.6 "--sync--" StartsUsing { id: "4F3[456]", source: "Warrior Of Light" } window 5,5 jump 2519.6
110110
522.6 "Limit -> DRK/BRD" #Ability { id: "4F3[456]", source: "Warrior Of Light" }
111-
534.0 "--sync--" StartsUsing { id: "4F43", source: "Warrior Of Light" } window 40,40 jump 2534.0
111+
534.0 "--sync--" StartsUsing { id: "4F43", source: "Warrior Of Light" } window 40,40 jump 2534
112112

113113
# NIN
114114
519.6 "--sync--" StartsUsing { id: "4EF[56]", source: "Warrior Of Light" } window 40,40 jump 3519.6

ui/raidboss/data/06-ew/dungeon/alzadaals_legacy.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ hideall "--sync--"
1515
# Undersea Entrance will be sealed off
1616
0.0 "--sync--" SystemLogMessage { id: "7DC", param1: "103E" } window 0,1
1717
11.0 "Big Wave" Ability { id: "6F60", source: "Ambujam" } window 11,5
18-
20.8 "Tentacle Dig" Ability { id: "6F55", source: "Ambujam" } window 20.8
18+
20.8 "Tentacle Dig" Ability { id: "6F55", source: "Ambujam" } window 20.8,10
1919
33.0 "--sync--" Ability { id: "6F5B", source: "Scarlet Tentacle" }
2020
33.4 "Toxin Shower" Ability { id: "6F5C", source: "Ambujam" }
2121
39.2 "--sync--" Ability { id: "6F56", source: "Ambujam" } window 39.2,10

ui/raidboss/data/06-ew/dungeon/mount_rokkon.txt

+6-6
Original file line numberDiff line numberDiff line change
@@ -194,19 +194,19 @@ hideall "--sync--"
194194

195195
#cactbot-timeline-lint-disable-sync-order
196196
# => path 01
197-
2169.0 "--sync--" StartsUsing { id: "85A8", source: "Moko the Restless" } window 50,50 jump 2269.0
197+
2169.0 "--sync--" StartsUsing { id: "85A8", source: "Moko the Restless" } window 50,50 jump 2269
198198
2172.0 "Untempered Sword?" #Ability { id: "85A8", source: "Moko the Restless" }
199199

200200
# => path 02
201201
2170.5 "--sync--" StartsUsing { id: "85AB", source: "Moko the Restless" } window 50,50 jump 2570.5
202202
2173.5 "Moonless Night?" #Ability { id: "85AB", source: "Moko the Restless" }
203203

204204
# => path 03
205-
2169.0 "--sync--" StartsUsing { id: "85A1", source: "Moko the Restless" } window 50,50 jump 2869.0
205+
2169.0 "--sync--" StartsUsing { id: "85A1", source: "Moko the Restless" } window 50,50 jump 2869
206206
2172.0 "Tengu-yobi?" #Ability { id: "85A1", source: "Moko the Restless" }
207207

208208
# => path 04
209-
2169.0 "--sync--" StartsUsing { id: "85A5", source: "Moko the Restless" } window 50,50 jump 3169.0
209+
2169.0 "--sync--" StartsUsing { id: "85A5", source: "Moko the Restless" } window 50,50 jump 3169
210210
2172.0 "Spiritspark?" #Ability { id: "85A5", source: "Moko the Restless" }
211211
#cactbot-timeline-lint-enable-sync-order
212212

@@ -868,19 +868,19 @@ hideall "--sync--"
868868
#cactbot-timeline-lint-disable-sync-order
869869
# -> path 08
870870
7104.0 "--sync--" StartsUsing { id: "83EE", source: "Feral Thrall" }
871-
7110.0 "Rush?" Ability { id: "83EE", source: "Feral Thrall" } window 30,30 jump 7210.0
871+
7110.0 "Rush?" Ability { id: "83EE", source: "Feral Thrall" } window 30,30 jump 7210
872872

873873
# -> path 09
874874
7093.9 "--sync--" StartsUsing { id: "83E9", source: "Shishio" } window 30,30 jump 7293.9
875875
7098.9 "Focused Tremor?" #Ability { id: "83E9", source: "Shishio" }
876876

877877
# -> path 10
878-
7097.0 "--sync--" StartsUsing { id: "83F0", source: "Devilish Thrall" } window 30,30 jump 7397.0
878+
7097.0 "--sync--" StartsUsing { id: "83F0", source: "Devilish Thrall" } window 30,30 jump 7397
879879
7105.0 "Left Swipe?" #Ability { id: "83F1", source: "Devilish Thrall" }
880880
7105.0 "Right Swipe?" #Ability { id: "83F0", source: "Devilish Thrall" }
881881

882882
# -> path 11
883-
7099.0 "--sync--" StartsUsing { id: "872B", source: "Haunting Thrall" } window 30,30 jump 7599.0
883+
7099.0 "--sync--" StartsUsing { id: "872B", source: "Haunting Thrall" } window 30,30 jump 7599
884884
7103.0 "Reisho?" #Ability { id: "872B", source: "Haunting Thrall" }
885885
#cactbot-timeline-lint-enable-sync-order
886886

ui/raidboss/data/06-ew/dungeon/the_aitiascope.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ hideall "--sync--"
4747
1218.8 "Aglaea Shot 1" Ability { id: "6445", source: "Livia the Undeterred" }
4848
1229.0 "Aglaea Shot 2" Ability { id: "6447", source: "Aethershot" }
4949

50-
1240.0 "Odi et Amo" Ability { id: "644B", source: "Livia the Undeterred" } window 50,50 jump 1079.0
50+
1240.0 "Odi et Amo" Ability { id: "644B", source: "Livia the Undeterred" } window 50,50 jump 1079
5151
1244.9 "Ignis Amoris" #Ability { id: "644C", source: "Livia the Undeterred" }
5252
1250.1 "Ignis Odi" #Ability { id: "644D", source: "Livia the Undeterred" }
5353
1255.4 "Disparagement" #Ability { id: "644A", source: "Livia the Undeterred" }

ui/raidboss/data/06-ew/dungeon/the_lunar_subterrane.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ hideall "--sync--"
123123
2315.1 "Pound Sand" Ability { id: "868B", source: "Damcyan Antlion" }
124124
2324.2 "Sandblast" Ability { id: "87FD", source: "Damcyan Antlion" }
125125

126-
2330.3 "--north--" Ability { id: "8808", source: "Damcyan Antlion" } window 50,50 forcejump 2270.0
126+
2330.3 "--north--" Ability { id: "8808", source: "Damcyan Antlion" } window 50,50 forcejump 2270
127127

128128

129129
# ALL ENCOUNTER ABILITIES

0 commit comments

Comments
 (0)