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

[meta] 6.5 content #5859

Open
quisquous opened this issue Oct 19, 2023 · 16 comments
Open

[meta] 6.5 content #5859

quisquous opened this issue Oct 19, 2023 · 16 comments

Comments

@quisquous
Copy link
Owner

There's a few things missing from 6.5:

  • Thaleia
  • The Burn (revamped)
  • The Ghimlyt Dark (revamped)

If folks have time to do even a single boss in Thaleia, it'd be much appreciated. If somebody wants to learn how to write timelines or triggers or oopsy, please respond and I'd be happy to walk you through it.

@xiashtra
Copy link
Contributor

The Drowned City of Skalla was also revamped in 6.5.

@quisquous
Copy link
Owner Author

Oh that's true, although it didn't get a new id, so (possibly?) the bosses are unchanged. Somebody should probably still check, for sure.

@sleepylinde
Copy link

Most 6.5 content seems to be done, but I'd love to contribute writing triggers and or timelines. I dont really have experience with typescript however. I mostly do python and bash these days (and still need to get better at it). Most of my college courses were done in java which doesnt seem to be helpful here either.

I got the setup mostly done (cloning the repo, setting up vscode, etc) hower pylint seems to throw some errors:

2023-11-05 12:10:53.309 [error] Following setting is deprecated: "python.linting.pylintEnabled"
2023-11-05 12:10:53.309 [error] All settings starting with "python.linting." are deprecated and can be removed from settings.
2023-11-05 12:10:53.309 [error] Linting features have been moved to separate linter extensions.
2023-11-05 12:10:53.309 [error] See here for more information: https://code.visualstudio.com/docs/python/linting
2023-11-05 12:10:53.309 [error] Please install "pylint" extension: https://marketplace.visualstudio.com/items?itemName=ms-python.pylint
2023-11-05 12:10:53.309 [info] Test server listening.
2023-11-05 12:10:53.309 [info] Python interpreter path: C:\Python312\python.exe
2023-11-05 12:10:55.124 [info] Starting Pylance language server.

Basically telling me to install pylint while it is installed.

It'd be great to get a rundown on how development is done, if a timeline file comes first etc. I find it hard to grasp that sort of thing without instructions.

@quisquous
Copy link
Owner Author

@sleepylinde I'll file a separate issue about pylint and CC you, but I think it's minor and I wouldn't be concerned.

There is definitely 6.5 and 6.51 work to be done if you're interested in learning how to write triggers or timelines:

I think dungeons are a good place to start.

