70 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import typing | ||
|  | 
 | ||
|  | speed_characters_1 = "Sonic vs Shadow 1" | ||
|  | speed_characters_2 = "Sonic vs Shadow 2" | ||
|  | mech_characters_1 = "Tails vs Eggman 1" | ||
|  | mech_characters_2 = "Tails vs Eggman 2" | ||
|  | hunt_characters_1 = "Knuckles vs Rouge 1" | ||
|  | big_foot = "F-6t BIG FOOT" | ||
|  | hot_shot = "B-3x HOT SHOT" | ||
|  | flying_dog = "R-1/A FLYING DOG" | ||
|  | egg_golem_sonic = "Egg Golem (Sonic)" | ||
|  | egg_golem_eggman = "Egg Golem (Eggman)" | ||
|  | king_boom_boo = "King Boom Boo" | ||
|  | 
 | ||
|  | gate_bosses_no_requirements_table = { | ||
|  |     speed_characters_1: 0, | ||
|  |     speed_characters_2: 1, | ||
|  |     mech_characters_1: 2, | ||
|  |     mech_characters_2: 3, | ||
|  |     hunt_characters_1: 4, | ||
|  |     big_foot: 5, | ||
|  |     hot_shot: 6, | ||
|  |     flying_dog: 7, | ||
|  |     egg_golem_sonic: 8, | ||
|  |     egg_golem_eggman: 9, | ||
|  | } | ||
|  | 
 | ||
|  | gate_bosses_with_requirements_table = { | ||
|  |     king_boom_boo: 10, | ||
|  | } | ||
|  | 
 | ||
|  | all_gate_bosses_table = { | ||
|  |     **gate_bosses_no_requirements_table, | ||
|  |     **gate_bosses_with_requirements_table, | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | def get_boss_name(boss: int): | ||
|  |     for key, value in gate_bosses_no_requirements_table.items(): | ||
|  |         if value == boss: | ||
|  |             return key | ||
|  |     for key, value in gate_bosses_with_requirements_table.items(): | ||
|  |         if value == boss: | ||
|  |             return key | ||
|  | 
 | ||
|  | 
 | ||
|  | def boss_has_requirement(boss: int): | ||
|  |     return boss >= len(gate_bosses_no_requirements_table) | ||
|  | 
 | ||
|  | 
 | ||
|  | def get_gate_bosses(world, player: int): | ||
|  |     selected_bosses: typing.List[int] = [] | ||
|  |     boss_gates: typing.List[int] = [] | ||
|  |     available_bosses: typing.List[str] = list(gate_bosses_no_requirements_table.keys()) | ||
|  |     world.random.shuffle(available_bosses) | ||
|  |     halfway = False | ||
|  | 
 | ||
|  |     for x in range(world.number_of_level_gates[player]): | ||
|  |         if (not halfway) and ((x + 1) / world.number_of_level_gates[player]) > 0.5: | ||
|  |             available_bosses.extend(gate_bosses_with_requirements_table) | ||
|  |             world.random.shuffle(available_bosses) | ||
|  |             halfway = True | ||
|  |         selected_bosses.append(all_gate_bosses_table[available_bosses[0]]) | ||
|  |         boss_gates.append(x + 1) | ||
|  |         available_bosses.remove(available_bosses[0]) | ||
|  | 
 | ||
|  |     bosses: typing.Dict[int, int] = dict(zip(boss_gates, selected_bosses)) | ||
|  | 
 | ||
|  |     return bosses |