188 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Python
		
	
	
	
from Options import Choice, Toggle, DefaultOnToggle, DeathLink, StartInventoryPool
 | 
						|
import random
 | 
						|
 | 
						|
 | 
						|
class ChoiceIsRandom(Choice):
 | 
						|
    randomized: bool = False
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def from_text(cls, text: str) -> Choice:
 | 
						|
        text = text.lower()
 | 
						|
        if text == "random":
 | 
						|
            cls.randomized = True
 | 
						|
            return cls(random.choice(list(cls.name_lookup)))
 | 
						|
        for option_name, value in cls.options.items():
 | 
						|
            if option_name == text:
 | 
						|
                return cls(value)
 | 
						|
        raise KeyError(
 | 
						|
            f'Could not find option "{text}" for "{cls.__name__}", '
 | 
						|
            f'known options are {", ".join(f"{option}" for option in cls.name_lookup.values())}')
 | 
						|
 | 
						|
 | 
						|
class PrieDieuWarp(DefaultOnToggle):
 | 
						|
    """Automatically unlocks the ability to warp between Prie Dieu shrines."""
 | 
						|
    display_name = "Unlock Fast Travel"
 | 
						|
 | 
						|
 | 
						|
class SkipCutscenes(DefaultOnToggle):
 | 
						|
    """Automatically skips most cutscenes."""
 | 
						|
    display_name = "Auto Skip Cutscenes"
 | 
						|
 | 
						|
 | 
						|
class CorpseHints(DefaultOnToggle):
 | 
						|
    """Changes the 34 corpses in game to give various hints about item locations."""
 | 
						|
    display_name = "Corpse Hints"
 | 
						|
 | 
						|
 | 
						|
class Difficulty(Choice):
 | 
						|
    """Adjusts the overall difficulty of the randomizer, including upgrades required to defeat bosses 
 | 
						|
    and advanced movement tricks or glitches."""
 | 
						|
    display_name = "Difficulty"
 | 
						|
    option_easy = 0
 | 
						|
    option_normal = 1
 | 
						|
    option_hard = 2
 | 
						|
    default = 1
 | 
						|
 | 
						|
 | 
						|
class Penitence(Toggle):
 | 
						|
    """Allows one of the three Penitences to be chosen at the beginning of the game."""
 | 
						|
    display_name = "Penitence"
 | 
						|
 | 
						|
 | 
						|
class StartingLocation(ChoiceIsRandom):
 | 
						|
    """Choose where to start the randomizer. Note that some starting locations cannot be chosen with certain 
 | 
						|
    other options.
 | 
						|
    Specifically, Brotherhood and Mourning And Havoc cannot be chosen if Shuffle Dash is enabled, and Grievance Ascends 
 | 
						|
    cannot be chosen if Shuffle Wall Climb is enabled."""
 | 
						|
    display_name = "Starting Location"
 | 
						|
    option_brotherhood = 0
 | 
						|
    option_albero = 1
 | 
						|
    option_convent = 2
 | 
						|
    option_grievance = 3
 | 
						|
    option_knot_of_words = 4
 | 
						|
    option_rooftops = 5
 | 
						|
    option_mourning_havoc = 6
 | 
						|
    default = 0
 | 
						|
 | 
						|
 | 
						|
class Ending(Choice):
 | 
						|
    """Choose which ending is required to complete the game.
 | 
						|
    Talking to Tirso in Albero will tell you the selected ending for the current game.
 | 
						|
    Ending A: Collect all thorn upgrades.
 | 
						|
    Ending C: Collect all thorn upgrades and the Holy Wound of Abnegation."""
 | 
						|
    display_name = "Ending"
 | 
						|
    option_any_ending = 0
 | 
						|
    option_ending_a = 1
 | 
						|
    option_ending_c = 2
 | 
						|
    default = 0
 | 
						|
 | 
						|
 | 
						|
class SkipLongQuests(Toggle):
 | 
						|
    """Ensures that the rewards for long quests will be filler items.
 | 
						|
    Affected locations: \"Albero: Donate 50000 Tears\", \"Ossuary: 11th reward\", \"AtTotS: Miriam's gift\", 
 | 
						|
    \"TSC: Jocinero's final reward\""""
 | 
						|
    display_name = "Skip Long Quests"
 | 
						|
 | 
						|
 | 
						|
class ThornShuffle(Choice):
 | 
						|
    """Shuffles the Thorn given by Deogracias and all Thorn upgrades into the item pool."""
 | 
						|
    display_name = "Shuffle Thorn"
 | 
						|
    option_anywhere = 0
 | 
						|
    option_local_only = 1
 | 
						|
    option_vanilla = 2
 | 
						|
    default = 0
 | 
						|
 | 
						|
 | 
						|
class DashShuffle(Toggle):
 | 
						|
    """Turns the ability to dash into an item that must be found in the multiworld."""
 | 
						|
    display_name = "Shuffle Dash"
 | 
						|
 | 
						|
 | 
						|
