562 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			562 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								COUNT = 0xFB
							 | 
						||
| 
								 | 
							
								NAME = [
							 | 
						||
| 
								 | 
							
								    "ARROW",
							 | 
						||
| 
								 | 
							
								    "BOOMERANG",
							 | 
						||
| 
								 | 
							
								    "BOMB",
							 | 
						||
| 
								 | 
							
								    "HOOKSHOT_CHAIN",
							 | 
						||
| 
								 | 
							
								    "HOOKSHOT_HIT",
							 | 
						||
| 
								 | 
							
								    "LIFTABLE_ROCK",
							 | 
						||
| 
								 | 
							
								    "PUSHED_BLOCK",
							 | 
						||
| 
								 | 
							
								    "CHEST_WITH_ITEM",
							 | 
						||
| 
								 | 
							
								    "MAGIC_POWDER_SPRINKLE",
							 | 
						||
| 
								 | 
							
								    "OCTOROCK",
							 | 
						||
| 
								 | 
							
								    "OCTOROCK_ROCK",
							 | 
						||
| 
								 | 
							
								    "MOBLIN",
							 | 
						||
| 
								 | 
							
								    "MOBLIN_ARROW",
							 | 
						||
| 
								 | 
							
								    "TEKTITE",
							 | 
						||
| 
								 | 
							
								    "LEEVER",
							 | 
						||
| 
								 | 
							
								    "ARMOS_STATUE",
							 | 
						||
| 
								 | 
							
								    "HIDING_GHINI",
							 | 
						||
| 
								 | 
							
								    "GIANT_GHINI",
							 | 
						||
| 
								 | 
							
								    "GHINI",
							 | 
						||
| 
								 | 
							
								    "BROKEN_HEART_CONTAINER",
							 | 
						||
| 
								 | 
							
								    "MOBLIN_SWORD",
							 | 
						||
| 
								 | 
							
								    "ANTI_FAIRY",
							 | 
						||
| 
								 | 
							
								    "SPARK_COUNTER_CLOCKWISE",
							 | 
						||
| 
								 | 
							
								    "SPARK_CLOCKWISE",
							 | 
						||
| 
								 | 
							
								    "POLS_VOICE",
							 | 
						||
| 
								 | 
							
								    "KEESE",
							 | 
						||
| 
								 | 
							
								    "STALFOS_AGGRESSIVE",
							 | 
						||
| 
								 | 
							
								    "GEL",
							 | 
						||
| 
								 | 
							
								    "MINI_GEL",
							 | 
						||
| 
								 | 
							
								    "DISABLED",
							 | 
						||
| 
								 | 
							
								    "STALFOS_EVASIVE",
							 | 
						||
| 
								 | 
							
								    "GIBDO",
							 | 
						||
| 
								 | 
							
								    "HARDHAT_BEETLE",
							 | 
						||
| 
								 | 
							
								    "WIZROBE",
							 | 
						||
| 
								 | 
							
								    "WIZROBE_PROJECTILE",
							 | 
						||
| 
								 | 
							
								    "LIKE_LIKE",
							 | 
						||
| 
								 | 
							
								    "IRON_MASK",
							 | 
						||
| 
								 | 
							
								    "SMALL_EXPLOSION_ENEMY",
							 | 
						||
| 
								 | 
							
								    "SMALL_EXPLOSION_ENEMY_2",
							 | 
						||
| 
								 | 
							
								    "SPIKE_TRAP",
							 | 
						||
| 
								 | 
							
								    "MIMIC",
							 | 
						||
| 
								 | 
							
								    "MINI_MOLDORM",
							 | 
						||
| 
								 | 
							
								    "LASER",
							 | 
						||
| 
								 | 
							
								    "LASER_BEAM",
							 | 
						||
| 
								 | 
							
								    "SPIKED_BEETLE",
							 | 
						||
| 
								 | 
							
								    "DROPPABLE_HEART",
							 | 
						||
| 
								 | 
							
								    "DROPPABLE_RUPEE",
							 | 
						||
| 
								 | 
							
								    "DROPPABLE_FAIRY",
							 | 
						||
| 
								 | 
							
								    "KEY_DROP_POINT",
							 | 
						||
| 
								 | 
							
								    "SWORD",
							 | 
						||
| 
								 | 
							
								    "32",
							 | 
						||
| 
								 | 
							
								    "PIECE_OF_POWER",
							 | 
						||
| 
								 | 
							
								    "GUARDIAN_ACORN",
							 | 
						||
| 
								 | 
							
								    "HEART_PIECE",
							 | 
						||
| 
								 | 
							
								    "HEART_CONTAINER",
							 | 
						||
| 
								 | 
							
								    "DROPPABLE_ARROWS",
							 | 
						||
| 
								 | 
							
								    "DROPPABLE_BOMBS",
							 | 
						||
| 
								 | 
							
								    "INSTRUMENT_OF_THE_SIRENS",
							 | 
						||
| 
								 | 
							
								    "SLEEPY_TOADSTOOL",
							 | 
						||
| 
								 | 
							
								    "DROPPABLE_MAGIC_POWDER",
							 | 
						||
| 
								 | 
							
								    "HIDING_SLIME_KEY",
							 | 
						||
| 
								 | 
							
								    "DROPPABLE_SECRET_SEASHELL",
							 | 
						||
| 
								 | 
							
								    "MARIN",
							 | 
						||
| 
								 | 
							
								    "RACOON",
							 | 
						||
| 
								 | 
							
								    "WITCH",
							 | 
						||
| 
								 | 
							
								    "OWL_EVENT",
							 | 
						||
| 
								 | 
							
								    "OWL_STATUE",
							 | 
						||
| 
								 | 
							
								    "SEASHELL_MANSION_TREES",
							 | 
						||
| 
								 | 
							
								    "YARNA_TALKING_BONES",
							 | 
						||
| 
								 | 
							
								    "BOULDERS",
							 | 
						||
| 
								 | 
							
								    "MOVING_BLOCK_LEFT_TOP",
							 | 
						||
| 
								 | 
							
								    "MOVING_BLOCK_LEFT_BOTTOM",
							 | 
						||
| 
								 | 
							
								    "MOVING_BLOCK_BOTTOM_LEFT",
							 | 
						||
| 
								 | 
							
								    "MOVING_BLOCK_BOTTOM_RIGHT",
							 | 
						||
| 
								 | 
							
								    "COLOR_DUNGEON_BOOK",
							 | 
						||
| 
								 | 
							
								    "POT",
							 | 
						||
| 
								 | 
							
								    "DISABLED",
							 | 
						||
| 
								 | 
							
								    "SHOP_OWNER",
							 | 
						||
| 
								 | 
							
								    "4D",
							 | 
						||
| 
								 | 
							
								    "TRENDY_GAME_OWNER",
							 | 
						||
| 
								 | 
							
								    "BOO_BUDDY",
							 | 
						||
| 
								 | 
							
								    "KNIGHT",
							 | 
						||
| 
								 | 
							
								    "TRACTOR_DEVICE",
							 | 
						||
| 
								 | 
							
								    "TRACTOR_DEVICE_REVERSE",
							 | 
						||
| 
								 | 
							
								    "FISHERMAN_FISHING_GAME",
							 | 
						||
| 
								 | 
							
								    "BOUNCING_BOMBITE",
							 | 
						||
| 
								 | 
							
								    "TIMER_BOMBITE",
							 | 
						||
| 
								 | 
							
								    "PAIRODD",
							 | 
						||
| 
								 | 
							
								    "PAIRODD_PROJECTILE",
							 | 
						||
| 
								 | 
							
								    "MOLDORM",
							 | 
						||
| 
								 | 
							
								    "FACADE",
							 | 
						||
| 
								 | 
							
								    "SLIME_EYE",
							 | 
						||
| 
								 | 
							
								    "GENIE",
							 | 
						||
| 
								 | 
							
								    "SLIME_EEL",
							 | 
						||
| 
								 | 
							
								    "GHOMA",
							 | 
						||
| 
								 | 
							
								    "MASTER_STALFOS",
							 | 
						||
| 
								 | 
							
								    "DODONGO_SNAKE",
							 | 
						||
| 
								 | 
							
								    "WARP",
							 | 
						||
| 
								 | 
							
								    "HOT_HEAD",
							 | 
						||
| 
								 | 
							
								    "EVIL_EAGLE",
							 | 
						||
| 
								 | 
							
								    "SOUTH_FACE_SHRINE_DOOR",
							 | 
						||
| 
								 | 
							
								    "ANGLER_FISH",
							 | 
						||
| 
								 | 
							
								    "CRYSTAL_SWITCH",
							 | 
						||
| 
								 | 
							
								    "67",
							 | 
						||
| 
								 | 
							
								    "68",
							 | 
						||
| 
								 | 
							
								    "MOVING_BLOCK_MOVER",
							 | 
						||
| 
								 | 
							
								    "RAFT_RAFT_OWNER",
							 | 
						||
| 
								 | 
							
								    "TEXT_DEBUGGER",
							 | 
						||
| 
								 | 
							
								    "CUCCO",
							 | 
						||
| 
								 | 
							
								    "BOW_WOW",
							 | 
						||
| 
								 | 
							
								    "BUTTERFLY",
							 | 
						||
| 
								 | 
							
								    "DOG",
							 | 
						||
| 
								 | 
							
								    "KID_70",
							 | 
						||
| 
								 | 
							
								    "KID_71",
							 | 
						||
| 
								 | 
							
								    "KID_72",
							 | 
						||
| 
								 | 
							
								    "KID_73",
							 | 
						||
| 
								 | 
							
								    "PAPAHLS_WIFE",
							 | 
						||
| 
								 | 
							
								    "GRANDMA_ULRIRA",
							 | 
						||
| 
								 | 
							
								    "MR_WRITE",
							 | 
						||
| 
								 | 
							
								    "GRANDPA_ULRIRA",
							 | 
						||
| 
								 | 
							
								    "YIP_YIP",
							 | 
						||
| 
								 | 
							
								    "MADAM_MEOWMEOW",
							 | 
						||
| 
								 | 
							
								    "CROW",
							 | 
						||
| 
								 | 
							
								    "CRAZY_TRACY",
							 | 
						||
| 
								 | 
							
								    "GIANT_GOPONGA_FLOWER",
							 | 
						||
| 
								 | 
							
								    "GOPONGA_FLOWER_PROJECTILE",
							 | 
						||
| 
								 | 
							
								    "GOPONGA_FLOWER",
							 | 
						||
| 
								 | 
							
								    "TURTLE_ROCK_HEAD",
							 | 
						||
| 
								 | 
							
								    "TELEPHONE",
							 | 
						||
| 
								 | 
							
								    "ROLLING_BONES",
							 | 
						||
| 
								 | 
							
								    "ROLLING_BONES_BAR",
							 | 
						||
| 
								 | 
							
								    "DREAM_SHRINE_BED",
							 | 
						||
| 
								 | 
							
								    "BIG_FAIRY",
							 | 
						||
| 
								 | 
							
								    "MR_WRITES_BIRD",
							 | 
						||
| 
								 | 
							
								    "FLOATING_ITEM",
							 | 
						||
| 
								 | 
							
								    "DESERT_LANMOLA",
							 | 
						||
| 
								 | 
							
								    "ARMOS_KNIGHT",
							 | 
						||
| 
								 | 
							
								    "HINOX",
							 | 
						||
| 
								 | 
							
								    "TILE_GLINT_SHOWN",
							 | 
						||
| 
								 | 
							
								    "TILE_GLINT_HIDDEN",
							 | 
						||
| 
								 | 
							
								    "8C",
							 | 
						||
| 
								 | 
							
								    "8D",
							 | 
						||
| 
								 | 
							
								    "CUE_BALL",
							 | 
						||
| 
								 | 
							
								    "MASKED_MIMIC_GORIYA",
							 | 
						||
| 
								 | 
							
								    "THREE_OF_A_KIND",
							 | 
						||
| 
								 | 
							
								    "ANTI_KIRBY",
							 | 
						||
| 
								 | 
							
								    "SMASHER",
							 | 
						||
| 
								 | 
							
								    "MAD_BOMBER",
							 | 
						||
| 
								 | 
							
								    "KANALET_BOMBABLE_WALL",
							 | 
						||
| 
								 | 
							
								    "RICHARD",
							 | 
						||
| 
								 | 
							
								    "RICHARD_FROG",
							 | 
						||
| 
								 | 
							
								    "DIVE_SPOT",
							 | 
						||
| 
								 | 
							
								    "HORSE_PIECE",
							 | 
						||
| 
								 | 
							
								    "WATER_TEKTITE",
							 | 
						||
| 
								 | 
							
								    "FLYING_TILES",
							 | 
						||
| 
								 | 
							
								    "HIDING_GEL",
							 | 
						||
| 
								 | 
							
								    "STAR",
							 | 
						||
| 
								 | 
							
								    "LIFTABLE_STATUE",
							 | 
						||
| 
								 | 
							
								    "FIREBALL_SHOOTER",
							 | 
						||
| 
								 | 
							
								    "GOOMBA",
							 | 
						||
| 
								 | 
							
								    "PEAHAT",
							 | 
						||
| 
								 | 
							
								    "SNAKE",
							 | 
						||
| 
								 | 
							
								    "PIRANHA_PLANT",
							 | 
						||
| 
								 | 
							
								    "SIDE_VIEW_PLATFORM_HORIZONTAL",
							 | 
						||
| 
								 | 
							
								    "SIDE_VIEW_PLATFORM_VERTICAL",
							 | 
						||
| 
								 | 
							
								    "SIDE_VIEW_PLATFORM",
							 | 
						||
| 
								 | 
							
								    "SIDE_VIEW_WEIGHTS",
							 | 
						||
| 
								 | 
							
								    "SMASHABLE_PILLAR",
							 | 
						||
| 
								 | 
							
								    "WRECKING_BALL",
							 | 
						||
| 
								 | 
							
								    "BLOOPER",
							 | 
						||
| 
								 | 
							
								    "CHEEP_CHEEP_HORIZONTAL",
							 | 
						||
| 
								 | 
							
								    "CHEEP_CHEEP_VERTICAL",
							 | 
						||
| 
								 | 
							
								    "CHEEP_CHEEP_JUMPING",
							 | 
						||
| 
								 | 
							
								    "KIKI_THE_MONKEY",
							 | 
						||
| 
								 | 
							
								    "WINGED_OCTOROK",
							 | 
						||
| 
								 | 
							
								    "TRADING_ITEM",
							 | 
						||
| 
								 | 
							
								    "PINCER",
							 | 
						||
| 
								 | 
							
								    "HOLE_FILLER",
							 | 
						||
| 
								 | 
							
								    "BEETLE_SPAWNER",
							 | 
						||
| 
								 | 
							
								    "HONEYCOMB",
							 | 
						||
| 
								 | 
							
								    "TARIN",
							 | 
						||
| 
								 | 
							
								    "BEAR",
							 | 
						||
| 
								 | 
							
								    "PAPAHL",
							 | 
						||
| 
								 | 
							
								    "MERMAID",
							 | 
						||
| 
								 | 
							
								    "FISHERMAN_UNDER_BRIDGE",
							 | 
						||
| 
								 | 
							
								    "BUZZ_BLOB",
							 | 
						||
| 
								 | 
							
								    "BOMBER",
							 | 
						||
| 
								 | 
							
								    "BUSH_CRAWLER",
							 | 
						||
| 
								 | 
							
								    "GRIM_CREEPER",
							 | 
						||
| 
								 | 
							
								    "VIRE",
							 | 
						||
| 
								 | 
							
								    "BLAINO",
							 | 
						||
| 
								 | 
							
								    "ZOMBIE",
							 | 
						||
| 
								 | 
							
								    "MAZE_SIGNPOST",
							 | 
						||
| 
								 | 
							
								    "MARIN_AT_THE_SHORE",
							 | 
						||
| 
								 | 
							
								    "MARIN_AT_TAL_TAL_HEIGHTS",
							 | 
						||
| 
								 | 
							
								    "MAMU_AND_FROGS",
							 | 
						||
| 
								 | 
							
								    "WALRUS",
							 | 
						||
| 
								 | 
							
								    "URCHIN",
							 | 
						||
| 
								 | 
							
								    "SAND_CRAB",
							 | 
						||
| 
								 | 
							
								    "MANBO_AND_FISHES",
							 | 
						||
| 
								 | 
							
								    "BUNNY_CALLING_MARIN",
							 | 
						||
| 
								 | 
							
								    "MUSICAL_NOTE",
							 | 
						||
| 
								 | 
							
								    "MAD_BATTER",
							 | 
						||
| 
								 | 
							
								    "ZORA",
							 | 
						||
| 
								 | 
							
								    "FISH",
							 | 
						||
| 
								 | 
							
								    "BANANAS_SCHULE_SALE",
							 | 
						||
| 
								 | 
							
								    "MERMAID_STATUE",
							 | 
						||
| 
								 | 
							
								    "SEASHELL_MANSION",
							 | 
						||
| 
								 | 
							
								    "ANIMAL_D0",
							 | 
						||
| 
								 | 
							
								    "ANIMAL_D1",
							 | 
						||
| 
								 | 
							
								    "ANIMAL_D2",
							 | 
						||
| 
								 | 
							
								    "BUNNY_D3",
							 | 
						||
| 
								 | 
							
								    "GHOST",
							 | 
						||
| 
								 | 
							
								    "ROOSTER",
							 | 
						||
| 
								 | 
							
								    "SIDE_VIEW_POT",
							 | 
						||
| 
								 | 
							
								    "THWIMP",
							 | 
						||
| 
								 | 
							
								    "THWOMP",
							 | 
						||
| 
								 | 
							
								    "THWOMP_RAMMABLE",
							 | 
						||
| 
								 | 
							
								    "PODOBOO",
							 | 
						||
| 
								 | 
							
								    "GIANT_BUBBLE",
							 | 
						||
| 
								 | 
							
								    "FLYING_ROOSTER_EVENTS",
							 | 
						||
| 
								 | 
							
								    "BOOK",
							 | 
						||
| 
								 | 
							
								    "EGG_SONG_EVENT",
							 | 
						||
| 
								 | 
							
								    "SWORD_BEAM",
							 | 
						||
| 
								 | 
							
								    "MONKEY",
							 | 
						||
| 
								 | 
							
								    "WITCH_RAT",
							 | 
						||
| 
								 | 
							
								    "FLAME_SHOOTER",
							 | 
						||
| 
								 | 
							
								    "POKEY",
							 | 
						||
| 
								 | 
							
								    "MOBLIN_KING",
							 | 
						||
| 
								 | 
							
								    "FLOATING_ITEM_2",
							 | 
						||
| 
								 | 
							
								    "FINAL_NIGHTMARE",
							 | 
						||
| 
								 | 
							
								    "KANALET_CASTLE_GATE_SWITCH",
							 | 
						||
| 
								 | 
							
								    "ENDING_OWL_STAIR_CLIMBING",
							 | 
						||
| 
								 | 
							
								    "COLOR_SHELL_RED",
							 | 
						||
| 
								 | 
							
								    "COLOR_SHELL_GREEN",
							 | 
						||
| 
								 | 
							
								    "COLOR_SHELL_BLUE",
							 | 
						||
| 
								 | 
							
								    "COLOR_GHOUL_RED",
							 | 
						||
| 
								 | 
							
								    "COLOR_GHOUL_GREEN",
							 | 
						||
| 
								 | 
							
								    "COLOR_GHOUL_BLUE",
							 | 
						||
| 
								 | 
							
								    "ROTOSWITCH_RED",
							 | 
						||
| 
								 | 
							
								    "ROTOSWITCH_YELLOW",
							 | 
						||
| 
								 | 
							
								    "ROTOSWITCH_BLUE",
							 | 
						||
| 
								 | 
							
								    "FLYING_HOPPER_BOMBS",
							 | 
						||
| 
								 | 
							
								    "HOPPER",
							 | 
						||
| 
								 | 
							
								    "AVALAUNCH",
							 | 
						||
| 
								 | 
							
								    "BOUNCING_BOULDER",
							 | 
						||
| 
								 | 
							
								    "COLOR_GUARDIAN_BLUE",
							 | 
						||
| 
								 | 
							
								    "COLOR_GUARDIAN_RED",
							 | 
						||
| 
								 | 
							
								    "GIANT_BUZZ_BLOB",
							 | 
						||
| 
								 | 
							
								    "HARDHIT_BEETLE",
							 | 
						||
| 
								 | 
							
								    "PHOTOGRAPHER",
							 | 
						||
| 
								 | 
							
								]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def _moblinSpriteData(room):
							 | 
						||
| 
								 | 
							
								    if room.room in (0x002, 0x013): # Tal tal heights exception
							 | 
						||
| 
								 | 
							
								        return (2, 0x9C)  # Hooded stalfos
							 | 
						||
| 
								 | 
							
								    if room.room < 0x100:
							 | 
						||
| 
								 | 
							
								        x = room.room & 0x0F
							 | 
						||
| 
								 | 
							
								        y = (room.room >> 4) & 0x0F
							 | 
						||
| 
								 | 
							
								        if x < 0x04: # Left side is woods and mountain moblins
							 | 
						||
| 
								 | 
							
								            return (2, 0x7C) # Moblin
							 | 
						||
| 
								 | 
							
								        if 0x08 <= x <= 0x0B and 4 <= y <= 0x07: # Castle
							 | 
						||
| 
								 | 
							
								            return (2, 0x92)  # Knight
							 | 
						||
| 
								 | 
							
								        # Everything else is pigs
							 | 
						||
| 
								 | 
							
								        return (2, 0x83) # Pig
							 | 
						||
| 
								 | 
							
								    elif room.room < 0x1DF: # Dungeons contain hooded stalfos
							 | 
						||
| 
								 | 
							
								        return (2, 0x9C)  # Hooded stalfos
							 | 
						||
| 
								 | 
							
								    elif room.room < 0x200: # Caves contain moblins
							 | 
						||
| 
								 | 
							
								        return (2, 0x7C)  # Moblin
							 | 
						||
| 
								 | 
							
								    elif room.room < 0x276: # Dungeons contain hooded stalfos
							 | 
						||
| 
								 | 
							
								        return (2, 0x9C)  # Hooded stalfos
							 | 
						||
| 
								 | 
							
								    elif room.room < 0x300: # Caves contain moblins
							 | 
						||
| 
								 | 
							
								        x = room.room & 0x0F
							 | 
						||
| 
								 | 
							
								        y = (room.room >> 4) & 0x0F
							 | 
						||
| 
								 | 
							
								        if 2 <= x <= 6 and 0x0C <= y <= 0x0D: # Castle indoors
							 | 
						||
| 
								 | 
							
								            return (2, 0x92)  # Knight
							 | 
						||
| 
								 | 
							
								        return (2, 0x7C)  # Moblin
							 | 
						||
| 
								 | 
							
								    else: # Dungeon contains hooded stalfos
							 | 
						||
| 
								 | 
							
								        return (2, 0x9C)  # Hooded stalfos
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_CAVES_B_ROOMS = {0x2B6, 0x2B7, 0x2B8, 0x2B9, 0x285, 0x286, 0x2FD, 0x2F3, 0x2ED, 0x2EE, 0x2EA, 0x2EB, 0x2EC, 0x287, 0x2F1, 0x2F2, 0x2FE, 0x2EF, 0x2BA, 0x2BB, 0x2BC, 0x28D, 0x2F9, 0x2FA, 0x280, 0x281, 0x282, 0x283, 0x284, 0x28C, 0x288, 0x28A, 0x290, 0x291, 0x292, 0x28E, 0x29A, 0x289, 0x28B, 0x297, 0x293, 0x294, 0x295, 0x296, 0x2AB, 0x2AC, 0x298, 0x27A, 0x27B, 0x2E6, 0x2E7, 0x2BD, 0x27C, 0x27D, 0x27E, 0x2F6, 0x2F7, 0x2DE, 0x2DF}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# For each entity, which sprite slot is used and which value should be used.
							 | 
						||
