Unique boss shuffle mode
This commit is contained in:
45
Bosses.py
45
Bosses.py
@@ -166,18 +166,19 @@ def place_bosses(world, player):
|
||||
all_bosses = sorted(boss_table.keys()) #s orted to be deterministic on older pythons
|
||||
placeable_bosses = [boss for boss in all_bosses if boss not in ['Agahnim', 'Agahnim2', 'Ganon']]
|
||||
|
||||
if world.boss_shuffle[player] in ["simple", "full"]:
|
||||
# temporary hack for swordless kholdstare:
|
||||
# temporary hack for swordless kholdstare:
|
||||
if world.boss_shuffle[player] in ["simple", "full", "unique"]:
|
||||
if world.swords[player] == 'swordless':
|
||||
world.get_dungeon('Ice Palace', player).boss = BossFactory('Kholdstare', player)
|
||||
logging.getLogger('').debug('Placing boss Kholdstare at Ice Palace')
|
||||
boss_locations.remove(['Ice Palace', None])
|
||||
placeable_bosses.remove('Kholdstare')
|
||||
|
||||
if world.boss_shuffle[player] in ["simple", "full"]:
|
||||
if world.boss_shuffle[player] == "simple": # vanilla bosses shuffled
|
||||
bosses = placeable_bosses + ['Armos Knights', 'Lanmolas', 'Moldorm']
|
||||
else: # all bosses present, the three duplicates chosen at random
|
||||
bosses = all_bosses + random.sample(placeable_bosses, 3)
|
||||
bosses = placeable_bosses + random.sample(placeable_bosses, 3)
|
||||
|
||||
logging.getLogger('').debug('Bosses chosen %s', bosses)
|
||||
|
||||
@@ -189,12 +190,7 @@ def place_bosses(world, player):
|
||||
raise FillError('Could not place boss for location %s' % loc_text)
|
||||
bosses.remove(boss)
|
||||
|
||||
# GT Bosses can move dungeon - find the real dungeon to place them in
|
||||
if level:
|
||||
loc = [x.name for x in world.dungeons if x.player == player and level in x.bosses.keys()][0]
|
||||
loc_text = loc + ' (' + level + ')'
|
||||
logging.getLogger('').debug('Placing boss %s at %s', boss, loc_text)
|
||||
world.get_dungeon(loc, player).bosses[level] = BossFactory(boss, player)
|
||||
place_boss(boss, level, loc, loc_text, world, player)
|
||||
elif world.boss_shuffle[player] == "random": #all bosses chosen at random
|
||||
for [loc, level] in boss_locations:
|
||||
loc_text = loc + (' ('+level+')' if level else '')
|
||||
@@ -203,9 +199,28 @@ def place_bosses(world, player):
|
||||
except IndexError:
|
||||
raise FillError('Could not place boss for location %s' % loc_text)
|
||||
|
||||
# GT Bosses can move dungeon - find the real dungeon to place them in
|
||||
if level:
|
||||
loc = [x.name for x in world.dungeons if x.player == player and level in x.bosses.keys()][0]
|
||||
loc_text = loc + ' (' + level + ')'
|
||||
logging.getLogger('').debug('Placing boss %s at %s', boss, loc_text)
|
||||
world.get_dungeon(loc, player).bosses[level] = BossFactory(boss, player)
|
||||
place_boss(boss, level, loc, loc_text, world, player)
|
||||
elif world.boss_shuffle[player] == 'unique':
|
||||
bosses = placeable_bosses
|
||||
|
||||
for [loc, level] in boss_locations:
|
||||
loc_text = loc + (' ('+level+')' if level else '')
|
||||
try:
|
||||
if level:
|
||||
boss = random.choice(b for b in placeable_bosses if can_place_boss(world, player, b, loc, level))
|
||||
else:
|
||||
boss = random.choice(b for b in bosses if can_place_boss(world, player, b, loc, level))
|
||||
bosses.remove(boss)
|
||||
except IndexError:
|
||||
raise FillError('Could not place boss for location %s' % loc_text)
|
||||
|
||||
place_boss(boss, level, loc, loc_text, world, player)
|
||||
|
||||
|
||||
def place_boss(boss, level, loc, loc_text, world, player):
|
||||
# GT Bosses can move dungeon - find the real dungeon to place them in
|
||||
if level:
|
||||
loc = [x.name for x in world.dungeons if x.player == player and level in x.bosses.keys()][0]
|
||||
loc_text = loc + ' (' + level + ')'
|
||||
logging.getLogger('').debug('Placing boss %s at %s', boss, loc_text)
|
||||
world.get_dungeon(loc, player).bosses[level] = BossFactory(boss, player)
|
||||
|
||||
Reference in New Issue
Block a user