8sync design goals
[mudsync.git] / worlds / bricabrac.scm
index 8d3e03a9f8018d67843f7dcb7bd9036cd6b38981..f6494e26a4e3b22159ffe2daa5086976f8f32137 100644 (file)
@@ -56,9 +56,9 @@
            #:init-thunk (build-actions
                          (cmd-read readable-cmd-read))))
 
-(define (readable-cmd-read actor message)
+(define (readable-cmd-read actor message . _)
   (<- (message-from message) 'tell
-      #:text (string-append (slot-ref actor 'read-text) "\n")))
+      #:text (slot-ref actor 'read-text)))
 
 
 ;; This one allows you to take from items that are proxied by it
@@ -286,7 +286,8 @@ wanted to."
     <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.")
+    #:desc '("It looks like you could sign this form and set your name like so: "
+             (i "sign form as <my-name-here>")))
 
    ;; Object: curio cabinets
    ;; TODO: respond to attempts to open the curio cabinet
@@ -464,6 +465,22 @@ labeled \"RL02.5\".")
       #:exclude player)
   (gameobj-self-destruct gameobj))
 
+\f
+;;; Grand hallway
+
+(define lobby-map-text
+  "\
+                        |  :       :  |
+  .----------.----------.  :   &   :  .----------.----------.
+  | computer |          |& :YOU ARE: &|  smoking | *UNDER*  |
+  | room     + playroom +  : HERE  :  +  parlor  | *CONS-   |
+  |    >     |          |& :       : &|          | TRUCTION*|
+  '----------'----------'-++-------++-'-------+--'----------'
+                       |    '-----'    |     |   |
+                       :     LOBBY     :     '---'
+                        '.           .'
+                          '---------'")
+
 (define grand-hallway
   (lol
    ('grand-hallway
@@ -487,6 +504,15 @@ room\", while a door to the west is labeled \"playroom\"."))
           (make <exit>
             #:name "east"
             #:to 'smoking-parlor)))
+   ('grand-hallway:map
+    <readable> 'grand-hallway
+    #:name "the hotel map"
+    #:desc '("This appears to be a map of the hotel. "
+             "Like the hotel itself, it seems to be "
+             "incomplete."
+             "You could read it if you want to.")
+    #:read-text `(pre ,lobby-map-text)
+    #:goes-by '("map" "hotel map"))
    ('grand-hallway:carpet
     <gameobj> 'grand-hallway
     #:name "the Grand Hallway carpet"
@@ -748,12 +774,19 @@ It has some bits of bubble gum stuck to it... yuck."
   ;; start our main loop
   (<- (actor-id clerk) 'update-loop))
 
-(define clerk-help-topics
-  '(("changing name" .
-     "Changing your name is easy!  We have a clipboard here at the desk
+(define changing-name-text "Changing your name is easy!
+We have a clipboard here at the desk
 where you can make yourself known to other participants in the hotel
 if you sign it.  Try 'sign form as <your-name>', replacing
 <your-name>, obviously!")
+
+(define phd-text
+  "Ah... when I'm not here, I've got a PHD to finish.")
+
+(define clerk-help-topics
+  `(("changing name" . ,changing-name-text)
+    ("sign-in form" . ,changing-name-text)
+    ("form" . ,changing-name-text)
     ("common commands" .
      "Here are some useful commands you might like to try: chat,
 go, take, drop, say...")
@@ -763,7 +796,10 @@ our hotel emphasizes interesting experiences over rest and lodging.
 The origins of the hotel are... unclear... and it has recently come
 under new... 'management'.  But at Hotel Bricabrac we believe these
 aspects make the hotel into a fun and unique experience!  Please,
-feel free to walk around and explore.")))
+feel free to walk around and explore.")
+    ("physics paper" . ,phd-text)
+    ("paper" . ,phd-text)
+    ("proprietor" . "Oh, he's that frumpy looking fellow sitting over there.")))
 
 
 (define clerk-knows-about
@@ -1172,11 +1208,19 @@ the paint, but the wires themselves seem to be unusually sturdy."
    ('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."))
+    #:desc (lambda (gameobj whos-looking)
+             (define panel-open
+               (mbody-val (<-wait (dyn-ref gameobj 'computer-room:floor-panel)
+                                  'open?)))
+             `((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.  "
+                  ,(if panel-open
+                       '("It is wide open, exposing a spiral staircase "
+                         "which descends into darkness.")
+                       '("It is closed, but it has hinges which "
+                         "suggest it could be opened.")))))
     #:exits
     (list (make <exit>
             #:name "east"
@@ -1213,18 +1257,93 @@ hinges which suggest it could be opened."))
     #:invisible? #t
     #:goes-by '("floor panel" "panel"))))
 
+\f
+;;; * UNDERGROUND SECTION OF THE GAME! *
+
+\f
+;;; The lab
+
+(define underground-map-text
+  "\
+                            _______           |
+                         .-' @     '-.         \\   ?????
+                       .'             '.       .\\             
+                       |  [8sync Hive] |======'  '-_____
+                       ',      M      ,'
+                        '.         @ .'                                  
+                          \\  @     /                    
+                           '-__+__-'                
+                            '.  @ .'
+     .--------------.         \\ /
+     | [Guile Async |  .-------+------.
+     |    Museum]   |  |     [Lab] #!#|  .-------------.
+     |             @|  |  MM          |  |[Federation  |
+     | &      ^     +##+@ ||     <    +##|     Station]|
+     |              |  |           @  |  |             |
+     |         &  # |  |*You-Are-Here*|  '-------------'
+     | #   ^        | #+-------+------'
+     '-------+------' #        #
+             #        #        #
+             #        #   .-----------.
+           .-+----.   #   |#       F  |
+           |@?+%? +####   | ^   f##   |
+           '------'       |  f    f  %|
+                          |F [Mudsync |
+                          | $  Swamp] |
+                          '-----------'")
+
+(define 8sync-design-goals
+  '(ul (li (b "Actor based, shared nothing environment: ")
+           "Shared resources are hard to control and result in fighting
+deadlocks, etc.  Escape the drudgery: only one actor controls a resource,
+and they only receive one message at a time (though they can \"juggle\"
+messages).")
+       (li (b "Live hackable: ")
+           "It's hard to plan out a concurrent system; the right structure
+is often found by evolving the system while it runs.  Make it easy to
+build, shape, and change a running system, as well as observe and correct
+errors.")
+       (li (b "No callback hell: ")
+           "Just because you're calling out to some other asynchronous 
+code doesn't mean you should need to chop up your program into a bunch of bits.
+Clever use of delimited continuations makes it easy.")))
 
 (define underground-lab
   (lol
    ('underground-lab
     <room> #f
     #:name "Underground laboratory"
-    #:desc '("This appears to be some sort of underground laboratory. "
-             )
+    #:desc '((p "This appears to be some sort of underground laboratory."
+                "There is a spiral staircase here leading upwards, where "
+                "it seems much brighter.")
+             (p "There are a number of doors leading in different directions:
+north, south, east, and west, as well as a revolving door to the southwest.
+It looks like it could be easy to get lost, but luckily there
+is a map detailing the layout of the underground structure."))
     #:exits
     (list (make <exit>
             #:name "up"
-            #:to 'computer-room)))))
+            #:to 'computer-room
+            #:traverse-check
+            (lambda (exit room whos-exiting)
+              (values #t "You climb the spiral staircase.")))))
+
+   ;; map
+   ('underground-lab:map
+    <readable> 'underground-lab
+    #:name "the underground map"
+    #:desc '("This appears to be a map of the surrounding area. "
+             "You could read it if you want to.")
+    #:read-text `(pre ,underground-map-text)
+    #:goes-by '("map" "underground map" "lab map"))
+
+   ('underground-lab:8sync-sign
+    <readable> 'underground-lab
+    #:name "a sign labeled \"8sync design goals\""
+    #:goes-by '("sign" "8sync design goals sign" "8sync sign")
+    #:read-text 8sync-design-goals
+    #:desc `((p "The sign says:")
+             ,8sync-design-goals))))
 
 
 \f