diff --git a/region/brinstar/blue/Blue Brinstar Energy Tank Room.json b/region/brinstar/blue/Blue Brinstar Energy Tank Room.json index da13f643c6..f3ab065996 100644 --- a/region/brinstar/blue/Blue Brinstar Energy Tank Room.json +++ b/region/brinstar/blue/Blue Brinstar Energy Tank Room.json @@ -992,7 +992,7 @@ "link": [4, 1], "name": "Artificial Morph Remotely Collect the Item", "requires": [ - "canEnterGMode", + "canComplexGMode", {"obstaclesCleared": ["D"]} ], "flashSuitChecked": true, @@ -1388,7 +1388,7 @@ { "id": 61, "link": [6, 4], - "name": "G-Mode Morph Remotely Collect the Item", + "name": "G-Mode Morph Touch the Item (Prepare to Remote Acquire)", "requires": [ "canEnterGMode", {"itemNotCollectedAtNode": 4}, diff --git a/region/brinstar/blue/Construction Zone.json b/region/brinstar/blue/Construction Zone.json index 7f6295c724..fb63e4ce21 100644 --- a/region/brinstar/blue/Construction Zone.json +++ b/region/brinstar/blue/Construction Zone.json @@ -803,6 +803,7 @@ } }, "requires": [ + "canComplexGMode", "canXRayClimb" ], "bypassesDoorShell": true, diff --git a/region/brinstar/blue/Morph Ball Room.json b/region/brinstar/blue/Morph Ball Room.json index cd303ef982..e81a210713 100644 --- a/region/brinstar/blue/Morph Ball Room.json +++ b/region/brinstar/blue/Morph Ball Room.json @@ -988,7 +988,7 @@ {"or": [ {"enemyDamage": {"enemy": "Sidehopper", "type": "contact", "hits": 2}}, "h_artificialMorphPowerBomb", - "canInsaneJump", + "canComplexGMode", {"and": [ "Morph", {"or": [ @@ -1024,7 +1024,7 @@ {"or": [ {"enemyDamage": {"enemy": "Sidehopper", "type": "contact", "hits": 2}}, "h_artificialMorphPowerBomb", - "canInsaneJump" + "canComplexGMode" ]}, "h_artificialMorphPowerBomb", {"or": [ @@ -1054,7 +1054,7 @@ }, "requires": [ {"or": [ - "canInsaneJump", + "canComplexGMode", {"enemyDamage": {"enemy": "Sidehopper", "type": "contact", "hits": 2}}, {"and": [ "h_artificialMorphPowerBomb", @@ -1090,7 +1090,7 @@ }, "requires": [ {"or": [ - "canInsaneJump", + "canComplexGMode", {"enemyDamage": {"enemy": "Sidehopper", "type": "contact", "hits": 2}}, {"and": [ "h_artificialMorphPowerBomb", diff --git a/region/brinstar/green/Brinstar Reserve Tank Room.json b/region/brinstar/green/Brinstar Reserve Tank Room.json index 64a202bbb3..8a164922e0 100644 --- a/region/brinstar/green/Brinstar Reserve Tank Room.json +++ b/region/brinstar/green/Brinstar Reserve Tank Room.json @@ -123,6 +123,7 @@ } }, "requires": [ + "canComplexGMode", {"or": [ "h_artificialMorphSpringBall", {"and": [ @@ -156,7 +157,8 @@ } }, "requires": [], - "flashSuitChecked": true + "flashSuitChecked": true, + "devNote": "This is only useful if the item is Morph." }, { "id": 6, diff --git a/region/brinstar/green/Etecoon Energy Tank Room.json b/region/brinstar/green/Etecoon Energy Tank Room.json index c5012ef21e..f72dbe9296 100644 --- a/region/brinstar/green/Etecoon Energy Tank Room.json +++ b/region/brinstar/green/Etecoon Energy Tank Room.json @@ -383,7 +383,7 @@ "ScrewAttack", "canTrickyGMode", {"and": [ - "canInsaneJump", + "canComplexGMode", {"or": [ "Ice", {"ammo": {"type": "Missile", "count": 1}}, @@ -421,7 +421,7 @@ {"itemNotCollectedAtNode": 5}, "canRiskPermanentLossOfAccess", "canOffScreenMovement", - "canInsaneJump", + "canComplexGMode", {"or": [ "canTrickyGMode", "h_artificialMorphPowerBomb", @@ -759,7 +759,7 @@ "ScrewAttack", "canTrickyGMode", {"and": [ - "canInsaneJump", + "canComplexGMode", {"or": [ "Ice", {"ammo": {"type": "Missile", "count": 1}}, @@ -797,7 +797,7 @@ "canRiskPermanentLossOfAccess", "canOffScreenMovement", "h_artificialMorphPowerBomb", - "canInsaneJump", + "canComplexGMode", {"or": [ "canTrickyGMode", "h_artificialMorphPowerBomb", @@ -844,6 +844,7 @@ } }, "requires": [ + "canComplexGMode", "canXRayClimb" ], "bypassesDoorShell": true, @@ -1018,6 +1019,7 @@ }, "requires": [ "canPowerBombItemOverloadPLMs", + "canComplexGMode", {"itemNotCollectedAtNode": 5}, {"or": [ "Morph", @@ -1447,7 +1449,7 @@ {"tech": "canBombHorizontally"}, {"ammo": {"type": "PowerBomb", "count": 6}}, {"or": [ - "canInsaneJump", + "canComplexGMode", {"ammo": {"type": "PowerBomb", "count": 2}} ]} ]}, @@ -1455,7 +1457,7 @@ "h_artificialMorphSpringBall", {"ammo": {"type": "PowerBomb", "count": 3}}, {"or": [ - "canInsaneJump", + "canComplexGMode", {"ammo": {"type": "PowerBomb", "count": 1}} ]} ]}, @@ -1481,19 +1483,14 @@ }, "requires": [ "canPowerBombItemOverloadPLMs", + "canComplexGMode", {"itemNotCollectedAtNode": 5}, {"or": [ "Morph", "h_artificialMorphSpringBall" ]}, {"or": [ - {"and": [ - {"ammo": {"type": "PowerBomb", "count": 3}}, - {"or": [ - "canInsaneJump", - {"ammo": {"type": "PowerBomb", "count": 1}} - ]} - ]}, + {"ammo": {"type": "PowerBomb", "count": 3}}, {"and": [ "Morph", {"or": [ @@ -1673,7 +1670,7 @@ {"and": [ {"ammo": {"type": "PowerBomb", "count": 3}}, {"or": [ - "canInsaneJump", + "canComplexGMode", {"ammo": {"type": "PowerBomb", "count": 1}} ]} ]}, @@ -1728,7 +1725,7 @@ {"and": [ {"ammo": {"type": "PowerBomb", "count": 3}}, {"or": [ - "canInsaneJump", + "canComplexGMode", {"ammo": {"type": "PowerBomb", "count": 1}} ]} ]}, diff --git a/region/brinstar/green/Green Brinstar Main Shaft.json b/region/brinstar/green/Green Brinstar Main Shaft.json index a6da854849..1d9f27d772 100644 --- a/region/brinstar/green/Green Brinstar Main Shaft.json +++ b/region/brinstar/green/Green Brinstar Main Shaft.json @@ -1534,6 +1534,7 @@ } }, "requires": [ + "canComplexGMode", "canXRayClimb" ], "bypassesDoorShell": true, @@ -2364,6 +2365,7 @@ } }, "requires": [ + "canComplexGMode", "canLongXRayClimb" ], "bypassesDoorShell": true, @@ -2444,6 +2446,7 @@ } }, "requires": [ + "canComplexGMode", "canXRayClimb" ], "bypassesDoorShell": true, @@ -3043,6 +3046,7 @@ } }, "requires": [ + "canComplexGMode", "canLongXRayClimb" ], "bypassesDoorShell": true, @@ -3626,6 +3630,7 @@ } }, "requires": [ + "canComplexGMode", "canLongXRayClimb", "canBePatient" ], @@ -3706,6 +3711,7 @@ } }, "requires": [ + "canComplexGMode", "canXRayClimb" ], "bypassesDoorShell": true, @@ -3964,6 +3970,7 @@ } }, "requires": [ + "canComplexGMode", "canLongXRayClimb", "canBeVeryPatient" ], @@ -4029,6 +4036,7 @@ } }, "requires": [ + "canComplexGMode", "canLongXRayClimb", "canBeVeryPatient" ], @@ -4072,6 +4080,7 @@ } }, "requires": [ + "canComplexGMode", "canLongXRayClimb", "canBePatient" ], diff --git a/region/brinstar/green/Green Hill Zone.json b/region/brinstar/green/Green Hill Zone.json index 7f1ce3aa22..969c6f3939 100644 --- a/region/brinstar/green/Green Hill Zone.json +++ b/region/brinstar/green/Green Hill Zone.json @@ -337,6 +337,7 @@ } }, "requires": [ + "canComplexGMode", {"or": [ "h_artificialMorphLongIBJ", "h_artificialMorphSpringBallBombJump", @@ -624,6 +625,7 @@ } }, "requires": [ + "canComplexGMode", {"or": [ {"and": [ "h_artificialMorphIBJ", @@ -979,6 +981,7 @@ } }, "requires": [ + "canComplexGMode", {"or": [ "h_artificialMorphLongIBJ", "h_artificialMorphSpringBallBombJump", @@ -1123,6 +1126,7 @@ } }, "requires": [ + "canComplexGMode", {"or": [ {"and": [ "h_artificialMorphIBJ", diff --git a/region/brinstar/kraid/Warehouse Zeela Room.json b/region/brinstar/kraid/Warehouse Zeela Room.json index 6a939f29d9..36065f3763 100644 --- a/region/brinstar/kraid/Warehouse Zeela Room.json +++ b/region/brinstar/kraid/Warehouse Zeela Room.json @@ -277,6 +277,7 @@ } }, "requires": [ + "canComplexGMode", "canXRayClimb" ], "bypassesDoorShell": true, diff --git a/region/brinstar/pink/Big Pink.json b/region/brinstar/pink/Big Pink.json index 97c4285aed..c94a9e8b5d 100644 --- a/region/brinstar/pink/Big Pink.json +++ b/region/brinstar/pink/Big Pink.json @@ -786,7 +786,7 @@ {"enemyDamage": {"enemy": "Sm. Sidehopper", "type": "contact", "hits": 1}} ]}, {"or": [ - "canInsaneJump", + "canComplexGMode", "h_artificialMorphPowerBomb", {"enemyDamage": {"enemy": "Sm. Sidehopper", "type": "contact", "hits": 1}} ]} @@ -1803,6 +1803,7 @@ } }, "requires": [ + "canComplexGMode", "canLongXRayClimb", "canBePatient" ], @@ -2431,6 +2432,7 @@ } }, "requires": [ + "canComplexGMode", "canLongXRayClimb", "canBeVeryPatient" ], @@ -2452,6 +2454,7 @@ } }, "requires": [ + "canComplexGMode", "canLongXRayClimb" ], "bypassesDoorShell": true, @@ -2781,6 +2784,7 @@ } }, "requires": [ + "canComplexGMode", "h_CrystalFlash", "canMidAirMorph" ], @@ -2819,6 +2823,7 @@ } }, "requires": [ + "canComplexGMode", {"or": [ "h_artificialMorphIBJ", "Morph", @@ -3872,7 +3877,7 @@ "requires": [ "canEnterGMode", {"or": [ - "canInsaneJump", + "canComplexGMode", "h_artificialMorphPowerBomb", {"enemyDamage": {"enemy": "Sm. Sidehopper", "type": "contact", "hits": 1}} ]}, @@ -4081,7 +4086,7 @@ ]}, {"or": [ "Morph", - "canInsaneJump", + "canComplexGMode", {"and": [ "canTrickyDodgeEnemies", "h_artificialMorphSpringBall" @@ -4133,7 +4138,7 @@ ]}, {"or": [ "Morph", - "canInsaneJump", + "canComplexGMode", {"and": [ "canTrickyDodgeEnemies", "h_artificialMorphSpringBall" @@ -4178,7 +4183,7 @@ ]}, {"or": [ "Morph", - "canInsaneJump", + "canComplexGMode", {"and": [ "canTrickyDodgeEnemies", "h_artificialMorphSpringBall" diff --git a/region/brinstar/pink/Dachora Room.json b/region/brinstar/pink/Dachora Room.json index 3c146b3bcc..753c2c7e8b 100644 --- a/region/brinstar/pink/Dachora Room.json +++ b/region/brinstar/pink/Dachora Room.json @@ -545,6 +545,7 @@ } }, "requires": [ + "canComplexGMode", "canLongXRayClimb", "canBeVeryPatient" ], diff --git a/region/brinstar/pink/Mission Impossible Room.json b/region/brinstar/pink/Mission Impossible Room.json index b8653ae050..097742af93 100644 --- a/region/brinstar/pink/Mission Impossible Room.json +++ b/region/brinstar/pink/Mission Impossible Room.json @@ -630,6 +630,7 @@ } }, "requires": [ + "canComplexGMode", "canXRayClimb" ], "bypassesDoorShell": true, diff --git a/region/brinstar/pink/Pink Brinstar Wave Gate Room.json b/region/brinstar/pink/Pink Brinstar Wave Gate Room.json index 1d56752896..43743c9938 100644 --- a/region/brinstar/pink/Pink Brinstar Wave Gate Room.json +++ b/region/brinstar/pink/Pink Brinstar Wave Gate Room.json @@ -407,7 +407,7 @@ "requires": [ "canEnterGMode", {"obstaclesCleared": ["C"]}, - "canInsaneJump", + "canTrickyDodgeEnemies", {"or": [ "ScrewAttack", "Plasma" @@ -1970,6 +1970,7 @@ } }, "requires": [ + "canComplexGMode", "canXRayClimb", "canOffScreenMovement", "canInsaneJump" diff --git a/region/brinstar/pink/Spore Spawn Super Room.json b/region/brinstar/pink/Spore Spawn Super Room.json index 349ef84bfb..185ce786db 100644 --- a/region/brinstar/pink/Spore Spawn Super Room.json +++ b/region/brinstar/pink/Spore Spawn Super Room.json @@ -178,6 +178,7 @@ } }, "requires": [ + "canComplexGMode", "canLongXRayClimb", "canBeVeryPatient" ], @@ -244,6 +245,7 @@ } }, "requires": [ + "canComplexGMode", "h_artificialMorphCrystalFlash", {"canShineCharge": {"usedTiles": 16, "openEnd": 1}}, "canShinechargeMovement", @@ -279,6 +281,7 @@ } }, "requires": [ + "canComplexGMode", "h_artificialMorphCrystalFlash", {"canShineCharge": {"usedTiles": 16, "openEnd": 1}}, "canShinechargeMovement", diff --git a/region/brinstar/red/Alpha Power Bomb Room.json b/region/brinstar/red/Alpha Power Bomb Room.json index 3e0ba47cd5..15f0ec0533 100644 --- a/region/brinstar/red/Alpha Power Bomb Room.json +++ b/region/brinstar/red/Alpha Power Bomb Room.json @@ -522,6 +522,7 @@ } }, "requires": [ + "canComplexGMode", "canUseIFrames", "canNeutralDamageBoost", "canInsaneJump", diff --git a/region/brinstar/red/Below Spazer.json b/region/brinstar/red/Below Spazer.json index 860b6d1831..46d3a61329 100644 --- a/region/brinstar/red/Below Spazer.json +++ b/region/brinstar/red/Below Spazer.json @@ -657,6 +657,7 @@ } }, "requires": [ + "canComplexGMode", "canXRayClimb" ], "bypassesDoorShell": true, diff --git a/region/brinstar/red/Red Tower.json b/region/brinstar/red/Red Tower.json index 7ab9c44682..29ef056f1e 100644 --- a/region/brinstar/red/Red Tower.json +++ b/region/brinstar/red/Red Tower.json @@ -1276,6 +1276,7 @@ } }, "requires": [ + "canComplexGMode", "canLongXRayClimb" ], "bypassesDoorShell": true, diff --git a/tech.json b/tech.json index 8901390e74..ca9c1009a2 100644 --- a/tech.json +++ b/tech.json @@ -2505,20 +2505,45 @@ ], "otherRequires": [], "note": [ - "Ability to enter G-mode starting with low reserve energy.", - "Have 4 or fewer energy in reserves (set to Auto), take damage while going through a door, use X-Ray while entering the next room, and release X-Ray before reserves have finished filling (a 4-frame window when starting with 4 reserve energy).", - "This can be used for many things, including overloading PLMs to move through solid tiles, setting up a deep doorstuck, and triggering Artificial Morph if canArtificialMorph is enabled." + "Ability to enter G-mode and utilize the unusual behaviors that it enables. This requires X-Ray, Reserve Energy, and reserves set to Auto refill.", + "In order to enter G-mode, Samus needs to take damage after touching a room transition so that she immediately takes damage and triggers the refill while entering the next room.", + "In addition, she needs to be using X-Ray while entering the room and release X-Ray before reserves have finished filling.", + "For the simplest cases, Samus will need to start with 4 (or fewer) Reserve Energy, giving a 4-frame window to release X-Ray in the next room (or fewer: 1-frame per Reserve Energy).", + "When successfully entering G-mode, the room will darken and the door will remain open (releasing X-Ray too early, neither of these occur; releasing it too late, the room darkens and the door closes - this is R-mode).", + "While in G-mode, many things do not behave as expected until exiting G-mode by using X-Ray - Samus can not open doors, collect items, or break blocks, and enemy drops do not spawn and their projectiles are invisible and do not move.", + "If Samus can overload PLMs, many types of blocks change their behavior: bomb, crumble, speed blocks, and sand behave as air (Power Bomb, Super, and shot blocks remain solid).", + "The most common ways to overload PLMs include: bombing Power Bomb and speed blocks and the side or bottom of crumble blocks that haven't been stepped on (approximately 40 times),", + "grappling grapple blocks, rolling through invisible camera scroll blocks (which often appear in morph tunnels), and touching sand.", + "Note that stepping on a crumble block or bombing a bomb block will prevent them from behaving like air after PLMs are overloaded.", + "When Samus enters G-mode, this is called direct G-mode; if she leaves that room (for example by going back through the open door), she is instead in indirect G-mode.", + "When in indirect G-mode, items and blue and green gates do not spawn, and Samus can freely walk through them." ], "extensionTechs": [ { - "id": 200, - "name": "canTrickyGMode", + "name": "canComplexGMode", "techRequires": [ "canEnterGMode" ], "otherRequires": [], - "note": ["Doing something particularly precise or risky while in G-mode."], - "devNote": "This could be expanded to unusual setups." + "note": [ + "Doing something precise, risky, or unintuitive while in G-mode or while setting up G-mode.", + "This includes: enemy dodging that would not normally be an issue and is unintuitive, such as enemies that deal a small amount of damage and awkward dodging while artificially morphed;", + "bypassing door locks while in G-mode to maintain indirect G-mode in the next room;", + "exiting direct G-mode while in the open door to get very deep doorstuck and X-Ray climb and doorlock bypass a door above;", + "exiting G-mode while inside of overloaded blocks in order to have them solidify and be able to X-Ray climb;", + "touching an item in direct G-mode before PLMs are overloaded and obtaining the item remotely when exiting G-mode." + ], + "extensionTechs": [ + { + "id": 200, + "name": "canTrickyGMode", + "techRequires": [ + "canComplexGMode" + ], + "otherRequires": [], + "note": ["Doing something particularly precise, risky, or unintuitive while in G-mode or while setting up G-mode."] + } + ] }, { "id": 198,