 db30a0116e
			
		
	
	db30a0116e
	
	
	
		
			
			Co-authored-by: chandler05 <66492208+chandler05@users.noreply.github.com> Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com> Co-authored-by: Zach Parks <zach@alliware.com>
		
			
				
	
	
		
			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
 | ||
|         }
 |