-
Notifications
You must be signed in to change notification settings - Fork 12
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
Add timings to strats (e.g. for escape timings) #1462
Comments
In the short term, strats would only be useful for the escape, so some simplifications can happen to reduce the scale of the project:
Maybe someday this could be thorough enough to change which rooms are heated. Even if the only strats that had |
I'd like frame counts on strats but I don't want them to be inaccurate, incomplete, inconsistent, or outdated. Unless inaccurate is what we want since its more manageable to model. I'd be more interested in separately doing door to door room timings with different loadouts. But I think that is the only difference. Strat times would ensure better coverage while being useful for other purposes. Timing data is sm data so I think it has a place here. |
Yeah, thinking about this more and talking it over with Kyle, it does seem like we would need a Another thing (suggestion from Kyle) is that For doing door-to-door timings with different loadouts, there are some cases where I imagine this could blow up to some extent. I'm thinking of Mt. Everest for example. There are so many ways of moving through the room, and it's not just determined by item loadout: tech and entrance conditions also play a role. It seems like there's some trade-off between doing door-to-door timings vs. using the junctions. Door-to-door timings are easier to measure in the Practice Hack, but it would be a lot of new strats with a lot of duplication and overlap with the existing strats, which could be messy. In this case I think there could be more of a benefit to using the junctions and adding timing data to (a subset of) the existing strats, though we would want to redefine the junctions slightly to become points in the room rather than areas. I'm hoping that it won't be necessary to create separate "Enemies" vs. "No enemies" versions of strats in very many cases. I think in most cases the strats can just be written under the assumption that the enemies are there; and if it depends on the enemies being there, then it should have a |
For difficult strats, it's a good point that their effective difficulty can be changed by having a timer put on them. We could account for this on the randomizer side, e.g. maybe by applying a larger escape multiplier to high-difficulty strats. We might even consider entirely excluding strats with very high difficulty (e.g. Extreme or Insane); even if those strats had timing data I'm not sure if we would want the randomizer to require them during the escape. |
Currently, escape timings in Map Rando are defined in a JSON file that mostly just gives one timing for each pair of doors in every room: https://github.com/blkerby/MapRandomizer/blob/main/rust/data/escape_timings.json. Recently there has been interest in supporting more refined escape timings, ones that don't assume all movement items are collected, and possibly taking into account cross-room strats (e.g. to shinespark through Croc Speedway in reverse). This is a much bigger undertaking than what we've done so far with escape timings, and I think it would make sense to be part of the sm-json-data. If this is done, a main benefit would be that in Desolate seeds it would no longer be needed for all movement items to be given for the escape, and escapes could require doing trickier strats. It would also allow us to support more options for "Escape start" seeds, where you would get only a subset of the items and again might have to do trickier strats.
Kyle and I were discussing a couple possible strategies:
frames
. Ideally every strat could have a timing, but incomplete coverage can also work; strats that don't have a timing just wouldn't be logically usable in the escape.If possible, the first option seems most appealing, since having timing data on strats could have many applications, making it nice if it could stay integrated with the rest of the data. Examples of other things that could be done with it include finding optimized routes through a seed (minimizing total time) and supporting randomizer options that modify which rooms are heated.
There are a number of challenges:
"obstacleType": "enemies"
.{"hyperBeamShot": "PowerBombBlock"}
, to support different possible behavior as far as which kinds of blocks can be destroyed.frames
timing is a strat-level property, it would have to be based on the worst case among all the alternatives, which isn't ideal if the timings are substantially different. A couple ways that this could be avoided: 1) introducingframes
logical requirement (either instead of or in addition to the strat property) similar toheatFrames
,lavaFrames
, etc., 2) splitting apart the strats into simpler strats to avoid the need for "or". Overall, I tend to favor splitting apart strats because this can also help improve the clarity of strat names & notes. Aframes
logical requirement would make me a bit nervous because it could easily be forgotten in some places, which would result in unsound logic. On the other hand, there are some strats which contain many "or"s (G-mode strats being a common example), where it could be difficult to split apart without getting an exponential blow-up in the amount of strats. Adding new junction nodes could be a solution in some of those cases. In other cases we could probably tolerate just having a single worst-case timing or no timing at all. G-mode strats may be less important for escape timings anyway, since they require enemies to set up and tend to be time consuming.The way I'm envisioning this, adding timings to strats would be a long-term project that could happen in phases, starting with the lowest difficulty strats and moving up from there. If we can cover the "Basic" strats (plus Hyper Beam gate shots and maybe a few other little things), that's already enough for it to be usable in randomizers; I think we would launch it in Map Rando at that point. Adding higher difficulty strats just allows for tighter escape timings, smaller sets of placed items, and spicier tricks potentially required in the escape.
The text was updated successfully, but these errors were encountered: