Initial pass at Golden Pack.

This commit is contained in:
Greyson Parrelli
2026-07-24 07:47:05 -04:00
parent e74f983470
commit dd395f4bbf
27 changed files with 2770 additions and 150 deletions
+26
View File
@@ -0,0 +1,26 @@
package game
import "testing"
// Regression (improvements.txt): a Crocodile set aside must still throw its
// last-pet volley when the enemy plays their final pet, even though the
// Crocodile's own side is already out of pets. Previously the "battle over"
// check fired first and swallowed the parting shot.
func TestCrocodileLastPetVolleyFiresWhenOwnerOut(t *testing.T) {
g, _, _ := testGame(t)
g.RollDie = func() int { return 2 } // 3 rocks -> 6 damage
res := forceBattle(t, g,
[]Card{g.pet("Killer", 4), g.pet("Last", 3)}, // seat 0 plays its last pet
[]Card{g.realPet(t, "Crocodile")}, // seat 1's Croc faints, sets aside
)
// Killer trades with Crocodile (set aside). Seat 0 then plays its last pet,
// and the Crocodile's 3 rocks (roll 6) pelt it dead — turning a win into a
// mutual knockout.
rocks := eventsOfType(res, "rock")
if len(rocks) != 1 || rocks[0].Seat != 1 || rocks[0].Roll != 6 || !rocks[0].TargetDied {
t.Fatalf("Crocodile should volley the last pet for 6: %+v", rocks)
}
if res.WinnerSeat != -1 {
t.Fatalf("both sides should be out (draw), got winner %d", res.WinnerSeat)
}
}