class WallClimbShuffle(Toggle):
 | 
						|
    """Turns the ability to climb walls with your sword into an item that must be found in the multiworld."""
 | 
						|
    display_name = "Shuffle Wall Climb"
 | 
						|
 | 
						|
 | 
						|
class ReliquaryShuffle(DefaultOnToggle):
 | 
						|
    """Adds the True Torment exclusive Reliquary rosary beads into the item pool."""
 | 
						|
    display_name = "Shuffle Penitence Rewards"
 | 
						|
 | 
						|
 | 
						|
class CustomItem1(Toggle):
 | 
						|
    """Adds the custom relic Boots of Pleading into the item pool, which grants the ability to fall onto spikes 
 | 
						|
    and survive.
 | 
						|
    Must have the \"Blasphemous-Boots-of-Pleading\" mod installed to connect to a multiworld."""
 | 
						|
    display_name = "Boots of Pleading"
 | 
						|
 | 
						|
 | 
						|
class CustomItem2(Toggle):
 | 
						|
    """Adds the custom relic Purified Hand of the Nun into the item pool, which grants the ability to jump 
 | 
						|
    a second time in mid-air.
 | 
						|
    Must have the \"Blasphemous-Double-Jump\" mod installed to connect to a multiworld."""
 | 
						|
    display_name = "Purified Hand of the Nun"
 | 
						|
 | 
						|
 | 
						|
class StartWheel(Toggle):
 | 
						|
    """Changes the beginning gift to The Young Mason's Wheel."""
 | 
						|
    display_name = "Start with Wheel"
 | 
						|
 | 
						|
 | 
						|
class SkillRando(Toggle):
 | 
						|
    """Randomizes the abilities from the skill tree into the item pool."""
 | 
						|
    display_name = "Skill Randomizer"
 | 
						|
 | 
						|
 | 
						|
class EnemyRando(Choice):
 | 
						|
    """Randomizes the enemies that appear in each room.
 | 
						|
    Shuffled: Enemies will be shuffled amongst each other, but can only appear as many times as they do in 
 | 
						|
    a standard game.
 | 
						|
    Randomized: Every enemy is completely random, and can appear any number of times.
 | 
						|
    Some enemies will never be randomized."""
 | 
						|
    display_name = "Enemy Randomizer"
 | 
						|
    option_disabled = 0
 | 
						|
    option_shuffled = 1
 | 
						|
    option_randomized = 2
 | 
						|
    default = 0
 | 
						|
 | 
						|
 | 
						|
class EnemyGroups(DefaultOnToggle):
 | 
						|
    """Randomized enemies will chosen from sets of specific groups. 
 | 
						|
    (Weak, normal, large, flying)
 | 
						|
    Has no effect if Enemy Randomizer is disabled."""
 | 
						|
    display_name = "Enemy Groups"
 | 
						|
 | 
						|
 | 
						|
class EnemyScaling(DefaultOnToggle):
 | 
						|
    """Randomized enemies will have their stats increased or decreased depending on the area they appear in.
 | 
						|
    Has no effect if Enemy Randomizer is disabled."""
 | 
						|
    display_name = "Enemy Scaling"
 | 
						|
 | 
						|
 | 
						|
class BlasphemousDeathLink(DeathLink):
 | 
						|
    """When you die, everyone dies. The reverse is also true.
 | 
						|
    Note that Guilt Fragments will not appear when killed by Death Link."""
 | 
						|
 | 
						|
 | 
						|
blasphemous_options = {
 | 
						|
    "prie_dieu_warp": PrieDieuWarp,
 | 
						|
    "skip_cutscenes": SkipCutscenes,
 | 
						|
    "corpse_hints": CorpseHints,
 | 
						|
    "difficulty": Difficulty,
 | 
						|
    "penitence": Penitence,
 | 
						|
    "starting_location": StartingLocation,
 | 
						|
    "ending": Ending,
 | 
						|
    "skip_long_quests": SkipLongQuests,
 | 
						|
    "thorn_shuffle" : ThornShuffle,
 | 
						|
    "dash_shuffle": DashShuffle,
 | 
						|
    "wall_climb_shuffle": WallClimbShuffle,
 | 
						|
    "reliquary_shuffle": ReliquaryShuffle,
 | 
						|
    "boots_of_pleading": CustomItem1,
 | 
						|
    "purified_hand": CustomItem2,
 | 
						|
    "start_wheel": StartWheel,
 | 
						|
    "skill_randomizer": SkillRando,
 | 
						|
    "enemy_randomizer": EnemyRando,
 | 
						|
    "enemy_groups": EnemyGroups,
 | 
						|
    "enemy_scaling": EnemyScaling,
 | 
						|
    "death_link": BlasphemousDeathLink,
 | 
						|
    "start_inventory": StartInventoryPool
 | 
						|
} |