For legacy dungeons, I think the work is to run the dungeon and make sure the triggers still work and fix up the timeline if it needs to. For example, for the Mist Dragon in the Burn (https://github.com/quisquous/cactbot/blob/main/ui/raidboss/data/04-sb/dungeon/the_burn.txt#L63) at least run the fight long enough to get to the loop at 2061.9. (If in your cactbot settings you click the developer mode checkbox, reload, and then click the debug button for raidboss, you'll get a debug "timeline time" next to the timeline which is helpful for me.)

I would usually do something like:

  • run dungeon (ideally recording somewhere, with ACT open for logs)
  • note anything especially broken
  • run ts-node util/logtools/test_timeline.ts on the logfile to verify that the timeline is good, and if not use ts-node util/logtools/make_timeline.ts to build a new timeline
  • fix any triggers that have broken due to changes, or changed headmarkers especially

That would be my suggestion is to pick one dungeon and give it a spin and see if it works. That'd give you familiarity with test and make timeline. Then if you wanted to write new stuff, I'd suggest grabbing a boss from Thaeleia or one of the routes from Aloalo.

I have it on my list to update the timeline/raidboss/(non-existent) oopsy guide to give some more guidelines and instructions. Other people do things differently, but my usual process is this:

  • run fight, ideally drag fight out long enough so that it loops (with trusts, by soloing it, by convincing friends to not do dps somehow), always record video and have ACT open for a log file
  • run ts-node util/logtools/make_timeline.ts with the -la arg which prints out a table of abilities like https://github.com/quisquous/cactbot/blob/main/ui/raidboss/data/06-ew/dungeon/another_mount_rokkon.txt#L105-L145
  • I should make a tool for this, but I view logs in ACT and then filter with this ridiculous regular expression ( 1A:[^:]*:([^:]|: )*:[^:]*:[E4][^:]*:[^:]*:1| 1A:B9A:| 03:| 23:| 101:| 1B:| 1[456]:4.......:(?!\w*-Egi|Liturgic Bell|Thancred|Moonstone Carbuncle|Zero(?!mus)|Alphinaud|Alisaie|Topaz Titan|Emerald Carbuncle|Eos|Rook Autoturret|Seraph|Bishop Autoturret|Ruby Carbuncle|Esteem|Demi-\w*|Earthly Star|Automaton Queen|Bunshin|Selene|Hien|Lyse|Pipin Of The Steel Heart|Yugiri Mistwalker|2B|Topaz Carbuncle|Y'shtola|Hythlodaeus|Emet-Selch|Venat|Krile|Estinien|Urianger|G'raha Tia|Carbuncle|Varshahn|Emerald Garuda|Ruby Ifrit|Bunshin|Earthly Star)[^:]*:(?!IGNOREID_HERE)[^:]*:(?!Attack|attack)) to find the "interesting" logs in a fight to browse through all the lines
  • using video, those filtered logs, the output from make_timeline.ts, I fill out the ability table so I know what everything does
    • while I'm doing this, I'll usually make notes of triggers I want to write
  • the output from make_timeline.ts needs editing work, in terms of figuring out which abilities to ignore (-ii), which need to be renamed for clarity, where the loops are, etc
  • finally actually write the triggers
  • I usually fill out oopsy from the ability table for anything that it is damage that shouldn't be taken, shares, and spreads, and leave TODOs for everything else

I'm happy to give more details on this process too, but that's my usual process. I'm sure other people do things differently.

@quisquous
Copy link
Owner Author

@sleepylinde can you try #5908 and see if it fixes things?

@sleepylinde
Copy link

I've commented on the build with my results from #5908. I think trying the burn and seeing if I can find anything sounds like a plan. I'll give that a whirl today and if any questions arise I'll collect them and comment here later. I love that ungodly regex lmao, what is it trying to match exactly?

@quisquous
Copy link
Owner Author

I'll give that a whirl today and if any questions arise I'll collect them and comment here later.

Yeah, definitely please ask questions. A lot of this is not obvious, and I (and other folks) are happy to help get any confusion sorted out.

I love that ungodly regex lmao, what is it trying to match exactly?

It's:

  • debuffs from enemies
  • vfx effects (this is probably covered by the first one)
  • added combatants
  • tether lines
  • map effect lines
  • headmarker lines
  • starts casting / ability / ability on multiple target lines from non-players that are also not known trust npcs or player-spawned things like Bunshin or Esteem, and are also not named attack

@sleepylinde
Copy link

sleepylinde commented Nov 6, 2023

First of all I appriciate any or all handholding that comes my way, thank you so much for your time. I'm usually not developing on windows, am struggling with unfamiliar scripts and in general I'm just bumbleing from one problem to another.

Couple of things that I tried to deal with the last few hours:

run ts-node util/logtools/test_timeline.ts on the logfile to verify that the timeline is good, and if not use ts-node util/logtools/make_timeline.ts to build a new timeline

Running into the issue that ts-node is complaining that .ts is an unknown file extension ( I moved the act log into the logtools folder just to avoid thinking about paths for the time being).

ts-node make_timeline.ts -f Network_26906_20231106.log -lf 1
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for K:\github\cactbot\util\logtools\make_timeline.ts
at new NodeError (node:internal/errors:406:5)
at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:99:9)
at defaultGetFormat (node:internal/modules/esm/get_format:142:36)
at defaultLoad (node:internal/modules/esm/load:120:20)
at nextLoad (node:internal/modules/esm/hooks:833:28)
at load (C:\Users\User\AppData\Roaming\npm\node_modules\ts-node\dist\child\child-loader.js:19:122)
at nextLoad (node:internal/modules/esm/hooks:833:28)
at Hooks.load (node:internal/modules/esm/hooks:416:26)
at MessagePort.handleMessage (node:internal/modules/esm/worker:168:24)
at [nodejs.internal.kHybridDispatch] (node:internal/event_target:807:20) {
code: 'ERR_UNKNOWN_FILE_EXTENSION'
}

