;; 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 "Huh? (type \"help\" for common commands)\n"))))
(define* (player-tell player message #:key text)
(<- (gameobj-gm player) 'write-home
(define inv-names
(map
(lambda (inv-item)
- (msg-val (<-wait inv-item 'get-name)))
+ (mbody-val (<-wait inv-item 'get-name)))
(gameobj-occupants player)))
(define text-to-show
(if (eq? inv-names '())
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
;;; ================
;; Ask the room for its commands
(define room-commands
;; TODO: Map room id and sort
- (msg-receive (_ #:key commands)
+ (mbody-receive (_ #:key commands)
(<-wait player-loc 'get-container-commands
#:verb verb)
commands))
(define co-occupants
(remove
(lambda (x) (equal? x (actor-id player)))
- (msg-receive (_ #:key occupants)
+ (mbody-receive (_ #:key occupants)
(<-wait player-loc 'get-occupants)
occupants)))
(define co-occupant-commands
(fold
(lambda (co-occupant prev)
- (msg-receive (_ #:key commands goes-by)
+ (mbody-receive (_ #:key commands goes-by)
(<-wait co-occupant 'get-commands
#:verb verb)
(append
(define inv-item-commands
(fold
(lambda (inv-item prev)
- (msg-receive (_ #:key commands goes-by)
+ (mbody-receive (_ #:key commands goes-by)
(<-wait inv-item 'get-contained-commands
#:verb verb)
(append