-
Notifications
You must be signed in to change notification settings - Fork 383
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: add forcejump
timeline command
#5577
Conversation
I'll leave this up for another week or so. If anybody has any opinions here on either top-level direction or implementation details (@JLGarber? @valarnin?), please feel free to chime in (or ask for more time if you want it too!) I ended up going with One is just naming: sometimes the jump is forwards (such as when we have a branch into A and B and then A and B come back together again into a common timeline), and so it's not always a loop jumping backwards (where eventually you'd hit the The other reason is that while implementing the lookahead (and also in discussion on #5144), I realized that it got confusing to try to think about what happens if the time got past the I think the only downside to this is that if you have a I guess one final alternative here is that we could add a fake sync in at the jump destination as well such that after you forcejumped, if you see a belated sync from the forcejump point, it would adjust your timing. This is ... a bit weird to think about code-wise, but I could do it. |
I guess my two points are:
|
Uh, when and who is reworking this format? I haven't seen any momentum or discussion on this front, and personally haven't heard enough pain points to understand the motivation here. EDIT: Sorry for the surprise on my part, but I was caught off guard with this sentiment. The only discussion on my radar is this discord discussion: https://discord.com/channels/551474815727304704/594899820976668673/1032391897056022581. It included some discussion that locrian working on a new timeline format for lemegeton (which I asked to see, but didn't get shared; I think I saw it it once elsewhere and if that's what it is it's very XML/id heavy and hard to read; locrian would probably say "you're not supposed to read the raw format" but I think we continue to differ on the value of that). I didn't come away from that discussion thinking that "somebody will make a new timeline format and convert all timelines and tooling before 7.0". In that same discord conversation you say "The timeline as it exists now is very, very fixed and inflexible. It would probably benefit from a significant rewrite", but it's not clear to me what your pain points are such that there would be benefits from a rewrite. (My complaints about the timeline code are largely about the the timeline controller and not the timeline format or parser.) What's on your mind, specifically? Here are various issues I know about with timelines (in order of my own priority?):
Things I don't think we should change:
I feel a little bit "bought in" to the current timeline format. We've got make_timeline tools for both network log files and fflogs. We've got test_timeline. We've got syntax highlighting. We've got ~240 existing timelines. Mostly my feeling is that if there's truly a need for a new timeline format, I'd like to understand what the needs are, why the current timeline format can't satisfy it, and what the plan is for converting the old timelines and the tooling to the new format. As for |
Rather than adding a `loop`, add a variant of `jump` called `forcejump` to the timeline language. If the sync does not occur, the jump will always happen when the time passes. This allows the timeline controller to automatically add loop lookahead rather than manually specifing it. There's some manual testing of this in the Frankenstein manual `test.txt` test case. To track this, `nextEvent` now has a whole bunch more state to track where it is in the lookahead so that when adding additional events as timer bars, it doesn't duplicate its efforts. Additionally, since the same event could be added twice (or more) times on the screen, they need to have different ids (now strings instead of numbers, that include the "jump count" of the number of times we've gone through a lookahead jump to differentiate them from their pre-jump selves). Similarly, they also need different sort keys, although this is kind of a hack for now. This also adds some grumpy documentation of a bunch of issues found in the code and potential followups. Sorry that this code is a mess, but I didn't want to rewrite the world at this time. Closes #5144.
209fb56
to
9517cf7
Compare
I went ahead and did this. There is now an extra synthetic sync after force jumping that contains any "overhang window" time. If there's ever any sync or jump (or the window expires naturally), the synthetic sync will be removed. |
I think my biggest issues with the current format (aside from what you already mentioned) can be summarized as:
As for discussion about a new format, I remember some other conversation in Discord where some new example formats were thrown about, something about a yml type format and something else that I can't recall off the top of my head. Discord search is just as bad as always though and I can't find them. |
I haven't thought too much about what would be nice to have in the timeline format, but being able to jump to a label instead of a time would definitely be on the list. It's very easy to modify a timeline and forget to adjust the jumps currently. It also feels kind of hacky right now the way encounters in the same zone have to be separated by arbitrarily increasing the times of the subsequent encounters. If there was a way to say, label an encounter block and then jump to that block at the appropriate time, instead of increasing the later encounters by +1000, +2000, etc., like we currently do. Bozjan Southern Front and Zadnor are good examples of where it would be really useful. |
I split off an issue in #5619 to discuss further improvements rather than it being trapped in a PR that will be harder to find in the future. In terms of this issue, my feeling is that the future falls into one of these buckets:
|
Hey y'all, this has kinda been sitting for ~2.5w without much feedback. Not that there's true urgency, but there were other timeline things I was interested in doing and felt like it made sense to take care of this one first. If any of y'all are busy but want to take a closer look at that, that's fine. Just let me know what your schedule looks like. Otherwise, I'll likely plan on landing this in the next week barring any major objections. |
Sorry, I don't really have much to offer beyond "this seems to make sense, let's land it and see what breaks". As far as using this to abstract away the whole lookahead process for fixed timelines, I can get behind that. To be clear, when the comment notes:
Therefore, to handle something like Ultima Warrior in Fractal Continuum (hard), we would still have to use the current unrolled lookahead, right? |
Yeah, this doesn't handle that. I think a potential followup here is to add a |
I'm in the same camp as others -- conceptually it sounds like a useful, well-thought-out addition. It sounds like |
Sorry about the lack of feedback on my end, I've been sick the past two weeks or so. I think this is fine to merge as-is as well, and we can continue discussion in the issue you opened for further adjustments to timeline format when I've got the mental capacity for it again. |
No worries! Hope you feel better! |
Rather than adding a `loop`, add a variant of `jump` called `forcejump` to the timeline language. If the sync does not occur, the jump will always happen when the time passes. This allows the timeline controller to automatically add loop lookahead rather than manually specifing it. There's some manual testing of this in the Frankenstein manual `test.txt` test case. To track this, `nextEvent` now has a whole bunch more state to track where it is in the lookahead so that when adding additional events as timer bars, it doesn't duplicate its efforts. Additionally, since the same event could be added twice (or more) times on the screen, they need to have different ids (now strings instead of numbers, that include the "jump count" of the number of times we've gone through a lookahead jump to differentiate them from their pre-jump selves). Similarly, they also need different sort keys, although this is kind of a hack for now. This also adds some grumpy documentation of a bunch of issues found in the code and potential followups. Sorry that this code is a mess, but I didn't want to rewrite the world at this time. Closes #5144. 159fdcd
Rather than adding a `loop`, add a variant of `jump` called `forcejump` to the timeline language. If the sync does not occur, the jump will always happen when the time passes. This allows the timeline controller to automatically add loop lookahead rather than manually specifing it. There's some manual testing of this in the Frankenstein manual `test.txt` test case. To track this, `nextEvent` now has a whole bunch more state to track where it is in the lookahead so that when adding additional events as timer bars, it doesn't duplicate its efforts. Additionally, since the same event could be added twice (or more) times on the screen, they need to have different ids (now strings instead of numbers, that include the "jump count" of the number of times we've gone through a lookahead jump to differentiate them from their pre-jump selves). Similarly, they also need different sort keys, although this is kind of a hack for now. This also adds some grumpy documentation of a bunch of issues found in the code and potential followups. Sorry that this code is a mess, but I didn't want to rewrite the world at this time. Closes #5144. 159fdcd
Rather than adding a
loop
, add a variant ofjump
calledforcejump
to the timeline language. If the sync does not occur, the jump will always happen when the time passes. This allows the timeline controller to automatically add loop lookahead rather than manually specifing it.There's some manual testing of this in the Frankenstein manual
test.txt
test case.To track this,
nextEvent
now has a whole bunch more state to track where it is in the lookahead so that when adding additional events as timer bars, it doesn't duplicate its efforts.Additionally, since the same event could be added twice (or more) times on the screen, they need to have different ids (now strings instead of numbers, that include the "jump count" of the number of times we've gone through a lookahead jump to differentiate them from their pre-jump selves). Similarly, they also need different sort keys, although this is kind of a hack for now.
This also adds some grumpy documentation of a bunch of issues found in the code and potential followups.
Sorry that this code is a mess, but I didn't want to rewrite the world at this time.
Closes #5144.