diff --git a/worlds/overcooked2/Overcooked2Levels.py b/worlds/overcooked2/Overcooked2Levels.py index aac9ea0c..4c14a8f8 100644 --- a/worlds/overcooked2/Overcooked2Levels.py +++ b/worlds/overcooked2/Overcooked2Levels.py @@ -87,6 +87,31 @@ class Overcooked2Dlc(Enum): return [] + def exclusive_items(self) -> List[str]: + """Returns list of items exclusive to this DLC""" + if self == Overcooked2Dlc.SURF_N_TURF: + return ["Bellows"] + if self == Overcooked2Dlc.CAMPFIRE_COOK_OFF: + return ["Wood"] + if self == Overcooked2Dlc.NIGHT_OF_THE_HANGRY_HORDE: + return ["Coal Bucket"] + if self == Overcooked2Dlc.CARNIVAL_OF_CHAOS: + return ["Faster Condiment/Drink Switch"] + if self == Overcooked2Dlc.SEASONAL: + return ["Wok Wheels"] + + return [] + +ITEMS_TO_EXCLUDE_IF_NO_DLC = [ + "Wood", + "Coal Bucket", + "Bellows", + "Coin Purse", + "Wok Wheels", + "Lightweight Backpack", + "Faster Condiment/Drink Switch", + "Calmer Unbread", +] class Overcooked2GameWorld(Enum): ONE = 1 diff --git a/worlds/overcooked2/__init__.py b/worlds/overcooked2/__init__.py index 8cce1870..0fafdd1e 100644 --- a/worlds/overcooked2/__init__.py +++ b/worlds/overcooked2/__init__.py @@ -4,7 +4,7 @@ from typing import Callable, Dict, Any, List, Optional from BaseClasses import ItemClassification, CollectionState, Region, Entrance, Location, RegionType, Tutorial from worlds.AutoWorld import World, WebWorld -from .Overcooked2Levels import Overcooked2Level, Overcooked2GenericLevel +from .Overcooked2Levels import Overcooked2Level, Overcooked2GenericLevel, ITEMS_TO_EXCLUDE_IF_NO_DLC from .Locations import Overcooked2Location, oc2_location_name_to_id, oc2_location_id_to_name from .Options import overcooked_options, OC2Options, OC2OnToggle from .Items import item_table, Overcooked2Item, item_name_to_id, item_id_to_name, item_to_unlock_event, item_frequencies @@ -259,11 +259,16 @@ class Overcooked2World(World): # filler = list() # progression = list() for item_name in item_table: + if not self.options["ShuffleLevelOrder"] and item_name in ITEMS_TO_EXCLUDE_IF_NO_DLC: + # skip DLC items if no DLC + continue + if not self.options["IncludeHordeLevels"] and item_name in ["Calmer Unbread", "Coin Purse"]: - # skip items which are irrelevant to the seed + # skip horde-specific items if no horde levels continue if not self.options["KevinLevels"] and item_name.startswith("Kevin"): + # skip kevin items if no kevin levels continue if is_item_progression(item_name, self.level_mapping, self.options["KevinLevels"]): diff --git a/worlds/overcooked2/test/TestOvercooked2.py b/worlds/overcooked2/test/TestOvercooked2.py index 8f5ea9d4..aad71211 100644 --- a/worlds/overcooked2/test/TestOvercooked2.py +++ b/worlds/overcooked2/test/TestOvercooked2.py @@ -3,7 +3,7 @@ import unittest from random import Random from worlds.overcooked2.Items import * -from worlds.overcooked2.Overcooked2Levels import Overcooked2Level, level_id_to_shortname +from worlds.overcooked2.Overcooked2Levels import Overcooked2Dlc, Overcooked2Level, level_id_to_shortname, ITEMS_TO_EXCLUDE_IF_NO_DLC from worlds.overcooked2.Logic import level_logic, level_shuffle_factory from worlds.overcooked2.Locations import oc2_location_name_to_id @@ -139,3 +139,11 @@ class Overcooked2Test(unittest.TestCase): number_of_items += 1 self.assertLessEqual(number_of_items, len(oc2_location_name_to_id), "Too many items (before fillers placed)") + + def testExclusiveItems(self): + for dlc in Overcooked2Dlc: + for item in dlc.exclusive_items(): + self.assertIn(item, item_table.keys()) + + for item in ITEMS_TO_EXCLUDE_IF_NO_DLC: + self.assertIn(item, item_table.keys())