;; 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
(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
(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
;;; ================