Spionen: to spioner i flertal, også når de slipper
Fra QA: med to spioner åbnede resultatet stadig med en replik i ental, når begge slap (lighed, ingen stemmer) eller den anklagede var uskyldig. Nu er der result_free_two og result_innocent_two (den sidste også generisk). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+4
-5
@@ -28,7 +28,7 @@ HURRY_BEFORE = 10
|
||||
# Replikker uden navne og uden ordet: dem kan tts_warm lave på forhånd (resten har en generisk afløser).
|
||||
FIXED_LINES = ("lobby_welcome", "round_first", "round_last", "clue_hurry", "clue_all_done", "clues_intro",
|
||||
"clues_missing", "talk_start", "vote_start", "vote_all_done", "verdict_tie", "verdict_none",
|
||||
"result_guessed", "result_missed", "result_timeout", "result_free", "result_left", "result_half", "play_again")
|
||||
"result_guessed", "result_missed", "result_timeout", "result_free", "result_free_two", "result_left", "result_half", "play_again")
|
||||
AWARD_LINES = {"liar": "award_liar", "sharp": "award_sharp", "suspected": "award_suspected"}
|
||||
|
||||
|
||||
@@ -115,9 +115,9 @@ class SpionRoom(rooms.BaseRoom):
|
||||
if t == "guess":
|
||||
return [line("guess_start", navn=ev["name"])]
|
||||
if t == "result":
|
||||
out = []
|
||||
out, two = [], len(ev["spies"]) > 1
|
||||
if ev["accused_innocent"]:
|
||||
out.append(line("result_innocent", navn=self._accused_name()))
|
||||
out.append(line("result_innocent_two" if two else "result_innocent", navn=self._accused_name()))
|
||||
elif ev["spies_left"]:
|
||||
out.append(line("result_left"))
|
||||
elif ev["caught"] and len(ev["spies"]) > 1 and not ev["guessed"]:
|
||||
@@ -126,8 +126,7 @@ class SpionRoom(rooms.BaseRoom):
|
||||
g = self.game
|
||||
out.append(line("result_guessed" if ev["guessed"] else "result_missed" if g.guess else "result_timeout"))
|
||||
else:
|
||||
out.append(line("result_free"))
|
||||
two = len(ev["spies"]) > 1
|
||||
out.append(line("result_free_two" if two else "result_free"))
|
||||
out.append(line("result_reveal_two" if two else "result_reveal", spioner=join_names(ev["spies"]), ord=ev["word"]))
|
||||
return out
|
||||
if t == "final":
|
||||
|
||||
@@ -10,7 +10,7 @@ from channels.testing.websocket import WebsocketCommunicator
|
||||
from django.test import SimpleTestCase, TransactionTestCase, override_settings
|
||||
|
||||
from party import rooms, tts
|
||||
from party.spion import SpionRoom, create_spion_room, warm_generic, warm_texts
|
||||
from party.spion import LINES as SPION_LINES, SpionRoom, create_spion_room, warm_generic, warm_texts
|
||||
from party.tegn import create_tegn_room
|
||||
from party.tests.test_switch import HOST, drain
|
||||
from party.tests.test_ws import HOST_HEADERS, recv_until
|
||||
@@ -237,6 +237,10 @@ class SpionSpeakerTests(SimpleTestCase):
|
||||
self.assertEqual(sorted({t for t in plain if t not in warm}), [])
|
||||
|
||||
|
||||
def spion_lines(key):
|
||||
return SPION_LINES[key]
|
||||
|
||||
|
||||
class SpionResultLineTests(SimpleTestCase):
|
||||
def room(self, n):
|
||||
g = Game("TEST", spy_themes(), rng=random.Random(5), rounds=3)
|
||||
@@ -264,8 +268,9 @@ class SpionResultLineTests(SimpleTestCase):
|
||||
|
||||
def test_two_spies_in_plural(self):
|
||||
room, g = self.room(8)
|
||||
lines, ev = self.result_lines(room, g)
|
||||
lines, ev = self.result_lines(room, g) # ingen stemmer: begge slap
|
||||
self.assertEqual(len(ev["spies"]), 2)
|
||||
self.assertIn(lines[0], room.narrator.variants("result_free_two"))
|
||||
self.assertIn("spioner", lines[-1].lower())
|
||||
self.assertTrue(all(n in lines[-1] for n in ev["spies"]))
|
||||
|
||||
@@ -280,3 +285,15 @@ class SpionResultLineTests(SimpleTestCase):
|
||||
self.assertTrue(ev["caught"] and not ev["guessed"])
|
||||
self.assertIn(lines[0], room.narrator.variants("result_half"))
|
||||
self.assertIn("spioner", lines[-1].lower())
|
||||
|
||||
def test_innocent_accused_with_two_spies(self):
|
||||
room, g = self.room(8)
|
||||
while g.phase != "vote":
|
||||
g.skip(10)
|
||||
agent = next(p for p in g.order if p not in g.spies)
|
||||
for pid in g.order:
|
||||
g.vote(pid, agent if pid != agent else g.spies[0], 3)
|
||||
lines, ev = self.result_lines(room, g)
|
||||
self.assertIn("spion", lines[0].lower())
|
||||
self.assertTrue(any(lines[0] == room.narrator.fill(v, {"navn": g.players[agent].name})
|
||||
for v in spion_lines("result_innocent_two")))
|
||||
|
||||
@@ -27,6 +27,13 @@
|
||||
"Uskyldig hele vejen. Spionen slap væk under jeres næse.",
|
||||
"I tog fejl. Spionen er stadig blandt jer."
|
||||
],
|
||||
"result_innocent_two": [
|
||||
"Forkert! Den anklagede var uskyldig, og begge spioner gik fri.",
|
||||
"[laughs] Uskyldig! De to rigtige spioner smiler nu.",
|
||||
"Det var ikke en spion. Undskyld og tak for indsatsen.",
|
||||
"Uskyldig hele vejen. Spionerne slap væk under jeres næse.",
|
||||
"I tog fejl. Spionerne er stadig blandt jer."
|
||||
],
|
||||
"result_reveal": [
|
||||
"Spionen og ordet står nu på skærmen.",
|
||||
"Her er sandheden. Kig på skærmen.",
|
||||
|
||||
@@ -120,6 +120,12 @@
|
||||
"Det var ikke {navn}. Den rigtige spion smiler nu.",
|
||||
"Uskyldig! Undskyld, {navn}."
|
||||
],
|
||||
"result_innocent_two": [
|
||||
"{navn} var uskyldig! Begge spioner gik fri.",
|
||||
"[laughs] Forkert! {navn} kendte ordet, og spionerne smiler.",
|
||||
"Det var ikke {navn}. De to rigtige spioner slap væk.",
|
||||
"Uskyldig! Undskyld, {navn}. Spionerne takker."
|
||||
],
|
||||
"result_guessed": [
|
||||
"Spionen gættede ordet! Sikke en redning.",
|
||||
"[impressed] Rigtigt gæt! Spionen vinder alligevel.",
|
||||
@@ -141,6 +147,11 @@
|
||||
"[mischievously] Spionen gik under radaren.",
|
||||
"Spionen klarede den. Agenterne må tage sig sammen."
|
||||
],
|
||||
"result_free_two": [
|
||||
"Begge spioner slap væk.",
|
||||
"[mischievously] Spionerne gik under radaren.",
|
||||
"Spionerne klarede den. Agenterne må tage sig sammen."
|
||||
],
|
||||
"result_left": [
|
||||
"Spionen forlod missionen. Ingen point for det.",
|
||||
"[sighs] Spionen er gået. Så må vi tage runden uden.",
|
||||
|
||||
Reference in New Issue
Block a user