-
Notifications
You must be signed in to change notification settings - Fork 380
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
Timeline improvements discussion #5619
Comments
I agree that a lot of things you list and I've listed are nice, but I also still don't feel like any of them are "this is a major unsolved problem that merits rewriting the world" either. Many of them still feel like they can be solved within the bounds of the existing format. Here's what I'm looking for:
I think I'm just trying to think practically about this. I (personally) don't feel invested in a rewrite everything project, and so if somebody wants to do it, I'd need them to drive the vast bulk of the work. Sorry if I am coming off as negative here, it's more just that I am always a practical engineer at heart (so I need to understand the motivation for larger rewrites) and also that I see my own time and energy limits (and don't want to be left holding somebody else's half-finished feature, I say as I just PR'd finishing up netparams for regexes <_<).
Yeah, this is what I meant by
The one use case of this that I have encountered so far is that I half-solved the Castrum Lacus Litore first boss "are you up or down" by injecting a "is your player name hit by an aoe" into the timeline. This sometimes doens't work (because there's too many people and you get missed). But, that's the only time this has come up for me. I think "alter the text of this timeline entry" is largely "hey we found out this was a stack earlier, and now this later thing is a spread". It's a minor nicety, but I feel like triggers largely handle this, and so it's largely fine for me if the timeline is still general. It's not impossible, but I think we could add timeline controller hooks hanging off of
I think this is less about the timeline format and more about overrides (and convenience/implementation of doing them). You could (technically but awkwardly) do this now with existing tools by hiding the other Gluttony's Augur entries and adding custom entries with the text you wanted. Another technically existing solution is that you (as a cactbot developer) could send a PR to number anything you think needs to be handled differently (like I numbered Ultimas in P12S2 so I personally could remember which ones I was mitting) and then the different text would let you do this. In terms of how to add this to the UI for everybody, I think it then gets into a correspondence problem of how to refer to this particular Gluttony's Augur (and have it continue to correspond across future changes). I deliberately sidestepped this problem by making people override the the text globally instead. Here's some ideas, though:
In either case, somebody would need to add some config UI for this. But, I think either of these is plausible within the existing timeline format. From the brief glance at whatever xml (Lemegeton?) timeline format went by (and also a long time ago cactbot request from xp that I said no to), it looks like they are solving this by adding ids to every single timeline entry. (I wonder if maybe this is what you're getting at in terms of why "ways to specify a timeline entry" is part of a discussion of timeline format.) I (personally) find this unpleasant, hard to write, hard to read, hard to review. One thing I really like about the timeline format is that it's easy to digest visually as a programmer and I don't need extra tools, and extra stuff like an id on every single line is not a desired solution for me. I also don't know that this necessarily solves the correspondence problem either, as if somebody adds a fork to a timeline or collapses a loop or something then what happens to those ids?
I don't know that any of these examples really feel that compelling to me. For Hobbes, I don't know that you need to see what the other parties are doing as you don't interact at all. Similarly, DRS has one person doing a solo fight while the other folks fight the second boss and it doesn't need to be simultaneous. Variant dungeon also ended up fine in the end and didn't need this sort of thing. The only fight that even remotely feels like multiple timelines would be helpful to me would be a8s where there's multiple robots with different push times. I think to me this feels currently like an edge case and not something to build an entire format around. Even if we did have multiple timelines, I'd also want to think about the UI to present them, as maybe we'd want a second timeline next to the first instead of squishing them together?
Yeah, I can't find it either. |
#5760 adds named labels as a draft. I think a reasonable followup here is what @xiashtra is suggesting to add "named blocks". In my mind, a named block is some number of lines in a timeline grouped together. However, its times are in a parallel universe from the normal timeline. It can't be jumped into or out of other than via jump to label. This would allow for having a bunch of encounters in a dungeon that all start at "0". This would also reduce the number of global active syncs (since you'd have a couple of syncs at the beginning rather than syncs that cover all fights). This could theoretically be used in some very hypothetical system to play multiple timelines at once. Here's an example,
|
This is pretty much exactly what I was thinking of. |
Mentioned in #5619. --------- Co-authored-by: Jonathan Garber <[email protected]>
Mentioned in #5619. --------- Co-authored-by: Jonathan Garber <[email protected]> 3f729c4
Mentioned in #5619. --------- Co-authored-by: Jonathan Garber <[email protected]> 3f729c4
Blocks are nice. I think they could be enhanced further by giving the block itself a name, rather than just relying on labels within the block. You could then have a "blockname:labelname" syntax for jumps, so that simple label names can still be re-used for multiple fights (like "start"). If a jump is unqualified, a matching label within the same block would take precedence, i.e. "start" would jump to the start of the current block, while "phase2:start" would jump to "start" in "phase2". Maybe have a "blockname:" syntax to just go to the start of a block. Regarding state, loops, branching, etc: I see the value in having a fancier syntax, especially with regards to branching mechanics and loops. For that, a "composition" approach might be nice. For something like P8S1, rather than the current approach of having two timelines copy-pasted with times changed, you could just make each mechanic its own named block, and then instead of two gigantic timelines, you just have 8 or so lines for each one, and you don't have to worry about editing both if you want to add or correct something. A way to handle some of the delayed mechanics could be a "mixin" approach, where you tell it to add a named block to the current timeline entries, rather than jumping to it. However,now that we've established that there's plenty of technical ways that timelines could be better, there's the question of how fancy they should get. One of the popular uses of timeline editing is to throw your mitigations and such onto the timeline. You might need to have a different mit plan for different branches (e.g. P8S dog first vs snake first), or use different mits on different iterations of a looping mechanic. Then, as mentioned in other comments, you have to have some way of visualizing all of that in an editor. If new functionality can be unrolled entirely with pre-processing, then it shouldn't affect users much, since you could just pre-unroll the whole thing and let them edit as it was previously, while still reducing the effort.
There are some ways to handle this which range from decent to downright cursed (JCEF, J2V8, only allow JS syntax that is also valid Groovy, etc) but I'd be more worried about the fact that this sounds like it would involve |
I'm breaking this off from #5577.
Restating the discussion here:
@valarnin comment link
@quisquous comment link
@valarnin comment link
@xiashtra comment link
The text was updated successfully, but these errors were encountered: