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
 | 
