;;; Hotel Bricabrac
(use-modules (mudsync)
- (mudsync parser)
(8sync actors)
(8sync agenda)
(oop goops)
#: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, well... 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.
(make <exit>
#:name "east"
#:to 'smoking-parlor)))
- ('grand-hallway:hackthena-statue
+ ('grand-hallway:carpet
<gameobj> 'grand-hallway
- #:name "a statue"
+ #:name "the Grand Hallway carpet"
+ #:desc "It's very red, except in the places where it's very worn."
+ #:invisible? #t
+ #:goes-by '("red carpet" "carpet"))
+ ('grand-hallway:busts
+ <gameobj> 'grand-hallway
+ #:name "the busts of serious people"
+ #:desc "There are about 6 of them in total. They look distinguished
+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
+ <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
all good hacks, and legendary hacker herself.")
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"))
- ))
+ #: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"
+ #: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
+ #:take-me? (lambda _
+ (values #f
+ #:why-not
+ `("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.")))
+ #:goes-by '("knight keyboard" "keyboard"))
+ ('grand-hallway:hackthena-horns
+ <gameobj> 'grand-hallway
+ #:name "Hackthena's horns"
+ #:desc "They're not unlike a Gnu's horns."
+ #:invisible? #t
+ #:take-me? (lambda _
+ (values #f
+ #:why-not
+ `("Are you seriously considering desecrating a statue?")))
+ #:goes-by '("hackthena's horns" "horns" "horns of hacktena"))
+ ('grand-hallway:disc-platter
+ <gameobj> '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"))))
\f
;;; Playroom
#:to 'grand-hallway)))
('playroom:cubey
<gameobj> 'playroom
- #:name "cubey"
+ #:name "Cubey"
#:take-me? #t
#:desc " It's a little foam cube with googly eyes on it. So cute!")
('playroom:cuddles-plushie
<gameobj> 'playroom
- #:name "a cuddles plushie"
+ #:name "a Cuddles plushie"
#:goes-by '("plushie" "cuddles plushie" "cuddles")
#:take-me? #t
#:desc " A warm and fuzzy cuddles plushie! It's a cuddlefish!")
`((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