X-Git-Url: https://jxself.org/git/?p=mudsync.git;a=blobdiff_plain;f=worlds%2Fbricabrac.scm;h=3f71ce71aef194b94786bc7012c023403654fd39;hp=5676c1004245d9798002d53687bbeedd10cfa8bf;hb=0171d36c85d9fe770d136661c3e1fe9c478895a1;hpb=cc0dc06ed2164992bf9e37917db628fcf82e6d14 diff --git a/worlds/bricabrac.scm b/worlds/bricabrac.scm index 5676c10..3f71ce7 100644 --- a/worlds/bricabrac.scm +++ b/worlds/bricabrac.scm @@ -19,8 +19,8 @@ ;;; Hotel Bricabrac (use-modules (mudsync) - (8sync actors) - (8sync agenda) + (mudsync container) + (8sync) (oop goops) (ice-9 control) (ice-9 format) @@ -61,8 +61,7 @@ #:text (string-append (slot-ref actor 'read-text) "\n"))) -;; This one allows you to take from - +;; This one allows you to take from items that are proxied by it (define-actor () ((cmd-take-from take-from-proxy)) (proxy-items #:init-keyword #:proxy-items)) @@ -79,12 +78,12 @@ (mbody-val (<-wait obj-id 'goes-by))) (when (ci-member direct-obj goes-by) (<- obj-id 'cmd-take #:direct-obj direct-obj #:player player) - (escape))) + (escape #f))) (slot-ref gameobj 'proxy-items)) - (cmd-take-from gameobj message - #:direct-obj direct-obj #:indir-obj indir-obj - #:preposition preposition #:player player)))) + (<- player 'tell + #:text `("You don't see any such " ,direct-obj " to take " + ,preposition " " ,(slot-ref gameobj 'name) "."))))) @@ -132,6 +131,7 @@ or 'skribe'? Now *that's* composition!")) #:allocation #:each-subclass #:init-thunk (build-commands ("sign" ((prep-direct-command cmd-sign-form '("as")))))) + (actions #:allocation #:each-subclass #:init-thunk (build-actions (cmd-sign-form sign-cmd-sign-in)))) @@ -280,7 +280,7 @@ Classy!" #:desc " A shiny brass bell. Inscribed on its wooden base is the text \"ring me for service\". You probably could \"ring the bell\" if you wanted to." - #:summons 'break-desk-clerk) + #:summons 'break-room:desk-clerk) ('lobby:sign-in-form 'lobby @@ -289,6 +289,7 @@ wanted to." #:desc "It looks like you could sign this form and set your name.") ;; Object: curio cabinets + ;; TODO: respond to attempts to open the curio cabinet ('lobby:cabinet 'lobby #:proxy-items '(lobby:porcelain-doll @@ -412,6 +413,46 @@ this general shape in the 1990s." ;;; Grand hallway ;;; ------------- +(define-actor () + ((cmd-take disc-shield-take))) + +(define* (disc-shield-take gameobj message + #:key direct-obj + (player (message-from message))) + (create-gameobj (gameobj-gm gameobj) + player) ;; set loc to player to put in player's inventory + (<- player 'tell + #:text '((p "As you attempt to pull the shield / disk platter +from the statue, there is a bright glow... and a completely separate, +glowing copy of the disc materializes into your hands!") + (p "You hear a voice whispering in your ear: " + (i "\"Share the software... and you'll be free...\""))))) + +;;; This is the disc that gets put in the player's inventory +(define-actor () + ((cmd-drop glowing-disc-drop-cmd)) + (initial-props + #:allocation #:each-subclass + #:init-thunk (build-props + '((hd-platter? . #t)))) + (name #:allocation #:each-subclass + #:init-value "a glowing disc") + (desc #:allocation #:each-subclass + #:init-value "A brightly glowing disc. It's shaped like a hard +drive platter, not unlike the one from the statue it came from. It's +labeled \"RL02.5\".") + (goes-by #:init-value '("glowing disc" "glowing platter" + "glowing disc platter" "glowing disk platter" + "platter" "disc" "disk" "glowing shield"))) + +(define* (glowing-disc-drop-cmd gameobj message + #:key direct-obj + (player (message-from message))) + (<- player 'tell + #:text "You drop the glowing disc, and it shatters into a million +pieces!") + (gameobj-self-destruct gameobj)) + (define grand-hallway (lol ('grand-hallway @@ -490,12 +531,12 @@ Hackthena must be an emacs user." `("Are you seriously considering desecrating a statue?"))) #:goes-by '("hackthena's horns" "horns" "horns of hacktena")) ('grand-hallway:disc-platter - 'grand-hallway - #:name "a hard disc platter" - #:desc "This isn't a shield after all, it seems to be a hard disc -platter! It looks kind of loose..." + 'grand-hallway + #:name "Hackthena's shield" + #:desc "This isn't a shield after all, it seems to be a hard disk +platter! It has \"RL02.5\" written on it. It looks kind of loose..." #:invisible? #t - #:goes-by '("hard disc platter" "disc platter" "disc" "shield" "platter")))) + #:goes-by '("hackthena's shield" "shield" "platter")))) ;;; Playroom @@ -506,12 +547,16 @@ platter! It looks kind of loose..." ('playroom #f #:name "The Playroom" - #:desc " There are toys scattered everywhere here. It's really unclear -if this room is intended for children or child-like adults." + #:desc '(p (" There are toys scattered everywhere here. It's really unclear +if this room is intended for children or child-like adults.") + (" There are doors to both the east and the west.")) #:exits (list (make #:name "east" - #:to 'grand-hallway))) + #:to 'grand-hallway) + (make + #:name "west" + #:to 'computer-room))) ('playroom:cubey 'playroom #:name "Cubey" @@ -525,7 +570,7 @@ if this room is intended for children or child-like adults." #:desc " A warm and fuzzy cuddles plushie! It's a cuddlefish!") ('playroom:toy-chest - 'playroom + 'playroom #:name "a toy chest" #:goes-by '("toy chest" "chest") #:desc (lambda (toy-chest whos-looking) @@ -925,13 +970,59 @@ the paint, but the wires themselves seem to be unusually sturdy." ;;; Computer room ;;; ------------- +;; Our computer and hard drive are based off the PDP-11 and the RL01 / +;; RL02 disk drives. However we increment both by .5 (a true heresy) +;; to distinguish both from the real thing. + +(define-actor () + () + ;; the state moves from: empty -> with-disc -> loading -> ready + (state #:init-value 'empty + #:accessor .state)) + +(define* (hard-drive-desc hard-drive #:optional whos-looking) + `((p "The hard drive is labeled \"RL02.5\". It's a little under a meter tall.") + (p "There is a slot where a disk platter could be inserted, " + ,(if (eq? (.state hard-drive) 'empty) + "which is currently empty" + "which contains a glowing platter") + ". There is a LOAD button " + ,(if (member (.state hard-drive) '(empty with-disc)) + "which is glowing" + "which is pressed in and unlit") + ". There is a READY indicator " + ,(if (eq? (.state hard-drive) 'ready) + "which is glowing. The machine emits a gentle whirring noise." + "which is unlit.")))) + +(define computer-room + (lol + ('computer-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.")) + #:exits + (list (make + #:name "east" + #:to 'playroom))) + ('computer-room:hard-drive + 'computer-room + #:name "a hard drive" + #:desc (wrap-apply hard-drive-desc) + #:goes-by '("hard drive" "drive" "hard disk")))) + + ;;; Game ;;; ---- (define (game-spec) (append lobby grand-hallway smoking-parlor - playroom break-room)) + playroom break-room computer-room)) ;; TODO: Provide command line args (define (run-game . args)