mirror of
				https://github.com/MarioSpore/Grinch-AP.git
				synced 2025-10-21 20:21:32 -06:00 
			
		
		
		
	
		
			
	
	
		
			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 |