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:
|
||||
override_classification = item.classification
|
||||
|
||||
if override_classification == ItemClassification.progression:
|
||||
if override_classification & ItemClassification.progression:
|
||||
self.total_progression_items += 1
|
||||
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,
|
||||
20,Minecarts Repair,useful,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,,
|
||||
24,Progressive Backpack,progression,,
|
||||
25,Rusty Sword,filler,"WEAPON,DEPRECATED",
|
||||
|
|
|
|
@ -2,6 +2,7 @@ import csv
|
|||
import enum
|
||||
import logging
|
||||
from dataclasses import dataclass, field
|
||||
from functools import reduce
|
||||
from pathlib import Path
|
||||
from random import Random
|
||||
from typing import Dict, List, Protocol, Union, Set, Optional
|
||||
|
@ -134,7 +135,7 @@ def load_item_csv():
|
|||
item_reader = csv.DictReader(file)
|
||||
for item in item_reader:
|
||||
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}
|
||||
mod_name = str(item["mod_name"]) if item["mod_name"] else None
|
||||
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(resource_pack.name for resource_pack in items.items_by_group[Group.RESOURCE_PACK])
|
||||
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:
|
||||
with self.subTest(f"{progression_item.name}"):
|
||||
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(baby.name for baby in items.items_by_group[Group.BABY])
|
||||
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:
|
||||
with self.subTest(f"{progression_item.name}"):
|
||||
if Group.GINGER_ISLAND in progression_item.groups:
|
||||
|
|
|
@ -306,7 +306,7 @@ class SVTestBase(RuleAssertMixin, WorldTestBase, SVTestCase):
|
|||
|
||||
def create_item(self, item: str) -> StardewItem:
|
||||
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
|
||||
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(resource_pack.name for resource_pack in items.items_by_group[Group.RESOURCE_PACK])
|
||||
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]
|
||||
for progression_item in progression_items:
|
||||
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(resource_pack.name for resource_pack in items.items_by_group[Group.RESOURCE_PACK])
|
||||
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]
|
||||
for progression_item in progression_items:
|
||||
with self.subTest(f"{progression_item.name}"):
|
||||
|
|
|
@ -8,5 +8,5 @@ class TestHasProgressionPercent(unittest.TestCase):
|
|||
def test_max_item_amount_is_full_collection(self):
|
||||
# Not caching because it fails too often for some reason
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue