Require visible scars in Cannon receipts
This commit is contained in:
parent
560042abcb
commit
47ca557c27
|
|
@ -10,10 +10,10 @@ The Slop Cannon does not manufacture unrelated clips. It mutates one persistent
|
||||||
|
|
||||||
A plain Timmy enters. Four forms exit:
|
A plain Timmy enters. Four forms exit:
|
||||||
|
|
||||||
- **Wizard Timmy** — brass, vellum, midnight blue; can negotiate covenants but cannot use a master key.
|
- **Wizard Timmy** — brass, vellum, midnight blue; can negotiate covenants but cannot use a master key; every signed promise burns a new contract glyph into his palms.
|
||||||
- **Machine Timmy** — chrome, signal lime, hardstyle pressure; can prove execution paths but remembers every failed build.
|
- **Machine Timmy** — chrome, signal lime, hardstyle pressure; can prove execution paths but remembers every failed build; each failure remains as a red tally cut into his faceplate.
|
||||||
- **Creature Timmy** — moss, amber, wet circuitry; can adapt to any habitat but acquires one new appetite per adaptation.
|
- **Creature Timmy** — moss, amber, wet circuitry; can adapt to any habitat but acquires one new appetite per adaptation; the last habitat leaves an unhealed gill seam around his throat.
|
||||||
- **Talking Turd Timmy** — stained CRT gold and terminal green; can expose hypocrisy, but every truth arrives as an insult.
|
- **Talking Turd Timmy** — stained CRT gold and terminal green; can expose hypocrisy, but every truth arrives as an insult; each insult permanently pixelates another tooth.
|
||||||
|
|
||||||
Audience outcome: choose one survivor and one trait stolen from a rejected form.
|
Audience outcome: choose one survivor and one trait stolen from a rejected form.
|
||||||
|
|
||||||
|
|
@ -44,7 +44,7 @@ Each episode must visibly contain:
|
||||||
1. **Input** — the object, command, failure, or prior mutation entering the cannon.
|
1. **Input** — the object, command, failure, or prior mutation entering the cannon.
|
||||||
2. **Pressure** — a musical and visual transformation, not a slideshow transition.
|
2. **Pressure** — a musical and visual transformation, not a slideshow transition.
|
||||||
3. **Mutation** — one consequential change to Timmy.
|
3. **Mutation** — one consequential change to Timmy.
|
||||||
4. **Receipt** — visible proof of what changed and why.
|
4. **Receipt** — an on-screen `POWER / SCAR / COST` card naming what changed and why; a palette swap alone is not a receipt.
|
||||||
5. **Choice** — one audience decision that alters the next episode.
|
5. **Choice** — one audience decision that alters the next episode.
|
||||||
|
|
||||||
## Collaboration baton
|
## Collaboration baton
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
"name": "Wizard Timmy",
|
"name": "Wizard Timmy",
|
||||||
"palette": ["midnight blue", "tarnished brass", "vellum"],
|
"palette": ["midnight blue", "tarnished brass", "vellum"],
|
||||||
"power": "Negotiates visible covenants",
|
"power": "Negotiates visible covenants",
|
||||||
|
"scar": "Contract glyphs burned into both palms",
|
||||||
"cost": "Cannot use a universal master key"
|
"cost": "Cannot use a universal master key"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -23,6 +24,7 @@
|
||||||
"name": "Machine Timmy",
|
"name": "Machine Timmy",
|
||||||
"palette": ["black chrome", "signal lime", "white"],
|
"palette": ["black chrome", "signal lime", "white"],
|
||||||
"power": "Proves the execution path",
|
"power": "Proves the execution path",
|
||||||
|
"scar": "Red failed-build tallies cut into the faceplate",
|
||||||
"cost": "Remembers every failed build"
|
"cost": "Remembers every failed build"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -30,6 +32,7 @@
|
||||||
"name": "Creature Timmy",
|
"name": "Creature Timmy",
|
||||||
"palette": ["moss", "amber", "wet copper"],
|
"palette": ["moss", "amber", "wet copper"],
|
||||||
"power": "Adapts to any habitat",
|
"power": "Adapts to any habitat",
|
||||||
|
"scar": "An unhealed gill seam around the throat",
|
||||||
"cost": "Gains one appetite per adaptation"
|
"cost": "Gains one appetite per adaptation"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -37,6 +40,7 @@
|
||||||
"name": "Talking Turd Timmy",
|
"name": "Talking Turd Timmy",
|
||||||
"palette": ["CRT gold", "terminal green", "soot"],
|
"palette": ["CRT gold", "terminal green", "soot"],
|
||||||
"power": "Exposes hypocrisy instantly",
|
"power": "Exposes hypocrisy instantly",
|
||||||
|
"scar": "One permanently pixelated tooth per insult",
|
||||||
"cost": "Every truth arrives as an insult"
|
"cost": "Every truth arrives as an insult"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,10 @@ class CannonCanonTests(unittest.TestCase):
|
||||||
forms = self.data["forms"]
|
forms = self.data["forms"]
|
||||||
self.assertEqual(len(forms), 4)
|
self.assertEqual(len(forms), 4)
|
||||||
self.assertEqual(len({form["id"] for form in forms}), 4)
|
self.assertEqual(len({form["id"] for form in forms}), 4)
|
||||||
|
self.assertEqual(len({form["scar"] for form in forms}), 4)
|
||||||
for form in forms:
|
for form in forms:
|
||||||
self.assertTrue(form["power"])
|
self.assertTrue(form["power"])
|
||||||
|
self.assertTrue(form["scar"])
|
||||||
self.assertTrue(form["cost"])
|
self.assertTrue(form["cost"])
|
||||||
self.assertGreaterEqual(len(form["palette"]), 3)
|
self.assertGreaterEqual(len(form["palette"]), 3)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user