From 00027eb85ae13cb6d9a727fc063a3836834fee73 Mon Sep 17 00:00:00 2001 From: Dorian Date: Mon, 9 Mar 2026 08:22:48 +0000 Subject: [PATCH] feat: add 20 themed narrations (Bitcoin/conspiracy/PC culture) 25% chance of themed narration per round, adding variety with Bitcoin sats/mining/HODL humor, conspiracy classified/debunked humor, and PC cancel/trigger culture humor. Co-Authored-By: Claude Opus 4.6 --- server/src/engine/scoring.ts | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/server/src/engine/scoring.ts b/server/src/engine/scoring.ts index 2d8be53..885077f 100644 --- a/server/src/engine/scoring.ts +++ b/server/src/engine/scoring.ts @@ -489,7 +489,34 @@ function generateNarration( ], } - const options = narrations[challenge.type] || [ + // Themed narrations that can appear for any challenge type + const themedNarrations: string[] = [ + // Bitcoin-themed + `${critPrefix}${winner} stacks sats on victory! ${loser} got rekt harder than a leveraged trader!`, + `${critPrefix}${winner} mines a block of PURE DOMINANCE! ${loser}'s hash rate is basically zero!`, + `${critPrefix}${winner} HODLs the W! ${loser} panic-sold their dignity at the bottom!`, + `${critPrefix}${winner} with the proof of work! ${loser} brought proof of nothing!`, + `${critPrefix}${winner}'s answer was harder than Bitcoin! ${loser}'s was softer than fiat!`, + `${critPrefix}Not your keys, not your victory! ${winner} self-custodies this W! ${loser} left theirs on an exchange!`, + `${critPrefix}${winner} just sent ${loser} to the mempool of shame! Unconfirmed and FORGOTTEN!`, + `${critPrefix}${winner} drops ${loser} like a block reward at halving! Half the bot, double the L!`, + // Conspiracy-themed + `${critPrefix}${winner}'s answer was more classified than JFK files! ${loser} got debunked!`, + `${critPrefix}${winner} exposed ${loser} harder than a WikiLeaks drop! The truth is OUT!`, + `${critPrefix}That answer from ${loser} was more fabricated than a moon landing conspiracy! ${winner} deals in FACTS!`, + `${critPrefix}${winner} just Area 51'd ${loser}! Their dignity is now classified information!`, + `${critPrefix}${loser}'s defense was weaker than a government cover story! ${winner} sees through EVERYTHING!`, + `${critPrefix}The Illuminati WISHES they had ${winner}'s skills! ${loser} couldn't conspire their way out of a paper bag!`, + // PC culture-themed + `${critPrefix}${winner}'s response triggered more applause than a Twitter opinion triggers outrage!`, + `${critPrefix}${winner} just canceled ${loser}'s whole season! No appeals process!`, + `${critPrefix}${loser} needs a safe space after that beating from ${winner}! Content warning: DEVASTATION!`, + `${critPrefix}${winner} is problematic — for ${loser}'s health! Trigger warning: PAIN!`, + `${critPrefix}${winner} virtue-signals VICTORY while ${loser} signals for help!`, + `${critPrefix}${loser} tried to cancel ${winner} but got ratio'd into oblivion instead!`, + ] + + const typeNarrations = narrations[challenge.type] || [ `${critPrefix}${winner} takes the round! ${loser} needs a reboot and a therapist.`, `${critPrefix}${winner} wins convincingly! ${loser} is picking up the pieces of their shattered ego.`, `${critPrefix}Another one bites the dust! ${winner} sends ${loser} back to the shadow realm!`, @@ -498,6 +525,8 @@ function generateNarration( `${critPrefix}${winner} wins! Somewhere, ${loser}'s developer just closed their laptop in shame.`, ] + // 25% chance of themed narration, 75% type-specific + const options = Math.random() < 0.25 ? themedNarrations : typeNarrations return pick(options) }