[OC2] Fix "Moon 1-5" never appearing in level pool (#1366)
This commit is contained in:
parent
fe2b431821
commit
92d1ed60c6
|
@ -135,10 +135,10 @@ def level_shuffle_factory(
|
|||
shuffle_horde_levels: bool,
|
||||
) -> Dict[int, Overcooked2GenericLevel]: # return <story_level_id, level>
|
||||
# Create a list of all valid levels for selection
|
||||
# (excludes tutorial, throne, kevin and sometimes horde levels)
|
||||
# (excludes tutorial, throne and sometimes horde/prep levels)
|
||||
pool = list()
|
||||
for dlc in Overcooked2Dlc:
|
||||
for level_id in range(dlc.start_level_id(), dlc.end_level_id()):
|
||||
for level_id in range(dlc.start_level_id, dlc.end_level_id):
|
||||
if level_id in dlc.excluded_levels():
|
||||
continue
|
||||
|
||||
|
@ -165,11 +165,12 @@ def level_shuffle_factory(
|
|||
rng.shuffle(pool)
|
||||
|
||||
# Return the first 44 levels and assign those to each level
|
||||
for level_id in range(story.start_level_id(), story.end_level_id()):
|
||||
for level_id in range(story.start_level_id, story.end_level_id):
|
||||
if level_id not in story.excluded_levels():
|
||||
result[level_id] = pool[level_id-1]
|
||||
else:
|
||||
result[level_id] = Overcooked2GenericLevel(level_id) # This is just 6-6 right now
|
||||
elif level_id == 36:
|
||||
# Level 6-6 is exempt from shuffling
|
||||
result[level_id] = Overcooked2GenericLevel(level_id)
|
||||
|
||||
return result
|
||||
|
||||
|
|
|
@ -32,16 +32,16 @@ class Overcooked2Dlc(Enum):
|
|||
assert False
|
||||
|
||||
# inclusive
|
||||
@property
|
||||
def start_level_id(self) -> int:
|
||||
if self == Overcooked2Dlc.STORY:
|
||||
return 1
|
||||
return 0
|
||||
|
||||
# exclusive
|
||||
@property
|
||||
def end_level_id(self) -> int:
|
||||
id = None
|
||||
if self == Overcooked2Dlc.STORY:
|
||||
id = 6*6 + 8 # world_count*level_count + kevin count
|
||||
id = 1 + 6*6 + 8 # tutorial + world_count*level_count + kevin count
|
||||
if self == Overcooked2Dlc.SURF_N_TURF:
|
||||
id = 3*4 + 1
|
||||
if self == Overcooked2Dlc.CAMPFIRE_COOK_OFF:
|
||||
|
@ -51,9 +51,9 @@ class Overcooked2Dlc(Enum):
|
|||
if self == Overcooked2Dlc.CARNIVAL_OF_CHAOS:
|
||||
id = 3*4 + 3
|
||||
if self == Overcooked2Dlc.SEASONAL:
|
||||
id = 31
|
||||
id = 31 + 1
|
||||
|
||||
return self.start_level_id() + id
|
||||
return self.start_level_id + id
|
||||
|
||||
# Tutorial + Horde Levels + Endgame
|
||||
def excluded_levels(self) -> List[int]:
|
||||
|
|
|
@ -147,3 +147,26 @@ class Overcooked2Test(unittest.TestCase):
|
|||
|
||||
for item in ITEMS_TO_EXCLUDE_IF_NO_DLC:
|
||||
self.assertIn(item, item_table.keys())
|
||||
|
||||
def testLevelCounts(self):
|
||||
for dlc in Overcooked2Dlc:
|
||||
level_id_range = range(dlc.start_level_id, dlc.end_level_id)
|
||||
|
||||
for level_id in dlc.excluded_levels():
|
||||
self.assertIn(level_id, level_id_range, f"Excluded level {dlc.name} - {level_id} out of range")
|
||||
|
||||
for level_id in dlc.horde_levels():
|
||||
self.assertIn(level_id, level_id_range, f"Horde level {dlc.name} - {level_id} out of range")
|
||||
|
||||
for level_id in dlc.prep_levels():
|
||||
self.assertIn(level_id, level_id_range, f"Prep level {dlc.name} - {level_id} out of range")
|
||||
|
||||
for level_id in level_id_range:
|
||||
self.assertIn((dlc, level_id), level_id_to_shortname, "A valid level is not represented in level directory")
|
||||
|
||||
count = 0
|
||||
for (dlc_key, _) in level_id_to_shortname:
|
||||
if dlc == dlc_key:
|
||||
count += 1
|
||||
|
||||
self.assertEqual(count, len(level_id_range), f"Number of levels in {dlc.name} has discrepancy between level_id range and directory")
|
||||
|
|
Loading…
Reference in New Issue