Their eyes are cloudy and woozy, but they look happy..."))
#:exclude player))
+(define-class <swing> (<gameobj>)
+ (commands
+ #:allocation #:each-subclass
+ #:init-thunk (build-commands
+ (("sit" "swing") ((direct-command cmd-swing)))))
+ (actions #:allocation #:each-subclass
+ #:init-thunk
+ (build-actions
+ (cmd-swing cmd-swing-on-swing))))
+
+(define* (cmd-swing-on-swing actor message #:key direct-obj)
+ (define player (message-from message))
+ (define player-loc (mbody-val (<-wait player 'get-loc)))
+ (define player-name (mbody-val (<-wait player 'get-name)))
+ (<- (message-from message) 'tell
+ #:text '((p "You swing on the swing and feel younger again
+as you rock to the motion, as if your movements resemble your
+traversal through the flow of time itself. You feel happy.")))
+ (<- player-loc 'tell-room
+ #:text `((p ,player-name " looks very happy as they swing
+on the swing."))
+ #:exclude player))
+
+(define-actor <cake> (<semi-edible-chatty-npc>)
+ ((cmd-take cake-cmd-take)))
+
+(define-actor <slice-of-cake> (<gameobj>)
+ ((cmd-nibble slice-of-cake-cmd-nibble)
+ (cmd-eat slice-of-cake-cmd-eat))
+ (contained-commands
+ #:allocation #:each-subclass
+ #:init-thunk (build-commands
+ ("nibble" ((direct-command cmd-nibble)))
+ ("eat" ((direct-command cmd-eat)))))
+
+ (bites-left #:init-value 4
+ #:accessor .bites-left)
+ (name #:init-value "a slice of cake")
+ (take-me? #:init-value #t)
+ (goes-by #:init-value '("slice of cake" "slice" "slice of wedding cake"
+ "piece of cake" "piece of wedding cake"))
+ (desc #:init-value "It's a slice of wedding cake! You could nibble on it
+or just plain eat it!"))
+
+(define (slice-of-cake-cmd-eat slice-of-cake message . _)
+ (define player (message-from message))
+ (define player-loc (mbody-val (<-wait player 'get-loc)))
+ (define player-name (mbody-val (<-wait player 'get-name)))
+ (<- player 'tell
+ #:text "You wolf down your piece of wedding cake all at once like some
+kind of hungry animal! You're making a huge mess!")
+ (<- player-loc 'tell-room
+ #:text `(,player-name
+ " wolfs down a piece of wedding cake all at once!
+They're making a huge mess!")
+ #:exclude player)
+ (gameobj-self-destruct slice-of-cake))
+
+(define (slice-of-cake-cmd-nibble slice-of-cake message . _)
+ (define player (message-from message))
+ (define player-loc (mbody-val (<-wait player 'get-loc)))
+ (define player-name (mbody-val (<-wait player 'get-name)))
+ (set! (.bites-left slice-of-cake) (- (.bites-left slice-of-cake) 1))
+ (<- player 'tell
+ #:text "You take a nibble of your piece of wedding cake.
+How dignified!")
+ (<- player-loc 'tell-room
+ #:text `(,player-name
+ " takes a nibble of their piece of wedding cake.
+How dignified!")
+ #:exclude player)
+ (when (= (.bites-left slice-of-cake) 0)
+ (<- player 'tell
+ #:text "You've finished your slice of wedding cake!")
+ (<- player-loc 'tell-room
+ #:text `(,player-name
+ " finishes their slice of wedding cake!")
+ #:exclude player)
+ (gameobj-self-destruct slice-of-cake)))
+
+(define* (cake-cmd-take gameobj message
+ #:key direct-obj
+ (player (message-from message)))
+ (create-gameobj <slice-of-cake> (gameobj-gm gameobj)
+ player) ;; set loc to player to put in player's inventory
+ (<- player 'tell
+ #:text '((p "You slice off a piece of the tiered wedding cake.
+The cake fills itself back in as if by magic! Oh no, it's not alive, is it?")
+ (p "You take the slice of wedding cake with you.")))
+ (<- (gameobj-loc gameobj) 'tell-room
+ #:text `(,(mbody-val (<-wait player 'get-name))
+ " slices off a piece of the cake and the cake fills itself
+back in! How strange!")
+ #:exclude player))
+
+(define-class <flowers> (<gameobj>)
+ (commands
+ #:allocation #:each-subclass
+ #:init-thunk (build-commands
+ (("smell" "sniff") ((direct-command cmd-smell)))))
+ (actions #:allocation #:each-subclass
+ #:init-thunk
+ (build-actions
+ (cmd-smell flowers-cmd-smell))))
+
+(define* (flowers-cmd-smell actor message #:key direct-obj)
+ (define player (message-from message))
+ (define player-loc (mbody-val (<-wait player 'get-loc)))
+ (define player-name (mbody-val (<-wait player 'get-name)))
+ (<- (message-from message) 'tell
+ #:text '((p "You smell the flower and... whoa. Wait. What kind
+of flower is this?")
+ (p "You teeter as the room spins and then politely
+re-orients itself.")))
+ (<- player-loc 'tell-room
+ #:text `((p ,player-name " smells the flower and teeters around
+a bit."))
+ #:exclude player))
+
(define wedding
(lol
;; Courtyard
#:sit-phrase "pull up a chair at"
#:sit-phrase-third-person "pulls up a chair at"
#:sit-name "a blue table")
+ ('dance-floor:chandelier
+ <gameobj> 'dance-floor
+ #:name "a chandelier"
+ #:desc
+ "The chandelier is beautiful with many lovely gems hanging from it.
+Light bounces through it and seems to dance through the room just as much
+as the fairies below it."
+ #:goes-by
+ '("chandelier"))
('banquet
<room> #f
#:name "A Lovely Banquet"
(make <exit>
#:name "south"
#:to 'cake-wing)))
+ ('orchestra:orchestra
+ <chatty-npc> 'orchestra
+ #:name "the orchestra"
+ #:desc
+ '((p "The orchestra members are playing their songs. The music
+and their instruments seem as much a part of them as their bodies."))
+ #:goes-by
+ '("orchestra" "fairies"))
+ ('orchestra:instruments
+ <chatty-npc> 'orchestra
+ #:name "instruments"
+ #:desc
+ '((p "Each instrument seems beautifully made, the best of its kind.
+But you sense that only the most skilled players could play them."))
+ #:take-me?
+ (lambda _
+ (values #f
+ #:why-not
+ `((p "No way. Are you kidding me? They're playing those
+instruments right now! Rude."))))
+ #:goes-by
+ '("instrument" "instruments"
+ "hapsichord" "hapsichords"
+ "harp" "harps"
+ "flute" "flutes"
+ "fiddle" "fiddles"
+ "cello" "cellos"))
('cake-wing
<room> #f
#:name "The Cake Wing"
#:to 'flower-field)))
;; TODO: You should be able to take a slice of cake
('cake-wing:cake
- <gameobj> 'cake-wing
+ <cake> 'cake-wing
#:name "the wedding cake"
+ #:chat-format (lambda _ '((p "Okay the wedding cake seems kinda
+alive, but it doesn't seem "
+ (i "that")
+ " alive.")))
#:desc "The lowest tier is a dark green with a fondant vine
scrolling around it. The second tier is light blue with delphiniums
painted onto it and mauve fondant roses lining the transition between
the tiers. The third tier is sky blue, with clouds painted onto the
frosting. The cake is topped with figurines of four fairies dancing
in a circle."
- #:goes-by '("wedding cake" "cake"))
+ #:eat-catchphrase "You think about just eating the cake right here
+and now, but it seems rude."
+ #:goes-by '("wedding cake" "cake" "tiered cake" "tiered wedding cake"))
+ ('cake-wing:stump
+ <gameobj> 'cake-wing
+ #:name "a tree stump"
+ #:invisible? #t
+ #:desc "The cake's sitting on the tree stump. Otherwise else there's
+not too much to say about this thing."
+ #:goes-by '("stump" "tree stump"))
('flower-field
<room> #f
#:name "Field of Flowers"
(make <exit>
#:name "northwest"
#:to 'dance-floor)))
+ ('flower-field:fairies
+ <chatty-npc> 'flower-field
+ #:name "group of fairies"
+ #:chat-format (lambda _
+ '((p "You try chatting with these fairies but they seem
+kinda unresponsive. Wait, just what kinds of flowers are these?")))
+ #:desc "There really are just like, a ton of fairies around here aren't
+there? Anyway these ones are really into these flowers, like, *really* into
+them."
+ #:goes-by '("fairies" "some fairies" "group of fairies"))
+ ('flower-field:flowers
+ <flowers> 'flower-field
+ #:name "flowers"
+ #:desc "The flowers are beautiful... they're also fragrant..."
+ #:take-me?
+ (lambda _
+ (values #f
+ #:why-not
+ `((p "That's not a good idea. Just look at how much work went
+into this place. No way... the wedding planner would probably kill you.")
+ (p "I mean, not literally. Okay, maybe literally."))))
+ #:goes-by '("flowers" "flower"))
('playground
<room> #f
#:name "Playground"
(make <exit>
#:name "northeast"
#:to 'dance-floor)))
+ ('playground:swing
+ <swing> 'playground
+ #:name "a swing"
+ #:desc "There's an open swing here you could swing on. It sways
+back and forth gently. You feel as if to sit on it would help you
+feel younger again, to experience time itself..."
+ #:goes-by '("swing"))
('photo-booth-wing
<room> #f
#:name "The Photo Booth Wing"