93 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from typing import List | |||
|  | 
 | |||
|  | from BaseClasses import ItemClassification, Region, Tutorial | |||
|  | from worlds.AutoWorld import WebWorld, World | |||
|  | from .Items import Celeste64Item, item_data_table, item_table | |||
|  | from .Locations import Celeste64Location, location_data_table, location_table | |||
|  | from .Names import ItemName | |||
|  | from .Options import Celeste64Options | |||
|  | 
 | |||
|  | 
 | |||
|  | class Celeste64WebWorld(WebWorld): | |||
|  |     theme = "ice" | |||
|  | 
 | |||
|  |     setup_en = Tutorial( | |||
|  |         tutorial_name="Start Guide", | |||
|  |         description="A guide to playing Celeste 64 in Archipelago.", | |||
|  |         language="English", | |||
|  |         file_name="guide_en.md", | |||
|  |         link="guide/en", | |||
|  |         authors=["PoryGone"] | |||
|  |     ) | |||
|  | 
 | |||
|  |     tutorials = [setup_en] | |||
|  | 
 | |||
|  | 
 | |||
|  | class Celeste64World(World): | |||
|  |     """Relive the magic of Celeste Mountain alongside Madeline in this small, heartfelt 3D platformer.
 | |||
|  |     Created in a week(ish) by the Celeste team to celebrate the game’s sixth anniversary 🍓✨"""
 | |||
|  | 
 | |||
|  |     game = "Celeste 64" | |||
|  |     web = Celeste64WebWorld() | |||
|  |     options_dataclass = Celeste64Options | |||
|  |     options: Celeste64Options | |||
|  |     location_name_to_id = location_table | |||
|  |     item_name_to_id = item_table | |||
|  | 
 | |||
|  | 
 | |||
|  |     def create_item(self, name: str) -> Celeste64Item: | |||
|  |         # Only make required amount of strawberries be Progression | |||
|  |         if getattr(self, "options", None) and name == ItemName.strawberry: | |||
|  |             classification: ItemClassification = ItemClassification.filler | |||
|  |             self.prog_strawberries = getattr(self, "prog_strawberries", 0) | |||
|  |             if self.prog_strawberries < self.options.strawberries_required.value: | |||
|  |                 classification = ItemClassification.progression_skip_balancing | |||
|  |                 self.prog_strawberries += 1 | |||
|  | 
 | |||
|  |             return Celeste64Item(name, classification, item_data_table[name].code, self.player) | |||
|  |         else: | |||
|  |             return Celeste64Item(name, item_data_table[name].type, item_data_table[name].code, self.player) | |||
|  | 
 | |||
|  |     def create_items(self) -> None: | |||
|  |         item_pool: List[Celeste64Item] = [] | |||
|  | 
 | |||
|  |         item_pool += [self.create_item(name) for name in item_data_table.keys()] | |||
|  | 
 | |||
|  |         item_pool += [self.create_item(ItemName.strawberry) for _ in range(21)] | |||
|  | 
 | |||
|  |         self.multiworld.itempool += item_pool | |||
|  | 
 | |||
|  | 
 | |||
|  |     def create_regions(self) -> None: | |||
|  |         from .Regions import region_data_table | |||
|  |         # Create regions. | |||
|  |         for region_name in region_data_table.keys(): | |||
|  |             region = Region(region_name, self.player, self.multiworld) | |||
|  |             self.multiworld.regions.append(region) | |||
|  | 
 | |||
|  |         # Create locations. | |||
|  |         for region_name, region_data in region_data_table.items(): | |||
|  |             region = self.multiworld.get_region(region_name, self.player) | |||
|  |             region.add_locations({ | |||
|  |                 location_name: location_data.address for location_name, location_data in location_data_table.items() | |||
|  |                 if location_data.region == region_name | |||
|  |             }, Celeste64Location) | |||
|  |             region.add_exits(region_data_table[region_name].connecting_regions) | |||
|  | 
 | |||
|  | 
 | |||
|  |     def get_filler_item_name(self) -> str: | |||
|  |         return ItemName.strawberry | |||
|  | 
 | |||
|  | 
 | |||
|  |     def set_rules(self) -> None: | |||
|  |         from .Rules import set_rules | |||
|  |         set_rules(self) | |||
|  | 
 | |||
|  | 
 | |||
|  |     def fill_slot_data(self): | |||
|  |         return { | |||
|  |             "death_link": self.options.death_link.value, | |||
|  |             "death_link_amnesty": self.options.death_link_amnesty.value, | |||
|  |             "strawberries_required": self.options.strawberries_required.value | |||
|  |         } |