68 lines
1.9 KiB
Python
68 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
from BaseClasses import ItemClassification, Location
|
|
|
|
from . import items
|
|
|
|
if TYPE_CHECKING:
|
|
from .world import NodecamesWorld
|
|
|
|
|
|
GREEN_COUNT_PER_WORLD = [6, 9, 9, 12, 16, 16, 20, 25, 25, 30, 36, 36]
|
|
|
|
def worldName(index):
|
|
return f"{(index//3)+1}-{(index%3)+1}"
|
|
|
|
LOCATION_NAME_TO_ID = {}
|
|
LOCATION_NAME_FROM_WORLD = {}
|
|
id = 0
|
|
for w in range(len(GREEN_COUNT_PER_WORLD)):
|
|
LOCATION_NAME_FROM_WORLD[w] = []
|
|
for i in range(1, GREEN_COUNT_PER_WORLD[w]):
|
|
name = f"World {worldName(w)} word {i}"
|
|
id += 1
|
|
LOCATION_NAME_FROM_WORLD[w].append(name)
|
|
LOCATION_NAME_TO_ID[name] = id
|
|
name = f"Complete {worldName(w)}"
|
|
id += 1
|
|
LOCATION_NAME_FROM_WORLD[w].append(name)
|
|
LOCATION_NAME_TO_ID[name] = id
|
|
|
|
|
|
class NodecamesLocation(Location):
|
|
game = "Nodecames"
|
|
|
|
|
|
def create_all_locations(world: NodecamesWorld) -> None:
|
|
create_world_locations(world)
|
|
create_events(world)
|
|
|
|
|
|
def create_world_locations(world: NodecamesWorld) -> None:
|
|
overworld = world.get_region("Overworld")
|
|
|
|
for w in LOCATION_NAME_FROM_WORLD:
|
|
for l in range(len(LOCATION_NAME_FROM_WORLD[w])-1):
|
|
name = LOCATION_NAME_FROM_WORLD[w][l]
|
|
loc = NodecamesLocation(
|
|
world.player,
|
|
name,
|
|
LOCATION_NAME_TO_ID[name],
|
|
overworld,
|
|
)
|
|
overworld.locations.append(loc)
|
|
|
|
def all_completion_items(world: NodecamesWorld) -> list[str]:
|
|
return [LOCATION_NAME_FROM_WORLD[w][-1]+" item" for w in LOCATION_NAME_FROM_WORLD]
|
|
|
|
def create_events(world: NodecamesWorld) -> None:
|
|
overworld = world.get_region("Overworld")
|
|
for w in LOCATION_NAME_FROM_WORLD:
|
|
overworld.add_event(
|
|
LOCATION_NAME_FROM_WORLD[w][-1],
|
|
LOCATION_NAME_FROM_WORLD[w][-1]+" item",
|
|
location_type = NodecamesLocation,
|
|
item_type = items.NodecamesItem)
|