Googling this suggested two solutions: node --loader ts-node/esm make_timeline.ts -f Network_26906_20231106.log -lf 1 or ts-node --esm make_timeline.ts -f Network_26906_20231106.log -lf 1. The --esm flag produced the same error as above and calling node --loader ts-node/esm make timeline.ts -f Network_26906_20231106.log resulted in printing some warnings but also showed me the expected usage message.

`node --loader ts-node/esm make_timeline.ts --file Network_26906_20231106.log -lf` is currently working for me and prints out the expected.
(node:20208) ExperimentalWarning: `--experimental-loader` may be removed in the future; instead use `register()`:
--import 'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("ts-node/esm", pathToFileURL("./"));'
(Use `node --trace-warnings ...` to show where the warning was created)
┌───────┬──────────────┬────────────────┬──────────┬────────────┬───────────────────────┬──────────┐
│ Index │  Start Date  │   Start Time   │ Duration │ Zone Name  │    Encounter Name     │ End Type │
├───────┼──────────────┼────────────────┼──────────┼────────────┼───────────────────────┼──────────┤
│   1   │  2023-11-06  │  08:54:42.000  │    3m    │  the Burn  │  The Scorpion's Den   │  Unseal  │
│   2   │  2023-11-06  │  09:03:47.000  │    3m    │  the Burn  │  The Gamma Segregate  │  Unseal  │
│   3   │  2023-11-06  │  09:12:18.000  │    4m    │  the Burn  │     The Aspersory     │  Unseal  │
└───────┴──────────────┴────────────────┴──────────┴────────────┴───────────────────────┴──────────┘

With the new acquired timeline I'm trying to compare with the existing https://github.com/quisquous/cactbot/blob/3b7f09ae9174443ddda0639154d31def9e110c5c/ui/raidboss/data/04-sb/dungeon/the_burn64.txt in order to understand the decision making.

I also tried looking through the log with the regex you provided but I dont think I know what to look out for in the 256 matches it got.

Here's my output generated with a duty support run:

