372 lines
20 KiB
Python
372 lines
20 KiB
Python
from collections import Counter
|
|
|
|
from . import SVTestBase
|
|
from .. import options
|
|
from ..strings.animal_names import Animal
|
|
from ..strings.animal_product_names import AnimalProduct
|
|
from ..strings.artisan_good_names import ArtisanGood
|
|
from ..strings.crop_names import Vegetable
|
|
from ..strings.food_names import Meal
|
|
from ..strings.ingredient_names import Ingredient
|
|
from ..strings.machine_names import Machine
|
|
from ..strings.region_names import Region
|
|
from ..strings.season_names import Season
|
|
from ..strings.seed_names import Seed
|
|
|
|
|
|
class TestProgressiveToolsLogic(SVTestBase):
|
|
options = {
|
|
options.ToolProgression.internal_name: options.ToolProgression.option_progressive,
|
|
options.SeasonRandomization.internal_name: options.SeasonRandomization.option_randomized,
|
|
}
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.multiworld.state.prog_items = Counter()
|
|
|
|
def test_sturgeon(self):
|
|
self.assertFalse(self.world.logic.has("Sturgeon")(self.multiworld.state))
|
|
|
|
summer = self.world.create_item("Summer")
|
|
self.multiworld.state.collect(summer, event=True)
|
|
self.assertFalse(self.world.logic.has("Sturgeon")(self.multiworld.state))
|
|
|
|
fishing_rod = self.world.create_item("Progressive Fishing Rod")
|
|
self.multiworld.state.collect(fishing_rod, event=True)
|
|
self.multiworld.state.collect(fishing_rod, event=True)
|
|
self.assertFalse(self.world.logic.has("Sturgeon")(self.multiworld.state))
|
|
|
|
fishing_level = self.world.create_item("Fishing Level")
|
|
self.multiworld.state.collect(fishing_level, event=True)
|
|
self.assertFalse(self.world.logic.has("Sturgeon")(self.multiworld.state))
|
|
|
|
self.multiworld.state.collect(fishing_level, event=True)
|
|
self.multiworld.state.collect(fishing_level, event=True)
|
|
self.multiworld.state.collect(fishing_level, event=True)
|
|
self.multiworld.state.collect(fishing_level, event=True)
|
|
self.multiworld.state.collect(fishing_level, event=True)
|
|
self.assertTrue(self.world.logic.has("Sturgeon")(self.multiworld.state))
|
|
|
|
self.remove(summer)
|
|
self.assertFalse(self.world.logic.has("Sturgeon")(self.multiworld.state))
|
|
|
|
winter = self.world.create_item("Winter")
|
|
self.multiworld.state.collect(winter, event=True)
|
|
self.assertTrue(self.world.logic.has("Sturgeon")(self.multiworld.state))
|
|
|
|
self.remove(fishing_rod)
|
|
self.assertFalse(self.world.logic.has("Sturgeon")(self.multiworld.state))
|
|
|
|
def test_old_master_cannoli(self):
|
|
self.multiworld.state.collect(self.world.create_item("Progressive Axe"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Progressive Axe"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Summer"), event=True)
|
|
|
|
self.assertFalse(self.world.logic.can_reach_location("Old Master Cannoli")(self.multiworld.state))
|
|
|
|
fall = self.world.create_item("Fall")
|
|
self.multiworld.state.collect(fall, event=True)
|
|
self.assertFalse(self.world.logic.can_reach_location("Old Master Cannoli")(self.multiworld.state))
|
|
|
|
tuesday = self.world.create_item("Traveling Merchant: Tuesday")
|
|
self.multiworld.state.collect(tuesday, event=True)
|
|
self.assertFalse(self.world.logic.can_reach_location("Old Master Cannoli")(self.multiworld.state))
|
|
|
|
rare_seed = self.world.create_item("Rare Seed")
|
|
self.multiworld.state.collect(rare_seed, event=True)
|
|
self.assertTrue(self.world.logic.can_reach_location("Old Master Cannoli")(self.multiworld.state))
|
|
|
|
self.remove(fall)
|
|
self.assertFalse(self.world.logic.can_reach_location("Old Master Cannoli")(self.multiworld.state))
|
|
self.remove(tuesday)
|
|
|
|
green_house = self.world.create_item("Greenhouse")
|
|
self.multiworld.state.collect(green_house, event=True)
|
|
self.assertFalse(self.world.logic.can_reach_location("Old Master Cannoli")(self.multiworld.state))
|
|
|
|
friday = self.world.create_item("Traveling Merchant: Friday")
|
|
self.multiworld.state.collect(friday, event=True)
|
|
self.assertTrue(self.multiworld.get_location("Old Master Cannoli", 1).access_rule(self.multiworld.state))
|
|
|
|
self.remove(green_house)
|
|
self.assertFalse(self.world.logic.can_reach_location("Old Master Cannoli")(self.multiworld.state))
|
|
self.remove(friday)
|
|
|
|
|
|
class TestBundlesLogic(SVTestBase):
|
|
options = {
|
|
}
|
|
|
|
def test_vault_2500g_bundle(self):
|
|
self.assertTrue(self.world.logic.can_reach_location("2,500g Bundle")(self.multiworld.state))
|
|
|
|
|
|
class TestBuildingLogic(SVTestBase):
|
|
options = {
|
|
options.BuildingProgression.internal_name: options.BuildingProgression.option_progressive_early_shipping_bin
|
|
}
|
|
|
|
def test_coop_blueprint(self):
|
|
self.assertFalse(self.world.logic.can_reach_location("Coop Blueprint")(self.multiworld.state))
|
|
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.assertTrue(self.world.logic.can_reach_location("Coop Blueprint")(self.multiworld.state))
|
|
|
|
def test_big_coop_blueprint(self):
|
|
self.assertFalse(self.world.logic.can_reach_location("Big Coop Blueprint")(self.multiworld.state),
|
|
f"Rule is {repr(self.multiworld.get_location('Big Coop Blueprint', self.player).access_rule)}")
|
|
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.assertFalse(self.world.logic.can_reach_location("Big Coop Blueprint")(self.multiworld.state),
|
|
f"Rule is {repr(self.multiworld.get_location('Big Coop Blueprint', self.player).access_rule)}")
|
|
|
|
self.multiworld.state.collect(self.world.create_item("Progressive Coop"), event=True)
|
|
self.assertTrue(self.world.logic.can_reach_location("Big Coop Blueprint")(self.multiworld.state),
|
|
f"Rule is {repr(self.multiworld.get_location('Big Coop Blueprint', self.player).access_rule)}")
|
|
|
|
def test_deluxe_coop_blueprint(self):
|
|
self.assertFalse(self.world.logic.can_reach_location("Deluxe Coop Blueprint")(self.multiworld.state))
|
|
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.assertFalse(self.world.logic.can_reach_location("Deluxe Coop Blueprint")(self.multiworld.state))
|
|
|
|
self.multiworld.state.collect(self.world.create_item("Progressive Coop"), event=True)
|
|
self.assertFalse(self.world.logic.can_reach_location("Deluxe Coop Blueprint")(self.multiworld.state))
|
|
|
|
self.multiworld.state.collect(self.world.create_item("Progressive Coop"), event=True)
|
|
self.assertTrue(self.world.logic.can_reach_location("Deluxe Coop Blueprint")(self.multiworld.state))
|
|
|
|
def test_big_shed_blueprint(self):
|
|
self.assertFalse(self.world.logic.can_reach_location("Big Shed Blueprint")(self.multiworld.state),
|
|
f"Rule is {repr(self.multiworld.get_location('Big Shed Blueprint', self.player).access_rule)}")
|
|
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Month End"), event=True)
|
|
self.assertFalse(self.world.logic.can_reach_location("Big Shed Blueprint")(self.multiworld.state),
|
|
f"Rule is {repr(self.multiworld.get_location('Big Shed Blueprint', self.player).access_rule)}")
|
|
|
|
self.multiworld.state.collect(self.world.create_item("Progressive Shed"), event=True)
|
|
self.assertTrue(self.world.logic.can_reach_location("Big Shed Blueprint")(self.multiworld.state),
|
|
f"Rule is {repr(self.multiworld.get_location('Big Shed Blueprint', self.player).access_rule)}")
|
|
|
|
|
|
class TestArcadeMachinesLogic(SVTestBase):
|
|
options = {
|
|
options.ArcadeMachineLocations.internal_name: options.ArcadeMachineLocations.option_full_shuffling,
|
|
}
|
|
|
|
def test_prairie_king(self):
|
|
self.assertFalse(self.world.logic.can_reach_region("JotPK World 1")(self.multiworld.state))
|
|
self.assertFalse(self.world.logic.can_reach_region("JotPK World 2")(self.multiworld.state))
|
|
self.assertFalse(self.world.logic.can_reach_region("JotPK World 3")(self.multiworld.state))
|
|
self.assertFalse(self.world.logic.can_reach_location("Journey of the Prairie King Victory")(self.multiworld.state))
|
|
|
|
boots = self.world.create_item("JotPK: Progressive Boots")
|
|
gun = self.world.create_item("JotPK: Progressive Gun")
|
|
ammo = self.world.create_item("JotPK: Progressive Ammo")
|
|
life = self.world.create_item("JotPK: Extra Life")
|
|
drop = self.world.create_item("JotPK: Increased Drop Rate")
|
|
|
|
self.multiworld.state.collect(boots, event=True)
|
|
self.multiworld.state.collect(gun, event=True)
|
|
self.assertTrue(self.world.logic.can_reach_region("JotPK World 1")(self.multiworld.state))
|
|
self.assertFalse(self.world.logic.can_reach_region("JotPK World 2")(self.multiworld.state))
|
|
self.assertFalse(self.world.logic.can_reach_region("JotPK World 3")(self.multiworld.state))
|
|
self.assertFalse(self.world.logic.can_reach_location("Journey of the Prairie King Victory")(self.multiworld.state))
|
|
self.remove(boots)
|
|
self.remove(gun)
|
|
|
|
self.multiworld.state.collect(boots, event=True)
|
|
self.multiworld.state.collect(boots, event=True)
|
|
self.assertTrue(self.world.logic.can_reach_region("JotPK World 1")(self.multiworld.state))
|
|
self.assertFalse(self.world.logic.can_reach_region("JotPK World 2")(self.multiworld.state))
|
|
self.assertFalse(self.world.logic.can_reach_region("JotPK World 3")(self.multiworld.state))
|
|
self.assertFalse(self.world.logic.can_reach_location("Journey of the Prairie King Victory")(self.multiworld.state))
|
|
self.remove(boots)
|
|
self.remove(boots)
|
|
|
|
self.multiworld.state.collect(boots, event=True)
|
|
self.multiworld.state.collect(gun, event=True)
|
|
self.multiworld.state.collect(ammo, event=True)
|
|
self.multiworld.state.collect(life, event=True)
|
|
self.assertTrue(self.world.logic.can_reach_region("JotPK World 1")(self.multiworld.state))
|
|
self.assertTrue(self.world.logic.can_reach_region("JotPK World 2")(self.multiworld.state))
|
|
self.assertFalse(self.world.logic.can_reach_region("JotPK World 3")(self.multiworld.state))
|
|
self.assertFalse(self.world.logic.can_reach_location("Journey of the Prairie King Victory")(self.multiworld.state))
|
|
self.remove(boots)
|
|
self.remove(gun)
|
|
self.remove(ammo)
|
|
self.remove(life)
|
|
|
|
self.multiworld.state.collect(boots, event=True)
|
|
self.multiworld.state.collect(gun, event=True)
|
|
self.multiworld.state.collect(gun, event=True)
|
|
self.multiworld.state.collect(ammo, event=True)
|
|
self.multiworld.state.collect(ammo, event=True)
|
|
self.multiworld.state.collect(life, event=True)
|
|
self.multiworld.state.collect(drop, event=True)
|
|
self.assertTrue(self.world.logic.can_reach_region("JotPK World 1")(self.multiworld.state))
|
|
self.assertTrue(self.world.logic.can_reach_region("JotPK World 2")(self.multiworld.state))
|
|
self.assertTrue(self.world.logic.can_reach_region("JotPK World 3")(self.multiworld.state))
|
|
self.assertFalse(self.world.logic.can_reach_location("Journey of the Prairie King Victory")(self.multiworld.state))
|
|
self.remove(boots)
|
|
self.remove(gun)
|
|
self.remove(gun)
|
|
self.remove(ammo)
|
|
self.remove(ammo)
|
|
self.remove(life)
|
|
self.remove(drop)
|
|
|
|
self.multiworld.state.collect(boots, event=True)
|
|
self.multiworld.state.collect(boots, event=True)
|
|
self.multiworld.state.collect(gun, event=True)
|
|
self.multiworld.state.collect(gun, event=True)
|
|
self.multiworld.state.collect(gun, event=True)
|
|
self.multiworld.state.collect(gun, event=True)
|
|
self.multiworld.state.collect(ammo, event=True)
|
|
self.multiworld.state.collect(ammo, event=True)
|
|
self.multiworld.state.collect(ammo, event=True)
|
|
self.multiworld.state.collect(life, event=True)
|
|
self.multiworld.state.collect(drop, event=True)
|
|
self.assertTrue(self.world.logic.can_reach_region("JotPK World 1")(self.multiworld.state))
|
|
self.assertTrue(self.world.logic.can_reach_region("JotPK World 2")(self.multiworld.state))
|
|
self.assertTrue(self.world.logic.can_reach_region("JotPK World 3")(self.multiworld.state))
|
|
self.assertTrue(self.world.logic.can_reach_location("Journey of the Prairie King Victory")(self.multiworld.state))
|
|
self.remove(boots)
|
|
self.remove(boots)
|
|
self.remove(gun)
|
|
self.remove(gun)
|
|
self.remove(gun)
|
|
self.remove(gun)
|
|
self.remove(ammo)
|
|
self.remove(ammo)
|
|
self.remove(ammo)
|
|
self.remove(life)
|
|
self.remove(drop)
|
|
|
|
|
|
class TestWeaponsLogic(SVTestBase):
|
|
options = {
|
|
options.ToolProgression.internal_name: options.ToolProgression.option_progressive,
|
|
options.SkillProgression.internal_name: options.SkillProgression.option_progressive,
|
|
}
|
|
|
|
def test_mine(self):
|
|
self.collect(self.world.create_item("Adventurer's Guild"))
|
|
self.multiworld.state.collect(self.world.create_item("Progressive Pickaxe"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Progressive Pickaxe"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Progressive Pickaxe"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Progressive Pickaxe"), event=True)
|
|
self.collect([self.world.create_item("Combat Level")] * 10)
|
|
self.collect([self.world.create_item("Progressive Mine Elevator")] * 24)
|
|
self.multiworld.state.collect(self.world.create_item("Bus Repair"), event=True)
|
|
self.multiworld.state.collect(self.world.create_item("Skull Key"), event=True)
|
|
|
|
self.GiveItemAndCheckReachableMine("Rusty Sword", 1)
|
|
self.GiveItemAndCheckReachableMine("Wooden Blade", 1)
|
|
self.GiveItemAndCheckReachableMine("Elf Blade", 1)
|
|
|
|
self.GiveItemAndCheckReachableMine("Silver Saber", 2)
|
|
self.GiveItemAndCheckReachableMine("Crystal Dagger", 2)
|
|
|
|
self.GiveItemAndCheckReachableMine("Claymore", 3)
|
|
self.GiveItemAndCheckReachableMine("Obsidian Edge", 3)
|
|
self.GiveItemAndCheckReachableMine("Bone Sword", 3)
|
|
|
|
self.GiveItemAndCheckReachableMine("The Slammer", 4)
|
|
self.GiveItemAndCheckReachableMine("Lava Katana", 4)
|
|
|
|
self.GiveItemAndCheckReachableMine("Galaxy Sword", 5)
|
|
self.GiveItemAndCheckReachableMine("Galaxy Hammer", 5)
|
|
self.GiveItemAndCheckReachableMine("Galaxy Dagger", 5)
|
|
|
|
def GiveItemAndCheckReachableMine(self, item_name: str, reachable_level: int):
|
|
item = self.multiworld.create_item(item_name, self.player)
|
|
self.multiworld.state.collect(item, event=True)
|
|
if reachable_level > 0:
|
|
self.assertTrue(self.world.logic.can_mine_in_the_mines_floor_1_40()(self.multiworld.state))
|
|
else:
|
|
self.assertFalse(self.world.logic.can_mine_in_the_mines_floor_1_40()(self.multiworld.state))
|
|
|
|
if reachable_level > 1:
|
|
self.assertTrue(self.world.logic.can_mine_in_the_mines_floor_41_80()(self.multiworld.state))
|
|
else:
|
|
self.assertFalse(self.world.logic.can_mine_in_the_mines_floor_41_80()(self.multiworld.state))
|
|
|
|
if reachable_level > 2:
|
|
self.assertTrue(self.world.logic.can_mine_in_the_mines_floor_81_120()(self.multiworld.state))
|
|
else:
|
|
self.assertFalse(self.world.logic.can_mine_in_the_mines_floor_81_120()(self.multiworld.state))
|
|
|
|
if reachable_level > 3:
|
|
self.assertTrue(self.world.logic.can_mine_in_the_skull_cavern()(self.multiworld.state))
|
|
else:
|
|
self.assertFalse(self.world.logic.can_mine_in_the_skull_cavern()(self.multiworld.state))
|
|
|
|
if reachable_level > 4:
|
|
self.assertTrue(self.world.logic.can_mine_perfectly_in_the_skull_cavern()(self.multiworld.state))
|
|
else:
|
|
self.assertFalse(self.world.logic.can_mine_perfectly_in_the_skull_cavern()(self.multiworld.state))
|
|
|
|
self.remove(item)
|
|
|
|
|
|
class TestRecipeLogic(SVTestBase):
|
|
options = {
|
|
options.BuildingProgression.internal_name: options.BuildingProgression.option_progressive,
|
|
options.SkillProgression.internal_name: options.SkillProgression.option_progressive,
|
|
options.Cropsanity.internal_name: options.Cropsanity.option_shuffled,
|
|
}
|
|
|
|
# I wanted to make a test for different ways to obtain a pizza, but I'm stuck not knowing how to block the immediate purchase from Gus
|
|
# def test_pizza(self):
|
|
# world = self.world
|
|
# logic = world.logic
|
|
# multiworld = self.multiworld
|
|
#
|
|
# self.assertTrue(logic.has(Ingredient.wheat_flour)(multiworld.state))
|
|
# self.assertTrue(logic.can_spend_money_at(Region.saloon, 150)(multiworld.state))
|
|
# self.assertFalse(logic.has(Meal.pizza)(multiworld.state))
|
|
#
|
|
# self.assertFalse(logic.can_cook()(multiworld.state))
|
|
# self.collect(world.create_item("Progressive House"))
|
|
# self.assertTrue(logic.can_cook()(multiworld.state))
|
|
# self.assertFalse(logic.has(Meal.pizza)(multiworld.state))
|
|
#
|
|
# self.assertFalse(logic.has(Seed.tomato)(multiworld.state))
|
|
# self.collect(world.create_item(Seed.tomato))
|
|
# self.assertTrue(logic.has(Seed.tomato)(multiworld.state))
|
|
# self.assertFalse(logic.has(Meal.pizza)(multiworld.state))
|
|
#
|
|
# self.assertFalse(logic.has(Vegetable.tomato)(multiworld.state))
|
|
# self.collect(world.create_item(Season.summer))
|
|
# self.assertTrue(logic.has(Vegetable.tomato)(multiworld.state))
|
|
# self.assertFalse(logic.has(Meal.pizza)(multiworld.state))
|
|
#
|
|
# self.assertFalse(logic.has(Animal.cow)(multiworld.state))
|
|
# self.assertFalse(logic.has(AnimalProduct.cow_milk)(multiworld.state))
|
|
# self.collect(world.create_item("Progressive Barn"))
|
|
# self.assertTrue(logic.has(Animal.cow)(multiworld.state))
|
|
# self.assertTrue(logic.has(AnimalProduct.cow_milk)(multiworld.state))
|
|
# self.assertFalse(logic.has(Meal.pizza)(multiworld.state))
|
|
#
|
|
# self.assertFalse(logic.has(Machine.cheese_press)(self.multiworld.state))
|
|
# self.assertFalse(logic.has(ArtisanGood.cheese)(self.multiworld.state))
|
|
# self.collect(world.create_item(item) for item in ["Farming Level"] * 6)
|
|
# self.collect(world.create_item(item) for item in ["Progressive Axe"] * 2)
|
|
# self.assertTrue(logic.has(Machine.cheese_press)(self.multiworld.state))
|
|
# self.assertTrue(logic.has(ArtisanGood.cheese)(self.multiworld.state))
|
|
# self.assertTrue(logic.has(Meal.pizza)(self.multiworld.state))
|