110 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			110 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from BaseClasses import Entrance, Item, ItemClassification, Location, MultiWorld, Region, Tutorial
							 | 
						||
| 
								 | 
							
								from worlds.AutoWorld import WebWorld, World
							 | 
						||
| 
								 | 
							
								from worlds.generic.Rules import set_rule
							 | 
						||
| 
								 | 
							
								from .Options import clique_options
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								item_table = {
							 | 
						||
| 
								 | 
							
								    "The feeling of satisfaction.": 69696969,
							 | 
						||
| 
								 | 
							
								    "Button Key": 69696968,
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								location_table = {
							 | 
						||
| 
								 | 
							
								    "The Button": 69696969,
							 | 
						||
| 
								 | 
							
								    "The Desk": 69696968,
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CliqueWebWorld(WebWorld):
							 | 
						||
| 
								 | 
							
								    theme = "partyTime"
							 | 
						||
| 
								 | 
							
								    tutorials = [
							 | 
						||
| 
								 | 
							
								        Tutorial(
							 | 
						||
| 
								 | 
							
								            tutorial_name="Start Guide",
							 | 
						||
| 
								 | 
							
								            description="A guide to playing Clique.",
							 | 
						||
| 
								 | 
							
								            language="English",
							 | 
						||
| 
								 | 
							
								            file_name="guide_en.md",
							 | 
						||
| 
								 | 
							
								            link="guide/en",
							 | 
						||
| 
								 | 
							
								            authors=["Phar"]
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								    ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CliqueWorld(World):
							 | 
						||
| 
								 | 
							
								    """The greatest game ever designed. Full of exciting gameplay!"""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    game = "Clique"
							 | 
						||
| 
								 | 
							
								    topology_present = False
							 | 
						||
| 
								 | 
							
								    data_version = 1
							 | 
						||
| 
								 | 
							
								    web = CliqueWebWorld()
							 | 
						||
| 
								 | 
							
								    option_definitions = clique_options
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    location_name_to_id = location_table
							 | 
						||
| 
								 | 
							
								    item_name_to_id = item_table
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def create_item(self, name: str) -> "Item":
							 | 
						||
| 
								 | 
							
								        return Item(name, ItemClassification.progression, self.item_name_to_id[name], self.player)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def get_setting(self, name: str):
							 | 
						||
| 
								 | 
							
								        return getattr(self.multiworld, name)[self.player]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def fill_slot_data(self) -> dict:
							 | 
						||
| 
								 | 
							
								        return {option_name: self.get_setting(option_name).value for option_name in self.option_definitions}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def generate_basic(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.multiworld.itempool.append(self.create_item("The feeling of satisfaction."))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if self.multiworld.hard_mode[self.player]:
							 | 
						||
| 
								 | 
							
								            self.multiworld.itempool.append(self.create_item("Button Key"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def create_regions(self) -> None:
							 | 
						||
| 
								 | 
							
								        if self.multiworld.hard_mode[self.player]:
							 | 
						||
| 
								 | 
							
								            self.multiworld.regions += [
							 | 
						||
| 
								 | 
							
								                create_region(self.multiworld, self.player, "Menu", None, ["Entrance to THE BUTTON"]),
							 | 
						||
| 
								 | 
							
								                create_region(self.multiworld, self.player, "THE BUTTON", self.location_name_to_id)
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            self.multiworld.regions += [
							 | 
						||
| 
								 | 
							
								                create_region(self.multiworld, self.player, "Menu", None, ["Entrance to THE BUTTON"]),
							 | 
						||
| 
								 | 
							
								                create_region(self.multiworld, self.player, "THE BUTTON", {"The Button": 69696969})
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.multiworld.get_entrance("Entrance to THE BUTTON", self.player)\
							 | 
						||
| 
								 | 
							
								            .connect(self.multiworld.get_region("THE BUTTON", self.player))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def get_filler_item_name(self) -> str:
							 | 
						||
| 
								 | 
							
								        return self.multiworld.random.choice(item_table)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def set_rules(self) -> None:
							 | 
						||
| 
								 | 
							
								        if self.multiworld.hard_mode[self.player]:
							 | 
						||
| 
								 | 
							
								            set_rule(
							 | 
						||
| 
								 | 
							
								                self.multiworld.get_location("The Button", self.player),
							 | 
						||
| 
								 | 
							
								                lambda state: state.has("Button Key", self.player)
							 | 
						||
| 
								 | 
							
								            )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            self.multiworld.completion_condition[self.player] = lambda state: \
							 | 
						||
| 
								 | 
							
								                state.has("Button Key", self.player)
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            self.multiworld.completion_condition[self.player] = lambda state: \
							 | 
						||
| 
								 | 
							
								                state.has("The feeling of satisfaction.", self.player)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def create_region(world: MultiWorld, player: int, name: str, locations=None, exits=None):
							 | 
						||
| 
								 | 
							
								    region = Region(name, player, world)
							 | 
						||
| 
								 | 
							
								    if locations:
							 | 
						||
| 
								 | 
							
								        for location_name in locations.keys():
							 | 
						||
| 
								 | 
							
								            location = CliqueLocation(player, location_name, locations[location_name], region)
							 | 
						||
| 
								 | 
							
								            region.locations.append(location)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if exits:
							 | 
						||
| 
								 | 
							
								        for _exit in exits:
							 | 
						||
| 
								 | 
							
								            region.exits.append(Entrance(player, _exit, region))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return region
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CliqueItem(Item):
							 | 
						||
| 
								 | 
							
								    game = "Clique"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CliqueLocation(Location):
							 | 
						||
| 
								 | 
							
								    game: str = "Clique"
							 |