Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

raidboss: timeline & initial triggers for Golbez (normal) #5534

Merged
merged 3 commits into from
Jun 10, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 121 additions & 2 deletions ui/raidboss/data/06-ew/trial/golbez.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,133 @@
import { Responses } from '../../../../../resources/responses';
import { DirectionOutputCardinal, Directions } from '../../../../../resources/util';
import ZoneId from '../../../../../resources/zone_id';
import { RaidbossData } from '../../../../../types/data';
import { TriggerSet } from '../../../../../types/trigger';

export type Data = RaidbossData;
export interface Data extends RaidbossData {
galeSphereShadows: DirectionOutputCardinal[];
}

const triggerSet: TriggerSet<Data> = {
id: 'TheVoidcastDais',
zoneId: ZoneId.TheVoidcastDais,
timelineFile: 'golbez.txt',
triggers: [],
initData: () => {
return {
galeSphereShadows: [],
};
},
triggers: [
{
id: 'Golbez Terrastorm',
type: 'Ability',
netRegex: { id: '8463', source: 'Golbez', capture: false },
infoText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Avoid meteor',
},
},
},
{
id: 'Golbez Crescent Blade',
type: 'StartsUsing',
netRegex: { id: '846B', source: 'Golbez', capture: false },
response: Responses.getBehind(),
},
{
id: 'Golbez Void Meteor',
type: 'StartsUsing',
netRegex: { id: '84AC', source: 'Golbez', capture: true },
response: Responses.tankBuster(),
},
{
id: 'Golbez Binding Cold',
type: 'StartsUsing',
netRegex: { id: '84B2', source: 'Golbez', capture: false },
response: Responses.bleedAoe(),
},
{
id: 'Golbez Black Fang',
type: 'StartsUsing',
netRegex: { id: '8471', source: 'Golbez', capture: false },
response: Responses.bigAoe(),
},
{
id: 'Golbez Shadow Crescent',
type: 'StartsUsing',
netRegex: { id: '8487', source: 'Golbez', capture: false },
alertText: (_data, _matches, output) => output.text!(),
outputStrings: {
text: {
en: 'Get behind, then out',
},
},
},
{
id: 'Golbez Gale Sphere Directions',
type: 'Ability',
netRegex: { id: '84(?:4F|50|51|52)', source: 'Golbez\'s Shadow', capture: true },
infoText: (data, matches, output) => {
switch (matches.id) {
case '844F':
data.galeSphereShadows.push('dirN');
break;
case '8450':
data.galeSphereShadows.push('dirE');
break;
case '8451':
data.galeSphereShadows.push('dirW');
break;
case '8452':
data.galeSphereShadows.push('dirS');
break;
}

if (data.galeSphereShadows.length < 4)
return;

const [dir1, dir2, dir3, dir4] = data.galeSphereShadows;
if (dir1 === undefined || dir2 === undefined || dir3 === undefined || dir4 === undefined)
return;

data.galeSphereShadows = [];

return output.clones!({
dir1: output[dir1]!() ?? '??',
dir2: output[dir2]!() ?? '??',
dir3: output[dir3]!() ?? '??',
dir4: output[dir4]!() ?? '??',
});
},
outputStrings: {
clones: {
en: 'Clones: ${dir1}->${dir2}->${dir3}->${dir4}',
},
...Directions.outputStringsCardinalDir,
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return output.clones!({
dir1: output[dir1]!() ?? '??',
dir2: output[dir2]!() ?? '??',
dir3: output[dir3]!() ?? '??',
dir4: output[dir4]!() ?? '??',
});
},
outputStrings: {
clones: {
en: 'Clones: ${dir1}->${dir2}->${dir3}->${dir4}',
},
...Directions.outputStringsCardinalDir,
return output.clones!({
dir1: output[dir1]!() ?? output.unknown!(),
dir2: output[dir2]!() ?? output.unknown!(),
dir3: output[dir3]!() ?? output.unknown!(),
dir4: output[dir4]!() ?? output.unknown!(),
});
},
outputStrings: {
clones: {
en: 'Clones: ${dir1}->${dir2}->${dir3}->${dir4}',
},
unknown: Outputs.unknown,
...Directions.outputStringsCardinalDir,

In general I'd prefer not to have strings come from anywhere but the outputStrings section (even if it's just ???).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general I'd prefer not to have strings come from anywhere but the outputStrings section (even if it's just ???).

Got it. The strange thing is that we shouldn't need to include unknown: Outputs.unknown in outputStrings, as Directions.outputStringsCardinalDir already contains an identical property. But if I omit it, eslint (specifically, rulesdir/cactbot-output-strings throws an error that 'unknown' is not a property in 'output'.

