| 
									
										
										
										
											2024-04-18 12:56:10 -04:00
										 |  |  | from Options import PerGameCommonOptions, Choice, Toggle, DeathLink, DefaultOnToggle, StartInventoryPool | 
					
						
							|  |  |  | from dataclasses import dataclass | 
					
						
							| 
									
										
										
										
											2023-11-25 09:43:14 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Goal(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Choose the main goal. | 
					
						
							|  |  |  |     complete_all_levels: All levels of the selected episodes | 
					
						
							|  |  |  |     complete_boss_levels: Boss levels (E#M8) of selected episodes | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Goal" | 
					
						
							|  |  |  |     option_complete_all_levels = 0 | 
					
						
							|  |  |  |     option_complete_boss_levels = 1 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							| 
									
										
										
										
											2023-07-02 11:34:55 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Difficulty(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-11-30 18:46:34 -08:00
										 |  |  |     Choose the game difficulty. These options match DOOM's skill levels. | 
					
						
							|  |  |  |     baby (I'm too young to die.) Same as easy, with double ammo pickups and half damage taken. | 
					
						
							|  |  |  |     easy (Hey, not too rough.) Less monsters or strength. | 
					
						
							| 
									
										
										
										
											2023-07-02 11:34:55 -04:00
										 |  |  |     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 | 
					
						
							| 
									
										
										
										
											2024-11-30 18:46:34 -08:00
										 |  |  |     alias_itytd = 0 | 
					
						
							|  |  |  |     alias_hntr = 1 | 
					
						
							|  |  |  |     alias_hmp = 2 | 
					
						
							|  |  |  |     alias_uv = 3 | 
					
						
							|  |  |  |     alias_nm = 4 | 
					
						
							| 
									
										
										
										
											2023-07-02 11:34:55 -04:00
										 |  |  |     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) | 
					
						
							| 
									
										
										
										
											2023-11-25 09:43:14 -05:00
										 |  |  |     random_chaotic: Monsters are completely randomized, but balanced based on existing ratio in the entire game.     | 
					
						
							| 
									
										
										
										
											2023-07-02 11:34:55 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Random Monsters" | 
					
						
							|  |  |  |     option_vanilla = 0 | 
					
						
							|  |  |  |     option_shuffle = 1 | 
					
						
							|  |  |  |     option_random_balanced = 2 | 
					
						
							| 
									
										
										
										
											2023-11-25 09:43:14 -05:00
										 |  |  |     option_random_chaotic = 3 | 
					
						
							| 
									
										
										
										
											2023-07-02 11:34:55 -04:00
										 |  |  |     default = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-25 09:43:14 -05:00
										 |  |  | 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 | 
					
						
							|  |  |  |     randomly_flipped: Random levels are flipped | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Flip Levels" | 
					
						
							|  |  |  |     option_vanilla = 0 | 
					
						
							|  |  |  |     option_flipped = 1 | 
					
						
							|  |  |  |     option_randomly_flipped = 2 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-02 11:34:55 -04:00
										 |  |  | 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" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-25 09:43:14 -05:00
										 |  |  |      | 
					
						
							|  |  |  | 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" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-02 11:34:55 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-21 20:22:24 -04:00
										 |  |  | class StartWithComputerAreaMaps(Toggle): | 
					
						
							|  |  |  |     """Give the player all Computer Area Map items from the start.""" | 
					
						
							|  |  |  |     display_name = "Start With Computer Area Maps" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-25 09:43:14 -05:00
										 |  |  | 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.""" | 
					
						
							| 
									
										
										
										
											2024-11-29 15:34:14 -05:00
										 |  |  |     display_name = "Reset Level on Death" | 
					
						
							| 
									
										
										
										
											2023-11-25 09:43:14 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-02 11:34:55 -04:00
										 |  |  | class Episode1(DefaultOnToggle): | 
					
						
							|  |  |  |     """Knee-Deep in the Dead.
 | 
					
						
							|  |  |  |     If none of the episodes are chosen, Episode 1 will be chosen by default."""
 | 
					
						
							|  |  |  |     display_name = "Episode 1" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Episode2(DefaultOnToggle): | 
					
						
							| 
									
										
										
										
											2023-07-08 14:29:46 -04:00
										 |  |  |     """The Shores of Hell.
 | 
					
						
							| 
									
										
										
										
											2023-07-02 11:34:55 -04:00
										 |  |  |     If none of the episodes are chosen, Episode 1 will be chosen by default."""
 | 
					
						
							|  |  |  |     display_name = "Episode 2" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Episode3(DefaultOnToggle): | 
					
						
							| 
									
										
										
										
											2023-07-08 14:29:46 -04:00
										 |  |  |     """Inferno.
 | 
					
						
							| 
									
										
										
										
											2023-07-02 11:34:55 -04:00
										 |  |  |     If none of the episodes are chosen, Episode 1 will be chosen by default."""
 | 
					
						
							|  |  |  |     display_name = "Episode 3" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-25 15:02:59 -04:00
										 |  |  | class Episode4(Toggle): | 
					
						
							| 
									
										
										
										
											2023-07-08 14:29:46 -04:00
										 |  |  |     """Thy Flesh Consumed.
 | 
					
						
							|  |  |  |     If none of the episodes are chosen, Episode 1 will be chosen by default."""
 | 
					
						
							|  |  |  |     display_name = "Episode 4" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-18 12:56:10 -04:00
										 |  |  | @dataclass | 
					
						
							|  |  |  | class DOOM1993Options(PerGameCommonOptions): | 
					
						
							|  |  |  |     start_inventory_from_pool: StartInventoryPool | 
					
						
							|  |  |  |     goal: Goal | 
					
						
							|  |  |  |     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: Episode4 | 
					
						
							|  |  |  | 
 |