Brinstar fixes - #2957
Conversation
| "requires": [ | ||
| "h_ZebesIsAwake" | ||
| "h_ZebesIsAwake", | ||
| {"obstaclesNotCleared": ["C"]} |
There was a problem hiding this comment.
I think clearing C can keep one alive if you want to. But I don't recall.
There was a problem hiding this comment.
Could be true, it just might be a bit of a fragile assumption. If we want to go with that, we should probably document exactly what it means for the obstacle to be "cleared" as a note in the obstacle definition and make sure it is consistently followed everywhere that refers to the obstacle.
I think in a lot of places we're implicitly leaning on the fact that you could reset the room to respawn enemies; but this might not be valid in case the next room is not free to reset (e.g. if it is heated, or has a door that locks behind you).
There was a problem hiding this comment.
The requirements are skill and strat dependent. If we want to make tons of obstacles in every room, that's an option. This room could have an obstacle for one hopper alive. And then maybe eventually it would need to be split into which one is alive, converting it into 3 obstacles ....
But if we do go the route of trying to "fix" all these, by adding obstaclesNotCleared in lots of places, we might be losing some strats that are basically always fine. For instance in this scenario, you should always be able to survive resetting the room after you killed 3 hoppers. As for asymmetric door locks, I wouldnt say that they are even close to being sound within this project right now.
There was a problem hiding this comment.
For asymmetric door locks, I think maybe a reasonable approach for now could be to aim for soundness but not full completeness. So when it comes to the fact that normally you can reset a room at a door that you're about to exit through, we could "assume" this for the purposes of not going out of our way to create extra obstacles or strats to provide alternatives to the room reset, but maybe not assume it when it comes to leaving out requirements (e.g. an "obstaclesNotCleared" or "resetRoom" requirement.
There was a problem hiding this comment.
After thinking about it more, I would be ok dropping these new "obstaclesNotCleared" on G-mode setups where normally you could just reset the room or keep an enemy alive. It makes sense that these aren't necessarily errors since it seems like an intentional, common pattern; that kind of puts them outside the scope of what these PRs are trying to do. So maybe it's best to hold off on those and they could always be addressed later if we run into problems or decide we want to support asymmetric doors.
| {"resourceCapacity": [{"type": "ReserveEnergy", "count": 199}]} | ||
| ]} | ||
| ]}, | ||
| {"obstaclesCleared": ["C"]} |
There was a problem hiding this comment.
I think this one might be kind of similar. I think you kind of need the ability to clear C to use the runway. But you keep one alive. And since C was already cleared it didnt need to be cleared again.
Same in the strat below
| "devNote": [ | ||
| "FIXME: Lumping frozen and dead together is questionable,", | ||
| "because some strats require the Beetoms to be alive.", | ||
| "The frozen state might not need to be an obstacle." |
There was a problem hiding this comment.
If you have ice, clearing A is free. I guess the only concern is that you CF in here and need to use ice to get out. but the door should be resettable.
| { | ||
| "id": 291, | ||
| "link": [10, 13], | ||
| "name": "Direct G-Mode, Blue Suit Spark, Overload PLMs with Chozo Ball Item", | ||
| "entranceCondition": { | ||
| "comeInWithGMode": { | ||
| "mode": "direct", | ||
| "morphed": false | ||
| } | ||
| }, | ||
| "requires": [ | ||
| "Morph", | ||
| {"blueSuitShinecharge": {}}, | ||
| {"or": [ | ||
| {"shinespark": {"frames": 68, "excessFrames": 8}}, | ||
| {"and": [ | ||
| "HiJump", | ||
| {"shinespark": {"frames": 64, "excessFrames": 8}} | ||
| ]}, | ||
| {"and": [ | ||
| "HiJump", | ||
| "canSpeedyJump", | ||
| {"shinespark": {"frames": 60, "excessFrames": 8}} | ||
| ]} | ||
| ]} | ||
| ], | ||
| "flashSuitChecked": true, | ||
| "blueSuitChecked": true, | ||
| "note": [ | ||
| "Spark up the shaft, then shoot the Chozo ball to overload PLMs. Then go down, through the bomb blocks and tunnel, then exit G-mode." | ||
| ], | ||
| "devNote": [ | ||
| "FIXME: Overloading PLMs requires the item to be not collected.", | ||
| "The apparent unsoundness has limited impact since you could X-ray climb instead.", | ||
| "There are many ways to get to the top aside from blue suit shinecharge." | ||
| ] | ||
| }, |
There was a problem hiding this comment.
This strat is only useful if you can't do a short x-ray climb. But you clearly already have high-level g-mode+blue. And the strat is unsound because the item needs to be not collected.
I propose deleting the strat, but if you want to keep it for "x-ray climb might be disabled" then add a item not collected+loss of access
| }, |
There was a problem hiding this comment.
It could be deleted. But I think there other ways of reaching the Chozo ball that could be more useful (though still canRiskPermanentLossOfAccess), for example using wall jump or Space Jump to get up there.
There was a problem hiding this comment.
Those should be there. If they're missing I can work on adding them
There was a problem hiding this comment.
Those would only be useful without a blue suit though - if you have blue, there's no reason to overload PLMs, you can just use the scroll block in the tunnel.... But i guess that kind of gets back to my first impression comment - then you could just x-ray climb.... Let me know if you want them added
| "link": [1, 1], | ||
| "name": "G-Mode Setup - Get Hit By Beetom", | ||
| "requires": [ | ||
| {"obstaclesNotCleared": ["A"]}, |
There was a problem hiding this comment.
guess im not sure about these kinds of things. Do we really want to ensure every enemy is not dead in the future? because you can already reset the room since it's a g-mode setup. This would only be useful if the next room cant be reset back here but I don't think there are examples like that. And it would only be useful if you need to grab the item and you cant dodge the beetoms and the only way you can kill them to grab the item is with a PB.
| "name": "G-Mode Setup - Get Hit By Sidehopper", | ||
| "requires": [], | ||
| "requires": [ | ||
| {"obstaclesNotCleared": ["A"]} |
There was a problem hiding this comment.
There's not a way to do mission impossible without killing the hoppers. At least, that's what my to-do list has said for years.
There was a problem hiding this comment.
Under that assumption, if you came into the room and did Mission Impossible, it would not be sound to leave with a G-mode setup without resetting the room first, so the "obstaclesNotCleared" serves the purpose of enforcing this?
There was a problem hiding this comment.
I think I worded my original comment in a confusing way.
All of the mission impossible strats require A cleared, which I don't think is necessary.
It's not strongly related to this line of code, but something that has been on my to-do list for years.
| { | ||
| "id": "A", | ||
| "name": "Power Bomb Blocks", | ||
| "name": "Power Bomb Blocks and Beetom", |
There was a problem hiding this comment.
This cant be for beetoms as well. You can move the beetoms out of the way before breaking the PB blocks
There was a problem hiding this comment.
Good point, I'm thinking we probably need to split the Power Bomb blocks and Beetoms into separate obstacles.
There was a problem hiding this comment.
Ok I pushed another commit splitting the PB blocks and Beetom into separate obstacles.
| "link": [1, 2], | ||
| "name": "Frozen Beetom X-Ray Climb with Morph", | ||
| "requires": [ | ||
| {"obstaclesNotCleared": ["A"]}, |
There was a problem hiding this comment.
If A is broken this whole strat is pointless
| "link": [1, 1], | ||
| "name": "Leave With Runway - Frozen Beetom", | ||
| "requires": [ | ||
| {"obstaclesNotCleared": ["A"]}, |
There was a problem hiding this comment.
you can reset the room here
| "link": [1, 9], | ||
| "name": "Frozen Beetom Ice Climb", | ||
| "requires": [ | ||
| {"obstaclesNotCleared": ["A"]}, |
There was a problem hiding this comment.
This one is a problem. But i still dont like the obstacle being both objects
Continuing through a pass of AI review, a couple noteworthy soundness issues that are fixed here:
The theme continues that most of the errors found are obstacle-related. And there are some
obstaclesNotClearedthat we could maybe rationalize as not really needed, but it seems safer to put them in.