Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
e2dda9d
Add p1 timeline draft and initial trigger file.
Legends0 Jun 3, 2026
3287abc
lint
Legends0 Jun 3, 2026
696de11
adjust p1 to act network log
Legends0 Jun 3, 2026
d7ec929
change a sync to middle
Legends0 Jun 3, 2026
83f0c7d
add initial triggers
Legends0 Jun 3, 2026
bcd18ec
Hyperdrive tankbuster update + Remove Intemperate Will/Gravitational …
Legends0 Jun 3, 2026
fd08bb0
adjust delay
Legends0 Jun 4, 2026
2015b82
add double-trouble trap triggers
Legends0 Jun 4, 2026
47cc7f5
tele-portents, add trap outputs, ice only output
Legends0 Jun 4, 2026
e5bc5f9
lint + missing false condition
Legends0 Jun 4, 2026
60bfc17
Merge branch 'main' into dmu-p1-initial-triggers
Legends0 Jun 4, 2026
5cbfd84
Add halfroom triggers, fixup trap tracking
Legends0 Jun 4, 2026
30d4d2e
lint
Legends0 Jun 4, 2026
752d62e
revolting ruin tankbuster => tank cleave
Legends0 Jun 4, 2026
b8c8845
remove unnecessary capture
Legends0 Jun 4, 2026
f6b53c0
explicit mystery magic output
Legends0 Jun 4, 2026
2103d41
flip fake/true thunder ice
Legends0 Jun 5, 2026
63d60ce
remove dir outputs from revolting ruin
Legends0 Jun 5, 2026
cad3838
double-trouble trap output refactor
Legends0 Jun 5, 2026
8078913
lint
Legends0 Jun 5, 2026
15a1c91
add tether triggers
Legends0 Jun 5, 2026
5b9411b
reorder triggers, lint, add trap knockback lines
Legends0 Jun 5, 2026
fb675b7
double-trouble trap and gravity timing adjust
Legends0 Jun 5, 2026
763996f
fix mystery magic cleanup order
Legends0 Jun 5, 2026
acdbfc0
remove done TODOs
Legends0 Jun 5, 2026
bc68a25
p2 and p3 timelines
Legends0 Jun 5, 2026
5460731
missing comma
Legends0 Jun 5, 2026
24aa5f0
missing quote and fix enrage startsUsing timing
Legends0 Jun 5, 2026
ab0e3d2
spell id fix
Legends0 Jun 5, 2026
72298a1
replace CombatantMemory with OverlayHandler
Legends0 Jun 5, 2026
fad1b17
change string[] to string + lint
Legends0 Jun 5, 2026
52687c9
some cleanup
Legends0 Jun 5, 2026
8080fe5
unused data
Legends0 Jun 5, 2026
2364f2b
Merge branch 'dmu-p1-initial-triggers' into p2-initial-timeline-and-p…
Legends0 Jun 5, 2026
4809a76
p3 clear with chaos first + p4 draft
Legends0 Jun 5, 2026
1364ad0
phase label
Legends0 Jun 5, 2026
bc48ba9
fix label and window/jump order
Legends0 Jun 5, 2026
127e0ac
p2 tb, p3 implosion + edict, add window to Aero III
Legends0 Jun 6, 2026
0fcf3a0
ave maria and indolent will triggers
Legends0 Jun 6, 2026
1ee147a
remove extra space
Legends0 Jun 6, 2026
ac41393
Merge branch 'dmu-p1-initial-triggers' into p2-initial-timeline-and-p…
Legends0 Jun 6, 2026
7a40bcb
reorder jump/window
Legends0 Jun 6, 2026
568cb78
reduce ave maria/indolent will to info, add duration/cdseconds
Legends0 Jun 6, 2026
20b855e
typo in comment
Legends0 Jun 6, 2026
79f81b4
fix graven image collector, output fixes
Legends0 Jun 6, 2026
b6b78ed
missing initData
Legends0 Jun 6, 2026
891e587
lint + reorder
Legends0 Jun 6, 2026
2f68e56
Merge branch 'dmu-p1-initial-triggers' into p2-initial-timeline-and-p…
Legends0 Jun 6, 2026
79b2449
p4 up to enrage
Legends0 Jun 6, 2026
ded6f5b
double-trouble trap (knockback) merge
Legends0 Jun 7, 2026
c8e0a34
lint
Legends0 Jun 7, 2026
3fbeaa9
Merge branch 'dmu-p1-initial-triggers' into p2-initial-timeline-and-p…
Legends0 Jun 7, 2026
a110eab
change delay on double-trouble trap
Legends0 Jun 7, 2026
68f2d46
Merge branch 'dmu-p1-initial-triggers' into p2-initial-timeline-and-p…
Legends0 Jun 7, 2026
fa2df4e
additional fflogs lines into p5
Legends0 Jun 7, 2026
6b8b019
minor p2/p3 triggers
Legends0 Jun 7, 2026
bf29ddd
retimed start of p2 with network log
Legends0 Jun 7, 2026
9a44485
add p2 forsaken headmarkers
Legends0 Jun 7, 2026
3981951
double-trouble trap update
Legends0 Jun 7, 2026
8eee87c
Merge branch 'dmu-p1-initial-triggers' into p2-initial-timeline-and-p…
Legends0 Jun 7, 2026
d295408
lint and missing bracket
Legends0 Jun 7, 2026
2491baf
fix typo in tower call
Legends0 Jun 7, 2026
fa35fcb
Merge branch 'dmu-p1-initial-triggers' into p2-initial-timeline-and-p…
Legends0 Jun 7, 2026
63d8fad
add delay for sleep/confuse tethers
Legends0 Jun 7, 2026
d875e96
Merge branch 'dmu-p1-initial-triggers' into p2-initial-timeline-and-p…
Legends0 Jun 7, 2026
2ed7e06
add some p2 triggers, p2 timeline additions
Legends0 Jun 7, 2026
0e57527
more p5, fix removals from previous commit
Legends0 Jun 8, 2026
3b8b4c7
missing quote
Legends0 Jun 8, 2026
05fb929
replace literal YOU with output.
Legends0 Jun 8, 2026
9e7a202
Merge branch 'dmu-p1-initial-triggers' into p2-initial-timeline-and-p…
Legends0 Jun 8, 2026
f8f9c35
Some P5 cleanup.
Legends0 Jun 9, 2026
8dec9de
typo with quote
Legends0 Jun 9, 2026
9dcbe61
fix missing quote
Legends0 Jun 9, 2026
3a6b9f1
Update p2 timeline with network log timings.
Legends0 Jun 9, 2026
7ff48a5
fix typos.
Legends0 Jun 10, 2026
44c9c49
remove accidental space
Legends0 Jun 10, 2026
7796df8
Merge branch 'main' into p2-initial-timeline-and-p3-timeline-draft
Legends0 Jun 11, 2026
22c34ee
Merge branch 'main' into p2-initial-timeline-and-p3-timeline-draft
Legends0 Jun 11, 2026
c361842
merge the decisive battle lines
Legends0 Jun 11, 2026
867fa38
add bowels of agony aoe, stray gust spellid
Legends0 Jun 11, 2026
e610bd1
p3 enrage when exdeath killed first
Legends0 Jun 11, 2026
b599b34
missing ability note
Legends0 Jun 11, 2026
7f75ccc
p3 timeline cleanup
Legends0 Jun 12, 2026
9f1c370
removed wings baits, edict inc source, ignore ability order
Legends0 Jun 13, 2026
750723b
retime + capitalization
Legends0 Jun 13, 2026
b284d96
undo capitalization changes
Legends0 Jun 13, 2026
d140423
add comment
Legends0 Jun 14, 2026
7868deb
Merge branch 'main' into p2-initial-timeline-and-p3-timeline-draft
Legends0 Jun 14, 2026
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
208 changes: 207 additions & 1 deletion ui/raidboss/data/07-dt/ultimate/dancing_mad.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@ import { RaidbossData } from '../../../../../types/data';
import { OutputStrings, TriggerSet } from '../../../../../types/trigger';

// TODO: P1 Tele-Portent configuration options
// TODO: Earlier phase tracking for P5 (counting the jumps to middle?)

type Phase = 'p1' | 'p2' | 'p3';
type Phase = 'p1' | 'p2' | 'p3' | 'p4' | 'p5';
const phases: { [id: string]: Phase } = {
'C24C': 'p2', // Ultimate Embrace, God Kefka
'C3F7': 'p3', // Aero III Assault (from Kefka), Chaos and Exdeath
'C2DC': 'p4', // Kefka Says, Kefka with Chaos and Neo Exdeath
'BB40': 'p5', // Ultima Repeater, Ultima Kefka
};

// const centerX = 100;
Expand Down Expand Up @@ -42,6 +45,7 @@ export interface Data extends RaidbossData {
doubleTroubleTrapTargets: string[];
myTelePortent1?: 'up' | 'down' | 'right' | 'left';
myTelePortent2?: 'up' | 'down' | 'right' | 'left';
// Phase 2
}

const headMarkerData = {
Expand All @@ -58,6 +62,11 @@ const headMarkerData = {
'stack': '0080', // spread (fake) or stack (real)
// Phase 1 Tethers
'imageTether': '002D',
// Phase 2
'sharedBuster': '0103', // Ultimate Embrace shared tankbuster
'stackPath': '02CB', // When standing in Path of Light tower, causes BAC0 Spelldriver (3-person stack)
'conePath': '02CD', // When standing in Path of Light tower, causes BAC2 Spellwave (cone targetting nearest player)
'spreadPath': '02CC', // When standing in Path of Light tower, causes BAC1 Spellscatter (small aoe on the player)
} as const;

const mysteryMagicOutputStrings: OutputStrings = {
Expand Down Expand Up @@ -203,6 +212,7 @@ const triggerSet: TriggerSet<Data> = {
fakeEyeTowerIds: [],
waveCannonTargets: [],
doubleTroubleTrapTargets: [],
// Phase 2
};
},
triggers: [
Expand Down Expand Up @@ -1171,12 +1181,208 @@ const triggerSet: TriggerSet<Data> = {
delete data.fireMarker;
},
},
{
id: 'DMU P2 Ultimate Embrace',
type: 'StartsUsing',
netRegex: { id: 'C24C', source: 'Kefka', capture: true },
response: Responses.sharedTankBuster(),
},
{
id: 'DMU P2 Forsaken',
// 7s cast
type: 'StartsUsing',
netRegex: { id: 'BABC', source: 'Kefka', capture: false },
durationSeconds: 6.7,
response: Responses.bigAoe('alert'),
},
{
id: 'DMU P2 Path of Light Headmarker',
type: 'HeadMarker',
netRegex: {
id: [
headMarkerData['stackPath'],
headMarkerData['conePath'],
headMarkerData['spreadPath'],
],
capture: true,
},
condition: Conditions.targetIsYou(),
infoText: (_data, matches, output) => {
const id = matches.id;
type markerMap = {
[key: string]: 'stack' | 'cone' | 'spread';
};
const markers: markerMap = {
'02CB': 'stack',
'02CD': 'cone',
'02CC': 'spread',
};
const marker = markers[id];
if (marker === undefined)
return;
return output[marker]!();
},
outputStrings: {
stack: {
en: 'Stack Path on YOU',
},
cone: {
en: 'Cone Path on YOU',
},
spread: {
en: 'Spread Path on YOU',
},
},
},
{
id: 'DMU P2 Future\'s End/Past\'s End',
// There are four end casts
type: 'StartsUsing',
netRegex: { id: ['BAD2', 'BAD3'], source: 'Kefka', capture: true },
infoText: (_data, matches, output) => {
return matches.id === 'BAD2' ? output.future!() : output.past!();
},
outputStrings: {
future: {
en: 'Future',
},
past: {
en: 'Past',
},
},
},
{
id: 'DMU P2 Light of Judgment',
type: 'StartsUsing',
netRegex: { id: 'BABD', source: 'Kefka', capture: false },
response: Responses.bigAoe('alert'),
},
{
id: 'DMU Single Wing of Destruction',
// BACD Wings of Destruction, Left wing highlight
// BACE Wingso of Desctruction, Right wing highlight
// Halfroom cleaves
type: 'StartsUsing',
netRegex: { id: ['BACD', 'BACE'], source: 'Kefka', capture: true },
infoText: (_data, matches, output) => {
if (matches.id === 'BACD')
return output.right!();
return output.left!();
},
outputStrings: {
right: Outputs.right,
left: Outputs.left,
},
},
{
id: 'DMU P2 Aero III Assault',
// Knockback from boss that can't be resisted
// Applies 306 Down for the Count
type: 'StartsUsing',
netRegex: { id: 'C3F7', source: 'Kefka', capture: false },
response: Responses.getUnder('alert'),
},
{
id: 'DMU P3 Epic Hero/Fated Hero Debuffs',
// Applied to 4 nearest players when Chaos and Exdeath finish casting
// C2E2/C2E3 The Decisive Battle
// 1060 Epic Hero: Can only damage Chaos, preferred by Melee DPS
// 1062 Fated Hero: Can only damage Exdeath, preferred by Ranged DPS
// These fall off once Exdeath casts BB12 Thunder III
type: 'GainsEffect',
netRegex: { effectId: ['1060', '1062'], capture: true },
condition: Conditions.targetIsYou(),
infoText: (_data, matches, output) => {
return matches.effectId === '1060' ? output.epic!() : output.fated!();
},
outputStrings: {
epic: {
en: 'Attack Chaos',
},
fated: {
en: 'Attack Exdeath',
},
},
},
{
id: 'DMU P3 Bowels of Agony',
type: 'StartsUsing',
netRegex: { id: 'BAF2', source: 'Chaos', capture: false },
response: Responses.aoe(),
},
{
id: 'DMU P3 Headwind/Tailwind Debuffs',
// Applied at BAF2 Bowels of Agony
// Debuffs trigger if hit by certain sources, causing a knockback
// 642 Headwind: Face away from damage source
// 643 Tailwind: Face towards damage source
type: 'GainsEffect',
netRegex: { effectId: ['642', '643'], capture: true },
condition: Conditions.targetIsYou(),
infoText: (_data, matches, output) => {
return matches.effectId === '642' ? output.headwind!() : output.tailwind!();
},
outputStrings: {
headwind: {
en: 'Headwind on YOU',
},
tailwind: {
en: 'Tailwind on You',
},
},
},
{
id: 'DMU P3 Longitudinal Implosion',
type: 'StartsUsing',
netRegex: { id: 'BAFD', source: 'Chaos', capture: false },
infoText: (_data, _matches, output) => output.sides!(),
outputStrings: {
sides: Outputs.sidesThenFrontBack,
},
},
{
id: 'DMU P3 Latitudinal Implosion',
type: 'StartsUsing',
netRegex: { id: 'BAFE', source: 'Chaos', capture: false },
infoText: (_data, _matches, output) => output.frontBack!(),
outputStrings: {
frontBack: Outputs.frontBackThenSides,
},
},
{
id: 'DMU P3 Vaccuum Wave',
type: 'StartsUsing',
netRegex: { id: 'BB13', source: 'Chaos', capture: true },
infoText: (_data, matches, output) => {
return output.knockbackFromBoss!({ chaos: matches.source });
},
outputStrings: {
knockbackFromBoss: {
en: 'Knockback from ${chaos}',
},
},
},
{
id: 'DMU P3 Damning Edict',
type: 'StartsUsing',
netRegex: { id: 'BB01', source: 'Chaos', capture: true },
infoText: (_data, matches, output) => {
return output.getBehindTarget!({ target: matches.source });
},
outputStrings: {
getBehindTarget: {
en: 'Get Behind ${target}',
},
},
},
],
timelineReplace: [
{
'locale': 'en',
'replaceText': {
'Future\'s End/Past\'s End': 'Future/Past\'s End',
'Spelldriver/Spellscatter/Spellwave': 'Spelldriver/scatter/wave',
'Longitudinal Implosion/Latitudinal Implosion': 'Long/Lat Implosion',
},
},
{
Expand Down
Loading
Loading