X-Git-Url: https://jxself.org/git/?p=mudsync.git;a=blobdiff_plain;f=worlds%2Fbricabrac.scm;h=548db77b0540cf9f1866dda90bbbf6ee840a076e;hp=28ba3dbbf172cd70531c96f7ffcebde097927593;hb=8d378638c45cb573183ecb52a525ccbf04917b4a;hpb=ec044e4616984614a07d540a76ee8586bca4be99 diff --git a/worlds/bricabrac.scm b/worlds/bricabrac.scm index 28ba3db..548db77 100644 --- a/worlds/bricabrac.scm +++ b/worlds/bricabrac.scm @@ -19,7 +19,6 @@ ;;; Hotel Bricabrac (use-modules (mudsync) - (mudsync parser) (8sync actors) (8sync agenda) (oop goops) @@ -192,7 +191,7 @@ character.\n"))) (define lobby (lol - ('room:lobby + ('lobby #f #:name "Hotel Lobby" #:desc @@ -208,10 +207,10 @@ character.\n"))) #:exits (list (make #:name "north" - #:to 'room:grand-hallway))) + #:to 'grand-hallway))) ;; NPC: hotel owner - ('npc:lobby:hotel-owner - 'room:lobby + ('lobby:hotel-owner + 'lobby #:name "a frumpy fellow" #:desc '((p " Whoever this is, they looks totally exhausted. They're @@ -227,8 +226,8 @@ though the conversation may be a bit one sided.")) "hotel proprietor" "proprietor") #:catchphrases hotel-owner-grumps) ;; Object: Sign - ('thing:lobby:sign - 'room:lobby + ('lobby:sign + 'lobby #:name "the Hotel Bricabrac sign" #:desc " It strikes you that there's something funny going on with this sign. Sure enough, if you look at it hard enough, you can tell that someone @@ -241,18 +240,18 @@ Classy!" "hotel bricabrac sign" "lobby sign")) - ('thing:lobby:bell - 'room:lobby + ('lobby:bell + 'lobby #:name "a shiny brass bell" #:goes-by '("shiny brass bell" "shiny bell" "brass bell" "bell") #:desc " A shiny brass bell. Inscribed on its wooden base is the text \"ring me for service\". You probably could \"ring the bell\" if you wanted to." - #:summons 'npc:break-room:desk-clerk) + #:summons 'break-desk-clerk) ;; Object: curio cabinets - ('thing:lobby:cabinet - 'room:lobby + ('lobby:cabinet + 'lobby #:name "a curio cabinet" #:goes-by '("curio cabinet" "cabinet" "bricabrac cabinet" "cabinet of curiosities") @@ -268,37 +267,37 @@ Ooh, ~a!" (random-choice "the pickled circuitboard of EVLIS" "a scroll of teletype paper holding the software Four Freedoms" "a telephone shaped like an orange cartoon cat"))))) - ('thing:lobby:sign-in-form - 'room:lobby + ('lobby:sign-in-form + 'lobby #:name "sign-in form" #:goes-by '("sign-in form" "form" "signin form") #:desc "It looks like you could sign this form and set your name.") - ('thing:lobby:porcelain-doll - 'room:lobby + ('lobby:porcelain-doll + 'lobby #:invisible? #t #:name "a creepy porcelain doll" #:desc "It strikes you that while the doll is technically well crafted, it's also the stuff of nightmares." #:goes-by '("porcelain doll" "doll")) - ('thing:lobby:1950s-robots - 'room:lobby + ('lobby:1950s-robots + 'lobby #:invisible? #t #:name "a set of 1950s robots" #:desc "There's a whole set of these 1950s style robots. They seem to be stamped out of tin, and have various decorations of levers and buttons and springs. Some of them have wind-up knobs on them." #:goes-by '("robot" "robots" "1950s robot" "1950s robots")) - ('thing:lobby:tea-set - 'room:lobby + ('lobby:tea-set + 'lobby #:invisible? #t #:name "a tea set" #:desc "A complete tea set. Some of the cups are chipped. You can imagine yourself joining a tea party using this set, around a nice table with some doilies, drinking some Earl Grey tea, hot. Mmmm." #:goes-by '("tea set" "tea")) - ('thing:lobby:mustard-pot - 'room:lobby + ('lobby:mustard-pot + 'lobby #:invisible? #t #:name "a mustard pot" #:desc '((p "It's a mustard pot. I mean, it's kind of cool, it has a @@ -306,8 +305,8 @@ nice design, and it's an antique, but you can't imagine putting something like this in a museum.") (p "Ha... imagine that... a mustard museum.")) #:goes-by '("mustard pot" "antique mustard pot" "mustard")) - ('thing:lobby:head-of-elvis - 'room:lobby + ('lobby:head-of-elvis + 'lobby #:invisible? #t #:name "the pickled head of Elvis" #:desc '((p "It's a jar full of some briny-looking liquid and... @@ -320,8 +319,8 @@ not Elvis.") everything you read.")) #:goes-by '("pickled head of elvis" "pickled head of Elvis" "elvis" "Elvis" "head" "pickled head")) - ('thing:lobby:circuitboard-of-evlis - 'room:lobby + ('lobby:circuitboard-of-evlis + 'lobby #:invisible? #t #:name "the pickled circuitboard of Evlis" #:desc '((p "It's a circuitboard from a Lisp Machine called EVLIS. @@ -334,8 +333,8 @@ Too bad...")) #:goes-by '("pickled circuitboard of evlis" "pickled circuitboard of Evlis" "pickled circuitboard of EVLIS" "evlis" "Evlis" "EVLIS" "circuitboard" "pickled circuitboard")) - ('thing:lobby:teletype-scroll - 'room:lobby + ('lobby:teletype-scroll + 'lobby #:invisible? #t #:name "a scroll of teletype" #:desc '((p "This is a scroll of teletype paper. It's a bit old @@ -355,8 +354,8 @@ English language surrounding the word 'free' have lead to a lot of terminology d "teletype paper" "scroll" "four freedoms" "scroll of teletype paper holding the software Four Freedoms" "scroll of teletype paper holding the software four freedoms")) - ('thing:lobby:orange-cat-phone - 'room:lobby + ('lobby:orange-cat-phone + 'lobby #:invisible? #t #:name "a telephone shaped like an orange cartoon cat" #:desc "It's made out of a cheap plastic, and it's very orange. @@ -374,35 +373,83 @@ this general shape in the 1990s." ;;; Grand hallway ;;; ------------- +(define-actor () + ((cmd-take-from hackthena-cmd-take-from))) + +(define* (hackthena-cmd-take-from gameobj message + #:key direct-obj indir-obj preposition + (player (message-from message))) + (define keyboard-goes-by + (mbody-val (<-wait (dyn-ref gameobj 'grand-hallway:keyboard) 'goes-by))) + (define disc-platter-goes-by + (mbody-val (<-wait (dyn-ref gameobj 'grand-hallway:disc-platter) 'goes-by))) + + (cond ((member direct-obj keyboard-goes-by) + (<- player 'tell + #:text `("Are you kidding? Do you know how hard it is to find " + "a Knight Keyboard? There's no way she's going " + "to give that up."))) + ((member direct-obj disc-platter-goes-by) + 'TODO) + (else + (<- player 'tell + #:text + `("Hackthena doesn't appear to be holding " ,direct-obj + "."))))) + + (define grand-hallway (lol - ('room:grand-hallway + ('grand-hallway #f #:name "Grand Hallway" - #:desc " A majestic red carpet runs down the center of the room. + #:desc '((p " A majestic red carpet runs down the center of the room. Busts of serious looking people line the walls, but there's no -clear indication that they have any logical relation to this place. - In the center is a large statue of a bearded man. You wonder what -that's all about? - To the south is the lobby. A door to the east is labeled \"smoking -room\", while a door to the west is labeled \"playroom\"." +clear indication that they have any logical relation to this place.") + (p "In the center is a large statue of a woman in a warrior's +pose, but something is strange about her weapon and shield. You wonder what +that's all about?") + (p "To the south is the lobby. A door to the east is labeled \"smoking +room\", while a door to the west is labeled \"playroom\".")) #:exits (list (make #:name "south" - #:to 'room:lobby) + #:to 'lobby) (make #:name "west" - #:to 'room:playroom) + #:to 'playroom) (make #:name "east" - #:to 'room:smoking-parlor))) - ('thing:ignucius-statue - 'room:grand-hallway + #:to 'smoking-parlor))) + ('grand-hallway:hackthena-statue + 'grand-hallway #:name "a statue" - #:desc " The statue is of a serious-looking bearded man with long, flowing hair. - It has a large physical halo. Removing it is tempting, but it looks pretty -well fastened." - #:goes-by '("statue" "st ignucius" "st. ignucius")))) + #:desc '((p "The base of the statue says \"Hackthena, guardian of the hacker +spirit\". You've heard of Hackthena... not a goddess, but spiritual protector of +all good hacks, and legendary hacker herself.") + (p "Hackthena holds the form of a human woman. She wears flowing +robes, has a pear of curly bovine-esque horns protruding from the sides of her +head, wears a pair of horn-rimmed glasses, and appears posed as if for battle. +But instead of a weapon, she seems to hold some sort of keyboard. And her +shield... well it's round like a shield, but something seems off about it. +You'd better take a closer look to be sure.")) + #:goes-by '("hackthena statue" "hackthena" "statue" "statue of hackthena")) + ('grand-hallway:keyboard + 'grand-hallway + #:name "a Knight Keyboard" + #:desc "Whoa, this isn't just any old keyboard, this is a Knight Keyboard! +Any space cadet can see that with that kind of layout a hack-and-slayer could +thrash out some serious key-chords like there's no tomorrow. You guess +Hackthena must be an emacs user." + #:invisible? #t + #:goes-by '("knight keyboard" "keyboard")) + ('grand-hallway:disc-platter + 'grand-hallway + #:name "a hard disc platter" + #:desc "This isn't a shield after all, it seems to be a hard disc +platter! It looks kind of loose..." + #:invisible? #t + #:goes-by '("hard disc platter" "disc platter" "disc" "shield" "platter")))) ;;; Playroom @@ -410,7 +457,7 @@ well fastened." (define playroom (lol - ('room:playroom + ('playroom #f #:name "The Playroom" #:desc " There are toys scattered everywhere here. It's really unclear @@ -418,21 +465,21 @@ if this room is intended for children or child-like adults." #:exits (list (make #:name "east" - #:to 'room:grand-hallway))) - ('thing:playroom:cubey - 'room:playroom + #:to 'grand-hallway))) + ('playroom:cubey + 'playroom #:name "cubey" #:take-me? #t #:desc " It's a little foam cube with googly eyes on it. So cute!") - ('thing:playroom:cuddles-plushie - 'room:playroom + ('playroom:cuddles-plushie + 'playroom #:name "a cuddles plushie" #:goes-by '("plushie" "cuddles plushie" "cuddles") #:take-me? #t #:desc " A warm and fuzzy cuddles plushie! It's a cuddlefish!") - ('thing:playroom:toy-chest - 'room:playroom + ('playroom:toy-chest + 'playroom #:name "a toy chest" #:goes-by '("toy chest" "chest") #:desc (lambda (toy-chest whos-looking) @@ -440,7 +487,7 @@ if this room is intended for children or child-like adults." `((p "A brightly painted wooden chest. The word \"TOYS\" is " "engraved on it.") (p "Inside you see:" - ,(if (eq? (pk 'contents contents) '()) + ,(if (eq? contents '()) " nothing! It's empty!" `(ul ,(map (lambda (occupant) `(li ,(mbody-val @@ -450,8 +497,8 @@ if this room is intended for children or child-like adults." #:put-in-me? #t) ;; Things inside the toy chest - ('thing:playroom:toy-chest:rubber-duck - 'thing:playroom:toy-chest + ('playroom:toy-chest:rubber-duck + 'playroom:toy-chest #:name "a rubber duck" #:goes-by '("rubber duck" "duck") #:take-me? #t @@ -502,7 +549,7 @@ if this room is intended for children or child-like adults." (define smoking-parlor (lol - ('room:smoking-parlor + ('smoking-parlor #f #:name "Smoking Parlor" #:desc @@ -514,20 +561,20 @@ a nondescript steel door to the south, leading apparently outside.")) #:exits (list (make #:name "west" - #:to 'room:grand-hallway) + #:to 'grand-hallway) (make #:name "south" - #:to 'room:break-room))) - ('thing:smoking-parlor:chair - 'room:smoking-parlor + #:to 'break-room))) + ('smoking-parlor:chair + 'smoking-parlor #:name "a comfy leather chair" #:desc " That leather chair looks really comfy!" #:goes-by '("leather chair" "comfy leather chair" "chair") #:sit-phrase "sink into" #:sit-phrase-third-person "sinks into" #:sit-name "the comfy leather chair") - ('thing:smoking-parlor:sofa - 'room:smoking-parlor + ('smoking-parlor:sofa + 'smoking-parlor #:name "a plush leather sofa" #:desc " That leather chair looks really comfy!" #:goes-by '("leather sofa" "plush leather sofa" "sofa" @@ -535,8 +582,8 @@ a nondescript steel door to the south, leading apparently outside.")) #:sit-phrase "sprawl out on" #:sit-phrase-third-person "sprawls out on into" #:sit-name "the plush leather couch") - ('thing:smoking-parlor:bar-stool - 'room:smoking-parlor + ('smoking-parlor:bar-stool + 'smoking-parlor #:name "a bar stool" #:desc " Conveniently located near the bar! Not the most comfortable seat in the room, though." @@ -544,16 +591,16 @@ seat in the room, though." #:sit-phrase "hop on" #:sit-phrase-third-person "hops onto" #:sit-name "the bar stool") - ('npc:ford-prefect - 'room:smoking-parlor + ('ford-prefect + 'smoking-parlor #:name "Ford Prefect" #:desc "Just some guy, you know?" #:goes-by '("Ford Prefect" "ford prefect" "frood" "prefect" "ford") #:catchphrases prefect-quotes) - ('thing:smoking-parlor:no-smoking-sign - 'room:smoking-parlor + ('smoking-parlor:no-smoking-sign + 'smoking-parlor #:invisible? #t #:name "No Smoking Sign" #:desc "This sign says \"No Smoking\" in big, red letters. @@ -685,7 +732,7 @@ so there's no need to ring the bell.\n")) #:text "The clerk's ears perk up, she stamps out a cigarette, and she runs out of the room!\n") - (gameobj-set-loc! clerk (dyn-ref clerk 'room:lobby)) + (gameobj-set-loc! clerk (dyn-ref clerk 'lobby)) (slot-set! clerk 'patience 8) (slot-set! clerk 'state 'on-duty) (<- (gameobj-loc clerk) 'tell-room @@ -710,7 +757,7 @@ You can ask me about the following: The clerk leaves the room in a hurry.\n" player-name) #:exclude (actor-id clerk)) - (gameobj-set-loc! clerk (dyn-ref clerk 'room:break-room)) + (gameobj-set-loc! clerk (dyn-ref clerk 'break-room)) (slot-set! clerk 'state 'slacking) (<- (gameobj-loc clerk) 'tell-room #:text clerk-return-to-slacking-text @@ -778,7 +825,7 @@ if you need further help.") (begin (tell-room clerk-slack-excuse-text) ;; back bto the break room - (gameobj-set-loc! clerk (pk 'break-room (dyn-ref clerk 'room:break-room))) + (gameobj-set-loc! clerk (pk 'break-room (dyn-ref clerk 'break-room))) (tell-room clerk-return-to-slacking-text) ;; annnnnd back to slacking (slot-set! clerk 'state 'slacking) @@ -788,7 +835,7 @@ if you need further help.") (define break-room (lol - ('room:break-room + ('break-room #f #:name "Employee Break Room" #:desc " This is less a room and more of an outdoor wire cage. You get @@ -800,22 +847,21 @@ the scenery tapers off nothingness. But that can't be right, can it?" #:exits (list (make #:name "north" - #:to 'room:smoking-parlor)) - ) - ('npc:break-room:desk-clerk - 'room:break-room + #:to 'smoking-parlor))) + ('break-room:desk-clerk + 'break-room #:name "the hotel desk clerk" #:desc " The hotel clerk is wearing a neatly pressed uniform bearing the hotel insignia. She appears to be rather exhausted." #:goes-by '("hotel desk clerk" "clerk" "desk clerk")) - ('thing:break-room:void - 'room:break-room + ('break-room:void + 'break-room #:invisible? #t #:name "The Void" #:desc "As you stare into the void, the void stares back into you." #:goes-by '("void" "abyss" "nothingness" "scenery")) - ('thing:break-room:fence - 'room:break-room + ('break-room:fence + 'break-room #:invisible? #t #:name "break room cage" #:desc "It's a mostly-cubical wire mesh surrounding the break area. @@ -843,5 +889,5 @@ the paint, but the wires themselves seem to be unusually sturdy." ;; TODO: Provide command line args (define (run-game . args) - (run-demo (game-spec) 'room:lobby #:repl-server #t)) + (run-demo (game-spec) 'lobby #:repl-server #t))