Adding damage rando v2 options to timespinner rando (#503)

This commit is contained in:
weffjebster
2022-05-14 05:52:35 -04:00
committed by GitHub
parent 3f691d6977
commit b0b41711d4

View File

@@ -1,6 +1,7 @@
from typing import Dict
from typing import Dict, Union
from BaseClasses import MultiWorld
from Options import Toggle, DefaultOnToggle, DeathLink, Choice, Range, Option
from Options import Toggle, DefaultOnToggle, DeathLink, Choice, Range, Option, OptionDict
from schema import Schema, And
class StartWithJewelryBox(Toggle):
"Start with Jewelry Box unlocked"
@@ -54,9 +55,120 @@ class LoreChecks(Toggle):
"Memories and journal entries contain items."
display_name = "Lore Checks"
class DamageRando(Toggle):
"Each orb has a high chance of having lower base damage and a low chance of having much higher base damage."
class DamageRando(Choice):
"Randomly nerfs and buffs some orbs and their associated spells as well as some associated rings."
display_name = "Damage Rando"
option_off = 0
option_allnerfs = 1
option_mostlynerfs = 2
option_balanced = 3
option_mostlybuffs = 4
option_allbuffs = 5
option_manual = 6
class DamageRandoOverrides(OptionDict):
"Manual +/-/normal odds for each orb. Put 0 if you don't want a certain nerf or buff to be a possibility."
schema = Schema({
"Blue": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Blade": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Fire": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Plasma": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Iron": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Ice": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Wind": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Gun": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Umbra": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Empire": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Eye": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Blood": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"ForbiddenTome": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Shattered": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Nether": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
"Radiant": {
"MinusOdds": And(int, lambda n: n >= 0),
"NormalOdds": And(int, lambda n: n >= 0),
"PlusOdds": And(int, lambda n: n >= 0)
},
})
display_name = "Damage Rando Overrides"
default = {
"Blue": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Blade": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Fire": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Plasma": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Iron": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Ice": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Wind": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Gun": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Umbra": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Empire": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Eye": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Blood": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"ForbiddenTome": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Shattered": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Nether": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
"Radiant": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 },
}
class ShopFill(Choice):
"""Sets the items for sale in Merchant Crow's shops.
@@ -111,6 +223,7 @@ timespinner_options: Dict[str, Option] = {
"Cantoran": Cantoran,
"LoreChecks": LoreChecks,
"DamageRando": DamageRando,
"DamageRandoOverrides": DamageRandoOverrides,
"ShopFill": ShopFill,
"ShopWarpShards": ShopWarpShards,
"ShopMultiplier": ShopMultiplier,
@@ -122,10 +235,9 @@ timespinner_options: Dict[str, Option] = {
def is_option_enabled(world: MultiWorld, player: int, name: str) -> bool:
return get_option_value(world, player, name) > 0
def get_option_value(world: MultiWorld, player: int, name: str) -> int:
def get_option_value(world: MultiWorld, player: int, name: str) -> Union[int, dict]:
option = getattr(world, name, None)
if option == None:
return 0
return int(option[player].value)
return option[player].value