11import typing
2- from Options import Choice , PerGameCommonOptions , Range , OptionDict , OptionList , OptionSet , Option , Toggle , DefaultOnToggle
2+ from Options import Choice , PerGameCommonOptions , Range , OptionDict , OptionList , OptionSet , OptionGroup , Toggle , DefaultOnToggle
33from .variaRandomizer .utils .objectives import _goals
44from dataclasses import dataclass
55
@@ -8,8 +8,15 @@ class StartItemsRemovesFromPool(Toggle):
88 display_name = "StartItems Removes From Item Pool"
99
1010class Preset (Choice ):
11- """Choose one of the presets or specify "varia_custom" to use varia_custom_preset option or specify "custom" to use
12- custom_preset option."""
11+ """Determines the general difficulty of the item placements by adjusting the list of tricks that logic allows.
12+ - Newbie: New to randomizers, but completed Super Metroid 100% and knows basic techniques (Wall Jump, Shinespark, Mid-air Morph)
13+ - Casual: Occasional rando player. No hell runs or suitless Maridia, some easy to learn tricks in logic.
14+ - Regular: Plays rando regularly. Knows many tricks that open up the game.
15+ - Veteran: Experienced rando player. Harder everything, some tougher tricks in logic.
16+ - Expert: Knows almost all tricks: full suitless Maridia, Lower Norfair hell runs, etc.
17+ - Master: Everything on hardest, all tricks known.
18+ In-depth details on each preset can be found on the VARIA website: https://varia.run/presets
19+ You may also specify "varia_custom" to use varia_custom_preset option, or specify "custom" to use custom_preset option."""
1320 display_name = "Preset"
1421 option_newbie = 0
1522 option_casual = 1
@@ -46,7 +53,8 @@ class StartLocation(Choice):
4653 default = 1
4754
4855class DeathLink (Choice ):
49- """When DeathLink is enabled and someone dies, you will die. With survive reserve tanks can save you."""
56+ """When DeathLink is enabled and someone else with DeathLink dies, you will die.
57+ If "Enable Survive" is selected, reserve tanks can save you."""
5058 display_name = "Death Link"
5159 option_disable = 0
5260 option_enable = 1
@@ -56,11 +64,13 @@ class DeathLink(Choice):
5664 default = 0
5765
5866class RemoteItems (Toggle ):
59- """Indicates you get items sent from your own world. This allows coop play of a world."""
60- display_name = "Remote Items"
67+ """Items from your own world are sent via the Archipelago server. This allows co-op play of a world and means that
68+ you will not lose items on death or save file loss."""
69+ display_name = "Remote Items"
6170
6271class MaxDifficulty (Choice ):
63- """Depending on the perceived difficulties of the techniques, bosses, hell runs etc. from the preset, it will
72+ """Maximum difficulty of tricks that are allowed from the seed's Preset.
73+ Depending on the perceived difficulties of the techniques, bosses, hell runs etc. from the preset, it will
6474 prevent the Randomizer from placing an item in a location too difficult to reach with the current items."""
6575 display_name = "Maximum Difficulty"
6676 option_easy = 0
@@ -73,7 +83,7 @@ class MaxDifficulty(Choice):
7383 default = 4
7484
7585class MorphPlacement (Choice ):
76- """Influences where the Morphing Ball with be placed."""
86+ """Influences where the Morphing Ball will be placed."""
7787 display_name = "Morph Placement"
7888 option_early = 0
7989 option_normal = 1
@@ -85,21 +95,21 @@ class StrictMinors(Toggle):
8595 display_name = "Strict Minors"
8696
8797class MissileQty (Range ):
88- """The higher the number the higher the probability of choosing missles when placing a minor."""
98+ """The higher the number, the higher the probability of choosing Missiles when placing a minor."""
8999 display_name = "Missile Quantity"
90100 range_start = 10
91101 range_end = 90
92102 default = 30
93103
94104class SuperQty (Range ):
95- """The higher the number the higher the probability of choosing super missles when placing a minor."""
105+ """The higher the number, the higher the probability of choosing Super Missiles when placing a minor."""
96106 display_name = "Super Quantity"
97107 range_start = 10
98108 range_end = 90
99109 default = 20
100110
101111class PowerBombQty (Range ):
102- """The higher the number the higher the probability of choosing power bombs when placing a minor."""
112+ """The higher the number, the higher the probability of choosing Power Bombs when placing a minor."""
103113 display_name = "Power Bomb Quantity"
104114 range_start = 10
105115 range_end = 90
@@ -123,7 +133,13 @@ class EnergyQty(Choice):
123133 default = 3
124134
125135class AreaRandomization (Choice ):
126- """Randomize areas together using bidirectional access portals."""
136+ """Randomize areas together using bidirectional access portals.
137+ - Off: No change. All rooms are connected the same as in the original game.
138+ - Full: All doors connecting areas will be randomized. "Areas" are roughly determined, but generally are regions
139+ with different tilesets or music. For example, red Brinstar and green/pink Brinstar are different areas, Crocomire
140+ and upper Norfair are different areas, etc.
141+ - Light: Keep the same number of transitions between areas as in vanilla. So Crocomire area will always be connected
142+ to upper Norfair, there'll always be two transitions between Crateria/blue Brinstar and green/pink Brinstar, etc."""
127143 display_name = "Area Randomization"
128144 option_off = 0
129145 option_light = 1
@@ -136,13 +152,13 @@ class AreaLayout(Toggle):
136152 display_name = "Area Layout"
137153
138154class DoorsColorsRando (Toggle ):
139- """Randomize the color of Red/Green/Yellow doors. Add four new type of doors which require Ice/Wave/Spazer/Plasma
140- beams to open them."""
155+ """Randomize the color of Red/Green/Yellow doors. Add four new types of doors which require Ice/Wave/Spazer/Plasma
156+ Beams to open them."""
141157 display_name = "Doors Colors Rando"
142158
143159class AllowGreyDoors (Toggle ):
144160 """When randomizing the color of Red/Green/Yellow doors, some doors can be randomized to Grey. Grey doors will never
145- open, you will have to go around them."""
161+ open; you will have to go around them."""
146162 display_name = "Allow Grey Doors"
147163
148164class BossRandomization (Toggle ):
@@ -169,7 +185,10 @@ class LayoutPatches(DefaultOnToggle):
169185 display_name = "Layout Patches"
170186
171187class VariaTweaks (Toggle ):
172- """Include minor tweaks for the game to behave 'as it should' in a randomizer context"""
188+ """Include minor tweaks for the game to behave 'as it should' in a randomizer context:
189+ - Bomb Torizo always activates after picking up its item and does not require Bomb to activate
190+ - Wrecked Ship item on the Energy Tank Chozo statue is present before defeating Phantoon
191+ - Lower Norfair Chozo statue that lowers the acid toward Gold Torizo does not require Space Jump to activate"""
173192 display_name = "Varia Tweaks"
174193
175194class NerfedCharge (Toggle ):
@@ -179,7 +198,12 @@ class NerfedCharge(Toggle):
179198 display_name = "Nerfed Charge"
180199
181200class GravityBehaviour (Choice ):
182- """Modify the heat damage and enemy damage reduction qualities of the Gravity and Varia Suits."""
201+ """Modify the heat damage and enemy damage reduction qualities of the Gravity and Varia Suits.
202+ - Vanilla: Gravity provides full protection against all environmental damage (heat, spikes, etc.)
203+ - Balanced: Removes Gravity environmental protection. Doubles Varia environmental protection. Enemy damage protection
204+ is vanilla (50% Varia, 75% Gravity).
205+ - Progressive: Gravity provides 50% heat reduction, Varia provides full heat reduction. Each suit adds 50% enemy
206+ and environmental reduction, stacking to 75% reduction if you have both."""
183207 display_name = "Gravity Behaviour"
184208 option_Vanilla = 0
185209 option_Balanced = 1
@@ -233,7 +257,7 @@ class RandomMusic(Toggle):
233257
234258class CustomPreset (OptionDict ):
235259 """
236- see https://randommetroidsolver.pythonanywhere.com /presets for detailed info on each preset settings
260+ see https://varia.run /presets for detailed info on each preset settings
237261 knows: each skill (know) has a pair [can use, perceived difficulty using one of 1, 5, 10, 25, 50 or 100 each one
238262 matching a max_difficulty]
239263 settings: hard rooms, hellruns and bosses settings
@@ -246,7 +270,7 @@ class CustomPreset(OptionDict):
246270 }
247271
248272class VariaCustomPreset (OptionList ):
249- """use an entry from the preset list on https://randommetroidsolver.pythonanywhere.com /presets"""
273+ """use an entry from the preset list on https://varia.run /presets"""
250274 display_name = "Varia Custom Preset"
251275 default = {}
252276
@@ -259,7 +283,7 @@ class EscapeRando(Toggle):
259283 During the escape sequence:
260284 - All doors are opened
261285 - Maridia tube is opened
262- - The Hyper Beam can destroy Bomb , Power Bomb and Super Missile blocks and open blue/green gates from both sides
286+ - The Hyper Beam can destroy Bomb, Power Bomb and Super Missile blocks and open blue/green gates from both sides
263287 - All mini bosses are defeated
264288 - All minor enemies are removed to allow you to move faster and remove lag
265289
@@ -281,9 +305,9 @@ class RemoveEscapeEnemies(Toggle):
281305class Tourian (Choice ):
282306 """
283307 Choose endgame Tourian behaviour:
284- Vanilla: regular vanilla Tourian
285- Fast: speed up Tourian to skip Metroids, Zebetites, and all cutscenes (including Mother Brain 3 fight). Golden Four statues are replaced by an invincible Gadora until all objectives are completed.
286- Disabled: skip Tourian entirely, ie. escape sequence is triggered as soon as all objectives are completed.
308+ - Vanilla: regular vanilla Tourian
309+ - Fast: speed up Tourian to skip Metroids, Zebetites, and all cutscenes (including Mother Brain 3 fight). Golden Four statues are replaced by an invincible Gadora until all objectives are completed.
310+ - Disabled: skip Tourian entirely; the escape sequence is triggered as soon as all objectives are completed.
287311 """
288312 display_name = "Endgame behavior with Tourian"
289313 option_Vanilla = 0
@@ -373,18 +397,78 @@ class RelaxedRoundRobinCF(Toggle):
373397 """
374398 display_name = "Relaxed round robin Crystal Flash"
375399
400+ sm_option_groups = [
401+ OptionGroup ("Logic" , [
402+ Preset ,
403+ MaxDifficulty ,
404+ StartLocation ,
405+ VariaCustomPreset ,
406+ CustomPreset ,
407+ ]),
408+ OptionGroup ("Objectives and Endgame" , [
409+ Objective ,
410+ CustomObjective ,
411+ CustomObjectiveCount ,
412+ CustomObjectiveList ,
413+ Tourian ,
414+ EscapeRando ,
415+ RemoveEscapeEnemies ,
416+ Animals ,
417+ ]),
418+ OptionGroup ("Areas and Layout" , [
419+ AreaRandomization ,
420+ AreaLayout ,
421+ DoorsColorsRando ,
422+ AllowGreyDoors ,
423+ BossRandomization ,
424+ LayoutPatches ,
425+ ]),
426+ OptionGroup ("Item Pool" , [
427+ MorphPlacement ,
428+ StrictMinors ,
429+ MissileQty ,
430+ SuperQty ,
431+ PowerBombQty ,
432+ MinorQty ,
433+ EnergyQty ,
434+ FunCombat ,
435+ FunMovement ,
436+ FunSuits ,
437+ ]),
438+ OptionGroup ("Misc Tweaks" , [
439+ VariaTweaks ,
440+ GravityBehaviour ,
441+ NerfedCharge ,
442+ SpinJumpRestart ,
443+ SpeedKeep ,
444+ InfiniteSpaceJump ,
445+ RelaxedRoundRobinCF ,
446+ ]),
447+ OptionGroup ("Quality of Life" , [
448+ ElevatorsSpeed ,
449+ DoorsSpeed ,
450+ RefillBeforeSave ,
451+ ]),
452+ OptionGroup ("Cosmetic" , [
453+ Hud ,
454+ HideItems ,
455+ NoMusic ,
456+ RandomMusic ,
457+ ]),
458+ ]
459+
376460@dataclass
377461class SMOptions (PerGameCommonOptions ):
378462 start_inventory_removes_from_pool : StartItemsRemovesFromPool
379463 preset : Preset
464+ max_difficulty : MaxDifficulty
380465 start_location : StartLocation
381466 remote_items : RemoteItems
382467 death_link : DeathLink
383468 #majors_split: "Full"
384469 #scav_num_locs: "10"
385470 #scav_randomized: "off"
386471 #scav_escape: "off"
387- max_difficulty : MaxDifficulty
388472 #progression_speed": "medium"
389473 #progression_difficulty": "normal"
390474 morph_placement : MorphPlacement
0 commit comments