151 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			151 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import typing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from Options import PerGameCommonOptions, Choice, Toggle, DeathLink, DefaultOnToggle, StartInventoryPool
							 | 
						||
| 
								 | 
							
								from dataclasses import dataclass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Difficulty(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Choose the difficulty option. Those match DOOM's difficulty options.
							 | 
						||
| 
								 | 
							
								    baby (I'm too young to die.) double ammos, half damage, less monsters or strength.
							 | 
						||
| 
								 | 
							
								    easy (Hey, not too rough.) less monsters or strength.
							 | 
						||
| 
								 | 
							
								    medium (Hurt me plenty.) Default.
							 | 
						||
| 
								 | 
							
								    hard (Ultra-Violence.) More monsters or strength.
							 | 
						||
| 
								 | 
							
								    nightmare (Nightmare!) Monsters attack more rapidly and respawn.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Difficulty"
							 | 
						||
| 
								 | 
							
								    option_baby = 0
							 | 
						||
| 
								 | 
							
								    option_easy = 1
							 | 
						||
| 
								 | 
							
								    option_medium = 2
							 | 
						||
| 
								 | 
							
								    option_hard = 3
							 | 
						||
| 
								 | 
							
								    option_nightmare = 4
							 | 
						||
| 
								 | 
							
								    default = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class RandomMonsters(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Choose how monsters are randomized.
							 | 
						||
| 
								 | 
							
								    vanilla: No randomization
							 | 
						||
| 
								 | 
							
								    shuffle: Monsters are shuffled within the level
							 | 
						||
| 
								 | 
							
								    random_balanced: Monsters are completely randomized, but balanced based on existing ratio in the level. (Small monsters vs medium vs big)
							 | 
						||
| 
								 | 
							
								    random_chaotic: Monsters are completely randomized, but balanced based on existing ratio in the entire game.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Random Monsters"
							 | 
						||
| 
								 | 
							
								    option_vanilla = 0
							 | 
						||
| 
								 | 
							
								    option_shuffle = 1
							 | 
						||
| 
								 | 
							
								    option_random_balanced = 2
							 | 
						||
| 
								 | 
							
								    option_random_chaotic = 3
							 | 
						||
| 
								 | 
							
								    default = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class RandomPickups(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Choose how pickups are randomized.
							 | 
						||
| 
								 | 
							
								    vanilla: No randomization
							 | 
						||
| 
								 | 
							
								    shuffle: Pickups are shuffled within the level
							 | 
						||
| 
								 | 
							
								    random_balanced: Pickups are completely randomized, but balanced based on existing ratio in the level. (Small pickups vs Big)
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Random Pickups"
							 | 
						||
| 
								 | 
							
								    option_vanilla = 0
							 | 
						||
| 
								 | 
							
								    option_shuffle = 1
							 | 
						||
| 
								 | 
							
								    option_random_balanced = 2
							 | 
						||
| 
								 | 
							
								    default = 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class RandomMusic(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Level musics will be randomized.
							 | 
						||
| 
								 | 
							
								    vanilla: No randomization
							 | 
						||
| 
								 | 
							
								    shuffle_selected: Selected episodes' levels will be shuffled
							 | 
						||
| 
								 | 
							
								    shuffle_game: All the music will be shuffled
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Random Music"
							 | 
						||
| 
								 | 
							
								    option_vanilla = 0
							 | 
						||
| 
								 | 
							
								    option_shuffle_selected = 1
							 | 
						||
| 
								 | 
							
								    option_shuffle_game = 2
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class FlipLevels(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Flip levels on one axis.
							 | 
						||
| 
								 | 
							
								    vanilla: No flipping
							 | 
						||
| 
								 | 
							
								    flipped: All levels are flipped
							 | 
						||
| 
								 | 
							
								    random: Random levels are flipped
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Flip Levels"
							 | 
						||
| 
								 | 
							
								    option_vanilla = 0
							 | 
						||
| 
								 | 
							
								    option_flipped = 1
							 | 
						||
| 
								 | 
							
								    option_randomly_flipped = 2
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class AllowDeathLogic(Toggle):
							 | 
						||
| 
								 | 
							
								    """Some locations require a timed puzzle that can only be tried once.
							 | 
						||
| 
								 | 
							
								    After which, if the player failed to get it, the location cannot be checked anymore.
							 | 
						||
| 
								 | 
							
								    By default, no progression items are placed here. There is a way, hovewer, to still get them:
							 | 
						||
| 
								 | 
							
								    Get killed in the current map. The map will reset, you can now attempt the puzzle again."""
							 | 
						||
| 
								 | 
							
								    display_name = "Allow Death Logic"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								class Pro(Toggle):
							 | 
						||
| 
								 | 
							
								    """Include difficult tricks into rules. Mostly employed by speed runners.
							 | 
						||
| 
								 | 
							
								    i.e.: Leaps across to a locked area, trigger a switch behind a window at the right angle, etc."""
							 | 
						||
| 
								 | 
							
								    display_name = "Pro Doom"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class StartWithComputerAreaMaps(Toggle):
							 | 
						||
| 
								 | 
							
								    """Give the player all Computer Area Map items from the start."""
							 | 
						||
| 
								 | 
							
								    display_name = "Start With Computer Area Maps"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ResetLevelOnDeath(DefaultOnToggle):
							 | 
						||
| 
								 | 
							
								    """When dying, levels are reset and monsters respawned. But inventory and checks are kept.
							 | 
						||
| 
								 | 
							
								    Turning this setting off is considered easy mode. Good for new players that don't know the levels well."""
							 | 
						||
| 
								 | 
							
								    display_message="Reset level on death"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Episode1(DefaultOnToggle):
							 | 
						||
| 
								 | 
							
								    """Subterranean and Outpost.
							 | 
						||
| 
								 | 
							
								    If none of the episodes are chosen, Episode 1 will be chosen by default."""
							 | 
						||
| 
								 | 
							
								    display_name = "Episode 1"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Episode2(DefaultOnToggle):
							 | 
						||
| 
								 | 
							
								    """City.
							 | 
						||
| 
								 | 
							
								    If none of the episodes are chosen, Episode 1 will be chosen by default."""
							 | 
						||
| 
								 | 
							
								    display_name = "Episode 2"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Episode3(DefaultOnToggle):
							 | 
						||
| 
								 | 
							
								    """Hell.
							 | 
						||
| 
								 | 
							
								    If none of the episodes are chosen, Episode 1 will be chosen by default."""
							 | 
						||
| 
								 | 
							
								    display_name = "Episode 3"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class SecretLevels(Toggle):
							 | 
						||
| 
								 | 
							
								    """Secret levels.
							 | 
						||
| 
								 | 
							
								    This is too short to be an episode. It's additive.
							 | 
						||
| 
								 | 
							
								    Another episode will have to be selected along with this one.
							 | 
						||
| 
								 | 
							
								    Otherwise episode 1 will be added."""
							 | 
						||
| 
								 | 
							
								    display_name = "Secret Levels"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@dataclass
							 | 
						||
| 
								 | 
							
								class DOOM2Options(PerGameCommonOptions):
							 | 
						||
| 
								 | 
							
								    start_inventory_from_pool: StartInventoryPool
							 | 
						||
| 
								 | 
							
								    difficulty: Difficulty
							 | 
						||
| 
								 | 
							
								    random_monsters: RandomMonsters
							 | 
						||
| 
								 | 
							
								    random_pickups: RandomPickups
							 | 
						||
| 
								 | 
							
								    random_music: RandomMusic
							 | 
						||
| 
								 | 
							
								    flip_levels: FlipLevels
							 | 
						||
| 
								 | 
							
								    allow_death_logic: AllowDeathLogic
							 | 
						||
| 
								 | 
							
								    pro: Pro
							 | 
						||
| 
								 | 
							
								    start_with_computer_area_maps: StartWithComputerAreaMaps
							 | 
						||
| 
								 | 
							
								    death_link: DeathLink
							 | 
						||
| 
								 | 
							
								    reset_level_on_death: ResetLevelOnDeath
							 | 
						||
| 
								 | 
							
								    episode1: Episode1
							 | 
						||
| 
								 | 
							
								    episode2: Episode2
							 | 
						||
| 
								 | 
							
								    episode3: Episode3
							 | 
						||
| 
								 | 
							
								    episode4: SecretLevels
							 |