-
Notifications
You must be signed in to change notification settings - Fork 383
/
Copy paththe_sildihn_subterrane.ts
1230 lines (1214 loc) · 42.8 KB
/
the_sildihn_subterrane.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
import Outputs from '../../../../../resources/outputs';
import { Responses } from '../../../../../resources/responses';
import ZoneId from '../../../../../resources/zone_id';
import { RaidbossData } from '../../../../../types/data';
import { TriggerSet } from '../../../../../types/trigger';
export type CatapultMech =
| 'standOnBlue'
| 'knockback'
| 'launch'
| 'charge'
| 'gigantomill'
| 'launchOrSwing'
| 'boulders'
| 'loopStart';
export interface Data extends RaidbossData {
catapultCount: number;
catapultMechs: CatapultMech[];
barrelActive: boolean;
}
// TODO: path 10 Gladiator static visage safe quadrant
// TODO: path 11 Gladiator rotating visage safe quadrant
// TODO: map effects for Geryon Intake / Boulder / Suddenly Sewage locations/directions
// TODO: lots of missing stuff for Shadowcaster and Thorne Knight
const leftDoorYesPump: CatapultMech[] = [
'standOnBlue',
'standOnBlue',
'knockback',
'launch',
'loopStart',
'charge',
'gigantomill',
'knockback',
'launchOrSwing',
];
const leftDoorNoPump: CatapultMech[] = [
'standOnBlue',
'standOnBlue',
'launch',
'loopStart',
'charge',
'launchOrSwing',
];
const middleDoorLeftHandle: CatapultMech[] = [
'standOnBlue',
'standOnBlue',
'knockback',
'launch',
'loopStart',
'gigantomill',
'charge',
'knockback',
'launchOrSwing',
];
const middleDoorRightHandle: CatapultMech[] = [
'standOnBlue',
'standOnBlue',
'boulders',
'launch',
'loopStart',
'charge',
'gigantomill',
'boulders',
'launchOrSwing',
];
const rightDoorYesCeruleum: CatapultMech[] = [
'standOnBlue',
'standOnBlue',
'launch',
'loopStart',
'gigantomill',
'charge',
'launchOrSwing',
];
const rightDoorNoCeruleum: CatapultMech[] = [
'standOnBlue',
'standOnBlue',
'launch',
'loopStart',
'charge',
'launchOrSwing',
];
const triggerSet: TriggerSet<Data> = {
id: 'TheSildihnSubterrane',
zoneId: ZoneId.TheSildihnSubterrane,
timelineFile: 'the_sildihn_subterrane.txt',
initData: () => {
return {
catapultCount: 0,
catapultMechs: ['standOnBlue', 'standOnBlue'],
barrelActive: false,
};
},
timelineTriggers: [
{
id: 'Sildihn Geryon Intake',
regex: /Intake/,
beforeSeconds: 5,
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Knockback onto Blue',
de: 'Rückstoß auf Blau',
fr: 'Poussée sur le bleu',
ja: '青にノックバック',
cn: '击退至蓝色',
ko: '파란색쪽으로 넉백',
},
},
},
],
triggers: [
{
id: 'Sildihn Geryon Seal Left Mechs',
type: 'SystemLogMessage',
// The Silt Pump will be sealed off
netRegex: { id: '7DC', param1: '1068', capture: false },
// May be overwritten by Runaway Sludge below.
run: (data) => data.catapultMechs = leftDoorYesPump,
},
{
id: 'Sildihn Geryon Runaway Sludge Mechs',
type: 'StartsUsing',
netRegex: { id: '74D6', source: 'Geryon the Steer', capture: false },
suppressSeconds: 9999,
run: (data) => data.catapultMechs = leftDoorNoPump,
},
{
id: 'Sildihn Geryon Intake Mechs',
type: 'MapEffect',
netRegex: { flags: '00020001', location: '09', capture: false },
suppressSeconds: 9999,
run: (data) => data.catapultMechs = middleDoorLeftHandle,
},
{
id: 'Sildihn Geryon Boulder Mechs',
type: 'MapEffect',
netRegex: { flags: '20000004', location: '0A', capture: false },
suppressSeconds: 9999,
run: (data) => data.catapultMechs = middleDoorRightHandle,
},
{
id: 'Sildihn Geryon Seal Right Mechs',
type: 'SystemLogMessage',
// The Settling Basin will be sealed off
netRegex: { id: '7DC', param1: '106D', capture: false },
// May be overwritten by Suddenly Sewage below.
run: (data) => data.catapultMechs = rightDoorNoCeruleum,
},
{
id: 'Sildihn Geryon Suddenly Sewage Mechs',
type: 'Ability',
netRegex: { id: '74D8', source: 'Geryon the Steer', capture: false },
suppressSeconds: 9999,
run: (data) => data.catapultMechs = rightDoorYesCeruleum,
},
{
id: 'Sildihn Geryon Colossal Strike',
type: 'StartsUsing',
netRegex: { id: '74CF', source: 'Geryon the Steer' },
response: Responses.tankBuster(),
},
{
id: 'Sildihn Geryon Subterranean Shudder',
type: 'StartsUsing',
netRegex: { id: '74D2', source: 'Geryon the Steer', capture: false },
response: Responses.aoe(),
},
{
id: 'Sildihn Geryon Exploding Catapult',
type: 'StartsUsing',
netRegex: { id: '74C7', source: 'Geryon the Steer', capture: false },
response: Responses.aoe(),
run: (data) => data.barrelActive = true,
},
{
id: 'Sildihn Geryon Exploding Catapult Cleanup',
type: 'StartsUsing',
netRegex: { id: '74C7', source: 'Geryon the Steer', capture: false },
delaySeconds: 17,
run: (data) => data.barrelActive = false,
},
{
id: 'Sildihn Geryon Exploding Catapult Barrels',
type: 'StartsUsing',
netRegex: { id: '74C7', source: 'Geryon the Steer', capture: false },
delaySeconds: 6.5,
infoText: (data, _matches, output) => {
let mech = data.catapultMechs[data.catapultCount];
// loopStart is a fake entry to know where to loop back to
if (mech === 'loopStart') {
data.catapultCount++;
mech = data.catapultMechs[data.catapultCount];
}
// Increment for next time, unless something has gone awry.
if (data.catapultCount >= 0)
data.catapultCount++;
// If we run off the end of mechanics, loop back to the "loopStart" entry for next time.
if (data.catapultCount >= data.catapultMechs.length)
data.catapultCount = data.catapultMechs.indexOf('loopStart');
if (mech === undefined)
return;
// These are all handled elsewhere in other triggers.
if (
mech === 'launch' || mech === 'charge' || mech === 'launchOrSwing' || mech === 'knockback'
)
return;
if (mech === 'standOnBlue' || mech === 'gigantomill')
return output.standOnBlue!();
if (mech === 'boulders')
return output.avoidBoulders!();
},
outputStrings: {
standOnBlue: {
en: 'Stand on Blue',
de: 'Bei Blau stehen',
fr: 'Restez sur le bleu',
ja: '青へ',
cn: '站蓝色',
ko: '파란색쪽으로',
},
avoidBoulders: {
en: 'Stand on Blue (avoid boulders)',
de: 'Bei Blau stehen (vermeide Steine)',
fr: 'Restez sur le bleu (évitez les rochers)',
ja: '青へ (岩回避)',
cn: '站蓝色 (躲避岩石)',
ko: '파란색쪽으로 (바위 피하기)',
},
},
},
{
id: 'Sildihn Geryon Shockwave',
type: 'StartsUsing',
netRegex: { id: '74CE', source: 'Geryon the Steer', capture: false },
response: Responses.knockback(),
},
{
id: 'Sildihn Geryon Runaway Runoff',
type: 'StartsUsing',
netRegex: { id: '74D7', source: 'Geryon the Steer', capture: false },
delaySeconds: 3, // 8 second cast
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Knockback onto Blue',
de: 'Rückstoß zu Blau',
fr: 'Poussée sur le bleu',
ja: '青へノックバック',
cn: '击退至蓝色',
ko: '파란색쪽으로 넉백',
},
},
},
{
id: 'Sildihn Geryon Colossal Swing',
type: 'StartsUsing',
netRegex: { id: '74D1', source: 'Geryon the Steer', capture: false },
alertText: (data, _matches, output) => {
return data.barrelActive ? output.getBehindOnBlue!() : output.getBehind!();
},
outputStrings: {
getBehind: Outputs.getBehind,
getBehindOnBlue: {
en: 'Get Behind on Blue',
de: 'Geh hinter Blau',
fr: 'Allez derrière le bleu',
ja: 'ボスの後ろの青へ',
cn: 'BOSS后蓝色',
ko: '보스 뒤 파란색쪽으로',
},
},
},
{
id: 'Sildihn Geryon Colossal Launch',
type: 'StartsUsing',
netRegex: { id: '74C8', source: 'Geryon the Steer', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Stand on Red',
de: 'Bei Rot stehen',
fr: 'Restez sur le rouge',
ja: '赤へ',
cn: '站红色',
ko: '빨간색쪽으로',
},
},
},
{
id: 'Sildihn Geryon Colossal Charge Left',
type: 'StartsUsing',
netRegex: { id: '74CD', source: 'Geryon the Steer', capture: false },
infoText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Stand on Right Blue',
de: 'Steh bei dem rechten Blau',
fr: 'Restez sur le bleu à droite',
ja: '右の青へ',
cn: '站右侧蓝色',
ko: '오른쪽 파란색쪽으로',
},
},
},
{
id: 'Sildihn Geryon Colossal Charge Right',
type: 'StartsUsing',
netRegex: { id: '74CC', source: 'Geryon the Steer', capture: false },
infoText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Stand on Left Blue',
de: 'Steh bei dem linken Blau',
fr: 'Restez sur le bleu à gauche',
ja: '左の青へ',
cn: '站左侧蓝色',
ko: '왼쪽 파란색쪽으로',
},
},
},
{
id: 'Sildihn Geryon Gigantomill Left',
type: 'StartsUsing',
netRegex: { id: '74CA', source: 'Geryon the Steer', capture: false },
response: Responses.goLeft('info'),
},
{
id: 'Sildihn Geryon Gigantomill Right',
type: 'StartsUsing',
netRegex: { id: '74C9', source: 'Geryon the Steer', capture: false },
response: Responses.goRight('info'),
},
{
id: 'Sildihn Silkie Total Wash',
type: 'StartsUsing',
netRegex: { id: '772C', source: 'Silkie', capture: false },
response: Responses.aoe(),
},
{
id: 'Sildihn Silkie Squeaky Right',
type: 'StartsUsing',
netRegex: { id: '772D', source: 'Silkie', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Back Left',
de: 'Nach hinten links',
fr: 'Arrière Gauche',
ja: '後ろ左',
cn: '左后',
ko: '뒤 왼쪽',
},
},
},
{
id: 'Sildihn Silkie Squeaky Left',
type: 'StartsUsing',
netRegex: { id: '772E', source: 'Silkie', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Back Right',
de: 'Nach hinten rechts',
fr: 'Arrière Droite',
ja: '後ろ右',
cn: '右后',
ko: '뒤 오른쪽',
},
},
},
{
id: 'Sildihn Silkie Carpet Buster',
type: 'StartsUsing',
netRegex: { id: '772B', source: 'Silkie' },
response: Responses.tankBuster(),
},
{
id: 'Sildihn Silkie Dust Bluster',
type: 'StartsUsing',
netRegex: { id: '7744', source: 'Silkie', capture: false },
response: Responses.knockback(),
},
{
id: 'Sildihn Silkie Wash Out',
type: 'StartsUsing',
netRegex: { id: '7745', source: 'Silkie', capture: false },
delaySeconds: 3, // 8 second cast
response: Responses.knockback(),
},
{
id: 'Sildihn Silkie Chilling Duster',
type: 'StartsUsing',
netRegex: { id: '7738', source: 'Silkie', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Intercards',
de: 'Interkardinal',
fr: 'Intercardinal',
ja: '斜め',
cn: '斜角',
ko: '대각선 쪽으로',
},
},
},
{
id: 'Sildihn Silkie Chilling Duster Slippery',
type: 'StartsUsing',
netRegex: { id: '773B', source: 'Silkie', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Follow => Intercards',
de: 'Folgen => Interkardinal',
fr: 'Suivez -> Intercardinal',
ja: '近づく => 斜め',
cn: '跟随 => 斜角',
ko: '따라가기 => 대각선 쪽으로',
},
},
},
{
id: 'Sildihn Silkie Chilling Duster Puffs',
type: 'StartsUsing',
netRegex: { id: '773F', source: 'Silkie', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
// TODO: how do you word this???
// "Do the mechanic <se.6>"
en: 'Avoid Crosses from Silkie and Puffs',
de: 'Weiche den "+" von Silkie und den Puscheln aus',
fr: 'Évitez les croix de Silkie et des pompons',
ja: 'ボスとたまの斜め',
cn: '躲避交叉攻击',
ko: '보스와 구슬의 십자방향 피하기',
},
},
},
{
id: 'Sildihn Silkie Bracing Duster',
type: 'StartsUsing',
netRegex: { id: '7739', source: 'Silkie', capture: false },
response: Responses.getUnder(),
},
{
id: 'Sildihn Silkie Bracing Duster Slippery',
type: 'StartsUsing',
// No source here as sometimes the mob name is stale (!!) during the bridge section of the timeline.
netRegex: { id: '773C', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Follow => Under',
de: 'Folgen => Unter Ihn',
fr: 'Suivez -> Dessous',
ja: '近づく => 下へ',
cn: '跟随 => 脚下',
ko: '따라가기 => 밑으로',
},
},
},
{
id: 'Sildihn Gladiator Flash of Steel',
type: 'StartsUsing',
netRegex: { id: '7656', source: 'Gladiator of Sil\'dih', capture: false },
response: Responses.aoe(),
},
{
id: 'Sildihn Gladiator Sculptor\'s Passion',
type: 'StartsUsing',
netRegex: { id: '764A', source: 'Gladiator of Sil\'dih', capture: false },
response: Responses.getBehind(),
},
{
id: 'Sildihn Gladiator Mighty Smite',
type: 'StartsUsing',
netRegex: { id: '7657', source: 'Gladiator of Sil\'dih' },
response: Responses.tankBuster(),
},
{
id: 'Sildihn Gladiator Shattering Steel',
type: 'StartsUsing',
netRegex: { id: '764B', source: 'Gladiator of Sil\'dih', capture: false },
// Cast is 12s, Liftoff debuff is 5s
delaySeconds: 7,
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Get in big wind circle',
de: 'Geh in den großen Wind-Kreis',
fr: 'Allez dans le grand cercle de vent',
ja: '風ゆかの中へ',
cn: '站进大风圈',
ko: '큰 바람장판 안으로',
},
},
},
{
id: 'Sildihn Gladiator Ring of Might 1',
type: 'StartsUsing',
netRegex: { id: '763F', source: 'Gladiator of Sil\'dih', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Outside Inner Ring (1)',
de: 'Außerhalb des inneren Ringes (1)',
fr: 'À l\'extérieur de l\'anneau intérieur (1)',
ja: 'リングチャージ1',
cn: '出内圈 (1)',
ko: '안쪽 고리 밖으로 (1)',
},
},
},
{
id: 'Sildihn Gladiator Ring of Might 2',
type: 'StartsUsing',
netRegex: { id: '7640', source: 'Gladiator of Sil\'dih', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Outside Middle Ring (2)',
de: 'Außerhalb des mittleren Ringes (2)',
fr: 'À l\'extérieur de l\'anneau central (2)',
ja: 'リングチャージ2',
cn: '出中圈 (2)',
ko: '중간 고리 밖으로 (2)',
},
},
},
{
id: 'Sildihn Gladiator Ring of Might 3',
type: 'StartsUsing',
netRegex: { id: '7641', source: 'Gladiator of Sil\'dih', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Outside Outer Ring (3)',
de: 'Außerhalb des äußeren Ringes (3)',
fr: 'À l\'extérieur de l\'anneau extérieur (3)',
ja: 'リングチャージ3',
cn: '出外圈 (3)',
ko: '바깥쪽 고리 밖으로 (3)',
},
},
},
{
id: 'Sildihn Gladiator Ring of Might Followup',
type: 'Ability',
netRegex: { id: ['763F', '7640', '7641'], source: 'Gladiator of Sil\'dih', capture: false },
suppressSeconds: 1,
response: Responses.getIn('info'),
},
{
id: 'Sildihn Gladiator Rush of Might 1',
type: 'StartsUsing',
netRegex: { id: '763A', source: 'Gladiator of Sil\'dih', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Behind Close Mark (1)',
de: 'Hinter der nächsten Markierung (1)',
fr: 'Derrière la marque de fermeture (1)',
ja: '1番目',
cn: '刻度 (1)',
ko: '첫번째 선 뒤 (1)',
},
},
},
{
id: 'Sildihn Gladiator Rush of Might 2',
type: 'StartsUsing',
netRegex: { id: '763B', source: 'Gladiator of Sil\'dih', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Behind Middle Mark (2)',
de: 'Hinter der mittleren Markierung (2)',
fr: 'Derrière la marque centrale (2)',
ja: '2番目',
cn: '刻度 (2)',
ko: '두번째 선 뒤 (2)',
},
},
},
{
id: 'Sildihn Gladiator Rush of Might 3',
type: 'StartsUsing',
netRegex: { id: '763C', source: 'Gladiator of Sil\'dih', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Behind Far Mark (3)',
de: 'Hinter der entfernten Markierung (3)',
fr: 'Derrière la marque éloignée (3)',
ja: '3番目',
cn: '刻度 (3)',
ko: '세번째 선 뒤 (3)',
},
},
},
{
id: 'Sildihn Gladiator Rush of Might Followup',
type: 'Ability',
netRegex: { id: '763D', source: 'Gladiator of Sil\'dih', capture: false },
suppressSeconds: 1,
infoText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Move Through',
de: 'Durchlaufen',
fr: 'Passez à travers',
ja: 'ボスをまたいで移動',
cn: '穿穿穿',
ko: '보스 통과하기',
},
},
},
{
id: 'Sildihn Shadowcaster Show of Strength',
type: 'StartsUsing',
netRegex: { id: '74AE', source: 'Shadowcaster Zeless Gah', capture: false },
response: Responses.aoe(),
},
{
id: 'Sildihn Shadowcaster Firesteel Fracture',
type: 'StartsUsing',
netRegex: { id: '74AC', source: 'Shadowcaster Zeless Gah' },
response: Responses.tankBuster(),
},
{
id: 'Sildihn Shadowcaster Infern Gale',
type: 'Ability',
netRegex: { id: '74A2', source: 'Shadowcaster Zeless Gah', capture: false },
// 6.4s between 74A2 and 74A3 knockback (no cast)
delaySeconds: 1.4,
response: Responses.knockback(),
},
{
id: 'Sildihn Shadowcaster Infern Wellw',
type: 'Ability',
netRegex: { id: '74A7', source: 'Shadowcaster Zeless Gah', capture: false },
// 10s between 74A7 and 74AA draw-in (no cast)
delaySeconds: 5,
response: Responses.drawIn(),
},
{
id: 'Sildihn Thorne Cogwheel',
type: 'StartsUsing',
netRegex: { id: '70EB', source: 'Thorne Knight', capture: false },
response: Responses.aoe(),
},
{
id: 'Sildihn Thorne Blistering Blow',
type: 'StartsUsing',
netRegex: { id: '70EA', source: 'Thorne Knight' },
response: Responses.tankBuster(),
},
{
id: 'Sildihn Fore Honor',
type: 'StartsUsing',
netRegex: { id: '70EC', source: 'Thorne Knight', capture: false },
response: Responses.getBehind(),
},
{
id: 'Sildihn Slashburn Reversed',
type: 'HeadMarker',
netRegex: { id: '016B', target: 'Thorne Knight', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Reversed Slashburn',
de: 'Umgekehrter Brandschlitzer',
fr: 'Renversement',
ja: 'ゆか反転',
cn: '翻转',
ko: '장판 반전',
},
},
},
],
timelineReplace: [
{
locale: 'en',
replaceText: {
'Colossal Launch / Colossal Swing': 'Colossal Launch/Swing',
'Squeaky Left/Squeaky Right': 'Squeaky Left/Right',
'Bracing Suds / Chilling Suds': 'Bracing/Chilling Suds',
'Bracing Duster / Chilling Duster': 'Bracing/Chilling Duster',
},
},
{
'locale': 'de',
'replaceSync': {
'Amalj\'aa Artillery Carriage': 'Amalj\'aa-Artillerie',
'Antique Boulder': 'locker(?:e|er|es|en) Felsen',
'Arcane Font': 'arkan(?:e|er|es|en) Tafel',
'Ball of Fire': 'Feuerball',
'Cold Arms\' Quietus': 'Haus der kalten Waffen',
'Eastern Ewer': 'Waschkrug',
'Eternal Ease': 'Ewiger Einklang',
'Geryon the Steer': 'Geryon (?:der|die|das) Gewaltsam(?:e|er|es|en)',
'Gladiator of Sil\'dih': 'Gladiator von Sil\'dih',
'Hateful Visage': 'Hassendes Haupt',
'Infern Brand': 'Infernales Mal',
'Magicked Puppet': 'magisch(?:e|er|es|en) Marionette',
'Powder Keg': 'Pulverfass',
'Regret': 'Bedauern',
'Shadowcaster Zeless Gah': 'Schattenwirker Zeless Gah',
'Silken Puff': 'weich(?:e|er|es|en) Puschel',
'Silkie': 'Silkie',
'The Cornice Of Favor': 'Kranz der Gunst',
'The Forgotten Forecourt': 'Vergessener Vorhof',
'The Settling Basin': 'Absatzbecken',
'The Sifting Site': 'Siebstätte',
'The Silt Pump': 'Schlickpumpe',
'Thorne Knight': 'Ritter der Thorne',
},
'replaceText': {
'--draw in--': '--Ranziehen',
'\\(in\\)': '(Rein)',
'\\(out\\)': '(Raus)',
'\\(far\\)': '(Weit weg)',
'\\(near\\)': '(Nah ran)',
'\\(mid\\)': '(Mitte)',
'Amalj\'aa Artillery': 'Amalj\'aa-Artillerie',
'Biting Wind': 'Heftiger Wind',
'Blaze of Glory': 'Heilige Kreuzflamme',
'Blazing Benifice': 'Heiliger Feuereifer',
'Blistering Blow': 'Schwelender Schlag',
'Bracing Duster': 'Spritziger Wedel',
'Bracing Suds': 'Spritziger Schaum',
'Brim Over': 'Hundert Flüsse',
'(?<!Slash)Burn': 'Verbrennung',
'Carpet Beater': 'Teppichklopfer',
'Cast Shadow': 'Schattenfall',
'Chilling Duster': 'Kalter Wedel',
'Chilling Suds': 'Kalter Schaum',
'Cogwheel': 'Glutwind',
'Colossal Charge': 'Kolossale Rage',
'Colossal Launch': 'Kolossaler Schuss',
'Colossal Slam': 'Kolossaler Schlag',
'Colossal Strike': 'Kolossaler Streich',
'Colossal Swing': 'Kolossaler Schwung',
'Cryptic Portal': 'Kryptisches Portal',
'Deep Clean': 'Großes Reinemachen',
'Dust Bluster': 'Staubbläser',
'Eastern Ewers': 'Waschkrug',
'Exploding Catapult': 'Berstendes Katapult',
'Explosion': 'Explosion',
'Firesteel Fracture': 'Feuerstahl-Brecher',
'Flash of Steel': 'Blitzender Stahl',
'Fore Honor': 'Vorfeuer',
'Fresh Puff': 'Frischer Puschel',
'Gigantomill': 'Titanomühle',
'Gladiator of Sil\'dih': 'Gladiator von Sil\'dih',
'Golden Flame': 'Goldene Flamme',
'Hateful Visage': 'Hassendes Haupt',
'Infern Brand': 'Infernales Mal',
'Infern Gale': 'Infernaler Wind',
'Infern Ward': 'Infernale Wehr',
'Infern Well': 'Infernaler Brunnen',
'Intake': 'Einsaugen',
'Landing': 'Schnelle Landung',
'Magic Cannon': 'Magische Kanone',
'Mighty Smite': 'Mächtiger Streich',
'Puff and Tumble': 'Puschelputz',
'Pure Fire': 'Reines Feuer',
'Rack and Ruin': 'Düster Gram',
'Ring of Might': 'Rausch der Macht',
'Rinse': 'Spülung',
'Rolling Boulder': 'Rollender Fels',
'Runaway Runoff': 'Entfesselter Guss',
'Runaway Sludge': 'Entfesselter Schlamm',
'Rush of Might': 'Rausch der Macht',
'Sculptor\'s Passion': 'Bildners Hohn',
'Shattering Steel': 'Schmetternder Stahl',
'Shockwave': 'Schockwelle',
'Show of Strength': 'Kraftakt',
'Signal Flare': 'Signalfeuer',
'Silver Flame': 'Silberne Flamme',
'Slashburn': 'Brandschlitzer',
'Slippery Soap': 'Schmierige Seife',
'Soap\'s Up': 'Einseifen',
'Soaping Spree': 'Seifentaumel',
'Spot Remover': 'Fleckweg',
'Spring to Life': 'Zum Leben erwacht',
'Squeaky Left': 'Blitzelinks',
'Squeaky Right': 'Blitzerechts',
'Subterranean Shudder': 'Schauder der Unterstadt',
'Suddenly Sewage': 'Entfesseltes Abwasser',
'Sundered Remains': 'Tote Trümmer',
'Total Wash': 'Vollwäsche',
'Wash Out': 'Abwasch',
'Wrath of Ruin': 'Düster Zorn',
},
},
{
'locale': 'fr',
'missingTranslations': true,
'replaceSync': {
'Amalj\'aa Artillery Carriage': 'canon de campagne amalj\'aa',
'Antique Boulder': 'roche instable',
'Arcane Font': 'sphère arcanique',
'Ball of Fire': 'Boule de flammes',
'Cold Arms\' Quietus': 'Entrepôt des armes sacrées',
'Eastern Ewer': 'cruche orientale',
'Eternal Ease': 'Tombe du héros trépassé',
'Geryon the Steer': 'Géryon le Dominateur',
'Gladiator of Sil\'dih': 'gladiateur sildien',
'Hateful Visage': 'Visage de haine',
'Infern Brand': 'Étendard sacré',
'Magicked Puppet': 'soldat-mage des Thorne',
'Powder Keg': 'tonneau de poudre',
'Regret': 'Regret',
'Shadowcaster Zeless Gah': 'Zeless Gah la Flamme ombrée',
'Silken Puff': 'pompon de Silkie',
'Silkie': 'Silkie',
'The Cornice Of Favor': 'Arène des Faveurs',
'The Forgotten Forecourt': 'Avant-cour abandonnée',
'The Settling Basin': 'Bassin de sédiments',
'The Sifting Site': 'Site de filtrage',
'The Silt Pump': 'Salle des pompes à limon',
'Thorne Knight': 'chevalier-mage des Thorne',
},
'replaceText': {
'Amalj\'aa Artillery': 'Artillerie amalj\'aa',
'Biting Wind': 'Tornade',
'Blaze of Glory': 'Croix des flammes sacrées',
'Blazing Benifice': 'Canon des flammes sacrées',
'Blistering Blow': 'Coup fulgurant',
'Bracing Duster': 'Plumeau tonifiant',
'Bracing Suds': 'Mousse tonifiante',
'Brim Over': 'Ras-le-bord',
'(?<!Slash)Burn': 'Combustion',
'Carpet Beater': 'Tapette à tapis',
'Cast Shadow': 'Ombre crépitante',
'Chilling Duster': 'Plumeau givré',
'Chilling Suds': 'Mousse givrée',
'Cogwheel': 'Souffle ardent',
'Colossal Charge': 'Ruée colossale',
'Colossal Launch': 'Lancer colossal',
'Colossal Slam': 'Coup colossal',
'Colossal Strike': 'Frappe colossale',
'Colossal Swing': 'Swing colossal',
'Cryptic Portal': 'Portail cryptique',
'Deep Clean': 'Grand nettoyage',
'Dust Bluster': 'Dépoussiérage',
'Eastern Ewers': 'Aiguière aqueuse',
'Exploding Catapult': 'Catapulte explosive',
'Explosion': 'Explosion',
'Firesteel Fracture': 'Choc brasero',
'Flash of Steel': 'Éclair d\'acier',
'Fore Honor': 'Lueur ardente',
'Fresh Puff': 'Pompon lustré',
'Gigantomill': 'Broyage colossal',
'Gladiator of Sil\'dih': 'gladiateur sildien',
'Golden Flame': 'Flamme dorée',
'Hateful Visage': 'Visage de haine',
'Infern Brand': 'Étendard sacré',
'Infern Gale': 'Brise infernale',
'Infern Ward': 'Barrière infernale',
'Infern Well': 'Fourneau infernal',
'Intake': 'Aspiration',
'Landing': 'Atterrissage rapide',
'Magic Cannon': 'Canon magique',
'Mighty Smite': 'Taillade belliqueuse',
'Puff and Tumble': 'Pompon culbuteur',
'Pure Fire': 'Feu immaculé',
'Rack and Ruin': 'Dévastation immémoriale',
'Ring of Might': 'Rafale de puissance',
'Rinse': 'Rinçage',
'Rolling Boulder': 'Rocher roulant',
'Runaway Runoff': 'Éruption boueuse',
'Runaway Sludge': 'Éruption fangeuse',
'Rush of Might': 'Déferlement de puissance',
'Sculptor\'s Passion': 'Canon belliqueux',
'Shattering Steel': 'Ravage d\'acier',
'Shockwave': 'Onde de choc',
'Show of Strength': 'Cri du guerrier',
'Signal Flare': 'Brasier du tocsin',
'Silver Flame': 'Flamme argentée',
'Slashburn': 'Taillade enflammée',
'Slippery Soap': 'Bain moussant glissant',
'Soap\'s Up': 'Bain moussant explosif',
'Soaping Spree': 'Bain moussant public',
'Spot Remover': 'Antitaches',
'Spring to Life': 'Source de vie',
'Squeaky Left': 'Frottage gauche',
'Squeaky Right': 'Frottage droit',
'Subterranean Shudder': 'Frémissement souterrain',
'Suddenly Sewage': 'Éruption crasseuse',
'Sundered Remains': 'Soulèvement belliqueux',
'Total Wash': 'Lavage intégral',
'Wash Out': 'Essorage',
'Wrath of Ruin': 'Colère immémoriale',
},
},
{
'locale': 'ja',
'missingTranslations': true,
'replaceSync': {
'Amalj\'aa Artillery Carriage': 'アマルジャ式野砲',
'Antique Boulder': '岩石',
'Arcane Font': '立体魔法陣',
'Ball of Fire': '火炎球',
'Cold Arms\' Quietus': '聖火兵器安置場',
'Eastern Ewer': '洗い壺',
'Eternal Ease': '勇士たちの寝所',
'Geryon the Steer': '覇道のゲーリュオン',
'Gladiator of Sil\'dih': 'シラディハ・グラディアトル',
'Hateful Visage': '呪像起動',
'Infern Brand': '呪具設置',
'Magicked Puppet': 'ソーン・マジックソルジャー',
'Powder Keg': '樽爆弾',
'Regret': '後悔',
'Shadowcaster Zeless Gah': '影火のゼレズ・ガー',
'Silken Puff': 'シルキーズ・ポンポン',
'Silkie': 'シルキー',
'The Cornice Of Favor': '御前闘技台',
'The Forgotten Forecourt': '花園の前庭',
'The Settling Basin': '汚泥処理池',
'The Sifting Site': '沈石搬出施設',
'The Silt Pump': '泥水ポンプ棟',
'Thorne Knight': 'ソーン・マジックナイト',
},
'replaceText': {
'Amalj\'aa Artillery': 'アマルジャ式野砲',
'Biting Wind': '烈風',
'Blaze of Glory': '十字聖火',
'Blazing Benifice': '聖火砲',
'Blistering Blow': '乱斬り',
'Bracing Duster': 'そよそよダスター',
'Bracing Suds': 'そよそよシャンプー',
'Brim Over': '現出',
'(?<!Slash)Burn': '燃焼',
'Carpet Beater': 'カーペットビーター',
'Cast Shadow': '影火呪式',
'Chilling Duster': 'ひえひえダスター',
'Chilling Suds': 'ひえひえシャンプー',
'Cogwheel': '焔剣熱風斬',
'Colossal Charge': 'コロッサスチャージ',
'Colossal Launch': 'コロッサスローンチ',
'Colossal Slam': 'コロッサススラム',
'Colossal Strike': 'コロッサスストライク',
'Colossal Swing': 'コロッサススイング',
'Cryptic Portal': '転移の呪印',
'Deep Clean': '大掃除',
'Dust Bluster': 'ダストブロワー',
'Eastern Ewers': '洗い壺',
'Exploding Catapult': '爆弾ブン投げ',
'Explosion': '爆発',
'Firesteel Fracture': '石火豪打',
'Flash of Steel': '闘人の波動',
'Fore Honor': '前方焔剣閃',
'Fresh Puff': 'ポンポン創出',
'Gigantomill': 'コロッサスミル',
'Gladiator of Sil\'dih': 'シラディハ・グラディアトル',
'Golden Flame': '黄金の閃火',
'Hateful Visage': '呪像起動',
'Infern Brand': '呪具設置',
'Infern Gale': '呪具暴風',
'Infern Ward': '呪具警陣',
'Infern Well': '呪具吸炎',
'Intake': '吸引',
'Landing': '落着',
'Magic Cannon': '魔力砲',
'Mighty Smite': '闘人の斬撃',
'Puff and Tumble': 'ポンポンはたきがけ',
'Pure Fire': '劫火',
'Rack and Ruin': '亡念弾',
'Ring of Might': '大剛の旋撃',
'Rinse': 'すすぎ洗い',
'Rolling Boulder': '転石',
'Runaway Runoff': '水塊噴出',
'Runaway Sludge': '泥塊噴出',
'Rush of Might': '大剛の突撃',
'Sculptor\'s Passion': '闘人砲',
'Shattering Steel': '激発の波動',
'Shockwave': '衝撃波',
'Show of Strength': '勇士の咆哮',
'Signal Flare': '烽火連天',
'Silver Flame': '白銀の閃火',
'Slashburn': '刀撃火種',
'Slippery Soap': 'すべってシャンプーボム',