basic things, with the ability to pick them up (but not put them down, heh)
[mudsync.git] / worlds / bricabrac.scm
index f95ebd9ab51f4dc61817e7a57fdee2607e61e99e..7679735f813317fc4bae729165a36415cc9b583d 100644 (file)
@@ -160,9 +160,9 @@ or 'skribe'?  Now *that's* composition!"))
             #:text (format #f "~a signs the form!\n~a is now known as ~a\n"
                            old-name old-name name)))
       (<- actor (message-from message) 'tell
             #:text (format #f "~a signs the form!\n~a is now known as ~a\n"
                            old-name old-name name)))
       (<- actor (message-from message) 'tell
-          "Sorry, that's not a valid name.
+          #:text "Sorry, that's not a valid name.
 Alphanumerics, _ and - only, 2-15 characters, starts with an alphabetic
 Alphanumerics, _ and - only, 2-15 characters, starts with an alphabetic
-character.")))
+character.\n")))
 
 
 (define lobby
 
 
 (define lobby
@@ -185,7 +185,7 @@ kind of objects they found lying around.
             #:name "north"
             #:to 'room:grand-hallway)))
    ;; NPC: hotel owner
             #:name "north"
             #:to 'room:grand-hallway)))
    ;; NPC: hotel owner
-   ('npc:hotel-owner
+   ('npc:lobby:hotel-owner
     <chatty-npc> 'room:lobby
     #:name "a frumpy fellow"
     #:desc "  Whoever this is, they looks totally exhausted.  They're
     <chatty-npc> 'room:lobby
     #:name "a frumpy fellow"
     #:desc "  Whoever this is, they looks totally exhausted.  They're
@@ -205,7 +205,7 @@ though the conversation may be a bit one sided."
    ;;   complaining, then leaves.
    
    ;; Object: Sign
    ;;   complaining, then leaves.
    
    ;; Object: Sign
-   ('thing:lobby-sign
+   ('thing:lobby:sign
     <readable> 'room:lobby
     #:name "the Hotel Bricabrac sign"
     #:desc "  It strikes you that there's something funny going on with this sign.
     <readable> 'room:lobby
     #:name "the Hotel Bricabrac sign"
     #:desc "  It strikes you that there's something funny going on with this sign.
@@ -220,7 +220,7 @@ Classy!"
                 "lobby sign"))
 
    ;; Object: curio cabinets
                 "lobby sign"))
 
    ;; Object: curio cabinets
-   ('thing:cabinet
+   ('thing:lobby:cabinet
     <gameobj> 'room:lobby
     #:name "a curio cabinet"
     #:goes-by '("curio cabinet" "cabinet" "bricabrac cabinet")
     <gameobj> 'room:lobby
     #:name "a curio cabinet"
     #:goes-by '("curio cabinet" "cabinet" "bricabrac cabinet")
@@ -228,7 +228,7 @@ Classy!"
              (format #f "  The curio cabinet is full of all sorts of oddities!
 Something catches your eye!
 Ooh, ~a!" (random-choice random-bricabrac))))
              (format #f "  The curio cabinet is full of all sorts of oddities!
 Something catches your eye!
 Ooh, ~a!" (random-choice random-bricabrac))))
-   ('thing:sign-in-form
+   ('thing:lobby:sign-in-form
     <sign-in-form> 'room:lobby
     #:name "sign-in form"
     #:goes-by '("sign-in form" "form" "signin form")
     <sign-in-form> 'room:lobby
     #:name "sign-in form"
     #:goes-by '("sign-in form" "form" "signin form")
@@ -255,18 +255,50 @@ Ooh, ~a!" (random-choice random-bricabrac))))
     #:desc "  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.
     #:desc "  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.
-  To the south is the lobby.  All around are various doors, but
-they're all boarded up.  Guess this is still a work in progress, huh?"
+  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\"."
     #:exits
     (list (make <exit>
             #:name "south"
     #:exits
     (list (make <exit>
             #:name "south"
-            #:to 'room:lobby))
-    )))
+            #:to 'room:lobby)
+          (make <exit>
+            #:name "west"
+            #:to 'room:playroom)
+          (make <exit>
+            #:name "east"
+            #:to 'room:smoking-parlor)))
+   ('thing:ignucius-statue
+    <gameobj> 'room:grand-hallway
+    #:name "a statue"
+    #:desc "  The statue is of a serious-looking bearded man with long, flowing hair.
+The inscription says \"St. Ignucius\".
+  It has a large physical halo.  It doesn't look like it would be hard to remove."
+    #:goes-by '("statue" "st ignucius" "st. ignucius"))))
 
 \f
 ;;; Playroom
 ;;; --------
 
 
 \f
 ;;; Playroom
 ;;; --------
 
+(define playroom
+  (lol
+   ('room: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."
+    #:exits
+    (list (make <exit>
+            #:name "east"
+            #:to 'room:grand-hallway)))
+   ('thing:playroom:cubey
+    <thing> 'room:playroom
+    #:name "cubey"
+    #:takeable #t
+    #:desc "  It's a little foam cube with googly eyes on it.  So cute!")))
+
+
 \f
 ;;; Writing room
 ;;; ------------
 \f
 ;;; Writing room
 ;;; ------------
@@ -281,6 +313,85 @@ they're all boarded up.  Guess this is still a work in progress, huh?"
 ;;; Smoking parlor
 ;;; --------------
 
 ;;; Smoking parlor
 ;;; --------------
 
+(define-class <furniture> (<gameobj>)
+  (sit-phrase #:init-keyword #:sit-phrase)
+  (sit-phrase-third-person #:init-keyword #:sit-phrase-third-person)
+  (sit-name #:init-keyword #:sit-name)
+
+  (commands
+   #:init-value
+   (list
+    (direct-command "sit" 'cmd-sit-furniture)))
+  (message-handler
+   #:init-value
+   (simple-dispatcher
+    (append
+     (build-actions
+      (cmd-sit-furniture (wrap-apply furniture-cmd-sit)))
+     gameobj-actions))))
+
+(define-mhandler (furniture-cmd-sit actor message direct-obj)
+  (define player-name
+    (message-ref
+     (<-wait actor (message-from message) 'get-name)
+     'val))
+  (<- actor (message-from message) 'tell
+      #:text (format #f "You ~a ~a.\n"
+                     (slot-ref actor 'sit-phrase)
+                     (slot-ref actor 'sit-name)))
+  (<- actor (slot-ref actor 'loc) 'tell-room
+      #:text (format #f "~a ~a on ~a.\n"
+                     player-name
+                     (slot-ref actor 'sit-phrase-third-person)
+                     (slot-ref actor 'sit-name))
+      #:exclude (message-from message)))
+
+
+(define smoking-parlor
+  (lol
+   ('room:smoking-parlor
+    <room> #f
+    #:name "Smoking Parlor"
+    #:desc "  This room looks quite posh.  There are huge comfy seats you can sit in
+if you like.
+  Strangely, you see a large sign saying \"No Smoking\".  The owners must
+have installed this place and then changed their mind later.
+  Nonetheless there are some candy cigarettes and cigars you can pick up
+at the bar.  (editor's note: or will be soon :])"
+    #:exits
+    (list (make <exit>
+            #:name "west"
+            #:to 'room:grand-hallway)))
+   ('thing:smoking-room:chair
+    <furniture> 'room: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-room:sofa
+    <furniture> 'room:smoking-parlor
+    #:name "a plush leather sofa"
+    #:desc "  That leather chair looks really comfy!"
+    #:goes-by '("leather sofa" "plush leather sofa" "sofa"
+                "leather couch" "plush leather couch" "couch")
+    #:sit-phrase "sprawl out on"
+    #:sit-phrase-third-person "sprawls out on into"
+    #:sit-name "the plush leather couch")
+   ('thing:smoking-room:bar-stool
+    <furniture> 'room:smoking-parlor
+    #:name "a bar stool"
+    #:desc "  Conveniently located near the bar!  Not the most comfortable
+seat in the room, though."
+    #:goes-by '("stool" "bar stool")
+    #:sit-phrase "hop on"
+    #:sit-phrase-third-person "hops onto"
+    #:sit-name "the bar stool")
+
+   ;; TODO: Cigar dispenser
+
+   ))
 
 \f
 ;;; Ennpie's Sea Lounge
 
 \f
 ;;; Ennpie's Sea Lounge
@@ -295,7 +406,8 @@ they're all boarded up.  Guess this is still a work in progress, huh?"
 ;;; ----
 
 (define game-spec
 ;;; ----
 
 (define game-spec
-  (append lobby grand-hallway))
+  (append lobby grand-hallway smoking-parlor
+          playroom))
 
 ;; TODO: Provide command line args
 (define (run-game . args)
 
 ;; TODO: Provide command line args
 (define (run-game . args)