* Add cccharles world to AP > The logic has been tested, the game can be completed > The logic is simple and it does not take into account options ! The documentations are a work in progress * Update documentations > Redacted French and English Setup Guides > Redacted French and English Game Pages * Handling PR#5287 remarks > Revert unexpected changes on .run\Archipelago Unittests.run.xml (base Archipelago file) > Fixed typo "querty" -> "qwerty" in fr and eng Game Pages > Adding "Game page in other languages" section to eng Game Page documentation > Improved Steam path in fr and eng Setup Guides * Handled PR remarks + fixes > Added get_filler_item_name() to remove warnings > Fixed irrelevant links for documentations > Used the Player Options page instead of the default YAML on GitHub > Reworded all locations to make them simple and clear > Split some locations that can be linked with an entrance rule > Reworked all options > Updated regions according to locations > Replaced unnecessary rules by rules on entrances * Empty Options.py Only the base options are handled yet, "work in progress" features removed. * Handled PR remark > Fixed specific UT name * Handled PR remarks > UT updated by replacing depreciated features * Add start_inventory_from_pool as option This start_inventory_from_pool option is like regular start inventory but it takes items from the pool and replaces them with fillers Co-authored-by: Scipio Wright <scipiowright@gmail.com> * Handled PR remarks > Mainly fixed editorial and minor issues without impact on UT results (still passed) * Update the guides according to releases > Updated the depreciated guides because the may to release the Mod has been changed > Removed the fixed issues from 'Known Issues' > Add the "Mod Download" section to simplify the others sections. * Handled PR remark > base_id reduced to ensure it fits to signed int (32 bits) in case of future AP improvements * Handled PR remarks > Set topology_present to False because unnecessary > Added an exception in case of unknown item instead of using filler classification > Fixed an issue that caused the "Bug Spray" to be considered as filler > Reworked the test_claire_breakers() test to ensure the lighthouse mission can only be finished if at least 4 breakers are collected * Added Choo-Choo Charles to README.md * CCCharles: Added rules to win > The victory could be accessed from sphere 1, this is now fixed by adding the following items as requirements: - Temple Key - Green Egg - Blue Egg - Red Egg --------- Co-authored-by: Scipio Wright <scipiowright@gmail.com>
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"
|