diff --git a/EntranceRandomizer.py b/EntranceRandomizer.py index 647f2a1d..862d1c70 100755 --- a/EntranceRandomizer.py +++ b/EntranceRandomizer.py @@ -292,8 +292,10 @@ def parse_arguments(argv, no_defaults=False): parser.add_argument('--skip_playthrough', action='store_true', default=defval(False)) parser.add_argument('--enemizercli', default=defval('EnemizerCLI/EnemizerCLI.Core')) parser.add_argument('--shufflebosses', default=defval('none'), choices=['none', 'basic', 'normal', 'chaos']) - parser.add_argument('--shuffleenemies', default=defval('none'), choices=['none', 'shuffled', 'chaos']) - parser.add_argument('--enemy_health', default=defval('default'), choices=['default', 'easy', 'normal', 'hard', 'expert']) + parser.add_argument('--shuffleenemies', default=defval('none'), + choices=['none', 'shuffled', 'chaos', 'chaosthieves']) + parser.add_argument('--enemy_health', default=defval('default'), + choices=['default', 'easy', 'normal', 'hard', 'expert']) parser.add_argument('--enemy_damage', default=defval('default'), choices=['default', 'shuffled', 'chaos']) parser.add_argument('--shufflepots', default=defval(False), action='store_true') parser.add_argument('--beemizer', default=defval(0), type=lambda value: min(max(int(value), 0), 4)) diff --git a/Gui.py b/Gui.py index 1bde482c..c7f5f91c 100755 --- a/Gui.py +++ b/Gui.py @@ -375,7 +375,7 @@ def guiMain(args=None): enemizerEnemyLabel.pack(side=LEFT) enemyShuffleVar = StringVar() enemyShuffleVar.set('none') - enemizerEnemyOption = OptionMenu(enemizerEnemyFrame, enemyShuffleVar, 'none', 'shuffled', 'chaos') + enemizerEnemyOption = OptionMenu(enemizerEnemyFrame, enemyShuffleVar, 'none', 'shuffled', 'chaos', 'chaosthieves') enemizerEnemyOption.pack(side=LEFT) enemizerBossFrame = Frame(enemizerFrame) diff --git a/Mystery.py b/Mystery.py index e988eef4..27ae5d7c 100644 --- a/Mystery.py +++ b/Mystery.py @@ -331,7 +331,9 @@ def roll_settings(weights): ret.shuffleenemies = {'none': 'none', 'shuffled': 'shuffled', - 'random': 'chaos' + 'random': 'chaos', + 'chaosthieves': 'chaosthieves', + 'chaos': 'chaos' }[get_choice('enemy_shuffle', weights)] ret.enemy_damage = {'default': 'default', diff --git a/Rom.py b/Rom.py index d20b3293..8d923740 100644 --- a/Rom.py +++ b/Rom.py @@ -152,7 +152,7 @@ def patch_enemizer(world, player: int, rom: LocalRom, enemizercli, random_sprite options = { 'RandomizeEnemies': world.enemy_shuffle[player] != 'none', 'RandomizeEnemiesType': 3, - 'RandomizeBushEnemyChance': world.enemy_shuffle[player] == 'chaos', + 'RandomizeBushEnemyChance': 'chaos' in world.enemy_shuffle[player], 'RandomizeEnemyHealthRange': world.enemy_health[player] != 'default', 'RandomizeEnemyHealthType': {'default': 0, 'easy': 0, 'normal': 1, 'hard': 2, 'expert': 3}[ world.enemy_health[player]], @@ -203,7 +203,8 @@ def patch_enemizer(world, player: int, rom: LocalRom, enemizercli, random_sprite 'BeesLevel': 0, 'RandomizeTileTrapPattern': world.enemy_shuffle[player] == 'chaos', 'RandomizeTileTrapFloorTile': False, - 'AllowKillableThief': world.enemy_shuffle[player] != 'none', + 'AllowKillableThief': bool(random.randint(0, 1)) if 'thieves' in world.enemy_shuffle[player] else + world.enemy_shuffle[player] != 'none', 'RandomizeSpriteOnHit': random_sprite_on_hit, 'DebugMode': False, 'DebugForceEnemy': False, diff --git a/easy.yaml b/easy.yaml index d3c9d222..5db2ef32 100644 --- a/easy.yaml +++ b/easy.yaml @@ -145,16 +145,17 @@ item_functionality: boss_shuffle: none: 1 # No boss shuffle simple: 0 # Existing bosses except Ganon and Agahnim are shuffled throughout dungeons - full: 0 # Replace GT bosses with random bosses, then follow simple logic - random: 0 # Choose from one of the above options + full: 0 # 3 bosses can occur twice + random: 0 # Any boss can appear any amount of times enemy_shuffle: none: 1 # Vanilla enemy placement shuffled: 0 # Enemies are randomized - random: 0 # Choose one of the above + random: 0 # also shuffle bush enemies, random tile rooms and random bush enemy spawn chance + chaosthieves: 0 # random + thieves may not be killable enemy_damage: default: 1 # Vanilla enemy damage - shuffled: 0 # Enemies do a randomized amount of damage - random: 0 # Choose one of the above + shuffled: 0 # Enemies deal 0 to 4 hearts and armor helps + random: 0 # Enemies deal 0 to 8 hearts and armor just reshuffles the damage enemy_health: default: 1 # Vanilla enemy HP easy: 0 # Enemies have reduced health