from typing import Optional from BaseClasses import MultiWorld, Region, 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, hint: str, player: int, multiworld: MultiWorld) -> None: super().__init__(name, player, multiworld, hint) 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