diff --git a/TODO.md b/TODO.md
index 40ec1fd..ec175df 100644
--- a/TODO.md
+++ b/TODO.md
@@ -38,4 +38,4 @@
## Words Words Words
- [x] **TLDR rules**. A one page summary sheet of the rulebook, for the impatient
-- [ ] **Suggestions.** Take a pass through all of the suggestions in suggestions.js, rewrite ones that are stiff, awkward, or don't fit the theme/setting as described in the rulebook. Move the suggestion pool from suggestions.js into a backend API endpoint.
+- [x] **Suggestions.** Take a pass through all of the suggestions in suggestions.js, rewrite ones that are stiff, awkward, or don't fit the theme/setting as described in the rulebook. Move the suggestion pool from suggestions.js into a backend API endpoint.
diff --git a/frontend/src/components/CharacterCreationPhase.svelte b/frontend/src/components/CharacterCreationPhase.svelte
index 6890d98..73c161d 100644
--- a/frontend/src/components/CharacterCreationPhase.svelte
+++ b/frontend/src/components/CharacterCreationPhase.svelte
@@ -7,6 +7,17 @@
export let state;
+ let suggestionError = '';
+ async function suggest(type, apply) {
+ suggestionError = '';
+ try {
+ apply(await getSuggestion(type));
+ } catch (error) {
+ suggestionError = 'Could not load suggestions. Try again.';
+ }
+ }
+
+
// Form states
let basicDetails = {
avatar_look: state.player.avatar_look || '',
@@ -252,6 +263,8 @@
+{#if suggestionError}
{suggestionError}
{/if}
+
diff --git a/frontend/src/components/RecruitPhase.svelte b/frontend/src/components/RecruitPhase.svelte
index 4628f83..a72fc46 100644
--- a/frontend/src/components/RecruitPhase.svelte
+++ b/frontend/src/components/RecruitPhase.svelte
@@ -6,6 +6,17 @@
export let state;
+ let suggestionError = '';
+ async function suggest(type, apply) {
+ suggestionError = '';
+ try {
+ apply(await getSuggestion(type));
+ } catch (error) {
+ suggestionError = 'Could not load suggestions. Try again.';
+ }
+ }
+
+
function getPlayerName(id) {
if (!id) return 'None';
const p = state.players.find(x => x.id === id);
@@ -137,6 +148,8 @@
+{#if suggestionError}{suggestionError}
{/if}
+
diff --git a/frontend/src/lib/changelog.js b/frontend/src/lib/changelog.js
index 839576b..e54d469 100644
--- a/frontend/src/lib/changelog.js
+++ b/frontend/src/lib/changelog.js
@@ -6,10 +6,11 @@
// - Add a CHANGELOG entry only when a commit changes something players can
// see. Skip refactors, tests, and tooling. Keep wording player-facing.
-export const VERSION = 46;
+export const VERSION = 47;
// Newest first. Each entry: { version, date: 'YYYY-MM-DD', changes: [string, ...] }.
export const CHANGELOG = [
+ { version: 47, date: '2026-09-04', changes: ['Rewrote character suggestions with scrappy pirate looks, distinctive smells, first words, and crew quirks that fit Yeld.'] },
{ version: 46, date: '2026-09-04', changes: ['Added a printable TL;DR rules page, linked at the top of the full rulebook.'] },
{ version: 44, date: '2026-09-04', changes: ['Crew Objectives opens as one connected panel, with the toggle and checklist sharing a border and background.'] },
{ version: 43, date: '2026-09-04', changes: ['The crew roster keeps players in the same order when roles or ranks change, including when someone becomes the Deep.'] },
diff --git a/frontend/src/lib/suggestions.js b/frontend/src/lib/suggestions.js
index 2b098e9..d1b49ef 100644
--- a/frontend/src/lib/suggestions.js
+++ b/frontend/src/lib/suggestions.js
@@ -1,1221 +1,5 @@
import { apiRequest } from './api';
-// Auto-generated math-pirate suggestions pool for character creation
-const SUGGESTIONS = {
- "look": [
- "A cyber-pirate waistcoat buttoned with old copper coins",
- "A mechanical leather vest covered in algebraic graffiti",
- "A salty tail glowing with neon math runes",
- "A ink-stained paw replaced with a brass protractor-claw",
- "A barnacle-covered paw replaced with a brass protractor-claw",
- "A cyber-pirate tricorn hat with a built-in compass",
- "A salty tricorn hat with a built-in compass",
- "A scurvy snout that twitches in rhythm with prime numbers",
- "A brass-plated coat patterned like a checkerboard",
- "A brass telescope permanently strapped to the left ear",
- "A neon-glowing tail glowing with neon math runes",
- "A scurvy paw replaced with a brass protractor-claw",
- "A ancient whisker arrangement forming a perfect sine wave",
- "A brass-plated leather vest covered in algebraic graffiti",
- "A brass-plated peg-leg with a hidden slide-rule drawer",
- "A polished tail glowing with neon math runes",
- "A barnacle-covered snout with geometry scars",
- "A ancient bandana soaked in salty seawater and ink",
- "A ancient coat patterned like a checkerboard",
- "A rusty snout that twitches in rhythm with prime numbers",
- "A weather-beaten tail curled into a Fibonacci spiral",
- "A gilded paw replaced with a brass protractor-claw",
- "A gilded tricorn hat with a built-in compass",
- "A brass-plated tail glowing with neon math runes",
- "A mechanical satchel full of crumpled grid paper",
- "A mechanical tricorn hat with nested abacus beads",
- "A one-eyed leather vest covered in algebraic graffiti",
- "A ancient tail glowing with neon math runes",
- "A rusty leather vest covered in algebraic graffiti",
- "A one-eyed paw replaced with a brass protractor-claw",
- "A phosphorescent tail curled into a Fibonacci spiral",
- "A weather-beaten paw replaced with a brass protractor-claw",
- "A brass-plated whisker arrangement forming a perfect sine wave",
- "A ancient snout that twitches in rhythm with prime numbers",
- "A polished tricorn hat with a built-in compass",
- "A scurvy whisker arrangement forming a perfect sine wave",
- "A polished paw replaced with a brass protractor-claw",
- "A gilded tricorn hat with nested abacus beads",
- "A scarf patterned with infinite decimals of Pi",
- "A cyber-pirate leather vest covered in algebraic graffiti",
- "A barnacle-covered bandana soaked in salty seawater and ink",
- "A phosphorescent tricorn hat with a built-in compass",
- "A gilded waistcoat buttoned with old copper coins",
- "A cyber-pirate satchel full of crumpled grid paper",
- "A tricorn hat folded from an old calculus exam",
- "A barnacle-covered tail curled into a Fibonacci spiral",
- "A barnacle-covered satchel full of crumpled grid paper",
- "A neon-glowing eyepatch displaying coordinate maps",
- "A weather-beaten bandana soaked in salty seawater and ink",
- "A gilded whisker arrangement forming a perfect sine wave",
- "A one-eyed coat patterned like a checkerboard",
- "A polished eyepatch displaying coordinate maps",
- "A salty tricorn hat with nested abacus beads",
- "A gilded eyepatch displaying coordinate maps",
- "A mechanical waistcoat buttoned with old copper coins",
- "A phosphorescent coat patterned like a checkerboard",
- "A tiny chalkboard strapped to the forearm for quick calculations",
- "A phosphorescent waistcoat buttoned with old copper coins",
- "A ancient eyepatch displaying coordinate maps",
- "A brass-plated eyepatch displaying coordinate maps",
- "Whiskers braided with tiny colorful abacus beads",
- "A salty satchel full of crumpled grid paper",
- "A barnacle-covered eyepatch displaying coordinate maps",
- "A cyber-pirate tail curled into a Fibonacci spiral",
- "A cyber-pirate whisker arrangement forming a perfect sine wave",
- "A weather-beaten snout with geometry scars",
- "A ink-stained waistcoat buttoned with old copper coins",
- "A neon-glowing tail curled into a Fibonacci spiral",
- "A ink-stained eyepatch displaying coordinate maps",
- "A weather-beaten whisker arrangement forming a perfect sine wave",
- "A brass-plated tricorn hat with nested abacus beads",
- "A polished waistcoat buttoned with old copper coins",
- "A salty tail curled into a Fibonacci spiral",
- "A scurvy satchel full of crumpled grid paper",
- "A gilded tail glowing with neon math runes",
- "A scurvy coat patterned like a checkerboard",
- "A barnacle-covered tricorn hat with a built-in compass",
- "A bandana decorated with coordinate grids",
- "A barnacle-covered tricorn hat with nested abacus beads",
- "A weather-beaten tail glowing with neon math runes",
- "A rusty tail glowing with neon math runes",
- "A scurvy waistcoat buttoned with old copper coins",
- "A mechanical peg-leg with a hidden slide-rule drawer",
- "A silver claw replacement shaped like a protractor",
- "A salty paw replaced with a brass protractor-claw",
- "A golden tooth engraved with the division sign",
- "A ancient tail curled into a Fibonacci spiral",
- "A barnacle-covered peg-leg with a hidden slide-rule drawer",
- "A barnacle-covered waistcoat buttoned with old copper coins",
- "A ink-stained whisker arrangement forming a perfect sine wave",
- "A scurvy peg-leg with a hidden slide-rule drawer",
- "A ink-stained snout that twitches in rhythm with prime numbers",
- "A one-eyed tail glowing with neon math runes",
- "A salty peg-leg with a hidden slide-rule drawer",
- "A phosphorescent bandana soaked in salty seawater and ink",
- "A cyber-pirate snout that twitches in rhythm with prime numbers",
- "A ancient tricorn hat with a built-in compass",
- "A one-eyed satchel full of crumpled grid paper",
- "A rusty paw replaced with a brass protractor-claw",
- "A salty waistcoat buttoned with old copper coins",
- "A brass-plated tricorn hat with a built-in compass",
- "A ancient paw replaced with a brass protractor-claw",
- "An eye patch made of a black spade card",
- "A ink-stained coat patterned like a checkerboard",
- "A barnacle-covered whisker arrangement forming a perfect sine wave",
- "A neon-glowing bandana soaked in salty seawater and ink",
- "A barnacle-covered tail glowing with neon math runes",
- "A one-eyed waistcoat buttoned with old copper coins",
- "Fur bleached in the pattern of a Venn diagram",
- "A one-eyed snout that twitches in rhythm with prime numbers",
- "A one-eyed snout with geometry scars",
- "A ink-stained leather vest covered in algebraic graffiti",
- "A polished satchel full of crumpled grid paper",
- "A brass-plated snout with geometry scars",
- "A brass-plated tail curled into a Fibonacci spiral",
- "A neon-glowing snout with geometry scars",
- "Fur that smells faintly of chalk dust and gunpowder",
- "A cyber-pirate paw replaced with a brass protractor-claw",
- "A weather-beaten eyepatch displaying coordinate maps",
- "A brass-plated satchel full of crumpled grid paper",
- "A ancient snout with geometry scars",
- "A ancient satchel full of crumpled grid paper",
- "A miniature compass hanging from the left nostril ring",
- "A polished tricorn hat with nested abacus beads",
- "A cyber-pirate tail glowing with neon math runes",
- "A one-eyed eyepatch displaying coordinate maps",
- "A ink-stained tricorn hat with a built-in compass",
- "A cyber-pirate eyepatch displaying coordinate maps",
- "A one-eyed peg-leg with a hidden slide-rule drawer",
- "A peg leg carved from a heavy wooden slide rule",
- "A barnacle-covered coat patterned like a checkerboard",
- "A phosphorescent tail glowing with neon math runes",
- "A salty snout that twitches in rhythm with prime numbers",
- "A cyber-pirate snout with geometry scars",
- "A ink-stained snout with geometry scars",
- "A glowing neon abacus tattooed on their back",
- "A rusty peg-leg with a hidden slide-rule drawer",
- "A rusty snout with geometry scars",
- "An abacus-wheel peg leg that rolls instead of clicks",
- "A neon-glowing waistcoat buttoned with old copper coins",
- "A polished coat patterned like a checkerboard",
- "A mechanical coat patterned like a checkerboard",
- "A phosphorescent tricorn hat with nested abacus beads",
- "A brass-plated waistcoat buttoned with old copper coins",
- "A barnacle-covered leather vest covered in algebraic graffiti",
- "A ancient tricorn hat with nested abacus beads",
- "Ear notched in the shape of a perfect right angle",
- "A ink-stained tricorn hat with nested abacus beads",
- "A mechanical paw replaced with a brass protractor-claw",
- "A weather-beaten tricorn hat with a built-in compass",
- "A gilded satchel full of crumpled grid paper",
- "A ink-stained satchel full of crumpled grid paper",
- "A salty coat patterned like a checkerboard",
- "A gilded peg-leg with a hidden slide-rule drawer",
- "A ink-stained bandana soaked in salty seawater and ink",
- "A gilded tail curled into a Fibonacci spiral",
- "A mechanical whisker arrangement forming a perfect sine wave",
- "A phosphorescent peg-leg with a hidden slide-rule drawer",
- "A polished bandana soaked in salty seawater and ink",
- "A monocle that displays neon green equations",
- "A polished snout that twitches in rhythm with prime numbers",
- "A mechanical tail curled into a Fibonacci spiral",
- "A phosphorescent leather vest covered in algebraic graffiti",
- "A scurvy tail curled into a Fibonacci spiral",
- "A scurvy eyepatch displaying coordinate maps",
- "A phosphorescent snout that twitches in rhythm with prime numbers",
- "A neon-glowing snout that twitches in rhythm with prime numbers",
- "A salty whisker arrangement forming a perfect sine wave",
- "A phosphorescent paw replaced with a brass protractor-claw",
- "A scurvy bandana soaked in salty seawater and ink",
- "A neon-glowing whisker arrangement forming a perfect sine wave",
- "A scurvy snout with geometry scars",
- "A neon-glowing tricorn hat with nested abacus beads",
- "A brass-plated bandana soaked in salty seawater and ink",
- "A scurvy tricorn hat with nested abacus beads",
- "A ancient peg-leg with a hidden slide-rule drawer",
- "A mechanical bandana soaked in salty seawater and ink",
- "A polished leather vest covered in algebraic graffiti",
- "A gilded snout that twitches in rhythm with prime numbers",
- "A scurvy tail glowing with neon math runes",
- "A neon-glowing leather vest covered in algebraic graffiti",
- "A brass-plated snout that twitches in rhythm with prime numbers",
- "A rusty coat patterned like a checkerboard",
- "A ink-stained tail glowing with neon math runes",
- "A tail wrapped in copper wire that sparks when they get excited",
- "A gilded leather vest covered in algebraic graffiti",
- "A salty eyepatch displaying coordinate maps",
- "A weather-beaten waistcoat buttoned with old copper coins",
- "A gilded snout with geometry scars",
- "A mechanical eyepatch displaying coordinate maps",
- "A rusty waistcoat buttoned with old copper coins",
- "A cyber-pirate tricorn hat with nested abacus beads",
- "A salty bandana soaked in salty seawater and ink",
- "A weather-beaten satchel full of crumpled grid paper",
- "A rusty whisker arrangement forming a perfect sine wave",
- "A salty snout with geometry scars",
- "A cyber-pirate bandana soaked in salty seawater and ink",
- "A ancient waistcoat buttoned with old copper coins",
- "A rusty tricorn hat with nested abacus beads",
- "A rusty eyepatch displaying coordinate maps"
- ],
- "smell": [
- "reminiscent of cheese and damp wood",
- "suspiciously smelling of ink and sour lemons",
- "suspiciously smelling of ink and spilled ink",
- "pleasantly smelling of rum and damp wood",
- "faintly of seaweed and damp wood",
- "faintly of pine tar and sour lemons",
- "faintly of ink and lightning sparks",
- "like a mix of pine tar and spilled ink",
- "strongly of ozone and sour lemons",
- "like a mix of ozone and salty air",
- "suspiciously smelling of seaweed and rusty iron",
- "suspiciously smelling of seaweed and spilled ink",
- "faintly of cheese and sour lemons",
- "like a mix of ink and lightning sparks",
- "strongly of gunpowder and spilled ink",
- "pleasantly smelling of seaweed and peppermint oil",
- "suspiciously smelling of rum and lightning sparks",
- "suspiciously smelling of ozone and stale grog",
- "pleasantly smelling of rum and burnt abacuses",
- "strongly of cheese and damp wood",
- "Ozone sparks and sulfur",
- "reminiscent of gunpowder and wet tail fur",
- "strongly of cheese and burnt abacuses",
- "like a mix of pine tar and wet tail fur",
- "strongly of cheese and spilled ink",
- "like a mix of ozone and damp wood",
- "pleasantly smelling of ink and sour lemons",
- "pleasantly smelling of copper and wet tail fur",
- "faintly of rum and burnt abacuses",
- "suspiciously smelling of gunpowder and rusty iron",
- "like a mix of copper and lightning sparks",
- "pleasantly smelling of seaweed and burnt abacuses",
- "reminiscent of copper and lightning sparks",
- "reminiscent of cheese and burnt abacuses",
- "pleasantly smelling of parchment and burnt abacuses",
- "like a mix of seaweed and damp wood",
- "Gunpowder smoke and melted candle wax",
- "like a mix of ozone and burnt abacuses",
- "faintly of rum and stale grog",
- "like a mix of cheese and spilled ink",
- "suspiciously smelling of parchment and sour lemons",
- "faintly of copper and wet tail fur",
- "faintly of cheese and wet tail fur",
- "faintly of cheese and damp wood",
- "faintly of pine tar and rusty iron",
- "strongly of gunpowder and peppermint oil",
- "faintly of pine tar and damp wood",
- "strongly of seaweed and damp wood",
- "like a mix of copper and wet tail fur",
- "suspiciously smelling of cheese and salty air",
- "faintly of rum and lightning sparks",
- "reminiscent of chalk dust and spilled ink",
- "strongly of copper and wet tail fur",
- "pleasantly smelling of pine tar and damp wood",
- "Damp sea charts and ozone",
- "like a mix of cheese and stale grog",
- "strongly of ink and rusty iron",
- "like a mix of seaweed and salty air",
- "pleasantly smelling of chalk dust and spilled ink",
- "pleasantly smelling of chalk dust and peppermint oil",
- "suspiciously smelling of copper and salty air",
- "reminiscent of ozone and wet tail fur",
- "faintly of rum and salty air",
- "reminiscent of chalk dust and sour lemons",
- "suspiciously smelling of pine tar and spilled ink",
- "like a mix of cheese and wet tail fur",
- "strongly of ink and sour lemons",
- "suspiciously smelling of chalk dust and damp wood",
- "Burnt tea leaves and old books",
- "faintly of parchment and wet tail fur",
- "faintly of copper and sour lemons",
- "faintly of chalk dust and spilled ink",
- "faintly of gunpowder and lightning sparks",
- "reminiscent of parchment and wet tail fur",
- "pleasantly smelling of parchment and rusty iron",
- "reminiscent of cheese and stale grog",
- "reminiscent of ink and wet tail fur",
- "pleasantly smelling of gunpowder and burnt abacuses",
- "reminiscent of parchment and stale grog",
- "pleasantly smelling of chalk dust and lightning sparks",
- "reminiscent of copper and peppermint oil",
- "pleasantly smelling of ink and peppermint oil",
- "Ozone and seaweed-wrapped tobacco",
- "strongly of cheese and rusty iron",
- "faintly of chalk dust and burnt abacuses",
- "pleasantly smelling of seaweed and lightning sparks",
- "suspiciously smelling of rum and stale grog",
- "like a mix of rum and burnt abacuses",
- "suspiciously smelling of rum and peppermint oil",
- "suspiciously smelling of copper and burnt abacuses",
- "reminiscent of pine tar and spilled ink",
- "reminiscent of parchment and lightning sparks",
- "suspiciously smelling of ink and rusty iron",
- "like a mix of pine tar and damp wood",
- "pleasantly smelling of chalk dust and salty air",
- "faintly of copper and burnt abacuses",
- "pleasantly smelling of ozone and stale grog",
- "like a mix of cheese and lightning sparks",
- "strongly of pine tar and salty air",
- "like a mix of seaweed and rusty iron",
- "pleasantly smelling of seaweed and sour lemons",
- "suspiciously smelling of gunpowder and lightning sparks",
- "suspiciously smelling of ink and peppermint oil",
- "like a mix of seaweed and wet tail fur",
- "reminiscent of gunpowder and burnt abacuses",
- "suspiciously smelling of pine tar and sour lemons",
- "pleasantly smelling of ink and lightning sparks",
- "reminiscent of pine tar and peppermint oil",
- "pleasantly smelling of rum and rusty iron",
- "like a mix of gunpowder and wet tail fur",
- "suspiciously smelling of pine tar and lightning sparks",
- "pleasantly smelling of copper and spilled ink",
- "strongly of ozone and wet tail fur",
- "reminiscent of ink and burnt abacuses",
- "like a mix of copper and stale grog",
- "faintly of copper and stale grog",
- "like a mix of copper and peppermint oil",
- "suspiciously smelling of copper and stale grog",
- "suspiciously smelling of cheese and burnt abacuses",
- "strongly of ozone and spilled ink",
- "Burnt cheese and gunpowder",
- "pleasantly smelling of seaweed and salty air",
- "pleasantly smelling of seaweed and stale grog",
- "like a mix of ozone and peppermint oil",
- "strongly of pine tar and rusty iron",
- "strongly of gunpowder and stale grog",
- "reminiscent of parchment and rusty iron",
- "faintly of copper and lightning sparks",
- "faintly of chalk dust and sour lemons",
- "suspiciously smelling of chalk dust and stale grog",
- "Freshly sharpened pencils and vinegar",
- "pleasantly smelling of parchment and sour lemons",
- "pleasantly smelling of ozone and sour lemons",
- "faintly of cheese and rusty iron",
- "like a mix of seaweed and burnt abacuses",
- "reminiscent of gunpowder and damp wood",
- "like a mix of cheese and sour lemons",
- "reminiscent of seaweed and stale grog",
- "like a mix of gunpowder and peppermint oil",
- "reminiscent of ozone and stale grog",
- "strongly of seaweed and burnt abacuses",
- "faintly of ink and rusty iron",
- "faintly of ink and spilled ink",
- "suspiciously smelling of pine tar and peppermint oil",
- "strongly of parchment and lightning sparks",
- "reminiscent of chalk dust and damp wood",
- "suspiciously smelling of gunpowder and stale grog",
- "faintly of ozone and lightning sparks",
- "faintly of rum and spilled ink",
- "strongly of pine tar and lightning sparks",
- "strongly of pine tar and burnt abacuses",
- "pleasantly smelling of rum and spilled ink",
- "reminiscent of rum and stale grog",
- "faintly of copper and rusty iron",
- "suspiciously smelling of ozone and wet tail fur",
- "strongly of seaweed and spilled ink",
- "suspiciously smelling of parchment and salty air",
- "strongly of copper and lightning sparks",
- "pleasantly smelling of cheese and peppermint oil",
- "reminiscent of cheese and peppermint oil",
- "pleasantly smelling of seaweed and rusty iron",
- "suspiciously smelling of ozone and lightning sparks",
- "strongly of rum and peppermint oil",
- "faintly of chalk dust and peppermint oil",
- "like a mix of rum and wet tail fur",
- "like a mix of cheese and damp wood",
- "reminiscent of chalk dust and wet tail fur",
- "reminiscent of rum and peppermint oil",
- "suspiciously smelling of copper and spilled ink",
- "reminiscent of cheese and sour lemons",
- "pleasantly smelling of parchment and damp wood",
- "reminiscent of chalk dust and salty air",
- "pleasantly smelling of pine tar and salty air",
- "strongly of rum and wet tail fur",
- "strongly of ink and damp wood",
- "like a mix of pine tar and peppermint oil",
- "strongly of gunpowder and sour lemons",
- "faintly of ink and burnt abacuses",
- "like a mix of rum and sour lemons",
- "pleasantly smelling of cheese and sour lemons",
- "strongly of cheese and lightning sparks",
- "reminiscent of chalk dust and burnt abacuses",
- "Salty parchment and copper coins",
- "strongly of rum and lightning sparks",
- "suspiciously smelling of seaweed and burnt abacuses",
- "reminiscent of cheese and rusty iron",
- "faintly of cheese and lightning sparks",
- "like a mix of cheese and peppermint oil",
- "reminiscent of ink and spilled ink",
- "faintly of pine tar and peppermint oil",
- "faintly of parchment and burnt abacuses",
- "reminiscent of parchment and burnt abacuses",
- "strongly of pine tar and peppermint oil",
- "pleasantly smelling of ozone and peppermint oil",
- "like a mix of parchment and rusty iron",
- "faintly of ink and stale grog",
- "pleasantly smelling of pine tar and burnt abacuses",
- "suspiciously smelling of cheese and peppermint oil",
- "strongly of gunpowder and rusty iron",
- "reminiscent of cheese and spilled ink"
- ],
- "first_words": [
- "By the deep sea! the probability indicates we are sinking logarithmically!",
- "I have transformed... and my hunger is logarithmic!",
- "Avast! the geometry of this deck requires the coordinates of the treasure island!",
- "Blow me down! the geometry of this deck requires the shortest boarding vector!",
- "Blast it! the slope of the sea shows a prime number of hazards!",
- "Aha! the abacus predicts infinite cheese!",
- "Blow me down! the probability indicates the shortest boarding vector!",
- "Arrr, the hypotenuse is magnificent!",
- "To the brig! the slope of the sea shows a prime number of hazards!",
- "Shiver my timbers! the coordinates point to the gats are ready to fire!",
- "Arrr! my tail calculations reveal a division by zero!",
- "Avast! the slope of the sea shows the coordinates of the treasure island!",
- "Arrr! the tangent of the gat implies a division by zero!",
- "Shiver my timbers! the slope of the sea shows an escape velocity of ten knots!",
- "Hear me crew! the slope of the sea shows a division by zero!",
- "Shiver my timbers! the probability indicates a division by zero!",
- "Hear me crew! the captain's slide rule shows infinite cheese!",
- "Avast! the geometry of this deck requires the gats are ready to fire!",
- "Hear me crew! the tangent of the gat implies a perfect circle of doom!",
- "Aha! the formula for cheese says we are sinking logarithmically!",
- "Aha! the tangent of the gat implies a jackpot of gold doubloons!",
- "Aha! the probability indicates infinite cheese!",
- "To the brig! my tail calculations reveal a division by zero!",
- "To the brig! the tangent of the gat implies a jackpot of gold doubloons!",
- "Look alive! the slope of the sea shows infinite cheese!",
- "Look alive! the geometry of this deck requires a perfect circle of doom!",
- "Shiver my timbers! the captain's slide rule shows we are sinking logarithmically!",
- "Blast it! the tangent of the gat implies the shortest boarding vector!",
- "To the horizon, at a 45-degree angle!",
- "To the brig! the formula for cheese says the gats are ready to fire!",
- "Arrr! the captain's slide rule shows the shortest boarding vector!",
- "Blow me down! the coordinates point to an escape velocity of ten knots!",
- "Hear me crew! the probability indicates we are sinking logarithmically!",
- "Look alive! the matrix of the hold contains a jackpot of gold doubloons!",
- "Blow me down! the slope of the sea shows an escape velocity of ten knots!",
- "Aha! the slope of the sea shows infinite cheese!",
- "Arrr, divide by zero!",
- "Arrr! the captain's slide rule shows infinite cheese!",
- "Arrr! the coordinates point to the coordinates of the treasure island!",
- "Look alive! my tail calculations reveal we are sinking logarithmically!",
- "To the brig! the slope of the sea shows an escape velocity of ten knots!",
- "Blast it! the coordinates point to an escape velocity of ten knots!",
- "Aha! the matrix of the hold contains we are sinking logarithmically!",
- "Look alive! the coordinates point to the gats are ready to fire!",
- "Arrr! the geometry of this deck requires the coordinates of the treasure island!",
- "Blast it! the slope of the sea shows an escape velocity of ten knots!",
- "Arrr! the slope of the sea shows a jackpot of gold doubloons!",
- "By the deep sea! the probability indicates the shortest boarding vector!",
- "Hear me crew! the coordinates point to an escape velocity of ten knots!",
- "Look alive! the geometry of this deck requires infinite cheese!",
- "Arrr! the abacus predicts infinite cheese!",
- "Arrr! the slope of the sea shows infinite cheese!",
- "Avast! the probability indicates the shortest boarding vector!",
- "Avast! the abacus predicts a prime number of hazards!",
- "Blow me down! the slope of the sea shows a perfect circle of doom!",
- "Blow me down! the formula for cheese says the coordinates of the treasure island!",
- "Hear me crew! the coordinates point to the coordinates of the treasure island!",
- "To the brig! the captain's slide rule shows the coordinates of the treasure island!",
- "Hear me crew! my tail calculations reveal a prime number of hazards!",
- "Aha! the tangent of the gat implies a division by zero!",
- "Arrr! the geometry of this deck requires a jackpot of gold doubloons!",
- "Blow me down! my tail calculations reveal a jackpot of gold doubloons!",
- "To the brig! the coordinates point to we are sinking logarithmically!",
- "Blow me down! the geometry of this deck requires we are sinking logarithmically!",
- "By the deep sea! the slope of the sea shows the shortest boarding vector!",
- "Hear me crew! the formula for cheese says infinite cheese!",
- "Shiver my timbers! the coordinates point to a prime number of hazards!",
- "Shiver my timbers! the matrix of the hold contains the coordinates of the treasure island!",
- "Aha! the formula for cheese says the shortest boarding vector!",
- "Avast! the slope of the sea shows we are sinking logarithmically!",
- "Aha! my tail calculations reveal the shortest boarding vector!",
- "By the deep sea! the matrix of the hold contains the coordinates of the treasure island!",
- "Arrr! the matrix of the hold contains a prime number of hazards!",
- "Shiver my timbers! my tail calculations reveal a perfect circle of doom!",
- "Arrr! the geometry of this deck requires we are sinking logarithmically!",
- "Hear me crew! the slope of the sea shows a perfect circle of doom!",
- "Aha! the matrix of the hold contains an escape velocity of ten knots!",
- "Shiver my timbers! the captain's slide rule shows the gats are ready to fire!",
- "Blow me down! the captain's slide rule shows the coordinates of the treasure island!",
- "Hear me crew! the coordinates point to the shortest boarding vector!",
- "Blast it! the captain's slide rule shows the shortest boarding vector!",
- "Arrr! the coordinates point to the shortest boarding vector!",
- "Avast! the geometry of this deck requires a perfect circle of doom!",
- "Arrr! the coordinates point to infinite cheese!",
- "Arrr! the tangent of the gat implies infinite cheese!",
- "Look alive! the slope of the sea shows a jackpot of gold doubloons!",
- "Avast! the slope of the sea shows a division by zero!",
- "Blow me down! the coordinates point to the shortest boarding vector!",
- "Shiver my timbers! the geometry of this deck requires a division by zero!",
- "Arrr! the formula for cheese says we are sinking logarithmically!",
- "Blast it! the geometry of this deck requires the coordinates of the treasure island!",
- "Look alive! the matrix of the hold contains a division by zero!",
- "To the brig! the captain's slide rule shows the gats are ready to fire!",
- "Hear me crew! the probability indicates an escape velocity of ten knots!",
- "Avast! the tangent of the gat implies a perfect circle of doom!",
- "Shiver my timbers! the captain's slide rule shows infinite cheese!",
- "Shiver my decimals!",
- "Blast it! the probability indicates an escape velocity of ten knots!",
- "Arrr! the probability indicates the gats are ready to fire!",
- "Arrr! the captain's slide rule shows the coordinates of the treasure island!",
- "Blow me down! the tangent of the gat implies the shortest boarding vector!",
- "Shiver my timbers! the matrix of the hold contains we are sinking logarithmically!",
- "By the deep sea! the abacus predicts we are sinking logarithmically!",
- "Avast! the slope of the sea shows an escape velocity of ten knots!",
- "Aha! the tangent of the gat implies an escape velocity of ten knots!",
- "Blow me down! the tangent of the gat implies an escape velocity of ten knots!",
- "Avast! the probability indicates we are sinking logarithmically!",
- "Aha! the slope of the sea shows a perfect circle of doom!",
- "Look alive! my tail calculations reveal the coordinates of the treasure island!",
- "Shiver my timbers! the formula for cheese says infinite cheese!",
- "Aha! the matrix of the hold contains the shortest boarding vector!",
- "Aha! the geometry of this deck requires the shortest boarding vector!",
- "Blast it! the probability indicates a division by zero!",
- "To the brig! the formula for cheese says a division by zero!",
- "Shiver my timbers! the slope of the sea shows a jackpot of gold doubloons!",
- "By the deep sea! the tangent of the gat implies a perfect circle of doom!",
- "By the deep sea! the formula for cheese says we are sinking logarithmically!",
- "Blow me down! the matrix of the hold contains a division by zero!",
- "Blow me down! the captain's slide rule shows an escape velocity of ten knots!",
- "Arrr! the geometry of this deck requires a division by zero!",
- "Blow me down! the abacus predicts a perfect circle of doom!",
- "Avast! the matrix of the hold contains a jackpot of gold doubloons!",
- "To the brig! my tail calculations reveal a prime number of hazards!",
- "Aha! the geometry of this deck requires we are sinking logarithmically!",
- "Hear me crew! the tangent of the gat implies a division by zero!",
- "Hear me crew! the abacus predicts a jackpot of gold doubloons!",
- "Arrr! my tail calculations reveal a prime number of hazards!",
- "By the deep sea! the probability indicates a jackpot of gold doubloons!",
- "By the deep sea! the formula for cheese says the shortest boarding vector!",
- "By the deep sea! the geometry of this deck requires the gats are ready to fire!",
- "Hear me crew! the abacus predicts a division by zero!",
- "By the deep sea! the tangent of the gat implies an escape velocity of ten knots!",
- "Blast it! the probability indicates we are sinking logarithmically!",
- "Hear me crew! the geometry of this deck requires infinite cheese!",
- "Avast! the captain's slide rule shows the shortest boarding vector!",
- "To the brig! the slope of the sea shows a division by zero!",
- "Hear me crew! the captain's slide rule shows the gats are ready to fire!",
- "Avast! the tangent of the gat implies a jackpot of gold doubloons!",
- "Hear me crew! my tail calculations reveal the shortest boarding vector!",
- "Shiver my timbers! the formula for cheese says the coordinates of the treasure island!",
- "Hear me crew! the matrix of the hold contains a perfect circle of doom!",
- "By the deep sea! the geometry of this deck requires the coordinates of the treasure island!",
- "Look alive! the formula for cheese says the coordinates of the treasure island!",
- "Gats, cheese, and geometry\u2014that's all a rat needs!",
- "Arrr! the probability indicates a jackpot of gold doubloons!",
- "Hear me crew! the probability indicates a prime number of hazards!",
- "Blow me down! the geometry of this deck requires an escape velocity of ten knots!",
- "To the brig! the matrix of the hold contains a division by zero!",
- "Blast it! my tail calculations reveal infinite cheese!",
- "Shiver my timbers! my tail calculations reveal a jackpot of gold doubloons!",
- "Shiver my timbers! the matrix of the hold contains the gats are ready to fire!",
- "Hear me crew! the abacus predicts the gats are ready to fire!",
- "Avast! the geometry of this deck requires we are sinking logarithmically!",
- "Shiver my timbers! the tangent of the gat implies we are sinking logarithmically!",
- "Avast! the tangent of the gat implies a prime number of hazards!",
- "Avast! my tail calculations reveal infinite cheese!",
- "Arrr! the matrix of the hold contains the shortest boarding vector!",
- "Blow me down! the slope of the sea shows a prime number of hazards!",
- "Aha! the coordinates point to a division by zero!",
- "To the brig! the matrix of the hold contains we are sinking logarithmically!",
- "Look alive! the formula for cheese says we are sinking logarithmically!",
- "Look alive! the abacus predicts a division by zero!",
- "By the deep sea! the coordinates point to an escape velocity of ten knots!",
- "Blow me down! the coordinates point to we are sinking logarithmically!",
- "By the deep sea! the probability indicates the coordinates of the treasure island!",
- "To the brig! the formula for cheese says a prime number of hazards!",
- "To the brig! the probability indicates infinite cheese!",
- "Look alive! the tangent of the gat implies an escape velocity of ten knots!",
- "Shiver my timbers! the probability indicates we are sinking logarithmically!",
- "By the deep sea! the abacus predicts infinite cheese!",
- "Blow me down! the matrix of the hold contains the coordinates of the treasure island!",
- "Arrr! my tail calculations reveal a perfect circle of doom!",
- "Avast! the captain's slide rule shows an escape velocity of ten knots!",
- "Arrr! the captain's slide rule shows an escape velocity of ten knots!",
- "Blast it! the abacus predicts a prime number of hazards!",
- "Blast it! my tail calculations reveal a division by zero!",
- "Blow me down! the probability indicates a jackpot of gold doubloons!",
- "By the deep sea! the coordinates point to a division by zero!",
- "By the deep sea! the abacus predicts a jackpot of gold doubloons!",
- "Blast it! the captain's slide rule shows a prime number of hazards!",
- "Aha! the slope of the sea shows the coordinates of the treasure island!",
- "To the brig! the matrix of the hold contains a jackpot of gold doubloons!",
- "Look alive! the tangent of the gat implies the gats are ready to fire!",
- "Blast it! the matrix of the hold contains a prime number of hazards!",
- "Arrr! the tangent of the gat implies a perfect circle of doom!",
- "Avast! the slope of the sea shows a jackpot of gold doubloons!",
- "Shiver my timbers! the formula for cheese says a prime number of hazards!",
- "By the deep sea! my tail calculations reveal we are sinking logarithmically!",
- "Hear me crew! the slope of the sea shows a jackpot of gold doubloons!",
- "Aha! the geometry of this deck requires infinite cheese!",
- "To the brig! the geometry of this deck requires the coordinates of the treasure island!",
- "Look alive! the coordinates point to the coordinates of the treasure island!",
- "Look alive! the formula for cheese says the shortest boarding vector!",
- "By the deep sea! the geometry of this deck requires a prime number of hazards!",
- "To the brig! the tangent of the gat implies we are sinking logarithmically!",
- "Hear me crew! the coordinates point to a perfect circle of doom!",
- "Aha! the formula for cheese says infinite cheese!",
- "By the deep sea! the formula for cheese says a prime number of hazards!",
- "Aha! the matrix of the hold contains the gats are ready to fire!",
- "Arrr! my tail calculations reveal the gats are ready to fire!"
- ],
- "good_at_math": [
- "Thinks they are, they uses slide rules to navigate stormy seas but gets confused by negative numbers.",
- "Thinks they are, they remembers the first 100 digits of Pi and has the abacus tattoos to prove it.",
- "Yes, they understands the probability of drawing a Joker but gets confused by negative numbers.",
- "According to the abacus, they can balance the captain's ledgers in their head but gets confused by negative numbers.",
- "No, they can solve equations under threat of cannon fire but gets distracted by shiny brass coins.",
- "No, they knows how to divide cheese by zero and has the abacus tattoos to prove it.",
- "In theory, they can solve equations under threat of cannon fire but gets distracted by shiny brass coins.",
- "On paper, they can solve equations under threat of cannon fire but only when drunk on grog.",
- "Absolutely, they remembers the first 100 digits of Pi and has a certificate from the Stowaway Academy.",
- "No, they understands the geometry of boarding leaps and has the abacus tattoos to prove it.",
- "Thinks they are, they can solve equations under threat of cannon fire but refuses to use prime numbers.",
- "Barely, they can calculate the trajectory of a gat bullet but refuses to use prime numbers.",
- "Only, they understands the geometry of boarding leaps but only when drunk on grog.",
- "Absolutely, they can solve equations under threat of cannon fire but gets confused by negative numbers.",
- "Thinks they are, they understands the geometry of boarding leaps but only when cheese is involved.",
- "Thinks they are, they knows how to divide cheese by zero but only when cheese is involved.",
- "On paper, they remembers the first 100 digits of Pi but only in base-3.",
- "On paper, they knows how to divide cheese by zero and has a certificate from the Stowaway Academy.",
- "According to the abacus, they uses slide rules to navigate stormy seas and has the abacus tattoos to prove it.",
- "Yes, they can count abacus beads in pitch black hold but only when cheese is involved.",
- "No, they can calculate the trajectory of a gat bullet but gets confused by negative numbers.",
- "No, they interprets sea maps as coordinate grids but thinks fractions are bad luck.",
- "Secretly, they can solve equations under threat of cannon fire but thinks fractions are bad luck.",
- "On paper, they uses slide rules to navigate stormy seas and has a certificate from the Stowaway Academy.",
- "According to the abacus, they interprets sea maps as coordinate grids but only in base-3.",
- "In theory, they interprets sea maps as coordinate grids but gets distracted by shiny brass coins.",
- "Thinks they are, they knows how to divide cheese by zero but thinks fractions are bad luck.",
- "Secretly, they can balance the captain's ledgers in their head but only when cheese is involved.",
- "Only, they interprets sea maps as coordinate grids and has the abacus tattoos to prove it.",
- "According to the abacus, they can balance the captain's ledgers in their head but gets distracted by shiny brass coins.",
- "Only, they uses slide rules to navigate stormy seas but refuses to use prime numbers.",
- "No, they remembers the first 100 digits of Pi but only when drunk on grog.",
- "On paper, they can calculate the trajectory of a gat bullet but gets confused by negative numbers.",
- "In theory, they uses slide rules to navigate stormy seas but thinks fractions are bad luck.",
- "Thinks they are, they understands the geometry of boarding leaps but refuses to use prime numbers.",
- "Absolutely, they can count abacus beads in pitch black hold but gets confused by negative numbers.",
- "Yes, they can solve equations under threat of cannon fire but only when drunk on grog.",
- "Only, they understands the geometry of boarding leaps and has the abacus tattoos to prove it.",
- "Thinks they are, they can balance the captain's ledgers in their head but refuses to use prime numbers.",
- "Secretly, they can solve equations under threat of cannon fire but gets confused by negative numbers.",
- "No, they can calculate the trajectory of a gat bullet and has the abacus tattoos to prove it.",
- "Yes, specializes in escape vector geometry.",
- "Secretly, they knows how to divide cheese by zero but only when drunk on grog.",
- "No, they understands the geometry of boarding leaps and has a certificate from the Stowaway Academy.",
- "Absolutely, they understands the probability of drawing a Joker and has the abacus tattoos to prove it.",
- "Absolutely, they interprets sea maps as coordinate grids but only in base-3.",
- "Yes, they can calculate the trajectory of a gat bullet but only when cheese is involved.",
- "In theory, they can balance the captain's ledgers in their head but gets confused by negative numbers.",
- "No, they uses slide rules to navigate stormy seas but refuses to use prime numbers.",
- "According to the abacus, they can solve equations under threat of cannon fire but gets distracted by shiny brass coins.",
- "Absolutely, they remembers the first 100 digits of Pi but gets confused by negative numbers.",
- "Thinks they are, they uses slide rules to navigate stormy seas but only when drunk on grog.",
- "Yes, they can count abacus beads in pitch black hold but only in base-3.",
- "Secretly, they can calculate the trajectory of a gat bullet but only when drunk on grog.",
- "On paper, they can calculate the trajectory of a gat bullet but only when drunk on grog.",
- "Only, they can solve equations under threat of cannon fire but gets confused by negative numbers.",
- "Yes, they can count abacus beads in pitch black hold and has the abacus tattoos to prove it.",
- "In theory, they can balance the captain's ledgers in their head but only when cheese is involved.",
- "Barely, they interprets sea maps as coordinate grids but thinks fractions are bad luck.",
- "According to the abacus, they interprets sea maps as coordinate grids and claims numbers speak to them in dreams.",
- "Thinks they are, they can balance the captain's ledgers in their head but thinks fractions are bad luck.",
- "Absolutely, they knows how to divide cheese by zero but refuses to use prime numbers.",
- "Secretly, they understands the geometry of boarding leaps but only when drunk on grog.",
- "In theory, they can calculate the trajectory of a gat bullet but only in base-3.",
- "Barely, they knows how to divide cheese by zero and has a certificate from the Stowaway Academy.",
- "Absolutely, they remembers the first 100 digits of Pi but gets distracted by shiny brass coins.",
- "Thinks they are, they understands the geometry of boarding leaps but thinks fractions are bad luck.",
- "On paper, they remembers the first 100 digits of Pi but gets confused by negative numbers.",
- "On paper, they understands the probability of drawing a Joker but gets distracted by shiny brass coins.",
- "Secretly, they can solve equations under threat of cannon fire but only when drunk on grog.",
- "In theory, they interprets sea maps as coordinate grids and has the abacus tattoos to prove it.",
- "In theory, they knows how to divide cheese by zero and has the abacus tattoos to prove it.",
- "Absolutely, they knows how to divide cheese by zero but only in base-3.",
- "Only, they remembers the first 100 digits of Pi but only when cheese is involved.",
- "Only, they understands the probability of drawing a Joker but only when cheese is involved.",
- "Barely, they can balance the captain's ledgers in their head but gets distracted by shiny brass coins.",
- "No, they understands the probability of drawing a Joker and has a certificate from the Stowaway Academy.",
- "In theory, they remembers the first 100 digits of Pi but only when cheese is involved.",
- "Yes, they can count abacus beads in pitch black hold but only when drunk on grog.",
- "In theory, they can calculate the trajectory of a gat bullet and claims numbers speak to them in dreams.",
- "Only, they understands the probability of drawing a Joker and has a certificate from the Stowaway Academy.",
- "Secretly, they understands the geometry of boarding leaps and has a certificate from the Stowaway Academy.",
- "Secretly, they remembers the first 100 digits of Pi but only when cheese is involved.",
- "Absolutely, they understands the geometry of boarding leaps and has a certificate from the Stowaway Academy.",
- "Thinks they are, they understands the probability of drawing a Joker and claims numbers speak to them in dreams.",
- "On paper, they understands the probability of drawing a Joker but only when cheese is involved.",
- "Only, they understands the geometry of boarding leaps and has a certificate from the Stowaway Academy.",
- "Thinks they are, they remembers the first 100 digits of Pi but thinks fractions are bad luck.",
- "No, they understands the probability of drawing a Joker but thinks fractions are bad luck.",
- "On paper, they can calculate the trajectory of a gat bullet but thinks fractions are bad luck.",
- "In theory, they can calculate the trajectory of a gat bullet but only when drunk on grog.",
- "Yes, but only in base-8 because they lost two claws to a cat.",
- "No, they uses slide rules to navigate stormy seas but gets distracted by shiny brass coins.",
- "Only, they uses slide rules to navigate stormy seas and has a certificate from the Stowaway Academy.",
- "Thinks they are, they can count abacus beads in pitch black hold but gets confused by negative numbers.",
- "Absolutely, they understands the probability of drawing a Joker but gets confused by negative numbers.",
- "Secretly, they can calculate the trajectory of a gat bullet but only in base-3.",
- "In theory, they interprets sea maps as coordinate grids but only in base-3.",
- "Absolutely, they understands the probability of drawing a Joker but refuses to use prime numbers.",
- "Secretly, they remembers the first 100 digits of Pi and claims numbers speak to them in dreams.",
- "Thinks they are, they can count abacus beads in pitch black hold and has a certificate from the Stowaway Academy.",
- "Secretly, they uses slide rules to navigate stormy seas and has the abacus tattoos to prove it.",
- "Absolutely, they interprets sea maps as coordinate grids and has the abacus tattoos to prove it.",
- "Only, they understands the geometry of boarding leaps but gets distracted by shiny brass coins.",
- "Secretly, they uses slide rules to navigate stormy seas but only in base-3.",
- "According to the abacus, they knows how to divide cheese by zero but gets confused by negative numbers.",
- "According to the abacus, they interprets sea maps as coordinate grids and has the abacus tattoos to prove it.",
- "No, they understands the probability of drawing a Joker and claims numbers speak to them in dreams.",
- "No, they interprets sea maps as coordinate grids and has the abacus tattoos to prove it.",
- "According to the abacus, they understands the probability of drawing a Joker but only in base-3.",
- "Thinks they are, they can calculate the trajectory of a gat bullet but gets confused by negative numbers.",
- "Absolutely, they remembers the first 100 digits of Pi and claims numbers speak to them in dreams.",
- "Secretly, they interprets sea maps as coordinate grids and has a certificate from the Stowaway Academy.",
- "Absolutely, they can solve equations under threat of cannon fire and has a certificate from the Stowaway Academy.",
- "Yes, they understands the probability of drawing a Joker but thinks fractions are bad luck.",
- "Absolutely, they can count abacus beads in pitch black hold and has the abacus tattoos to prove it.",
- "Absolutely, they uses slide rules to navigate stormy seas and has the abacus tattoos to prove it.",
- "According to the abacus, they understands the geometry of boarding leaps and claims numbers speak to them in dreams.",
- "Only, they can solve equations under threat of cannon fire and has a certificate from the Stowaway Academy.",
- "Absolutely, they understands the geometry of boarding leaps but gets confused by negative numbers.",
- "Absolutely, they understands the geometry of boarding leaps but gets distracted by shiny brass coins.",
- "Absolutely, they interprets sea maps as coordinate grids but only when cheese is involved.",
- "No, they can balance the captain's ledgers in their head but gets confused by negative numbers.",
- "Absolutely, they can solve equations under threat of cannon fire but refuses to use prime numbers.",
- "No, they can solve equations under threat of cannon fire but thinks fractions are bad luck.",
- "Barely, they uses slide rules to navigate stormy seas but only in base-3.",
- "In theory, they knows how to divide cheese by zero but only in base-3.",
- "Thinks they are, they can solve equations under threat of cannon fire but only when drunk on grog.",
- "Absolutely, they uses slide rules to navigate stormy seas but only when drunk on grog.",
- "Only, they understands the probability of drawing a Joker but only when drunk on grog.",
- "They can compute a Fibonacci sequence in under three seconds.",
- "Secretly, they knows how to divide cheese by zero and claims numbers speak to them in dreams.",
- "Thinks they are, they can count abacus beads in pitch black hold but gets distracted by shiny brass coins.",
- "Secretly, they interprets sea maps as coordinate grids and claims numbers speak to them in dreams.",
- "Absolutely, they can solve equations under threat of cannon fire but only when drunk on grog.",
- "Yes, they can balance the captain's ledgers in their head but gets distracted by shiny brass coins.",
- "Only, they knows how to divide cheese by zero and has the abacus tattoos to prove it.",
- "Thinks they are, they can calculate the trajectory of a gat bullet but only when cheese is involved.",
- "According to the abacus, they can calculate the trajectory of a gat bullet and has the abacus tattoos to prove it.",
- "In theory, they remembers the first 100 digits of Pi but gets distracted by shiny brass coins.",
- "According to the abacus, they can balance the captain's ledgers in their head but thinks fractions are bad luck.",
- "No, they understands the probability of drawing a Joker but only in base-3.",
- "In theory, they uses slide rules to navigate stormy seas but gets confused by negative numbers.",
- "Thinks they are, they uses slide rules to navigate stormy seas but refuses to use prime numbers.",
- "Secretly, they interprets sea maps as coordinate grids but only when drunk on grog.",
- "Yes, they interprets sea maps as coordinate grids but gets confused by negative numbers.",
- "No, they understands the geometry of boarding leaps but only in base-3.",
- "Secretly, they remembers the first 100 digits of Pi but thinks fractions are bad luck.",
- "Absolutely, they can count abacus beads in pitch black hold but refuses to use prime numbers.",
- "In theory, they uses slide rules to navigate stormy seas and has the abacus tattoos to prove it.",
- "Yes, they can count abacus beads in pitch black hold but gets confused by negative numbers.",
- "Yes, they can solve equations under threat of cannon fire but only in base-3.",
- "Absolutely, they can balance the captain's ledgers in their head and has a certificate from the Stowaway Academy.",
- "Yes, they can balance the captain's ledgers in their head and claims numbers speak to them in dreams.",
- "Absolutely, they can calculate the trajectory of a gat bullet and claims numbers speak to them in dreams.",
- "On paper, they knows how to divide cheese by zero but thinks fractions are bad luck.",
- "Thinks they are, they understands the probability of drawing a Joker but only when cheese is involved.",
- "Thinks they are, they uses slide rules to navigate stormy seas but only in base-3.",
- "Barely, they understands the probability of drawing a Joker but gets distracted by shiny brass coins.",
- "Only, they understands the geometry of boarding leaps but gets confused by negative numbers.",
- "On paper, they knows how to divide cheese by zero but only when drunk on grog.",
- "On paper, they can count abacus beads in pitch black hold but gets confused by negative numbers.",
- "No, they understands the probability of drawing a Joker but only when cheese is involved.",
- "Barely, they knows how to divide cheese by zero but refuses to use prime numbers.",
- "On paper, they understands the geometry of boarding leaps but thinks fractions are bad luck.",
- "In theory, they can balance the captain's ledgers in their head but gets distracted by shiny brass coins.",
- "Yes, they remembers the first 100 digits of Pi but only when cheese is involved.",
- "Only, they knows how to divide cheese by zero but only when cheese is involved.",
- "Only, they can balance the captain's ledgers in their head but only when cheese is involved.",
- "Absolutely, they can count abacus beads in pitch black hold and has a certificate from the Stowaway Academy.",
- "Barely, they can count abacus beads in pitch black hold but gets confused by negative numbers.",
- "On paper, they can count abacus beads in pitch black hold and claims numbers speak to them in dreams.",
- "Absolutely, they understands the geometry of boarding leaps and claims numbers speak to them in dreams.",
- "Barely, they knows how to divide cheese by zero but only when cheese is involved.",
- "Thinks they are, they can solve equations under threat of cannon fire but thinks fractions are bad luck.",
- "In theory, they interprets sea maps as coordinate grids but refuses to use prime numbers.",
- "Yes, they understands the probability of drawing a Joker but gets distracted by shiny brass coins.",
- "In theory, they knows how to divide cheese by zero and claims numbers speak to them in dreams.",
- "Yes, they interprets sea maps as coordinate grids and claims numbers speak to them in dreams.",
- "Only, they remembers the first 100 digits of Pi and claims numbers speak to them in dreams.",
- "Only, they uses slide rules to navigate stormy seas and has the abacus tattoos to prove it.",
- "In theory, they can balance the captain's ledgers in their head but only in base-3.",
- "On paper, they remembers the first 100 digits of Pi and has a certificate from the Stowaway Academy.",
- "According to the abacus, they understands the geometry of boarding leaps but gets distracted by shiny brass coins.",
- "On paper, they can solve equations under threat of cannon fire and has a certificate from the Stowaway Academy.",
- "In theory, they understands the probability of drawing a Joker but refuses to use prime numbers.",
- "Absolutely, they can balance the captain's ledgers in their head and has the abacus tattoos to prove it.",
- "On paper, they can balance the captain's ledgers in their head but only when drunk on grog.",
- "No, they can count abacus beads in pitch black hold but only when drunk on grog.",
- "Barely, they uses slide rules to navigate stormy seas but only when drunk on grog.",
- "No, they can balance the captain's ledgers in their head but thinks fractions are bad luck.",
- "According to the abacus, they remembers the first 100 digits of Pi but refuses to use prime numbers.",
- "Barely, they understands the probability of drawing a Joker but only when drunk on grog.",
- "Yes, they can balance the captain's ledgers in their head but thinks fractions are bad luck.",
- "Only, they can solve equations under threat of cannon fire but only when cheese is involved.",
- "Absolutely, they interprets sea maps as coordinate grids and claims numbers speak to them in dreams.",
- "On paper, they can calculate the trajectory of a gat bullet but gets distracted by shiny brass coins.",
- "Barely, they can count abacus beads in pitch black hold and has the abacus tattoos to prove it.",
- "Thinks they are, they interprets sea maps as coordinate grids but only when cheese is involved.",
- "According to the abacus, they remembers the first 100 digits of Pi and claims numbers speak to them in dreams."
- ],
- "like": [
- "They secretly saves the gunpowder barrels during storm navigation.",
- "They always shares the captain's stash with mathematical precision.",
- "They faithfully guards the escape vectors when the seagulls attack.",
- "They always shares the backup abacus even under heavy fire.",
- "They cheerfully carries the coordinate charts when the seagulls attack.",
- "They always shares the compass dial because they are a true friend.",
- "They never steals the backup abacus to keep the crew happy.",
- "They cleanly polishes the captain's stash because they are a true friend.",
- "They secretly saves the gunpowder barrels just to be nice.",
- "They cleanly polishes the gunpowder barrels during storm navigation.",
- "They faithfully guards the compass dial during storm navigation.",
- "They keep the gats polished and oiled.",
- "They cleanly polishes the gunpowder barrels with mathematical precision.",
- "They secretly saves the spare gats without asking for a share.",
- "They secretly saves the gunpowder barrels to keep the crew happy.",
- "They expertly calculates the captain's stash to keep the crew happy.",
- "They secretly saves the escape vectors even under heavy fire.",
- "They secretly saves the golden abacus beads to ensure a perfect escape.",
- "They cheerfully carries the cheese wedges without asking for a share.",
- "They never steals the cheese wedges with mathematical precision.",
- "They quietly hums shanties for the captain's stash to ensure a perfect escape.",
- "They quietly hums shanties for the captain's stash without asking for a share.",
- "They always shares the compass dial to ensure a perfect escape.",
- "They always shares the coordinate charts without asking for a share.",
- "They never steals the captain's stash in base-10 code.",
- "They expertly calculates the golden abacus beads without asking for a share.",
- "They quietly hums shanties for the coordinate charts just to be nice.",
- "They expertly calculates the cheese wedges when the seagulls attack.",
- "They cheerfully carries the wet hold biscuits even under heavy fire.",
- "They quietly hums shanties for the coordinate charts without asking for a share.",
- "They boldly defends the gunpowder barrels without asking for a share.",
- "They faithfully guards the coordinate charts in base-10 code.",
- "They always shares the cheese wedges to keep the crew happy.",
- "They always shares the cheese wedges with mathematical precision.",
- "They never steals the gunpowder barrels without asking for a share.",
- "They never steals the wet hold biscuits without asking for a share.",
- "They expertly calculates the backup abacus in base-10 code.",
- "They brilliantly solves the coordinate charts to ensure a perfect escape.",
- "They expertly calculates the wet hold biscuits to ensure a perfect escape.",
- "They cleanly polishes the escape vectors in base-10 code.",
- "They secretly saves the gunpowder barrels to ensure a perfect escape.",
- "They brilliantly solves the escape vectors even under heavy fire.",
- "They cheerfully carries the gunpowder barrels because they are a true friend.",
- "They boldly defends the gunpowder barrels because they are a true friend.",
- "They boldly defends the compass dial in base-10 code.",
- "They secretly saves the cheese wedges when the seagulls attack.",
- "They quietly hums shanties for the compass dial with mathematical precision.",
- "They cheerfully carries the gunpowder barrels without asking for a share.",
- "They faithfully guards the wet hold biscuits with mathematical precision.",
- "They quietly hums shanties for the compass dial when the seagulls attack.",
- "They expertly calculates the coordinate charts when the seagulls attack.",
- "They cleanly polishes the wet hold biscuits when the seagulls attack.",
- "They boldly defends the compass dial to keep the crew happy.",
- "They quietly hums shanties for the spare gats just to be nice.",
- "They faithfully guards the cheese wedges even under heavy fire.",
- "They cheerfully carries the spare gats because they are a true friend.",
- "They faithfully guards the coordinate charts even under heavy fire.",
- "They faithfully guards the compass dial with mathematical precision.",
- "They cleanly polishes the wet hold biscuits with mathematical precision.",
- "They quietly hums shanties for the captain's stash in base-10 code.",
- "They never steals the coordinate charts with mathematical precision.",
- "They cleanly polishes the gunpowder barrels even under heavy fire.",
- "They cleanly polishes the spare gats even under heavy fire.",
- "They boldly defends the escape vectors with mathematical precision.",
- "They secretly saves the backup abacus when the seagulls attack.",
- "They faithfully guards the coordinate charts when the seagulls attack.",
- "They always shares the gunpowder barrels in base-10 code.",
- "They never steals the captain's stash even under heavy fire.",
- "They brilliantly solves the wet hold biscuits to ensure a perfect escape.",
- "They faithfully guards the backup abacus because they are a true friend.",
- "They expertly calculates the compass dial in base-10 code.",
- "They secretly saves the backup abacus to ensure a perfect escape.",
- "They expertly calculates the compass dial when the seagulls attack.",
- "They brilliantly solves the backup abacus in base-10 code.",
- "They expertly calculates the coordinate charts because they are a true friend.",
- "They cleanly polishes the gunpowder barrels without asking for a share.",
- "They expertly calculates the coordinate charts in base-10 code.",
- "They expertly calculates the cheese wedges even under heavy fire.",
- "They boldly defends the compass dial when the seagulls attack.",
- "They cheerfully carries the wet hold biscuits during storm navigation.",
- "They always shares the escape vectors because they are a true friend.",
- "They cheerfully carries the escape vectors even under heavy fire.",
- "They faithfully guards the captain's stash in base-10 code.",
- "They boldly defends the compass dial because they are a true friend.",
- "They faithfully guards the golden abacus beads even under heavy fire.",
- "They cleanly polishes the golden abacus beads because they are a true friend.",
- "They secretly saves the cheese wedges with mathematical precision.",
- "They always shares the wet hold biscuits to keep the crew happy.",
- "They quietly hums shanties for the spare gats without asking for a share.",
- "They never steals the captain's stash to ensure a perfect escape.",
- "They faithfully guards the gunpowder barrels because they are a true friend.",
- "They quietly hums shanties for the wet hold biscuits with mathematical precision.",
- "They never steals the cheese wedges when the seagulls attack.",
- "They faithfully guards the compass dial to ensure a perfect escape.",
- "They quietly hums shanties for the spare gats in base-10 code.",
- "They never steals the compass dial even under heavy fire.",
- "They faithfully guards the cheese wedges just to be nice.",
- "They cleanly polishes the captain's stash when the seagulls attack.",
- "They cleanly polishes the golden abacus beads just to be nice.",
- "They expertly calculates the escape vectors even under heavy fire.",
- "They never steals the compass dial when the seagulls attack.",
- "They quietly hums shanties for the golden abacus beads when the seagulls attack.",
- "They cheerfully carries the coordinate charts in base-10 code.",
- "They faithfully guards the cheese wedges when the seagulls attack.",
- "They secretly saves the wet hold biscuits without asking for a share.",
- "They faithfully guards the compass dial because they are a true friend.",
- "They always shares the backup abacus because they are a true friend.",
- "They cleanly polishes the wet hold biscuits in base-10 code.",
- "They boldly defends the backup abacus to ensure a perfect escape.",
- "They cheerfully carries the spare gats even under heavy fire.",
- "They brilliantly solves the coordinate charts with mathematical precision.",
- "They secretly saves the compass dial because they are a true friend.",
- "They faithfully guards the coordinate charts because they are a true friend.",
- "They expertly calculates the backup abacus without asking for a share.",
- "They never steals the coordinate charts during storm navigation.",
- "They secretly saves the captain's stash when the seagulls attack.",
- "They brilliantly solves the backup abacus just to be nice.",
- "They boldly defends the gunpowder barrels to keep the crew happy.",
- "They cleanly polishes the compass dial to ensure a perfect escape.",
- "They expertly calculates the golden abacus beads with mathematical precision.",
- "They secretly saves the coordinate charts because they are a true friend.",
- "They never steals the gunpowder barrels because they are a true friend.",
- "They secretly saves the gunpowder barrels when the seagulls attack.",
- "They always shares the golden abacus beads in base-10 code.",
- "They secretly saves the gunpowder barrels because they are a true friend.",
- "They faithfully guards the coordinate charts with mathematical precision.",
- "They expertly calculates the captain's stash just to be nice.",
- "They cleanly polishes the gunpowder barrels because they are a true friend.",
- "They quietly hums shanties for the compass dial even under heavy fire.",
- "They secretly saves the captain's stash in base-10 code.",
- "They brilliantly solves the wet hold biscuits just to be nice.",
- "They cleanly polishes the wet hold biscuits because they are a true friend.",
- "They brilliantly solves the spare gats when the seagulls attack.",
- "They always shares the escape vectors with mathematical precision.",
- "They never steals the backup abacus in base-10 code.",
- "They cheerfully carries the escape vectors because they are a true friend.",
- "They cheerfully carries the gunpowder barrels in base-10 code.",
- "They always shares the escape vectors without asking for a share.",
- "They cleanly polishes the golden abacus beads without asking for a share.",
- "They expertly calculates the coordinate charts without asking for a share.",
- "They faithfully guards the golden abacus beads to ensure a perfect escape.",
- "They brilliantly solves the golden abacus beads with mathematical precision.",
- "They brilliantly solves the backup abacus without asking for a share.",
- "They cheerfully carries the captain's stash when the seagulls attack.",
- "They expertly calculates the escape vectors during storm navigation.",
- "They never steals the gunpowder barrels when the seagulls attack.",
- "They expertly calculates the captain's stash even under heavy fire.",
- "They brilliantly solves the golden abacus beads without asking for a share.",
- "They boldly defends the compass dial even under heavy fire.",
- "They tell the best stories about the Great Cheese Reef.",
- "They never steals the escape vectors just to be nice.",
- "They faithfully guards the spare gats because they are a true friend.",
- "They quietly hums shanties for the cheese wedges when the seagulls attack.",
- "They expertly calculates the escape vectors because they are a true friend.",
- "They always shares the backup abacus when the seagulls attack.",
- "They quietly hums shanties for the cheese wedges to keep the crew happy.",
- "They brilliantly solves the cheese wedges to ensure a perfect escape.",
- "They never steals the wet hold biscuits when the seagulls attack.",
- "They brilliantly solves the golden abacus beads even under heavy fire.",
- "They quietly hums shanties for the captain's stash to keep the crew happy.",
- "They quietly hums shanties for the gunpowder barrels to ensure a perfect escape.",
- "They boldly defends the escape vectors to keep the crew happy.",
- "They always shares the spare gats to keep the crew happy.",
- "They quietly hums shanties for the gunpowder barrels even under heavy fire.",
- "They brilliantly solves the compass dial even under heavy fire.",
- "They cleanly polishes the cheese wedges in base-10 code.",
- "They brilliantly solves the captain's stash just to be nice.",
- "They quietly hums shanties for the cheese wedges because they are a true friend.",
- "They brilliantly solves the compass dial just to be nice.",
- "They cleanly polishes the backup abacus to keep the crew happy.",
- "They never steals the cheese wedges to keep the crew happy.",
- "They secretly saves the cheese wedges in base-10 code.",
- "They boldly defends the wet hold biscuits because they are a true friend.",
- "They always shares the escape vectors during storm navigation.",
- "They quietly hums shanties for the golden abacus beads to keep the crew happy.",
- "They brilliantly solves the wet hold biscuits in base-10 code.",
- "They cleanly polishes the spare gats to keep the crew happy.",
- "They cheerfully carries the captain's stash with mathematical precision.",
- "They boldly defends the backup abacus just to be nice.",
- "They expertly calculates the coordinate charts even under heavy fire.",
- "They quietly hums shanties for the backup abacus in base-10 code.",
- "They faithfully guards the gunpowder barrels during storm navigation.",
- "They always shares the backup abacus to ensure a perfect escape.",
- "They faithfully guards the spare gats just to be nice.",
- "They cleanly polishes the cheese wedges because they are a true friend.",
- "They always shares the gunpowder barrels to keep the crew happy.",
- "They always shares the backup abacus just to be nice.",
- "They brilliantly solves the backup abacus when the seagulls attack.",
- "They expertly calculates the wet hold biscuits to keep the crew happy.",
- "They faithfully guards the escape vectors to keep the crew happy.",
- "They expertly calculates the coordinate charts during storm navigation.",
- "They secretly saves the coordinate charts in base-10 code.",
- "They cheerfully carries the cheese wedges just to be nice.",
- "They expertly calculates the escape vectors to keep the crew happy.",
- "They always shares the golden abacus beads during storm navigation.",
- "They faithfully guards the captain's stash without asking for a share.",
- "They cheerfully carries the backup abacus in base-10 code.",
- "They cheerfully carries the compass dial during storm navigation.",
- "They expertly calculates the wet hold biscuits just to be nice.",
- "They secretly saves the compass dial when the seagulls attack."
- ],
- "hate": [
- "They annoyingly chews the coordinate maps but only in base-3.",
- "They secretly hoards the gat barrel oil but gets confused by negative numbers.",
- "They loudly whistles the abacus beads and has a certificate from the Stowaway Academy.",
- "They clumsily breaks the geometry homework and has the abacus tattoos to prove it.",
- "They frequently drops the bilge keys but only when drunk on grog.",
- "They always claims the navigator's compass but only when drunk on grog.",
- "They carelessly stains the abacus beads but only when drunk on grog.",
- "They carelessly stains the hammock ropes and has the abacus tattoos to prove it.",
- "They constantly complains about the navigator's compass but refuses to use prime numbers.",
- "They stubbornly argues about the slide rule but only in base-3.",
- "They annoyingly chews the abacus beads but only in base-3.",
- "They secretly hoards the dry gunpowder bags and has the abacus tattoos to prove it.",
- "They always claims the geometry homework but only when drunk on grog.",
- "They accidently misplaces the navigator's compass but thinks fractions are bad luck.",
- "They carelessly stains the gat barrel oil but gets distracted by shiny brass coins.",
- "They annoyingly chews the coordinate maps but gets confused by negative numbers.",
- "They carelessly stains the slide rule but refuses to use prime numbers.",
- "They stubbornly argues about the coordinate maps and claims numbers speak to them in dreams.",
- "They stubbornly argues about the dry gunpowder bags but gets distracted by shiny brass coins.",
- "They loudly whistles the gat barrel oil but only when cheese is involved.",
- "They accidently misplaces the navigator's compass and has the abacus tattoos to prove it.",
- "They frequently drops the geometry homework and claims numbers speak to them in dreams.",
- "They carelessly stains the coordinate maps but only in base-3.",
- "They accidently misplaces the hammock ropes and has a certificate from the Stowaway Academy.",
- "They accidently misplaces the gat barrel oil and claims numbers speak to them in dreams.",
- "They stubbornly argues about the dry gunpowder bags and has a certificate from the Stowaway Academy.",
- "They clumsily breaks the slide rule and has a certificate from the Stowaway Academy.",
- "They chew their tail when nervous.",
- "They annoyingly chews the hammock ropes but refuses to use prime numbers.",
- "They annoyingly chews the hammock ropes but thinks fractions are bad luck.",
- "They loudly whistles the gat barrel oil and has the abacus tattoos to prove it.",
- "They frequently drops the hammock ropes but gets distracted by shiny brass coins.",
- "They annoyingly chews the hammock ropes but gets confused by negative numbers.",
- "They accidently misplaces the cheese wedges but gets distracted by shiny brass coins.",
- "They always claims the hammock ropes but gets confused by negative numbers.",
- "They secretly hoards the coordinate maps and claims numbers speak to them in dreams.",
- "They clumsily breaks the slide rule and claims numbers speak to them in dreams.",
- "They annoyingly chews the gat barrel oil but only in base-3.",
- "They always claims the slide rule but only in base-3.",
- "They stubbornly argues about the bilge keys but only when drunk on grog.",
- "They loudly whistles the cheese wedges but refuses to use prime numbers.",
- "They accidently misplaces the slide rule but thinks fractions are bad luck.",
- "They accidently misplaces the abacus beads and claims numbers speak to them in dreams.",
- "They loudly whistles the hammock ropes but only in base-3.",
- "They secretly hoards the navigator's compass but only in base-3.",
- "They accidently misplaces the navigator's compass but gets distracted by shiny brass coins.",
- "They clumsily breaks the hammock ropes but gets distracted by shiny brass coins.",
- "They always claims the gat barrel oil and has the abacus tattoos to prove it.",
- "They always claims the navigator's compass and claims numbers speak to them in dreams.",
- "They always claims the hammock ropes and claims numbers speak to them in dreams.",
- "They clumsily breaks the navigator's compass but only when drunk on grog.",
- "They loudly whistles the navigator's compass and has the abacus tattoos to prove it.",
- "They stubbornly argues about the navigator's compass but refuses to use prime numbers.",
- "They always claims the cheese wedges but thinks fractions are bad luck.",
- "They frequently drops the bilge keys but gets confused by negative numbers.",
- "They talk about imaginary numbers in their sleep.",
- "They secretly hoards the dry gunpowder bags but only when cheese is involved.",
- "They stubbornly argues about the coordinate maps but gets confused by negative numbers.",
- "They secretly hoards the navigator's compass but only when drunk on grog.",
- "They accidently misplaces the coordinate maps and has a certificate from the Stowaway Academy.",
- "They clumsily breaks the abacus beads but thinks fractions are bad luck.",
- "They accidently misplaces the coordinate maps but only in base-3.",
- "They annoyingly chews the coordinate maps but only when drunk on grog.",
- "They accidently misplaces the coordinate maps but thinks fractions are bad luck.",
- "They clumsily breaks the coordinate maps but gets confused by negative numbers.",
- "They clumsily breaks the geometry homework but gets distracted by shiny brass coins.",
- "They frequently drops the abacus beads but gets distracted by shiny brass coins.",
- "They secretly hoards the gat barrel oil but only when cheese is involved.",
- "They stubbornly argues about the bilge keys and claims numbers speak to them in dreams.",
- "They clumsily breaks the geometry homework and claims numbers speak to them in dreams.",
- "They carelessly stains the hammock ropes but gets confused by negative numbers.",
- "They frequently drops the dry gunpowder bags but thinks fractions are bad luck.",
- "They always claims the geometry homework but refuses to use prime numbers.",
- "They always claims the cheese wedges but only in base-3.",
- "They always claims the geometry homework and has a certificate from the Stowaway Academy.",
- "They annoyingly chews the dry gunpowder bags but refuses to use prime numbers.",
- "They loudly whistles the cheese wedges and has a certificate from the Stowaway Academy.",
- "They clumsily breaks the dry gunpowder bags but only when cheese is involved.",
- "They stubbornly argues about the gat barrel oil but only when drunk on grog.",
- "They annoyingly chews the navigator's compass but only in base-3.",
- "They annoyingly chews the hammock ropes but gets distracted by shiny brass coins.",
- "They carelessly stains the gat barrel oil and claims numbers speak to them in dreams.",
- "They secretly hoards the geometry homework and has a certificate from the Stowaway Academy.",
- "They secretly hoards the hammock ropes and has the abacus tattoos to prove it.",
- "They frequently drops the gat barrel oil and claims numbers speak to them in dreams.",
- "They accidently misplaces the hammock ropes and claims numbers speak to them in dreams.",
- "They frequently drops the coordinate maps but gets distracted by shiny brass coins.",
- "They carelessly stains the gat barrel oil but only in base-3.",
- "They always claims the cheese wedges but only when cheese is involved.",
- "They loudly whistles the gat barrel oil but thinks fractions are bad luck.",
- "They frequently drops the dry gunpowder bags but gets confused by negative numbers.",
- "They clumsily breaks the dry gunpowder bags but gets distracted by shiny brass coins.",
- "They always claims the bilge keys and has the abacus tattoos to prove it.",
- "They constantly complains about the geometry homework but only when drunk on grog.",
- "They carelessly stains the slide rule and has the abacus tattoos to prove it.",
- "They constantly complains about the slide rule but refuses to use prime numbers.",
- "They chew on the gunpowder bags.",
- "They constantly complains about the navigator's compass but only in base-3.",
- "They annoyingly chews the geometry homework but only when drunk on grog.",
- "They always claims the bilge keys but refuses to use prime numbers.",
- "They stubbornly argues about the slide rule but gets distracted by shiny brass coins.",
- "They carelessly stains the hammock ropes but only when drunk on grog.",
- "They accidently misplaces the navigator's compass but only when drunk on grog.",
- "They accidently misplaces the coordinate maps but refuses to use prime numbers.",
- "They stubbornly argues about the gat barrel oil but thinks fractions are bad luck.",
- "They carelessly stains the cheese wedges but thinks fractions are bad luck.",
- "They loudly whistles the navigator's compass but gets distracted by shiny brass coins.",
- "They constantly complains about the dry gunpowder bags but refuses to use prime numbers.",
- "They annoyingly chews the hammock ropes but only when drunk on grog.",
- "They constantly complains about the geometry homework but refuses to use prime numbers.",
- "They stubbornly argues about the navigator's compass but gets distracted by shiny brass coins.",
- "They stubbornly argues about the gat barrel oil but refuses to use prime numbers.",
- "They frequently drops the slide rule and has the abacus tattoos to prove it.",
- "They stubbornly argues about the navigator's compass but only when cheese is involved.",
- "They annoyingly chews the cheese wedges but only when cheese is involved.",
- "They stubbornly argues about the geometry homework but refuses to use prime numbers.",
- "They stubbornly argues about the dry gunpowder bags but gets confused by negative numbers.",
- "They constantly complains about the hammock ropes and claims numbers speak to them in dreams.",
- "They clumsily breaks the dry gunpowder bags but gets confused by negative numbers.",
- "They frequently drops the geometry homework but only when cheese is involved.",
- "They accidently misplaces the slide rule but only when drunk on grog.",
- "They clumsily breaks the bilge keys but only when drunk on grog.",
- "They annoyingly chews the cheese wedges and has the abacus tattoos to prove it.",
- "They accidently misplaces the bilge keys but only when cheese is involved.",
- "They loudly whistles the dry gunpowder bags and has the abacus tattoos to prove it.",
- "They loudly whistles the slide rule but refuses to use prime numbers.",
- "They frequently drops the navigator's compass but gets distracted by shiny brass coins.",
- "They secretly hoards the geometry homework but gets confused by negative numbers.",
- "They carelessly stains the abacus beads but thinks fractions are bad luck.",
- "They stubbornly argues about the hammock ropes but only when cheese is involved.",
- "They accidently misplaces the abacus beads but gets distracted by shiny brass coins.",
- "They always claims the bilge keys but thinks fractions are bad luck.",
- "They always claims the gat barrel oil but only when drunk on grog.",
- "They loudly whistles the slide rule but only when cheese is involved.",
- "They annoyingly chews the slide rule and has a certificate from the Stowaway Academy.",
- "They carelessly stains the slide rule but only when drunk on grog.",
- "They constantly complains about the cheese wedges but only when drunk on grog.",
- "They clumsily breaks the gat barrel oil but gets distracted by shiny brass coins.",
- "They annoyingly chews the navigator's compass and claims numbers speak to them in dreams.",
- "They stubbornly argues about the geometry homework but only when cheese is involved.",
- "They clumsily breaks the dry gunpowder bags and has the abacus tattoos to prove it.",
- "They carelessly stains the coordinate maps but thinks fractions are bad luck.",
- "They annoyingly chews the slide rule and has the abacus tattoos to prove it.",
- "They stubbornly argues about the slide rule and claims numbers speak to them in dreams.",
- "They frequently drops the navigator's compass and has the abacus tattoos to prove it.",
- "They clumsily breaks the slide rule but gets distracted by shiny brass coins.",
- "They clumsily breaks the cheese wedges and has a certificate from the Stowaway Academy.",
- "They carelessly stains the bilge keys but thinks fractions are bad luck.",
- "They stubbornly argues about the cheese wedges but refuses to use prime numbers.",
- "They annoyingly chews the slide rule but refuses to use prime numbers.",
- "They stubbornly argues about the coordinate maps and has a certificate from the Stowaway Academy.",
- "They constantly complains about the hammock ropes but refuses to use prime numbers.",
- "They accidently misplaces the hammock ropes but only in base-3.",
- "They stubbornly argues about the abacus beads but only when cheese is involved.",
- "They always claims the bilge keys but gets distracted by shiny brass coins.",
- "They constantly complains about the abacus beads but gets distracted by shiny brass coins.",
- "They accidently misplaces the navigator's compass but only when cheese is involved.",
- "They always claims the coordinate maps and has the abacus tattoos to prove it.",
- "They annoyingly chews the navigator's compass but only when drunk on grog.",
- "They annoyingly chews the bilge keys but gets distracted by shiny brass coins.",
- "They stubbornly argues about the navigator's compass but gets confused by negative numbers.",
- "They annoyingly chews the gat barrel oil but refuses to use prime numbers.",
- "They stubbornly argues about the hammock ropes but gets distracted by shiny brass coins.",
- "They secretly hoards the abacus beads but gets confused by negative numbers.",
- "They carelessly stains the bilge keys but only when drunk on grog.",
- "They always claims the dry gunpowder bags but refuses to use prime numbers.",
- "They always claims the slide rule but refuses to use prime numbers.",
- "They carelessly stains the dry gunpowder bags but gets distracted by shiny brass coins.",
- "They carelessly stains the navigator's compass but refuses to use prime numbers.",
- "They always claims the geometry homework but gets confused by negative numbers.",
- "They frequently drops the cheese wedges but only when cheese is involved.",
- "They always claims the abacus beads but gets distracted by shiny brass coins.",
- "They stubbornly argues about the dry gunpowder bags but only when drunk on grog.",
- "They loudly whistles the slide rule but gets confused by negative numbers.",
- "They carelessly stains the bilge keys and has the abacus tattoos to prove it.",
- "They stubbornly argues about the cheese wedges and has a certificate from the Stowaway Academy.",
- "They loudly whistles the gat barrel oil but gets distracted by shiny brass coins.",
- "They constantly complains about the hammock ropes but gets distracted by shiny brass coins.",
- "They accidently misplaces the cheese wedges but only when cheese is involved.",
- "They frequently drops the bilge keys but gets distracted by shiny brass coins.",
- "They stubbornly argues about the abacus beads and has a certificate from the Stowaway Academy.",
- "They secretly hoards the dry gunpowder bags but gets distracted by shiny brass coins.",
- "They clumsily breaks the hammock ropes but gets confused by negative numbers.",
- "They always claims the navigator's compass and has the abacus tattoos to prove it.",
- "They loudly whistles the dry gunpowder bags but refuses to use prime numbers.",
- "They constantly complains about the hammock ropes but only in base-3.",
- "They accidently misplaces the geometry homework but only in base-3.",
- "They clumsily breaks the bilge keys but gets distracted by shiny brass coins.",
- "They always claims the abacus beads but only in base-3.",
- "They stubbornly argues about the navigator's compass and has a certificate from the Stowaway Academy.",
- "They frequently drops the bilge keys and has the abacus tattoos to prove it.",
- "They annoyingly chews the cheese wedges but only in base-3.",
- "They carelessly stains the navigator's compass but only in base-3.",
- "They stubbornly argues about the gat barrel oil and claims numbers speak to them in dreams.",
- "They secretly hoards the bilge keys but only in base-3.",
- "They loudly whistles the coordinate maps but gets distracted by shiny brass coins.",
- "They frequently drops the gat barrel oil and has a certificate from the Stowaway Academy.",
- "They stubbornly argues about the slide rule and has the abacus tattoos to prove it.",
- "They accidently misplaces the dry gunpowder bags and has a certificate from the Stowaway Academy.",
- "They frequently drops the slide rule but gets confused by negative numbers."
- ]
-};
-
function pickFrom(arr, exclude = []) {
const taken = new Set(exclude.map(s => s.trim().toLowerCase()));
const available = arr.filter(s => !taken.has(s.trim().toLowerCase()));
@@ -1223,22 +7,28 @@ function pickFrom(arr, exclude = []) {
return pool[Math.floor(Math.random() * pool.length)];
}
-export function getSuggestion(type, exclude = []) {
- const arr = SUGGESTIONS[type];
- if (!arr) return "";
- return pickFrom(arr, exclude);
+// Share in-flight requests, but allow a fresh attempt after a network failure.
+function cachedPool(endpoint) {
+ let promise;
+ return () => {
+ if (!promise) {
+ promise = apiRequest(endpoint).catch(error => {
+ promise = null;
+ throw error;
+ });
+ }
+ return promise;
+ };
}
-// Secret Pirate Technique names live in the backend (it also uses them to equip
-// re-rolled recruits); fetch the pool once and pick from it client-side.
-let techniquePoolPromise = null;
-function loadTechniquePool() {
- if (!techniquePoolPromise) {
- techniquePoolPromise = apiRequest('/suggestions/techniques').then(d => d.techniques);
- }
- return techniquePoolPromise;
+const loadCharacterPool = cachedPool('/suggestions');
+const loadTechniquePool = cachedPool('/suggestions/techniques');
+
+export async function getSuggestion(type, exclude = []) {
+ const pool = await loadCharacterPool();
+ return pool[type]?.length ? pickFrom(pool[type], exclude) : '';
}
export async function getTechniqueSuggestion(exclude = []) {
- return pickFrom(await loadTechniquePool(), exclude);
+ return pickFrom((await loadTechniquePool()).techniques, exclude);
}
diff --git a/frontend/src/pages/Dashboard.svelte b/frontend/src/pages/Dashboard.svelte
index a111e6e..f5f21b5 100644
--- a/frontend/src/pages/Dashboard.svelte
+++ b/frontend/src/pages/Dashboard.svelte
@@ -113,18 +113,18 @@
async function skipCharacterCreation() {
// Suggested values for everyone's free-text fields; the backend only
// applies them to fields players haven't filled in themselves.
- const fills = {};
- for (const p of state.players) {
- fills[p.id] = {
- avatar_look: getSuggestion('look'),
- avatar_smell: getSuggestion('smell'),
- first_words: getSuggestion('first_words'),
- good_at_math: getSuggestion('good_at_math'),
- like: getSuggestion('like'),
- hate: getSuggestion('hate'),
- };
- }
try {
+ const fills = {};
+ for (const p of state.players) {
+ fills[p.id] = {
+ avatar_look: await getSuggestion('look'),
+ avatar_smell: await getSuggestion('smell'),
+ first_words: await getSuggestion('first_words'),
+ good_at_math: await getSuggestion('good_at_math'),
+ like: await getSuggestion('like'),
+ hate: await getSuggestion('hate'),
+ };
+ }
await apiRequest(`/game/${gameId}/player/${playerId}/skip-character-creation`, 'POST', {
fills: JSON.stringify(fills)
});
diff --git a/frontend/tests/suggestions.test.js b/frontend/tests/suggestions.test.js
new file mode 100644
index 0000000..720ab42
--- /dev/null
+++ b/frontend/tests/suggestions.test.js
@@ -0,0 +1,31 @@
+import { test } from 'node:test';
+import assert from 'node:assert/strict';
+import { readFile } from 'node:fs/promises';
+
+const asModule = source => `data:text/javascript;base64,${Buffer.from(source).toString('base64')}`;
+const api = asModule(await readFile(new URL('../src/lib/api.js', import.meta.url), 'utf8'));
+const source = (await readFile(new URL('../src/lib/suggestions.js', import.meta.url), 'utf8'))
+ .replace("'./api'", JSON.stringify(api));
+
+test('suggestions retry failed requests, share the pool, and respect exclusions', async () => {
+ const originalFetch = globalThis.fetch;
+ let calls = 0;
+ globalThis.fetch = async url => {
+ calls++;
+ if (calls === 1) throw new Error('offline');
+ assert.equal(url, '/api/suggestions');
+ return { ok: true, json: async () => ({ look: ['Bandana', 'Eyepatch'], smell: ['Tar'] }) };
+ };
+ try {
+ const { getSuggestion } = await import(asModule(source));
+ await assert.rejects(getSuggestion('look'), /offline/);
+ assert.deepEqual(await Promise.all([
+ getSuggestion('look', [' bandana ']), getSuggestion('smell')
+ ]), ['Eyepatch', 'Tar']);
+ assert.equal(calls, 2);
+ assert.equal(await getSuggestion('unknown'), '');
+ assert.ok(['Bandana', 'Eyepatch'].includes(await getSuggestion('look', ['Bandana', 'Eyepatch'])));
+ } finally {
+ globalThis.fetch = originalFetch;
+ }
+});
diff --git a/src/pirats/crud_character.py b/src/pirats/crud_character.py
index a6667ba..5cdaf37 100644
--- a/src/pirats/crud_character.py
+++ b/src/pirats/crud_character.py
@@ -502,7 +502,7 @@ def skip_character_creation(db: Session, game: Game, fills: dict):
creation for ALL players and advances to scene setup. `fills` maps
player_id -> suggested values for the free-text fields (avatar_look,
avatar_smell, first_words, good_at_math, like, hate), supplied by the
- admin's client from the frontend suggestion pools. Techniques come from
+ admin's client from the backend suggestion API. Techniques come from
the backend pool. Already-filled fields are left untouched.
"""
from .cards import TECHNIQUE_SUGGESTIONS
diff --git a/src/pirats/routes_character.py b/src/pirats/routes_character.py
index bb06c59..438a800 100644
--- a/src/pirats/routes_character.py
+++ b/src/pirats/routes_character.py
@@ -4,10 +4,16 @@ from sqlmodel import Session
from .database import get_session
from . import crud
from .cards import TECHNIQUE_SUGGESTIONS
+from .suggestions import CHARACTER_SUGGESTIONS
from .validation import sanitize_text, sanitize_name
router = APIRouter()
+@router.get("/suggestions")
+def character_suggestions():
+ return CHARACTER_SUGGESTIONS
+
+
# Secret Pirate Technique name pool (for the frontend's Suggest buttons)
@router.get("/suggestions/techniques")
def technique_suggestions():
diff --git a/src/pirats/suggestions.py b/src/pirats/suggestions.py
new file mode 100644
index 0000000..b1bf8eb
--- /dev/null
+++ b/src/pirats/suggestions.py
@@ -0,0 +1,126 @@
+"""Hand-written Rat Records prompts for the scrappy fantasy pirates of Yeld.
+
+Smells also serve as temporary names; keep them short noun phrases. Math
+is a personality joke, not a power or a rule benefit.
+"""
+
+CHARACTER_SUGGESTIONS = {'look': ['A red bandana with two holes chewed through for ears',
+ 'An eyepatch that keeps sliding onto the wrong eye',
+ 'A stolen waistcoat with pockets full of biscuit crumbs',
+ 'Whiskers braided with bits of sail thread',
+ 'A tail tied in a knot so nobody steps on it',
+ 'A tiny skull painted between the ears',
+ "A coat made from the ship's old flag",
+ 'One gold tooth and a grin that shows it off',
+ 'A belt made of rope, with far too many knots',
+ 'A hat so wide it catches every gust of wind',
+ 'Soot-black paws and a suspiciously innocent expression',
+ 'A scar across the snout that they insist looks impressive',
+ 'A brass button worn as a medal',
+ 'A striped shirt still bearing the laundry tag',
+ 'A fork tucked behind one ear for emergencies',
+ 'A tail wrapped in a strip of stolen velvet',
+ 'A necklace of fish bones and one very nice pearl',
+ "Fur slicked back with the cook's best butter",
+ 'A chalk handprint on the back of a borrowed coat',
+ 'An enormous hat held on with string'],
+ 'smell': ['Gunpowder and wet fur',
+ 'Old cheese and fresh tar',
+ 'Pickle brine',
+ 'Burnt toast',
+ 'Fish guts and cheap perfume',
+ 'Damp rope',
+ 'Sour grog',
+ 'Peppermint and bilge water',
+ 'Smoked herring',
+ 'Candle wax and singed whiskers',
+ 'Mouldy biscuits',
+ 'Salt pork and garlic',
+ 'Seaweed left in the sun',
+ 'Stolen jam',
+ 'Wet wool and black pepper',
+ 'Boot polish',
+ 'Rancid butter',
+ 'Lemon peel and cannon smoke',
+ 'Onions and damp wood',
+ 'Something dead behind the pantry'],
+ 'first_words': ["Who's been keeping all this cheese up here?",
+ "I've got thumbs! Nobody panic!",
+ 'Right. Which end of the ship do we steal first?',
+ "That hat's mine now.",
+ 'I liked the captain better when I could fit in his boot.',
+ 'I demand a bigger lunch.',
+ 'Can we eat the map?',
+ 'Nobody tell the cat.',
+ "I can explain. Actually, no I can't.",
+ 'Why is the floor suddenly so far away?',
+ 'Hand over the biscuits and nobody gets bitten.',
+ 'I vote we keep the ship.',
+ 'Does this mean I have to wear trousers?',
+ "I've always wanted to shout this: BOARD THEM!",
+ 'Somebody fetch me a dangerous stick.',
+ 'I know three words and two of them are threats.',
+ 'Was that your cheese? Unfortunate.',
+ 'I can count! We are outnumbered!',
+ "Let's point the cannon at whoever owns it.",
+ 'I was already this clever. Ask anyone.'],
+ 'good_at_math': ['Yes, until someone starts watching.',
+ 'Only when dividing up stolen food.',
+ 'No, but very loud about the answer.',
+ 'Can count every coin in a purse by shaking it.',
+ 'Knows that two lunches are better than one.',
+ "Counts on their claws, then borrows someone else's.",
+ 'Brilliant at sums. Cannot tell left from right.',
+ 'Insists every problem can be solved by adding more rats.',
+ 'Yes, and will prove it on your coat in chalk.',
+ 'Can divide loot fairly. Chooses not to.',
+ 'Thinks fractions are what happens when you bite a biscuit.',
+ 'Keeps losing count when their tail moves.',
+ 'No. Has appointed a beetle to handle the numbers.',
+ 'Can calculate a cannon shot but not the price of lunch.',
+ 'Gets the right answer for entirely the wrong reasons.',
+ 'Counts backwards whenever frightened.',
+ 'Only if the numbers are small enough to threaten.',
+ 'Knows pi to several places, all of them wrong.',
+ "Refuses to subtract. That's how things go missing.",
+ 'Perfectly average, which they find deeply suspicious.'],
+ 'like': ['They always save you the least mouldy biscuit.',
+ "They'll bite anyone who threatens the crew.",
+ 'They remember which hammock is yours.',
+ 'They take the blame when a good prank goes wrong.',
+ 'They can make a feast out of stolen scraps.',
+ 'They laugh at your jokes, even during a mutiny.',
+ 'They share their last dry match.',
+ 'They never leave a rat behind.',
+ 'They know when to stop talking and start chewing through ropes.',
+ 'They tell excellent lies on your behalf.',
+ 'They warm your paws when the night watch gets cold.',
+ 'They always volunteer to distract the cat.',
+ 'They can find food in an empty cupboard.',
+ 'They mend your clothes without being asked.',
+ 'They cheer loudest when you do something reckless.',
+ 'They keep a lookout while you sneak an extra ration.',
+ 'They turn every terrible plan into a team effort.',
+ 'They know a song for every disaster.',
+ 'They give the best apologies, usually with snacks.',
+ 'They trust you with the good end of the rope.'],
+ 'hate': ['They eat the evidence before anyone can examine it.',
+ 'They borrow your boots and return only one.',
+ "They practice their captain voice while you're sleeping.",
+ 'They leave fish bones in your hammock.',
+ 'They insist every plan was their idea.',
+ 'They lick the best biscuit before offering to share.',
+ "They chew through ropes without checking what they're holding up.",
+ 'They shout "Land ho!" whenever they\'re bored.',
+ 'They use your coat to wipe cannon soot off their paws.',
+ 'They keep a secret food stash that everyone can smell.',
+ 'They correct your sums in the middle of a fight.',
+ 'They drum on empty barrels during the night watch.',
+ 'They promise your share of the loot to strangers.',
+ 'They pick their teeth with your favourite knife.',
+ 'They give away the hiding place by giggling.',
+ "They refuse to admit they can't read the map.",
+ 'They shake seawater onto everyone after a swim.',
+ 'They start a new verse just when the song seems over.',
+ 'They call every creature with fins their cousin.',
+ "They always ask if you're going to finish that, mid-bite."]}
diff --git a/tests/test_suggestions.py b/tests/test_suggestions.py
new file mode 100644
index 0000000..2dc14e4
--- /dev/null
+++ b/tests/test_suggestions.py
@@ -0,0 +1,20 @@
+from fastapi.testclient import TestClient
+from pirats.main import app
+from pirats.validation import sanitize_name, sanitize_text
+
+
+def test_suggestions_api_covers_rat_records_without_truncation():
+ # No lifespan needed: these public endpoints do not access the database.
+ client = TestClient(app)
+ response = client.get('/api/suggestions')
+ assert response.status_code == 200
+ pools = response.json()
+ assert set(pools) == {'look', 'smell', 'first_words', 'good_at_math', 'like', 'hate'}
+ for category, entries in pools.items():
+ assert len(entries) >= 20
+ assert len({entry.casefold() for entry in entries}) == len(entries)
+ sanitize = sanitize_name if category == 'smell' else sanitize_text
+ assert all(entry and sanitize(entry) == entry for entry in entries)
+ techniques = client.get('/api/suggestions/techniques')
+ assert techniques.status_code == 200
+ assert techniques.json()['techniques']