99 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			99 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from typing import Optional, Dict, Tuple | ||
|  | 
 | ||
|  | from BaseClasses import Item, ItemClassification as ItemClass | ||
|  | 
 | ||
|  | from .Constants import * | ||
|  | 
 | ||
|  | 
 | ||
|  | class SavingPrincessItem(Item): | ||
|  |     game: str = GAME_NAME | ||
|  | 
 | ||
|  | 
 | ||
|  | class ItemData: | ||
|  |     item_class: ItemClass | ||
|  |     code: Optional[int] | ||
|  |     count: int  # Number of copies for the item that will be made of class item_class | ||
|  |     count_extra: int  # Number of extra copies for the item that will be made as useful | ||
|  | 
 | ||
|  |     def __init__(self, item_class: ItemClass, code: Optional[int] = None, count: int = 1, count_extra: int = 0): | ||
|  |         self.item_class = item_class | ||
|  | 
 | ||
|  |         self.code = code | ||
|  |         if code is not None: | ||
|  |             self.code += BASE_ID | ||
|  | 
 | ||
|  |         # if this is filler, a trap or an event, ignore the count | ||
|  |         if self.item_class == ItemClass.filler or self.item_class == ItemClass.trap or code is None: | ||
|  |             self.count = 0 | ||
|  |             self.count_extra = 0 | ||
|  |         else: | ||
|  |             self.count = count | ||
|  |             self.count_extra = count_extra | ||
|  | 
 | ||
|  |     def create_item(self, player: int): | ||
|  |         return SavingPrincessItem(item_data_names[self], self.item_class, self.code, player) | ||
|  | 
 | ||
|  | 
 | ||
|  | item_dict_weapons: Dict[str, ItemData] = { | ||
|  |     ITEM_WEAPON_CHARGE: ItemData(ItemClass.progression, 0), | ||
|  |     ITEM_WEAPON_FIRE: ItemData(ItemClass.progression, 1), | ||
|  |     ITEM_WEAPON_ICE: ItemData(ItemClass.progression, 2), | ||
|  |     ITEM_WEAPON_VOLT: ItemData(ItemClass.progression, 3), | ||
|  | } | ||
|  | 
 | ||
|  | item_dict_upgrades: Dict[str, ItemData] = { | ||
|  |     ITEM_MAX_HEALTH: ItemData(ItemClass.progression, 4, 2, 4), | ||
|  |     ITEM_MAX_AMMO: ItemData(ItemClass.progression, 5, 2, 4), | ||
|  |     ITEM_RELOAD_SPEED: ItemData(ItemClass.progression, 6, 4, 2), | ||
|  |     ITEM_SPECIAL_AMMO: ItemData(ItemClass.useful, 7), | ||
|  | } | ||
|  | 
 | ||
|  | item_dict_base: Dict[str, ItemData] = { | ||
|  |     **item_dict_weapons, | ||
|  |     **item_dict_upgrades, | ||
|  |     ITEM_JACKET: ItemData(ItemClass.useful, 8), | ||
|  | } | ||
|  | 
 | ||
|  | item_dict_keys: Dict[str, ItemData] = { | ||
|  |     EP_ITEM_GUARD_GONE: ItemData(ItemClass.progression, 9), | ||
|  |     EP_ITEM_CLIFF_GONE: ItemData(ItemClass.progression, 10), | ||
|  |     EP_ITEM_ACE_GONE: ItemData(ItemClass.progression, 11), | ||
|  |     EP_ITEM_SNAKE_GONE: ItemData(ItemClass.progression, 12), | ||
|  | } | ||
|  | 
 | ||
|  | item_dict_expanded: Dict[str, ItemData] = { | ||
|  |     **item_dict_base, | ||
|  |     **item_dict_keys, | ||
|  |     EP_ITEM_POWER_ON: ItemData(ItemClass.progression, 13), | ||
|  | } | ||
|  | 
 | ||
|  | item_dict_filler: Dict[str, ItemData] = { | ||
|  |     FILLER_ITEM_HEAL: ItemData(ItemClass.filler, 14), | ||
|  |     FILLER_ITEM_QUICK_FIRE: ItemData(ItemClass.filler, 15), | ||
|  |     FILLER_ITEM_ACTIVE_CAMO: ItemData(ItemClass.filler, 16), | ||
|  | } | ||
|  | 
 | ||
|  | item_dict_traps: Dict[str, ItemData] = { | ||
|  |     TRAP_ITEM_ICE: ItemData(ItemClass.trap, 17), | ||
|  |     TRAP_ITEM_SHAKES: ItemData(ItemClass.trap, 18), | ||
|  |     TRAP_ITEM_NINJA: ItemData(ItemClass.trap, 19), | ||
|  | } | ||
|  | 
 | ||
|  | item_dict_events: Dict[str, ItemData] = { | ||
|  |     EVENT_ITEM_GUARD_GONE: ItemData(ItemClass.progression), | ||
|  |     EVENT_ITEM_CLIFF_GONE: ItemData(ItemClass.progression), | ||
|  |     EVENT_ITEM_ACE_GONE: ItemData(ItemClass.progression), | ||
|  |     EVENT_ITEM_SNAKE_GONE: ItemData(ItemClass.progression), | ||
|  |     EVENT_ITEM_POWER_ON: ItemData(ItemClass.progression), | ||
|  |     EVENT_ITEM_VICTORY: ItemData(ItemClass.progression), | ||
|  | } | ||
|  | 
 | ||
|  | item_dict: Dict[str, ItemData] = { | ||
|  |     **item_dict_expanded, | ||
|  |     **item_dict_filler, | ||
|  |     **item_dict_traps, | ||
|  |     **item_dict_events, | ||
|  | } | ||
|  | 
 | ||
|  | item_data_names: Dict[ItemData, str] = {value: key for key, value in item_dict.items()} |