63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
from BaseClasses import Item, Tutorial
|
|
from worlds.AutoWorld import WebWorld, World
|
|
from typing import Dict, Any
|
|
from . import events, items, locations, regions, rules
|
|
from .options import NoitaOptions
|
|
|
|
|
|
class NoitaWeb(WebWorld):
|
|
tutorials = [Tutorial(
|
|
"Multiworld Setup Guide",
|
|
"A guide to setting up the Noita integration for Archipelago multiworld games.",
|
|
"English",
|
|
"setup_en.md",
|
|
"setup/en",
|
|
["Heinermann", "ScipioWright", "DaftBrit"]
|
|
)]
|
|
theme = "partyTime"
|
|
bug_report_page = "https://github.com/DaftBrit/NoitaArchipelago/issues"
|
|
|
|
|
|
# Keeping World slim so that it's easier to comprehend
|
|
class NoitaWorld(World):
|
|
"""
|
|
Noita is a magical action roguelite set in a world where every pixel is physically simulated. Fight, explore, melt,
|
|
burn, freeze, and evaporate your way through the procedurally generated world using wands you've created yourself.
|
|
"""
|
|
|
|
game = "Noita"
|
|
options: NoitaOptions
|
|
options_dataclass = NoitaOptions
|
|
|
|
item_name_to_id = items.item_name_to_id
|
|
location_name_to_id = locations.location_name_to_id
|
|
|
|
item_name_groups = items.item_name_groups
|
|
location_name_groups = locations.location_name_groups
|
|
|
|
web = NoitaWeb()
|
|
|
|
def generate_early(self) -> None:
|
|
if not self.multiworld.get_player_name(self.player).isascii():
|
|
raise Exception("Noita yaml's slot name has invalid character(s).")
|
|
|
|
# Returned items will be sent over to the client
|
|
def fill_slot_data(self) -> Dict[str, Any]:
|
|
return self.options.as_dict("death_link", "victory_condition", "path_option", "hidden_chests",
|
|
"pedestal_checks", "orbs_as_checks", "bosses_as_checks", "extra_orbs", "shop_price")
|
|
|
|
def create_regions(self) -> None:
|
|
regions.create_all_regions_and_connections(self)
|
|
|
|
def create_item(self, name: str) -> Item:
|
|
return items.create_item(self.player, name)
|
|
|
|
def create_items(self) -> None:
|
|
items.create_all_items(self)
|
|
|
|
def set_rules(self) -> None:
|
|
rules.create_all_rules(self)
|
|
|
|
def get_filler_item_name(self) -> str:
|
|
return self.random.choice(items.filler_items)
|