[OC2] Fix "Moon 1-5" never appearing in level pool (#1366)

This commit is contained in:
toasterparty 2023-01-04 06:21:52 -08:00 committed by GitHub
parent fe2b431821
commit 92d1ed60c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 10 deletions

View File

@ -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

View File

@ -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]:

View File

@ -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")