From 91eaa9d709bf303b3c31a2fdd60d80f06d9b9fef Mon Sep 17 00:00:00 2001 From: Niels Simenon Date: Mon, 10 Apr 2023 16:06:53 +0200 Subject: [PATCH] Improved Letters distribution. Added conundrum to mash. --- src/games/hunt.js | 2 +- src/games/letters.js | 43 ++++++++++++++++++++++++++++++++++++------- src/games/mash.js | 14 ++++++++++++-- src/games/numbers.js | 2 +- 4 files changed, 50 insertions(+), 11 deletions(-) diff --git a/src/games/hunt.js b/src/games/hunt.js index 278cbc9..d6f386b 100644 --- a/src/games/hunt.js +++ b/src/games/hunt.js @@ -133,7 +133,7 @@ function onCommand(args, context) { games.set(context.room.id, { word: word.word, progress: 0, - defintiions: word.definitions, + definitions: word.definitions, partial: word.word.split('').map(() => null), flower: pickRandom(flowers), target: pickRandom(targets), diff --git a/src/games/letters.js b/src/games/letters.js index 5341d91..62da0dd 100755 --- a/src/games/letters.js +++ b/src/games/letters.js @@ -9,9 +9,38 @@ const getWordKey = require('../utils/get-word-key'); const pickRandom = require('../utils/pick-random'); const words = require('../../assets/mash-words.json'); +// http://www.thecountdownpage.com/letters.htm const availableLetters = { - vowel: ['a', 'e', 'i', 'o', 'u'], - consonant: ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'], // Countdown regards y as a consonant + vowel: [ + ...Array.from({ length: 15 }, () => 'a'), + ...Array.from({ length: 21 }, () => 'e'), + ...Array.from({ length: 13 }, () => 'i'), + ...Array.from({ length: 13 }, () => 'o'), + ...Array.from({ length: 5 }, () => 'u'), + ], + consonant: [ + ...Array.from({ length: 2 }, () => 'b'), + ...Array.from({ length: 3 }, () => 'c'), + ...Array.from({ length: 6 }, () => 'd'), + ...Array.from({ length: 2 }, () => 'f'), + ...Array.from({ length: 3 }, () => 'g'), + ...Array.from({ length: 2 }, () => 'h'), + ...Array.from({ length: 1 }, () => 'j'), + ...Array.from({ length: 1 }, () => 'k'), + ...Array.from({ length: 5 }, () => 'l'), + ...Array.from({ length: 4 }, () => 'm'), + ...Array.from({ length: 8 }, () => 'n'), + ...Array.from({ length: 4 }, () => 'p'), + ...Array.from({ length: 1 }, () => 'q'), + ...Array.from({ length: 9 }, () => 'r'), + ...Array.from({ length: 9 }, () => 's'), + ...Array.from({ length: 9 }, () => 't'), + ...Array.from({ length: 1 }, () => 'v'), + ...Array.from({ length: 1 }, () => 'w'), + ...Array.from({ length: 1 }, () => 'x'), + ...Array.from({ length: 1 }, () => 'y'), // Countdown regards Y as a consonant + ...Array.from({ length: 1 }, () => 'z'), + ], }; const types = { v: 'vowel', c: 'consonant' }; @@ -74,9 +103,11 @@ function stop(context, aborted) { game.ac.abort(); games.delete(context.room.id); - if (aborted) { - context.sendMessage(`The game was stopped by ${style.cyan(`${config.usernamePrefix}${context.user.username}`)}. Best players: ${getLeaders(game.points)}`, context.room.id); - } + const wrap = aborted + ? `The game was stopped by ${style.cyan(`${config.usernamePrefix}${context.user.username}`)}.` + : style.bold('Time\'s up!'); + + context.sendMessage(`${wrap} Best players: ${getLeaders(game.points)}`, context.room.id); } async function play(context) { @@ -95,8 +126,6 @@ async function play(context) { context.sendMessage(`${getBoard(context)} You have ${style.bold(style.green(`${Math.round(settings.timeout / 3)} seconds`))} left`, context.room.id); await timers.setTimeout((settings.timeout / 3) * 1000, null, { signal: game.ac.signal }); - context.sendMessage(`${style.bold('Time\'s up!')} Best players: ${getLeaders(game.points)}`, context.room.id); - stop(context); } catch (error) { // abort expected, probably not an error diff --git a/src/games/mash.js b/src/games/mash.js index 0e10045..8dbb6c2 100755 --- a/src/games/mash.js +++ b/src/games/mash.js @@ -48,7 +48,12 @@ function start(length, context, attempt = 0) { const newMash = mashes.get(context.room.id); - context.sendMessage(`Stomp stomp, here's your mash: ${style.bold(style.pink(newMash.anagram))}`, context.room.id); + if (context.command === 'conundrum') { + context.sendMessage(`Here is your conundrum: ${style.bold(style.pink(newMash.anagram))}`, context.room.id); + } else { + context.sendMessage(`Stomp stomp, here's your mash: ${style.bold(style.pink(newMash.anagram))}`, context.room.id); + } + context.logger.info(`Mash started, '${anagram}' with answers ${answers.map((answer) => `'${answer.word}'`).join(', ')}`); } @@ -193,6 +198,11 @@ function onCommand(args, context) { return; } + if (context.command === 'conundrum') { + start(9, context); + return; + } + if (!Number.isNaN(length)) { start(length, context); return; @@ -221,7 +231,7 @@ function onMessage(message, context) { module.exports = { name: 'Mash', - commands: ['mash', 'wordmash', ...defineCommands, ...resolveCommands], + commands: ['mash', 'wordmash', 'conundrum', ...defineCommands, ...resolveCommands], onCommand, onMessage, help: `Resolve the anagram. Get a new mash with ${config.prefix}mash [length], look up definitions with ${config.prefix}define [word], resolve an anagram (that's not currently in play) with ${config.prefix}solve [anagram].`, diff --git a/src/games/numbers.js b/src/games/numbers.js index 365ba18..164e815 100644 --- a/src/games/numbers.js +++ b/src/games/numbers.js @@ -365,7 +365,7 @@ function onMessage(message, context) { } } - if (game?.state === 'solutions') { + if (game?.state === 'solutions' && body.match(/\d+/g)?.length > 1) { playSolution(body, context); } }