| 
									
										
										
											
												Stardew Valley 6.x.x: The Content Update (#3478)
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
											
										 
											2024-07-07 16:04:25 +03:00
										 |  |  | from .. import SVContentPackTestBase | 
					
						
							| 
									
										
										
										
											2025-05-13 03:58:03 -04:00
										 |  |  | from ...bases import SVTestBase | 
					
						
							| 
									
										
										
											
												Stardew Valley 6.x.x: The Content Update (#3478)
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
											
										 
											2024-07-07 16:04:25 +03:00
										 |  |  | from .... import options | 
					
						
							|  |  |  | from ....content import content_packs | 
					
						
							|  |  |  | from ....mods.mod_data import ModNames | 
					
						
							|  |  |  | from ....strings.fish_names import SVEFish | 
					
						
							|  |  |  | from ....strings.villager_names import ModNPC, NPC | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | vanilla_villagers = 33 | 
					
						
							|  |  |  | vanilla_villagers_with_leo = 34 | 
					
						
							|  |  |  | sve_villagers = 13 | 
					
						
							|  |  |  | sve_villagers_with_lance = 14 | 
					
						
							|  |  |  | vanilla_pelican_town_fish = 63 | 
					
						
							|  |  |  | vanilla_ginger_island_fish = 3 | 
					
						
							|  |  |  | sve_pelican_town_fish = 16 | 
					
						
							|  |  |  | sve_ginger_island_fish = 10 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestVanilla(SVContentPackTestBase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_wizard_is_not_bachelor(self): | 
					
						
							|  |  |  |         self.assertFalse(self.content.villagers[NPC.wizard].bachelor) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestSVE(SVContentPackTestBase): | 
					
						
							|  |  |  |     mods = (ModNames.sve,) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_lance_is_not_included(self): | 
					
						
							|  |  |  |         self.assertNotIn(ModNPC.lance, self.content.villagers) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_wizard_is_bachelor(self): | 
					
						
							|  |  |  |         self.assertTrue(self.content.villagers[NPC.wizard].bachelor) | 
					
						
							|  |  |  |         self.assertEqual(self.content.villagers[NPC.wizard].mod_name, ModNames.sve) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_sve_npc_are_included(self): | 
					
						
							|  |  |  |         self.assertIn(ModNPC.apples, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.claire, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.olivia, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.sophia, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.victor, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.andy, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.gunther, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.martin, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.marlon, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.morgan, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.morris, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.scarlett, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.susan, self.content.villagers) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(vanilla_villagers + sve_villagers, len(self.content.villagers)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_sve_has_sve_fish(self): | 
					
						
							|  |  |  |         fish_names = self.content.fishes.keys() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertIn(SVEFish.bonefish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.bull_trout, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.butterfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.frog, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.goldenfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.grass_carp, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.king_salmon, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.kittyfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.meteor_carp, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.minnow, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.puppyfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.radioactive_bass, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.snatcher_worm, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.undeadfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.void_eel, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.water_grub, fish_names) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(vanilla_pelican_town_fish + sve_pelican_town_fish, len(self.content.fishes)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestSVEWithGingerIsland(SVContentPackTestBase): | 
					
						
							|  |  |  |     vanilla_packs = SVContentPackTestBase.vanilla_packs + (content_packs.ginger_island_content_pack,) | 
					
						
							|  |  |  |     mods = (ModNames.sve,) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_lance_is_included(self): | 
					
						
							|  |  |  |         self.assertIn(ModNPC.lance, self.content.villagers) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_other_sve_npc_are_included(self): | 
					
						
							|  |  |  |         self.assertIn(ModNPC.apples, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.claire, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.olivia, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.sophia, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.victor, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.andy, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.gunther, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.martin, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.marlon, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.morgan, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.morris, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.scarlett, self.content.villagers) | 
					
						
							|  |  |  |         self.assertIn(ModNPC.susan, self.content.villagers) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(vanilla_villagers_with_leo + sve_villagers_with_lance, len(self.content.villagers)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_sve_has_sve_fish(self): | 
					
						
							|  |  |  |         fish_names = self.content.fishes.keys() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertIn(SVEFish.baby_lunaloo, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.bonefish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.bull_trout, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.butterfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.clownfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.daggerfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.frog, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.gemfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.goldenfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.grass_carp, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.king_salmon, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.kittyfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.lunaloo, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.meteor_carp, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.minnow, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.puppyfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.radioactive_bass, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.seahorse, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.shiny_lunaloo, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.snatcher_worm, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.starfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.torpedo_trout, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.undeadfish, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.void_eel, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.water_grub, fish_names) | 
					
						
							|  |  |  |         self.assertIn(SVEFish.sea_sponge, fish_names) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(vanilla_pelican_town_fish + vanilla_ginger_island_fish + sve_pelican_town_fish + sve_ginger_island_fish, len(self.content.fishes)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestSVEWithoutGingerIslandE2E(SVTestBase): | 
					
						
							|  |  |  |     options = { | 
					
						
							|  |  |  |         options.ExcludeGingerIsland: options.ExcludeGingerIsland.option_true, | 
					
						
							|  |  |  |         options.Mods: ModNames.sve | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_lance_is_not_in_the_pool(self): | 
					
						
							|  |  |  |         for item in self.multiworld.itempool: | 
					
						
							|  |  |  |             self.assertFalse(("Friendsanity: " + ModNPC.lance) in item.name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for location in self.multiworld.get_locations(self.player): | 
					
						
							|  |  |  |             self.assertFalse(("Friendsanity: " + ModNPC.lance) in location.name) |