mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
Noita: Update to use new Options API (#2370)
Reworking the options to make it work with the new options API. Also reworked stuff in several spots to use world: NoitaWorld instead of multiworld: MultiWorld
This commit is contained in:
224
worlds/noita/locations.py
Normal file
224
worlds/noita/locations.py
Normal file
@@ -0,0 +1,224 @@
|
||||
# Locations are specific points that you would obtain an item at.
|
||||
from enum import IntEnum
|
||||
from typing import Dict, NamedTuple, Optional, Set
|
||||
|
||||
from BaseClasses import Location
|
||||
|
||||
|
||||
class NoitaLocation(Location):
|
||||
game: str = "Noita"
|
||||
|
||||
|
||||
class LocationData(NamedTuple):
|
||||
id: int
|
||||
flag: int = 0
|
||||
ltype: Optional[str] = "shop"
|
||||
|
||||
|
||||
class LocationFlag(IntEnum):
|
||||
none = 0
|
||||
main_path = 1
|
||||
side_path = 2
|
||||
main_world = 3
|
||||
parallel_worlds = 4
|
||||
|
||||
|
||||
# Mapping of items in each region.
|
||||
# Only the first Hidden Chest and Pedestal are mapped here, the others are created in Regions.
|
||||
# ltype key: "chest" = Hidden Chests, "pedestal" = Pedestals, "boss" = Boss, "orb" = Orb.
|
||||
# 110000-110649
|
||||
location_region_mapping: Dict[str, Dict[str, LocationData]] = {
|
||||
"Coal Pits Holy Mountain": {
|
||||
"Coal Pits Holy Mountain Shop Item 1": LocationData(110000),
|
||||
"Coal Pits Holy Mountain Shop Item 2": LocationData(110001),
|
||||
"Coal Pits Holy Mountain Shop Item 3": LocationData(110002),
|
||||
"Coal Pits Holy Mountain Shop Item 4": LocationData(110003),
|
||||
"Coal Pits Holy Mountain Shop Item 5": LocationData(110004),
|
||||
"Coal Pits Holy Mountain Spell Refresh": LocationData(110005),
|
||||
},
|
||||
"Snowy Depths Holy Mountain": {
|
||||
"Snowy Depths Holy Mountain Shop Item 1": LocationData(110006),
|
||||
"Snowy Depths Holy Mountain Shop Item 2": LocationData(110007),
|
||||
"Snowy Depths Holy Mountain Shop Item 3": LocationData(110008),
|
||||
"Snowy Depths Holy Mountain Shop Item 4": LocationData(110009),
|
||||
"Snowy Depths Holy Mountain Shop Item 5": LocationData(110010),
|
||||
"Snowy Depths Holy Mountain Spell Refresh": LocationData(110011),
|
||||
},
|
||||
"Hiisi Base Holy Mountain": {
|
||||
"Hiisi Base Holy Mountain Shop Item 1": LocationData(110012),
|
||||
"Hiisi Base Holy Mountain Shop Item 2": LocationData(110013),
|
||||
"Hiisi Base Holy Mountain Shop Item 3": LocationData(110014),
|
||||
"Hiisi Base Holy Mountain Shop Item 4": LocationData(110015),
|
||||
"Hiisi Base Holy Mountain Shop Item 5": LocationData(110016),
|
||||
"Hiisi Base Holy Mountain Spell Refresh": LocationData(110017),
|
||||
},
|
||||
"Underground Jungle Holy Mountain": {
|
||||
"Underground Jungle Holy Mountain Shop Item 1": LocationData(110018),
|
||||
"Underground Jungle Holy Mountain Shop Item 2": LocationData(110019),
|
||||
"Underground Jungle Holy Mountain Shop Item 3": LocationData(110020),
|
||||
"Underground Jungle Holy Mountain Shop Item 4": LocationData(110021),
|
||||
"Underground Jungle Holy Mountain Shop Item 5": LocationData(110022),
|
||||
"Underground Jungle Holy Mountain Spell Refresh": LocationData(110023),
|
||||
},
|
||||
"Vault Holy Mountain": {
|
||||
"Vault Holy Mountain Shop Item 1": LocationData(110024),
|
||||
"Vault Holy Mountain Shop Item 2": LocationData(110025),
|
||||
"Vault Holy Mountain Shop Item 3": LocationData(110026),
|
||||
"Vault Holy Mountain Shop Item 4": LocationData(110027),
|
||||
"Vault Holy Mountain Shop Item 5": LocationData(110028),
|
||||
"Vault Holy Mountain Spell Refresh": LocationData(110029),
|
||||
},
|
||||
"Temple of the Art Holy Mountain": {
|
||||
"Temple of the Art Holy Mountain Shop Item 1": LocationData(110030),
|
||||
"Temple of the Art Holy Mountain Shop Item 2": LocationData(110031),
|
||||
"Temple of the Art Holy Mountain Shop Item 3": LocationData(110032),
|
||||
"Temple of the Art Holy Mountain Shop Item 4": LocationData(110033),
|
||||
"Temple of the Art Holy Mountain Shop Item 5": LocationData(110034),
|
||||
"Temple of the Art Holy Mountain Spell Refresh": LocationData(110035),
|
||||
},
|
||||
"Laboratory Holy Mountain": {
|
||||
"Laboratory Holy Mountain Shop Item 1": LocationData(110036),
|
||||
"Laboratory Holy Mountain Shop Item 2": LocationData(110037),
|
||||
"Laboratory Holy Mountain Shop Item 3": LocationData(110038),
|
||||
"Laboratory Holy Mountain Shop Item 4": LocationData(110039),
|
||||
"Laboratory Holy Mountain Shop Item 5": LocationData(110040),
|
||||
"Laboratory Holy Mountain Spell Refresh": LocationData(110041),
|
||||
},
|
||||
"Secret Shop": {
|
||||
"Secret Shop Item 1": LocationData(110042),
|
||||
"Secret Shop Item 2": LocationData(110043),
|
||||
"Secret Shop Item 3": LocationData(110044),
|
||||
"Secret Shop Item 4": LocationData(110045),
|
||||
},
|
||||
"Floating Island": {
|
||||
"Floating Island Orb": LocationData(110658, LocationFlag.main_path, "orb"),
|
||||
},
|
||||
"Pyramid": {
|
||||
"Kolmisilmän Koipi": LocationData(110649, LocationFlag.main_world, "boss"),
|
||||
"Pyramid Orb": LocationData(110659, LocationFlag.main_world, "orb"),
|
||||
"Sandcave Orb": LocationData(110662, LocationFlag.main_world, "orb"),
|
||||
},
|
||||
"Overgrown Cavern": {
|
||||
"Overgrown Cavern Chest": LocationData(110526, LocationFlag.main_world, "chest"),
|
||||
"Overgrown Cavern Pedestal": LocationData(110546, LocationFlag.main_world, "pedestal"),
|
||||
},
|
||||
"Lake": {
|
||||
"Syväolento": LocationData(110651, LocationFlag.main_world, "boss"),
|
||||
},
|
||||
"Frozen Vault": {
|
||||
"Frozen Vault Orb": LocationData(110660, LocationFlag.main_world, "orb"),
|
||||
"Frozen Vault Chest": LocationData(110566, LocationFlag.main_world, "chest"),
|
||||
"Frozen Vault Pedestal": LocationData(110586, LocationFlag.main_world, "pedestal"),
|
||||
},
|
||||
"Mines": {
|
||||
"Mines Chest": LocationData(110046, LocationFlag.main_path, "chest"),
|
||||
"Mines Pedestal": LocationData(110066, LocationFlag.main_path, "pedestal"),
|
||||
},
|
||||
# Collapsed Mines is a very small area, combining it with the Mines. Leaving this here in case we change our minds.
|
||||
# "Collapsed Mines": {
|
||||
# "Collapsed Mines Chest": LocationData(110086, LocationFlag.main_path, "chest"),
|
||||
# "Collapsed Mines Pedestal": LocationData(110106, LocationFlag.main_path, "pedestal"),
|
||||
# },
|
||||
"Ancient Laboratory": {
|
||||
"Ylialkemisti": LocationData(110656, LocationFlag.side_path, "boss"),
|
||||
},
|
||||
"Abyss Orb Room": {
|
||||
"Sauvojen Tuntija": LocationData(110650, LocationFlag.side_path, "boss"),
|
||||
"Abyss Orb": LocationData(110665, LocationFlag.main_path, "orb"),
|
||||
},
|
||||
"Below Lava Lake": {
|
||||
"Lava Lake Orb": LocationData(110661, LocationFlag.side_path, "orb"),
|
||||
},
|
||||
"Coal Pits": {
|
||||
"Coal Pits Chest": LocationData(110126, LocationFlag.main_path, "chest"),
|
||||
"Coal Pits Pedestal": LocationData(110146, LocationFlag.main_path, "pedestal"),
|
||||
},
|
||||
"Fungal Caverns": {
|
||||
"Fungal Caverns Chest": LocationData(110166, LocationFlag.side_path, "chest"),
|
||||
"Fungal Caverns Pedestal": LocationData(110186, LocationFlag.side_path, "pedestal"),
|
||||
},
|
||||
"Snowy Depths": {
|
||||
"Snowy Depths Chest": LocationData(110206, LocationFlag.main_path, "chest"),
|
||||
"Snowy Depths Pedestal": LocationData(110226, LocationFlag.main_path, "pedestal"),
|
||||
},
|
||||
"Magical Temple": {
|
||||
"Magical Temple Orb": LocationData(110663, LocationFlag.side_path, "orb"),
|
||||
},
|
||||
"Hiisi Base": {
|
||||
"Hiisi Base Chest": LocationData(110246, LocationFlag.main_path, "chest"),
|
||||
"Hiisi Base Pedestal": LocationData(110266, LocationFlag.main_path, "pedestal"),
|
||||
},
|
||||
"Underground Jungle": {
|
||||
"Suomuhauki": LocationData(110648, LocationFlag.main_path, "boss"),
|
||||
"Underground Jungle Chest": LocationData(110286, LocationFlag.main_path, "chest"),
|
||||
"Underground Jungle Pedestal": LocationData(110306, LocationFlag.main_path, "pedestal"),
|
||||
},
|
||||
"Lukki Lair": {
|
||||
"Lukki Lair Orb": LocationData(110664, LocationFlag.side_path, "orb"),
|
||||
"Lukki Lair Chest": LocationData(110326, LocationFlag.side_path, "chest"),
|
||||
"Lukki Lair Pedestal": LocationData(110346, LocationFlag.side_path, "pedestal"),
|
||||
},
|
||||
"The Vault": {
|
||||
"The Vault Chest": LocationData(110366, LocationFlag.main_path, "chest"),
|
||||
"The Vault Pedestal": LocationData(110386, LocationFlag.main_path, "pedestal"),
|
||||
},
|
||||
"Temple of the Art": {
|
||||
"Gate Guardian": LocationData(110652, LocationFlag.main_path, "boss"),
|
||||
"Temple of the Art Chest": LocationData(110406, LocationFlag.main_path, "chest"),
|
||||
"Temple of the Art Pedestal": LocationData(110426, LocationFlag.main_path, "pedestal"),
|
||||
},
|
||||
"The Tower": {
|
||||
"The Tower Chest": LocationData(110606, LocationFlag.main_world, "chest"),
|
||||
"The Tower Pedestal": LocationData(110626, LocationFlag.main_world, "pedestal"),
|
||||
},
|
||||
"Wizards' Den": {
|
||||
"Mestarien Mestari": LocationData(110655, LocationFlag.main_world, "boss"),
|
||||
"Wizards' Den Orb": LocationData(110668, LocationFlag.main_world, "orb"),
|
||||
"Wizards' Den Chest": LocationData(110446, LocationFlag.main_world, "chest"),
|
||||
"Wizards' Den Pedestal": LocationData(110466, LocationFlag.main_world, "pedestal"),
|
||||
},
|
||||
"Powerplant": {
|
||||
"Kolmisilmän silmä": LocationData(110657, LocationFlag.main_world, "boss"),
|
||||
"Power Plant Chest": LocationData(110486, LocationFlag.main_world, "chest"),
|
||||
"Power Plant Pedestal": LocationData(110506, LocationFlag.main_world, "pedestal"),
|
||||
},
|
||||
"Snow Chasm": {
|
||||
"Unohdettu": LocationData(110653, LocationFlag.main_world, "boss"),
|
||||
"Snow Chasm Orb": LocationData(110667, LocationFlag.main_world, "orb"),
|
||||
},
|
||||
"Deep Underground": {
|
||||
"Limatoukka": LocationData(110647, LocationFlag.main_world, "boss"),
|
||||
},
|
||||
"The Laboratory": {
|
||||
"Kolmisilmä": LocationData(110646, LocationFlag.main_path, "boss"),
|
||||
},
|
||||
"Friend Cave": {
|
||||
"Toveri": LocationData(110654, LocationFlag.main_world, "boss"),
|
||||
},
|
||||
"The Work (Hell)": {
|
||||
"The Work (Hell) Orb": LocationData(110666, LocationFlag.main_world, "orb"),
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def make_location_range(location_name: str, base_id: int, amt: int) -> Dict[str, int]:
|
||||
if amt == 1:
|
||||
return {location_name: base_id}
|
||||
return {f"{location_name} {i+1}": base_id + i for i in range(amt)}
|
||||
|
||||
|
||||
location_name_groups: Dict[str, Set[str]] = {"shop": set(), "orb": set(), "boss": set(), "chest": set(),
|
||||
"pedestal": set()}
|
||||
location_name_to_id: Dict[str, int] = {}
|
||||
|
||||
|
||||
for location_group in location_region_mapping.values():
|
||||
for locname, locinfo in location_group.items():
|
||||
# Iterating the hidden chest and pedestal locations here to avoid clutter above
|
||||
amount = 20 if locinfo.ltype in ["chest", "pedestal"] else 1
|
||||
entries = make_location_range(locname, locinfo.id, amount)
|
||||
|
||||
location_name_to_id.update(entries)
|
||||
location_name_groups[locinfo.ltype].update(entries.keys())
|
||||
|
||||
shop_locations = {name for name in location_name_to_id.keys() if "Shop Item" in name}
|
||||
Reference in New Issue
Block a user