Unit tests have been added to ensure that Overcooked! 2 data is maintained properly. Unit tests will fail if data structures are detrimentally modified in a way otherwise invisible to a game-agnostic test suite.
Command:
python -m pytest test/overcooked2
Result:
6 passed in 0.50s
In order to test both edge cases and generation stability, games were bulk generated in various configurations. Bulk generation done by using a dirty version of Generate.py
which multithreads 1,000 instances of generation instances (seeds 0-999) and counts the number of exceptions thrown at the end.
Tests were ran on an i9-11950H @ stock.
Generate.py Code Snippet
import threading, time
start = time.time()
games_to_gen = 1000
max_threads = 25
exceptions = list()
threads = list()
genned = 0
def thread(seed):
global successes
try:
main(my_seed=seed)
successes += 1
except Exception as e:
exceptions.append(str(e))
while genned < games_to_gen:
if len(threads) >= max_threads:
for t in threads:
if not t.is_alive():
threads.remove(t)
time.sleep(0.5)
continue
t = threading.Thread(target=thread, args=(genned,))
t.start()
threads.append(t)
genned += 1
for t in threads:
t.join()
print(f"{successes} out of {genned} ({int((successes*100)/games_to_gen)}%) ({int(time.time()-start)} seconds) passed:\n\texceptions:\n{exceptions}")
996 out of 1000 (99%) (376 seconds) passed
exceptions
['No more spots to place [Calmer Unbread (Player 1)], locations [Kevin-2 Completed, 4-4 Completed, 6-4 Completed, 3-4 Completed, 3-2 Completed, 3-3 Completed, 3-6 Completed, 5-6 Completed, Kevin-1 Completed, 6-1 Completed, Kevin-7 Completed, 6-3 Completed, 1-5 Completed, 2-4 Completed, 3-1 Completed, 5-3 Completed, Kevin-5 Completed, 1-6 Completed, Kevin-8 Completed, 6-2 Completed, 2-2 Completed] are invalid. Already placed 22: 2-3 Completed, 5-4 Completed, 3-5 Completed, 4-5 Completed, 5-5 Completed, Kevin-4 Completed, 1-1 Completed, 1-4 Completed, 4-6 Completed, 5-1 Completed, 2-5 Completed, 4-2 Completed, 1-3 Completed, 4-3 Completed, 4-1 Completed, 2-6 Completed, 2-1 Completed, 1-2 Completed, 5-2 Completed, 6-5 Completed, Kevin-3 Completed, Kevin-6 Completed', 'No more spots to place [Larger Tip Jar (Player 1), Faster Condiment/Drink Switch (Player 1)], locations [5-6 Completed, 6-3 Completed, 6-5 Completed, 2-3 Completed, 1-1 Completed, 2-5 Completed, Kevin-6 Completed, 1-4 Completed, 4-5 Completed, 2-4 Completed, 3-3 Completed, Kevin-5 Completed, 6-1 Completed, 1-5 Completed, 1-2 Completed, 1-6 Completed, 4-4 Completed, Kevin-4 Completed, 1-3 Completed, 6-2 Completed, 3-5 Completed, 3-1 Completed, 2-6 Completed] are invalid. Already placed 20: Kevin-3 Completed, 2-2 Completed, 5-5 Completed, Kevin-1 Completed, Kevin-8 Completed, Kevin-7 Completed, 3-6, Completed, 4-3 Completed, 5-4 Completed, 3-4 Completed, 5-3 Completed, 5-2 Completed, 4-6 Completed, 4-2 Completed, 3-2 Completed, 2-1 Completed, 6-4 Completed, Kevin-2 Completed, 4-1 Completed, 5-1 Completed', 'No more spots to place [Fire Extinguisher (Player 1)], locations [Kevin-1 Completed, 6-1 Completed, 2-3 Completed, 2-5 Completed, 3-6 Completed, 4-6 Completed, 2-2 Completed, 4-5 Completed, 3-5 Completed, 6-5 Completed, 5-5 Completed, 5-3 Completed, 3-1 Completed, 6-4 Completed, 2-4 Completed, 1-6 Completed, 3-2 Completed, 3-3 Completed, 2-6 Completed, 6-2 Completed, 5-6 Completed, Kevin-8 Completed] are invalid. Already placed 21: Kevin-5 Completed, 1-5 Completed, Kevin-2, Completed, Kevin-6 Completed, 4-4 Completed, Kevin-4 Completed, 4-1 Completed, 5-1 Completed, 5-4 Completed, 4-2 Completed, 1-2 Completed, 1-4 Completed, Kevin-3 Completed, 4-3 Completed, 6-3 Completed, 2-1 Completed, 5-2 Completed, 1-1 Completed, Kevin-7 Completed, 3-4 Completed, 1-3 Completed', 'No more spots to place [Kevin-2 (Player 1), Progressive Dash (Player 1)], locations [2-3 Completed, 4-6 Completed, 3-1 Completed, 1-5 Completed, 3-6 Completed, 4-4 Completed, 6-5 Completed, 3-3 Completed, 1-4 Completed, 6-3 Completed, 5-6 Completed, 2-4 Completed, 5-5 Completed, 6-2 Completed, 3-5 Completed, 2-5 Completed, 3-4 Completed, Kevin-8 Completed, 5-4 Completed, Kevin-6 Completed, 4-2 Completed, 4-5 Completed] are invalid. Already placed 21: 3-2 Completed, 1-1 Completed, 1-3 Completed, 5-3 Completed, 1-6 Completed, Kevin-5 Completed, Kevin-7 Completed, 1-2 Completed, Kevin-1 Completed, Kevin-3 Completed 6-4 Completed, Kevin-4 Completed, 5-2 Completed, Kevin-2 Completed, 2-6 Completed, 4-3 Completed, 2-2 Completed, 6-1 Completed, 5-1 Completed, 4-1 Completed, 2-1 Completed']
yaml
Overcooked! 2:
progression_balancing: 50
accessibility: items
game: Overcooked! 2
name: test
997 out of 1000 (99%) (386 seconds) passed
exceptions
['No more spots to place [Progressive Dash (Player 1)], locations [2-5 Completed, 6-5 Completed, Kevin-1 Completed, 1-3 Completed, 1-4 Completed, 5-5 Completed, 1-5 Completed, Kevin-8 Completed, Kevin-4 Completed, 3-2 Completed, Kevin-7 Completed, 3-4 Completed, 4-6 Completed, 5-3 Completed, 4-4 Completed, 5-6 Completed, 4-5 Completed, 5-4 Completed, Kevin-5 Completed, 6-4 Completed, 3-3 Completed] are invalid. Already placed 22: 2-3 Completed, 1-2 Complete spots to place [Kevin-2 (Player 1), Progressive Dash (Player 1)], locations [2-3 Completed, 4-6 Completed, 3-1 Completed, 1-5 Completed, 3-6 Completed, 4-4 Completed, 6-5 Completed, 3-3 Completed, 1-4 Completed, 6-3 Completed, 5-6 Completed, 2-4 Completed, 5-5 Completed, 6-2 Completed, 3-5 Completed, 2-5 Completed, 3-4 Completed, Kevin-8 Completed, 5-4 Completed, Kevin-6 Completed, 4-2 Completed, 4-5 Completed] are invalid. Already placed 21: 3-2 Completed, 1-1 Completed, 1-3 Completed, 5-3 Completed, 1-6 Completed, Kevin-5 Completed, Kevin-7 Completed, 1-2 Completed, Kevin-1 Completed, Kevin-3 Completed, 6-4 Completed, Kevin-4 Completed, 5-2 Completed, Kevin-2 Completed, 2-6 Completed, 4-3 Completed, 2-2 Completed, 6-1 Completed, 5-1 Completed, 4-1 Completed, 2-1 Completed']
yaml
# Random settings weighted by how frequently users are expected to use
name: test
game:
Overcooked! 2: 1
requires:
Overcooked! 2:
progression_balancing:
random: 1
random-low: 0
random-high: 0
disabled: 0
normal: 1
extreme: 0
accessibility:
locations: 1
items: 10
minimal: 1
shuffle_level_order:
false: 1
true: 15
include_horde_levels:
false: 1
true: 5
prep_levels:
original: 1
excluded: 10
all_you_can_eat: 3
fix_bugs:
false: 1
true: 10
shorter_level_duration:
false: 1
true: 10
always_preserve_cooking_progress:
false: 1
true: 10
always_serve_oldest_order:
false: 1
true: 10
display_leaderboard_scores:
false: 1
true: 10
stars_to_win:
random: 1
random-low: 0
random-high: 0
66: 5
star_threshold_scale:
1: 0
100: 0
random: 1
random-low: 10
random-high: 0
45: 50
997 out of 1000 (99%) (1286 seconds) passed
exceptions
['Not all progression items reachable ({Kevin-8 Completed (test), Kevin-8 (3-Star) (test), Kevin-4 (2-Star) (test2), Kevin-8 (2-Star) (test), Kevin-4 Level Completed (test2), Kevin-4 (1-Star) (test2), Kevin-4 Completed (test2), Kevin-8 Level Completed (test), Kevin-8 (1-Star) (test), Kevin-4 (3-Star) (test2)}). Something went terribly wrong here.', 'Not all progression items reachable ({3-4 Level Completed (test), 3-6 (3-Star) (test), 4-4 Completed (test), 5-6 (3-Star) (test2), 4-6 Completed (test), 1-3 (3-Star) (test), 6-3 (3-Star) (test), 4-3 (3-Star) (test), Kevin-1 (3-Star) (test2), 6-5 (3-Star) (test), 5-5 (3-Star) (test), 5-6 Level Completed (test2), 5-4 (3-Star) (test), Kevin-8 (3-Star) (test), Kevin-1 Level Completed (test2), 3-6 Level Completed (test), 3-5 Level Completed (test), 3-4 Completed (test), 4-4 (2-Star) (test), Kevin-4 (2-Star) (test2), 3-4 (2-Star) (test), 3-4 (3-Star) (test), 6-2 (3-Star) (test), Kevin-8 (2-Star) (test), 5-5 (2-Star) (test2), 5-1 (3-Star) (test), 4-4 (1-Star) (test), 5-5 (1-Star) (test2), 5-6 (1-Star) (test2), 3-3 (3-Star) (test), Kevin-2 (3-Star) (test), 4-4 (3-Star) (test), 4-4 Level Completed (test), 3-6 Completed (test), Kevin-1 (3-Star) (test), 3-5 (1-Star) (test), 6-6 (3-Star) (test), 2-5 (3-Star) (test), 3-6 (2-Star) (test), 1-1 (3-Star) (test), Kevin-4 (3-Star) (test), Kevin-4 Level Completed (test2), 2-1 (3-Star) (test), 3-4 (1-Star) (test), 4-2 (3-Star) (test), 2-2 (3-Star) (test), 5-6 (2-Star) (test2), 4-1 (3-Star) (test), 3-5 (3-Star) (test), 5-6 (3-Star) (test), 2-3 (3-Star) (test), Kevin-3 (3-Star) (test), 4-5 (1-Star) (test), 4-6 (3-Star) (test), 3-6 (1-Star) (test), 3-1 (3-Star) (test), 4-5 (2-Star) (test), 5-2 (3-Star) (test), 2-6 (3-Star) (test), Kevin-6 (3-Star) (test), Kevin-1 (1-Star) (test2), 3-5 Completed (test), 4-5 Level Completed (test), Kevin-5 (3-Star) (test), 5-5 Level Completed (test2), Kevin-4 (1-Star) (test2), 5-5 (3-Star) (test2), 1-6 (3-Star) (test), Kevin-1 (2-Star) (test2), 6-4 (3-Star) (test), 4-5 (3-Star) (test), 1-5 (3-Star) (test), 4-6 (1-Star) (test), 3-5 (2-Star) (test), 5-3 (3-Star) (test), 4-6 (2-Star) (test), Kevin-7 (3-Star) (test), 4-6 Level Completed (test), 3-2 (3-Star) (test), Kevin-8 Level Completed (test), 1-4 (3-Star) (test), Kevin-8 (1-Star) (test), Kevin-4 (3-Star) (test2), 2-4 (3-Star) (test)}). Something went terribly wrong here.', 'Not all progression items reachable ({1-6 Level Completed (test2), Kevin-3 (3-Star) (test2), 1-3 (2-Star) (test2), 3-6 (1-Star) (test2), 1-3 Level Completed (test2), Kevin-1 (3-Star) (test2), 3-6 (2-Star) (test2), Kevin-1 Level Completed (test2), Kevin-3 (1-Star) (test2), 3-4 (1-Star) (test2), 1-5 (3-Star) (test2), 1-4 Level Completed (test2), 5-1 (3-Star) (test), 3-4 Level Completed (test2), 3-6 (3-Star) (test2), 1-5 (1-Star) (test2), 1-3 (3-Star) (test2), Kevin-3 (2-Star) (test2), 1-3 Completed (test2), 1-4 Completed (test2), 1-4 (3-Star) (test2), 3-4 Completed (test2), 3-6 Level Completed (test2), 3-4 (2-Star) (test2), 3-4 (3-Star) (test2), Kevin-1 (1-Star) (test2), 1-5 Level Completed (test2), 1-4 (2-Star) (test2), Kevin-3 Level Completed (test2), 1-6 Completed (test2), 5-1 (2-Star) (test), 1-3 (1-Star) (test2), Kevin-1 (2-Star) (test2), 3-5 Level Completed (test2), 1-5 (2-Star) (test2), Kevin-1 Completed (test2), 1-4 (1-Star) (test2)}). Something went terribly wrong here.']
999 out of 1000 (99%) (531 seconds) passed
exceptions
['Not all progression items reachable ({5-4 (2-Star) (test), 5-4 (3-Star) (test), 3-4 (2-Star) (test), 3-4 (3-Star) (test), 5-4 (1-Star) (test), 5-6 (3-Star) (test), 3-6 Level Completed (test), 5-6 (1-Star) (test), 3-6 (2-Star) (test), 5-5 (2-Star) (test), Kevin-3 (1-Star) (test), 3-4 Completed (test), 3-4 Level Completed (test), 3-6 Completed (test), 5-5 (3-Star) (test), 5-4 Level Completed (test), 3-6 (1-Star) (test), 3-6 (3-Star) (test), Kevin-3 Level Completed (test), 5-6 (2-Star) (test), 3-4 (1-Star) (test), 3-5 Level Completed (test), 5-5 (1-Star) (test), Kevin-3 (3-Star) (test), Kevin-3 (2-Star) (test), 5-4 Completed (test), 5-5 Level Completed (test), 5-6 Level Completed (test)}). Something went terribly wrong here.']
yaml
yaml from 1.2 plus this timspinner yaml:
# TS1.yaml
name: TS1
game: Timespinner
description: mostly random, non-inverted, non-minimal
Timespinner:
progression_balancing: 0
accessibility:
items: 1
locations: 1
minimal: 0
StartWithJewelryBox: random
DownloadableItems: random
EyeSpy: random
StartWithMeyef: random
QuickSeed: random
SpecificKeycards: random
Inverted: 'false'
GyreArchives: random
Cantoran: random
LoreChecks: random
BossRando: random
BossScaling: random
DamageRando: random
HpCap: 999
BossHealing: random
ShopFill: random
ShopWarpShards: random
ShopMultiplier: 1
LootPool: random
DropRateCategory: random
FixedDropRate: 5
LootTierDistro: random
ShowBestiary: random
ShowDrops: random
DeathLink: random
"Solo seed" meaning a single AP slot; "Local/Online Co-Op" meaning multiple chefs played in that slot
- Played 3 non-co-op solo seeds
- Played 1 local co-op solo seeds
- Played 2 online co-op solo seeds with:
- hotswapping player counts (1, 2, 3 and 4 players)
- 1-4 game instances in the slot where each game took turns hosting it
- Different combination of local co-op and online co-op at the same time
- Played a full SM + non-co-op OC2 Multi
- Played a full SC2 + non-co-op OC2 Multi