| 
								 | 
							
								SPRITE_DATA = {
							 | 
						||
| 
								 | 
							
								    0x09: (2, 0xE3), # OCTOROCK
							 | 
						||
| 
								 | 
							
								    0x0B: _moblinSpriteData, # MOBLIN
							 | 
						||
| 
								 | 
							
								    0x0D: (1, 0x87), # TEKTITE
							 | 
						||
| 
								 | 
							
								    0x0E: (1, 0x81), # LEEVER
							 | 
						||
| 
								 | 
							
								    0x0F: (2, 0x78), # ARMOS_STATUE
							 | 
						||
| 
								 | 
							
								    0x10: (1, 0x42), # HIDING_GHINI
							 | 
						||
| 
								 | 
							
								    0x11: (2, 0x8A), # GIANT_GHINI
							 | 
						||
| 
								 | 
							
								    0x12: (1, 0x42), # GHINI
							 | 
						||
| 
								 | 
							
								    0x14: _moblinSpriteData, # MOBLIN_SWORD
							 | 
						||
| 
								 | 
							
								    0x15: (1, 0x91), # ANTI_FAIRY
							 | 
						||
| 
								 | 
							
								    0x16: (1, {0x91, 0x65}), # SPARK_COUNTER_CLOCKWISE
							 | 
						||
| 
								 | 
							
								    0x17: (1, {0x91, 0x65}), # SPARK_CLOCKWISE
							 | 
						||
| 
								 | 
							
								    0x18: (3, 0x93), # POLS_VOICE
							 | 
						||
| 
								 | 
							
								    0x19: lambda room: (2, 0x90) if room.room in _CAVES_B_ROOMS else (0, 0x90), # KEESE
							 | 
						||
| 
								 | 
							
								    0x1A: (0, {0x90, 0x77}), # STALFOS_AGGRESSIVE
							 | 
						||
| 
								 | 
							
								    0x1B: None,      # GEL
							 | 
						||
| 
								 | 
							
								    0x1C: (1, 0x91), # MINI_GEL
							 | 
						||
| 
								 | 
							
								    0x1E: (0, {0x90, 0x77}), # STALFOS_EVASIVE
							 | 
						||
| 
								 | 
							
								    0x1F: lambda room: (0, 0x77) if 0x230 <= room.room <= 0x26B else (0, 0x90, 3, 0x93), # GIBDO
							 | 
						||
| 
								 | 
							
								    0x20: lambda room: (2, 0x90) if room.room in _CAVES_B_ROOMS else (0, 0x90), # HARDHAT_BEETLE
							 | 
						||
| 
								 | 
							
								    0x21: (2, 0x95), # WIZROBE
							 | 
						||
| 
								 | 
							
								    0x23: (3, 0x93), # LIKE_LIKE
							 | 
						||
| 
								 | 
							
								    0x24: (2, 0x94, 3, 0x9F), # IRON_MASK
							 | 
						||
| 
								 | 
							
								    0x27: (1, 0x91), # SPIKE_TRAP
							 | 
						||
| 
								 | 
							
								    0x28: (2, 0x96), # MIMIC
							 | 
						||
| 
								 | 
							
								    0x29: (3, 0x98), # MINI_MOLDORM
							 | 
						||
| 
								 | 
							
								    0x2A: (3, 0x99), # LASER
							 | 
						||
| 
								 | 
							
								    0x2C: lambda room: (2, 0x9B) if 0x15E <= room.room <= 0x17F else (3, 0x9B), # SPIKED_BEETLE
							 | 
						||
| 
								 | 
							
								    0x2D: None,      # DROPPABLE_HEART
							 | 
						||
| 
								 | 
							
								    0x2E: None,      # DROPPABLE_RUPEE
							 | 
						||
| 
								 | 
							
								    0x2F: None,      # DROPPABLE_FAIRY
							 | 
						||
| 
								 | 
							
								    0x30: None,      # KEY_DROP_POINT
							 | 
						||
| 
								 | 
							
								    0x31: None,      # SWORD
							 | 
						||
| 
								 | 
							
								    0x35: None,      # HEART_PIECE
							 | 
						||
| 
								 | 
							
								    0x37: None,      # DROPPABLE_ARROWS
							 | 
						||
| 
								 | 
							
								    0x38: None,      # DROPPABLE_BOMBS
							 | 
						||
| 
								 | 
							
								    0x39: (2, 0x4F), # INSTRUMENT_OF_THE_SIRENS
							 | 
						||
| 
								 | 
							
								    0x3A: (1, 0x8E), # SLEEPY_TOADSTOOL
							 | 
						||
| 
								 | 
							
								    0x3B: None,      # DROPPABLE_MAGIC_POWDER
							 | 
						||
| 
								 | 
							
								    0x3C: None,      # HIDING_SLIME_KEY
							 | 
						||
| 
								 | 
							
								    0x3D: None,      # DROPPABLE_SECRET_SEASHELL
							 | 
						||
| 
								 | 
							
								    0x3E: lambda room: (0, 0x8D, 2, 0x8F) if room.room == 0x2A3 else (2, 0xE6), # MARIN
							 | 
						||
| 
								 | 
							
								    0x3F: lambda room: (1, 0x8E, 3, 0x6A) if room.room == 0x2A3 else (1, 0x6C, 3, 0xC8), # RACOON
							 | 
						||
| 
								 | 
							
								    0x40: (2, 0xA3), # WITCH
							 | 
						||
| 
								 | 
							
								    0x41: None,      # OWL_EVENT
							 | 
						||
| 
								 | 
							
								    0x42: lambda room: (1, 0xD5) if room.room == 0x26F else (1, 0x91), # OWL_STATUE
							 | 
						||
| 
								 | 
							
								    0x43: None,      # SEASHELL_MANSION_TREES
							 | 
						||
| 
								 | 
							
								    0x44: None,      # YARNA_TALKING_BONES
							 | 
						||
| 
								 | 
							
								    0x45: (1, 0x44), # BOULDERS
							 | 
						||
| 
								 | 
							
								    0x46: None,      # MOVING_BLOCK_LEFT_TOP
							 | 
						||
| 
								 | 
							
								    0x47: None,      # MOVING_BLOCK_LEFT_BOTTOM
							 | 
						||
| 
								 | 
							
								    0x48: None,      # MOVING_BLOCK_BOTTOM_LEFT
							 | 
						||
| 
								 | 
							
								    0x49: None,      # MOVING_BLOCK_BOTTOM_RIGHT
							 | 
						||
| 
								 | 
							
								    0x4A: (1, 0xd5), # COLOR_DUNGEON_BOOK
							 | 
						||
| 
								 | 
							
								    0x4C: None,      # Used by Bingo board, otherwise unused.
							 | 
						||
| 
								 | 
							
								    0x4D: (2, 0x88, 3, 0xC7), # SHOP_OWNER
							 | 
						||
| 
								 | 
							
								    0x4F: (2, 0x84, 3, 0x89), # TRENDY_GAME_OWNER
							 | 
						||
| 
								 | 
							
								    0x50: (2, 0x97), # BOO_BUDDY
							 | 
						||
| 
								 | 
							
								    0x51: (3, 0x9A), # KNIGHT
							 | 
						||
| 
								 | 
							
								    0x52: lambda room: (3, {0x7b, 0xa6}) if 0x120 <= room.room <= 0x13F else (0, {0x7b, 0xa6}), # TRACTOR_DEVICE
							 | 
						||
| 
								 | 
							
								    0x53: lambda room: (3, {0x7b, 0xa6}) if 0x120 <= room.room <= 0x13F else (0, {0x7b, 0xa6}), # TRACTOR_DEVICE_REVERSE
							 | 
						||
| 
								 | 
							
								    0x54: lambda room: (0, 0xA0, 1, 0xA1) if room.room == 0x2B1 else (3, 0x4e), # FISHERMAN_FISHING_GAME
							 | 
						||
| 
								 | 
							
								    0x55: (3, 0x9d), # BOUNCING_BOMBITE
							 | 
						||
| 
								 | 
							
								    0x56: (3, 0x9d), # TIMER_BOMBITE
							 | 
						||
| 
								 | 
							
								    0x57: (3, 0x9e), # PAIRODD
							 | 
						||
| 
								 | 
							
								    0x59: (2, 0xb0, 3, 0xb1), # MOLDORM
							 | 
						||
| 
								 | 
							
								    0x5A: (0, 0x66, 2, 0xb2, 3, 0xb3), # FACADE
							 | 
						||
| 
								 | 
							
								    0x5B: (2, 0xb4, 3, 0xb5), # SLIME_EYE
							 | 
						||
| 
								 | 
							
								    0x5C: (2, 0xb6, 3, 0xb7), # GENIE
							 | 
						||
| 
								 | 
							
								    0x5D: (2, 0xb8, 3, 0xb9), # SLIME_EEL
							 | 
						||
| 
								 | 
							
								    0x5E: (2, 0xa8), # GHOMA
							 | 
						||
| 
								 | 
							
								    0x5F: (2, 0x62, 3, 0x63), # MASTER_STALFOS
							 | 
						||
| 
								 | 
							
								    0x60: lambda room: (3, 0xaa) if 0x230 <= room.room <= 0x26B else (2, 0xaa), # DODONGO_SNAKE
							 | 
						||
| 
								 | 
							
								    0x61: None,      # WARP
							 | 
						||
| 
								 | 
							
								    0x62: (2, 0xba, 3, 0xbb), # HOT_HEAD
							 | 
						||
| 
								 | 
							
								    0x63: (0, 0xbc, 1, 0xbd, 2, 0xbe, 3, 0xbf), # EVIL_EAGLE
							 | 
						||
| 
								 | 
							
								    0x65: (0, 0xac, 1, 0xad, 2, 0xae, 3, 0xaf), # ANGLER_FISH
							 | 
						||
| 
								 | 
							
								    0x66: (1, 0x91), # CRYSTAL_SWITCH
							 | 
						||
| 
								 | 
							
								    0x69: (0, 0x66), # MOVING_BLOCK_MOVER
							 | 
						||
| 
								 | 
							
								    0x6A: lambda room: (1, 0x87, 2, 0x84) if room.room >= 0x100 else (1, 0x87), # RAFT_RAFT_OWNER
							 | 
						||
| 
								 | 
							
								    0x6C: None,      # CUCCU
							 | 
						||
| 
								 | 
							
								    0x6D: (3, 0xA4), # BOW_WOW
							 | 
						||
| 
								 | 
							
								    0x6E: (1, {0xE5, 0xC4}), # BUTTERFLY
							 | 
						||
| 
								 | 
							
								    0x6F: (1, 0xE5), # DOG
							 | 
						||
| 
								 | 
							
								    0x70: (3, 0xE7), # KID_70
							 | 
						||
| 
								 | 
							
								    0x71: (3, 0xE7), # KID_71
							 | 
						||
| 
								 | 
							
								    0x72: (3, 0xE7), # KID_72
							 | 
						||
| 
								 | 
							
								    0x73: (3, 0xDC), # KID_73
							 | 
						||
| 
								 | 
							
								    0x74: (2, 0x45), # PAPAHLS_WIFE
							 | 
						||
| 
								 | 
							
								    0x75: (2, 0x43), # GRANDMA_ULRIRA
							 | 
						||
| 
								 | 
							
								    0x76: lambda room: (3, 0x74) if room.room == 0x2D9 else (3, 0x4b), # MR_WRITE
							 | 
						||
| 
								 | 
							
								    0x77: (3, 0x46), # GRANDPA_ULRIRA
							 | 
						||
| 
								 | 
							
								    0x78: (3, 0x48), # YIP_YIP
							 | 
						||
| 
								 | 
							
								    0x79: (2, 0x47), # MADAM_MEOWMEOW
							 | 
						||
| 
								 | 
							
								    0x7A: lambda room: (1, 0xC6) if room.room < 0x040 else (1, 0x42), # CROW
							 | 
						||
| 
								 | 
							
								    0x7B: (2, 0x49), # CRAZY_TRACY
							 | 
						||
| 
								 | 
							
								    0x7C: (3, 0x40), # GIANT_GOPONGA_FLOWER
							 | 
						||
| 
								 | 
							
								    0x7E: (1, 0x4A), # GOPONGA_FLOWER
							 | 
						||
| 
								 | 
							
								    0x7F: (3, 0x41), # TURTLE_ROCK_HEAD
							 | 
						||
| 
								 | 
							
								    0x80: (1, 0x4C), # TELEPHONE
							 | 
						||
| 
								 | 
							
								    0x81: lambda room: (3, 0xAB) if 0x230 <= room.room <= 0x26B else (2, 0xAB), # ROLLING_BONES (sometimes in slot 3?)
							 | 
						||
| 
								 | 
							
								    0x82: lambda room: (3, 0xAB) if 0x230 <= room.room <= 0x26B else (2, 0xAB), # ROLLING_BONES_BAR (sometimes in slot 3?)
							 | 
						||
| 
								 | 
							
								    0x83: (1, 0x8D), # DREAM_SHRINE_BED
							 | 
						||
| 
								 | 
							
								    0x84: (1, 0x4D), # BIG_FAIRY
							 | 
						||
| 
								 | 
							
								    0x85: (2, 0x4C), # MR_WRITES_BIRD
							 | 
						||
| 
								 | 
							
								    0x86: None,      # FLOATING_ITEM
							 | 
						||
| 
								 | 
							
								    0x87: (3, 0x52), # DESERT_LANMOLA
							 | 
						||
| 
								 | 
							
								    0x88: (3, 0x53), # ARMOS_KNIGHT
							 | 
						||
| 
								 | 
							
								    0x89: (2, 0x54), # HINOX
							 | 
						||
| 
								 | 
							
								    0x8A: None,      # TILE_GLINT_SHOWN
							 | 
						||
| 
								 | 
							
								    0x8B: None,      # TILE_GLINT_HIDDEN
							 | 
						||
| 
								 | 
							
								    0x8E: (2, 0x56), # CUE_BALL
							 | 
						||
| 
								 | 
							
								    0x8F: lambda room: (2, 0x86) if room.room == 0x1F5 else (2, 0x58), # MASKED_MIMIC_GORIYA
							 | 
						||
| 
								 | 
							
								    0x90: (3, 0x59), # THREE_OF_A_KIND
							 | 
						||
| 
								 | 
							
								    0x91: (2, 0x55), # ANTI_KIRBY
							 | 
						||
| 
								 | 
							
								    0x92: (2, 0x57), # SMASHER
							 | 
						||
| 
								 | 
							
								    0x93: (3, 0x5A), # MAD_BOMBER
							 | 
						||
| 
								 | 
							
								    0x94: (2, 0x92), # KANALET_BOMBABLE_WALL
							 | 
						||
| 
								 | 
							
								    0x95: (1, 0x5b), # RICHARD
							 | 
						||
| 
								 | 
							
								    0x96: (2, 0x5c), # RICHARD_FROG
							 | 
						||
| 
								 | 
							
								    0x97: None,      # DIVE_SPOT
							 | 
						||
| 
								 | 
							
								    0x98: (2, 0x5e), # HORSE_PIECE
							 | 
						||
| 
								 | 
							
								    0x99: (3, 0x60), # WATER_TEKTITE
							 | 
						||
| 
								 | 
							
								    0x9A: lambda room: (0, 0x66) if 0x200 <= room.room <= 0x22F else (0, 0xa6), # FLYING_TILES
							 | 
						||
| 
								 | 
							
								    0x9B: None,      # HIDING_GEL
							 | 
						||
| 
								 | 
							
								    0x9C: (3, 0x60), # STAR
							 | 
						||
| 
								 | 
							
								    0x9D: (0, 0xa6), # LIFTABLE_STATUE
							 | 
						||
| 
								 | 
							
								    0x9E: None,      # FIREBALL_SHOOTER
							 | 
						||
| 
								 | 
							
								    0x9F: (0, 0x5f), # GOOMBA
							 | 
						||
| 
								 | 
							
								    0xA0: (0, {0x5f, 0x68}), # PEAHAT
							 | 
						||
| 
								 | 
							
								    0xA1: (0, {0x5f, 0x7b}), # SNAKE
							 | 
						||
| 
								 | 
							
								    0xA2: (3, 0x64), # PIRANHA_PLANT
							 | 
						||
| 
								 | 
							
								    0xA3: (1, 0x65), # SIDE_VIEW_PLATFORM_HORIZONTAL
							 | 
						||
| 
								 | 
							
								    0xA4: (1, 0x65), # SIDE_VIEW_PLATFORM_VERTICAL
							 | 
						||
| 
								 | 
							
								    0xA5: (1, 0x65), # SIDE_VIEW_PLATFORM
							 | 
						||
| 
								 | 
							
								    0xA6: (1, 0x65), # SIDE_VIEW_WEIGHTS
							 | 
						||
| 
								 | 
							
								    0xA7: (0, 0x66), # SMASHABLE_PILLAR
							 | 
						||
| 
								 | 
							
								    0xA9: (2, 0x5d), # BLOOPER
							 | 
						||
| 
								 | 
							
								    0xAA: (2, 0x5d), # CHEEP_CHEEP_HORIZONTAL
							 | 
						||
| 
								 | 
							
								    0xAB: (2, 0x5d), # CHEEP_CHEEP_VERTICAL
							 | 
						||
| 
								 | 
							
								    0xAC: (2, 0x5d), # CHEEP_CHEEP_JUMPING
							 | 
						||
| 
								 | 
							
								    0xAD: (3, 0x67), # KIKI_THE_MONKEY
							 | 
						||
| 
								 | 
							
								    0xAE: (1, 0xE3), # WINGED_OCTOROCK
							 | 
						||
| 
								 | 
							
								    0xAF: None,      # TRADING_ITEM
							 | 
						||
| 
								 | 
							
								    0xB0: (2, 0x8B), # PINCER
							 | 
						||
| 
								 | 
							
								    0xB1: (0, 0x7b), # HOLE_FILLER (or 0x77)
							 | 
						||
| 
								 | 
							
								    0xB2: (3, 0x8C), # BEETLE_SPAWNER
							 | 
						||
| 
								 | 
							
								    0xB3: (3, 0x6B), # HONEYCOMB
							 | 
						||
| 
								 | 
							
								    0xB4: (1, 0x6C), # TARIN
							 | 
						||
| 
								 | 
							
								    0xB5: (3, 0x69), # BEAR
							 | 
						||
| 
								 | 
							
								    0xB6: (3, 0x6D), # PAPAHL
							 | 
						||
| 
								 | 
							
								    0xB7: (3, 0x71), # MERMAID
							 | 
						||
| 
								 | 
							
								    0xB8: (1, 0xa1, 2, 0x75, 3, 0x4e), # FISHERMAN_UNDER_BRIDGE
							 | 
						||
| 
								 | 
							
								    0xB9: (2, 0x79), # BUZZ_BLOB
							 | 
						||
| 
								 | 
							
								    0xBA: (3, 0x76), # BOMBER
							 | 
						||
| 
								 | 
							
								    0xBB: (3, 0x76), # BUSH_CRAWLER
							 | 
						||
| 
								 | 
							
								    0xBC: (2, 0xa9), # GRIM_CREEPER
							 | 
						||
| 
								 | 
							
								    0xBD: (2, 0x7a), # VIRE
							 | 
						||
| 
								 | 
							
								    0xBE: (2, 0xa7), # BLAINO
							 | 
						||
| 
								 | 
							
								    0xBF: (2, 0x82), # ZOMBIE
							 | 
						||
| 
								 | 
							
								    0xC0: None,      # MAZE_SIGNPOST
							 | 
						||
| 
								 | 
							
								    0xC1: (2, 0x8F), # MARIN_AT_THE_SHORE
							 | 
						||
| 
								 | 
							
								    0xC2: (1, 0x6C, 2, 0x8F), # MARIN_AT_TAL_TAL_HEIGHTS
							 | 
						||
| 
								 | 
							
								    0xC3: (1, 0x7d, 2, 0x7e, 3, 0x7F), # MAMU_AND_FROGS
							 | 
						||
| 
								 | 
							
								    0xC4: (2, 0x6E, 3, 0x6F), # WALRUS
							 | 
						||
| 
								 | 
							
								    0xC5: (1, 0x81), # URCHIN
							 | 
						||
| 
								 | 
							
								    0xC6: (1, 0x81), # SAND_CRAB
							 | 
						||
| 
								 | 
							
								    0xC7: (0, 0xC0, 1, 0xc1, 2, 0xc2, 3, 0xc3), # MANBO_AND_FISHES
							 | 
						||
| 
								 | 
							
								    0xCA: (3, 0xc7), # MAD_BATTER
							 | 
						||
| 
								 | 
							
								    0xCB: (1, 0x61), # ZORA
							 | 
						||
| 
								 | 
							
								    0xCC: (1, 0x4A), # FISH
							 | 
						||
| 
								 | 
							
								    0xCD: lambda room: (1, 0xCC, 2, 0xCD, 3, 0xCE) if room.room == 0x2DD else (1, 0xD1, 2, 0xD2, 3, 0x6A) if room.room == 0x2FE else (3, 0xD4), # BANANAS_SCHULE_SALE
							 | 
						||
| 
								 | 
							
								    0xCE: (3, 0x73), # MERMAID_STATUE
							 | 
						||
| 
								 | 
							
								    0xCF: (1, 0xC9, 2, 0xCA, 3, 0xCB), # SEASHELL_MANSION
							 | 
						||
| 
								 | 
							
								    0xD0: (1, 0xC4), # ANIMAL_D0
							 | 
						||
| 
								 | 
							
								    0xD1: (3, 0xCF), # ANIMAL_D1
							 | 
						||
| 
								 | 
							
								    0xD2: (3, 0xCF), # ANIMAL_D2
							 | 
						||
| 
								 | 
							
								    0xD3: (1, 0xC4), # BUNNY_D3
							 | 
						||
| 
								 | 
							
								    0xD6: (1, 0x65), # SIDE_VIEW_POT
							 | 
						||
| 
								 | 
							
								    0xD7: (1, 0x65), # THWIMP
							 | 
						||
| 
								 | 
							
								    0xD8: (2, 0xDA, 3, 0xDB), # THWOMP
							 | 
						||
| 
								 | 
							
								    0xD9: (1, 0xD9), # THWOMP_RAMMABLE
							 | 
						||
| 
								 | 
							
								    0xDA: (3, 0x64), # PODOBOO
							 | 
						||
| 
								 | 
							
								    0xDB: (2, 0xDA), # GIANT_BUBBLE
							 | 
						||
| 
								 | 
							
								    0xDC: lambda room: (0, 0xDD, 2, 0xDE) if room.room == 0x1E4 else (2, 0xD3, 3, 0xDD) if room.room == 0x29F else (3, 0xDC),      # FLYING_ROOSTER_EVENTS
							 | 
						||
| 
								 | 
							
								    0xDD: (1, 0xD5), # BOOK
							 | 
						||
| 
								 | 
							
								    0xDE: None,      # EGG_SONG_EVENT
							 | 
						||
| 
								 | 
							
								    0xE0: (3, 0xD4), # MONKEY
							 | 
						||
| 
								 | 
							
								    0xE1: (1, 0xDF), # WITCH_RAT
							 | 
						||
| 
								 | 
							
								    0xE2: (3, 0xF4), # FLAME_SHOOTER
							 | 
						||
| 
								 | 
							
								    0xE3: (3, 0x8C), # POKEY
							 | 
						||
| 
								 | 
							
								    0xE4: (1, 0x80, 3, 0xA5), # MOBLIN_KING
							 | 
						||
| 
								 | 
							
								    0xE5: None,      # FLOATING_ITEM_2
							 | 
						||
| 
								 | 
							
								    0xE6: (0, 0xe8, 1, 0xe9, 2, 0xea, 3, 0xeb), # FINAL_NIGHTMARE
							 | 
						||
| 
								 | 
							
								    0xE7: None,      # KANALET_CASTLE_GATE_SWITCH
							 | 
						||
| 
								 | 
							
								    0xE9: (0, 0x04, 1, 0x05), # COLOR_SHELL_RED
							 | 
						||
| 
								 | 
							
								    0xEA: (0, 0x04, 1, 0x05), # COLOR_SHELL_GREEN
							 | 
						||
| 
								 | 
							
								    0xEB: (0, 0x04, 1, 0x05), # COLOR_SHELL_BLUE
							 | 
						||
| 
								 | 
							
								    0xEC: (2, 0x06), # COLOR_GHOUL_RED
							 | 
						||
| 
								 | 
							
								    0xED: (2, 0x06), # COLOR_GHOUL_GREEN
							 | 
						||
| 
								 | 
							
								    0xEE: (2, 0x06), # COLOR_GHOUL_BLUE
							 | 
						||
| 
								 | 
							
								    0xEF: (3, 0x07), # ROTOSWITCH_RED
							 | 
						||
| 
								 | 
							
								    0xF0: (3, 0x07), # ROTOSWITCH_YELLOW
							 | 
						||
| 
								 | 
							
								    0xF1: (3, 0x07), # ROTOSWITCH_BLUE
							 | 
						||
| 
								 | 
							
								    0xF2: (3, 0x07), # FLYING_HOPPER_BOMBS
							 | 
						||
| 
								 | 
							
								    0xF3: (3, 0x07), # HOPPER
							 | 
						||
| 
								 | 
							
								    0xF4: (0, 0x08, 1, 0x09, 2, 0x0A), # AVALAUNCH
							 | 
						||
| 
								 | 
							
								    0xF6: (0, 0x0E), # COLOR_GUARDIAN_BLUE
							 | 
						||
| 
								 | 
							
								    0xF7: (0, 0x0E), # COLOR_GUARDIAN_BLUE
							 | 
						||
| 
								 | 
							
								    0xF8: (0, 0x0B, 1, 0x0C, 3, 0x0D), # GIANT_BUZZ_BLOB
							 | 
						||
| 
								 | 
							
								    0xF9: (0, 0x11, 2, 0x10), # HARDHIT_BEETLE
							 | 
						||
| 
								 | 
							
								    0xFA: lambda room: (0, 0x44) if room.room == 0x2F5 else None, # PHOTOGRAPHER
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								assert len(NAME) == COUNT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Entity:
							 | 
						||
| 
								 | 
							
								    def __init__(self, index):
							 | 
						||
| 
								 | 
							
								        self.index = index
							 | 
						||
| 
								 | 
							
								        self.group = None
							 | 
						||
| 
								 | 
							
								        self.physics_flags = None
							 | 
						||
| 
								 | 
							
								        self.bowwow_eat_flag = None
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Group:
							 | 
						||
| 
								 | 
							
								    def __init__(self, index):
							 | 
						||
| 
								 | 
							
								        self.index = index
							 | 
						||
| 
								 | 
							
								        self.health = None
							 | 
						||
| 
								 | 
							
								        self.link_damage = None
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class EntityData:
							 | 
						||
| 
								 | 
							
								    def __init__(self, rom):
							 | 
						||
| 
								 | 
							
								        groups = rom.banks[0x03][0x01F6:0x01F6+COUNT]
							 | 
						||
| 
								 | 
							
								        group_count = max(groups) + 1
							 | 
						||
| 
								 | 
							
								        group_damage_type = rom.banks[0x03][0x03EC:0x03EC+group_count*16]
							 | 
						||
| 
								 | 
							
								        damage_per_damage_type = rom.banks[0x03][0x073C:0x073C+8*16]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.entities = []
							 | 
						||
| 
								 | 
							
								        self.groups = []
							 | 
						||
| 
								 | 
							
								        for n in range(group_count):
							 | 
						||
| 
								 | 
							
								            g = Group(n)
							 | 
						||
| 
								 | 
							
								            g.health = rom.banks[0x03][0x07BC+n]
							 | 
						||
| 
								 | 
							
								            g.link_damage = rom.banks[0x03][0x07F1+n]
							 | 
						||
| 
								 | 
							
								            self.groups.append(g)
							 | 
						||
| 
								 | 
							
								        for n in range(COUNT):
							 | 
						||
| 
								 | 
							
								            e = Entity(n)
							 | 
						||
| 
								 | 
							
								            e.group = self.groups[groups[n]]
							 | 
						||
| 
								 | 
							
								            e.physics_flags = rom.banks[0x03][0x0000 + n]
							 | 
						||
| 
								 | 
							
								            e.bowwow_eat_flag = rom.banks[0x14][0x1218+n]
							 | 
						||
| 
								 | 
							
								            self.entities.append(e)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #print(sum(bowwow_eatable))
							 | 
						||
| 
								 | 
							
								        #for n in range(COUNT):
							 | 
						||
| 
								 | 
							
								        #    if bowwow_eatable[n]:
							 | 
						||
| 
								 | 
							
								        #        print(hex(n), NAME[n])
							 | 
						||
| 
								 | 
							
								        for n in range(group_count):
							 | 
						||
| 
								 | 
							
								            entities = list(map(lambda data: NAME[data[0]], filter(lambda data: data[1] == n, enumerate(groups))))
							 | 
						||
| 
								 | 
							
								            #print(hex(n), damage_to_link[n], entities)
							 | 
						||
| 
								 | 
							
								            dmg = bytearray()
							 | 
						||
| 
								 | 
							
								            for m in range(16):
							 | 
						||
| 
								 | 
							
								                dmg.append(damage_per_damage_type[m*8+group_damage_type[n*16+m]])
							 | 
						||
| 
								 | 
							
								            import binascii
							 | 
						||
| 
								 | 
							
								            #print(binascii.hexlify(group_damage_type[n*16:n*16+16]))
							 | 
						||
| 
								 | 
							
								            #print(binascii.hexlify(dmg))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if __name__ == "__main__":
							 | 
						||
| 
								 | 
							
								    from rom import ROM
							 | 
						||
| 
								 | 
							
								    import sys
							 | 
						||
| 
								 | 
							
								    rom = ROM(sys.argv[1])
							 | 
						||
| 
								 | 
							
								    ed = EntityData(rom)
							 | 
						||
| 
								 | 
							
								    for e in ed.entities:
							 | 
						||
| 
								 | 
							
								        print(NAME[e.index], e.bowwow_eat_flag)
							 |