Choo-Choo Charles: implement new game and documentations (#5287)
* 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>
This commit is contained in:
171
worlds/cccharles/__init__.py
Normal file
171
worlds/cccharles/__init__.py
Normal file
@@ -0,0 +1,171 @@
|
||||
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"
|
||||
Reference in New Issue
Block a user