;;; Hotel Bricabrac
(use-modules (mudsync)
+ (mudsync container)
(8sync actors)
(8sync agenda)
(oop goops)
#:text (string-append (slot-ref actor 'read-text) "\n")))
-;; This one allows you to take from
-
+;; This one allows you to take from items that are proxied by it
(define-actor <proxy-items> (<gameobj>)
((cmd-take-from take-from-proxy))
(proxy-items #:init-keyword #:proxy-items))
(escape)))
(slot-ref gameobj 'proxy-items))
- (cmd-take-from gameobj message
- #:direct-obj direct-obj #:indir-obj indir-obj
- #:preposition preposition #:player player))))
+ (<- player 'tell
+ #:text `("You don't see any such " ,direct-obj " to take "
+ ,preposition " " ,(slot-ref gameobj 'name) ".")))))
\f
(take-me? #:init-value
(lambda _
(values #f #:why-not
- `("Hm... no... the cabinet is locked and the properitor "
+ `("Hm, well... the cabinet is locked and the properitor "
"is right over there.")))))
(define lobby
#: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 'break-desk-clerk)
+ #:summons 'break-room:desk-clerk)
('lobby:sign-in-form
<sign-in-form> 'lobby
#: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"))))
+ #:goes-by '("hard disc platter" "disc platter" "disc"
+ "hard disk platter" "disk platter"
+ "shield" "platter"))))
\f
;;; Playroom
('playroom
<room> #f
#:name "The Playroom"
- #:desc " There are toys scattered everywhere here. It's really unclear
-if this room is intended for children or child-like adults."
+ #:desc '(p (" There are toys scattered everywhere here. It's really unclear
+if this room is intended for children or child-like adults.")
+ (" There are doors to both the east and the west."))
#:exits
(list (make <exit>
#:name "east"
- #:to 'grand-hallway)))
+ #:to 'grand-hallway)
+ (make <exit>
+ #:name "west"
+ #:to 'computer-room)))
('playroom:cubey
<gameobj> 'playroom
#:name "Cubey"
#:desc " A warm and fuzzy cuddles plushie! It's a cuddlefish!")
('playroom:toy-chest
- <gameobj> 'playroom
+ <container> 'playroom
#:name "a toy chest"
#:goes-by '("toy chest" "chest")
#:desc (lambda (toy-chest whos-looking)
;;; Computer room
;;; -------------
+;; Our computer and hard drive are based off the PDP-11 and the RL01 /
+;; RL02 disk drives. However we increment both by .5 (a true heresy)
+;; to distinguish both from the real thing.
+
+(define-actor <hard-drive> (<gameobj>)
+ ()
+ ;; the state moves from: empty -> with-disc -> loading -> ready
+ (state #:init-value 'empty
+ #:accessor .state))
+
+(define* (hard-drive-desc hard-drive #:optional whos-looking)
+ `((p "The hard drive is labeled \"RL02.5\". It's a little under a meter tall.")
+ (p "There is a slot where a disk platter could be inserted, "
+ ,(if (eq? (.state hard-drive) 'empty)
+ "which is currently empty"
+ "which contains a glowing platter")
+ ". There is a LOAD button "
+ ,(if (member (.state hard-drive) '(empty with-disc))
+ "which is glowing"
+ "which is pressed in and unlit")
+ ". There is a READY indicator "
+ ,(if (eq? (.state hard-drive) 'ready)
+ "which is glowing. The machine emits a gentle whirring noise."
+ "which is unlit."))))
+
+(define computer-room
+ (lol
+ ('computer-room
+ <room> #f
+ #:name "Computer Room"
+ #:desc '((p "A sizable computer cabinet covers a good portion of the left
+wall. It emits a pleasant hum which covers the room like a warm blanket.
+Connected to a computer is a large hard drive.")
+ (p "On the floor is a large steel panel. It is closed, but it has
+hinges which suggest it could be opened."))
+ #:exits
+ (list (make <exit>
+ #:name "east"
+ #:to 'playroom)))
+ ('computer-room:hard-drive
+ <hard-drive> 'computer-room
+ #:name "a hard drive"
+ #:desc (wrap-apply hard-drive-desc)
+ #:goes-by '("hard drive" "drive" "hard disk"))))
+
+
\f
;;; Game
;;; ----
(define (game-spec)
(append lobby grand-hallway smoking-parlor
- playroom break-room))
+ playroom break-room computer-room))
;; TODO: Provide command line args
(define (run-game . args)