2ship2harkinian/tools/entr.py
Derek Hensley 132dd6a373
Entrance Macro (#987)
* POC

* fix

* Fix typo

* token POC

* The rest

* small cleanup

* More small cleanup

* ENTRANCE

* arg renames

* EntranceIndex -> Entrance

* format

* PR

* PR2

* Remove layer from entrance macro

* namefixer plus comments

* format
2022-08-15 14:45:28 -04:00

133 lines
4.2 KiB
Python
Executable File

#!/usr/bin/env python3
enumPrfix = "ENTR_SCENE_"
entranceScenes = [
"ENTR_SCENE_MAYORS_RESIDENCE",
"ENTR_SCENE_MAJORAS_LAIR",
"ENTR_SCENE_MAGIC_HAGS_POTION_SHOP",
"ENTR_SCENE_RANCH_HOUSE",
"ENTR_SCENE_HONEY_AND_DARLINGS_SHOP",
"ENTR_SCENE_BENEATH_THE_GRAVERYARD",
"ENTR_SCENE_SOUTHERN_SWAMP_CLEARED",
"ENTR_SCENE_CURIOSITY_SHOP",
"ENTR_SCENE_UNSET_08",
"ENTR_SCENE_UNSET_09",
"ENTR_SCENE_GROTTOS",
"ENTR_SCENE_UNSET_0B",
"ENTR_SCENE_UNSET_0C",
"ENTR_SCENE_UNSET_0D",
"ENTR_SCENE_CUTSCENE",
"ENTR_SCENE_UNSET_0F",
"ENTR_SCENE_IKANA_CANYON",
"ENTR_SCENE_PIRATES_FORTRESS",
"ENTR_SCENE_MILK_BAR",
"ENTR_SCENE_STONE_TOWER_TEMPLE",
"ENTR_SCENE_TREASURE_CHEST_SHOP",
"ENTR_SCENE_STONE_TOWER_TEMPLE_REVERSED",
"ENTR_SCENE_CLOCK_TOWER_ROOFTOP",
"ENTR_SCENE_OPENING_DUNGEON",
"ENTR_SCENE_WOODFALL_TEMPLE",
"ENTR_SCENE_PATH_TO_MOUNTAIN_VILLAGE",
"ENTR_SCENE_IKANA_CASTLE",
"ENTR_SCENE_DEKU_SCRUB_PLAYGROUND",
"ENTR_SCENE_ODOLWAS_LAIR",
"ENTR_SCENE_TOWN_SHOOTING_GALLERY",
"ENTR_SCENE_SNOWHEAD_TEMPLE",
"ENTR_SCENE_MILK_ROAD",
"ENTR_SCENE_PIRATES_FORTRESS_INTERIOR",
"ENTR_SCENE_SWAMP_SHOOTING_GALLERY",
"ENTR_SCENE_PINNACLE_ROCK",
"ENTR_SCENE_FAIRY_FOUNTAIN",
"ENTR_SCENE_SWAMP_SPIDER_HOUSE",
"ENTR_SCENE_OCEANSIDE_SPIDER_HOUSE",
"ENTR_SCENE_ASTRAL_OBSERVATORY",
"ENTR_SCENE_MOON_DEKU_TRIAL",
"ENTR_SCENE_DEKU_PALACE",
"ENTR_SCENE_MOUNTAIN_SMITHY",
"ENTR_SCENE_TERMINA_FIELD",
"ENTR_SCENE_POST_OFFICE",
"ENTR_SCENE_MARINE_RESEARCH_LAB",
"ENTR_SCENE_DAMPES_HOUSE",
"ENTR_SCENE_UNSET_2E",
"ENTR_SCENE_GORON_SHRINE",
"ENTR_SCENE_ZORA_HALL",
"ENTR_SCENE_TRADING_POST",
"ENTR_SCENE_ROMANI_RANCH",
"ENTR_SCENE_TWINMOLDS_LAIR",
"ENTR_SCENE_GREAT_BAY_COAST",
"ENTR_SCENE_ZORA_CAPE",
"ENTR_SCENE_LOTTERY_SHOP",
"ENTR_SCENE_UNSET_37",
"ENTR_SCENE_PIRATES_FORTRESS_EXTERIOR",
"ENTR_SCENE_FISHERMANS_HUT",
"ENTR_SCENE_GORON_SHOP",
"ENTR_SCENE_DEKU_KINGS_CHAMBER",
"ENTR_SCENE_MOON_GORON_TRIAL",
"ENTR_SCENE_ROAD_TO_SOUTHERN_SWAMP",
"ENTR_SCENE_DOGGY_RACETRACK",
"ENTR_SCENE_CUCCO_SHACK",
"ENTR_SCENE_IKANA_GRAVEYARD",
"ENTR_SCENE_GOHTS_LAIR",
"ENTR_SCENE_SOUTHERN_SWAMP_POISONED",
"ENTR_SCENE_WOODFALL",
"ENTR_SCENE_MOON_ZORA_TRIAL",
"ENTR_SCENE_GORON_VILLAGE_SPRING",
"ENTR_SCENE_GREAT_BAY_TEMPLE",
"ENTR_SCENE_WATERFALL_RAPIDS",
"ENTR_SCENE_BENEATH_THE_WELL",
"ENTR_SCENE_ZORA_HALL_ROOMS",
"ENTR_SCENE_GORON_VILLAGE_WINTER",
"ENTR_SCENE_GORON_GRAVERYARD",
"ENTR_SCENE_SAKONS_HIDEOUT",
"ENTR_SCENE_MOUNTAIN_VILLAGE_WINTER",
"ENTR_SCENE_GHOST_HUT",
"ENTR_SCENE_DEKU_SHRINE",
"ENTR_SCENE_ROAD_TO_IKANA",
"ENTR_SCENE_SWORDMANS_SCHOOL",
"ENTR_SCENE_MUSIC_BOX_HOUSE",
"ENTR_SCENE_IGOS_DU_IKANAS_LAIR",
"ENTR_SCENE_TOURIST_INFORMATION",
"ENTR_SCENE_STONE_TOWER",
"ENTR_SCENE_STONE_TOWER_INVERTED",
"ENTR_SCENE_MOUNTAIN_VILLAGE_SPRING",
"ENTR_SCENE_PATH_TO_SNOWHEAD",
"ENTR_SCENE_SNOWHEAD",
"ENTR_SCENE_PATH_TO_GORON_VILLAGE_WINTER",
"ENTR_SCENE_PATH_TO_GORON_VILLAGE_SPRING",
"ENTR_SCENE_GYORGS_LAIR",
"ENTR_SCENE_SECRET_SHRINE",
"ENTR_SCENE_STOCK_POT_INN",
"ENTR_SCENE_GREAT_BAY_CUTSCENE",
"ENTR_SCENE_CLOCK_TOWER_INTERIOR",
"ENTR_SCENE_WOODS_OF_MYSTERY",
"ENTR_SCENE_LOST_WOODS",
"ENTR_SCENE_MOON_LINK_TRIAL",
"ENTR_SCENE_THE_MOON",
"ENTR_SCENE_BOMB_SHOP",
"ENTR_SCENE_GIANTS_CHAMBER",
"ENTR_SCENE_GORMAN_TRACK",
"ENTR_SCENE_GORON_RACETRACK",
"ENTR_SCENE_EAST_CLOCK_TOWN",
"ENTR_SCENE_WEST_CLOCK_TOWN",
"ENTR_SCENE_NORTH_CLOCK_TOWN",
"ENTR_SCENE_SOUTH_CLOCK_TOWN",
"ENTR_SCENE_LAUNDRY_POOL",
"ENTR_SCENE_MAX"
]
def macro(num):
sceneIndex = (num >> 9) & 0x7F
spawnIndex = (num >> 4) & 0x1F
return f'ENTRANCE({entranceScenes[sceneIndex][len(enumPrfix):]}, {spawnIndex})'
if __name__ == "__main__":
import sys
if len(sys.argv) < 2:
print(f'{sys.argv[0]} nextEntrance', file=sys.stderr)
exit(1)
nextEntrance = sys.argv[1]
nextEntrance = int(nextEntrance, 16 if nextEntrance.startswith("0x") else 10)
print(macro(nextEntrance))