TS: putting items as non local will correctly be handled by your starting orbs and your first progression item

excluding locations now correctly works for your first progression item in an non inverted seed
Aura blast can now be your starting spell
This commit is contained in:
Jarno Westhof 2021-12-12 23:43:30 +01:00 committed by Fabian Dill
parent db456cbcf1
commit 3f36c436ad
2 changed files with 40 additions and 13 deletions

View File

@ -213,6 +213,7 @@ starter_melee_weapons: Tuple[str, ...] = (
)
starter_spells: Tuple[str, ...] = (
'Aura Blast',
'Colossal Blade',
'Infernal Flames',
'Plasma Geyser',

View File

@ -1,4 +1,4 @@
from typing import Dict, List, Set, TextIO
from typing import Dict, List, Set, Tuple, TextIO
from BaseClasses import Item, MultiWorld, Location
from ..AutoWorld import World
from .LogicMixin import TimespinnerLogic
@ -115,20 +115,38 @@ def get_excluded_items(self: TimespinnerWorld, world: MultiWorld, player: int) -
def assign_starter_items(world: MultiWorld, player: int, excluded_items: Set[str], locked_locations: List[str]):
melee_weapon = world.random.choice(starter_melee_weapons)
spell = world.random.choice(starter_spells)
non_local_items = world.non_local_items[player].value
excluded_items.add(melee_weapon)
excluded_items.add(spell)
local_starter_melee_weapons = tuple(item for item in starter_melee_weapons if item not in non_local_items)
if not local_starter_melee_weapons:
if 'Plasma Orb' in non_local_items:
raise Exception("Atleast one melee orb must be local")
else:
local_starter_melee_weapons = ('Plasma Orb',)
melee_weapon_item = create_item_with_correct_settings(world, player, melee_weapon)
spell_item = create_item_with_correct_settings(world, player, spell)
local_starter_spells = tuple(item for item in starter_spells if item not in non_local_items)
if not local_starter_spells:
if 'Lightwall' in non_local_items:
raise Exception("Atleast one spell must be local")
else:
local_starter_spells = ('Lightwall',)
world.get_location('Yo Momma 1', player).place_locked_item(melee_weapon_item)
world.get_location('Yo Momma 2', player).place_locked_item(spell_item)
assign_starter_item(world, player, excluded_items, locked_locations, 'Yo Momma 1', local_starter_melee_weapons)
assign_starter_item(world, player, excluded_items, locked_locations, 'Yo Momma 2', local_starter_spells)
locked_locations.append('Yo Momma 1')
locked_locations.append('Yo Momma 2')
def assign_starter_item(world: MultiWorld, player: int, excluded_items: Set[str], locked_locations: List[str],
location: str, item_list: Tuple[str, ...]):
item_name = world.random.choice(item_list)
excluded_items.add(item_name)
item = create_item_with_correct_settings(world, player, item_name)
world.get_location(location, player).place_locked_item(item)
locked_locations.append(location)
def get_item_pool(world: MultiWorld, player: int, excluded_items: Set[str]) -> List[Item]:
@ -155,8 +173,16 @@ def place_first_progression_item(world: MultiWorld, player: int, excluded_items:
if item.name in starter_progression_items:
return
progression_item = world.random.choice(starter_progression_items)
location = world.random.choice(starter_progression_locations)
local_starter_progression_items = tuple(
item for item in starter_progression_items if item not in world.non_local_items[player].value)
non_excluded_starter_progression_locations = tuple(
location for location in starter_progression_locations if location not in world.exclude_locations[player].value)
if not local_starter_progression_items or not non_excluded_starter_progression_locations:
return
progression_item = world.random.choice(local_starter_progression_items)
location = world.random.choice(non_excluded_starter_progression_locations)
excluded_items.add(progression_item)
locked_locations.append(location)