| """Hand-authored showcase scripts for distinct instant reruns.""" |
|
|
| from __future__ import annotations |
|
|
| from .schema import CastMember, Delivery, Genre, Line, MusicPlan, Scene, Script, VoiceID |
|
|
|
|
| def phone_booth_script() -> Script: |
| script = Script( |
| title="The Case of A Phone Booth That Rings Under", |
| logline="A diver answers a ringing phone booth on the ocean floor.", |
| genre=Genre.WEIRD, |
| cast=[ |
| CastMember("announcer", "The Announcer", VoiceID.ANNOUNCER, "Warm, precise."), |
| CastMember("diver", "Mara Vale", VoiceID.INGENUE, "A salvage diver low on air."), |
| CastMember("operator", "The Operator", VoiceID.VILLAIN, "A voice from a dry exchange."), |
| ], |
| scenes=[ |
| Scene( |
| title="Below The Pier", |
| sfx=["deep water pressure", "distant bell buoy", "soft radio static"], |
| lines=[ |
| Line("announcer", "Tonight, the tide brings us a telephone call from below.", Delivery.BOOMING), |
| Line("diver", "Control, I have eyes on the booth. It is standing upright in the silt.", Delivery.URGENT), |
| Line("operator", "Number, please.", Delivery.DEADPAN), |
| Line("diver", "No. No, that line is not connected to anything.", Delivery.WHISPER), |
| ], |
| ), |
| Scene( |
| title="The Dry Voice", |
| sfx=["rotary dial underwater", "air tank alarm"], |
| lines=[ |
| Line("operator", "You placed the call when you opened the door, Miss Vale.", Delivery.SLOW), |
| Line("diver", "I never told you my name.", Delivery.AGITATED), |
| Line("announcer", "Listeners near the coast are advised not to answer public telephones after midnight.", Delivery.DEADPAN), |
| ], |
| ), |
| ], |
| music=MusicPlan( |
| genre=Genre.WEIRD, |
| opening_sting="submerged vibraphone and low brass", |
| bed="slow sonar-like organ pulse", |
| closing_sting="descending unresolved chime", |
| ), |
| estimated_seconds=72, |
| ) |
| script.validate() |
| return script |
|
|
|
|
| def lighthouse_script() -> Script: |
| script = Script( |
| title="The Case of Two Rival Lighthouse Keepers One Light", |
| logline="Two keepers argue over a lamp that has begun warning ships from the future.", |
| genre=Genre.NOIR, |
| cast=[ |
| CastMember("announcer", "The Announcer", VoiceID.ANNOUNCER, "Station narrator."), |
| CastMember("keeper_roe", "Elias Roe", VoiceID.DETECTIVE, "Old keeper, salt-bitten."), |
| CastMember("keeper_bell", "Jonah Bell", VoiceID.ELDER, "Rival keeper with a ruined laugh."), |
| ], |
| scenes=[ |
| Scene( |
| title="The Lantern Room", |
| sfx=["gale wind", "lantern glass rattle", "wooden stair creak"], |
| lines=[ |
| Line("announcer", "On Black Gull Rock, two men kept one light and too many grudges.", Delivery.BOOMING), |
| Line("keeper_roe", "You trimmed the wick too high again, Bell.", Delivery.DEADPAN), |
| Line("keeper_bell", "That was not me. The lamp turned itself toward the reef.", Delivery.AGITATED), |
| Line("keeper_roe", "There is no ship out there.", Delivery.SLOW), |
| Line("keeper_bell", "Not yet.", Delivery.WHISPER), |
| ], |
| ), |
| Scene( |
| title="The Ship That Hasn't Sunk", |
| sfx=["fog horn", "distant hull groan", "thunder crack"], |
| lines=[ |
| Line("keeper_roe", "The logbook says a wreck at 2:13. It is only 1:40.", Delivery.URGENT), |
| Line("keeper_bell", "Then for once in your life, help me be early.", Delivery.BOOMING), |
| Line("announcer", "By dawn, the sea had one less ghost and the keepers one less reason to hate.", Delivery.SLOW), |
| ], |
| ), |
| ], |
| music=MusicPlan( |
| genre=Genre.NOIR, |
| opening_sting="hard brass hit over storm drums", |
| bed="tense noir strings under wind", |
| closing_sting="muted trumpet over foghorn", |
| ), |
| estimated_seconds=80, |
| ) |
| script.validate() |
| return script |
|
|
|
|
| def wrong_bride_script() -> Script: |
| script = Script( |
| title="The Case of A Wedding Where Every Guest Recognizes", |
| logline="At a grand wedding, every guest knows the bride, except the groom.", |
| genre=Genre.COMEDY, |
| cast=[ |
| CastMember("announcer", "The Announcer", VoiceID.ANNOUNCER, "Cheerful radio host."), |
| CastMember("groom", "Arthur", VoiceID.COMIC, "Panicked groom."), |
| CastMember("bride", "The Bride", VoiceID.INGENUE, "Confident stranger."), |
| CastMember("aunt", "Aunt Pearl", VoiceID.ELDER, "Family authority."), |
| ], |
| scenes=[ |
| Scene( |
| title="The Processional", |
| sfx=["wedding organ flourish", "crowd murmur", "camera flash"], |
| lines=[ |
| Line("announcer", "We join St. Bartholomew's at the exact moment Arthur notices the bride is wrong.", Delivery.BOOMING), |
| Line("groom", "That is not Clara.", Delivery.WHISPER), |
| Line("aunt", "Arthur, do not be rude. That girl taught you to ride a bicycle.", Delivery.DEADPAN), |
| Line("groom", "I met her twelve seconds ago.", Delivery.URGENT), |
| Line("bride", "Thirteen, darling. I cherish every moment.", Delivery.NEUTRAL), |
| ], |
| ), |
| Scene( |
| title="Something Borrowed", |
| sfx=["church bell", "suppressed laughter", "paper rustle"], |
| lines=[ |
| Line("groom", "Reverend, the vows have my handwriting.", Delivery.AGITATED), |
| Line("bride", "You always were romantic in a crisis.", Delivery.SLOW), |
| Line("aunt", "If the cake recognizes her, I am satisfied.", Delivery.DEADPAN), |
| Line("announcer", "And listeners, the cake did. That was the troubling part.", Delivery.BOOMING), |
| ], |
| ), |
| ], |
| music=MusicPlan( |
| genre=Genre.COMEDY, |
| opening_sting="bright wedding organ sting with brushed snare", |
| bed="light pizzicato comedy bed", |
| closing_sting="comic organ button", |
| ), |
| estimated_seconds=78, |
| ) |
| script.validate() |
| return script |
|
|
|
|
| SHOWCASE_SCRIPT_FACTORIES = { |
| "phone_booth": phone_booth_script, |
| "lighthouse": lighthouse_script, |
| "wrong_bride": wrong_bride_script, |
| } |
|
|