If we want to continue to spread direction-related (and potentially other/future) outputStrings in this manner, should I open an issue to update that lint rule? (I can take a look at it, but I'm not very familiar with lint.)

},
},
{
id: 'Golbez Eventide Fall',
type: 'StartsUsing',
netRegex: { id: '8482', source: 'Golbez', capture: false },
response: Responses.stackMarker(),
},
{
id: 'Golbez Immolating Shade',
type: 'StartsUsing',
netRegex: { id: '8495', source: 'Golbez' },
alertText: (data, matches, output) => {
const target = data.ShortName(matches.target) ?? '??';
return output.text!({ player: target });
},
outputStrings: {
text: {
en: 'Out first => stack w/ ${player}',
},
},
},
],
};

export default triggerSet;
105 changes: 105 additions & 0 deletions ui/raidboss/data/06-ew/trial/golbez.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,111 @@
### The Voidcast Dais
#
# -ii 844B 8463 8460 84AE 84AF 8469 8719 86CF 8473 849B 878B 84B6 84A7 84A9 8483 86B3 8484
# -it "Golbez"
# -ic "Gale Sphere" "Shadow Dragon" "Golbez's Shadow"

# Ignored Ids:
# - 844B (autos)
# - 8463 Terrastorm (initial cast; meteor telegraph/damage is 8465)
# - 8460 Duplicative Arctic Assault
# - 84A[EF] Additional hits of Void Meteor buster
# - 8469 Subsequent Lingering Spark puddles
# - 8719 Duplicative Black Fang
# - 86CF Duplicative Black Fang
# - 8473 Duplicative Black Fang
# - 849B Duplicative Explosion
# - 878B Duplicative Double Meteor
# - 84B6 Duplicative Double Meteor
# - 84A7 sync/vfx?
# - 84A9 Ground AoE telegraphs for Void Stardust
# - 8483 Duplicative Eventide Fall
# - 86B3 Duplicative Eventide Fall
# - 8484 sync/vfx?


hideall "--Reset--"
hideall "--sync--"
hideall "--middle--"

0.0 "--Reset--" sync / 21:........:4000000F:/ window 100000 jump 0
0.0 "--sync--" sync / 104:[^:]*:1($|:)/ window 0,1
11.0 "--middle--" sync / 1[56]:[^:]*:Golbez:84B8:/ window 12,12
25.2 "Terrastorm" sync / 1[56]:[^:]*:Golbez:8465:/
30.3 "Crescent Blade" sync / 1[56]:[^:]*:Golbez:846B:/
37.0 "--middle--" sync / 1[56]:[^:]*:Golbez:84B8:/
42.1 "Arctic Assault" sync / 1[56]:[^:]*:Golbez:845E:/
50.3 "Crescent Blade" sync / 1[56]:[^:]*:Golbez:846B:/
60.9 "Void Meteor" sync / 1[56]:[^:]*:Golbez:84AC:/ duration 4
69.1 "--middle--" sync / 1[56]:[^:]*:Golbez:84B8:/
74.2 "Lingering Spark" sync / 1[56]:[^:]*:Golbez:8467:/ duration 8
86.5 "Crescent Blade" sync / 1[56]:[^:]*:Golbez:846B:/
97.1 "Binding Cold" sync / 1[56]:[^:]*:Golbez:84B2:/
106.3 "--middle--" sync / 1[56]:[^:]*:Golbez:84B8:/
113.6 "Azdaja's Shadow" sync / 1[56]:[^:]*:Golbez:86FE:/
113.6 "--untargetable--"
128.6 "--targetable--"
132.6 "Black Fang" sync / 1[56]:[^:]*:Golbez:8471:/ duration 6.5
142.7 "--sync--" sync / 1[56]:[^:]*:Golbez:8475:/
150.8 "--middle--" sync / 1[56]:[^:]*:Golbez:84B8:/
156.8 "Azdaja's Shadow" sync / 1[56]:[^:]*:Golbez:8476:/
167.1 "Shadow Crescent" sync / 1[56]:[^:]*:Golbez:8487:/
169.4 "Rising Beacon" sync / 1[56]:[^:]*:Golbez:848F:/
172.2 "Burning Shade" sync / 1[56]:[^:]*:Golbez:8493:/
172.8 "--middle--" sync / 1[56]:[^:]*:Golbez:84B8:/
186.7 "Explosion" sync / 1[56]:[^:]*:Golbez:8499:/
191.1 "Double Meteor" sync / 1[56]:[^:]*:Golbez:84B4:/
194.2 "--sync--" sync / 1[56]:[^:]*:Golbez:8475:/
200.3 "--middle--" sync / 1[56]:[^:]*:Golbez:84B8:/
205.6 "Gale Sphere" sync / 1[56]:[^:]*:Golbez:844D:/
225.3 "--sync--" sync / 1[56]:[^:]*:Golbez:844E:/
234.3 "Void Stardust" sync / 1[56]:[^:]*:Golbez:84A3:/
238.2 "Void Stardust" sync / 1[56]:[^:]*:Golbez:84A5:/
248.5 "Void Meteor" sync / 1[56]:[^:]*:Golbez:84AC:/ duration 4
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is 84A3 the telegraph, 84A5 the first hit, and 84AC the continuing damage? Or, what are these ids? Mostly wondering if this needs some extra text here or an ignored id. The extreme says (preview) on the telegraph, for what it's worth.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

