Stardew Valley: Make progressive movie theater a progression trap (#3985)
This commit is contained in:
parent
0dade05133
commit
75624042f7
|
@ -319,7 +319,7 @@ class StardewValleyWorld(World):
|
||||||
if override_classification is None:
|
if override_classification is None:
|
||||||
override_classification = item.classification
|
override_classification = item.classification
|
||||||
|
|
||||||
if override_classification == ItemClassification.progression:
|
if override_classification & ItemClassification.progression:
|
||||||
self.total_progression_items += 1
|
self.total_progression_items += 1
|
||||||
return StardewItem(item.name, override_classification, item.code, self.player)
|
return StardewItem(item.name, override_classification, item.code, self.player)
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ id,name,classification,groups,mod_name
|
||||||
19,Glittering Boulder Removed,progression,COMMUNITY_REWARD,
|
19,Glittering Boulder Removed,progression,COMMUNITY_REWARD,
|
||||||
20,Minecarts Repair,useful,COMMUNITY_REWARD,
|
20,Minecarts Repair,useful,COMMUNITY_REWARD,
|
||||||
21,Bus Repair,progression,COMMUNITY_REWARD,
|
21,Bus Repair,progression,COMMUNITY_REWARD,
|
||||||
22,Progressive Movie Theater,progression,COMMUNITY_REWARD,
|
22,Progressive Movie Theater,"progression,trap",COMMUNITY_REWARD,
|
||||||
23,Stardrop,progression,,
|
23,Stardrop,progression,,
|
||||||
24,Progressive Backpack,progression,,
|
24,Progressive Backpack,progression,,
|
||||||
25,Rusty Sword,filler,"WEAPON,DEPRECATED",
|
25,Rusty Sword,filler,"WEAPON,DEPRECATED",
|
||||||
|
|
|
|
@ -2,6 +2,7 @@ import csv
|
||||||
import enum
|
import enum
|
||||||
import logging
|
import logging
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
|
from functools import reduce
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from random import Random
|
from random import Random
|
||||||
from typing import Dict, List, Protocol, Union, Set, Optional
|
from typing import Dict, List, Protocol, Union, Set, Optional
|
||||||
|
@ -134,7 +135,7 @@ def load_item_csv():
|
||||||
item_reader = csv.DictReader(file)
|
item_reader = csv.DictReader(file)
|
||||||
for item in item_reader:
|
for item in item_reader:
|
||||||
id = int(item["id"]) if item["id"] else None
|
id = int(item["id"]) if item["id"] else None
|
||||||
classification = ItemClassification[item["classification"]]
|
classification = reduce((lambda a, b: a | b), {ItemClassification[str_classification] for str_classification in item["classification"].split(",")})
|
||||||
groups = {Group[group] for group in item["groups"].split(",") if group}
|
groups = {Group[group] for group in item["groups"].split(",") if group}
|
||||||
mod_name = str(item["mod_name"]) if item["mod_name"] else None
|
mod_name = str(item["mod_name"]) if item["mod_name"] else None
|
||||||
items.append(ItemData(id, item["name"], classification, mod_name, groups))
|
items.append(ItemData(id, item["name"], classification, mod_name, groups))
|
||||||
|
|
|
@ -35,7 +35,7 @@ class TestBaseItemGeneration(SVTestBase):
|
||||||
items_to_ignore.extend(baby.name for baby in items.items_by_group[Group.BABY])
|
items_to_ignore.extend(baby.name for baby in items.items_by_group[Group.BABY])
|
||||||
items_to_ignore.extend(resource_pack.name for resource_pack in items.items_by_group[Group.RESOURCE_PACK])
|
items_to_ignore.extend(resource_pack.name for resource_pack in items.items_by_group[Group.RESOURCE_PACK])
|
||||||
items_to_ignore.append("The Gateway Gazette")
|
items_to_ignore.append("The Gateway Gazette")
|
||||||
progression_items = [item for item in items.all_items if item.classification is ItemClassification.progression and item.name not in items_to_ignore]
|
progression_items = [item for item in items.all_items if item.classification & ItemClassification.progression and item.name not in items_to_ignore]
|
||||||
for progression_item in progression_items:
|
for progression_item in progression_items:
|
||||||
with self.subTest(f"{progression_item.name}"):
|
with self.subTest(f"{progression_item.name}"):
|
||||||
self.assertIn(progression_item.name, all_created_items)
|
self.assertIn(progression_item.name, all_created_items)
|
||||||
|
@ -86,7 +86,7 @@ class TestNoGingerIslandItemGeneration(SVTestBase):
|
||||||
items_to_ignore.extend(season.name for season in items.items_by_group[Group.WEAPON])
|
items_to_ignore.extend(season.name for season in items.items_by_group[Group.WEAPON])
|
||||||
items_to_ignore.extend(baby.name for baby in items.items_by_group[Group.BABY])
|
items_to_ignore.extend(baby.name for baby in items.items_by_group[Group.BABY])
|
||||||
items_to_ignore.append("The Gateway Gazette")
|
items_to_ignore.append("The Gateway Gazette")
|
||||||
progression_items = [item for item in items.all_items if item.classification is ItemClassification.progression and item.name not in items_to_ignore]
|
progression_items = [item for item in items.all_items if item.classification & ItemClassification.progression and item.name not in items_to_ignore]
|
||||||
for progression_item in progression_items:
|
for progression_item in progression_items:
|
||||||
with self.subTest(f"{progression_item.name}"):
|
with self.subTest(f"{progression_item.name}"):
|
||||||
if Group.GINGER_ISLAND in progression_item.groups:
|
if Group.GINGER_ISLAND in progression_item.groups:
|
||||||
|
|
|
@ -306,7 +306,7 @@ class SVTestBase(RuleAssertMixin, WorldTestBase, SVTestCase):
|
||||||
|
|
||||||
def create_item(self, item: str) -> StardewItem:
|
def create_item(self, item: str) -> StardewItem:
|
||||||
created_item = self.world.create_item(item)
|
created_item = self.world.create_item(item)
|
||||||
if created_item.classification == ItemClassification.progression:
|
if created_item.classification & ItemClassification.progression:
|
||||||
self.multiworld.worlds[self.player].total_progression_items -= 1
|
self.multiworld.worlds[self.player].total_progression_items -= 1
|
||||||
return created_item
|
return created_item
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ class TestBaseItemGeneration(SVTestBase):
|
||||||
items_to_ignore.extend(baby.name for baby in items.items_by_group[Group.BABY])
|
items_to_ignore.extend(baby.name for baby in items.items_by_group[Group.BABY])
|
||||||
items_to_ignore.extend(resource_pack.name for resource_pack in items.items_by_group[Group.RESOURCE_PACK])
|
items_to_ignore.extend(resource_pack.name for resource_pack in items.items_by_group[Group.RESOURCE_PACK])
|
||||||
items_to_ignore.append("The Gateway Gazette")
|
items_to_ignore.append("The Gateway Gazette")
|
||||||
progression_items = [item for item in items.all_items if item.classification is ItemClassification.progression
|
progression_items = [item for item in items.all_items if item.classification & ItemClassification.progression
|
||||||
and item.name not in items_to_ignore]
|
and item.name not in items_to_ignore]
|
||||||
for progression_item in progression_items:
|
for progression_item in progression_items:
|
||||||
with self.subTest(f"{progression_item.name}"):
|
with self.subTest(f"{progression_item.name}"):
|
||||||
|
@ -105,7 +105,7 @@ class TestNoGingerIslandModItemGeneration(SVTestBase):
|
||||||
items_to_ignore.extend(baby.name for baby in items.items_by_group[Group.BABY])
|
items_to_ignore.extend(baby.name for baby in items.items_by_group[Group.BABY])
|
||||||
items_to_ignore.extend(resource_pack.name for resource_pack in items.items_by_group[Group.RESOURCE_PACK])
|
items_to_ignore.extend(resource_pack.name for resource_pack in items.items_by_group[Group.RESOURCE_PACK])
|
||||||
items_to_ignore.append("The Gateway Gazette")
|
items_to_ignore.append("The Gateway Gazette")
|
||||||
progression_items = [item for item in items.all_items if item.classification is ItemClassification.progression
|
progression_items = [item for item in items.all_items if item.classification & ItemClassification.progression
|
||||||
and item.name not in items_to_ignore]
|
and item.name not in items_to_ignore]
|
||||||
for progression_item in progression_items:
|
for progression_item in progression_items:
|
||||||
with self.subTest(f"{progression_item.name}"):
|
with self.subTest(f"{progression_item.name}"):
|
||||||
|
|
|
@ -8,5 +8,5 @@ class TestHasProgressionPercent(unittest.TestCase):
|
||||||
def test_max_item_amount_is_full_collection(self):
|
def test_max_item_amount_is_full_collection(self):
|
||||||
# Not caching because it fails too often for some reason
|
# Not caching because it fails too often for some reason
|
||||||
with solo_multiworld(world_caching=False) as (multiworld, world):
|
with solo_multiworld(world_caching=False) as (multiworld, world):
|
||||||
progression_item_count = sum(1 for i in multiworld.get_items() if ItemClassification.progression in i.classification)
|
progression_item_count = sum(1 for i in multiworld.get_items() if i.classification & ItemClassification.progression)
|
||||||
self.assertEqual(world.total_progression_items, progression_item_count - 1) # -1 to skip Victory
|
self.assertEqual(world.total_progression_items, progression_item_count - 1) # -1 to skip Victory
|
||||||
|
|
Loading…
Reference in New Issue