Rudimentary help system.
authorChristopher Allan Webber <cwebber@dustycloud.org>
Mon, 23 Jan 2017 20:39:12 +0000 (14:39 -0600)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Mon, 23 Jan 2017 20:39:12 +0000 (14:39 -0600)
mudsync/player.scm

index a0caf239940198eb80808925ae652b00d295caa2..45cb9743c635c82a100e115078ebaa8cfb4aa26e 100644 (file)
    ;; aliases...
    ;; @@: Should use an "alias" system for common aliases?
    (empty-command "inv" 'cmd-inventory)
-   (empty-command "i" 'cmd-inventory)))
+   (empty-command "i" 'cmd-inventory)
+   (empty-command "help" 'cmd-help)))
 
 (define-class <player> (<gameobj>)
   (username #:init-keyword #:username
             #:getter player-username)
 
-  (self-commands #:init-value player-self-commands)
+  (self-commands #:init-value (wrap player-self-commands))
 
   (actions #:allocation #:each-subclass
            #:init-value
@@ -56,7 +57,8 @@
             (handle-input player-handle-input)
             (tell player-tell)
             (disconnect-self-destruct player-disconnect-self-destruct)
-            (cmd-inventory player-cmd-inventory))))
+            (cmd-inventory player-cmd-inventory)
+            (cmd-help player-cmd-help))))
 
 
 ;;; player message handlers
@@ -82,7 +84,8 @@
      (apply <- winner-id cmd-action message-args))
     (#f
      (<- (gameobj-gm player) 'write-home
-         #:text "Huh?\n"))))
+         ;; #:text "? (type \"help\" for common commands)\n"
+         #:text "?\n"))))
 
 (define* (player-tell player message #:key text)
   (<- (gameobj-gm player) 'write-home
                     inv-names))))
   (<- (actor-id player) 'tell #:text text-to-show))
 
+(define (player-cmd-help player message)
+  (<- (actor-id player) 'tell
+      #:text '((strong "** Mudsync Help **")(br)
+               (p "You're playing Mudsync, a multiplayer text-adventure. "
+                  "Type different commands to interact with your surroundings "
+                  "and other players.")
+               (p "Some common commands:"
+                  (ul (li (strong "say <message>") " -- "
+                          "Chat with other players in the same room. "
+                          "(Also aliased to the " (b "\"") " character.)")
+                      (li (strong "look") " -- "
+                          "Look around the room you're in.")
+                      (li (strong "look [at] <object>") " -- "
+                          "Examine a particular object.")
+                      (li (strong "go <exit>") " -- "
+                          "Move to another room in <exit> direction.")))
+               (p "Different objects can be interacted with in different ways. "
+                  "For example, if there's a bell in the same room as you, "
+                  "you might try typing " (em "ring bell")
+                  " and see what happens."))))
+
 
 ;;; Command handling
 ;;; ================