SA2B: Logic Fixes and Black Market Trap Name Improvements (#5427)

* Logic fixes and more Chao and Fake Item names

* Fix typo

* Overhaul Shop Trap Item names
This commit is contained in:
PoryGone
2025-09-08 21:29:31 -04:00
committed by GitHub
parent 17dad8313e
commit 18ac9210cb
3 changed files with 280 additions and 90 deletions

View File

@@ -170,58 +170,209 @@ sample_chao_names = [
"Portia",
"Graves",
"Kaycee",
"Ghandi",
"Medli",
"Jak",
"Wario",
"Theo",
]
totally_real_item_names = [
"Mallet",
"Lava Rod",
"Master Knife",
"Slippers",
"Spade",
totally_real_item_names: dict[str, list[str]] = {
"Bumper Stickers": [
"Bonus Score",
"Boosting Bumper",
],
"Castlevania 64": [
"Earth card",
"Venus card",
"Ax",
"Storehouse Key",
],
"Celeste 64": [
"Blueberry",
"Side Flip",
"Triple Dash Refills",
"Swap Blocks",
"Dream Blocks",
],
"Celeste (Open World)": [
"Green Boosters",
"Triple Dash Refills",
"Rising Platforms",
"Red Bubbles",
"Granny's Car Keys",
"Blueberry",
],
"Civilization VI": [
"Advanced Trebuchets",
"The Wheel 2",
"NFTs",
],
"Donkey Kong Country 3": [
"Progressive Car Upgrade",
"Bonus Token",
],
"Factorio": [
"logistic-ai",
"progressive-militia",
"progressive-stronger-explosives",
"uranium-food",
],
"A Hat in Time": [
"Fire Hat",
"69 Pons",
"Relic (Green Canyon)",
"Relic (Cooler Cow)",
"Time Fragment",
],
"Hollow Knight": [
"Shortnail",
"Runmaster",
],
"Jak and Daxter The Precursor Legacy": [
"69 Precursor Orbs",
"Jump Roll",
"Roll Kick",
],
"Kirby's Dream Land 3": [
"CooCoo",
],
"Kingdom Hearts 2": [
"Courage Form",
"Auto Courage",
"Donald Defender",
"Goofy Blizzard",
"Ultimate Weapon",
],
"Lingo": [
"Art Gallery (First Floor)",
"Color Hunt - Pink Barrier",
],
"A Link to the Past": [
"Mallet",
"Lava Rod",
"Master Knife",
"Slippers",
"Spade",
"Big Key (Dark Palace)",
"Big Key (Hera Tower)",
],
"Links Awakening DX": [
"Song of the Sky Whale",
"Gryphon Shoes",
"Wing Key",
"Strength Anklet",
],
"Hairclip",
"Mario & Luigi Superstar Saga": [
"Mega Nut",
],
"Key of Wisdom",
"The Messenger": [
"Key of Anger",
"Time Shard (69)",
"Hydro",
],
"Baking",
"Progressive Block Mining",
"Muse Dash": [
"U.N. Owen Was Her",
"Renai Circulation",
"Flyers",
],
"Noita": [
"Gold (69)",
"Sphere",
"Melee Die",
],
"Ocarina of Time": [
"Jar",
"Whistle of Space",
"Rito Tunic",
"Boss Key (Forest Haven)",
"Boss Key (Swamp Palace)",
"Boss Key (Great Bay Temple)",
],
"Old School Runescape": [
"Area: Taverly",
"Area: Meiyerditch",
"Fire Cape",
],
"Overcooked! 2": [
"Kitchen Sink",
],
"Paint": [
"AI Enhance",
"Paint Bucket",
"Pen",
],
"Pokemon Red and Blue": [
"Rock Badge",
"Key Card",
"Pikachu",
"Eevee",
"HM02 Strength",
"HM05 Fly",
"HM01 Surf",
"Card Key 12F",
],
"Risk of Rain 2": [
"Dio's Worst Enemy",
"Stage 5",
"Mythical Item",
],
"Rogue Legacy": [
"Progressive Astromancers",
"Progressive Chefs",
"The Living Safe",
"Lady Quinn",
],
"Dio's Worst Enemy",
"Saving Princess": [
"Fire Spreadshot",
"Volcano Key",
"Frozen Key",
],
"Secret of Evermore": [
"Mantis Claw",
"Progressive pants",
"Deflect",
],
"shapez": [
"Spinner",
"Toggle",
"Slicer",
"Splitter",
],
"SMZ3": [
"Cane of Bryan",
],
"Sonic Adventure 2 Battle": [
"Pink Chaos Emerald",
"Black Chaos Emerald",
"Tails - Large Cannon",
@@ -232,64 +383,96 @@ totally_real_item_names = [
"Shadow - Bounce Bracelet",
"Rouge - Air Necklace",
"Big Key (Eggman's Pyramid)",
],
"Starcraft 2": [
"Sensor Bunker",
"Phantom",
"Soldier",
],
"Plasma Suit",
"Gravity Beam",
"Hi-Jump Ball",
"Cannon Unlock LLL",
"Feather Cap",
"Progressive Yoshi",
"Purple Switch Palace",
"Cape Feather",
"Cane of Bryan",
"Stardew Valley": [
"Van Repair",
"Ship Repair",
"Autumn",
"Galaxy Knife",
"Green Cabbage Seeds",
"Casket",
"Pet Moonlight Jelly",
"Adventurer's Guild Key",
],
"Super Mario Land 2": [
"Luigi Coin",
"Luigi Zone Progression",
"Hard Mode",
],
"Super Metroid": [
"Plasma Suit",
"Gravity Beam",
"Hi-Jump Ball",
],
"Super Mario 64": [
"Cannon Unlock LLL",
"Feather Cap",
],
"Super Mario World": [
"Progressive Yoshi",
"Purple Switch Palace",
"Cape Feather",
"Fire Flower",
"Cling",
"Twirl Jump",
],
"Timespinner": [
"Timespinner Cog 1",
"Leg Cannon",
],
"Ladder",
"TUNIC": [
"Ladder To West Forest",
"Money x69",
"Page 69",
"Master Sword",
],
"The Wind Waker": [
"Ballad of Storms",
"Wind God's Song",
"Earth God's Song",
"Ordon's Pearl",
],
"The Witness": [
"Visible Dots",
],
"CooCoo",
"Blueberry",
"Yacht Dice": [
"Category One of a Kind",
"Category Fuller House",
],
"Yoshi's Island": [
"Ear of Luigi",
"+69 Stars",
"Water Melon",
"World 7 Gate",
"Small Spring Ball",
],
"Mega Nut",
"Yu-Gi-Oh! 2006": [
"DUELIST ALLIANCE",
"DUEL OVERLOAD",
"POWER OF THE ELEMENTS",
"S:P Little Knight",
"Red-Eyes Dark Dragoon",
"Fire Hat",
"Area: Taverly",
"Area: Meiyerditch",
"Fire Cape",
"Donald Zeta Flare",
"Category One of a Kind",
"Category Fuller House",
"Passive Camoflage",
"Earth Card",
]
"Maxx C"
],
}
all_exits = [
0x00, # Lobby to Neutral

View File

@@ -1406,7 +1406,8 @@ def set_mission_upgrade_rules_standard(multiworld: MultiWorld, world: World, pla
lambda state: (state.has(ItemName.rouge_mystic_melody, player) and
state.has(ItemName.rouge_treasure_scope, player)))
add_rule(multiworld.get_location(LocationName.white_jungle_lifebox_2, player),
lambda state: state.has(ItemName.shadow_flame_ring, player))
lambda state: (state.has(ItemName.shadow_flame_ring, player) and
state.has(ItemName.shadow_air_shoes, player)))
add_rule(multiworld.get_location(LocationName.metal_harbor_lifebox_3, player),
lambda state: state.has(ItemName.sonic_light_shoes, player))
@@ -2062,6 +2063,8 @@ def set_mission_upgrade_rules_standard(multiworld: MultiWorld, world: World, pla
add_rule(multiworld.get_location(LocationName.mad_space_big, player),
lambda state: state.has(ItemName.rouge_iron_boots, player))
add_rule(multiworld.get_location(LocationName.cannon_core_big_1, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(multiworld.get_location(LocationName.cannon_core_big_2, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player))

View File

@@ -613,7 +613,8 @@ class SA2BWorld(World):
self.options.chao_stats.value > 0 or \
self.options.chao_animal_parts or \
self.options.chao_kindergarten or \
self.options.black_market_slots.value > 0:
self.options.black_market_slots.value > 0 or \
self.options.goal.value == 7:
return True;
return False
@@ -757,13 +758,16 @@ class SA2BWorld(World):
item_names = []
player_names = []
progression_flags = []
totally_real_item_names_copy = totally_real_item_names.copy()
location_names = [(LocationName.chao_black_market_base + str(i)) for i in range(1, self.options.black_market_slots.value + 1)]
locations = [self.multiworld.get_location(location_name, self.player) for location_name in location_names]
for location in locations:
if location.item.classification & ItemClassification.trap:
item_name = self.random.choice(totally_real_item_names_copy)
totally_real_item_names_copy.remove(item_name)
item_name = ""
if location.item.game in totally_real_item_names:
item_name = self.random.choice(totally_real_item_names[location.item.game])
else:
random_game_names: list[str] = self.random.choice(list(totally_real_item_names.values()))
item_name = self.random.choice(random_game_names)
item_names.append(item_name)
else:
item_names.append(location.item.name)