diff --git a/server/src/badges.ts b/server/src/badges.ts index aebee239..cd403fff 100644 --- a/server/src/badges.ts +++ b/server/src/badges.ts @@ -319,6 +319,16 @@ export const UnlockableBadges: Badge[] = [ emoji: 'πŸ”‘', description: 'Employees ONLY?', category: BadgeCategories.Year2023 + }, + { + emoji: '🌭', + description: 'A much better food than a color scheme', + category: BadgeCategories.Year2023 + }, + { + emoji: 'πŸŽƒ', + description: 'Happy Crawloween!', + category: BadgeCategories.Year2023 } ] diff --git a/server/src/generators/bodyWorksCharacter.ts b/server/src/generators/bodyWorksCharacter.ts new file mode 100644 index 00000000..1ddc6315 --- /dev/null +++ b/server/src/generators/bodyWorksCharacter.ts @@ -0,0 +1,25 @@ +/* eslint-disable quotes */ + +import tracery from 'tracery-grammar' + +export const actionString = (bodyWorksCharacter: string) => { + return `${bodyWorksCharacter}` +} + +export const generate = () => { + const grammar = tracery.createGrammar({ + origin: [ + 'They look at you with a mischievous grin as they mix two smoking fluids together.', + 'The sudden smell of perfume slams into your senses, temporarily blinding you.', + 'A flash of light comes from the cauldron in front of them as they add some mysterious powder into a bubbling concoction of some kind.', + 'They stir a cauldron and you hear muttered words in some language you don't understand.', + 'You notice a new growth of mushrooms pop up from the ground in the wake of their footsteps.', + 'Their hand flashes out and snatches a bottle off a shelf, adding its contents to the cauldron.' + ] + }) + + grammar.addModifiers(tracery.baseEngModifiers) + + return grammar.flatten('#origin#') +} +/* eslint-enable quotes */ diff --git a/server/src/generators/hotDogGuy.ts b/server/src/generators/hotDogGuy.ts new file mode 100644 index 00000000..bf476e35 --- /dev/null +++ b/server/src/generators/hotDogGuy.ts @@ -0,0 +1,26 @@ +/* eslint-disable quotes */ + +import tracery from 'tracery-grammar' + +export const actionString = (hotDogGuy: string) => { + return `${hotDogGuy}` +} + +export const generate = () => { + const grammar = tracery.createGrammar({ + origin: [ + 'A young man stares at you, wearing a floppy, multicolored hat, his eyes pleading for your mercy.', + 'He glances at you as he dips a battered hotdog into hot oil.', + 'His outfit's bright colors seem to leap out at you, no matter where you turn.', + 'He looks out into the food court at all the trays left haphazardly about, and sighs.', + 'A beeping sound rings out from behind him, but he does not move.', + 'You catch him maliciously slapping the side of an ice cream machine, cursing loudly.', + 'You notice a small notepad on the side of the cash register, filled with sketches.' + ] + }) + + grammar.addModifiers(tracery.baseEngModifiers) + + return grammar.flatten('#origin#') +} +/* eslint-enable quotes */ diff --git a/server/src/generators/index.ts b/server/src/generators/index.ts index 1adb9e4a..2d1a3fe5 100644 --- a/server/src/generators/index.ts +++ b/server/src/generators/index.ts @@ -16,7 +16,14 @@ import * as drinkSkeletons from './drinkSkeletons' import * as drinkVessels from './drinkVessels' import * as drinkContents from './drinkContents' import * as drinkNames from './drinkNames' +// begin 2023 import * as craneGame from './craneGame' +import * as bodyWorksCharacter from './bodyWorksCharacter' +import * as seersCatalog from './seersCatalog' +import * as zara from './zara' +import * as hotDogGuy from './hotDogGuy' +import * as ray from './ray' +import * as loudRobert from './loudRobert' interface Generator { generate(): string @@ -42,7 +49,13 @@ const generators: {[name: string]: Generator} = { drinkVessels, drinkContents, drinkNames, - craneGame + craneGame, + bodyWorksCharacter, + seersCatalog, + zara, + hotDogGuy, + ray, + loudRobert } export default generators diff --git a/server/src/generators/loudRobert.ts b/server/src/generators/loudRobert.ts new file mode 100644 index 00000000..6846aeaa --- /dev/null +++ b/server/src/generators/loudRobert.ts @@ -0,0 +1,23 @@ +/* eslint-disable quotes */ + +import tracery from 'tracery-grammar' + +export const actionString = (loudRobert: string) => { + return `${loudRobert}` +} + +export const generate = () => { + const grammar = tracery.createGrammar({ + origin: [ + 'His short, bulky frame is supporting an enormous green coat that hangs down to his feet.', + 'On his head rests a backwards baseball cap which no longer seems to serve any purpose.', + 'The two men stand facing each other and all you hear are expletives, but somehow they seem to understand each other.', + 'He stares at you intensely, but doesn’t say anything.' + ] + }) + + grammar.addModifiers(tracery.baseEngModifiers) + + return grammar.flatten('#origin#') +} +/* eslint-enable quotes */ diff --git a/server/src/generators/ray.ts b/server/src/generators/ray.ts new file mode 100644 index 00000000..f4a63ecb --- /dev/null +++ b/server/src/generators/ray.ts @@ -0,0 +1,24 @@ +/* eslint-disable quotes */ + +import tracery from 'tracery-grammar' + +export const actionString = (ray: string) => { + return `${ray}` +} + +export const generate = () => { + const grammar = tracery.createGrammar({ + origin: [ + 'His tall, lanky frame is wrapped in a bright yellow jacket 2 sizes too large.', + 'A grey beanie sits atop his long mane of dirty blond hair, and all of it is haphazardly put together with little concern for fashion.', + 'You get a whiff of a strange plant smell any time you so much as glance at him.', + 'The two men stand facing each other and all you hear are expletives, but somehow they seem to understand each other.', + 'As you look at him, he breaks into an impromptu fit of rap.' + ] + }) + + grammar.addModifiers(tracery.baseEngModifiers) + + return grammar.flatten('#origin#') +} +/* eslint-enable quotes */ diff --git a/server/src/generators/seersCatalog.ts b/server/src/generators/seersCatalog.ts new file mode 100644 index 00000000..b6c6ed65 --- /dev/null +++ b/server/src/generators/seersCatalog.ts @@ -0,0 +1,57 @@ +import tracery from 'tracery-grammar' + +export const actionString = (item: string) => { + return `You make the mistake of reading the catalog out loud. Coins vanish from your purse, and ${item} appears at your feet as ominous laughter echoes in the distance.` +} + +export const generate = () => { + var grammar = tracery.createGrammar({ + origin: [ + '#pillType# Pills for #malady#', + '#person#'s #cureType# Cure', + '#cureType# cure for #malady#', + 'System Builder and Lung Restorer', + 'Giant Power Electric Belt', + 'Griffons' Plush Cape', + 'Maternity Outfit For Mother', + 'Seer' Motor Buggy', + 'Saving Plan For Upper Planes Home Buyer', + 'A Chicken', + 'Wide Cuffed Pants +1', + '#person#' #item#' + ], + person: [ + 'Syzygyrior', + 'Dr Mandelbrot', + 'Brown', + 'Xanthar', + 'Tasha' + ], + pillType: [ + 'Goblin', + 'Wizard', + 'Cursed', + 'Blessed', + 'Definitely Not Cursed' + ], + cureType: [ + 'Consumption', + 'Quick', + 'Vegetable' + ], + malady: [ + 'Weak Goblins', + 'Low T (Treasure)', + 'Collapsed Wave Functions', + 'Kobold Weakness', + 'Persistent Undeath' + ], + item: [ + 'Guide to Everything in the Mall', + 'Hideous Sweater' + ] + }) + + grammar.addModifiers(tracery.baseEngModifiers) + return grammar.flatten('#origin#') +} diff --git a/server/src/generators/zara.ts b/server/src/generators/zara.ts new file mode 100644 index 00000000..3d6fde0e --- /dev/null +++ b/server/src/generators/zara.ts @@ -0,0 +1,25 @@ +/* eslint-disable quotes */ + +import tracery from 'tracery-grammar' + +export const actionString = (zara: string) => { + return `${zara}` +} + +export const generate = () => { + const grammar = tracery.createGrammar({ + origin: [ + 'She flashes you a charming smile around her two enormous fangs and braided muttonchops.', + 'She stands only three and a half feet tall, but it's the most imposing, muscular three feet you've ever seen.', + 'Zara looks at you with a mischievous grin. The twinkle in her eye says she would bench press you, if given a chance.', + 'You catch her eye for an instant before she runs off to break up a pair of feral teens arguing about obscure funk bands.', + 'She stands looking over the food court with absolute authority, a twisted orc axe’s handle extending far over her left shoulder.', + 'You notice a slight gleam in her immaculate, braided muttonchops. A feature she clearly devotes much of her time towards.' + ] + }) + + grammar.addModifiers(tracery.baseEngModifiers) + + return grammar.flatten('#origin#') +} +/* eslint-enable quotes */ diff --git a/server/src/moveToRoom.ts b/server/src/moveToRoom.ts index 006ff467..26ac0535 100644 --- a/server/src/moveToRoom.ts +++ b/server/src/moveToRoom.ts @@ -158,7 +158,9 @@ function awardBadges (user: User, roomId: string) { ['procedural', 'nega_ticket'], ['underlab', 'undermuffin'], // begin 2023 - ['lockedDoor', 'πŸ”‘'] + ['lockedDoor', 'πŸ”‘'], + ['hotDogStand', '🌭'], + ['emptyStore', 'πŸŽƒ'] ] const unlockedEmoji: Badge[] = [] diff --git a/src/App.tsx b/src/App.tsx index 50a703c9..86c1c191 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -295,6 +295,7 @@ const App = () => { ) break diff --git a/src/components/MapView.tsx b/src/components/MapView.tsx index b8508827..87692ab7 100644 --- a/src/components/MapView.tsx +++ b/src/components/MapView.tsx @@ -170,11 +170,11 @@ const mapText = ` |..................................#..........| \\,,......♦....Food.♦....♦..|................| |.........Arcade (13).............|..........| \\,.......♦...Court.♦....♦.#...Pretzel......| |..................................|..........| \\,___..♦....(10)...♦....♦|...Place (08)...| -|..................................|..Map.....| | |♦....♦....♦....♦...|................| -|..................................|..Obelisk.| empty | |.♦....♦....♦....♦..|................| -|........................Anime.....|.....(12).# store | |..♦....♦....♦....♦.|================| -|........................Racing....|..........| (11) | |.♦....♦....♦....♦..|................| -|..Retro Corner..........Game......|..........|---------β”˜ |♦....♦....♦....♦...|...Hot Dog......| +|..................................|..Map.....| Spirit ||♦....♦....♦....♦...|................| +|..................................|..Obelisk.| Crawloween ||.♦....♦....♦....♦..|................| +|........................Anime.....|.....(12).# (11) ||..♦....♦....♦....♦.|================| +|........................Racing....|..........| ||.♦....♦....♦....♦..|................| +|..Retro Corner..........Game......|..........|------------β”˜|♦....♦....♦....♦...|...Hot Dog......| |.........(16).............(17)....|..........| |.♦....♦....♦....♦..#...Stand (09)...| |..................................|..........| |..♦....♦....♦....♦.|................| β””----------------------------------β””---╔╦╗----β”˜ β””------------------------------------β”˜ diff --git a/src/components/SettingsView.tsx b/src/components/SettingsView.tsx index 15a4d468..ce8ffb46 100644 --- a/src/components/SettingsView.tsx +++ b/src/components/SettingsView.tsx @@ -3,6 +3,7 @@ import React, { useContext, useEffect } from 'react' import '../../style/profileEditView.css' import { SetUseSimpleNamesAction, SetCaptionsEnabledAction } from '../Actions' import { DispatchContext, SettingsContext } from '../App' +import { Badge } from '../../server/src/badges' import { currentTheme, setTheme } from '../storage' import VideoAudioSettingsView from './VideoAudioSettingsView' @@ -10,6 +11,7 @@ import VideoAudioSettingsView from './VideoAudioSettingsView' interface Props { keepCameraWhenMoving: boolean; captionsEnabled: boolean; + unlockedBadges: Badge[]; } export default function SettingsView (props: Props) { @@ -113,6 +115,18 @@ export default function SettingsView (props: Props) { /> + {props.unlockedBadges?.some(p => p.emoji === '🌭') && +
+ + +
+ }
diff --git a/src/linkActions.ts b/src/linkActions.ts index 00a02e8b..c7bd9634 100644 --- a/src/linkActions.ts +++ b/src/linkActions.ts @@ -70,6 +70,24 @@ export const linkActions = { }, spinAround: () => { spinTheRoom() + }, + talkToBodyWorksCharacter: () => { + displayMessageFromList('bodyWorksCharacter') + }, + readCatalog: () => { + pickUpRandomItemFromList('seersCatalog') + }, + talkToZara: () => { + displayMessageFromList('zara') + }, + talkToHotDogGuy: () => { + displayMessageFromList('hotDogGuy') + }, + talkToRay: () => { + displayMessageFromList('ray') + }, + talkToLoudRobert: () => { + displayMessageFromList('loudRobert') } } diff --git a/style/style.css b/style/style.css index 15ee17e1..f76237d2 100644 --- a/style/style.css +++ b/style/style.css @@ -117,8 +117,7 @@ --link: #66FF66; } - /* vaporwave light bg: #e7eef4;, good puprel: #6b3097*/ -.vaporwave { + .vaporwave { --main-background: #302c7b; --main-font:#B1ECE5; ; --gray-text:#3c88cc; @@ -142,6 +141,29 @@ --link: #ee82ee; } +.hotdogstand { + --main-background: #ff0000 ; + --main-font:#000000; + --gray-text:#888888; + --alternate-background: #ffff00; + --alternate-translucent: rgba(255, 255, 0, 0.8); + --green:#00ff00; + --highlight-line: #ffffff; + --highlighted-line-font: #ff0000; + --pink: hotpink; + --blue: #0000ff; + --cyan: #00ffff; + --magenta: #ff00ff; + --orange: #ffa500; + --red: #ff0000; + --violet: #ee82ee; + --yellow: #ffff00; + --link-decoration: underline; + --link-style: dashed; + --active: #ffff00; + --link: #ffffff; +} + body { background-color: var(--main-background); color: var(--main-font);