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
							 |