js/data.js (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 |
/* EMOJESIS — game data. Pure data, no DOM.
Works in the browser (attaches to globalThis.EMOJESIS_DATA)
and in Node (module.exports) for validate.js. */
(function () {
'use strict';
var CATEGORIES = [
'nature', 'weather', 'life', 'animals', 'humanity', 'civilization',
'culture', 'technology', 'internet', 'occult', 'cosmos', 'absurd'
];
var STARTERS = ['fire', 'water', 'earth', 'air'];
/* Element: { id, emoji, name, category, description, secret? } */
var ELEMENTS = {
/* ---- starters ---- */
fire: { id: 'fire', emoji: '🔥', name: 'Fire', category: 'nature', description: 'Warmth, destruction, and the first bad idea.' },
water: { id: 'water', emoji: '💧', name: 'Water', category: 'nature', description: 'It remembers every shape it has ever been.' },
earth: { id: 'earth', emoji: '🪨', name: 'Earth', category: 'nature', description: 'Patient, heavy, and full of opinions.' },
air: { id: 'air', emoji: '💨', name: 'Air', category: 'nature', description: 'Invisible, everywhere, and slightly dramatic.' },
/* ---- nature ---- */
mud: { id: 'mud', emoji: '🟤', name: 'Mud', category: 'nature', description: 'Earth that gave up on posture.' },
lava: { id: 'lava', emoji: '🌋', name: 'Lava', category: 'nature', description: 'The planet\u2019s way of thinking out loud.' },
ocean: { id: 'ocean', emoji: '🌊', name: 'Ocean', category: 'nature', description: 'Water, ambition edition.' },
mountain: { id: 'mountain', emoji: '⛰️', name: 'Mountain', category: 'nature', description: 'A very long argument with the sky.' },
wood: { id: 'wood', emoji: '🪵', name: 'Wood', category: 'nature', description: 'A tree, repurposed.' },
honey: { id: 'honey', emoji: '🍯', name: 'Honey', category: 'nature', description: 'A lifetime of small errands, bottled.' },
/* ---- weather ---- */
steam: { id: 'steam', emoji: '🌫️', name: 'Steam', category: 'weather', description: 'Opposites, agreeing to disagree upward.' },
cloud: { id: 'cloud', emoji: '☁️', name: 'Cloud', category: 'weather', description: 'The sky\u2019s rough draft.' },
rain: { id: 'rain', emoji: '🌧️', name: 'Rain', category: 'weather', description: 'The cloud finally admitted something.' },
wind: { id: 'wind', emoji: '🌬️', name: 'Wind', category: 'weather', description: 'Air with somewhere to be.' },
storm: { id: 'storm', emoji: '⛈️', name: 'Storm', category: 'weather', description: 'Two clouds having it out.' },
lightning: { id: 'lightning', emoji: '⚡', name: 'Lightning', category: 'weather', description: 'The sky, briefly honest.' },
snow: { id: 'snow', emoji: '❄️', name: 'Snow', category: 'weather', description: 'Rain, but it learned to whisper.' },
rainbow: { id: 'rainbow', emoji: '🌈', name: 'Rainbow', category: 'weather', description: 'An apology from the weather.' },
fog: { id: 'fog', emoji: '🌁', name: 'Fog', category: 'weather', description: 'A cloud that lost its nerve.' },
/* ---- life ---- */
life: { id: 'life', emoji: '🌱', name: 'Life', category: 'life', description: 'The mud flinched first.' },
plant: { id: 'plant', emoji: '🌿', name: 'Plant', category: 'life', description: 'Life, rooted and smug about it.' },
tree: { id: 'tree', emoji: '🌳', name: 'Tree', category: 'life', description: 'Patience, made visible.' },
flower: { id: 'flower', emoji: '🌸', name: 'Flower', category: 'life', description: 'The plant\u2019s loud opinion.' },
wheat: { id: 'wheat', emoji: '🌾', name: 'Wheat', category: 'life', description: 'Grass with ambitions.' },
forest: { id: 'forest', emoji: '🌲', name: 'Forest', category: 'life', description: 'Trees discovered crowds.' },
/* ---- animals ---- */
fish: { id: 'fish', emoji: '🐟', name: 'Fish', category: 'animals', description: 'Life learned to swim before it learned to walk. Priorities.' },
bird: { id: 'bird', emoji: '🐦', name: 'Bird', category: 'animals', description: 'Life, ignoring gravity\u2019s memo.' },
egg: { id: 'egg', emoji: '🥚', name: 'Egg', category: 'animals', description: 'A bird\u2019s most confident decision.' },
cat: { id: 'cat', emoji: '🐈', name: 'Cat', category: 'animals', description: 'Something small decided to live with you.' },
dog: { id: 'dog', emoji: '🐶', name: 'Dog', category: 'animals', description: 'The wolf made an excellent mistake.' },
wolf: { id: 'wolf', emoji: '🐺', name: 'Wolf', category: 'animals', description: 'The mountain learned to hunt.' },
bee: { id: 'bee', emoji: '🐝', name: 'Bee', category: 'animals', description: 'A flower\u2019s courier service.' },
snake: { id: 'snake', emoji: '🐍', name: 'Snake', category: 'animals', description: 'The garden got interesting.' },
whale: { id: 'whale', emoji: '🐋', name: 'Whale', category: 'animals', description: 'Time and water, taken seriously.' },
owl: { id: 'owl', emoji: '🦉', name: 'Night Owl', category: 'animals', secret: true, description: 'It only interviews at night.' },
dinosaur: { id: 'dinosaur', emoji: '🦖', name: 'Dinosaur', category: 'animals', description: 'Some experiments take longer.' },
butterfly: { id: 'butterfly', emoji: '🦋', name: 'Butterfly', category: 'animals', description: 'A rumor with wings.' },
/* ---- humanity ---- */
human: { id: 'human', emoji: '🧑', name: 'Human', category: 'humanity', description: 'From mud, something stood up.' },
brain: { id: 'brain', emoji: '🧠', name: 'Brain', category: 'humanity', description: 'A library that argues back.' },
love: { id: 'love', emoji: '❤️', name: 'Love', category: 'humanity', description: 'A self-combination with consequences.' },
/* ---- civilization ---- */
tool: { id: 'tool', emoji: '🔨', name: 'Tool', category: 'civilization', description: 'The rock was promoted.' },
house: { id: 'house', emoji: '🏠', name: 'House', category: 'civilization', description: 'A tree, forgiven.' },
village: { id: 'village', emoji: '🏘️', name: 'Village', category: 'civilization', description: 'Houses discovered gossip.' },
city: { id: 'city', emoji: '🏙️', name: 'City', category: 'civilization', description: 'A village that stopped sleeping.' },
wheel: { id: 'wheel', emoji: '🛞', name: 'Wheel', category: 'civilization', description: 'The circle\u2019s career began.' },
bread: { id: 'bread', emoji: '🍞', name: 'Bread', category: 'civilization', description: 'Grain, transformed by impatience.' },
coffee: { id: 'coffee', emoji: '☕', name: 'Coffee', category: 'civilization', description: 'The bean demanded fire.' },
paper: { id: 'paper', emoji: '📄', name: 'Paper', category: 'civilization', description: 'The tree, flattened into memory.' },
book: { id: 'book', emoji: '📚', name: 'Book', category: 'civilization', description: 'Paper with a spine and opinions.' },
metal: { id: 'metal', emoji: '🔩', name: 'Metal', category: 'civilization', description: 'The mountain\u2019s hidden temper.' },
sword: { id: 'sword', emoji: '⚔️', name: 'Sword', category: 'civilization', description: 'An argument made of metal.' },
boat: { id: 'boat', emoji: '⛵', name: 'Boat', category: 'civilization', description: 'The wood forgave the water.' },
ship: { id: 'ship', emoji: '🚢', name: 'Ship', category: 'civilization', description: 'A boat that stopped being polite.' },
bridge: { id: 'bridge', emoji: '🌉', name: 'Bridge', category: 'civilization', description: 'The mountain\u2019s shortcut.' },
castle: { id: 'castle', emoji: '🏰', name: 'Castle', category: 'civilization', description: 'A house with trust issues.' },
engine: { id: 'engine', emoji: '🚂', name: 'Engine', category: 'civilization', description: 'Steam, given a job.' },
gold: { id: 'gold', emoji: '🪙', name: 'Gold', category: 'civilization', description: 'Shinier with age.' },
money: { id: 'money', emoji: '💵', name: 'Money', category: 'civilization', description: 'Gold that fits in a pocket.' },
key: { id: 'key', emoji: '🗝️', name: 'Key', category: 'civilization', description: 'It opens exactly one thing. Good luck.' },
/* ---- culture ---- */
writing: { id: 'writing', emoji: '✍️', name: 'Writing', category: 'culture', description: 'Thoughts, taxidermied.' },
art: { id: 'art', emoji: '🎨', name: 'Art', category: 'culture', description: 'The rainbow, on purpose.' },
music: { id: 'music', emoji: '🎵', name: 'Music', category: 'culture', description: 'The bird\u2019s idea, stolen gracefully.' },
philosophy: { id: 'philosophy', emoji: '🤔', name: 'Philosophy', category: 'culture', description: 'Two books arguing forever.' },
forbiddenBook: { id: 'forbiddenBook', emoji: '📕', name: 'Forbidden Book', category: 'culture', secret: true, description: 'Some books are burned because they burn back.' },
library: { id: 'library', emoji: '🏛️', name: 'Library', category: 'culture', description: 'A house that remembers for you.' },
statue: { id: 'statue', emoji: '🗿', name: 'Statue', category: 'culture', description: 'Someone wanted to be remembered badly.' },
theatre: { id: 'theatre', emoji: '🎭', name: 'Theatre', category: 'culture', description: 'Art that watches you back.' },
idea: { id: 'idea', emoji: '💡', name: 'Idea', category: 'culture', description: 'A dangerous amount of electricity, safely contained.' },
/* ---- technology ---- */
computer: { id: 'computer', emoji: '💻', name: 'Computer', category: 'technology', description: 'An idea with a fan.' },
robot: { id: 'robot', emoji: '🤖', name: 'Robot', category: 'technology', description: 'A brain with a warranty.' },
ai: { id: 'ai', emoji: '💭', name: 'AI', category: 'technology', description: 'The machine started finishing your sentences.' },
developer: { id: 'developer', emoji: '👨💻', name: 'Developer', category: 'technology', description: 'Runs on caffeine and unresolved tickets.' },
battery: { id: 'battery', emoji: '🔋', name: 'Battery', category: 'technology', description: 'Lightning, grounded.' },
antenna: { id: 'antenna', emoji: '📡', name: 'Antenna', category: 'technology', description: 'A metal ear for invisible things.' },
rocket: { id: 'rocket', emoji: '🚀', name: 'Rocket', category: 'technology', description: 'A ship that chose violence over water.' },
satellite: { id: 'satellite', emoji: '🛰️', name: 'Satellite', category: 'technology', description: 'An antenna that moved out.' },
telescope: { id: 'telescope', emoji: '🔭', name: 'Telescope', category: 'technology', description: 'The mountain had questions too.' },
phone: { id: 'phone', emoji: '📱', name: 'Phone', category: 'technology', description: 'A computer for your pocket and your every waking moment.' },
wifi: { id: 'wifi', emoji: '📶', name: 'Wi-Fi', category: 'technology', description: 'The internet, untethered and unbothered.' },
syntheticHeart: { id: 'syntheticHeart', emoji: '🦾', name: 'Synthetic Heart', category: 'technology', secret: true, description: 'It beats. That\u2019s the disturbing part.' },
/* ---- internet ---- */
internet: { id: 'internet', emoji: '🌐', name: 'Internet', category: 'internet', description: 'Two computers started talking. Nobody stopped them.' },
link: { id: 'link', emoji: '🔗', name: 'Link', category: 'internet', description: 'A door made of text.' },
personalWebsite: { id: 'personalWebsite', emoji: '🛖', name: 'Personal Website', category: 'internet', description: 'You made a home on the web.' },
blog: { id: 'blog', emoji: '📰', name: 'Blog', category: 'internet', secret: true, description: 'A diary the whole world is welcome to ignore.' },
rss: { id: 'rss', emoji: '🔁', name: 'RSS', category: 'internet', secret: true, description: 'The web, as it was meant to be read.' },
internetCat: { id: 'internetCat', emoji: '🐱', name: 'Internet Cat', category: 'internet', description: 'The internet\u2019s true purpose.' },
meme: { id: 'meme', emoji: '🤣', name: 'Meme', category: 'internet', description: 'An idea in its final, unstoppable form.' },
deadWeb: { id: 'deadWeb', emoji: '🕸️', name: 'Dead Web', category: 'internet', secret: true, description: 'The links still point somewhere. Nothing answers.' },
virus: { id: 'virus', emoji: '🦠', name: 'Virus', category: 'internet', description: 'It only wanted to multiply.' },
glitch: { id: 'glitch', emoji: '👾', name: 'Glitch', category: 'internet', secret: true, description: 'The machine dreamed of a machine.' },
/* ---- occult ---- */
skull: { id: 'skull', emoji: '💀', name: 'Skull', category: 'occult', description: 'Everyone\u2019s final form.' },
ghost: { id: 'ghost', emoji: '👻', name: 'Ghost', category: 'occult', secret: true, description: 'Death, but it left the light on.' },
undead: { id: 'undead', emoji: '🧟', name: 'Undead', category: 'occult', description: 'Love, unfortunately, finds a way.' },
secret: { id: 'secret', emoji: '🔮', name: 'Secret', category: 'occult', secret: true, description: 'Some doors only open at night.' },
blackHole: { id: 'blackHole', emoji: '🕳️', name: 'Black Hole', category: 'occult', secret: true, description: 'The universe\u2019s locked drawer.' },
phoenix: { id: 'phoenix', emoji: '🐦🔥', name: 'Phoenix', category: 'occult', secret: true, description: 'It read the whole thing and came back louder.' },
/* ---- cosmos ---- */
time: { id: 'time', emoji: '⏳', name: 'Time', category: 'cosmos', description: 'The world learned patience.' },
night: { id: 'night', emoji: '🌃', name: 'Night', category: 'cosmos', description: 'Time, left alone, becomes night.' },
moon: { id: 'moon', emoji: '🌙', name: 'Moon', category: 'cosmos', description: 'The sky\u2019s oldest rock.' },
star: { id: 'star', emoji: '⭐', name: 'Star', category: 'cosmos', description: 'A light that outlived its fire.' },
sun: { id: 'sun', emoji: '☀️', name: 'Sun', category: 'cosmos', secret: true, description: 'Fire, squared and glorified.' },
galaxy: { id: 'galaxy', emoji: '🌌', name: 'Galaxy', category: 'cosmos', description: 'A city of suns.' },
eclipse: { id: 'eclipse', emoji: '🌑', name: 'Eclipse', category: 'cosmos', secret: true, description: 'The sky\u2019s private joke.' },
ufo: { id: 'ufo', emoji: '🛸', name: 'UFO', category: 'cosmos', secret: true, description: 'It blinked back.' },
alien: { id: 'alien', emoji: '👽', name: 'Alien', category: 'cosmos', description: 'Life, from a different draft.' },
netuno: { id: 'netuno', emoji: '🪐', name: 'Netuno', category: 'cosmos', secret: true, description: 'The outer dark has a name, and it\u2019s this one.' },
supernova: { id: 'supernova', emoji: '💥', name: 'Supernova', category: 'cosmos', description: 'An ending so bright it counts as a beginning.' },
/* ---- absurd ---- */
hotTake: { id: 'hotTake', emoji: '🌶️', name: 'Hot Take', category: 'absurd', description: 'Everyone has one. No one wants yours.' },
ancientInfluencer: { id: 'ancientInfluencer', emoji: '🤳', name: 'Ancient Influencer', category: 'absurd', secret: true, description: 'Two million followers. Zero posts.' },
meeting: { id: 'meeting', emoji: '📅', name: 'Meeting', category: 'absurd', description: 'Two developers produced a third meeting.' }
};
/* Recipe: { a, b, result, msg, msgs?, secret?, ordered?, nightOnly?, fx? } */
var RECIPES = [
/* ---- the teaching chain ---- */
{ a: 'fire', b: 'water', result: 'steam', msg: 'Opposites create atmosphere.' },
{ a: 'water', b: 'earth', result: 'mud', msg: 'Earth that gave up on posture.' },
{ a: 'air', b: 'water', result: 'cloud', msg: 'The sky\u2019s rough draft.' },
{ a: 'cloud', b: 'water', result: 'rain', msg: 'The cloud finally admitted something.' },
{ a: 'rain', b: 'earth', result: 'life', msg: 'The mud flinched first.' },
{ a: 'life', b: 'water', result: 'plant', msg: 'Life, rooted and smug about it.' },
{ a: 'plant', b: 'time', result: 'tree', msg: 'Patience, made visible.' },
{ a: 'tree', b: 'fire', result: 'wood', msg: 'A tree, repurposed.' },
{ a: 'earth', b: 'earth', result: 'mountain', msg: 'A very long argument with the sky.' },
{ a: 'human', b: 'earth', result: 'tool', msg: 'The rock was promoted.' },
{ a: 'steam', b: 'earth', result: 'time', msg: 'The world learned patience.' },
/* ---- nature & weather ---- */
{ a: 'fire', b: 'earth', result: 'lava', msg: 'The planet\u2019s way of thinking out loud.', fx: 'flare' },
{ a: 'water', b: 'water', result: 'ocean', msg: 'Water, ambition edition.' },
{ a: 'air', b: 'air', result: 'wind', msg: 'Air with somewhere to be.' },
{ a: 'cloud', b: 'cloud', result: 'storm', msg: 'Two clouds having it out.', fx: 'shake' },
{ a: 'storm', b: 'air', result: 'lightning', msg: 'The sky, briefly honest.', fx: 'zap' },
{ a: 'rain', b: 'wind', result: 'snow', msg: 'Rain, but it learned to whisper.' },
{ a: 'rain', b: 'sun', result: 'rainbow', msg: 'An apology from the weather.' },
{ a: 'steam', b: 'cloud', result: 'fog', msg: 'A cloud that lost its nerve.' },
{ a: 'lava', b: 'water', result: 'steam', msg: 'The planet sighed.' },
{ a: 'storm', b: 'water', result: 'rain', msg: 'The storm, softened.' },
{ a: 'steam', b: 'air', result: 'cloud', msg: 'Steam, promoted.' },
{ a: 'cloud', b: 'wind', result: 'storm', msg: 'The cloud learned to move, and regretted it.', fx: 'shake' },
{ a: 'storm', b: 'fire', result: 'lightning', msg: 'The storm struck a match.', fx: 'zap' },
{ a: 'mountain', b: 'cloud', result: 'snow', msg: 'The mountain collects its mail.' },
/* ---- life ---- */
{ a: 'ocean', b: 'lightning', result: 'life', msg: 'Primordial soup, stirred violently.', fx: 'zap' },
{ a: 'mud', b: 'rain', result: 'plant', msg: 'The mud sprouted an opinion.' },
{ a: 'plant', b: 'plant', result: 'tree', msg: 'Two plants entered a long agreement.' },
{ a: 'plant', b: 'sun', result: 'flower', msg: 'The plant\u2019s loud opinion.' },
{ a: 'plant', b: 'earth', result: 'wheat', msg: 'Grass with ambitions.' },
{ a: 'tree', b: 'tree', result: 'forest', msg: 'Trees discovered crowds.' },
{ a: 'bee', b: 'flower', result: 'honey', msg: 'A lifetime of small errands, bottled.' },
/* ---- animals ---- */
{ a: 'ocean', b: 'life', result: 'fish', msg: 'Life learned to swim before it learned to walk. Priorities.' },
{ a: 'life', b: 'air', result: 'bird', msg: 'Life, ignoring gravity\u2019s memo.' },
{ a: 'bird', b: 'bird', result: 'egg', msg: 'A bird\u2019s most confident decision.' },
{ a: 'house', b: 'life', result: 'cat', msg: 'Something small decided to live with you.' },
{ a: 'wolf', b: 'human', result: 'dog', msg: 'The wolf made an excellent mistake.' },
{ a: 'mountain', b: 'life', result: 'wolf', msg: 'The mountain learned to hunt.' },
{ a: 'flower', b: 'wind', result: 'bee', msg: 'A flower\u2019s courier service.' },
{ a: 'wood', b: 'life', result: 'snake', msg: 'The garden got interesting.' },
{ a: 'fish', b: 'time', result: 'whale', msg: 'Time and water, taken seriously.' },
{ a: 'life', b: 'time', result: 'dinosaur', msg: 'Some experiments take longer.' },
{ a: 'flower', b: 'air', result: 'butterfly', msg: 'A rumor with wings.' },
{ a: 'ocean', b: 'egg', result: 'fish', msg: 'The egg chose water.' },
{ a: 'egg', b: 'air', result: 'bird', msg: 'The egg chose poorly, then brilliantly.' },
{ a: 'house', b: 'fish', result: 'cat', msg: 'It came for the fish. It stayed for the couch.' },
{ a: 'fish', b: 'fish', result: 'whale', msg: 'The fish kept growing its story.' },
{ a: 'plant', b: 'mud', result: 'snake', msg: 'The garden\u2019s quiet rumor.' },
{ a: 'dog', b: 'moon', result: 'wolf', msg: 'Something old answers the moon.' },
{ a: 'egg', b: 'time', result: 'dinosaur', msg: 'The egg waited too well.' },
{ a: 'flower', b: 'life', result: 'butterfly', msg: 'Life, in a decorative mood.' },
/* ---- humanity ---- */
{ a: 'life', b: 'mud', result: 'human', msg: 'From mud, something stood up.' },
{ a: 'mud', b: 'lightning', result: 'human', msg: 'Prometheus would like a word.', fx: 'zap' },
{ a: 'human', b: 'book', result: 'brain', msg: 'A library that argues back.' },
{ a: 'human', b: 'human', result: 'love', msg: 'A self-combination with consequences.' },
{ a: 'human', b: 'star', result: 'love', msg: 'A clich\u00e9 that keeps working.' },
/* ---- civilization ---- */
{ a: 'wood', b: 'earth', result: 'house', msg: 'A tree, forgiven.' },
{ a: 'house', b: 'house', result: 'village', msg: 'Houses discovered gossip.' },
{ a: 'village', b: 'village', result: 'city', msg: 'A village that stopped sleeping.' },
{ a: 'wood', b: 'wood', result: 'wheel', msg: 'The circle\u2019s career began.' },
{ a: 'wheat', b: 'fire', result: 'bread', msg: 'Grain, transformed by impatience.' },
{ a: 'plant', b: 'fire', result: 'coffee', msg: 'The bean demanded fire.' },
{ a: 'wood', b: 'tool', result: 'paper', msg: 'The tree, flattened into memory.' },
{ a: 'paper', b: 'paper', result: 'book', msg: 'Paper with a spine and opinions.' },
{ a: 'mountain', b: 'fire', result: 'metal', msg: 'The mountain\u2019s hidden temper.' },
{ a: 'metal', b: 'fire', result: 'sword', msg: 'An argument made of metal.' },
{ a: 'wood', b: 'water', result: 'boat', msg: 'The wood forgave the water.' },
{ a: 'boat', b: 'metal', result: 'ship', msg: 'A boat that stopped being polite.' },
{ a: 'metal', b: 'mountain', result: 'bridge', msg: 'The mountain\u2019s shortcut.' },
{ a: 'house', b: 'mountain', result: 'castle', msg: 'A house with trust issues.' },
{ a: 'steam', b: 'metal', result: 'engine', msg: 'Steam, given a job.' },
{ a: 'metal', b: 'time', result: 'gold', msg: 'Shinier with age.' },
{ a: 'gold', b: 'paper', result: 'money', msg: 'Gold that fits in a pocket.' },
{ a: 'tool', b: 'metal', result: 'key', msg: 'It opens exactly one thing. Good luck.' },
{ a: 'village', b: 'money', result: 'city', msg: 'The village got expensive.' },
{ a: 'village', b: 'mountain', result: 'castle', msg: 'The village grew walls and opinions.' },
{ a: 'boat', b: 'boat', result: 'ship', msg: 'Two boats became an argument for a third.' },
{ a: 'ship', b: 'mountain', result: 'bridge', msg: 'The mountain compromised.' },
{ a: 'steam', b: 'tool', result: 'engine', msg: 'The tool learned to breathe.' },
{ a: 'gold', b: 'gold', result: 'money', msg: 'Gold that gossiped.' },
{ a: 'human', b: 'mountain', result: 'statue', msg: 'The mountain, flattered.' },
{ a: 'human', b: 'wood', result: 'tool', msg: 'The branch volunteered.' },
{ a: 'wood', b: 'ocean', result: 'boat', msg: 'The wood studied the water carefully.' },
{ a: 'metal', b: 'rainbow', result: 'gold', msg: 'The end of the rainbow has accounting.' },
/* ---- culture ---- */
{ a: 'human', b: 'paper', result: 'writing', msg: 'Thoughts, taxidermied.' },
{ a: 'tool', b: 'paper', result: 'writing', msg: 'The tool learned to leave marks.' },
{ a: 'human', b: 'rainbow', result: 'art', msg: 'The rainbow, on purpose.' },
{ a: 'human', b: 'flower', result: 'art', msg: 'The flower, framed.' },
{ a: 'human', b: 'bird', result: 'music', msg: 'The bird\u2019s idea, stolen gracefully.' },
{ a: 'human', b: 'whale', result: 'music', msg: 'The first album was fifty minutes of ocean.' },
{ a: 'book', b: 'book', result: 'philosophy', msg: 'Two books arguing forever.' },
{ a: 'brain', b: 'book', result: 'philosophy', msg: 'The brain read until it looped.' },
{ a: 'book', b: 'fire', result: 'forbiddenBook', msg: 'Some books are burned because they burn back.', secret: true, fx: 'flare' },
{ a: 'library', b: 'fire', result: 'forbiddenBook', msg: 'The smoke spelled something.', secret: true, fx: 'flare' },
{ a: 'book', b: 'house', result: 'library', msg: 'A house that remembers for you.' },
{ a: 'mountain', b: 'tool', result: 'statue', msg: 'Someone wanted to be remembered badly.' },
{ a: 'art', b: 'music', result: 'theatre', msg: 'Art that watches you back.' },
{ a: 'music', b: 'book', result: 'theatre', msg: 'The book got a stage and lost its manners.' },
{ a: 'brain', b: 'lightning', result: 'idea', msg: 'A dangerous amount of electricity reached the brain.', fx: 'zap' },
/* ---- technology ---- */
{ a: 'idea', b: 'metal', result: 'computer', msg: 'An idea with a fan.' },
{ a: 'metal', b: 'brain', result: 'robot', msg: 'A brain with a warranty.' },
{ a: 'computer', b: 'brain', result: 'ai', msg: 'The machine started finishing your sentences.' },
{ a: 'computer', b: 'coffee', result: 'developer', msg: 'Nothing compiles without caffeine.' },
{ a: 'human', b: 'computer', result: 'developer', msg: 'The first day is mostly installing things.' },
{ a: 'lightning', b: 'metal', result: 'battery', msg: 'Lightning, grounded.' },
{ a: 'lightning', b: 'gold', result: 'battery', msg: 'Expensive lightning, stored politely.' },
{ a: 'metal', b: 'air', result: 'antenna', msg: 'A metal ear for invisible things.' },
{ a: 'ship', b: 'fire', result: 'rocket', msg: 'A ship that chose violence over water.', fx: 'flare' },
{ a: 'engine', b: 'metal', result: 'rocket', msg: 'The engine looked up.', fx: 'flare' },
{ a: 'rocket', b: 'antenna', result: 'satellite', msg: 'An antenna that moved out.' },
{ a: 'phone', b: 'rocket', result: 'satellite', msg: 'The phone achieved orbit and still no signal.' },
{ a: 'book', b: 'mountain', result: 'telescope', msg: 'The mountain had questions too.' },
{ a: 'computer', b: 'battery', result: 'phone', msg: 'A computer that fits in your pocket and your every waking moment.' },
{ a: 'internet', b: 'antenna', result: 'wifi', msg: 'The internet, untethered and unbothered.' },
{ a: 'robot', b: 'love', result: 'syntheticHeart', msg: 'It beats. That\u2019s the disturbing part.', secret: true },
{ a: 'computer', b: 'tool', result: 'robot', msg: 'The computer got hands. Mostly harmless.' },
{ a: 'robot', b: 'book', result: 'ai', msg: 'It read everything. It has notes.' },
/* ---- internet ---- */
{ a: 'computer', b: 'computer', result: 'internet', msg: 'Two computers started talking. Nobody stopped them.' },
{ a: 'internet', b: 'tool', result: 'link', msg: 'A door made of text.' },
{ a: 'internet', b: 'house', result: 'personalWebsite', msg: 'You made a home on the web.' },
{ a: 'internet', b: 'writing', result: 'personalWebsite', msg: 'A room of one\u2019s own, with hyperlinks.' },
{ a: 'personalWebsite', b: 'writing', result: 'blog', msg: 'A diary the whole world is welcome to ignore.', secret: true },
{ a: 'book', b: 'internet', result: 'blog', msg: 'Chapters, posted into the void.', secret: true },
{ a: 'blog', b: 'antenna', result: 'rss', msg: 'The web, as it was meant to be read.', secret: true },
{ a: 'cat', b: 'computer', result: 'internetCat', msg: 'The internet has found its true purpose.' },
{ a: 'cat', b: 'internet', result: 'internetCat', msg: 'The wires learned to purr.' },
{ a: 'internetCat', b: 'idea', result: 'meme', msg: 'An idea in its final, unstoppable form.' },
{ a: 'internet', b: 'art', result: 'meme', msg: 'Art, optimized for chaos.' },
{ a: 'internet', b: 'computer', result: 'deadWeb', msg: 'The links still point somewhere. Nothing answers.', secret: true, fx: 'spooky' },
{ a: 'internet', b: 'ghost', result: 'deadWeb', msg: 'Some pages only load in memory.', secret: true, fx: 'spooky' },
{ a: 'computer', b: 'life', result: 'virus', msg: 'It only wanted to multiply.' },
{ a: 'computer', b: 'bee', result: 'virus', msg: 'It only wanted to multiply.' },
{ a: 'ai', b: 'ai', result: 'glitch', msg: 'The machine dreamed of a machine.', secret: true, fx: 'spooky' },
{ a: 'robot', b: 'ghost', result: 'glitch', msg: 'Haunted machinery is still machinery.', secret: true, fx: 'spooky' },
/* ---- occult ---- */
{ a: 'human', b: 'time', result: 'skull', msg: 'Everyone\u2019s final form.' },
{ a: 'dinosaur', b: 'time', result: 'skull', msg: 'Extinction, personalized.' },
{ a: 'skull', b: 'skull', result: 'ghost', msg: 'Death, but it left the light on.', secret: true, fx: 'spooky' },
{ a: 'skull', b: 'air', result: 'ghost', msg: 'The skull let go of the heavy parts.', secret: true, fx: 'spooky' },
{ a: 'skull', b: 'love', result: 'undead', msg: 'Love, unfortunately, finds a way.' },
{ a: 'ghost', b: 'love', result: 'undead', msg: 'It came back for the company.' },
{ a: 'moon', b: 'key', result: 'secret', msg: 'Some doors only open at night.', secret: true, fx: 'spooky' },
{ a: 'star', b: 'key', result: 'secret', msg: 'The key was always pointing up.', secret: true },
{ a: 'secret', b: 'galaxy', result: 'blackHole', msg: 'The universe\u2019s locked drawer.', secret: true, fx: 'cosmic' },
{ a: 'sun', b: 'time', result: 'blackHole', msg: 'Even light gets tired.', secret: true, fx: 'cosmic' },
{ a: 'forbiddenBook', b: 'fire', result: 'phoenix', msg: 'It read the whole thing and came back louder.', secret: true, ordered: true, fx: 'flare' },
/* ---- cosmos ---- */
{ a: 'time', b: 'time', result: 'night', msg: 'Time, left alone, becomes night.' },
{ a: 'time', b: 'moon', result: 'night', msg: 'The moon supervises the dark.' },
{ a: 'night', b: 'earth', result: 'moon', msg: 'The sky\u2019s oldest rock.' },
{ a: 'night', b: 'mountain', result: 'moon', msg: 'The mountain\u2019s reflection on the sky.' },
{ a: 'fire', b: 'night', result: 'star', msg: 'A light that outlived its fire.' },
{ a: 'night', b: 'night', result: 'star', msg: 'Night, squared, starts to shine.' },
{ a: 'fire', b: 'fire', result: 'sun', msg: 'Fire, squared and glorified.', secret: true, fx: 'flare' },
{ a: 'telescope', b: 'star', result: 'galaxy', msg: 'A city of suns.', fx: 'cosmic' },
{ a: 'star', b: 'star', result: 'galaxy', msg: 'Stars discovered crowds.', fx: 'cosmic' },
{ a: 'sun', b: 'moon', result: 'eclipse', msg: 'The sky\u2019s private joke.', secret: true, fx: 'cosmic' },
{ a: 'moon', b: 'star', result: 'owl', msg: 'It only interviews at night.', secret: true, nightOnly: true },
{ a: 'moon', b: 'telescope', result: 'ufo', msg: 'It blinked back.', secret: true, nightOnly: true, fx: 'spooky' },
{ a: 'ufo', b: 'life', result: 'alien', msg: 'Life, from a different draft.' },
{ a: 'life', b: 'galaxy', result: 'alien', msg: 'Somewhere, life filed a copy.' },
{ a: 'alien', b: 'rocket', result: 'ufo', msg: 'Return flight.' },
{ a: 'star', b: 'secret', result: 'netuno', msg: 'The outer dark has a name, and it\u2019s this one.', secret: true, fx: 'cosmic' },
{ a: 'telescope', b: 'galaxy', result: 'netuno', msg: 'You found it by looking too long.', secret: true, fx: 'cosmic' },
{ a: 'star', b: 'fire', result: 'supernova', msg: 'An ending so bright it counts as a beginning.', fx: 'flare' },
/* ---- absurd ---- */
{ a: 'internet', b: 'philosophy', result: 'hotTake', msg: 'Everyone has one. No one wants yours.' },
{ a: 'philosophy', b: 'fire', result: 'hotTake', msg: 'Someone is wrong somewhere, urgently.', fx: 'flare' },
{ a: 'statue', b: 'phone', result: 'ancientInfluencer', msg: 'Two million followers. Zero posts.', secret: true },
{ a: 'statue', b: 'internet', result: 'ancientInfluencer', msg: 'The followers were always there. Now there\u2019s a count.', secret: true },
{ a: 'developer', b: 'developer', result: 'meeting', msg: 'Two developers produced a third meeting.' }
];
var DATA = {
ELEMENTS: ELEMENTS,
RECIPES: RECIPES,
CATEGORIES: CATEGORIES,
STARTERS: STARTERS
};
if (typeof module !== 'undefined' && module.exports) {
module.exports = DATA;
}
globalThis.EMOJESIS_DATA = DATA;
})();
|