SM: 20221101 update (#1479)

This adds support to most of Varia's 20221101 update. Notably, added Options for:
- Objectives
- Tourian
- RelaxedRoundRobinCF

As well as previously unsupported Options:
- EscapeRando
- RemoveEscapeEnemies
- HideItems
This commit is contained in:
lordlou
2023-04-09 18:35:46 -04:00
committed by GitHub
parent 0bc5a3bc8d
commit 6059b5ef66
78 changed files with 3214 additions and 24689 deletions

View File

@@ -56,7 +56,7 @@ def exists(resource: str):
return os.path.exists(resource)
def isStdPreset(preset):
return preset in ['newbie', 'casual', 'regular', 'veteran', 'expert', 'master', 'samus', 'solution', 'Season_Races', 'SMRAT2021']
return preset in ['newbie', 'casual', 'regular', 'veteran', 'expert', 'master', 'samus', 'solution', 'Season_Races', 'SMRAT2021', 'Torneio_SGPT3']
def getPresetDir(preset) -> str:
if isStdPreset(preset):
@@ -316,6 +316,7 @@ class PresetLoaderDict(PresetLoader):
def getDefaultMultiValues():
from ..graph.graph_utils import GraphUtils
from ..utils.objectives import Objectives
defaultMultiValues = {
'startLocation': GraphUtils.getStartAccessPointNames(),
'majorsSplit': ['Full', 'FullWithHUD', 'Major', 'Chozo', 'Scavenger'],
@@ -323,7 +324,10 @@ def getDefaultMultiValues():
'progressionDifficulty': ['easier', 'normal', 'harder'],
'morphPlacement': ['early', 'normal'], #['early', 'late', 'normal'],
'energyQty': ['ultra sparse', 'sparse', 'medium', 'vanilla'],
'gravityBehaviour': ['Vanilla', 'Balanced', 'Progressive']
'gravityBehaviour': ['Vanilla', 'Balanced', 'Progressive'],
'areaRandomization': ['off', 'full', 'light'],
'objective': Objectives.getAllGoals(removeNothing=True),
'tourian': ['Vanilla', 'Fast', 'Disabled']
}
return defaultMultiValues
@@ -363,17 +367,16 @@ def loadRandoPreset(world, player, args):
args.noVariaTweaks = not world.varia_tweaks[player].value
args.maxDifficulty = diffs[world.max_difficulty[player].value]
#args.suitsRestriction = world.suits_restriction[player].value
#args.hideItems = world.hide_items[player].value
args.hideItems = world.hide_items[player].value
args.strictMinors = world.strict_minors[player].value
args.noLayout = not world.layout_patches[player].value
args.gravityBehaviour = defaultMultiValues["gravityBehaviour"][world.gravity_behaviour[player].value]
args.nerfedCharge = world.nerfed_charge[player].value
args.area = world.area_randomization[player].value != 0
if args.area:
args.area = world.area_randomization[player].current_key
if args.area != "off":
args.areaLayoutBase = not world.area_layout[player].value
args.lightArea = world.area_randomization[player].value == 1
#args.escapeRando
#args.noRemoveEscapeEnemies
args.escapeRando = world.escape_rando[player].value
args.noRemoveEscapeEnemies = not world.remove_escape_enemies[player].value
args.doorsColorsRando = world.doors_colors_rando[player].value
args.allowGreyDoors = world.allow_grey_doors[player].value
args.bosses = world.boss_randomization[player].value
@@ -384,7 +387,12 @@ def loadRandoPreset(world, player, args):
if world.fun_suits[player].value:
args.superFun.append("Suits")
ipsPatches = {"spin_jump_restart":"spinjumprestart", "rando_speed":"rando_speed", "elevators_doors_speed":"elevators_doors_speed", "refill_before_save":"refill_before_save"}
ipsPatches = { "spin_jump_restart":"spinjumprestart",
"rando_speed":"rando_speed",
"elevators_speed":"elevators_speed",
"fast_doors":"fast_doors",
"refill_before_save":"refill_before_save",
"relaxed_round_robin_cf":"relaxed_round_robin_cf"}
for settingName, patchName in ipsPatches.items():
if hasattr(world, settingName) and getattr(world, settingName)[player].value:
args.patches.append(patchName + '.ips')
@@ -399,7 +407,6 @@ def loadRandoPreset(world, player, args):
#args.majorsSplit
#args.scavNumLocs
#args.scavRandomized
#args.scavEscape
args.startLocation = defaultMultiValues["startLocation"][world.start_location[player].value]
#args.progressionDifficulty
#args.progressionSpeed
@@ -408,6 +415,8 @@ def loadRandoPreset(world, player, args):
args.powerBombQty = world.power_bomb_qty[player].value / float(10)
args.minorQty = world.minor_qty[player].value
args.energyQty = defaultMultiValues["energyQty"][world.energy_qty[player].value]
args.objective = world.objective[player].value
args.tourian = defaultMultiValues["tourian"][world.tourian[player].value]
#args.minimizerN
#args.minimizerTourian
@@ -425,7 +434,6 @@ def getRandomizerDefaultParameters():
defaultParams['majorsSplitMultiSelect'] = defaultMultiValues['majorsSplit']
defaultParams['scavNumLocs'] = "10"
defaultParams['scavRandomized'] = "off"
defaultParams['scavEscape'] = "off"
defaultParams['startLocation'] = "Landing Site"
defaultParams['startLocationMultiSelect'] = defaultMultiValues['startLocation']
defaultParams['maxDifficulty'] = 'hardcore'
@@ -444,9 +452,13 @@ def getRandomizerDefaultParameters():
defaultParams['minorQty'] = "100"
defaultParams['energyQty'] = "vanilla"
defaultParams['energyQtyMultiSelect'] = defaultMultiValues['energyQty']
defaultParams['objectiveRandom'] = "off"
defaultParams['nbObjective'] = "4"
defaultParams['objective'] = ["kill all G4"]
defaultParams['objectiveMultiSelect'] = defaultMultiValues['objective']
defaultParams['tourian'] = "Vanilla"
defaultParams['areaRandomization'] = "off"
defaultParams['areaLayout'] = "off"
defaultParams['lightAreaRandomization'] = "off"
defaultParams['doorsColorsRando'] = "off"
defaultParams['allowGreyDoors'] = "off"
defaultParams['escapeRando'] = "off"
@@ -454,7 +466,6 @@ def getRandomizerDefaultParameters():
defaultParams['bossRandomization'] = "off"
defaultParams['minimizer'] = "off"
defaultParams['minimizerQty'] = "45"
defaultParams['minimizerTourian'] = "off"
defaultParams['funCombat'] = "off"
defaultParams['funMovement'] = "off"
defaultParams['funSuits'] = "off"
@@ -463,8 +474,10 @@ def getRandomizerDefaultParameters():
defaultParams['gravityBehaviour'] = "Balanced"
defaultParams['gravityBehaviourMultiSelect'] = defaultMultiValues['gravityBehaviour']
defaultParams['nerfedCharge'] = "off"
defaultParams['relaxed_round_robin_cf'] = "off"
defaultParams['itemsounds'] = "on"
defaultParams['elevators_doors_speed'] = "on"
defaultParams['elevators_speed'] = "on"
defaultParams['fast_doors'] = "on"
defaultParams['spinjumprestart'] = "off"
defaultParams['rando_speed'] = "off"
defaultParams['Infinite_Space_Jump'] = "off"
@@ -496,4 +509,22 @@ def fixEnergy(items):
items.append('{}-ETank'.format(maxETank))
if maxReserve > 0:
items.append('{}-Reserve'.format(maxReserve))
# keep biggest crystal flash
cfs = [i for i in items if i.find('CrystalFlash') != -1]
if len(cfs) > 1:
maxCf = 0
for cf in cfs:
nCf = int(cf[0:cf.find('-CrystalFlash')])
if nCf > maxCf:
maxCf = nCf
items.remove(cf)
items.append('{}-CrystalFlash'.format(maxCf))
return items
def dumpErrorMsg(outFileName, msg):
print("DIAG: " + msg)
if outFileName is not None:
with open(outFileName, 'w') as jsonFile:
json.dump({"errorMsg": msg}, jsonFile)