Livelier frontier: 2-day raids, more and shorter happenings
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
bf013a1648
commit
db1a00e8aa
5 changed files with 201 additions and 48 deletions
|
|
@ -392,7 +392,7 @@ class EventTest(unittest.TestCase):
|
|||
self.assertIn("size", view)
|
||||
self.assertNotIn("strength", view)
|
||||
self.assertEqual(view["recon_next"], 0)
|
||||
late = raid["fire_at"] - 12 * game.HOUR
|
||||
late = raid["fire_at"] - 25 * game.HOUR
|
||||
self.assertEqual(game.intel_level(world, raid, late), 2)
|
||||
view = game.event_view(world, raid, raid["fire_at"] - game.HOUR)
|
||||
self.assertEqual(view["intel"], 3)
|
||||
|
|
@ -413,6 +413,28 @@ class EventTest(unittest.TestCase):
|
|||
self.assertIsNotNone(p["action"]) # still trains the skill
|
||||
self.assertEqual(game.event_view(world, raid, T0)["recon"], full)
|
||||
|
||||
def test_threats_land_every_two_days_and_the_camp_opens_a_day_out(self):
|
||||
world = world_with(("sam", "ranger"))
|
||||
raid = self.announce(world)
|
||||
self.assertLessEqual(abs(raid["fire_at"] - (T0 + 48 * game.HOUR)), 2 * game.HOUR)
|
||||
raid["recon"] = game.intel_costs(raid)[-1]
|
||||
self.assertEqual(game.intel_level(world, raid, raid["fire_at"] - 24 * game.HOUR - 1), 2)
|
||||
self.assertEqual(game.intel_level(world, raid, raid["fire_at"] - 24 * game.HOUR), 3)
|
||||
raid["strength"] = 0
|
||||
game.tick(world, raid["fire_at"], random.Random(3))
|
||||
following = game.upcoming_raid(world)
|
||||
self.assertIsNotNone(following) # rumoured the moment the last one lands
|
||||
self.assertEqual(following["slot"], raid["slot"] + 48 * game.HOUR)
|
||||
|
||||
def test_v26_worlds_get_livelier_tracks(self):
|
||||
world = world_with()
|
||||
world["version"] = 26
|
||||
world["next_fortune_at"] = T0 + 70 * game.HOUR
|
||||
world["next_event_at"] = T0 + 20 * game.HOUR
|
||||
game.migrate(world, T0)
|
||||
self.assertEqual(world["next_fortune_at"], T0 + 20 * game.HOUR)
|
||||
self.assertEqual(world["next_event_at"], T0)
|
||||
|
||||
def test_bigger_bands_take_more_scouting(self):
|
||||
small = {"kind": "raid", "strength": 20}
|
||||
huge = {"kind": "raid", "strength": 150}
|
||||
|
|
@ -1315,6 +1337,20 @@ class HappeningsTest(unittest.TestCase):
|
|||
game.tick(self.world, T0 + 13 * game.HOUR, self.rng)
|
||||
self.assertFalse(any(e["kind"] == "harvest" for e in self.city["effects"]))
|
||||
|
||||
def test_new_happenings(self):
|
||||
game._fortune(self.world, T0, self.rng, "masons")
|
||||
self.assertEqual(game.skill_mods(self.world, game.ACTION_BY_ID["clear_rockslide"])["speed"], 0.75)
|
||||
self.city["treasury"] = 1000
|
||||
game._hardship(self.world, T0, self.rng, "taxman")
|
||||
self.assertEqual(self.city["treasury"], 850)
|
||||
game._minor_threat(self.world, T0, self.rng, "smugglers")
|
||||
game.tick(self.world, T0 + 2 * game.HOUR + 1, self.rng)
|
||||
self.assertLess(self.city["treasury"], 850)
|
||||
game._minor_threat(self.world, T0, self.rng, "bridge")
|
||||
p = self.world["players"]["ann"]
|
||||
hunt = next(a for a in game.ACTIONS if a["skill"] == "hunting" and not a.get("special"))
|
||||
self.assertTrue(game.can_start(self.world, p, hunt))
|
||||
|
||||
def test_festival_boosts_favour(self):
|
||||
game._fortune(self.world, T0, self.rng, "festival")
|
||||
p = self.world["players"]["ann"]
|
||||
|
|
@ -1340,7 +1376,7 @@ class HappeningsTest(unittest.TestCase):
|
|||
"strength": 1000, "group": "a green dragon", "trait": "x"})
|
||||
self.assertEqual(game.upcoming_raid(self.world)["kind"], "dragon")
|
||||
game.tick(self.world, T0 + 20, self.rng)
|
||||
report = self.world["events"][-1]["report"]
|
||||
report = next(e for e in self.world["events"] if e["id"] == 99)["report"]
|
||||
self.assertIn("ablaze", report["title"])
|
||||
self.assertTrue(self.city["buildings"]["houses"]["damaged"])
|
||||
self.assertLess(self.city["stockpile"]["logs"], 500)
|
||||
|
|
@ -1352,7 +1388,7 @@ class HappeningsTest(unittest.TestCase):
|
|||
tracks = [e.get("track") for e in self.world["events"]]
|
||||
self.assertIn("fortune", tracks)
|
||||
self.assertIn("hardship", tracks)
|
||||
self.assertGreater(self.world["next_fortune_at"], T0 + 30 * game.HOUR)
|
||||
self.assertGreater(self.world["next_fortune_at"], T0 + 8 * game.HOUR)
|
||||
|
||||
def test_v7_worlds_get_weather_and_tracks(self):
|
||||
world = world_with()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue