Archipelago/worlds/zillion/region.py

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