172 lines
6.7 KiB
Python
172 lines
6.7 KiB
Python
|
|
from .Items import CCCharlesItem, unique_item_dict, full_item_list, item_groups
|
||
|
|
from .Locations import location_table
|
||
|
|
from .Options import CCCharlesOptions
|
||
|
|
from .Rules import set_rules
|
||
|
|
from .Regions import create_regions
|
||
|
|
from BaseClasses import Tutorial, ItemClassification
|
||
|
|
from worlds.AutoWorld import World, WebWorld
|
||
|
|
|
||
|
|
|
||
|
|
class CCCharlesWeb(WebWorld):
|
||
|
|
"""
|
||
|
|
Choo-Choo Charles is a horror game.
|
||
|
|
A devil spider train from hell called Charles chases any person it finds on an island.
|
||
|
|
The goal is to gather scraps to upgrade a train to fight Charles and travel by train to find 3 eggs
|
||
|
|
to lead Charles to a brutal death and save the island.
|
||
|
|
"""
|
||
|
|
|
||
|
|
theme = "stone"
|
||
|
|
|
||
|
|
setup_en = Tutorial(
|
||
|
|
"Multiworld Setup Guide",
|
||
|
|
"A guide to setup Choo-Choo Charles for the Archipelago MultiWorld Randomizer.",
|
||
|
|
"English",
|
||
|
|
"setup_en.md",
|
||
|
|
"setup/en",
|
||
|
|
["Yaranorgoth"]
|
||
|
|
)
|
||
|
|
|
||
|
|
setup_fr = Tutorial(
|
||
|
|
"Guide d'Installation Multiworld",
|
||
|
|
"Un guide pour mettre en place Choo-Choo Charles pour le Randomiseur Multiworld Archipelago",
|
||
|
|
"Français",
|
||
|
|
"setup_fr.md",
|
||
|
|
"setup/fr",
|
||
|
|
["Yaranorgoth"]
|
||
|
|
)
|
||
|
|
|
||
|
|
tutorials = [setup_en, setup_fr]
|
||
|
|
|
||
|
|
game_info_languages = ["en", "fr"]
|
||
|
|
rich_text_options_doc = True
|
||
|
|
|
||
|
|
|
||
|
|
class CCCharlesWorld(World):
|
||
|
|
"""
|
||
|
|
An independent 3D horror game, taking place on an island.
|
||
|
|
The main gameplay consists of traveling and fighting a monster on board a train.
|
||
|
|
Upgrading the train requires leaving the train to gather resources with the threat of encountering the monster.
|
||
|
|
"""
|
||
|
|
|
||
|
|
game = "Choo-Choo Charles"
|
||
|
|
|
||
|
|
web = CCCharlesWeb()
|
||
|
|
|
||
|
|
item_name_to_id = unique_item_dict
|
||
|
|
location_name_to_id = location_table
|
||
|
|
item_name_groups = item_groups
|
||
|
|
|
||
|
|
# Options the player can set
|
||
|
|
options_dataclass = CCCharlesOptions
|
||
|
|
# Typing hints for all the options we defined
|
||
|
|
options: CCCharlesOptions
|
||
|
|
|
||
|
|
topology_present = False # Hide path to required location checks in spoiler
|
||
|
|
|
||
|
|
def create_regions(self) -> None:
|
||
|
|
create_regions(self.multiworld, self.options, self.player)
|
||
|
|
|
||
|
|
def create_item(self, name: str) -> CCCharlesItem:
|
||
|
|
item_id = unique_item_dict[name]
|
||
|
|
|
||
|
|
match name:
|
||
|
|
case "Scraps":
|
||
|
|
classification = ItemClassification.useful
|
||
|
|
case "30 Scraps Reward":
|
||
|
|
classification = ItemClassification.useful
|
||
|
|
case "25 Scraps Reward":
|
||
|
|
classification = ItemClassification.useful
|
||
|
|
case "35 Scraps Reward":
|
||
|
|
classification = ItemClassification.useful
|
||
|
|
case "40 Scraps Reward":
|
||
|
|
classification = ItemClassification.useful
|
||
|
|
case "South Mine Key":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "North Mine Key":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Mountain Ruin Key":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Barn Key":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Candice's Key":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Dead Fish":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Lockpicks":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Ancient Tablet":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Blue Box":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Page Drawing":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Journal":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Timed Dynamite":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Box of Rockets":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Breaker":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Broken Bob":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Employment Contracts":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Mob Camp Key":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Jar of Pickles":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Orange Paint Can":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "Green Paint Can":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "White Paint Can":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "Pink Paint Can":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "Grey Paint Can":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "Blue Paint Can":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "Black Paint Can":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "Lime Paint Can":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "Teal Paint Can":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "Red Paint Can":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "Purple Paint Can":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "The Boomer":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "Bob":
|
||
|
|
classification = ItemClassification.filler
|
||
|
|
case "Green Egg":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Blue Egg":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Red Egg":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Remote Explosive":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Remote Explosive x8":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Temple Key":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case "Bug Spray":
|
||
|
|
classification = ItemClassification.progression
|
||
|
|
case _: # Should not occur
|
||
|
|
raise Exception("Unexpected case met: classification cannot be set for unknown item \"" + name + "\"")
|
||
|
|
|
||
|
|
return CCCharlesItem(name, classification, item_id, self.player)
|
||
|
|
|
||
|
|
def create_items(self) -> None:
|
||
|
|
self.multiworld.itempool += [self.create_item(item) for item in full_item_list]
|
||
|
|
|
||
|
|
def set_rules(self) -> None:
|
||
|
|
set_rules(self.multiworld, self.options, self.player)
|
||
|
|
|
||
|
|
def get_filler_item_name(self) -> str:
|
||
|
|
return "Scraps"
|