From 0baf1da2f8a5139139284c819f5bff1f91e72c65 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Sat, 28 Jan 2017 15:58:27 -0600 Subject: [PATCH] Add proxy-items as its own little class --- worlds/bricabrac.scm | 97 ++++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 39 deletions(-) diff --git a/worlds/bricabrac.scm b/worlds/bricabrac.scm index 442e87d..6ac795a 100644 --- a/worlds/bricabrac.scm +++ b/worlds/bricabrac.scm @@ -61,6 +61,32 @@ #:text (string-append (slot-ref actor 'read-text) "\n"))) +;; This one allows you to take from + +(define-actor () + ((cmd-take-from take-from-proxy)) + (proxy-items #:init-keyword #:proxy-items)) + +(define* (take-from-proxy gameobj message + #:key direct-obj indir-obj preposition + (player (message-from message))) + (call/ec + (lambda (escape) + (for-each + (lambda (obj-sym) + (define obj-id (dyn-ref gameobj obj-sym)) + (define goes-by + (mbody-val (<-wait obj-id 'goes-by))) + (when (ci-member direct-obj goes-by) + (<- obj-id 'cmd-take #:direct-obj direct-obj #:player player) + (escape))) + (slot-ref gameobj 'proxy-items)) + + (cmd-take-from gameobj message + #:direct-obj direct-obj #:indir-obj indir-obj + #:preposition preposition #:player player)))) + + ;;; Lobby ;;; ----- @@ -189,6 +215,13 @@ character.\n"))) "How can you have money if none of you produces anything?" "On no account allow Arthur to request tea on this ship.")) +(define-class () + (take-me? #:init-value + (lambda _ + (values #f #:why-not + `("Hm... no... the cabinet is locked and the properitor " + "is right over there."))))) + (define lobby (lol ('lobby @@ -249,9 +282,20 @@ Classy!" wanted to." #:summons 'break-desk-clerk) + ('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.") + ;; Object: curio cabinets ('lobby:cabinet - 'lobby + 'lobby + #:proxy-items '(lobby:porcelain-doll + lobby:1950s-robots + lobby:tea-set lobby:mustard-pot + lobby:head-of-elvis lobby:circuitboard-of-evlis + lobby:teletype-scroll lobby:orange-cat-phone) #:name "a curio cabinet" #:goes-by '("curio cabinet" "cabinet" "bricabrac cabinet" "cabinet of curiosities") @@ -267,21 +311,16 @@ 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"))))) - ('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.") ('lobby:porcelain-doll - 'lobby + '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")) ('lobby:1950s-robots - 'lobby + 'lobby #:invisible? #t #:name "a set of 1950s robots" #:desc "There's a whole set of these 1950s style robots. @@ -289,7 +328,7 @@ 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")) ('lobby:tea-set - 'lobby + 'lobby #:invisible? #t #:name "a tea set" #:desc "A complete tea set. Some of the cups are chipped. @@ -297,7 +336,7 @@ 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")) ('lobby:mustard-pot - 'lobby + '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,7 +345,7 @@ like this in a museum.") (p "Ha... imagine that... a mustard museum.")) #:goes-by '("mustard pot" "antique mustard pot" "mustard")) ('lobby:head-of-elvis - 'lobby + 'lobby #:invisible? #t #:name "the pickled head of Elvis" #:desc '((p "It's a jar full of some briny-looking liquid and... @@ -320,7 +359,7 @@ everything you read.")) #:goes-by '("pickled head of elvis" "pickled head of Elvis" "elvis" "Elvis" "head" "pickled head")) ('lobby:circuitboard-of-evlis - 'lobby + 'lobby #:invisible? #t #:name "the pickled circuitboard of Evlis" #:desc '((p "It's a circuitboard from a Lisp Machine called EVLIS. @@ -334,7 +373,7 @@ Too bad...")) "pickled circuitboard of EVLIS" "evlis" "Evlis" "EVLIS" "circuitboard" "pickled circuitboard")) ('lobby:teletype-scroll - 'lobby + 'lobby #:invisible? #t #:name "a scroll of teletype" #:desc '((p "This is a scroll of teletype paper. It's a bit old @@ -355,7 +394,7 @@ English language surrounding the word 'free' have lead to a lot of terminology d "scroll of teletype paper holding the software Four Freedoms" "scroll of teletype paper holding the software four freedoms")) ('lobby:orange-cat-phone - 'lobby + '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. @@ -373,29 +412,6 @@ this general shape in the 1990s." ;;; Grand hallway ;;; ------------- -(define-actor () - ((cmd-take-from hackthena-take-from-proxy))) - -(define* (hackthena-take-from-proxy gameobj message - #:key direct-obj indir-obj preposition - (player (message-from message))) - (call/ec - (lambda (escape) - (for-each - (lambda (obj-sym) - (define obj-id (dyn-ref gameobj obj-sym)) - (define goes-by - (mbody-val (<-wait obj-id 'goes-by))) - (when (ci-member direct-obj goes-by) - (<- obj-id 'cmd-take #:direct-obj direct-obj #:player player) - (escape))) - '(grand-hallway:keyboard - grand-hallway:disc-platter grand-hallway:hackthena-horns)) - - (<- player 'tell - #:text - `("Hackthena doesn't appear to be holding " ,direct-obj "."))))) - (define grand-hallway (lol ('grand-hallway @@ -433,7 +449,7 @@ but there's no indication of who they are." #:invisible? #t #:goes-by '("busts" "bust" "busts of serious people" "bust of serious person")) ('grand-hallway:hackthena-statue - 'grand-hallway + 'grand-hallway #:name "the statue of Hackthena" #: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 @@ -444,7 +460,10 @@ 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")) + #:goes-by '("hackthena statue" "hackthena" "statue" "statue of hackthena") + #:proxy-items '(grand-hallway:keyboard + grand-hallway:disc-platter + grand-hallway:hackthena-horns)) ('grand-hallway:keyboard 'grand-hallway #:name "a Knight Keyboard" -- 2.31.1