155 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
import typing
 | 
						|
from Options import Option, Range, Choice, Toggle, DefaultOnToggle
 | 
						|
 | 
						|
 | 
						|
class EvermizerFlags:
 | 
						|
    flags: typing.List[str]
 | 
						|
 | 
						|
    def to_flag(self) -> str:
 | 
						|
        return self.flags[self.value]
 | 
						|
 | 
						|
 | 
						|
class EvermizerFlag:
 | 
						|
    flag: str
 | 
						|
 | 
						|
    def to_flag(self) -> str:
 | 
						|
        return self.flag if self.value != self.default else ''
 | 
						|
 | 
						|
 | 
						|
class OffOnChaosChoice(Choice):
 | 
						|
    option_off = 0
 | 
						|
    option_on = 1
 | 
						|
    option_chaos = 2
 | 
						|
    alias_false = 0
 | 
						|
    alias_true = 1
 | 
						|
 | 
						|
 | 
						|
class Difficulty(EvermizerFlags, Choice):
 | 
						|
    """Changes relative spell cost and stuff"""
 | 
						|
    displayname = "Difficulty"
 | 
						|
    option_easy = 0
 | 
						|
    option_normal = 1
 | 
						|
    option_hard = 2
 | 
						|
    option_chaos = 3  # random is reserved pre 0.2
 | 
						|
    default = 1
 | 
						|
    flags = ['e', 'n', 'h', 'x']
 | 
						|
 | 
						|
 | 
						|
class MoneyModifier(Range):
 | 
						|
    """Money multiplier in %"""
 | 
						|
    displayname = "Money Modifier"
 | 
						|
    range_start = 1
 | 
						|
    range_end = 2500
 | 
						|
    default = 200
 | 
						|
 | 
						|
 | 
						|
class ExpModifier(Range):
 | 
						|
    """EXP multiplier for Weapons, Characters and Spells in %"""
 | 
						|
    displayname = "Exp Modifier"
 | 
						|
    range_start = 1
 | 
						|
    range_end = 2500
 | 
						|
    default = 200
 | 
						|
 | 
						|
 | 
						|
class FixSequence(EvermizerFlag, DefaultOnToggle):
 | 
						|
    """Fix some sequence breaks"""
 | 
						|
    displayname = "Fix Sequence"
 | 
						|
    flag = '1'
 | 
						|
 | 
						|
 | 
						|
class FixCheats(EvermizerFlag, DefaultOnToggle):
 | 
						|
    """Fix cheats left in by the devs (not desert skip)"""
 | 
						|
    displayname = "Fix Cheats"
 | 
						|
    flag = '2'
 | 
						|
 | 
						|
 | 
						|
class FixInfiniteAmmo(EvermizerFlag, Toggle):
 | 
						|
    """Fix infinite ammo glitch"""
 | 
						|
    displayname = "Fix Infinite Ammo"
 | 
						|
    flag = '5'
 | 
						|
 | 
						|
 | 
						|
class FixAtlasGlitch(EvermizerFlag, Toggle):
 | 
						|
    """Fix atlas underflowing stats"""
 | 
						|
    displayname = "Fix Atlas Glitch"
 | 
						|
    flag = '6'
 | 
						|
 | 
						|
 | 
						|
class FixWingsGlitch(EvermizerFlag, Toggle):
 | 
						|
    """Fix wings making you invincible in some areas"""
 | 
						|
    displayname = "Fix Wings Glitch"
 | 
						|
    flag = '7'
 | 
						|
 | 
						|
 | 
						|
class ShorterDialogs(EvermizerFlag, Toggle):
 | 
						|
    """Cuts some dialogs"""
 | 
						|
    displayname = "Shorter Dialogs"
 | 
						|
    flag = '9'
 | 
						|
 | 
						|
 | 
						|
class ShortBossRush(EvermizerFlag, Toggle):
 | 
						|
    """Start boss rush at Magmar, cut HP in half"""
 | 
						|
    displayname = "Short Boss Rush"
 | 
						|
    flag = 'f'
 | 
						|
 | 
						|
 | 
						|
class Ingredienizer(EvermizerFlags, OffOnChaosChoice):
 | 
						|
    """Shuffles or randomizes spell ingredients"""
 | 
						|
    displayname = "Ingredienizer"
 | 
						|
    default = 1
 | 
						|
    flags = ['i', '', 'I']
 | 
						|
 | 
						|
 | 
						|
class Sniffamizer(EvermizerFlags, OffOnChaosChoice):
 | 
						|
    """Shuffles or randomizes drops in sniff locations"""
 | 
						|
    displayname = "Sniffamizer"
 | 
						|
    default = 1
 | 
						|
    flags = ['s', '', 'S']
 | 
						|
 | 
						|
 | 
						|
class Callbeadamizer(EvermizerFlags, OffOnChaosChoice):
 | 
						|
    """Shuffles call bead characters or spells"""
 | 
						|
    displayname = "Callbeadamizer"
 | 
						|
    default = 1
 | 
						|
    flags = ['c', '', 'C']
 | 
						|
 | 
						|
 | 
						|
class Musicmizer(EvermizerFlag, Toggle):
 | 
						|
    """Randomize music for some rooms"""
 | 
						|
    displayname = "Musicmizer"
 | 
						|
    flag = 'm'
 | 
						|
 | 
						|
 | 
						|
class Doggomizer(EvermizerFlags, OffOnChaosChoice):
 | 
						|
    """On shuffles dog per act, Chaos randomizes dog per screen, Pupdunk gives you Everpupper everywhere"""
 | 
						|
    displayname = "Doggomizer"
 | 
						|
    option_pupdunk = 3
 | 
						|
    default = 0
 | 
						|
    flags = ['', 'd', 'D', 'p']
 | 
						|
 | 
						|
 | 
						|
class TurdoMode(EvermizerFlag, Toggle):
 | 
						|
    """Replace offensive spells by Turd Balls with varying strength and make weapons weak"""
 | 
						|
    displayname = "Turdo Mode"
 | 
						|
    flag = 't'
 | 
						|
 | 
						|
 | 
						|
soe_options: typing.Dict[str, type(Option)] = {
 | 
						|
    "difficulty":           Difficulty,
 | 
						|
    "money_modifier":       MoneyModifier,
 | 
						|
    "exp_modifier":         ExpModifier,
 | 
						|
    "fix_sequence":         FixSequence,
 | 
						|
    "fix_cheats":           FixCheats,
 | 
						|
    "fix_infinite_ammo":    FixInfiniteAmmo,
 | 
						|
    "fix_atlas_glitch":     FixAtlasGlitch,
 | 
						|
    "fix_wings_glitch":     FixWingsGlitch,
 | 
						|
    "shorter_dialogs":      ShorterDialogs,
 | 
						|
    "short_boss_rush":      ShortBossRush,
 | 
						|
    "ingredienizer":        Ingredienizer,
 | 
						|
    "sniffamizer":          Sniffamizer,
 | 
						|
    "callbeadamizer":       Callbeadamizer,
 | 
						|
    "musicmizer":           Musicmizer,
 | 
						|
    "doggomizer":           Doggomizer,
 | 
						|
    "turdo_mode":           TurdoMode,
 | 
						|
}
 |