0.0 "--sync--" sync / 00:0839::The Scorpion's Den will be sealed off/ window 0,1
10.2 "Crystal Needle" sync / 1[56]:[^:]:Hedetet:3193:/
19.4 "--sync--" sync / 1[56]:[^:]
:Hedetet:81BC:/
28.0 "Hailfire" sync / 1[56]:[^:]:Hedetet:3194:/
32.0 "Resonant Frequency" sync / 1[56]:[^:]
:Dim Crystal:3198:/
42.0 "Shardstrike" sync / 1[56]:[^:]:Hedetet:3195:/
42.9 "Shardstrike" sync / 1[56]:[^:]
:Hedetet:3199:/
51.3 "--sync--" sync / 1[56]:[^:]:Hedetet:81BC:/
58.3 "Shardfall" sync / 1[56]:[^:]
:Hedetet:3191:/
62.2 "Resonant Frequency" #sync / 1[56]:[^:]:Dim Crystal:3198:/
62.3 "Resonant Frequency" #sync / 1[56]:[^:]
:Dim Crystal:3198:/
62.4 "Resonant Frequency" #sync / 1[56]:[^:]:Dim Crystal:3198:/
66.4 "Dissonance" sync / 1[56]:[^:]
:Hedetet:3192:/
73.5 "Crystalline Fracture" sync / 1[56]:[^:]:Dim Crystal:3197:/
78.5 "Crystal Needle" sync / 1[56]:[^:]
:Hedetet:3193:/
87.6 "--sync--" sync / 1[56]:[^:]:Hedetet:3196:/
97.0 "Hailfire" sync / 1[56]:[^:]
:Hedetet:3194:/
101.0 "Resonant Frequency" #sync / 1[56]:[^:]:Dim Crystal:3198:/
101.1 "Resonant Frequency" #sync / 1[56]:[^:]
:Dim Crystal:3198:/
108.1 "Shardstrike" sync / 1[56]:[^:]:Hedetet:3195:/
109.0 "Shardstrike" sync / 1[56]:[^:]
:Hedetet:3199:/
117.4 "--sync--" sync / 1[56]:[^:]:Hedetet:81BC:/
124.4 "Shardfall" sync / 1[56]:[^:]
:Hedetet:3191:/
128.3 "Resonant Frequency" #sync / 1[56]:[^:]:Dim Crystal:3198:/
128.4 "Resonant Frequency" #sync / 1[56]:[^:]
:Dim Crystal:3198:/
132.5 "Dissonance" sync / 1[56]:[^:]:Hedetet:3192:/
139.6 "Crystalline Fracture" sync / 1[56]:[^:]
:Dim Crystal:3197:/
144.6 "Crystal Needle" sync / 1[56]:[^:]:Hedetet:3193:/
153.7 "--sync--" sync / 1[56]:[^:]
:Hedetet:3196:/
163.0 "Hailfire" sync / 1[56]:[^:]:Hedetet:3194:/
167.0 "Resonant Frequency" sync / 1[56]:[^:]
:Dim Crystal:3198:/
174.0 "Shardstrike" sync / 1[56]:[^:]:Hedetet:3195:/
174.9 "Shardstrike" sync / 1[56]:[^:]
:Hedetet:3199:/
183.3 "--sync--" sync / 1[56]:[^:]:Hedetet:81BC:/
190.3 "Shardfall" sync / 1[56]:[^:]
:Hedetet:3191:/
194.2 "Resonant Frequency" #sync / 1[56]:[^:]:Dim Crystal:3198:/
194.3 "Resonant Frequency" #sync / 1[56]:[^:]
:Dim Crystal:3198:/
194.4 "Resonant Frequency" #sync / 1[56]:[^:]:Dim Crystal:3198:/
198.4 "Dissonance" sync / 1[56]:[^:]
:Hedetet:3192:/
205.5 "Crystalline Fracture" sync / 1[56]:[^:]:Dim Crystal:3197:/
210.5 "Crystal Needle" sync / 1[56]:[^:]
:Hedetet:3193:/

My questions about it so far:

  • If I'm understanding correctly any line that starts with "--sync--" gets pruned? Same for double lines caused by different actors (the shards, ID: 3198).
  • ID 3199 gets removed because it's the ID for the markers on the players, while ID 3195 is the boss casting?
  • What does window x,y do exactly?

Edit:
I also noticed that the trigger for Hailfire called out Hide behind Crystal when Yugiri got it but I'm assuming that's a quirk from doing this with duty support as even ACT shows them as Yugiri(YOU)

@quisquous
Copy link
Owner Author

Running into the issue that ts-node is complaining that .ts is an unknown file extension

Maybe somebody can remember more than me, but I thiiiink this could be a version issue. What's your node version? (node --version) Also, does npm ls say that ts-node is 10.9.1? Also also, have you installed node globally, e.g. https://github.com/quisquous/cactbot/blob/main/CONTRIBUTING.md#commit-validation-testing-and-linting

I also tried looking through the log with the regex you provided but I dont think I know what to look out for in the 256 matches it got.

That regex for me is more to look for "interesting" lines. It's helpful when writing triggers (esp for things like headmarkers or effects) and it's helpful in understanding which abilities do which, e.g. which are boss self-targeted abilities and which are damage or which are damage that optionally people can dodge. It's more a thing for me when I'm looking at something fresh or I want to look at a particular timestamp of a log but filter out all the player stuff.

If I'm understanding correctly any line that starts with "--sync--" gets pruned?

