 d46e68cb5f
			
		
	
	d46e68cb5f
	
	
	
		
			
			Co-authored-by: Anthony Demarcy <anthony.demarcy@lumiplan.com> Co-authored-by: Phar <zach@alliware.com>
		
			
				
	
	
		
			54 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from typing import Dict, Optional
 | |
| 
 | |
| from BaseClasses import Location
 | |
| from .Regions import LandstalkerRegion
 | |
| from .data.item_source import ITEM_SOURCES_JSON
 | |
| 
 | |
| BASE_LOCATION_ID = 4000
 | |
| BASE_GROUND_LOCATION_ID = BASE_LOCATION_ID + 256
 | |
| BASE_SHOP_LOCATION_ID = BASE_GROUND_LOCATION_ID + 30
 | |
| BASE_REWARD_LOCATION_ID = BASE_SHOP_LOCATION_ID + 50
 | |
| 
 | |
| 
 | |
| class LandstalkerLocation(Location):
 | |
|     game: str = "Landstalker - The Treasures of King Nole"
 | |
|     type_string: str
 | |
|     price: int = 0
 | |
| 
 | |
|     def __init__(self, player: int, name: str, location_id: Optional[int], region: LandstalkerRegion, type_string: str):
 | |
|         super().__init__(player, name, location_id, region)
 | |
|         self.type_string = type_string
 | |
| 
 | |
| 
 | |
| def create_locations(player: int, regions_table: Dict[str, LandstalkerRegion], name_to_id_table: Dict[str, int]):
 | |
|     # Create real locations from the data inside the corresponding JSON file
 | |
|     for data in ITEM_SOURCES_JSON:
 | |
|         region_id = data["nodeId"]
 | |
|         region = regions_table[region_id]
 | |
|         new_location = LandstalkerLocation(player, data["name"], name_to_id_table[data["name"]], region, data["type"])
 | |
|         region.locations.append(new_location)
 | |
| 
 | |
|     # Create a specific end location that will contain a fake win-condition item
 | |
|     end_location = LandstalkerLocation(player, "End", None, regions_table["end"], "reward")
 | |
|     regions_table["end"].locations.append(end_location)
 | |
| 
 | |
| 
 | |
| def build_location_name_to_id_table():
 | |
|     location_name_to_id_table = {}
 | |
| 
 | |
|     for data in ITEM_SOURCES_JSON:
 | |
|         if data["type"] == "chest":
 | |
|             location_id = BASE_LOCATION_ID + int(data["chestId"])
 | |
|         elif data["type"] == "ground":
 | |
|             location_id = BASE_GROUND_LOCATION_ID + int(data["groundItemId"])
 | |
|         elif data["type"] == "shop":
 | |
|             location_id = BASE_SHOP_LOCATION_ID + int(data["shopItemId"])
 | |
|         else:  # if data["type"] == "reward":
 | |
|             location_id = BASE_REWARD_LOCATION_ID + int(data["rewardId"])
 | |
|         location_name_to_id_table[data["name"]] = location_id
 | |
| 
 | |
|     # Win condition location ID
 | |
|     location_name_to_id_table["Gola"] = BASE_REWARD_LOCATION_ID + 10
 | |
| 
 | |
|     return location_name_to_id_table
 |