2021-07-12 13:11:48 +00:00
|
|
|
from BaseClasses import Item, CollectionState
|
|
|
|
from .SubClasses import ALttPItem
|
2021-06-11 12:22:44 +00:00
|
|
|
from ..AutoWorld import World
|
2021-07-04 14:18:21 +00:00
|
|
|
from .Options import alttp_options
|
2021-07-12 11:54:47 +00:00
|
|
|
from .Items import as_dict_item_table, item_name_groups, item_table
|
2021-07-12 13:11:48 +00:00
|
|
|
from .Regions import lookup_name_to_id
|
2021-07-12 11:54:47 +00:00
|
|
|
|
2020-10-24 03:38:56 +00:00
|
|
|
|
2021-06-11 12:22:44 +00:00
|
|
|
class ALTTPWorld(World):
|
|
|
|
game: str = "A Link to the Past"
|
2021-07-04 14:18:21 +00:00
|
|
|
options = alttp_options
|
2021-07-08 09:07:41 +00:00
|
|
|
topology_present = True
|
2021-07-12 11:54:47 +00:00
|
|
|
item_name_groups = item_name_groups
|
|
|
|
item_names = frozenset(item_table)
|
2021-07-12 13:11:48 +00:00
|
|
|
location_names = frozenset(lookup_name_to_id)
|
2021-07-08 09:07:41 +00:00
|
|
|
|
2021-07-04 13:47:11 +00:00
|
|
|
def collect(self, state: CollectionState, item: Item) -> bool:
|
|
|
|
if item.name.startswith('Progressive '):
|
|
|
|
if 'Sword' in item.name:
|
|
|
|
if state.has('Golden Sword', item.player):
|
|
|
|
pass
|
|
|
|
elif state.has('Tempered Sword', item.player) and self.world.difficulty_requirements[
|
|
|
|
item.player].progressive_sword_limit >= 4:
|
|
|
|
state.prog_items['Golden Sword', item.player] += 1
|
|
|
|
return True
|
|
|
|
elif state.has('Master Sword', item.player) and self.world.difficulty_requirements[
|
|
|
|
item.player].progressive_sword_limit >= 3:
|
|
|
|
state.prog_items['Tempered Sword', item.player] += 1
|
|
|
|
return True
|
|
|
|
elif state.has('Fighter Sword', item.player) and self.world.difficulty_requirements[item.player].progressive_sword_limit >= 2:
|
|
|
|
state.prog_items['Master Sword', item.player] += 1
|
|
|
|
return True
|
|
|
|
elif self.world.difficulty_requirements[item.player].progressive_sword_limit >= 1:
|
|
|
|
state.prog_items['Fighter Sword', item.player] += 1
|
|
|
|
return True
|
|
|
|
elif 'Glove' in item.name:
|
|
|
|
if state.has('Titans Mitts', item.player):
|
|
|
|
pass
|
|
|
|
elif state.has('Power Glove', item.player):
|
|
|
|
state.prog_items['Titans Mitts', item.player] += 1
|
|
|
|
return True
|
|
|
|
else:
|
|
|
|
state.prog_items['Power Glove', item.player] += 1
|
|
|
|
return True
|
|
|
|
elif 'Shield' in item.name:
|
|
|
|
if state.has('Mirror Shield', item.player):
|
|
|
|
pass
|
|
|
|
elif state.has('Red Shield', item.player) and self.world.difficulty_requirements[item.player].progressive_shield_limit >= 3:
|
|
|
|
state.prog_items['Mirror Shield', item.player] += 1
|
|
|
|
return True
|
|
|
|
elif state.has('Blue Shield', item.player) and self.world.difficulty_requirements[item.player].progressive_shield_limit >= 2:
|
|
|
|
state.prog_items['Red Shield', item.player] += 1
|
|
|
|
return True
|
|
|
|
elif self.world.difficulty_requirements[item.player].progressive_shield_limit >= 1:
|
|
|
|
state.prog_items['Blue Shield', item.player] += 1
|
|
|
|
return True
|
|
|
|
elif 'Bow' in item.name:
|
|
|
|
if state.has('Silver', item.player):
|
|
|
|
pass
|
|
|
|
elif state.has('Bow', item.player) and self.world.difficulty_requirements[item.player].progressive_bow_limit >= 2:
|
|
|
|
state.prog_items['Silver Bow', item.player] += 1
|
|
|
|
return True
|
|
|
|
elif self.world.difficulty_requirements[item.player].progressive_bow_limit >= 1:
|
|
|
|
state.prog_items['Bow', item.player] += 1
|
|
|
|
return True
|
|
|
|
elif item.advancement or item.smallkey or item.bigkey:
|
|
|
|
state.prog_items[item.name, item.player] += 1
|
|
|
|
return True
|
|
|
|
return False
|
2020-10-24 03:38:56 +00:00
|
|
|
|
2021-07-10 05:37:56 +00:00
|
|
|
def get_required_client_version(self) -> tuple:
|
|
|
|
return max((0, 1, 4), super(ALTTPWorld, self).get_required_client_version())
|
|
|
|
|
2021-07-12 11:54:47 +00:00
|
|
|
def create_item(self, name: str) -> Item:
|
|
|
|
return ALttPItem(name, self.player, **as_dict_item_table[name])
|
|
|
|
|
2020-10-24 03:38:56 +00:00
|
|
|
|