Move Progressive Items to AutoWorld
This commit is contained in:
parent
c669bc3e7f
commit
2530d28c9d
101
BaseClasses.py
101
BaseClasses.py
|
@ -241,53 +241,12 @@ class MultiWorld():
|
||||||
def get_all_state(self, keys=False) -> CollectionState:
|
def get_all_state(self, keys=False) -> CollectionState:
|
||||||
ret = CollectionState(self)
|
ret = CollectionState(self)
|
||||||
|
|
||||||
def soft_collect(item):
|
|
||||||
if item.game == "A Link to the Past" and item.name.startswith('Progressive '):
|
|
||||||
# ALttP items
|
|
||||||
if 'Sword' in item.name:
|
|
||||||
if ret.has('Golden Sword', item.player):
|
|
||||||
pass
|
|
||||||
elif ret.has('Tempered Sword', item.player) and self.difficulty_requirements[
|
|
||||||
item.player].progressive_sword_limit >= 4:
|
|
||||||
ret.prog_items['Golden Sword', item.player] += 1
|
|
||||||
elif ret.has('Master Sword', item.player) and self.difficulty_requirements[
|
|
||||||
item.player].progressive_sword_limit >= 3:
|
|
||||||
ret.prog_items['Tempered Sword', item.player] += 1
|
|
||||||
elif ret.has('Fighter Sword', item.player) and self.difficulty_requirements[item.player].progressive_sword_limit >= 2:
|
|
||||||
ret.prog_items['Master Sword', item.player] += 1
|
|
||||||
elif self.difficulty_requirements[item.player].progressive_sword_limit >= 1:
|
|
||||||
ret.prog_items['Fighter Sword', item.player] += 1
|
|
||||||
elif 'Glove' in item.name:
|
|
||||||
if ret.has('Titans Mitts', item.player):
|
|
||||||
pass
|
|
||||||
elif ret.has('Power Glove', item.player):
|
|
||||||
ret.prog_items['Titans Mitts', item.player] += 1
|
|
||||||
else:
|
|
||||||
ret.prog_items['Power Glove', item.player] += 1
|
|
||||||
elif 'Shield' in item.name:
|
|
||||||
if ret.has('Mirror Shield', item.player):
|
|
||||||
pass
|
|
||||||
elif ret.has('Red Shield', item.player) and self.difficulty_requirements[item.player].progressive_shield_limit >= 3:
|
|
||||||
ret.prog_items['Mirror Shield', item.player] += 1
|
|
||||||
elif ret.has('Blue Shield', item.player) and self.difficulty_requirements[item.player].progressive_shield_limit >= 2:
|
|
||||||
ret.prog_items['Red Shield', item.player] += 1
|
|
||||||
elif self.difficulty_requirements[item.player].progressive_shield_limit >= 1:
|
|
||||||
ret.prog_items['Blue Shield', item.player] += 1
|
|
||||||
elif 'Bow' in item.name:
|
|
||||||
if ret.has('Silver', item.player):
|
|
||||||
pass
|
|
||||||
elif ret.has('Bow', item.player) and self.difficulty_requirements[item.player].progressive_bow_limit >= 2:
|
|
||||||
ret.prog_items['Silver Bow', item.player] += 1
|
|
||||||
elif self.difficulty_requirements[item.player].progressive_bow_limit >= 1:
|
|
||||||
ret.prog_items['Bow', item.player] += 1
|
|
||||||
elif item.advancement or item.smallkey or item.bigkey:
|
|
||||||
ret.prog_items[item.name, item.player] += 1
|
|
||||||
|
|
||||||
for item in self.itempool:
|
for item in self.itempool:
|
||||||
soft_collect(item)
|
self.worlds[item.player].collect(ret, item)
|
||||||
|
|
||||||
if keys:
|
if keys:
|
||||||
for p in self.alttp_player_ids:
|
for p in self.alttp_player_ids:
|
||||||
|
world = self.worlds[p]
|
||||||
from worlds.alttp.Items import ItemFactory
|
from worlds.alttp.Items import ItemFactory
|
||||||
for item in ItemFactory(
|
for item in ItemFactory(
|
||||||
['Small Key (Hyrule Castle)', 'Big Key (Eastern Palace)', 'Big Key (Desert Palace)',
|
['Small Key (Hyrule Castle)', 'Big Key (Eastern Palace)', 'Big Key (Desert Palace)',
|
||||||
|
@ -302,7 +261,7 @@ class MultiWorld():
|
||||||
'Small Key (Misery Mire)'] * 3 + ['Small Key (Turtle Rock)'] * 4 + [
|
'Small Key (Misery Mire)'] * 3 + ['Small Key (Turtle Rock)'] * 4 + [
|
||||||
'Small Key (Ganons Tower)'] * 4,
|
'Small Key (Ganons Tower)'] * 4,
|
||||||
p):
|
p):
|
||||||
soft_collect(item)
|
world.collect(ret, item)
|
||||||
ret.sweep_for_events()
|
ret.sweep_for_events()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -908,60 +867,10 @@ class CollectionState(object):
|
||||||
def collect(self, item: Item, event: bool = False, location: Location = None) -> bool:
|
def collect(self, item: Item, event: bool = False, location: Location = None) -> bool:
|
||||||
if location:
|
if location:
|
||||||
self.locations_checked.add(location)
|
self.locations_checked.add(location)
|
||||||
changed = False
|
|
||||||
|
|
||||||
# TODO: create a mapping for progressive items in each game and use that
|
changed = self.world.worlds[item.player].collect(self, item)
|
||||||
if item.game == "A Link to the Past":
|
|
||||||
if item.name.startswith('Progressive '):
|
|
||||||
if 'Sword' in item.name:
|
|
||||||
if self.has('Golden Sword', item.player):
|
|
||||||
pass
|
|
||||||
elif self.has('Tempered Sword', item.player) and self.world.difficulty_requirements[
|
|
||||||
item.player].progressive_sword_limit >= 4:
|
|
||||||
self.prog_items['Golden Sword', item.player] += 1
|
|
||||||
changed = True
|
|
||||||
elif self.has('Master Sword', item.player) and self.world.difficulty_requirements[item.player].progressive_sword_limit >= 3:
|
|
||||||
self.prog_items['Tempered Sword', item.player] += 1
|
|
||||||
changed = True
|
|
||||||
elif self.has('Fighter Sword', item.player) and self.world.difficulty_requirements[item.player].progressive_sword_limit >= 2:
|
|
||||||
self.prog_items['Master Sword', item.player] += 1
|
|
||||||
changed = True
|
|
||||||
elif self.world.difficulty_requirements[item.player].progressive_sword_limit >= 1:
|
|
||||||
self.prog_items['Fighter Sword', item.player] += 1
|
|
||||||
changed = True
|
|
||||||
elif 'Glove' in item.name:
|
|
||||||
if self.has('Titans Mitts', item.player):
|
|
||||||
pass
|
|
||||||
elif self.has('Power Glove', item.player):
|
|
||||||
self.prog_items['Titans Mitts', item.player] += 1
|
|
||||||
changed = True
|
|
||||||
else:
|
|
||||||
self.prog_items['Power Glove', item.player] += 1
|
|
||||||
changed = True
|
|
||||||
elif 'Shield' in item.name:
|
|
||||||
if self.has('Mirror Shield', item.player):
|
|
||||||
pass
|
|
||||||
elif self.has('Red Shield', item.player) and self.world.difficulty_requirements[item.player].progressive_shield_limit >= 3:
|
|
||||||
self.prog_items['Mirror Shield', item.player] += 1
|
|
||||||
changed = True
|
|
||||||
elif self.has('Blue Shield', item.player) and self.world.difficulty_requirements[item.player].progressive_shield_limit >= 2:
|
|
||||||
self.prog_items['Red Shield', item.player] += 1
|
|
||||||
changed = True
|
|
||||||
elif self.world.difficulty_requirements[item.player].progressive_shield_limit >= 1:
|
|
||||||
self.prog_items['Blue Shield', item.player] += 1
|
|
||||||
changed = True
|
|
||||||
elif 'Bow' in item.name:
|
|
||||||
if self.has('Silver Bow', item.player):
|
|
||||||
pass
|
|
||||||
elif self.has('Bow', item.player):
|
|
||||||
self.prog_items['Silver Bow', item.player] += 1
|
|
||||||
changed = True
|
|
||||||
else:
|
|
||||||
self.prog_items['Bow', item.player] += 1
|
|
||||||
changed = True
|
|
||||||
|
|
||||||
|
if not changed and event:
|
||||||
if not changed and (event or item.advancement):
|
|
||||||
self.prog_items[item.name, item.player] += 1
|
self.prog_items[item.name, item.player] += 1
|
||||||
changed = True
|
changed = True
|
||||||
|
|
||||||
|
|
|
@ -46,5 +46,12 @@ class World(metaclass=AutoWorldRegister):
|
||||||
def generate_output(self):
|
def generate_output(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def collect(self, state, item) -> bool:
|
||||||
|
"""Collect an item into state"""
|
||||||
|
if item.advancement:
|
||||||
|
state.prog_items[item.name, item.player] += 1
|
||||||
|
return True # indicate that a logical state change has occured
|
||||||
|
return False
|
||||||
|
|
||||||
def get_required_client_version(self) -> tuple:
|
def get_required_client_version(self) -> tuple:
|
||||||
return 0, 0, 3
|
return 0, 0, 3
|
|
@ -1,10 +1,64 @@
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from BaseClasses import Location, Item
|
from BaseClasses import Location, Item, CollectionState
|
||||||
from ..AutoWorld import World
|
from ..AutoWorld import World
|
||||||
|
|
||||||
class ALTTPWorld(World):
|
class ALTTPWorld(World):
|
||||||
game: str = "A Link to the Past"
|
game: str = "A Link to the Past"
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
class ALttPLocation(Location):
|
class ALttPLocation(Location):
|
||||||
|
|
Loading…
Reference in New Issue