51 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from typing import Optional | ||
|  | from BaseClasses import MultiWorld, Region, RegionType, Location, Item, CollectionState | ||
|  | from zilliandomizer.logic_components.regions import Region as ZzRegion | ||
|  | from zilliandomizer.logic_components.locations import Location as ZzLocation | ||
|  | from zilliandomizer.logic_components.items import RESCUE | ||
|  | 
 | ||
|  | from .id_maps import loc_name_to_id | ||
|  | from .item import ZillionItem | ||
|  | 
 | ||
|  | 
 | ||
|  | class ZillionRegion(Region): | ||
|  |     zz_r: ZzRegion | ||
|  | 
 | ||
|  |     def __init__(self, | ||
|  |                  zz_r: ZzRegion, | ||
|  |                  name: str, | ||
|  |                  type_: RegionType, | ||
|  |                  hint: str, | ||
|  |                  player: int, | ||
|  |                  world: Optional[MultiWorld] = None) -> None: | ||
|  |         super().__init__(name, type_, hint, player, world) | ||
|  |         self.zz_r = zz_r | ||
|  | 
 | ||
|  | 
 | ||
|  | class ZillionLocation(Location): | ||
|  |     zz_loc: ZzLocation | ||
|  |     game: str = "Zillion" | ||
|  | 
 | ||
|  |     def __init__(self, | ||
|  |                  zz_loc: ZzLocation, | ||
|  |                  player: int, | ||
|  |                  name: str, | ||
|  |                  parent: Optional[Region] = None) -> None: | ||
|  |         loc_id = loc_name_to_id[name] | ||
|  |         super().__init__(player, name, loc_id, parent) | ||
|  |         self.zz_loc = zz_loc | ||
|  | 
 | ||
|  |     # override | ||
|  |     def can_fill(self, state: CollectionState, item: Item, check_access: bool = True) -> bool: | ||
|  |         saved_gun_req = -1 | ||
|  |         if isinstance(item, ZillionItem) \ | ||
|  |                 and item.zz_item.code == RESCUE \ | ||
|  |                 and self.player == item.player: | ||
|  |             # RESCUE removes the gun requirement from a location. | ||
|  |             saved_gun_req = self.zz_loc.req.gun | ||
|  |             self.zz_loc.req.gun = 0 | ||
|  |         super_result = super().can_fill(state, item, check_access) | ||
|  |         if saved_gun_req != -1: | ||
|  |             self.zz_loc.req.gun = saved_gun_req | ||
|  |         return super_result |