84A3 is the initial (2.7 sec.) cast that shows the corner meteor marker. At the conclusion of the cast, the remaining telegraphs are shown. 84A5 is a longer cast, started at the same time as 84A3, that eventually corresponds to damage from that corner meteor exploding. 84A9 (ignored) is damage from the subsequent meteors.
(84AC is Void Meteor, which is a separate mechanic -- the dual tankbuster. Yeah, these names aren't confusing at all...)

I added (preview) on 84A3 and a small duration on 84A5 to correspond to the subsequent meteor hits. It's a slightly longer duration than the extreme, because that's how long the 84A9 abilities take to resolve, but it otherwise matches what we're doing there.

259.7 "--middle--" sync / 1[56]:[^:]*:Golbez:84B8:/
265.7 "Azdaja's Shadow" sync / 1[56]:[^:]*:Golbez:8476:/
274.0 "Lingering Spark" sync / 1[56]:[^:]*:Golbez:8467:/ duration 8
285.2 "Eventide Fall" sync / 1[56]:[^:]*:Golbez:8482:/ duration 4.6
298.5 "Gale Sphere" sync / 1[56]:[^:]*:Golbez:844D:/
318.2 "--sync--" sync / 1[56]:[^:]*:Golbez:844E:/
325.5 "Shadow Crescent" sync / 1[56]:[^:]*:Golbez:8487:/
327.8 "Rising Beacon" sync / 1[56]:[^:]*:Golbez:848F:/
330.0 "--sync--" sync / 1[56]:[^:]*:Golbez:8475:/
331.4 "Immolating Shade" sync / 1[56]:[^:]*:Golbez:8495:/

# begin loop
340.1 "Binding Cold" sync / 1[56]:[^:]*:Golbez:84B2:/
346.3 "--middle--" sync / 1[56]:[^:]*:Golbez:84B8:/
352.3 "Azdaja's Shadow" sync / 1[56]:[^:]*:Golbez:8476:/
360.5 "Void Stardust" sync / 1[56]:[^:]*:Golbez:84A3:/
364.4 "Void Stardust" sync / 1[56]:[^:]*:Golbez:84A5:/
370.7 "Arctic Assault" sync / 1[56]:[^:]*:Golbez:845E:/
386.9 "Terrastorm" sync / 1[56]:[^:]*:Golbez:8465:/
391.2 "Shadow Crescent" sync / 1[56]:[^:]*:Golbez:8487:/
393.5 "Rising Beacon" sync / 1[56]:[^:]*:Golbez:848F:/
396.3 "Burning Shade" sync / 1[56]:[^:]*:Golbez:8493:/
396.9 "--middle--" sync / 1[56]:[^:]*:Golbez:84B8:/
410.9 "Explosion" sync / 1[56]:[^:]*:Golbez:849A:/
415.3 "Double Meteor" sync / 1[56]:[^:]*:Golbez:84B4:/
418.4 "--sync--" sync / 1[56]:[^:]*:Golbez:8475:/
431.5 "Void Meteor" sync / 1[56]:[^:]*:Golbez:84AC:/ duration 4
441.7 "--middle--" sync / 1[56]:[^:]*:Golbez:84B8:/
447.7 "Azdaja's Shadow" sync / 1[56]:[^:]*:Golbez:8476:/
456.1 "Lingering Spark" sync / 1[56]:[^:]*:Golbez:8467:/ duration 8
467.3 "Eventide Fall" sync / 1[56]:[^:]*:Golbez:8482:/ duration 4.6
480.4 "Gale Sphere" sync / 1[56]:[^:]*:Golbez:844D:/
500.1 "--sync--" sync / 1[56]:[^:]*:Golbez:844E:/
507.4 "Shadow Crescent" sync / 1[56]:[^:]*:Golbez:8487:/
509.7 "Rising Beacon" sync / 1[56]:[^:]*:Golbez:848F:/
511.9 "--sync--" sync / 1[56]:[^:]*:Golbez:8475:/

# jump + fake loop
522.0 "Binding Cold" sync / 1[56]:[^:]*:Golbez:84B2:/ window 60,60 jump 340.1
528.2 "--middle--" sync / 1[56]:[^:]*:Golbez:84B8:/
534.2 "Azdaja's Shadow" sync / 1[56]:[^:]*:Golbez:8476:/
542.4 "Void Stardust" sync / 1[56]:[^:]*:Golbez:84A3:/
546.3 "Void Stardust" sync / 1[56]:[^:]*:Golbez:84A5:/
552.6 "Arctic Assault" sync / 1[56]:[^:]*:Golbez:845E:/
568.8 "Terrastorm" sync / 1[56]:[^:]*:Golbez:8465:/
572.9 "Shadow Crescent" sync / 1[56]:[^:]*:Golbez:8487:/
575.2 "Rising Beacon" sync / 1[56]:[^:]*:Golbez:848F:/