diff --git a/region/norfair/west/Business Center.json b/region/norfair/west/Business Center.json index dd23e2a971..16d85f1a17 100644 --- a/region/norfair/west/Business Center.json +++ b/region/norfair/west/Business Center.json @@ -4245,13 +4245,40 @@ "link": [8, 8], "name": "Sova Farm", "requires": [ - {"resetRoom": { - "nodes": [1, 2, 3, 4, 5, 6, 7] - }}, - {"partialRefill": {"type": "Energy", "limit": 500}}, - {"partialRefill": {"type": "Super", "limit": 10}}, - {"partialRefill": {"type": "Missile", "limit": 24}} - ] + {"or": [ + {"and": [ + {"resetRoom": {"nodes": [1, 6]}}, + {"cycleFrames": 660} + ]}, + {"and": [ + {"resetRoom": {"nodes": [2]}}, + {"cycleFrames": 670} + ]}, + {"and": [ + {"resetRoom": {"nodes": [3, 5]}}, + {"cycleFrames": 630} + ]}, + {"and": [ + {"resetRoom": {"nodes": [4]}}, + {"cycleFrames": 750} + ]}, + {"and": [ + {"resetRoom": {"nodes": [7]}}, + {"cycleFrames": 1700} + ]} + ]}, + {"or": [ + "Spazer", + "Wave", + "Plasma", + {"and": [ + "Grapple", + {"cycleFrames": 120} + ]}, + {"cycleFrames": 150} + ]} + ], + "farmCycleDrops": [{"enemy": "Sova", "count": 6}] }, { "id": 160, diff --git a/region/norfair/west/Crocomire Escape.json b/region/norfair/west/Crocomire Escape.json index 0a4d7b70a7..fe84db2fa5 100644 --- a/region/norfair/west/Crocomire Escape.json +++ b/region/norfair/west/Crocomire Escape.json @@ -799,6 +799,89 @@ "collectsItems": [3], "flashSuitChecked": true }, + { + "link": [2, 2], + "name": "Geruta Farm", + "requires": [ + {"resetRoom": {"nodes": [2]}}, + "h_heatProof", + {"cycleFrames": 300}, + {"or": [ + "Plasma", + "ScrewAttack", + "Wave", + "Spazer", + "canPseudoScrew", + {"cycleFrames": 90} + ]} + ], + "farmCycleDrops": [{"enemy": "Geruta", "count": 1}], + "resetsObstacles": ["A"] + }, + { + "link": [2, 2], + "name": "Dragon Farm (Lava Dive)", + "requires": [ + {"resetRoom": {"nodes": [2]}}, + "h_heatProof", + "h_lavaProof", + "Gravity", + {"cycleFrames": 500}, + {"or": [ + "ScrewAttack", + {"and": [ + "Plasma", + {"cycleFrames": 60} + ]}, + {"and": [ + "h_useMorphBombs", + "canFarmWhileShooting", + {"cycleFrames": 1700} + ]} + ]} + ], + "farmCycleDrops": [{"enemy": "Dragon", "count": 5}], + "resetsObstacles": ["A"] + }, + { + "link": [2, 2], + "name": "Dragon Farm (Avoid Lava)", + "requires": [ + {"resetRoom": {"nodes": [2]}}, + "h_heatProof", + {"or": [ + {"and": [ + "Morph", + "Grapple", + "Plasma", + "canCameraManip", + {"cycleFrames": 1620} + ]}, + {"and": [ + "HiJump", + "SpeedBooster", + "Grapple", + "Plasma", + "canCameraManip", + {"cycleFrames": 1920} + ]}, + {"and": [ + "SpaceJump", + "Plasma", + "canCameraManip", + {"cycleFrames": 1770} + ]}, + {"and": [ + "canPreciseSpaceJump", + "ScrewAttack", + {"cycleFrames": 1440} + ]} + ]} + ], + "farmCycleDrops": [{"enemy": "Dragon", "count": 5}], + "resetsObstacles": ["A"], + "note": "Jump and aim down to make the Dragons active by bringing them on camera." + }, { "id": 15, "link": [2, 3], diff --git a/region/norfair/west/Crocomire Speedway.json b/region/norfair/west/Crocomire Speedway.json index 26b1c32ed1..5c160d4a6e 100644 --- a/region/norfair/west/Crocomire Speedway.json +++ b/region/norfair/west/Crocomire Speedway.json @@ -548,6 +548,84 @@ ], "devNote": "FIXME: R-Mode can be used instead of a Crystal Flash but that depends on having more Reserve Energy than Regular Energy." }, + { + "link": [2, 2], + "name": "Multiviola Pirate Farm", + "requires": [ + "h_heatProof", + {"resetRoom": {"nodes": [2]}}, + {"cycleFrames": 1200}, + {"or": [ + "Plasma", + {"and": [ + "Wave", + {"cycleFrames": 120} + ]}, + {"and": [ + "Spazer", + {"cycleFrames": 300} + ]}, + {"and": [ + "canPseudoScrew", + {"cycleFrames": 220} + ]} + ]} + ], + "farmCycleDrops": [ + {"enemy": "Multiviola", "count": 4}, + {"enemy": "Red Space Pirate (standing)", "count": 3} + ], + "resetsObstacles": ["A"] + }, + { + "link": [2, 2], + "name": "Multiviola Pirate SpeedBooster Farm", + "requires": [ + "h_heatProof", + {"resetRoom": {"nodes": [2]}}, + {"cycleFrames": 60}, + {"simpleCycleFrames": 560}, + "SpeedBooster" + ], + "farmCycleDrops": [ + {"enemy": "Multiviola", "count": 1}, + {"enemy": "Red Space Pirate (standing)", "count": 4} + ], + "resetsObstacles": ["A"], + "note": "Drops do not linger long enough to kill every single Pirate." + }, + { + "link": [2, 2], + "name": "Cacatac Farm", + "requires": [ + "h_heatProof", + "SpeedBooster", + {"resetRoom": {"nodes": [2]}}, + {"cycleFrames": 350}, + {"simpleCycleFrames": 800}, + {"or": [ + "Plasma", + {"and": [ + "Wave", + {"cycleFrames": 30} + ]}, + {"and": [ + "Spazer", + {"cycleFrames": 30} + ]}, + {"and": [ + "Grapple", + {"cycleFrames": 45} + ]}, + {"cycleFrames": 120} + ]} + ], + "farmCycleDrops": [ + {"enemy": "Cacatac", "count": 2} + ], + "clearsObstacles": ["A"], + "devNote": "Some frames added to account for spike RNG." + }, { "id": 75, "link": [2, 4], @@ -1886,30 +1964,49 @@ { "id": 40, "link": [5, 5], - "name": "Cacatac Super Farm", - "requires": [ - "h_heatProof", - {"resetRoom": { - "nodes": [1, 3, 4, 5] - }}, - {"partialRefill": {"type": "Super", "limit": 10}} - ], - "resetsObstacles": ["A"] - }, - { - "id": 67, - "link": [5, 5], "name": "Cacatac Farm", "requires": [ "h_heatProof", - {"resetRoom": { - "nodes": [1, 3, 4, 5] - }}, - {"resourceMissingAtMost": [{"type": "Super", "count": 4}]}, - {"refill": ["Super"]}, - {"partialRefill": {"type": "Energy", "limit": 200}} + {"or": [ + {"and": [ + {"resetRoom": {"nodes": [1]}}, + {"cycleFrames": 450} + ]}, + {"and": [ + {"resetRoom": {"nodes": [3]}}, + {"cycleFrames": 300} + ]}, + {"and": [ + {"resetRoom": {"nodes": [4]}}, + {"cycleFrames": 360} + ]}, + {"and": [ + {"resetRoom": {"nodes": [5]}}, + {"cycleFrames": 200} + ]} + ]}, + {"or": [ + "Plasma", + {"and": [ + "Wave", + {"cycleFrames": 30} + ]}, + {"and": [ + "Spazer", + {"cycleFrames": 30} + ]}, + {"and": [ + "Grapple", + {"cycleFrames": 45} + ]}, + {"cycleFrames": 120} + ]} ], - "resetsObstacles": ["A"] + "farmCycleDrops": [ + {"enemy": "Cacatac", "count": 2} + ], + "resetsObstacles": ["A"], + "devNote": "Some frames added to account for spike RNG." }, { "id": 41, diff --git a/region/norfair/west/Crumble Shaft.json b/region/norfair/west/Crumble Shaft.json index bd76e49eca..cc24330f7c 100644 --- a/region/norfair/west/Crumble Shaft.json +++ b/region/norfair/west/Crumble Shaft.json @@ -128,6 +128,87 @@ ], "flashSuitChecked": true }, + { + "id": 29, + "link": [1, 1], + "name": "Sova Farm", + "requires": [ + "h_heatProof", + "canDodgeWhileShooting", + {"or": [ + {"and": [ + "canConsecutiveWalljump", + {"or": [ + "canCrumbleJump", + "SpaceJump", + "canPreciseWalljump" + ]}, + {"cycleFrames": 930} + ]}, + {"and": [ + "h_useSpringBall", + {"cycleFrames": 1200} + ]}, + {"and": [ + "SpaceJump", + {"cycleFrames": 1320} + ]}, + {"and": [ + "canDoubleBombJump", + "canLongIBJ", + {"cycleFrames": 2340} + ]}, + {"and": [ + "canJumpIntoIBJ", + "canLongIBJ", + "canBePatient", + {"cycleFrames": 4640} + ]} + ]}, + {"or": [ + "canCrumbleJump", + {"cycleFrames": 300} + ]}, + {"resetRoom": { + "nodes": [1, 2] + }}, + {"or": [ + "Wave", + "Spazer", + "Plasma", + "Grapple", + {"cycleFrames": 120} + ]} + ], + "farmCycleDrops": [ + {"enemy": "Sova", "count": 6} + ], + "resetsObstacles": ["A"], + "note": "Break each of the crumble platforms to group the Sovas at the bottom of the room.", + "devNote": "Climb from 2 to 1 if resetting with 2." + }, + { + "link": [1, 1], + "name": "Sova Grapple Farm", + "requires": [ + "h_heatProof", + "canUseGrapple", + "canCameraManip", + {"resetRoom": { + "nodes": [1] + }}, + {"simpleCycleFrames": 105}, + {"cycleFrames": 25} + ], + "farmCycleDrops": [ + {"enemy": "Sova", "count": 1} + ], + "resetsObstacles": ["A"], + "note": [ + "Jump and aim down to bring the Sova on camera.", + "Farm with Grapple while crouched and touching the crumble platform." + ] + }, { "id": 3, "link": [1, 2], @@ -654,28 +735,35 @@ "devNote": "Max extra run speed $1.5" }, { - "id": 29, "link": [2, 2], - "name": "Sova Farm", + "name": "Sova Grapple Farm", "requires": [ "h_heatProof", - "canDodgeWhileShooting", - {"or": [ - {"and": [ - "canCrumbleJump", - "canConsecutiveWalljump" - ]}, - "h_useSpringBall" - ]}, + "canUseGrapple", {"resetRoom": { - "nodes": [1, 2] + "nodes": [2] }}, - {"partialRefill": {"type": "Energy", "limit": 200}}, - {"partialRefill": {"type": "Super", "limit": 5}}, - {"partialRefill": {"type": "Missile", "limit": 8}} + {"cycleFrames": 250} ], - "resetsObstacles": ["A"], - "devNote": ["farm cycle = 23seconds(room time) for 6 Sova drops"] + "farmCycleDrops": [ + {"enemy": "Sova", "count": 2} + ], + "resetsObstacles": ["A"] + }, + { + "link": [2, 2], + "name": "Sova Single Farm", + "requires": [ + "h_heatProof", + {"resetRoom": { + "nodes": [2] + }}, + {"cycleFrames": 160} + ], + "farmCycleDrops": [ + {"enemy": "Sova", "count": 1} + ], + "resetsObstacles": ["A"] }, { "id": 30, diff --git a/region/norfair/west/Hi Jump Energy Tank Room.json b/region/norfair/west/Hi Jump Energy Tank Room.json index ac0347b114..5228b4f753 100644 --- a/region/norfair/west/Hi Jump Energy Tank Room.json +++ b/region/norfair/west/Hi Jump Energy Tank Room.json @@ -203,6 +203,27 @@ ], "flashSuitChecked": true }, + { + "link": [1, 1], + "name": "Sova Farm", + "requires": [ + {"resetRoom": {"nodes": [1]}}, + {"or": [ + {"and": [ + "Grapple", + {"cycleFrames": 460} + ]}, + {"and": [ + "Morph", + {"cycleFrames": 420} + ]}, + {"cycleFrames": 530} + ]} + ], + "farmCycleDrops": [{"enemy": "Sova", "count": 1}], + "resetsObstacles": ["A", "B", "C", "D"], + "flashSuitChecked": true + }, { "id": 3, "link": [1, 1], @@ -603,6 +624,59 @@ ], "flashSuitChecked": true }, + { + "link": [2, 2], + "name": "Sova Farm", + "requires": [ + {"resetRoom": {"nodes": [2]}}, + {"or": [ + "canQuickDrop", + {"cycleFrames": 30} + ]}, + {"or": [ + {"and": [ + "Wave", + {"cycleFrames": 120} + ]}, + {"and": [ + "Grapple", + "canDodgeWhileShooting", + {"cycleFrames": 240} + ]}, + {"and": [ + "Morph", + "canTrickyJump", + {"cycleFrames": 300} + ]}, + {"and": [ + "canTrivialMidAirMorph", + "Bombs", + {"cycleFrames": 1100} + ]}, + {"and": [ + "Morph", + {"or": [ + {"notable": "Return Through Crumble Blocks"}, + "Bombs" + ]}, + {"or": [ + "canWalljump", + {"and": [ + "HiJump", + "canSpringBallJumpMidAir", + "h_doubleEquipmentScreenCycleFrames" + ]}, + "SpaceJump" + ]}, + {"cycleFrames": 510} + ]}, + {"cycleFrames": 2160} + ]} + ], + "farmCycleDrops": [{"enemy": "Sova", "count": 1}], + "resetsObstacles": ["A", "B", "C", "D"], + "flashSuitChecked": true + }, { "id": 22, "link": [2, 2], diff --git a/region/norfair/west/Ice Beam Gate Room.json b/region/norfair/west/Ice Beam Gate Room.json index 27d78a18a1..b0320858e5 100644 --- a/region/norfair/west/Ice Beam Gate Room.json +++ b/region/norfair/west/Ice Beam Gate Room.json @@ -464,6 +464,94 @@ "clearsObstacles": ["A", "B", "C"], "flashSuitChecked": true }, + { + "link": [2, 2], + "name": "Sova Farm", + "requires": [ + {"resetRoom": {"nodes": [2]}}, + "h_useMorphBombs", + {"or": [ + {"and": [ + "canFarmWhileShooting", + {"or": [ + "ScrewAttack", + {"and": [ + "canMidAirMorph", + {"cycleFrames": 60} + ]} + ]}, + {"cycleFrames": 490} + ]}, + {"cycleFrames": 610} + ]} + ], + "farmCycleDrops": [{"enemy": "Sova", "count": 1}], + "clearsObstacles": ["A", "B"], + "resetsObstacles": ["C", "D"], + "flashSuitChecked": true + }, + { + "link": [2, 2], + "name": "Mella and Sm. Dessgeega Farm", + "requires": [ + "h_usePowerBomb", + {"or": [ + {"resetRoom": { + "nodes": [2] + }}, + {"and": [ + {"resetRoom": { + "nodes": [4] + }}, + {"or": [ + {"and": [ + "SpeedBooster", + {"cycleFrames": 420} + ]}, + {"and": [ + "canMockball", + {"cycleFrames": 60} + ]} + ]} + ]} + ]}, + {"or": [ + "canWalljump", + "HiJump", + "SpaceJump", + {"and": [ + "canSpringBallJumpMidAir", + "h_doubleEquipmentScreenCycleFrames", + {"cycleFrames": 30} + ]} + ]}, + {"or": [ + {"and": [ + "ScrewAttack", + {"cycleFrames": 1080} + ]}, + {"and": [ + "Wave", + {"cycleFrames": 1140} + ]}, + {"and": [ + "Spazer", + {"cycleFrames": 990} + ]}, + {"and": [ + "Plasma", + {"cycleFrames": 850} + ]}, + {"and": [ + "canMockball", + {"ammo": {"type": "PowerBomb", "count": 1}}, + {"cycleFrames": 900} + ]} + ]} + ], + "farmCycleDrops": [{"enemy": "Mella", "count": 6}, {"enemy": "Sm. Dessgeega", "count": 3}], + "clearsObstacles": ["A", "B", "C", "D"] + }, { "id": 13, "link": [2, 2], @@ -804,21 +892,43 @@ "nodes": [3] }}, {"or": [ - "ScrewAttack", - "Wave", - "Spazer", - "Plasma" - ]}, - {"partialRefill": {"type": "Energy", "limit": 100}}, - {"partialRefill": {"type": "Missile", "limit": 10}}, - {"partialRefill": {"type": "PowerBomb", "limit": 12}} + {"and": [ + "ScrewAttack", + {"cycleFrames": 600} + ]}, + {"and": [ + "Wave", + {"cycleFrames": 630} + ]}, + {"and": [ + "Spazer", + {"cycleFrames": 600} + ]}, + {"and": [ + "Plasma", + {"cycleFrames": 510} + ]} + ]} ], + "farmCycleDrops": [{"enemy": "Mella", "count": 6}, {"enemy": "Sm. Dessgeega", "count": 3}], "clearsObstacles": ["D"], - "resetsObstacles": ["A", "B", "C"], - "devNote": [ - "FIXME: If using a Power Bomb is possible, then this could also end with obstacles A, B, and C cleared,", - "by picking up a Power Bomb drop from a Sm. Dessgeega after breaking the Power Bomb and bomb blocks." - ] + "resetsObstacles": ["A", "B", "C"] + }, + { + "link": [3, 3], + "name": "Mella and Sm. Dessgeega Power Bomb Farm", + "requires": [ + {"resetRoom": { + "nodes": [3] + }}, + "h_usePowerBomb", + "canTrickyJump", + "canLateralMidAirMorph", + {"cycleFrames": 450} + ], + "farmCycleDrops": [{"enemy": "Mella", "count": 4}, {"enemy": "Sm. Dessgeega", "count": 3}], + "clearsObstacles": ["D"], + "resetsObstacles": ["A", "B", "C"] }, { "id": 29, @@ -1202,6 +1312,36 @@ ], "flashSuitChecked": true }, + { + "link": [4, 4], + "name": "Sova Farm", + "requires": [ + {"resetRoom": {"nodes": [4]}}, + "h_useMorphBombs", + {"cycleFrames": 630}, + {"or": [ + "SpeedBooster", + {"and": [ + "canMockball", + {"cycleFrames": 50} + ]} + ]}, + {"or": [ + "ScrewAttack", + {"and": [ + {"or": [ + "canMidAirMorph", + "SpringBall" + ]}, + {"cycleFrames": 120} + ]} + ]} + ], + "farmCycleDrops": [{"enemy": "Sova", "count": 1}], + "clearsObstacles": ["A", "B"], + "resetsObstacles": ["C", "D"], + "flashSuitChecked": true + }, { "id": 48, "link": [4, 7], diff --git a/region/norfair/west/Ice Beam Snake Room.json b/region/norfair/west/Ice Beam Snake Room.json index a7ec073edc..adfc37c398 100644 --- a/region/norfair/west/Ice Beam Snake Room.json +++ b/region/norfair/west/Ice Beam Snake Room.json @@ -210,6 +210,54 @@ ], "flashSuitChecked": true }, + { + "link": [1, 1], + "name": "Sova Farm", + "requires": [ + "h_heatProof", + {"resetRoom": { + "nodes": [1] + }}, + {"or": [ + "canWalljump", + {"and": [ + "HiJump", + "canSpringBallJumpMidAir", + "h_doubleEquipmentScreenCycleFrames", + {"cycleFrames": 40} + ]}, + {"and": [ + "Morph", + {"cycleFrames": 380} + ]} + ]}, + {"or": [ + {"and": [ + "canMidAirMorph", + "Plasma", + "canTrickyJump", + {"cycleFrames": 600} + ]}, + {"and": [ + "canMidAirMorph", + "Plasma", + "canInsaneJump", + {"cycleFrames": 520} + ]}, + {"and": [ + {"or": [ + "Wave", + "Spazer", + "Plasma", + "Grapple", + {"cycleFrames": 45} + ]}, + {"cycleFrames": 700} + ]} + ]} + ], + "farmCycleDrops": [{"enemy": "Sova", "count": 3}] + }, { "id": 4, "link": [1, 1], @@ -641,10 +689,23 @@ {"resetRoom": { "nodes": [2] }}, - {"partialRefill": {"type": "Energy", "limit": 300}}, - {"partialRefill": {"type": "Missile", "limit": 16}}, - {"partialRefill": {"type": "Super", "limit": 5}} - ] + {"cycleFrames": 120}, + {"or": [ + "Wave", + "Spazer", + "Plasma", + {"and": [ + "ScrewAttack", + {"cycleFrames": 35} + ]}, + {"and": [ + "Grapple", + {"cycleFrames": 25} + ]}, + {"cycleFrames": 60} + ]} + ], + "farmCycleDrops": [{"enemy": "Sova", "count": 3}] }, { "id": 16, @@ -1131,6 +1192,44 @@ "flashSuitChecked": true, "note": "Kill the Fune before Crystal Flashing." }, + { + "link": [3, 3], + "name": "Sova Farm", + "requires": [ + "h_heatProof", + {"resetRoom": { + "nodes": [3] + }}, + {"or": [ + {"and": [ + "canMidAirMorph", + "canTrickyJump", + {"or": [ + "HiJump", + "canWalljump" + ]}, + "Plasma", + {"cycleFrames": 540} + ]}, + {"and": [ + "canMidAirMorph", + {"or": [ + "Wave", + "Spazer", + "Plasma", + "Grapple", + {"cycleFrames": 45} + ]}, + {"cycleFrames": 690} + ]}, + {"and": [ + "canDodgeWhileShooting", + {"cycleFrames": 1140} + ]} + ]} + ], + "farmCycleDrops": [{"enemy": "Sova", "count": 3}] + }, { "id": 24, "link": [3, 3], diff --git a/region/norfair/west/Ice Beam Tutorial Room.json b/region/norfair/west/Ice Beam Tutorial Room.json index c1c11d578d..92a4f9d761 100644 --- a/region/norfair/west/Ice Beam Tutorial Room.json +++ b/region/norfair/west/Ice Beam Tutorial Room.json @@ -90,6 +90,25 @@ ], "flashSuitChecked": true }, + { + "link": [1, 1], + "name": "Boyon Farm", + "requires": [ + {"resetRoom": {"nodes": [1, 2]}}, + "h_heatProof", + "h_lavaProof", + "h_useMorphBombs", + "canBePatient", + "canDodgeWhileShooting", + {"or": [ + "Ice", + "canFarmWhileShooting", + {"cycleFrames": 2700} + ]}, + {"cycleFrames": 4500} + ], + "farmCycleDrops": [{"enemy": "Boyon", "count": 3}] + }, { "id": 3, "link": [1, 2], @@ -555,6 +574,36 @@ "h_heatedCrystalFlash" ], "flashSuitChecked": true + }, + { + "link": [2, 2], + "name": "Ripper Farm", + "requires": [ + {"or": [ + {"resetRoom": {"nodes": [2]}}, + {"and": [ + {"resetRoom": {"nodes": [1]}}, + "canMidAirMorph", + {"cycleFrames": 330} + ]} + ]}, + "h_heatProof", + {"or": [ + "h_lavaProof", + {"and": [ + "canFarmWhileShooting", + "canPreciseWalljump", + {"cycleFrames": 15} + ]}, + {"and": [ + "SpaceJump", + {"cycleFrames": 10} + ]} + ]}, + "ScrewAttack", + {"cycleFrames": 125} + ], + "farmCycleDrops": [{"enemy": "Ripper 2 (red)", "count": 1}] } ], "notables": [