AutoWorld: basic Item handling
This commit is contained in:
@@ -6,17 +6,19 @@ def GetBeemizerItem(world, player, item):
|
||||
if world.beemizer[player] and item_name in trap_replaceable:
|
||||
if world.random.random() < world.beemizer[player] * 0.25:
|
||||
if world.random.random() < (0.5 + world.beemizer[player] * 0.1):
|
||||
return "Bee Trap" if isinstance(item, str) else ItemFactory("Bee Trap", player)
|
||||
return "Bee Trap" if isinstance(item, str) else world.create_item("Bee Trap", player)
|
||||
else:
|
||||
return "Bee" if isinstance(item, str) else ItemFactory("Bee", player)
|
||||
return "Bee" if isinstance(item, str) else world.create_item("Bee", player)
|
||||
else:
|
||||
return item
|
||||
else:
|
||||
return item
|
||||
|
||||
|
||||
def ItemFactory(items, player):
|
||||
from worlds.alttp import ALttPItem
|
||||
# should be replaced with direct world.create_item(item) call in the future
|
||||
def ItemFactory(items, player: int):
|
||||
from worlds.alttp import ALTTPWorld
|
||||
world = ALTTPWorld(None, player)
|
||||
ret = []
|
||||
singleton = False
|
||||
if isinstance(items, str):
|
||||
@@ -24,7 +26,7 @@ def ItemFactory(items, player):
|
||||
singleton = True
|
||||
for item in items:
|
||||
if item in item_table:
|
||||
ret.append(ALttPItem(item, *item_table[item], player))
|
||||
ret.append(world.create_item(item))
|
||||
else:
|
||||
raise Exception(f"Unknown item {item}")
|
||||
|
||||
@@ -211,6 +213,8 @@ item_table = {'Bow': ItemData(True, None, 0x0B, 'You have\nchosen the\narcher cl
|
||||
'Open Floodgate': ItemData(True, 'Event', None, None, None, None, None, None, None, None),
|
||||
}
|
||||
|
||||
as_dict_item_table = {name: data._asdict() for name, data in item_table.items()}
|
||||
|
||||
progression_mapping = {
|
||||
"Golden Sword": ("Progressive Sword", 4),
|
||||
"Tempered Sword": ("Progressive Sword", 3),
|
||||
@@ -268,8 +272,8 @@ for basename, substring in _simple_groups:
|
||||
|
||||
del (_simple_groups)
|
||||
|
||||
progression_items = {name for name, data in item_table.items() if type(data[2]) == int and data[0]}
|
||||
item_name_groups['Everything'] = {name for name, data in item_table.items() if type(data[2]) == int}
|
||||
progression_items = {name for name, data in item_table.items() if type(data.item_code) == int and data.advancement}
|
||||
item_name_groups['Everything'] = {name for name, data in item_table.items() if type(data.item_code) == int}
|
||||
item_name_groups['Progression Items'] = progression_items
|
||||
item_name_groups['Non Progression Items'] = item_name_groups['Everything'] - progression_items
|
||||
|
||||
|
||||
@@ -3,11 +3,15 @@ from typing import Optional
|
||||
from BaseClasses import Location, Item, CollectionState
|
||||
from ..AutoWorld import World
|
||||
from .Options import alttp_options
|
||||
from .Items import as_dict_item_table, item_name_groups, item_table
|
||||
|
||||
|
||||
class ALTTPWorld(World):
|
||||
game: str = "A Link to the Past"
|
||||
options = alttp_options
|
||||
topology_present = True
|
||||
item_name_groups = item_name_groups
|
||||
item_names = frozenset(item_table)
|
||||
|
||||
def collect(self, state: CollectionState, item: Item) -> bool:
|
||||
if item.name.startswith('Progressive '):
|
||||
@@ -66,6 +70,9 @@ class ALTTPWorld(World):
|
||||
def get_required_client_version(self) -> tuple:
|
||||
return max((0, 1, 4), super(ALTTPWorld, self).get_required_client_version())
|
||||
|
||||
def create_item(self, name: str) -> Item:
|
||||
return ALttPItem(name, self.player, **as_dict_item_table[name])
|
||||
|
||||
|
||||
class ALttPLocation(Location):
|
||||
game: str = "A Link to the Past"
|
||||
@@ -80,16 +87,16 @@ class ALttPLocation(Location):
|
||||
|
||||
|
||||
class ALttPItem(Item):
|
||||
|
||||
game: str = "A Link to the Past"
|
||||
|
||||
def __init__(self, name='', advancement=False, type=None, code=None, pedestal_hint=None, pedestal_credit=None, sickkid_credit=None, zora_credit=None, witch_credit=None, fluteboy_credit=None, hint_text=None, player=None):
|
||||
super(ALttPItem, self).__init__(name, advancement, code, player)
|
||||
def __init__(self, name, player, advancement=False, type=None, item_code=None, pedestal_hint=None, pedestal_credit=None,
|
||||
sick_kid_credit=None, zora_credit=None, witch_credit=None, flute_boy_credit=None, hint_text=None):
|
||||
super(ALttPItem, self).__init__(name, advancement, item_code, player)
|
||||
self.type = type
|
||||
self._pedestal_hint_text = pedestal_hint
|
||||
self.pedestal_credit_text = pedestal_credit
|
||||
self.sickkid_credit_text = sickkid_credit
|
||||
self.sickkid_credit_text = sick_kid_credit
|
||||
self.zora_credit_text = zora_credit
|
||||
self.magicshop_credit_text = witch_credit
|
||||
self.fluteboy_credit_text = fluteboy_credit
|
||||
self.fluteboy_credit_text = flute_boy_credit
|
||||
self._hint_text = hint_text
|
||||
Reference in New Issue
Block a user