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
|