Writing a timeline is more of a subjective thing than people think. In this case, the author chose to remove the --sync-- lines. I think actually 81BC could be a repositioning ability (if the boss jumps middle when that happens?) and so it could be --middle-- instead, as other timelines do.

--sync-- is just any ability that doesn't have a name. They get hidden automatically due to a hideall line
at the top of the file. https://github.com/quisquous/cactbot/blob/main/docs/TimelineGuide.md#commands

Same for double lines caused by different actors (the shards, ID: 3198).

I'm not sure about why the other 3198 lines were not included. Is that when crystals explode, or what does that represent? I forget this fight. It seems like probably they could be included.

ID 3199 gets removed because it's the ID for the markers on the players, while ID 3195 is the boss casting?

Yeah, my personal preference here is to use boss self-targeted abilities for timelines (as they are often tied to castbars and so can be used for mitigation) and to remove the player damage ability that is usually shortly after it if it's a separate ability.

What does window x,y do exactly?

https://github.com/quisquous/cactbot/blob/main/docs/TimelineGuide.md#timeline-file-syntax should explain it, let me know if I can explain it more than that

I also noticed that the trigger for Hailfire called out Hide behind Crystal when Yugiri got it but I'm assuming that's a quirk from doing this with duty support as even ACT shows them as Yugiri(YOU)

Looking at the The Burn Crystal Shardfall trigger, there's no condition for who it's on. It probably should say:

-      netRegex: { id: '0002', capture: false },
+      netRegex: { id: '0002', capture: true },
-      condition: (data) => !data.hedetet,
+      condition: (data, matches) => !data.hedetet && data.me === matches.target,

(and yes, it looks like data.hedetet in this file is set to true when the boss is not hedetet if I am reading correctly)

@Akurosia
Copy link
Contributor

Akurosia commented Nov 6, 2023

Running into the issue that ts-node is complaining that .ts is an unknown file extension

Maybe somebody can remember more than me, but I thiiiink this could be a version issue. What's your node version? (node --version) Also, does npm ls say that ts-node is 10.9.1? Also also, have you installed node globally, e.g. https://github.com/quisquous/cactbot/blob/main/CONTRIBUTING.md#commit-validation-testing-and-linting

I had the same issue with using node 20+. After i downgraded to node 18 it worked again.
Maybe we should have a list somewhere what the uspported dev environemnt version should be (node, python, whatever else is needed for compiling etc)

@quisquous
Copy link
Owner Author

Running into the issue that ts-node is complaining that .ts is an unknown file extension

Maybe somebody can remember more than me, but I thiiiink this could be a version issue. What's your node version? (node --version) Also, does npm ls say that ts-node is 10.9.1? Also also, have you installed node globally, e.g. https://github.com/quisquous/cactbot/blob/main/CONTRIBUTING.md#commit-validation-testing-and-linting

I had the same issue with using node 20+. After i downgraded to node 18 it worked again. Maybe we should have a list somewhere what the uspported dev environemnt version should be (node, python, whatever else is needed for compiling etc)

Please file an issue next time!

We do have a list. https://github.com/quisquous/cactbot#npm-and-webpack says that cactbot should work with the latest LTS version of node, and npm install should take care of most everything else. Apparently this is not true anymore with node 20+ and we should figure out if there's some way to fix this. Maybe the information about LTS (and maybe we need a Python version somewhere?) should be in the contributing guide as well.

@sleepylinde
Copy link

My node --version is v20.9.0 and ts-node is 10.9.1. So I guess I should downgrade to 18, too?

Also also, have you installed node globally, e.g.

Yeah I installed it like it's mentioned in the contributing.md

That regex for me is more to look for "interesting" lines.

Noted.

Writing a timeline is more of a subjective thing than people think.

I see! I actually didnt notice it before but the timeline I created and the one currently live have a discrepancy between the timestamps. It doesnt seem like a thing of every entry got +3 seconds, nor does the boss have any % triggers as far as I'm aware.

live:

