Implement get_filler_item_name for various games (#451)

This commit is contained in:
Alchav 2022-05-19 09:37:26 -04:00 committed by GitHub
parent e6e44b8747
commit dbf0458575
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 44 additions and 2 deletions

View File

@ -8,7 +8,7 @@ from BaseClasses import Item, CollectionState, Tutorial
from .SubClasses import ALttPItem from .SubClasses import ALttPItem
from ..AutoWorld import World, WebWorld, LogicMixin from ..AutoWorld import World, WebWorld, LogicMixin
from .Options import alttp_options, smallkey_shuffle from .Options import alttp_options, smallkey_shuffle
from .Items import as_dict_item_table, item_name_groups, item_table from .Items import as_dict_item_table, item_name_groups, item_table, GetBeemizerItem
from .Regions import lookup_name_to_id, create_regions, mark_light_world_regions from .Regions import lookup_name_to_id, create_regions, mark_light_world_regions
from .Rules import set_rules from .Rules import set_rules
from .ItemPool import generate_itempool, difficulties from .ItemPool import generate_itempool, difficulties
@ -17,6 +17,7 @@ from .Dungeons import create_dungeons
from .Rom import LocalRom, patch_rom, patch_race_rom, patch_enemizer, apply_rom_settings, get_hash_string, \ from .Rom import LocalRom, patch_rom, patch_race_rom, patch_enemizer, apply_rom_settings, get_hash_string, \
get_base_rom_path, LttPDeltaPatch get_base_rom_path, LttPDeltaPatch
import Patch import Patch
from itertools import chain
from .InvertedRegions import create_inverted_regions, mark_dark_world_regions from .InvertedRegions import create_inverted_regions, mark_dark_world_regions
from .EntranceShuffle import link_entrances, link_inverted_entrances, plando_connect from .EntranceShuffle import link_entrances, link_inverted_entrances, plando_connect
@ -479,7 +480,11 @@ class ALTTPWorld(World):
trash_count -= 1 trash_count -= 1
def get_filler_item_name(self) -> str: def get_filler_item_name(self) -> str:
return "Rupees (5)" # temporary if self.world.goal[self.player] == "icerodhunt":
item = "Nothing"
else:
item = self.world.random.choice(chain(difficulties[self.world.difficulty[self.player]].extras[0:5]))
return GetBeemizerItem(self.world, self.player, item)
def get_pre_fill_items(self): def get_pre_fill_items(self):
res = [] res = []

View File

@ -70,6 +70,8 @@ class ArchipIDLEWorld(World):
self.world.get_entrance('Entrance to IDLE Zone', self.player)\ self.world.get_entrance('Entrance to IDLE Zone', self.player)\
.connect(self.world.get_region('IDLE Zone', self.player)) .connect(self.world.get_region('IDLE Zone', self.player))
def get_filler_item_name(self) -> str:
return self.world.random.choice(item_table)
def create_region(world: MultiWorld, player: int, name: str, locations=None, exits=None): def create_region(world: MultiWorld, player: int, name: str, locations=None, exits=None):
region = Region(name, None, name, player) region = Region(name, None, name, player)

View File

@ -111,6 +111,8 @@ class FF1World(World):
return slot_data return slot_data
def get_filler_item_name(self) -> str:
return self.world.random.choice(["Heal", "Pure", "Soft", "Tent", "Cabin", "House"])
def get_options(world: MultiWorld, name: str, player: int): def get_options(world: MultiWorld, name: str, player: int):
return getattr(world, name, None)[player].value return getattr(world, name, None)[player].value

View File

@ -128,6 +128,9 @@ class MinecraftWorld(World):
self.world.itempool += itempool self.world.itempool += itempool
def get_filler_item_name(self) -> str:
return self.world.random.choices(list(junk_weights.keys()), weights=list(junk_weights.values()))[0]
def set_rules(self): def set_rules(self):
set_advancement_rules(self.world, self.player) set_advancement_rules(self.world, self.player)
set_completion_rules(self.world, self.player) set_completion_rules(self.world, self.player)

View File

@ -1038,3 +1038,6 @@ class OOTWorld(World):
all_state.stale[self.player] = True all_state.stale[self.player] = True
return all_state return all_state
def get_filler_item_name(self) -> str:
return get_junk_item(count=1, pool=get_junk_pool(self))[0]

View File

@ -161,6 +161,9 @@ class LegacyWorld(World):
self.world.itempool += itempool self.world.itempool += itempool
def get_filler_item_name(self) -> str:
return self.world.random.choice(list(misc_items_table.keys()))
def create_regions(self): def create_regions(self):
create_regions(self.world, self.player) create_regions(self.world, self.player)

View File

@ -525,6 +525,21 @@ class SMWorld(World):
item = next(x for x in ItemManager.Items.values() if x.Name == name) item = next(x for x in ItemManager.Items.values() if x.Name == name)
return SMItem(item.Name, True, item.Type, self.item_name_to_id[item.Name], player = self.player) return SMItem(item.Name, True, item.Type, self.item_name_to_id[item.Name], player = self.player)
def get_filler_item_name(self) -> str:
if self.world.random.randint(0, 100) < self.world.minor_qty[self.player].value:
power_bombs = self.world.power_bomb_qty[self.player].value
missiles = self.world.missile_qty[self.player].value
super_missiles = self.world.super_qty[self.player].value
roll = self.world.random.randint(1, power_bombs + missiles + super_missiles)
if roll <= power_bombs:
return "Power Bomb"
elif roll <= power_bombs + missiles:
return "Missile"
else:
return "Super Missile"
else:
return "Nothing"
def pre_fill(self): def pre_fill(self):
if (self.variaRando.args.morphPlacement == "early") and next((item for item in self.world.itempool if item.player == self.player and item.name == "Morph Ball"), False): if (self.variaRando.args.morphPlacement == "early") and next((item for item in self.world.itempool if item.player == self.player and item.name == "Morph Ball"), False):
viable = [] viable = []

View File

@ -104,6 +104,9 @@ class SM64World(World):
self.world.get_location("THI: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock THI")) self.world.get_location("THI: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock THI"))
self.world.get_location("RR: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock RR")) self.world.get_location("RR: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock RR"))
def get_filler_item_name(self) -> str:
return "1Up Mushroom"
def fill_slot_data(self): def fill_slot_data(self):
return { return {
"AreaRando": self.area_connections, "AreaRando": self.area_connections,

View File

@ -336,6 +336,9 @@ class SoEWorld(World):
payload = multidata["connect_names"][self.world.player_name[self.player]] payload = multidata["connect_names"][self.world.player_name[self.player]]
multidata["connect_names"][self.connect_name] = payload multidata["connect_names"][self.connect_name] = payload
def get_filler_item_name(self) -> str:
return self.world.random.choice(list(self.item_name_groups["Ingredients"]))
class SoEItem(Item): class SoEItem(Item):
game: str = "Secret of Evermore" game: str = "Secret of Evermore"

View File

@ -90,6 +90,9 @@ class SpireWorld(World):
slot_data[option_name] = int(option.value) slot_data[option_name] = int(option.value)
return slot_data return slot_data
def get_filler_item_name(self) -> str:
return self.world.random.choice(["Card Draw", "Card Draw", "Card Draw", "Relic", "Relic"])
def create_region(world: MultiWorld, player: int, name: str, locations=None, exits=None): def create_region(world: MultiWorld, player: int, name: str, locations=None, exits=None):
ret = Region(name, None, name, player) ret = Region(name, None, name, player)