#:text (string-append (slot-ref actor 'read-text) "\n")))
+;; This one allows you to take from
+
+(define-actor <proxy-items> (<gameobj>)
+ ((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))))
+
+
\f
;;; Lobby
;;; -----
"How can you have money if none of you produces anything?"
"On no account allow Arthur to request tea on this ship."))
+(define-class <cabinet-item> (<gameobj>)
+ (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
wanted to."
#:summons 'break-desk-clerk)
+ ('lobby:sign-in-form
+ <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
- <gameobj> 'lobby
+ <proxy-items> '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")
"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
- <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
- <gameobj> 'lobby
+ <cabinet-item> '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
- <gameobj> 'lobby
+ <cabinet-item> 'lobby
#:invisible? #t
#:name "a set of 1950s robots"
#:desc "There's a whole set of these 1950s style robots.
and buttons and springs. Some of them have wind-up knobs on them."
#:goes-by '("robot" "robots" "1950s robot" "1950s robots"))
('lobby:tea-set
- <gameobj> 'lobby
+ <cabinet-item> 'lobby
#:invisible? #t
#:name "a tea set"
#:desc "A complete tea set. Some of the cups are chipped.
nice table with some doilies, drinking some Earl Grey tea, hot. Mmmm."
#:goes-by '("tea set" "tea"))
('lobby:mustard-pot
- <gameobj> 'lobby
+ <cabinet-item> 'lobby
#:invisible? #t
#:name "a mustard pot"
#:desc '((p "It's a mustard pot. I mean, it's kind of cool, it has a
(p "Ha... imagine that... a mustard museum."))
#:goes-by '("mustard pot" "antique mustard pot" "mustard"))
('lobby:head-of-elvis
- <gameobj> 'lobby
+ <cabinet-item> 'lobby
#:invisible? #t
#:name "the pickled head of Elvis"
#:desc '((p "It's a jar full of some briny-looking liquid and...
#:goes-by '("pickled head of elvis" "pickled head of Elvis"
"elvis" "Elvis" "head" "pickled head"))
('lobby:circuitboard-of-evlis
- <gameobj> 'lobby
+ <cabinet-item> 'lobby
#:invisible? #t
#:name "the pickled circuitboard of Evlis"
#:desc '((p "It's a circuitboard from a Lisp Machine called EVLIS.
"pickled circuitboard of EVLIS"
"evlis" "Evlis" "EVLIS" "circuitboard" "pickled circuitboard"))
('lobby:teletype-scroll
- <gameobj> 'lobby
+ <cabinet-item> 'lobby
#:invisible? #t
#:name "a scroll of teletype"
#:desc '((p "This is a scroll of teletype paper. It's a bit old
"scroll of teletype paper holding the software Four Freedoms"
"scroll of teletype paper holding the software four freedoms"))
('lobby:orange-cat-phone
- <gameobj> 'lobby
+ <cabinet-item> '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.
;;; Grand hallway
;;; -------------
-(define-actor <hackthena> (<gameobj>)
- ((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
#:invisible? #t
#:goes-by '("busts" "bust" "busts of serious people" "bust of serious person"))
('grand-hallway:hackthena-statue
- <hackthena> 'grand-hallway
+ <proxy-items> '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
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
<gameobj> 'grand-hallway
#:name "a Knight Keyboard"