mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
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:
@@ -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)
|
Reference in New Issue
Block a user