Files
Archipelago/worlds/tunic/enemy_drops.py
T

924 lines
91 KiB
Python

from enum import IntEnum
from typing import TYPE_CHECKING, NamedTuple
from worlds.generic.Rules import set_rule, add_rule
from .constants import *
from .logic_helpers import (has_melee, has_sword, can_shop, has_ability, has_enemy_soul, has_ladder,
has_ice_grapple_logic)
from .options import ShuffleEnemyDrops, IceGrappling
if TYPE_CHECKING:
from . import TunicWorld
class EnemyType(IntEnum):
blob = 1
hedgehog = 2
rudeling = 3
rudeling_shield = 4
guard_captain = 5
envoy = 6
beefboy = 7
phrend = 8
spider = 9
autobolt = 10
tentacle = 11
baby_slorm = 12
slorm = 13
laser_trap = 14
fairy = 15
chompignom = 16
garden_knight = 17
custodian = 18
custodian_sword = 19
custodian_candelabra = 20
siege_engine = 21
plover = 22
crabbit = 23
crabbo = 24
crabbit_shell = 25
husher = 26
frog_small = 27
frog = 28
frog_spear = 29
librarian = 30
scavenger = 31
scavenger_support = 32
scavenger_miner = 33
voidling = 34
administrator = 35
boss_scavenger = 36
fleemer = 37
fleemer_fencer = 38
fleemer_big = 39
lost_echo = 40
gunslinger = 41
fox_enemy_zombie = 42
fox_enemy = 43
voidtouched = 44
class TunicLocationData(NamedTuple):
er_region: str
enemy_type: EnemyType
is_extra_enemy: bool = False
extra_group: str | None = None
enemy_location_table: dict[str, TunicLocationData] = {
"Beneath the Fortress - Spider From Entrance": TunicLocationData("Beneath the Vault Main", EnemyType.spider),
"Beneath the Fortress - Lower Room Spider 2": TunicLocationData("Beneath the Vault Main", EnemyType.spider),
"Beneath the Fortress - Lower Room Baby Slorm 1": TunicLocationData("Beneath the Vault Main", EnemyType.baby_slorm),
"Beneath the Fortress - Lower Room Baby Slorm 2": TunicLocationData("Beneath the Vault Main", EnemyType.baby_slorm),
"Beneath the Fortress - Lower Room Spider 1": TunicLocationData("Beneath the Vault Main", EnemyType.spider),
"Beneath the Fortress - Dark Hallway Spider 1": TunicLocationData("Beneath the Vault Main", EnemyType.spider),
"Beneath the Fortress - Dark Hallway Spider 2": TunicLocationData("Beneath the Vault Main", EnemyType.spider),
"Beneath the Fortress - Waterfall Room Big Spider 1": TunicLocationData("Beneath the Vault Main", EnemyType.spider),
"Beneath the Fortress - Waterfall Room Spider 2": TunicLocationData("Beneath the Vault Main", EnemyType.spider),
"Beneath the Fortress - Waterfall Room Spider 1": TunicLocationData("Beneath the Vault Main", EnemyType.spider),
"Beneath the Fortress - Spider Behind Waterfall 1": TunicLocationData("Beneath the Vault Main", EnemyType.spider),
"Beneath the Fortress - Spider Behind Waterfall 2": TunicLocationData("Beneath the Vault Main", EnemyType.spider),
"Beneath the Fortress - Corner Room Big Spider": TunicLocationData("Beneath the Vault Main", EnemyType.spider),
"Beneath the Fortress - Corner Room Spider": TunicLocationData("Beneath the Vault Main", EnemyType.spider),
"Beneath the Fortress - Cell Hallway Custodian": TunicLocationData("Beneath the Vault Back", EnemyType.custodian_sword),
"Beneath the Fortress - Bottom Right Cell Phrend": TunicLocationData("Beneath the Vault Back", EnemyType.phrend),
"Beneath the Fortress - Middle Right Cell Baby Slorm": TunicLocationData("Beneath the Vault Back", EnemyType.baby_slorm),
"Beneath the Fortress - Middle Left Cell Phrend": TunicLocationData("Beneath the Vault Back", EnemyType.phrend),
"Beneath the Fortress - Fuse Room Custodian 3": TunicLocationData("Beneath the Vault Back", EnemyType.custodian_sword),
"Beneath the Fortress - Fuse Room Custodian 4": TunicLocationData("Beneath the Vault Back", EnemyType.custodian_sword),
"Beneath the Fortress - Fuse Room Custodian 2": TunicLocationData("Beneath the Vault Back", EnemyType.custodian_sword),
"Beneath the Fortress - Fuse Room Custodian 1": TunicLocationData("Beneath the Vault Back", EnemyType.custodian_sword),
"Beneath the Fortress - Fuse Room Candelabra Custodian": TunicLocationData("Beneath the Vault Back", EnemyType.custodian_candelabra, is_extra_enemy=True),
"Beneath the Fortress - Cell Hallway Hedgehog Trap 2": TunicLocationData("Beneath the Vault Back", EnemyType.laser_trap, is_extra_enemy=True),
"Beneath the Fortress - Cell Hallway Hedgehog Trap 1": TunicLocationData("Beneath the Vault Back", EnemyType.laser_trap, is_extra_enemy=True),
"Beneath the Fortress - Top Left Cell Custodian": TunicLocationData("Beneath the Vault Back", EnemyType.custodian_sword, is_extra_enemy=True),
"Beneath the Fortress - Lower Room Big Spider": TunicLocationData("Beneath the Vault Main", EnemyType.spider, is_extra_enemy=True),
"Beneath the Fortress - Waterfall Room Big Spider 2": TunicLocationData("Beneath the Vault Main", EnemyType.spider, is_extra_enemy=True),
"Beneath the Fortress - Custodian Hiding In Barrel Room": TunicLocationData("Beneath the Vault Back", EnemyType.custodian_sword, is_extra_enemy=True),
"Beneath the Well - [Entryway] Slorm 1": TunicLocationData("Beneath the Well Main", EnemyType.slorm),
"Beneath the Well - [Entryway] Rudeling": TunicLocationData("Beneath the Well Main", EnemyType.rudeling),
"Beneath the Well - [Entryway] Slorm 2": TunicLocationData("Beneath the Well Main", EnemyType.slorm),
"Beneath the Well - [Second Room] Slorm": TunicLocationData("Beneath the Well Main", EnemyType.slorm),
"Beneath the Well - [Second Room] Rudeling": TunicLocationData("Beneath the Well Main", EnemyType.rudeling),
"Beneath the Well - [Third Room] Slorm 2": TunicLocationData("Beneath the Well Main", EnemyType.slorm),
"Beneath the Well - [Third Room] Slorm 1": TunicLocationData("Beneath the Well Main", EnemyType.slorm),
"Beneath the Well - [Third Room] Autobolt Near Pots": TunicLocationData("Beneath the Well Main", EnemyType.autobolt),
"Beneath the Well - [Back Corridor] Slorm 1": TunicLocationData("Beneath the Well Main", EnemyType.slorm),
"Beneath the Well - [Back Corridor] Slorm 3": TunicLocationData("Beneath the Well Main", EnemyType.slorm),
"Beneath the Well - [Back Corridor] Slorm 2": TunicLocationData("Beneath the Well Main", EnemyType.slorm),
"Beneath the Well - [Back Corridor] Slorm 4": TunicLocationData("Beneath the Well Main", EnemyType.slorm),
"Beneath the Well - [Third Room] Autobolt Behind Three Barrels": TunicLocationData("Beneath the Well Main", EnemyType.autobolt),
"Beneath the Well - [Third Room] Shield Rudeling Near Table 1": TunicLocationData("Beneath the Well Main", EnemyType.rudeling_shield),
"Beneath the Well - [Third Room] Shield Rudeling Near Table 2": TunicLocationData("Beneath the Well Main", EnemyType.rudeling_shield),
"Beneath the Well - [Third Room] Rudeling Near Table": TunicLocationData("Beneath the Well Main", EnemyType.rudeling),
"Beneath the Well - [Third Room] Shield Rudeling Near Exit Doorway": TunicLocationData("Beneath the Well Main", EnemyType.rudeling_shield),
"Beneath the Well - [Third Room] Tentacle In Water 2": TunicLocationData("Beneath the Well Main", EnemyType.tentacle),
"Beneath the Well - [Third Room] Tentacle In Water 1": TunicLocationData("Beneath the Well Main", EnemyType.tentacle),
"Beneath the Well - [Third Room] Tentacle In Water 4": TunicLocationData("Beneath the Well Main", EnemyType.tentacle),
"Beneath the Well - [Third Room] Tentacle In Water 3": TunicLocationData("Beneath the Well Main", EnemyType.tentacle),
"Beneath the Well - [Side Room] Phrend In Corner 3": TunicLocationData("Beneath the Well Back", EnemyType.phrend),
"Beneath the Well - [Side Room] Phrend In Corner 1": TunicLocationData("Beneath the Well Back", EnemyType.phrend),
"Beneath the Well - [Side Room] Phrend In Corner 2": TunicLocationData("Beneath the Well Back", EnemyType.phrend),
"Beneath the Well - [Side Room] Phrend Near Chest 1": TunicLocationData("Beneath the Well Back", EnemyType.phrend),
"Beneath the Well - [Side Room] Phrend Near Chest 2": TunicLocationData("Beneath the Well Back", EnemyType.phrend),
"Beneath the Well - [Side Room] Phrend Near Chest 4": TunicLocationData("Beneath the Well Back", EnemyType.phrend),
"Beneath the Well - [Side Room] Phrend Near Chest 3": TunicLocationData("Beneath the Well Back", EnemyType.phrend),
"Beneath the Well - [Side Room] Phrend Near Chest 5": TunicLocationData("Beneath the Well Back", EnemyType.phrend),
"Beneath the Well - [Side Room] Phrend Near Chest 6": TunicLocationData("Beneath the Well Back", EnemyType.phrend),
"Beneath the Well - [Third Room] Autobolt Near Back Corridor": TunicLocationData("Beneath the Well Main", EnemyType.autobolt, is_extra_enemy=True),
"Beneath the Well - [Back Corridor] Slorm 7": TunicLocationData("Beneath the Well Main", EnemyType.slorm, is_extra_enemy=True),
"Beneath the Well - [Back Corridor] Slorm 6": TunicLocationData("Beneath the Well Main", EnemyType.slorm, is_extra_enemy=True),
"Beneath the Well - [Back Corridor] Slorm 5": TunicLocationData("Beneath the Well Main", EnemyType.slorm, is_extra_enemy=True),
"Cathedral - [1F] Zombie Fox Near Elevator 5": TunicLocationData("Cathedral Entry", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Zombie Fox Near Elevator 3": TunicLocationData("Cathedral Entry", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Zombie Fox Near Elevator 4": TunicLocationData("Cathedral Entry", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Zombie Fox Near Elevator 1": TunicLocationData("Cathedral Entry", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Zombie Fox Near Elevator 2": TunicLocationData("Cathedral Entry", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Side Room 2 Hedgehog Trap 1": TunicLocationData("Cathedral Entry", EnemyType.laser_trap),
"Cathedral - [1F] Side Room 2 Hedgehog Trap 2": TunicLocationData("Cathedral Entry", EnemyType.laser_trap),
"Cathedral - [1F] Side Room 1 Zombie Fox": TunicLocationData("Cathedral Main", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Side Room 2 Zombie Fox 1": TunicLocationData("Cathedral Main", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Side Room 2 Zombie Fox 2": TunicLocationData("Cathedral Main", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Side Room 2 Zombie Fox 3": TunicLocationData("Cathedral Main", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Purple Room Zombie Fox 1": TunicLocationData("Cathedral Main", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Purple Room Zombie Fox 2": TunicLocationData("Cathedral Main", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Purple Room Zombie Fox 3": TunicLocationData("Cathedral Main", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Purple Room Strong Zombie Fox": TunicLocationData("Cathedral Main", EnemyType.fox_enemy),
"Cathedral - [1F] Purple Room Upper Zombie Fox": TunicLocationData("Cathedral Main", EnemyType.fox_enemy_zombie),
"Cathedral - [1F] Spike Room Zombie Fox": TunicLocationData("Cathedral Main", EnemyType.fox_enemy_zombie),
"Cathedral - [2F] Void Husher 1": TunicLocationData("Cathedral Main", EnemyType.husher),
"Cathedral - [2F] Void Husher 2": TunicLocationData("Cathedral Main", EnemyType.husher),
"Cathedral - [2F] Void Husher 3": TunicLocationData("Cathedral Main", EnemyType.husher),
"Cathedral - [2F] Void Husher 5": TunicLocationData("Cathedral Main", EnemyType.husher),
"Cathedral - [2F] Void Husher 4": TunicLocationData("Cathedral Main", EnemyType.husher),
"Cathedral - [2F] Back Hallway Hedgehog Trap 1": TunicLocationData("Cathedral Main", EnemyType.laser_trap),
"Cathedral - [2F] Left Room Strong Zombie Fox 2": TunicLocationData("Cathedral Main", EnemyType.fox_enemy),
"Cathedral - [2F] Back Hallway Hedgehog Trap 2": TunicLocationData("Cathedral Main", EnemyType.laser_trap),
"Cathedral - [2F] Left Room Strong Zombie Fox 1": TunicLocationData("Cathedral Main", EnemyType.fox_enemy),
"Cathedral - [2F] Back Hallway Hedgehog Trap 5": TunicLocationData("Cathedral Main", EnemyType.laser_trap),
"Cathedral - [2F] Back Hallway Hedgehog Trap 4": TunicLocationData("Cathedral Main", EnemyType.laser_trap),
"Cathedral - [2F] Back Hallway Hedgehog Trap 3": TunicLocationData("Cathedral Main", EnemyType.laser_trap),
"Cathedral - [2F] Above Entrance Beefboy": TunicLocationData("Cathedral Main", EnemyType.beefboy, is_extra_enemy=True, extra_group="Minibosses"),
"Cathedral - [2F] Sacrifice Room Voidtouched": TunicLocationData("Cathedral Main", EnemyType.voidtouched, is_extra_enemy=True, extra_group="Minibosses"),
"Cathedral Gauntlet - Zombie Fox 2": TunicLocationData("Cathedral Gauntlet", EnemyType.fox_enemy_zombie, is_extra_enemy=True),
"Cathedral Gauntlet - Strong Zombie Fox": TunicLocationData("Cathedral Gauntlet", EnemyType.fox_enemy, is_extra_enemy=True),
"Cathedral Gauntlet - Zombie Fox 1": TunicLocationData("Cathedral Gauntlet", EnemyType.fox_enemy_zombie, is_extra_enemy=True),
"Cathedral Gauntlet - Rudeling Wave Rudeling 1": TunicLocationData("Cathedral Gauntlet", EnemyType.rudeling),
"Cathedral Gauntlet - Rudeling Wave Rudeling 2": TunicLocationData("Cathedral Gauntlet", EnemyType.rudeling),
"Cathedral Gauntlet - Rudeling Wave Rudeling 3": TunicLocationData("Cathedral Gauntlet", EnemyType.rudeling),
"Cathedral Gauntlet - Rudeling Wave Guard Captain": TunicLocationData("Cathedral Gauntlet", EnemyType.guard_captain),
"Cathedral Gauntlet - Rudeling Wave Shield Rudeling 1": TunicLocationData("Cathedral Gauntlet", EnemyType.rudeling_shield),
"Cathedral Gauntlet - Rudeling Wave Shield Rudeling 2": TunicLocationData("Cathedral Gauntlet", EnemyType.rudeling_shield),
"Cathedral Gauntlet - Rudeling Wave Shield Rudeling 3": TunicLocationData("Cathedral Gauntlet", EnemyType.rudeling_shield),
"Cathedral Gauntlet - Frog Wave Small Frog 1": TunicLocationData("Cathedral Gauntlet", EnemyType.frog_small),
"Cathedral Gauntlet - Frog Wave Small Frog 2": TunicLocationData("Cathedral Gauntlet", EnemyType.frog_small),
"Cathedral Gauntlet - Frog Wave Small Frog 3": TunicLocationData("Cathedral Gauntlet", EnemyType.frog_small),
"Cathedral Gauntlet - Frog Wave Small Frog 4": TunicLocationData("Cathedral Gauntlet", EnemyType.frog_small),
"Cathedral Gauntlet - Frog Wave Small Frog 5": TunicLocationData("Cathedral Gauntlet", EnemyType.frog_small),
"Cathedral Gauntlet - Frog Wave Shield Frog 1": TunicLocationData("Cathedral Gauntlet", EnemyType.frog_spear),
"Cathedral Gauntlet - Frog Wave Small Frog 6": TunicLocationData("Cathedral Gauntlet", EnemyType.frog_small),
"Cathedral Gauntlet - Frog Wave Small Frog 7": TunicLocationData("Cathedral Gauntlet", EnemyType.frog_small),
"Cathedral Gauntlet - Frog Wave Small Frog 8": TunicLocationData("Cathedral Gauntlet", EnemyType.frog_small),
"Cathedral Gauntlet - Frog Wave Small Frog 9": TunicLocationData("Cathedral Gauntlet", EnemyType.frog_small),
"Cathedral Gauntlet - Frog Wave Shield Frog 2": TunicLocationData("Cathedral Gauntlet", EnemyType.frog_spear),
"Cathedral Gauntlet - Garden Knight Wave 1": TunicLocationData("Cathedral Gauntlet", EnemyType.garden_knight, extra_group="Minibosses"),
"Cathedral Gauntlet - Garden Knight Wave 2": TunicLocationData("Cathedral Gauntlet", EnemyType.garden_knight, extra_group="Minibosses"),
"Cathedral Gauntlet - Wizard Custodian Wave 1": TunicLocationData("Cathedral Gauntlet", EnemyType.custodian),
"Cathedral Gauntlet - Wizard Custodian Wave 5": TunicLocationData("Cathedral Gauntlet", EnemyType.custodian),
"Cathedral Gauntlet - Wizard Custodian Wave 3": TunicLocationData("Cathedral Gauntlet", EnemyType.custodian),
"Cathedral Gauntlet - Wizard Custodian Wave 2": TunicLocationData("Cathedral Gauntlet", EnemyType.custodian),
"Cathedral Gauntlet - Wizard Custodian Wave 4": TunicLocationData("Cathedral Gauntlet", EnemyType.custodian),
"Cathedral Gauntlet - Fleemer Wave 1": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 2": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 3": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 4": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 5": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 6": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 7": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 8": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 9": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 10": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 11": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 12": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 13": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 14": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fleemer Wave 15": TunicLocationData("Cathedral Gauntlet", EnemyType.fleemer),
"Cathedral Gauntlet - Fairy Wave 1": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 2": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 4": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 6": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 7": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 8": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 10": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 11": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 15": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 12": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 3": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 5": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 17": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 16": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 14": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 13": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Cathedral Gauntlet - Fairy Wave 9": TunicLocationData("Cathedral Gauntlet", EnemyType.fairy),
"Dark Tomb - Spike Hallway Fleemer 1": TunicLocationData("Dark Tomb Upper", EnemyType.fleemer),
"Dark Tomb - Spike Hallway Fleemer 2": TunicLocationData("Dark Tomb Upper", EnemyType.fleemer),
"Dark Tomb - Spike Hallway Fleemer 3": TunicLocationData("Dark Tomb Upper", EnemyType.fleemer),
"Dark Tomb - Skulls Room Right Fleemer 1": TunicLocationData("Dark Tomb Upper", EnemyType.fleemer),
"Dark Tomb - Skulls Room Phrend 4": TunicLocationData("Dark Tomb Upper", EnemyType.phrend),
"Dark Tomb - Skulls Room Phrend 5": TunicLocationData("Dark Tomb Upper", EnemyType.phrend),
"Dark Tomb - Skulls Room Right Fleemer 2": TunicLocationData("Dark Tomb Upper", EnemyType.fleemer),
"Dark Tomb - Skulls Room Right Fleemer 3": TunicLocationData("Dark Tomb Upper", EnemyType.fleemer),
"Dark Tomb - Skulls Room Left Fleemer 1": TunicLocationData("Dark Tomb Upper", EnemyType.fleemer),
"Dark Tomb - Skulls Room Left Fleemer 2": TunicLocationData("Dark Tomb Upper", EnemyType.fleemer),
"Dark Tomb - Skulls Room Phrend 2": TunicLocationData("Dark Tomb Upper", EnemyType.phrend),
"Dark Tomb - Skulls Room Phrend 3": TunicLocationData("Dark Tomb Upper", EnemyType.phrend),
"Dark Tomb - Skulls Room Phrend 1": TunicLocationData("Dark Tomb Upper", EnemyType.phrend),
"Dark Tomb - Spike Maze Fleemer 1": TunicLocationData("Dark Tomb Main", EnemyType.fleemer),
"Dark Tomb - Spike Maze Fleemer 2": TunicLocationData("Dark Tomb Main", EnemyType.fleemer),
"Dark Tomb - Spike Maze Fleemer 3": TunicLocationData("Dark Tomb Main", EnemyType.fleemer),
"Dark Tomb - Spike Maze Fleemer 4": TunicLocationData("Dark Tomb Main", EnemyType.fleemer),
"Dark Tomb - Spike Maze Fleemer 5": TunicLocationData("Dark Tomb Main", EnemyType.fleemer),
"Dark Tomb - Hallway Hedgehog Trap 1": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Fleemer Between Hedgehog Traps": TunicLocationData("Dark Tomb Main", EnemyType.fleemer),
"Dark Tomb - Hallway Hedgehog Trap 2": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Hallway Hedgehog Trap 3": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Statue Room Hedgehog Trap 1": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Statue Room Hedgehog Trap 2": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Statue Room Hedgehog Trap 3": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Statue Room Fleemer 1": TunicLocationData("Dark Tomb Main", EnemyType.fleemer),
"Dark Tomb - Statue Room Hedgehog Trap Along Wall": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Laser Room Hedgehog Trap 1": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Laser Room Hedgehog Trap 2": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Laser Room Hedgehog Trap 6": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Laser Room Hedgehog Trap 7": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Laser Room Hedgehog Trap 4": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Laser Room Hedgehog Trap 5": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Laser Room Hedgehog Trap 8": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Laser Room Hedgehog Trap 9": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Laser Room Hedgehog Trap 11": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Laser Room Hedgehog Trap 12": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Laser Room Hedgehog Trap 10": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Laser Room Hedgehog Trap 3": TunicLocationData("Dark Tomb Main", EnemyType.laser_trap),
"Dark Tomb - Statue Room Fleemer 2": TunicLocationData("Dark Tomb Main", EnemyType.fleemer, is_extra_enemy=True),
"Dark Tomb - Fleemer Quartet 4": TunicLocationData("Dark Tomb Main", EnemyType.fleemer, is_extra_enemy=True),
"Dark Tomb - Fleemer Quartet 3": TunicLocationData("Dark Tomb Main", EnemyType.fleemer, is_extra_enemy=True),
"Dark Tomb - Fleemer Quartet 2": TunicLocationData("Dark Tomb Main", EnemyType.fleemer, is_extra_enemy=True),
"Dark Tomb - Fleemer Quartet 1": TunicLocationData("Dark Tomb Main", EnemyType.fleemer, is_extra_enemy=True),
"Dark Tomb - Spike Hallway Fleemer 4": TunicLocationData("Dark Tomb Upper", EnemyType.fleemer, is_extra_enemy=True),
"Dark Tomb Checkpoint - [Well Boss] Rudeling 2": TunicLocationData("Well Boss", EnemyType.rudeling),
"Dark Tomb Checkpoint - [Well Boss] Rudeling 1": TunicLocationData("Well Boss", EnemyType.rudeling),
"Dark Tomb Checkpoint - [Well Boss] Guard Captain": TunicLocationData("Well Boss", EnemyType.guard_captain),
"Dark Tomb Checkpoint - [Well Boss] Envoy": TunicLocationData("Well Boss", EnemyType.envoy, is_extra_enemy=True),
"East Forest - Hedgehog Near Dance Fox Spot 1": TunicLocationData("East Forest Dance Fox Spot", EnemyType.hedgehog),
"East Forest - Hedgehog Near Dance Fox Spot 2": TunicLocationData("East Forest Dance Fox Spot", EnemyType.hedgehog),
"East Forest - Hedgehog 1": TunicLocationData("East Forest", EnemyType.hedgehog),
"East Forest - Hedgehog 2": TunicLocationData("East Forest", EnemyType.hedgehog),
"East Forest - Hedgehog 3": TunicLocationData("East Forest", EnemyType.hedgehog),
"East Forest - Blob 3": TunicLocationData("East Forest", EnemyType.blob),
"East Forest - Blob 2": TunicLocationData("East Forest", EnemyType.blob),
"East Forest - Blob 4": TunicLocationData("East Forest", EnemyType.blob),
"East Forest - Blob 1": TunicLocationData("East Forest", EnemyType.blob),
"East Forest - Blob 5": TunicLocationData("East Forest", EnemyType.blob),
"East Forest - Hedgehog 4": TunicLocationData("East Forest", EnemyType.hedgehog),
"East Forest - Shield Rudeling Above Guardhouse 2": TunicLocationData("East Forest above Guard House 2", EnemyType.rudeling_shield),
"East Forest - Envoy Above Guardhouse 2": TunicLocationData("East Forest above Guard House 2", EnemyType.envoy),
"East Forest - Rudeling Above Guardhouse 2": TunicLocationData("East Forest above Guard House 2", EnemyType.rudeling),
"East Forest - Rudeling Above Checkpoint": TunicLocationData("East Forest", EnemyType.rudeling),
"East Forest - Rudeling Near Obscured Chest 1": TunicLocationData("East Forest", EnemyType.rudeling),
"East Forest - Rudeling Facing Guardhouse Gate": TunicLocationData("East Forest", EnemyType.rudeling),
"East Forest - Rudeling Near Gate Switch 1": TunicLocationData("East Forest", EnemyType.rudeling),
"East Forest - Rudeling Near Gate Switch 2": TunicLocationData("East Forest", EnemyType.rudeling),
"East Forest - Ice Grapple Blob": TunicLocationData("Lower Forest", EnemyType.blob),
"East Forest - [Lower] Spider Near Grapple Hook": TunicLocationData("Lower Forest", EnemyType.spider),
"East Forest - [Lower] Spider Behind Top Right Tree": TunicLocationData("Lower Forest", EnemyType.spider),
"East Forest - [Lower] Spider Behind Bottom Left Tree": TunicLocationData("Lower Forest", EnemyType.spider),
"East Forest - [Lower] Spider Behind Bottom Right Tree": TunicLocationData("Lower Forest", EnemyType.spider),
"East Forest - [Lower] Spider Behind Top Left Tree": TunicLocationData("Lower Forest", EnemyType.spider),
"East Forest - [Lower] Rudeling Near Broken Obelisk 2": TunicLocationData("Lower Forest", EnemyType.rudeling),
"East Forest - [Lower] Rudeling Near Broken Obelisk 1": TunicLocationData("Lower Forest", EnemyType.rudeling),
"East Forest - [Lower] Big Spider In Clearing": TunicLocationData("Lower Forest", EnemyType.spider, is_extra_enemy=True),
"East Forest - Big Spider Atop Ladders": TunicLocationData("East Forest", EnemyType.spider, is_extra_enemy=True),
"East Forest - Rudeling Near Obscured Chest 3": TunicLocationData("East Forest", EnemyType.rudeling, is_extra_enemy=True),
"East Forest - Rudeling Near Obscured Chest 2": TunicLocationData("East Forest", EnemyType.rudeling, is_extra_enemy=True),
"East Forest - Rudeling Near Obscured Chest 4": TunicLocationData("East Forest", EnemyType.rudeling, is_extra_enemy=True),
"East Forest - Rudeling Outside Guardhouse 1": TunicLocationData("East Forest", EnemyType.rudeling, is_extra_enemy=True),
"Eastern Vault Fortress - [West Wing] Hedgehog Trap Near Stairs 1": TunicLocationData("Eastern Vault Fortress", EnemyType.laser_trap, is_extra_enemy=True),
"Eastern Vault Fortress - [West Wing] Hedgehog Trap Near Stairs 2": TunicLocationData("Eastern Vault Fortress", EnemyType.laser_trap, is_extra_enemy=True),
"Eastern Vault Fortress - [West Wing] Side Room Baby Slorm 1": TunicLocationData("Eastern Vault Fortress", EnemyType.baby_slorm),
"Eastern Vault Fortress - [West Wing] Side Room Baby Slorm 2": TunicLocationData("Eastern Vault Fortress", EnemyType.baby_slorm),
"Eastern Vault Fortress - [West Wing] Side Room Baby Slorm 3": TunicLocationData("Eastern Vault Fortress", EnemyType.baby_slorm),
"Eastern Vault Fortress - [West Wing] Upper Floor Custodian 1": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_sword),
"Eastern Vault Fortress - [West Wing] Upper Floor Custodian 2": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_sword),
"Eastern Vault Fortress - [West Wing] Lower Floor Custodian 1": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_sword),
"Eastern Vault Fortress - [West Wing] Lower Floor Candelabra Custodian 1": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_candelabra),
"Eastern Vault Fortress - [West Wing] Lower Floor Custodian 2": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_sword),
"Eastern Vault Fortress - [West Wing] Lower Floor Custodian 3": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_sword),
"Eastern Vault Fortress - [Main Room] Left Custodian": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_sword),
"Eastern Vault Fortress - [Main Room] Right Custodian": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_sword),
"Eastern Vault Fortress - [Main Room] Candelabra Custodian": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_candelabra),
"Eastern Vault Fortress - [Main Room] Upper Ledge Custodian": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian),
"Eastern Vault Fortress - [West Wing] Custodian Hiding In Corner 1": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_sword),
"Eastern Vault Fortress - [West Wing] Lower Floor Candelabra Custodian 2": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_candelabra, is_extra_enemy=True),
"Eastern Vault Fortress - [West Wing] Custodian Hiding In Corner 2": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_sword, is_extra_enemy=True),
"Eastern Vault Fortress - [West Wing] Custodian Hiding In Corner 3": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_sword, is_extra_enemy=True),
"Eastern Vault Fortress - [West Wing] Upper Floor Custodian 3": TunicLocationData("Eastern Vault Fortress", EnemyType.custodian_sword, is_extra_enemy=True),
"Forest Belltower - Blob 3": TunicLocationData("Forest Belltower Main", EnemyType.blob),
"Forest Belltower - Blob 4": TunicLocationData("Forest Belltower Main", EnemyType.blob),
"Forest Belltower - Blob 2": TunicLocationData("Forest Belltower Main", EnemyType.blob),
"Forest Belltower - Blob 1": TunicLocationData("Forest Belltower Main", EnemyType.blob),
"Forest Belltower - Blob Near Ladder": TunicLocationData("Forest Belltower Main", EnemyType.blob),
"Forest Boss Room - Top Left Rudeling": TunicLocationData("Forest Boss Room", EnemyType.rudeling),
"Forest Boss Room - Guard Captain": TunicLocationData("Forest Boss Room", EnemyType.guard_captain, extra_group="Bosses"),
"Forest Boss Room - Bottom Left Rudeling": TunicLocationData("Forest Boss Room", EnemyType.rudeling, is_extra_enemy=True),
"Forest Boss Room - Bottom Right Rudeling": TunicLocationData("Forest Boss Room", EnemyType.rudeling, is_extra_enemy=True),
"Forest Boss Room - Top Right Rudeling": TunicLocationData("Forest Boss Room", EnemyType.rudeling, is_extra_enemy=True),
"Forest Grave Path - Big Blog Near Entrance 1": TunicLocationData("Forest Grave Path Main", EnemyType.blob),
"Forest Grave Path - Big Blog Near Entrance 2": TunicLocationData("Forest Grave Path Main", EnemyType.blob),
"Forest Grave Path - Hedgehog On Side Path": TunicLocationData("Forest Grave Path Main", EnemyType.hedgehog),
"Forest Grave Path - Hedgehog On Ramp": TunicLocationData("Forest Grave Path Main", EnemyType.hedgehog),
"Forest Grave Path - Hedgehog Atop Stairs": TunicLocationData("Forest Grave Path Main", EnemyType.hedgehog),
"Forest Grave Path - Rudeling Guarding Gate": TunicLocationData("Forest Grave Path Main", EnemyType.rudeling),
"Forest Grave Path - Zombie Fox On Grave": TunicLocationData("Forest Grave Path by Grave", EnemyType.fox_enemy_zombie, is_extra_enemy=True),
"Forest Grave Path - Scavenger On Stairs": TunicLocationData("Forest Grave Path Main", EnemyType.scavenger, is_extra_enemy=True),
"Forest Grave Path - Scavenger On Side Path": TunicLocationData("Forest Grave Path Main", EnemyType.scavenger, is_extra_enemy=True),
"Forest Grave Path - Scavenger On Back Stairs": TunicLocationData("Forest Grave Path Main", EnemyType.scavenger_support, is_extra_enemy=True),
"Forest Grave Path - Scavenger Guarding Gate Left": TunicLocationData("Forest Grave Path Main", EnemyType.scavenger, is_extra_enemy=True),
"Forest Grave Path - Scavenger Guarding Gate Right": TunicLocationData("Forest Grave Path Main", EnemyType.scavenger, is_extra_enemy=True),
"Forest Grave Path - Strong Zombie Fox On Grave": TunicLocationData("Forest Grave Path by Grave", EnemyType.fox_enemy, is_extra_enemy=True),
"Fortress Arena - Defeat Siege Engine": TunicLocationData("Fortress Arena", EnemyType.siege_engine, extra_group="Bosses"),
"Fortress Courtyard - [Upper] Custodian Near East Entrance": TunicLocationData("Fortress Courtyard Upper", EnemyType.custodian_sword),
"Fortress Courtyard - [Upper] Custodian Near Fuse": TunicLocationData("Fortress Courtyard Upper", EnemyType.custodian_sword),
"Fortress Courtyard - [Upper] Candelabra Custodian": TunicLocationData("Fortress Courtyard Upper", EnemyType.custodian_candelabra),
"Fortress Courtyard - Custodian Left Of Fuse": TunicLocationData("Fortress Courtyard", EnemyType.custodian_sword),
"Fortress Courtyard - Custodian Right Of Fuse": TunicLocationData("Fortress Courtyard", EnemyType.custodian_sword),
"Fortress Courtyard - Candelabra Custodian Near Fuse": TunicLocationData("Fortress Courtyard", EnemyType.custodian_candelabra),
"Fortress Courtyard - Wizard Custodian Guarding Bridge": TunicLocationData("Fortress Courtyard", EnemyType.custodian),
"Fortress East Shortcut - [Lower] Blob 2": TunicLocationData("Fortress East Shortcut Lower", EnemyType.blob),
"Fortress East Shortcut - [Lower] Blob 4": TunicLocationData("Fortress East Shortcut Lower", EnemyType.blob),
"Fortress East Shortcut - [Lower] Blob 1": TunicLocationData("Fortress East Shortcut Lower", EnemyType.blob),
"Fortress East Shortcut - [Lower] Blob 3": TunicLocationData("Fortress East Shortcut Lower", EnemyType.blob),
"Fortress East Shortcut - [Upper] Wizard Custodian 1": TunicLocationData("Fortress East Shortcut Upper", EnemyType.custodian),
"Fortress East Shortcut - [Upper] Wizard Custodian 2": TunicLocationData("Fortress East Shortcut Upper", EnemyType.custodian),
"Fortress East Shortcut - [Upper] Wizard Custodian 4": TunicLocationData("Fortress East Shortcut Upper", EnemyType.custodian_sword),
"Fortress East Shortcut - [Upper] Wizard Custodian 3": TunicLocationData("Fortress East Shortcut Upper", EnemyType.custodian),
"Fortress East Shortcut - [Upper] Candelabra Custodian 1": TunicLocationData("Fortress East Shortcut Upper", EnemyType.custodian_candelabra),
"Fortress East Shortcut - [Upper] Candelabra Custodian 2": TunicLocationData("Fortress East Shortcut Upper", EnemyType.custodian_candelabra, is_extra_enemy=True),
"Fortress Grave Path - Front Left Custodian": TunicLocationData("Fortress Grave Path Combat", EnemyType.custodian_sword),
"Fortress Grave Path - Front Right Custodian": TunicLocationData("Fortress Grave Path Combat", EnemyType.custodian_sword),
"Fortress Grave Path - Front Wizard Custodian": TunicLocationData("Fortress Grave Path Combat", EnemyType.custodian),
"Fortress Grave Path - Back Right Custodian": TunicLocationData("Fortress Grave Path Combat", EnemyType.custodian_sword),
"Fortress Grave Path - Back Left Custodian": TunicLocationData("Fortress Grave Path Combat", EnemyType.custodian_sword),
"Fortress Grave Path - Back Wizard Custodian": TunicLocationData("Fortress Grave Path Combat", EnemyType.custodian),
"Fortress Grave Path - Zombie Fox Near Grave": TunicLocationData("Fortress Grave Path by Grave", EnemyType.fox_enemy_zombie, is_extra_enemy=True),
"Fortress Grave Path - Back Right Voidling Spider": TunicLocationData("Fortress Grave Path Combat", EnemyType.voidling, is_extra_enemy=True),
"Fortress Grave Path - Back Left Voidling Spider": TunicLocationData("Fortress Grave Path Combat", EnemyType.voidling, is_extra_enemy=True),
"Fortress Grave Path - Front Voidling Spider": TunicLocationData("Fortress Grave Path Combat", EnemyType.voidling, is_extra_enemy=True),
"Frog Stairway - [Upper] Shield Frog": TunicLocationData("Frog Stairs Upper", EnemyType.frog_spear),
"Frog Stairway - [Lower] Small Frog": TunicLocationData("Frog Stairs Lower", EnemyType.frog_small),
"Frog's Domain - Escape Room Autobolt": TunicLocationData("Frog's Domain Back", EnemyType.autobolt),
"Frog's Domain - Hot Tub Frog 1": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Hot Tub Frog 2": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Hot Tub Frog 3": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Side Room Frog 1": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Side Room Frog 3": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Side Room Frog 2": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Frog Patrolling Hallway": TunicLocationData("Frog's Domain Main", EnemyType.frog),
"Frog's Domain - Main Room Entrance Patrolling Frog": TunicLocationData("Frog's Domain Main", EnemyType.frog),
"Frog's Domain - Main Room Frog Near Chest": TunicLocationData("Frog's Domain Main", EnemyType.frog),
"Frog's Domain - Main Room Near Ladder Patrolling Frog": TunicLocationData("Frog's Domain Main", EnemyType.frog),
"Frog's Domain - Main Room Lower Small Frog 1": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Main Room Lower Small Frog 4": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Main Room Lower Small Frog 3": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Main Room Lower Small Frog 2": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Main Room Baby Slorm Jail 4": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Main Room Baby Slorm Jail 3": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Main Room Baby Slorm Jail 2": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Main Room Baby Slorm Jail 1": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Main Room Shield Frog 2": TunicLocationData("Frog's Domain Main", EnemyType.frog_spear),
"Frog's Domain - Main Room Shield Frog 1": TunicLocationData("Frog's Domain Main", EnemyType.frog_spear),
"Frog's Domain - Baby Slorm Room 5": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Baby Slorm Room 2": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Baby Slorm Room 8": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Baby Slorm Room 6": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Baby Slorm Room 4": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Baby Slorm Room 1": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Baby Slorm Room 7": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Baby Slorm Room 3": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Baby Slorm Room 9": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Baby Slorm Room Frog": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Baby Slorm Room 12": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Baby Slorm Room 10": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Baby Slorm Room 13": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Baby Slorm Room 11": TunicLocationData("Frog's Domain Main", EnemyType.baby_slorm),
"Frog's Domain - Orb Room Small Frog 4": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Orb Room Big Frog": TunicLocationData("Frog's Domain Main", EnemyType.frog),
"Frog's Domain - Orb Room Small Frog 3": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Orb Room Small Frog 5": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Orb Room Small Frog 2": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Orb Room Small Frog 6": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Orb Room Small Frog 1": TunicLocationData("Frog's Domain Main", EnemyType.frog_small),
"Frog's Domain - Orb Room Wizard Custodian 1": TunicLocationData("Frog's Domain Main", EnemyType.custodian),
"Frog's Domain - Side Room Secret Frog": TunicLocationData("Frog's Domain Main", EnemyType.frog_small, is_extra_enemy=True),
"Frog's Domain - Main Room Upper Small Frog 1": TunicLocationData("Frog's Domain Main", EnemyType.frog_small, is_extra_enemy=True),
"Frog's Domain - Main Room Upper Small Frog 2": TunicLocationData("Frog's Domain Main", EnemyType.frog_small, is_extra_enemy=True),
"Frog's Domain - Main Room Upper Small Frog 3": TunicLocationData("Frog's Domain Main", EnemyType.frog_small, is_extra_enemy=True),
"Frog's Domain - Main Room Upper Small Frog 4": TunicLocationData("Frog's Domain Main", EnemyType.frog_small, is_extra_enemy=True),
"Frog's Domain - Main Room Lower Small Frog 5": TunicLocationData("Frog's Domain Main", EnemyType.frog_small, is_extra_enemy=True),
"Frog's Domain - Orb Room Wizard Custodian 2": TunicLocationData("Frog's Domain Main", EnemyType.custodian, is_extra_enemy=True),
"Guardhouse 1 - Blob 8": TunicLocationData("Guard House 1 West", EnemyType.blob),
"Guardhouse 1 - Blob 6": TunicLocationData("Guard House 1 West", EnemyType.blob),
"Guardhouse 1 - Blob 5": TunicLocationData("Guard House 1 West", EnemyType.blob),
"Guardhouse 1 - Blob 7": TunicLocationData("Guard House 1 West", EnemyType.blob),
"Guardhouse 1 - Blob 2": TunicLocationData("Guard House 1 West", EnemyType.blob),
"Guardhouse 1 - Blob 1": TunicLocationData("Guard House 1 West", EnemyType.blob),
"Guardhouse 1 - Blob 4": TunicLocationData("Guard House 1 West", EnemyType.blob),
"Guardhouse 1 - Blob 3": TunicLocationData("Guard House 1 West", EnemyType.blob),
"Guardhouse 1 - Hedgehog": TunicLocationData("Guard House 1 West", EnemyType.hedgehog),
"Guardhouse 2 - Blob 2": TunicLocationData("Guard House 2 Lower", EnemyType.blob),
"Guardhouse 2 - Blob 3": TunicLocationData("Guard House 2 Lower", EnemyType.blob),
"Guardhouse 2 - Blob 1": TunicLocationData("Guard House 2 Lower", EnemyType.blob),
"Guardhouse 2 - Rudeling 1": TunicLocationData("Guard House 2 Lower", EnemyType.rudeling),
"Guardhouse 2 - Rudeling 2": TunicLocationData("Guard House 2 Lower", EnemyType.rudeling),
"Hourglass Cave - Autobolt 1": TunicLocationData("Hourglass Cave", EnemyType.autobolt),
"Hourglass Cave - Autobolt 3": TunicLocationData("Hourglass Cave", EnemyType.autobolt),
"Hourglass Cave - Autobolt 2": TunicLocationData("Hourglass Cave", EnemyType.autobolt),
"Librarian - Defeat Librarian": TunicLocationData("Library Arena", EnemyType.librarian, extra_group="Bosses"),
"Library Hall - Right Beefboy": TunicLocationData("Library Hall", EnemyType.beefboy, extra_group="Minibosses"),
"Library Hall - Left Beefboy": TunicLocationData("Library Hall", EnemyType.beefboy, extra_group="Minibosses"),
"Library Hall - Administrator Coffee Table": TunicLocationData("Library Hall", EnemyType.administrator),
"Monastery - [Front] Scavenger Miner Near Entrance": TunicLocationData("Monastery Front", EnemyType.scavenger_miner),
"Monastery - [Front] Upper Path Scavenger Sniper": TunicLocationData("Monastery Front", EnemyType.scavenger),
"Monastery - [Front] Upper Path Scavenger Miner": TunicLocationData("Monastery Front", EnemyType.scavenger_miner),
"Monastery - [Front] Scavenger Sniper Guarding Gate": TunicLocationData("Monastery Front", EnemyType.scavenger),
"Monastery - [Front] Scavenger Mining Broken Fuse 2": TunicLocationData("Monastery Front", EnemyType.scavenger_miner),
"Monastery - [Front] Scavenger Mining Broken Fuse 1": TunicLocationData("Monastery Front", EnemyType.scavenger_miner),
"Monastery - [Front] Scavenger Sniper Near Entrance": TunicLocationData("Monastery Front", EnemyType.scavenger),
"Monastery - [Back] Zombie Fox Near Grave": TunicLocationData("Monastery Back", EnemyType.fox_enemy_zombie, is_extra_enemy=True),
"Monastery - [Back] Voidtouched": TunicLocationData("Monastery Back", EnemyType.voidtouched, extra_group="Minibosses"),
"Monastery - [Front] Voidling Spider 1": TunicLocationData("Monastery Front", EnemyType.voidling, is_extra_enemy=True),
"Monastery - [Front] Voidling Spider 2": TunicLocationData("Monastery Front", EnemyType.voidling, is_extra_enemy=True),
"Monastery - [Front] Voidling Spider 3": TunicLocationData("Monastery Front", EnemyType.voidling, is_extra_enemy=True),
"Monastery - [Front] Upper Path Voidling Spider": TunicLocationData("Monastery Front", EnemyType.voidling, is_extra_enemy=True),
"Overworld - [Central] Blob Near Ruined Passage Door": TunicLocationData("Overworld", EnemyType.blob),
"Overworld - [Central] Blob Near Cube Cave 1": TunicLocationData("Overworld", EnemyType.blob),
"Overworld - [Central] Blob Near Cube Cave 2": TunicLocationData("Overworld", EnemyType.blob),
"Overworld - [Central] Blob Near Cube Cave 3": TunicLocationData("Overworld", EnemyType.blob),
"Overworld - [Central] Big Blob Near Checkpoint": TunicLocationData("Overworld", EnemyType.blob),
"Overworld - [Central] Blob Near Checkpoint 1": TunicLocationData("Overworld", EnemyType.blob),
"Overworld - [Central] Blob Near Checkpoint 2": TunicLocationData("Overworld", EnemyType.blob),
"Overworld - [Central] Blob Near Checkpoint 3": TunicLocationData("Overworld", EnemyType.blob),
"Overworld - [West] Rudeling Near Well": TunicLocationData("Overworld", EnemyType.rudeling),
"Overworld - [West] Rudeling Near Old House": TunicLocationData("Overworld", EnemyType.rudeling),
"Overworld - [West] Hedgehog Near Teleporter 1": TunicLocationData("Overworld", EnemyType.hedgehog),
"Overworld - [West] Hedgehog Near Teleporter 2": TunicLocationData("Overworld", EnemyType.hedgehog),
"Overworld - [West] Rudeling On Teleporter": TunicLocationData("Overworld", EnemyType.rudeling),
"Overworld - [West] Hedgehog Near Tuning Fork": TunicLocationData("Overworld", EnemyType.hedgehog),
"Overworld - [West] Rudeling Near Teleporter": TunicLocationData("Overworld", EnemyType.rudeling),
"Overworld - [West] Hedgehog Near Water 1": TunicLocationData("Overworld", EnemyType.hedgehog),
"Overworld - [West] Hedgehog Near Water 2": TunicLocationData("Overworld", EnemyType.hedgehog),
"Overworld - [West] Rudeling Near Water": TunicLocationData("Overworld", EnemyType.rudeling),
"Overworld - [West] Big Blob Above Ruined Shop": TunicLocationData("Overworld", EnemyType.blob),
"Overworld - [West] Hedgehog Above Ruined Shop": TunicLocationData("Overworld", EnemyType.hedgehog),
"Overworld - [Southwest] Hedgehog Left of Fountain": TunicLocationData("Overworld", EnemyType.hedgehog),
"Overworld - [Southwest] Rudeling Near Ruined Shop": TunicLocationData("Overworld", EnemyType.rudeling_shield),
"Overworld - [Southwest] Rudeling Patrolling Fountain": TunicLocationData("Overworld", EnemyType.rudeling_shield),
"Overworld - [Southwest] Hedgehog Near Stairs 1": TunicLocationData("Overworld", EnemyType.hedgehog),
"Overworld - [Southwest] Hedgehog Near Stairs 2": TunicLocationData("Overworld", EnemyType.hedgehog),
"Overworld - [Southwest] Shield Rudeling Above Envoy": TunicLocationData("Overworld", EnemyType.rudeling_shield),
"Overworld - [Southwest] Rudeling Right of Stairs": TunicLocationData("Overworld", EnemyType.rudeling),
"Overworld - [Southwest] Rudeling Left of Stairs": TunicLocationData("Overworld", EnemyType.rudeling),
"Overworld - [Southwest] Autobolt Near Trees": TunicLocationData("Overworld", EnemyType.autobolt),
"Overworld - [Southwest] Envoy Guarding Item": TunicLocationData("Overworld", EnemyType.envoy),
"Overworld - [West] Autobolt Near Moss Wall": TunicLocationData("Overworld", EnemyType.autobolt),
"Overworld - [Northwest] Envoy On Bridge To Quarry": TunicLocationData("Overworld", EnemyType.envoy),
"Overworld - [Southwest] Autobolt In Tunnel": TunicLocationData("Overworld Tunnel Turret", EnemyType.autobolt),
"Overworld - [Southwest] Shield Rudeling Guarding Chest": TunicLocationData("Overworld", EnemyType.rudeling_shield),
"Overworld - [Northwest] Phrend Near Waterfall 2": TunicLocationData("Overworld", EnemyType.phrend),
"Overworld - [Northwest] Phrend Near Waterfall 1": TunicLocationData("Overworld", EnemyType.phrend),
"Overworld - [Northwest] Shield Rudeling Near Dark Tomb": TunicLocationData("Overworld", EnemyType.rudeling_shield),
"Overworld - [Northwest] Rudeling Near Chest 2": TunicLocationData("Overworld", EnemyType.rudeling),
"Overworld - [Northwest] Rudeling Near Chest 1": TunicLocationData("Overworld", EnemyType.rudeling),
"Overworld - [Northwest] Shield Rudeling Near Rubble": TunicLocationData("Overworld", EnemyType.rudeling_shield),
"Overworld - [Northwest] Shield Rudeling On Bridge To Well": TunicLocationData("Overworld", EnemyType.rudeling_shield),
"Overworld - [Northwest] Rudeling On Bridge To Well": TunicLocationData("Overworld", EnemyType.rudeling),
"Overworld - [Northwest] Autobolt On Bridge To Well": TunicLocationData("Overworld", EnemyType.autobolt),
"Overworld - [East] Blob After Ruined Passage 3": TunicLocationData("After Ruined Passage", EnemyType.blob),
"Overworld - [East] Blob After Ruined Passage 1": TunicLocationData("After Ruined Passage", EnemyType.blob),
"Overworld - [East] Blob After Ruined Passage 2": TunicLocationData("After Ruined Passage", EnemyType.blob),
"Overworld - [East] Blob Near Pots 1": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [East] Blob Near Pots 2": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [East] Blob Near Pots 4": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [East] Blob Near Pots 3": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [East] Blob in Bushes 1": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [East] Blob in Bushes 2": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [East] Blob in Bushes 3": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [East] Blob in Bushes 4": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [East] Hedgehog 1": TunicLocationData("East Overworld", EnemyType.hedgehog),
"Overworld - [East] Hedgehog 2": TunicLocationData("East Overworld", EnemyType.hedgehog),
"Overworld - [East] Hedgehog 3": TunicLocationData("East Overworld", EnemyType.hedgehog),
"Overworld - [Northeast] Big Blob Near Flowers 3": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [Northeast] Big Blob Near Flowers 1": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [Northeast] Big Blob Near Flowers 4": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [Northeast] Big Blob Near Flowers 5": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [Northeast] Big Blob Near Flowers 2": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [Northeast] Big Blob Near Extending Bridge": TunicLocationData("East Overworld", EnemyType.blob),
"Overworld - [Northeast] Hedgehog Above Patrol Cave 1": TunicLocationData("Overworld above Patrol Cave", EnemyType.hedgehog),
"Overworld - [Northeast] Hedgehog Above Patrol Cave 2": TunicLocationData("Overworld above Patrol Cave", EnemyType.hedgehog),
"Overworld - [Northeast] Shield Rudeling Above Patrol Cave 2": TunicLocationData("Upper Overworld", EnemyType.rudeling_shield),
"Overworld - [Northeast] Shield Rudeling Above Patrol Cave 3": TunicLocationData("Upper Overworld", EnemyType.rudeling_shield),
"Overworld - [Northeast] Shield Rudeling Above Patrol Cave 1": TunicLocationData("Upper Overworld", EnemyType.rudeling_shield),
"Overworld - [Central] Phrend Above Temple 6": TunicLocationData("Upper Overworld", EnemyType.phrend),
"Overworld - [Central] Phrend Above Temple 5": TunicLocationData("Upper Overworld", EnemyType.phrend),
"Overworld - [Central] Phrend Above Temple 4": TunicLocationData("Upper Overworld", EnemyType.phrend),
"Overworld - [Central] Phrend Above Temple 1": TunicLocationData("Upper Overworld", EnemyType.phrend),
"Overworld - [Central] Phrend Above Temple 2": TunicLocationData("Upper Overworld", EnemyType.phrend),
"Overworld - [Central] Phrend Above Temple 3": TunicLocationData("Upper Overworld", EnemyType.phrend),
"Overworld - [Northwest] Guard Captain Near Telescope": TunicLocationData("Upper Overworld", EnemyType.guard_captain),
"Overworld - [Southwest] Autobolt On Beach": TunicLocationData("Overworld Beach", EnemyType.autobolt),
"Overworld - [Southwest] Autobolt Guarding Chest Near Wear": TunicLocationData("Overworld Beach", EnemyType.autobolt),
"Overworld - [Southwest] Autobolt Guarding Chest On Island": TunicLocationData("Overworld Beach", EnemyType.autobolt),
"Overworld - [Southwest] Guard Captain On Stairs": TunicLocationData("Overworld", EnemyType.guard_captain, is_extra_enemy=True),
"Overworld - [Southwest] Beefboy": TunicLocationData("Overworld", EnemyType.beefboy, is_extra_enemy=True, extra_group="Minibosses"),
"Overworld - [Central] Big Blob On Spawn Bridge": TunicLocationData("Overworld", EnemyType.blob, is_extra_enemy=True),
"Overworld - [Southeast] Big Fleemer Near Holy Cross Door": TunicLocationData("Overworld", EnemyType.fleemer_big, is_extra_enemy=True, extra_group="Minibosses"),
"Overworld - [East] Zombie Fox After Ruined Passage": TunicLocationData("After Ruined Passage", EnemyType.fox_enemy_zombie, is_extra_enemy=True),
"Overworld - [East] Blob Hiding by Stairs": TunicLocationData("East Overworld", EnemyType.blob, is_extra_enemy=True),
"Overworld - [Northwest] Rudeling Near Fire Pit": TunicLocationData("Overworld", EnemyType.rudeling, is_extra_enemy=True),
"Overworld - [Northwest] Shield Rudeling Guarding Chest Near Well": TunicLocationData("Overworld", EnemyType.rudeling_shield, is_extra_enemy=True),
"Patrol Cave - Patrolling Rudeling": TunicLocationData("Patrol Cave", EnemyType.rudeling),
"Quarry - [South] Scavenger Miner Near Entrance Checkpoint 1": TunicLocationData("Quarry", EnemyType.scavenger_miner),
"Quarry - [South] Scavenger Miner Near Entrance Checkpoint 2": TunicLocationData("Quarry", EnemyType.scavenger_miner),
"Quarry - [South] Scavenger Sniper Near Entrance Checkpoint": TunicLocationData("Quarry", EnemyType.scavenger),
"Quarry - [Central] Scavenger Between Broken Fuses": TunicLocationData("Quarry", EnemyType.scavenger_support),
"Quarry - [Central] Scavenger Support By Broken Fuse": TunicLocationData("Quarry", EnemyType.scavenger_support),
"Quarry - [Central] Scavenger Mining Broken Fuse": TunicLocationData("Quarry", EnemyType.scavenger_miner),
"Quarry - [Central] Scavenger Sniper Looking Down": TunicLocationData("Quarry", EnemyType.scavenger),
"Quarry - [East] Scavenger Near Bombable Wall": TunicLocationData("Quarry", EnemyType.scavenger_support),
"Quarry - [East] Scavenger Miner 1": TunicLocationData("Quarry", EnemyType.scavenger_miner),
"Quarry - [East] Scavenger Miner 2": TunicLocationData("Quarry", EnemyType.scavenger_miner),
"Quarry - [East] Scavenger Sniper": TunicLocationData("Quarry", EnemyType.scavenger),
"Quarry - [East] Scavenger On Ramps": TunicLocationData("Quarry", EnemyType.scavenger_support),
"Quarry - [East] Scavenger Sniper Near Obscured Chest": TunicLocationData("Quarry", EnemyType.scavenger),
"Quarry - [East] Highest Ladder Scavenger Sniper": TunicLocationData("Quarry", EnemyType.scavenger),
"Quarry - [Central] Scavenger Miner Outside Monastery": TunicLocationData("Quarry", EnemyType.scavenger_miner),
"Quarry - [Central] Scavenger Sniper Outside Monastery 1": TunicLocationData("Quarry", EnemyType.scavenger),
"Quarry - [Central] Scavenger Sniper Outside Monastery 2": TunicLocationData("Quarry", EnemyType.scavenger),
"Quarry - [Central] Scavenger Outside Monastery": TunicLocationData("Quarry", EnemyType.scavenger_support),
"Quarry - [West] Scavenger Miner Trio 1": TunicLocationData("Lower Quarry", EnemyType.scavenger_miner),
"Quarry - [West] Scavenger Miner Trio 2": TunicLocationData("Lower Quarry", EnemyType.scavenger_miner),
"Quarry - [West] Scavenger Miner Trio 3": TunicLocationData("Lower Quarry", EnemyType.scavenger_miner),
"Quarry - [West] Scavenger Support Below Fire Pots": TunicLocationData("Lower Quarry", EnemyType.scavenger_support),
"Quarry - [West] Scavenger Support Near Cliff": TunicLocationData("Lower Quarry", EnemyType.scavenger_support),
"Quarry - [West] Scavenger Miner Near Shooting Range": TunicLocationData("Lower Quarry", EnemyType.scavenger_miner),
"Quarry - [West] Shooting Range Scavenger Sniper 1": TunicLocationData("Lower Quarry", EnemyType.scavenger),
"Quarry - [West] Shooting Range Scavenger Sniper 2": TunicLocationData("Lower Quarry", EnemyType.scavenger),
"Quarry - [West] Shooting Range Scavenger Sniper 3": TunicLocationData("Lower Quarry", EnemyType.scavenger),
"Quarry - [West] Lower Quarry Scavenger Near Boxes": TunicLocationData("Lower Quarry", EnemyType.scavenger_support),
"Quarry - [Lowlands] Scavenger Miner 1": TunicLocationData("Even Lower Quarry", EnemyType.scavenger_miner),
"Quarry - [Lowlands] Scavenger Guarding Chest": TunicLocationData("Even Lower Quarry", EnemyType.scavenger_support),
"Quarry - [Lowlands] Scavenger Sniper On Scaffolding 2": TunicLocationData("Lower Quarry", EnemyType.scavenger),
"Quarry - [Lowlands] Scavenger Sniper On Pillar": TunicLocationData("Even Lower Quarry", EnemyType.scavenger),
"Quarry - [Lowlands] Scavenger Miner 3": TunicLocationData("Even Lower Quarry", EnemyType.scavenger_miner),
"Quarry - [Lowlands] Scavenger Sniper On Scaffolding 1": TunicLocationData("Lower Quarry", EnemyType.scavenger),
"Quarry - [Lowlands] Scavenger Miner 4": TunicLocationData("Even Lower Quarry", EnemyType.scavenger_miner),
"Quarry - [Lowlands] Scavenger Miner 2": TunicLocationData("Even Lower Quarry", EnemyType.scavenger_miner),
"Quarry - [Central] Scavenger Miner Hiding In Wall": TunicLocationData("Quarry", EnemyType.scavenger_miner),
"Rooted Ziggurat Lower - Voidling Spider 1": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.voidling),
"Rooted Ziggurat Lower - Voidling Spider 3": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.voidling),
"Rooted Ziggurat Lower - Voidling Spider 2": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.voidling),
"Rooted Ziggurat Lower - Right Autobolt 1": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.autobolt),
"Rooted Ziggurat Lower - Right Autobolt 2": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.autobolt),
"Rooted Ziggurat Lower - Left Autobolt 1": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.autobolt),
"Rooted Ziggurat Lower - Left Autobolt 2": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.autobolt),
"Rooted Ziggurat Lower - Voidling Spider 4": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.voidling),
"Rooted Ziggurat Lower - Voidling Spider 5": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.voidling),
"Rooted Ziggurat Lower - Voidling Spider 7": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.voidling),
"Rooted Ziggurat Lower - Voidling Spider 6": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.voidling),
"Rooted Ziggurat Lower - Voidling Spider 8": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.voidling),
"Rooted Ziggurat Lower - Square Platform Autobolt 1": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.autobolt),
"Rooted Ziggurat Lower - Square Platform Autobolt 2": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.autobolt),
"Rooted Ziggurat Lower - Administrator 2": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.administrator, extra_group="Minibosses"),
"Rooted Ziggurat Lower - Administrator 2 2nd Phase": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.administrator, extra_group="Minibosses"),
"Rooted Ziggurat Lower - Fuse Platform Voidling Spider 2": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.voidling),
"Rooted Ziggurat Lower - Fuse Platform Voidling Spider 1": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.voidling),
"Rooted Ziggurat Lower - Administrator 1": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.administrator, extra_group="Minibosses"),
"Rooted Ziggurat Lower - Administrator 1 2nd Phase": TunicLocationData("Rooted Ziggurat Lower Front", EnemyType.administrator, extra_group="Minibosses"),
"Rooted Ziggurat Lower - Defeat Boss Scavenger": TunicLocationData("Rooted Ziggurat Lower Back", EnemyType.boss_scavenger, extra_group="Bosses"),
"Rooted Ziggurat Upper - Fairy Swarm Fairy 5": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.fairy),
"Rooted Ziggurat Upper - Fairy Swarm Fairy 4": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.fairy),
"Rooted Ziggurat Upper - Fairy Swarm Fairy 1": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.fairy),
"Rooted Ziggurat Upper - Fairy Swarm Fairy 3": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.fairy),
"Rooted Ziggurat Upper - Fairy Swarm Fairy 2": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.fairy),
"Rooted Ziggurat Upper - Wall Between Stairs Fairy 3": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.fairy),
"Rooted Ziggurat Upper - Wall Between Stairs Fairy 2": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.fairy),
"Rooted Ziggurat Upper - Wall Between Stairs Fairy 1": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.fairy),
"Rooted Ziggurat Upper - Turret Path Autobolt 1": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.autobolt),
"Rooted Ziggurat Upper - Turret Path Autobolt 2": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.autobolt),
"Rooted Ziggurat Upper - Turret Path Autobolt 4": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.autobolt),
"Rooted Ziggurat Upper - Turret Path Autobolt 3": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.autobolt),
"Rooted Ziggurat Upper - Turret Path Autobolt 5": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.autobolt),
"Rooted Ziggurat Upper - Turret Path Fairy 2": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.fairy),
"Rooted Ziggurat Upper - Turret Path Fairy 1": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.fairy),
"Rooted Ziggurat Upper - Administrator": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.administrator, extra_group="Minibosses"),
"Rooted Ziggurat Upper - Administrator 2nd Phase": TunicLocationData("Rooted Ziggurat Upper Front", EnemyType.administrator, extra_group="Minibosses"),
"Ruined Atoll - [North] Plover Near Lower Entrance": TunicLocationData("Ruined Atoll Lower Entry Area", EnemyType.plover),
"Ruined Atoll - [North] Crabbit In Water 1": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [North] Crabbit In Water 2": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [West] Crabbit By Left Stairs 1": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [West] Crabbit By Left Stairs 2": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [West] Crabbit By Left Stairs 3": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [West] Plover Near Stairs": TunicLocationData("Ruined Atoll", EnemyType.plover),
"Ruined Atoll - [West] Plover Near Teleporter Statue": TunicLocationData("Ruined Atoll", EnemyType.plover),
"Ruined Atoll - [North] Husher Perched On Chest": TunicLocationData("Ruined Atoll", EnemyType.husher),
"Ruined Atoll - [East] Crabbit By Right Stairs 2": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [East] Crabbit By Right Stairs 3": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [East] Crabbit By Right Stairs 1": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [Northwest] Small Frog Below Fuse": TunicLocationData("Ruined Atoll", EnemyType.frog_small),
"Ruined Atoll - [Northwest] Frog Near Fuse 1": TunicLocationData("Ruined Atoll", EnemyType.frog),
"Ruined Atoll - [Northwest] Frog Near Fuse 2": TunicLocationData("Ruined Atoll", EnemyType.frog),
"Ruined Atoll - [South] Sunken Tower Fairy 1": TunicLocationData("Ruined Atoll", EnemyType.fairy),
"Ruined Atoll - [South] Sunken Tower Fairy 2": TunicLocationData("Ruined Atoll", EnemyType.fairy),
"Ruined Atoll - [Northwest] Envoy Guarding Chest": TunicLocationData("Ruined Atoll", EnemyType.envoy),
"Ruined Atoll - [Northwest] Small Frog Above Ruins": TunicLocationData("Ruined Atoll", EnemyType.frog_small),
"Ruined Atoll - [West] Sunken Tower Fairy 1": TunicLocationData("Ruined Atoll", EnemyType.fairy),
"Ruined Atoll - [West] Sunken Tower Fairy 2": TunicLocationData("Ruined Atoll", EnemyType.fairy),
"Ruined Atoll - [West] Sunken Tower Fairy 3": TunicLocationData("Ruined Atoll", EnemyType.fairy),
"Ruined Atoll - [Southwest] Burrowed Slorm 2": TunicLocationData("Ruined Atoll", EnemyType.slorm),
"Ruined Atoll - [Southwest] Burrowed Slorm 1": TunicLocationData("Ruined Atoll", EnemyType.slorm),
"Ruined Atoll - [Southwest] Burrowed Slorm 3": TunicLocationData("Ruined Atoll", EnemyType.slorm),
"Ruined Atoll - [Southwest] Baby Slorm Pair 1": TunicLocationData("Ruined Atoll", EnemyType.baby_slorm),
"Ruined Atoll - [Southwest] Baby Slorm Pair 2": TunicLocationData("Ruined Atoll", EnemyType.baby_slorm),
"Ruined Atoll - [Southwest] Crabbit Surrounding Baby Slorm 6": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [Southwest] Crabbit Surrounding Baby Slorm 5": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [Southwest] Crabbit Surrounding Baby Slorm 4": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [Southwest] Crabbit Surrounding Baby Slorm 1": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [Southwest] Crabbit Surrounding Baby Slorm 3": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [Southwest] Baby Slorm Surrounded By Crabbits": TunicLocationData("Ruined Atoll", EnemyType.baby_slorm),
"Ruined Atoll - [Southwest] Crabbit Surrounding Baby Slorm 2": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [Southwest] Husher Perched On Broken Conduit": TunicLocationData("Ruined Atoll", EnemyType.husher),
"Ruined Atoll - [Southwest] Plover By Fuse": TunicLocationData("Ruined Atoll", EnemyType.plover),
"Ruined Atoll - [South] Husher Guarding Gate 1": TunicLocationData("Ruined Atoll", EnemyType.husher),
"Ruined Atoll - [South] Husher Guarding Gate 2": TunicLocationData("Ruined Atoll", EnemyType.husher),
"Ruined Atoll - [Southeast] Crabbo Near Ocean": TunicLocationData("Ruined Atoll", EnemyType.crabbo),
"Ruined Atoll - [Southeast] Burrowed Slorm 1": TunicLocationData("Ruined Atoll", EnemyType.slorm),
"Ruined Atoll - [Southeast] Burrowed Slorm 2": TunicLocationData("Ruined Atoll", EnemyType.slorm),
"Ruined Atoll - [Southeast] Crabbo Near Conduits": TunicLocationData("Ruined Atoll", EnemyType.crabbo),
"Ruined Atoll - [East] Past Ruined House Crabbit 2": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [East] Past Ruined House Crabbit 1": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [East] Past Ruined House Crabbit 3": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [East] Burrowed Slorm By Ruined House": TunicLocationData("Ruined Atoll", EnemyType.slorm),
"Ruined Atoll - [Northeast] Crabbit Near Mountain 2": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [Northeast] Crabbit Near Mountain 1": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [Northeast] Crabbit Near Mountain 3": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [Northeast] Crabbit Near Brick Path 1": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [Northeast] Crabbit Near Brick Path 2": TunicLocationData("Ruined Atoll", EnemyType.crabbit),
"Ruined Atoll - [Southwest] Fairy Near Fuse 1": TunicLocationData("Ruined Atoll", EnemyType.fairy),
"Ruined Atoll - [Southwest] Fairy Near Fuse 2": TunicLocationData("Ruined Atoll", EnemyType.fairy),
"Ruined Atoll - [Southeast] Fairy Guarding Fuse 3": TunicLocationData("Ruined Atoll", EnemyType.fairy),
"Ruined Atoll - [Southeast] Fairy Guarding Fuse 2": TunicLocationData("Ruined Atoll", EnemyType.fairy),
"Ruined Atoll - [Southeast] Fairy Guarding Fuse 1": TunicLocationData("Ruined Atoll", EnemyType.fairy),
"Ruined Atoll - [Southeast] Fairy Guarding Fuse 4": TunicLocationData("Ruined Atoll", EnemyType.fairy),
"Ruined Atoll - [West] Crabbit With Cube Shell": TunicLocationData("Ruined Atoll", EnemyType.crabbit_shell, is_extra_enemy=True),
"Ruined Atoll - [Northeast] Crabbit With Cube Shell": TunicLocationData("Ruined Atoll", EnemyType.crabbit_shell, is_extra_enemy=True),
"Ruined Atoll - [Southeast] Crabbit Guarding Crabbo 1": TunicLocationData("Ruined Atoll", EnemyType.crabbit, is_extra_enemy=True),
"Ruined Atoll - [Southeast] Crabbit Guarding Crabbo 2": TunicLocationData("Ruined Atoll", EnemyType.crabbit, is_extra_enemy=True),
"Ruined Atoll - [Southeast] Crabbit Guarding Crabbo 4": TunicLocationData("Ruined Atoll", EnemyType.crabbit, is_extra_enemy=True),
"Ruined Atoll - [Southeast] Crabbit Guarding Crabbo 3": TunicLocationData("Ruined Atoll", EnemyType.crabbit, is_extra_enemy=True),
"Ruined Atoll - [Southeast] Crabbit Guarding Crabbo 5": TunicLocationData("Ruined Atoll", EnemyType.crabbit, is_extra_enemy=True),
"Ruined Atoll - [Southeast] Crabbit Guarding Crabbo 6": TunicLocationData("Ruined Atoll", EnemyType.crabbit, is_extra_enemy=True),
"Ruined Atoll - [Southeast] Crabbit Guarding Crabbo 7": TunicLocationData("Ruined Atoll", EnemyType.crabbit, is_extra_enemy=True),
"Swamp - [Entrance] Right Gunslinger": TunicLocationData("Swamp Front", EnemyType.gunslinger),
"Swamp - [Entrance] Left Gunslinger": TunicLocationData("Swamp Front", EnemyType.gunslinger),
"Swamp - [Entrance] Fleemer By Fence 1": TunicLocationData("Swamp Front", EnemyType.fleemer),
"Swamp - [Entrance] Fleemer By Fence 2": TunicLocationData("Swamp Front", EnemyType.fleemer),
"Swamp - [South Graveyard] Fleemer 1": TunicLocationData("Swamp Front", EnemyType.fleemer),
"Swamp - [South Graveyard] Fleemer 2": TunicLocationData("Swamp Front", EnemyType.fleemer),
"Swamp - [South Graveyard] Big Fleemer": TunicLocationData("Swamp Front", EnemyType.fleemer_big, extra_group="Minibosses"),
"Swamp - [South Graveyard] Fleemer 3": TunicLocationData("Swamp Front", EnemyType.fleemer),
"Swamp - [South Graveyard] Fleemer 4": TunicLocationData("Swamp Front", EnemyType.fleemer),
"Swamp - [South Graveyard] Fleemer 5": TunicLocationData("Swamp Front", EnemyType.fleemer),
"Swamp - [South Graveyard] Island Tentacle 3": TunicLocationData("Swamp Front", EnemyType.tentacle),
"Swamp - [South Graveyard] Island Tentacle 2": TunicLocationData("Swamp Front", EnemyType.tentacle),
"Swamp - [South Graveyard] Island Tentacle 1": TunicLocationData("Swamp Front", EnemyType.tentacle),
"Swamp - [South Graveyard] Lost Echo": TunicLocationData("Swamp Front", EnemyType.lost_echo),
"Swamp - [South Graveyard] Upper Path Gunslinger": TunicLocationData("Swamp Front", EnemyType.gunslinger),
"Swamp - [South Graveyard] Upper Path Fleemer 1": TunicLocationData("Swamp Front", EnemyType.fleemer),
"Swamp - [South Graveyard] Upper Path Lost Echo": TunicLocationData("Swamp Front", EnemyType.lost_echo),
"Swamp - [South Graveyard] Upper Path Fleemer Fencer": TunicLocationData("Swamp Front", EnemyType.fleemer_fencer),
"Swamp - [South Graveyard] Upper Path Fleemer 2": TunicLocationData("Swamp Front", EnemyType.fleemer),
"Swamp - [South Graveyard] Upper Path Fleemer 3": TunicLocationData("Swamp Front", EnemyType.fleemer),
"Swamp - [Central] Lost Echo 1": TunicLocationData("Swamp Mid", EnemyType.lost_echo),
"Swamp - [Central] Lost Echo 2": TunicLocationData("Swamp Mid", EnemyType.lost_echo),
"Swamp - [Central] Gunslinger By Fuse": TunicLocationData("Swamp Mid", EnemyType.gunslinger),
"Swamp - [Central] Lost Echo 3": TunicLocationData("Swamp Mid", EnemyType.lost_echo),
"Swamp - [Central] Lost Echo 4": TunicLocationData("Swamp Mid", EnemyType.lost_echo),
"Swamp - [Central] Lost Echo 5": TunicLocationData("Swamp Mid", EnemyType.lost_echo),
"Swamp - [Central] Lost Echo 6": TunicLocationData("Swamp Mid", EnemyType.lost_echo),
"Swamp - [Upper Graveyard] Fleemer Fencer 1": TunicLocationData("Swamp Mid", EnemyType.fleemer_fencer),
"Swamp - [Upper Graveyard] Fleemer Fencer 2": TunicLocationData("Swamp Mid", EnemyType.fleemer_fencer),
"Swamp - [Upper Graveyard] Fleemer Fencer 3": TunicLocationData("Swamp Mid", EnemyType.fleemer_fencer),
"Swamp - [Outside Cathedral] Gunslinger": TunicLocationData("Swamp Mid", EnemyType.gunslinger),
"Swamp - [Central] Beefboy 1": TunicLocationData("Swamp Mid", EnemyType.beefboy, is_extra_enemy=True, extra_group="Minibosses"),
"Swamp - [Central] Beefboy 2": TunicLocationData("Swamp Mid", EnemyType.beefboy, is_extra_enemy=True, extra_group="Minibosses"),
"Swamp - [Upper Graveyard] Void Husher 1": TunicLocationData("Swamp Mid", EnemyType.husher, is_extra_enemy=True),
"Swamp - [Upper Graveyard] Void Husher 2": TunicLocationData("Swamp Mid", EnemyType.husher, is_extra_enemy=True),
"Swamp - [Upper Graveyard] Void Husher 3": TunicLocationData("Swamp Mid", EnemyType.husher, is_extra_enemy=True),
"West Garden - [Northwest] Chompignom Near Fountain (Terry)": TunicLocationData("West Garden after Terry", EnemyType.chompignom),
"West Garden - [Central Lowlands] Tower In Water Fairy 1": TunicLocationData("West Garden after Terry", EnemyType.fairy),
"West Garden - [Southwest] Chompignom 1": TunicLocationData("West Garden West Combat", EnemyType.chompignom),
"West Garden - [Southwest] Fairy Under Pink Tree 1": TunicLocationData("West Garden West Combat", EnemyType.fairy),
"West Garden - [Southwest] Chompignom 2": TunicLocationData("West Garden West Combat", EnemyType.chompignom),
"West Garden - [Southwest] Three Fairy Wall 1": TunicLocationData("West Garden West Combat", EnemyType.fairy),
"West Garden - [Southwest] Three Fairy Wall 2": TunicLocationData("West Garden West Combat", EnemyType.fairy),
"West Garden - [Southwest] Three Fairy Wall 3": TunicLocationData("West Garden West Combat", EnemyType.fairy),
"West Garden - [Southwest] Chompignom 3": TunicLocationData("West Garden West Combat", EnemyType.chompignom),
"West Garden - [Southwest] Chompignom 4": TunicLocationData("West Garden West Combat", EnemyType.chompignom),
"West Garden - [Southwest] Chompignom 5": TunicLocationData("West Garden West Combat", EnemyType.chompignom),
"West Garden - [South] Fairy Guarding Chest 2": TunicLocationData("West Garden South Checkpoint", EnemyType.fairy),
"West Garden - [South] Fairy Guarding Chest 1": TunicLocationData("West Garden South Checkpoint", EnemyType.fairy),
"West Garden - [Central Highlands] Shield Rudeling Overlooking Ledge": TunicLocationData("West Garden South Checkpoint", EnemyType.rudeling_shield),
"West Garden - [Central Highlands] Fairy Near Blue Lines 1": TunicLocationData("West Garden South Checkpoint", EnemyType.fairy),
"West Garden - [Central Highlands] Rudeling Guarding Chest": TunicLocationData("West Garden South Checkpoint", EnemyType.rudeling),
"West Garden - [Central Highlands] Fairy Near Blue Lines 2": TunicLocationData("West Garden South Checkpoint", EnemyType.fairy),
"West Garden - [Central Highlands] Rudeling Near Checkpoint": TunicLocationData("West Garden South Checkpoint", EnemyType.rudeling),
"West Garden - [Central Highlands] Shield Rudeling Near Blue Lines": TunicLocationData("West Garden South Checkpoint", EnemyType.rudeling_shield),
"West Garden - [Southeast] Rudeling Above Dagger House": TunicLocationData("West Garden at Dagger House", EnemyType.rudeling),
"West Garden - [Southeast] Chompignom Above Dagger House 1": TunicLocationData("West Garden at Dagger House", EnemyType.chompignom),
"West Garden - [Southeast] Chompignom Above Dagger House 2": TunicLocationData("West Garden at Dagger House", EnemyType.chompignom),
"West Garden - [Central Highlands] Guard Captain 1": TunicLocationData("West Garden South Checkpoint", EnemyType.guard_captain),
"West Garden - [Central Highlands] Chompignom On Blue Lines": TunicLocationData("West Garden South Checkpoint", EnemyType.chompignom),
"West Garden - [Southwest] Corner Tower Fairy 2": TunicLocationData("West Garden West Combat", EnemyType.fairy, is_extra_enemy=True),
"West Garden - [Southwest] Corner Tower Fairy 1": TunicLocationData("West Garden West Combat", EnemyType.fairy, is_extra_enemy=True),
"West Garden - [Central Lowlands] Tower In Water Fairy 2": TunicLocationData("West Garden after Terry", EnemyType.fairy, is_extra_enemy=True),
"West Garden - Zombie Fox On Grave": TunicLocationData("West Garden before Terry", EnemyType.fox_enemy_zombie, is_extra_enemy=True),
"West Garden - [Central Highlands] Guard Captain 2": TunicLocationData("West Garden South Checkpoint", EnemyType.guard_captain, is_extra_enemy=True),
"West Garden - [Southwest] Fairy Under Pink Tree 2": TunicLocationData("West Garden West Combat", EnemyType.fairy, is_extra_enemy=True),
"West Garden - [Southeast] Void Chompignom Above Dagger House": TunicLocationData("West Garden at Dagger House", EnemyType.chompignom, is_extra_enemy=True),
"West Garden - [Southwest] Void Chompignom 3": TunicLocationData("West Garden West Combat", EnemyType.chompignom, is_extra_enemy=True),
"West Garden - [Southwest] Void Chompignom 2": TunicLocationData("West Garden West Combat", EnemyType.chompignom, is_extra_enemy=True),
"West Garden - [Southwest] Void Chompignom 1": TunicLocationData("West Garden West Combat", EnemyType.chompignom, is_extra_enemy=True),
"West Garden - [Northwest] Void Chompignom Near Fountain": TunicLocationData("West Garden after Terry", EnemyType.chompignom, is_extra_enemy=True),
"West Garden - [North] Defeat Garden Knight": TunicLocationData("West Garden before Boss", EnemyType.garden_knight, extra_group="Bosses"),
}
enemy_location_base_id = base_id + 12000
enemy_location_name_to_id: dict[str, int] = {name: enemy_location_base_id + index
for index, name in enumerate(enemy_location_table)}
enemy_location_groups: dict[str, set[str]] = {}
for location_name, location_data in enemy_location_table.items():
loc_group_name = location_name.split(" - ", 1)[0]
enemy_location_groups.setdefault(loc_group_name, set()).add(location_name)
enemy_location_groups.setdefault(f'{loc_group_name} Enemies', set()).add(location_name)
if location_data.extra_group:
enemy_location_groups.setdefault(location_data.extra_group, set()).add(location_name)
enemy_location_groups.setdefault("Enemies", set()).add(location_name)
enemy_item_fill_quantities: dict[str, int] = {
"Firecracker": 20,
"Fire Bomb": 20,
"Ice Bomb": 20,
"Pepper": 10,
"Ivy": 10,
"Lure": 5,
"HP Berry": 15,
"MP Berry": 15,
"Money x1": 70,
"Money x2": 120,
"Money x3": 100,
"Money x4": 50,
"Money x5": 25,
"Money x6": 25,
"Money x7": 20,
"Money x8": 10,
"Money x10": 10,
"Money x20": 7,
"Money x30": 5,
"Money x100": 3,
"Money x200": 1,
"Money x255": 1,
}
def set_enemy_location_rules(world: "TunicWorld") -> None:
player = world.player
for loc_name, loc_data in enemy_location_table.items():
# skip extra enemy locations if not enabled
if world.options.shuffle_enemy_drops != ShuffleEnemyDrops.option_extra and loc_data.is_extra_enemy:
continue
# rules per enemy type
location = world.get_location(loc_name)
enemy_type = loc_data.enemy_type
if enemy_type == EnemyType.blob:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.blobs, state, world) and has_melee(state, player))
elif enemy_type == EnemyType.hedgehog:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.hedgehogs, state, world) and has_melee(state, player))
elif enemy_type in (EnemyType.rudeling, EnemyType.rudeling_shield, EnemyType.guard_captain):
set_rule(location, lambda state: has_enemy_soul(EnemySouls.rudelings, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.envoy:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.envoy, state, world) and (can_shop(state, world) or (has_sword(state, player) and state.has(grapple, player)) or state.has(gun, player)))
elif enemy_type == EnemyType.beefboy:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.beefboy, state, world) and has_sword(state, player) and (state.has(att_offering, player, 2) or state.has(sword_upgrade, player, 4)))
elif enemy_type == EnemyType.phrend:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.phrend, state, world) and has_melee(state, player))
elif enemy_type == EnemyType.spider:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.spiders, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.autobolt:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.autobolt, state, world) and (has_sword(state, player) or state.has(gun, player)))
elif enemy_type == EnemyType.tentacle:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.tentacle, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.baby_slorm:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.baby_slorm, state, world) and (has_melee(state, player) or state.has(fire_wand, player) or state.has(gun, player)))
elif enemy_type == EnemyType.slorm:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.slorm, state, world) and (has_sword(state, player) or state.has(fire_wand, player) or state.has(gun, player)))
elif enemy_type == EnemyType.laser_trap:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.laser_trap, state, world) and has_melee(state, player))
elif enemy_type == EnemyType.fairy:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.fairies, state, world) and (has_sword(state, player) or state.has(fire_wand, player) or (state.has_any((stick, sword_upgrade), player) and state.has(grapple, player))))
if loc_data.er_region == "Cathedral Gauntlet": # stick + grapple for the gauntlet wave would be a little mean
set_rule(location, lambda state: has_enemy_soul(EnemySouls.fairies, state, world) and (state.has(fire_wand, player) or (has_sword(state, player) and state.has(grapple, player))))
elif enemy_type == EnemyType.chompignom:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.chompignom, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.garden_knight:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.garden_knight, state, world) and has_sword(state, player))
elif enemy_type in (EnemyType.custodian, EnemyType.custodian_sword, EnemyType.custodian_candelabra):
set_rule(location, lambda state: has_enemy_soul(EnemySouls.custodians, state, world) and (has_sword(state, player) or state.has(gun, player)))
elif enemy_type == EnemyType.siege_engine:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.siege_engine, state, world) and has_sword(state, player) and state.has(fire_wand, player))
elif enemy_type == EnemyType.plover:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.plover, state, world) and has_melee(state, player))
elif enemy_type in (EnemyType.crabbit, EnemyType.crabbo):
set_rule(location, lambda state: has_enemy_soul(EnemySouls.crabs, state, world) and has_melee(state, player))
elif enemy_type == EnemyType.crabbit_shell:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.crabs, state, world) and has_melee(state, player) and state.has(grapple, player))
elif enemy_type == EnemyType.husher:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.husher, state, world) and has_sword(state, player) and state.has(grapple, player))
elif enemy_type in (EnemyType.frog_small, EnemyType.frog, EnemyType.frog_spear):
set_rule(location, lambda state: has_enemy_soul(EnemySouls.frogs, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.librarian:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.librarian, state, world) and has_sword(state, player)
and has_ladder("Ladders in Library", state, world)
and state.has(grapple, player) and state.has_any((gun, fire_wand), player))
elif enemy_type in (EnemyType.scavenger, EnemyType.scavenger_support, EnemyType.scavenger_miner):
set_rule(location, lambda state: has_enemy_soul(EnemySouls.scavengers, state, world) and (has_sword(state, player) or state.has(fire_wand, player)))
elif enemy_type == EnemyType.voidling:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.voidling, state, world) and (has_sword(state, player) or state.has(gun, player)))
elif enemy_type == EnemyType.administrator:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.administrator, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.boss_scavenger:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.boss_scavenger, state, world) and has_sword(state, player))
if world.options.ice_grappling >= IceGrappling.option_medium:
add_rule(world.get_location("Rooted Ziggurat Lower - Defeat Boss Scavenger"),
lambda state: has_ice_grapple_logic(False, IceGrappling.option_medium, state, world,
[EnemySouls.boss_scavenger]))
elif enemy_type == EnemyType.fleemer:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.fleemers, state, world) and has_melee(state, player))
if loc_data.er_region == "Cathedral Gauntlet":
set_rule(location, lambda state: has_enemy_soul(EnemySouls.fleemers, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.fleemer_fencer:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.fleemers, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.fleemer_big:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.fleemers, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.lost_echo:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.lost_echo, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.gunslinger:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.gunslinger, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.fox_enemy_zombie:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.zombie_foxes, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.fox_enemy:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.zombie_foxes, state, world) and has_sword(state, player))
elif enemy_type == EnemyType.voidtouched:
set_rule(location, lambda state: has_enemy_soul(EnemySouls.voidtouched, state, world) and has_sword(state, player) and state.has(laurels, player) and state.has(att_offering, player, 3))
# specific enemy rules
if loc_name == "Frog's Domain - Side Room Secret Frog":
add_rule(location, lambda state: state.has_any((grapple, laurels), player))
elif loc_name == "Frog Stairway - [Lower] Small Frog":
add_rule(location, lambda state: state.has(grapple, player) or has_ladder("Ladders to Frog's Domain", state, world))
elif loc_name in ("Overworld - [Southwest] Autobolt Guarding Chest On Island", "Frog's Domain - Escape Room Autobolt",
"Rooted Ziggurat Lower - Left Autobolt 1", "Rooted Ziggurat Lower - Left Autobolt 2",
"Rooted Ziggurat Upper - Turret Path Autobolt 5"):
set_rule(location, lambda state: has_enemy_soul(EnemySouls.autobolt, state, world)
and (state.has(gun, player) or (has_sword(state, player) and state.has_any((grapple, laurels), player))))
elif loc_name == "Patrol Cave - Patrolling Rudeling":
add_rule(location, lambda state: can_shop(state, world))
elif loc_name == "East Forest - Ice Grapple Blob":
set_rule(location, lambda state: has_enemy_soul(EnemySouls.blobs, state, world)
and state.has_all((ice_dagger, fire_wand, grapple), world.player)
and has_ability(icebolt, state, world))
elif loc_name == "Library Hall - Administrator Coffee Table":
set_rule(location, lambda state: has_enemy_soul(EnemySouls.administrator, state, world))
elif loc_name in ("Ruined Atoll - [Northwest] Frog Near Fuse 1", "Ruined Atoll - [Northwest] Frog Near Fuse 2",
"Ruined Atoll - [Northwest] Small Frog Above Ruins"):
add_rule(location, lambda state: state.has_any((grapple, laurels), player))
elif loc_name == "Quarry - [Lowlands] Scavenger Sniper On Pillar":
set_rule(location, lambda state: has_enemy_soul(EnemySouls.scavengers, state, world)
and (state.has(fire_wand, player) or (has_sword(state, player) and state.has(grapple, player))))
elif loc_name == "Cathedral - [2F] Back Hallway Hedgehog Trap 3":
add_rule(location, lambda state: state.has(grapple, player) or can_shop(state, world))
elif loc_name == "Overworld - [Northwest] Envoy On Bridge To Quarry":
set_rule(location, lambda state: has_enemy_soul(EnemySouls.envoy, state, world) and ((has_sword(state, player) and state.has(grapple, player)) or state.has(gun, player)))