25.8 "Hailfire" sync / 1[56]:[^:]:Hedetet:3194:/ window 25,30
...
53.9 "Shardfall" sync / 1[56]:[^:]
:Hedetet:3191:/

mine:

28.0 "Hailfire" sync / 1[56]:[^:]:Hedetet:3194:/
...
58.3 "Shardfall" sync / 1[56]:[^:]:Hedetet:3191:/

I think actually 81BC could be a repositioning ability (if the boss jumps middle when that happens?) and so it could be --middle-- instead, as other timelines do.

Yeah, looking at my foottage the boss jumps middle to cast Shardfall, so 81BC should be the repositioning.

I'm not sure about why the other 3198 lines were not included. Is that when crystals explode, or what does that represent? I forget this fight. It seems like probably they could be included.

You have to hide behind a crystal when Shardfall gets cast and afterwards the crystal explode and you have to move out of them. I guess there could be a Away from Crystal callout?

Yeah, my personal preference here is to use boss self-targeted abilities for timelines (as they are often tied to castbars and so can be used for mitigation) and to remove the player damage ability that is usually shortly after it if it's a separate ability.

Oh yeah, that makes sense.

https://github.com/quisquous/cactbot/blob/main/docs/TimelineGuide.md#timeline-file-syntax should explain it, let me know if I can explain it more than that

If I'm understanding it correctly, this line 1608.1 "Petrifaction" sync / 1[56]:[^:]*:Melusine:7B1:/ window 1610,5 looks for Petrification 1610 seconds before the timestamp 1608.1 and 5 after, to make sure cactbot is able to sync the timeline to this cast?
Also a side question for encounters with doorbosses such like p12s: the timestamps could theoretically just continue from right after p12sp1 enrage + cutscene? Looking at the file p2 starts at 1007.1 and has a window of 1100,10, so I guess I'm self answering my own question.

From your link:

It is also worth reading Shasta Kota's original guide which is still excellent.

The guide is sadly unreachable currently.

I havent had the time to look closer at triggers yet, first of all I want to understand timelines better.

@xiashtra
Copy link
Contributor

xiashtra commented Nov 8, 2023

Yeah, looking at my foottage the boss jumps middle to cast Shardfall, so 81BC should be the repositioning.

Making the boss re-position middle before starting a mechanic that requires player positioning has been a pretty common change with the Duty Support updates. I suspect it's so they can tell the bots to just go to a specific location in the room rather than trying to have them dynamically position based on wherever in the room the boss is when it does the mechanic.

I've also found that this makes it really easy to "break" a timeline by pulling the boss far from center as often as possible to force it to re-center frequently. This causes the timelines to drift and can desync them pretty severely. You can add some sync windows around these re-centering events to allow the timeline to resync if you want to make it more robust.

@quisquous
Copy link
Owner Author

I've also found that this makes it really easy to "break" a timeline by pulling the boss far from center as often as possible to force it to re-center frequently. This causes the timelines to drift and can desync them pretty severely. You can add some sync windows around these re-centering events to allow the timeline to resync if you want to make it more robust.

Oh? This sounds similar to the "p8s extend the enrage by moving the boss away" rumor that I could never get to pan out despite trying a bunch of times. The repositioning abilities happen whether or not the boss is already perfectly centered, and I haven't seen them take extra time based on distance. Do you you have examples of this?

@quisquous
Copy link
Owner Author

My node --version is v20.9.0 and ts-node is 10.9.1. So I guess I should downgrade to 18, too?

I think you could go either way. You might run into other stuff on v20 that nobody's discovered yet too, but 18 would be more consistent with what other people are running.

Writing a timeline is more of a subjective thing than people think.

I see! I actually didnt notice it before but the timeline I created and the one currently live have a discrepancy between the timestamps. It doesnt seem like a thing of every entry got +3 seconds, nor does the boss have any % triggers as far as I'm aware.

