Skip to content

Commit 4ae36ac

Browse files
authored
Super Metroid: Improve Option Descriptions and Add Option Groups (ArchipelagoMW#5100)
1 parent ffab3a4 commit 4ae36ac

File tree

2 files changed

+110
-25
lines changed

2 files changed

+110
-25
lines changed

worlds/sm/Options.py

Lines changed: 108 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 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
33
from .variaRandomizer.utils.objectives import _goals
44
from dataclasses import dataclass
55

@@ -8,8 +8,15 @@ class StartItemsRemovesFromPool(Toggle):
88
display_name = "StartItems Removes From Item Pool"
99

1010
class 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

4855
class 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

5866
class 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

6271
class 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

7585
class 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

8797
class 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

94104
class 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

101111
class 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

125135
class 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

138154
class 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

143159
class 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

148164
class BossRandomization(Toggle):
@@ -169,7 +185,10 @@ class LayoutPatches(DefaultOnToggle):
169185
display_name = "Layout Patches"
170186

171187
class 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

175194
class NerfedCharge(Toggle):
@@ -179,7 +198,12 @@ class NerfedCharge(Toggle):
179198
display_name = "Nerfed Charge"
180199

181200
class 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

234258
class 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

248272
class 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):
281305
class 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
377461
class 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

worlds/sm/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
logger = logging.getLogger("Super Metroid")
1717

18-
from .Options import SMOptions
18+
from .Options import SMOptions, sm_option_groups
1919
from .Client import SMSNIClient
2020
from .Rom import SM_ROM_MAX_PLAYERID, SM_ROM_PLAYERDATA_COUNT, SMProcedurePatch, get_sm_symbols
2121
import Utils
@@ -78,6 +78,7 @@ class SMWeb(WebWorld):
7878
"multiworld/en",
7979
["Farrak Kilhn"]
8080
)]
81+
option_groups = sm_option_groups
8182

8283

8384
class ByteEdit(TypedDict):

0 commit comments

Comments
 (0)