diff --git a/helpers.json b/helpers.json index 02eead07b4..df2f4ed029 100644 --- a/helpers.json +++ b/helpers.json @@ -285,6 +285,27 @@ { "name": "h_ShinesparksCostEnergy", "requires": [] + }, + { + "name": "h_equipmentScreenCycleFrames", + "requires": [ + {"cycleFrames": 300} + ], + "note": [ + "This represents the amount of time that could be required in the pause menu to equip or unequip items." + ], + "devNote": [ + "This is not perfectly precise as the time spent in the pause menu can vary,", + "depending on which items are collected and which items are being equipped or unequipped.", + "It is intended as a typical value for common actions such as performing a Gravity jump or mid-air Spring Ball jump." + ] + }, + { + "name": "h_doubleEquipmentScreenCycleFrames", + "requires": [ + "h_equipmentScreenCycleFrames", + "h_equipmentScreenCycleFrames" + ] } ] }, diff --git a/region/brinstar/red/Alpha Power Bomb Room.json b/region/brinstar/red/Alpha Power Bomb Room.json index ad9b57d57c..437e3fa321 100644 --- a/region/brinstar/red/Alpha Power Bomb Room.json +++ b/region/brinstar/red/Alpha Power Bomb Room.json @@ -302,6 +302,21 @@ } } }, + { + "link": [1, 1], + "name": "Boyon Farm", + "requires": [ + "canBePatient", + "h_useMorphBombs", + {"resetRoom": {"nodes": [1]}}, + {"cycleFrames": 4930} + ], + "clearsObstacles": ["A"], + "resetsObstacles": ["B"], + "farmCycleDrops": [ + {"enemy": "Boyon", "count": 4} + ] + }, { "id": 9, "link": [1, 1], diff --git a/region/brinstar/red/Below Spazer.json b/region/brinstar/red/Below Spazer.json index db5431937f..10aac0fe78 100644 --- a/region/brinstar/red/Below Spazer.json +++ b/region/brinstar/red/Below Spazer.json @@ -504,11 +504,19 @@ "link": [2, 2], "name": "Cacatac Farm", "requires": [ - {"resetRoom": { - "nodes": [1, 2] - }}, - {"partialRefill": {"type": "Energy", "limit": 100}}, - {"partialRefill": {"type": "Super", "limit": 5}} + {"or": [ + {"and": [ + {"resetRoom": {"nodes": [1]}}, + {"cycleFrames": 300} + ]}, + {"and": [ + {"resetRoom": {"nodes": [2]}}, + {"cycleFrames": 240} + ]} + ]} + ], + "farmCycleDrops": [ + {"enemy": "Cacatac", "count": 1} ] }, { diff --git a/region/brinstar/red/Beta Power Bomb Room.json b/region/brinstar/red/Beta Power Bomb Room.json index 593196b2bc..ee7d53c69a 100644 --- a/region/brinstar/red/Beta Power Bomb Room.json +++ b/region/brinstar/red/Beta Power Bomb Room.json @@ -351,6 +351,29 @@ "FIXME: It is possible to use artificial morph to lure the hoppers to the left to then use most of the runway out of the room." ] }, + { + "link": [1, 1], + "name": "Sidehopper Farm", + "requires": [ + {"resetRoom": {"nodes": [1]}}, + {"or": [ + {"and": [ + "ScrewAttack", + {"cycleFrames": 240} + ]}, + {"and": [ + "canDodgeWhileShooting", + "Plasma", + {"cycleFrames": 380} + ]} + ]} + ], + "clearsObstacles": ["A"], + "resetsObstacles": ["B"], + "farmCycleDrops": [ + {"enemy": "Sidehopper", "count": 2} + ] + }, { "id": 3, "link": [1, 1], diff --git a/region/brinstar/red/Caterpillar Room.json b/region/brinstar/red/Caterpillar Room.json index 2ef56f14c5..03da7a9e62 100644 --- a/region/brinstar/red/Caterpillar Room.json +++ b/region/brinstar/red/Caterpillar Room.json @@ -725,6 +725,114 @@ "Let the Zero lead through the morph tunnel or wait for the it to get very close to Samus before touching the scroll block at the exit." ] }, + { + "link": [2, 2], + "name": "Zero Farm", + "requires": [ + {"or": [ + {"and": [ + {"resetRoom": {"nodes": [2]}}, + {"cycleFrames": 460} + ]}, + {"and": [ + {"resetRoom": {"nodes": [4]}}, + {"cycleFrames": 660}, + {"or": [ + "canWalljump", + "HiJump", + {"and": [ + "canDoubleBombJump", + {"cycleFrames": 140} + ]}, + {"and": [ + "canSpringBallJumpMidAir", + {"cycleFrames": 40}, + "h_doubleEquipmentScreenCycleFrames" + ]} + ]} + ]}, + {"and": [ + {"resetRoom": {"nodes": [1]}}, + {"cycleFrames": 840}, + {"or": [ + "canWalljump", + "HiJump", + "SpaceJump", + {"and": [ + "canDoubleBombJump", + {"cycleFrames": 140}, + {"or": [ + {"cycleFrames": 140}, + "h_crouchJumpDownGrab" + ]} + ]}, + {"and": [ + "canSpringBallJumpMidAir", + {"cycleFrames": 40}, + "h_doubleEquipmentScreenCycleFrames", + {"or": [ + "h_crouchJumpDownGrab", + {"and": [ + {"cycleFrames": 40}, + "h_doubleEquipmentScreenCycleFrames" + ]} + ]} + ]} + ]} + ]}, + {"and": [ + {"resetRoom": {"nodes": [6]}}, + {"cycleFrames": 1900}, + {"or": [ + "canWalljump", + "HiJump", + "SpaceJump", + {"and": [ + "canDoubleBombJump", + {"cycleFrames": 140}, + {"or": [ + {"cycleFrames": 140}, + "h_crouchJumpDownGrab" + ]} + ]}, + {"and": [ + "canSpringBallJumpMidAir", + {"cycleFrames": 40}, + "h_doubleEquipmentScreenCycleFrames", + {"or": [ + "h_crouchJumpDownGrab", + {"and": [ + {"cycleFrames": 40}, + "h_doubleEquipmentScreenCycleFrames" + ]} + ]} + ]} + ]} + ]} + ]}, + {"or": [ + "Wave", + "Plasma", + {"and": [ + "Spazer", + {"cycleFrames": 60} + ]}, + {"and": [ + "ScrewAttack", + {"cycleFrames": 70} + ]}, + {"cycleFrames": 130} + ]} + ], + "clearsObstacles": ["B"], + "resetsObstacles": ["A"], + "farmCycleDrops": [ + {"enemy": "Zero", "count": 3} + ], + "devNote": [ + "Resetting at the bottom of the room (node 3) is covered in a separate 3->3 strat." + ] + }, { "id": 27, "link": [2, 2], @@ -1358,14 +1466,36 @@ "link": [3, 3], "name": "Zero Farm", "requires": [ - {"resetRoom": { - "nodes": [2, 3] - }}, - {"refill": ["PowerBomb"]} + {"resetRoom": {"nodes": [3]}}, + {"or": [ + {"and": [ + "Grapple", + {"cycleFrames": 265} + ]}, + {"and": [ + "Wave", + {"cycleFrames": 230} + ]}, + {"and": [ + "Plasma", + {"cycleFrames": 230} + ]}, + {"and": [ + "Spazer", + {"cycleFrames": 260} + ]}, + {"and": [ + "ScrewAttack", + {"cycleFrames": 290} + ]}, + {"cycleFrames": 350} + ]} ], "clearsObstacles": ["B"], "resetsObstacles": ["A"], - "devNote": "FIXME: Other nodes could be used to reset the room, with additional requirements." + "farmCycleDrops": [ + {"enemy": "Zero", "count": 3} + ] }, { "id": 55, @@ -1689,13 +1819,61 @@ "link": [4, 4], "name": "Cacatac Farm", "requires": [ - {"resetRoom": { - "nodes": [4] - }}, - {"refill": ["Energy", "Super"]} + {"or": [ + {"and": [ + {"resetRoom": { + "nodes": [4] + }}, + {"cycleFrames": 210} + ]}, + {"and": [ + {"or": [ + {"and": [ + {"resetRoom": { + "nodes": [1, 2] + }}, + {"cycleFrames": 400} + ]}, + {"and": [ + {"resetRoom": { + "nodes": [3] + }}, + {"cycleFrames": 860} + ]}, + {"and": [ + {"resetRoom": { + "nodes": [6] + }}, + {"cycleFrames": 1470} + ]} + ]}, + {"or": [ + "canWalljump", + "HiJump", + "SpaceJump", + {"and": [ + "canDoubleBombJump", + {"cycleFrames": 140} + ]}, + {"and": [ + "canSpringBallJumpMidAir", + {"cycleFrames": 40}, + "h_doubleEquipmentScreenCycleFrames" + ]} + ]} + ]} + ]}, + {"or": [ + "Wave", + "Spazer", + "Plasma", + {"cycleFrames": 40} + ]} ], "resetsObstacles": ["A", "B"], - "devNote": "FIXME: Other nodes could be used to reset the room, with additional requirements." + "farmCycleDrops": [ + {"enemy": "Cacatac", "count": 2} + ] }, { "id": 74, @@ -1920,19 +2098,51 @@ "requires": [ {"ammo": {"type": "Super", "count": 1}}, "Morph", + {"resetRoom": { + "nodes": [5] + }}, + {"cycleFrames": 1340}, {"or": [ "canWalljump", "HiJump", - "SpaceJump" + "SpaceJump", + {"and": [ + "canDoubleBombJump", + {"cycleFrames": 140}, + {"or": [ + {"cycleFrames": 140}, + "h_crouchJumpDownGrab" + ]} + ]}, + {"and": [ + "canSpringBallJumpMidAir", + {"cycleFrames": 40}, + "h_doubleEquipmentScreenCycleFrames", + {"or": [ + "h_crouchJumpDownGrab", + {"and": [ + {"cycleFrames": 40}, + "h_doubleEquipmentScreenCycleFrames" + ]} + ]} + ]} ]}, - {"resetRoom": { - "nodes": [5] - }}, - {"refill": ["Energy", "PowerBomb"]}, - {"partialRefill": {"type": "Super", "limit": 10}} + {"or": [ + "Wave", + "Spazer", + "Plasma", + {"cycleFrames": 250} + ]} ], "resetsObstacles": ["A", "B"], - "devNote": "It is possible to roll off of the platform above to avoid a mid-air morph." + "farmCycleDrops": [ + {"enemy": "Cacatac", "count": 2}, + {"enemy": "Zero", "count": 3} + ], + "devNote": [ + "It is possible to roll off of the platform above to avoid a mid-air morph.", + "FIXME: add a Cac-only farm since it can be done with fewer requirements." + ] }, { "id": 87, diff --git a/region/brinstar/red/Hellway.json b/region/brinstar/red/Hellway.json index c084325ab9..31a926f279 100644 --- a/region/brinstar/red/Hellway.json +++ b/region/brinstar/red/Hellway.json @@ -87,7 +87,25 @@ "link": [1, 1], "name": "Zebbo Farm", "requires": [ - {"refill": ["Energy", "Missile", "Super"]} + {"cycleFrames": 160} + ], + "farmCycleDrops": [ + {"enemy": "Zebbo", "count": 1} + ] + }, + { + "link": [1, 1], + "name": "Double Zebbo Farm", + "requires": [ + "canDodgeWhileShooting", + {"cycleFrames": 160} + ], + "farmCycleDrops": [ + {"enemy": "Zebbo", "count": 2} + ], + "note": [ + "Stand on the platform between the right-most two Zebbo spawners,", + "and walk back and forth to farm them simultaneously." ] }, { diff --git a/region/brinstar/red/Red Brinstar Fireflea Room.json b/region/brinstar/red/Red Brinstar Fireflea Room.json index c5dc327880..23b99b3bcb 100644 --- a/region/brinstar/red/Red Brinstar Fireflea Room.json +++ b/region/brinstar/red/Red Brinstar Fireflea Room.json @@ -165,6 +165,20 @@ } } }, + { + "link": [1, 1], + "name": "Waver Farm", + "requires": [ + {"resetRoom": { + "nodes": [1] + }}, + {"cycleFrames": 1150} + ], + "resetsObstacles": ["A"], + "farmCycleDrops": [ + {"enemy": "Waver", "count": 1} + ] + }, { "id": 4, "link": [1, 1], @@ -633,21 +647,22 @@ { "id": 34, "link": [2, 2], - "name": "Fireflea Farm", + "name": "Firefleas and Waver Farm", "requires": [ {"resetRoom": { "nodes": [2] }}, - {"refill": ["PowerBomb"]}, + {"cycleFrames": 630}, {"or": [ - {"and": [ - "canDodgeWhileShooting", - {"refill": ["Energy"]} - ]}, - {"partialRefill": {"type": "Energy", "limit": 260}} + "canDodgeWhileShooting", + {"cycleFrames": 600} ]} ], - "resetsObstacles": ["A"] + "resetsObstacles": ["A"], + "farmCycleDrops": [ + {"enemy": "Fireflea", "count": 4}, + {"enemy": "Waver", "count": 1} + ] }, { "id": 35, diff --git a/region/brinstar/red/Red Tower.json b/region/brinstar/red/Red Tower.json index 6c7e6e0399..abc0c03ef0 100644 --- a/region/brinstar/red/Red Tower.json +++ b/region/brinstar/red/Red Tower.json @@ -342,15 +342,60 @@ { "id": 1, "link": [1, 1], - "name": "Geega and Beetom Farm", + "name": "Beetom Farm", "requires": [ + {"or": [ + {"and": [ + {"resetRoom": {"nodes": [1]}}, + {"cycleFrames": 570} + ]}, + {"and": [ + {"resetRoom": {"nodes": [1]}}, + "ScrewAttack", + {"cycleFrames": 480} + ]}, + {"and": [ + {"resetRoom": {"nodes": [3, 4]}}, + "HiJump", + "canWalljump", + {"cycleFrames": 800} + ]}, + {"and": [ + {"resetRoom": {"nodes": [5]}}, + {"notable": "Hero Shot"}, + {"or": [ + {"and": [ + "ScrewAttack", + "canConsecutiveWalljump", + {"cycleFrames": 1080} + ]}, + {"and": [ + "canStaggeredWalljump", + {"cycleFrames": 1770} + ]} + ]} + ]} + ]}, {"or": [ "ScrewAttack", "h_useMorphBombs", - {"resourceCapacity": [{"type": "Missile", "count": 1}]}, - {"resourceCapacity": [{"type": "Super", "count": 1}]} - ]}, - {"refill": ["Energy", "Missile", "Super", "PowerBomb"]} + "h_usePowerBomb", + {"and": [ + {"or": [ + {"resourceCapacity": [{"type": "Missile", "count": 1}]}, + {"resourceCapacity": [{"type": "Super", "count": 1}]} + ]}, + {"cycleFrames": 500} + ]} + ]} + ], + "farmCycleDrops": [ + {"enemy": "Beetom", "count": 1} + ], + "resetsObstacles": ["A", "B"], + "devNote": [ + "Using a Power Bomb to farm the Beetom is only useful if Power Bomb drops are modified to give more than 1.", + "FIXME: Other options for resetting the room at the top and bottom nodes are possible." ] }, { @@ -358,7 +403,21 @@ "link": [1, 1], "name": "Geega Farm", "requires": [ - {"refill": ["Energy", "Missile", "Super"]} + {"cycleFrames": 140} + ], + "farmCycleDrops": [ + {"enemy": "Geega", "count": 1} + ] + }, + { + "link": [1, 1], + "name": "Double Geega Farm", + "requires": [ + "canDodgeWhileShooting", + {"cycleFrames": 200} + ], + "farmCycleDrops": [ + {"enemy": "Geega", "count": 2} ] }, { @@ -1237,6 +1296,23 @@ } } }, + { + "link": [2, 2], + "name": "Beetom Farm", + "requires": [ + {"resetRoom": {"nodes": [2]}}, + {"cycleFrames": 300}, + "h_usePowerBomb" + ], + "farmCycleDrops": [ + {"enemy": "Beetom", "count": 1} + ], + "clearsObstacles": ["A"], + "resetsObstacles": ["B"], + "devNote": [ + "This strat is only useful if Power Bomb drops are modified to give more than 1." + ] + }, { "id": 43, "link": [2, 2], diff --git a/region/brinstar/red/Skree Boost Room.json b/region/brinstar/red/Skree Boost Room.json index 9c36e136e6..5de2842010 100644 --- a/region/brinstar/red/Skree Boost Room.json +++ b/region/brinstar/red/Skree Boost Room.json @@ -410,6 +410,25 @@ }, "bypassesDoorShell": true }, + { + "link": [2, 2], + "name": "Skree Farm", + "requires": [ + {"or": [ + {"and": [ + {"resetRoom": {"nodes": [1]}}, + {"cycleFrames": 380} + ]}, + {"and": [ + {"resetRoom": {"nodes": [2]}}, + {"cycleFrames": 220} + ]} + ]} + ], + "farmCycleDrops": [ + {"enemy": "Skree", "count": 2} + ] + }, { "id": 19, "link": [2, 2],