So, +3 on its own doesn't necessarily mean much, for what it's worth. On a long boss fight (probably more than a dungeon boss), absolute times can move around a bit. The important thing for me is looking at test_timeline.ts reports on a per line basis, where it's not about "is this time 3 seconds later" but instead "is the difference between when this line occurred and when the last line synced too large". Mostly trying to get a sense of "will this timeline continue to work at a basic level". What's the output of test_timeline look like against your log?

When I'm making a timeline originally, I'll look at +/- 0.5s when I have a bunch of timelines. If I'm looking at something later, I'd probably only consider +/-1s differences. Here it seems possible that 81BC got inserted and so there's now repositioning time that didn't used to exist moving everything forward.

I think actually 81BC could be a repositioning ability (if the boss jumps middle when that happens?) and so it could be --middle-- instead, as other timelines do.

Yeah, looking at my foottage the boss jumps middle to cast Shardfall, so 81BC should be the repositioning.

Yeah, if you're up for adding --middle-- for the 81BC lines into the timeline, that'd be great.

I'm not sure about why the other 3198 lines were not included. Is that when crystals explode, or what does that represent? I forget this fight. It seems like probably they could be included.

You have to hide behind a crystal when Shardfall gets cast and afterwards the crystal explode and you have to move out of them. I guess there could be a Away from Crystal callout?

Yeah, that trigger could be added, and it seems like the 3198 lines could probably be included in the timeline too if they explode at the same time.

https://github.com/quisquous/cactbot/blob/main/docs/TimelineGuide.md#timeline-file-syntax should explain it, let me know if I can explain it more than that

If I'm understanding it correctly, this line 1608.1 "Petrifaction" sync / 1[56]:[^:]*:Melusine:7B1:/ window 1610,5 looks for Petrification 1610 seconds before the timestamp 1608.1 and 5 after, to make sure cactbot is able to sync the timeline to this cast? Also a side question for encounters with doorbosses such like p12s: the timestamps could theoretically just continue from right after p12sp1 enrage + cutscene? Looking at the file p2 starts at 1007.1 and has a window of 1100,10, so I guess I'm self answering my own question.

Yeah, that's exactly it. The timeline runner has a single piece of state, the current timeline time. It moves it forward along with real time and processes logs against syncs to figure out how to adjust the timeline time to stay on track. Syncs are only active within a particular window of timeline time.

It is also worth reading Shasta Kota's original guide which is still excellent.

The guide is sadly unreachable currently.

Oh, it was working earlier this year. Here's a wayback machine link: https://web.archive.org/web/20230426121530/https://dtguilds.enjin.com/forum/m/37032836/viewthread/26353492-act-timeline-plugin

I havent had the time to look closer at triggers yet, first of all I want to understand timelines better.

Sounds good!

@xiashtra
Copy link
Contributor

xiashtra commented Nov 9, 2023

I've also found that this makes it really easy to "break" a timeline by pulling the boss far from center as often as possible to force it to re-center frequently. This causes the timelines to drift and can desync them pretty severely. You can add some sync windows around these re-centering events to allow the timeline to resync if you want to make it more robust.

Oh? This sounds similar to the "p8s extend the enrage by moving the boss away" rumor that I could never get to pan out despite trying a bunch of times. The repositioning abilities happen whether or not the boss is already perfectly centered, and I haven't seen them take extra time based on distance. Do you you have examples of this?

There seems to be 3 primary methods of having a boss re-center:

  1. The boss teleports from wherever it is to center, regardless of how far from center it is. This seems to be the method they are using in raid content lately. In this case, the timeline is unlikely to desync, since the teleport happens every time regardless of where the boss is.
  2. (Similar to 1) If the boss is not already facing center, the boss turns and faces center, and then teleports center. This method has been used in the past (e.g., E12S). If the boss is facing away from center and the rotation happens, it is sometimes possible to get very slight desync.
  3. The boss walks from it's current location to center. This is common in dungeons, and the timing of the movement is variable depending how far the boss is from center. When this method is used, it is very easy to desync the timeline by significant amounts by pulling the boss far from center before a re-centering event. I ran into this while working on some of the past Duty Support dungeon updates; Doma Castle would be a good example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants