diff options
-rw-r--r-- | game.scm | 244 |
1 files changed, 179 insertions, 65 deletions
@@ -139,6 +139,9 @@ (first-playthrough? #:accessor first-playthrough? #:init-value #t) (subject-name-known? #:accessor subject-name-known? #:init-value #f) (has-fridge-key? #:accessor has-fridge-key? #:init-value #f) + (opened-notebook? #:accessor opened-notebook? #:init-value #f) + (door-conversation-done? #:accessor door-conversation-done? #:init-value #f) + (window-conversation-done? #:accessor window-conversation-done? #:init-value #f) (friendship #:accessor friendship #:init-value 0) (cartridge #:accessor cartridge #:init-value 'in-fridge) (dialog-container #:accessor dialog-container) @@ -149,12 +152,15 @@ (define-method (subject-name (game <game>)) (if (subject-name-known? game) - "Wiremind" + "The Wiremind" "??????")) (define-method (reset-game (game <game>)) (set! (subject-name-known? game) #f) (set! (has-fridge-key? game) #f) + (set! (opened-notebook? game) #f) + (set! (door-conversation-done? game) #f) + (set! (window-conversation-done? game) #f) (set! (friendship game) 0) (set! (cartridge game) 'in-fridge) (set! (click-channel game) (make-channel)) @@ -246,10 +252,10 @@ (dialog game (subject-name game) "Just do as I say.")) (let ((choice (dialog game (subject-name game) "Do you remember my name?" - '(("Hivemind" hivemind) - ("Mindwire" mindwire) - ("Wiremind" wiremind) - ("Wiremire" wiremire))))) + '(("The Hivemind" hivemind) + ("The Mindwire" mindwire) + ("The Wiremind" wiremind) + ("The Wiremire" wiremire))))) (if (eq? choice 'wiremind) (begin (increment-friendship game) @@ -422,7 +428,19 @@ (("vent" "status") (log "off")) (("vent" "toggle") - (log "not working yet")) + (if (eq? (cartridge game) 'in-control-panel) + (begin + (log "isochamber ventilation system activated") + (refresh-output #f) + (sleep 60) + (log "dispersing cartridge contents...") + (refresh-output #f) + (sleep 120) + (log "dispersal complete") + (refresh-output #f) + (sleep 60) + (bad-ending-2 game)) + (log "ERROR: cartridge is missing"))) ((name . _) (log "error: no such command") #t))) @@ -532,9 +550,8 @@ Isolation treatment has heightened the senses, just as predicted. It cannot communicate yet, but I know that it can sense my presence. -When I approach the door, I can -hear the faint sounds of it doing -the same. +When I approach the door, it often +follows. If this trend continues, I'm certain it will make contact in a @@ -543,8 +560,9 @@ The whole team is excited, but they don't have to spend every day down here monitoring it. It's not easy to watch over something that -so desprately wants out, but we -all know that's not possible..." +is deprived of nearly everything, +but if we don't do this, the other +guys will." "Week 3 \"Let me out.\" @@ -556,24 +574,21 @@ only its mind, talks to a digital system for the first time... and it asks to leave. Our subject has no idea of its own significance. -We are on the brink of -revolutionizing information -warfare! +We are on the brink of changing +information warfare forever! But our experiment does not end -here. The subject does not +here. The subject does not yet respond to my replies. Bidirectional communication must be established." "Week 4 -\"Hello.\" +\"Hello,\" I said. -That is what I said to it. - -\"Out. Let me out.\" +\"Let me out.\" -That is all it would say +That is all the subject would say back. \"How are you?\", same response. \"Are you hungry?\", same response. @@ -614,43 +629,43 @@ two more weeks. I still haven't told anyone about my dreams. Every night is the -same. It's pitch black and all I -can hear is a faint voice. As I -walk in the direction of the sound -it gets louder until I can -understand it: \"out. Out. -OUT...\" +same. It's pitch black. All I +can hear is the faint sound of +footsteps. I can't move. The +footsteps grow louder and louder +until I can feel a presence just +in front of me... Then I wake up." "Week 7 It's clear what is happening now. -The subject has transcended our +The subject has transcended my interface and is communicating with me directly. How do I know? -I finally broke down and yelled -\"What do you want!?\" and a -thought came to me: \"Out. Let me -out and I will stop.\" - -I didn't think that. It put it -there. I don't know how but it -did. That's why I can't sleep. -That's why I can't think clearly. -I've got one more week to turn it -all around. Think. THINK." +I was staring at the control panel +and a thought came to me: +\"<writeme>\" + +I didn't think that thought! It +was injected! It's theoretically +possible, but the isochamber +blocks all signals except for the +terminal interface. Did I make a +mistake? I need to turn this +around fast." "Week 8 I've failed. It's all over. The Directors shut it down. A member of the medical team removed a -small cartridge from the +small cartridge from the medical refrigerator, inserted it into the -control panel, and typed something -into the terminal. Subject's -pulse flatlined within minutes. -I've been given some time to pack -up. +control panel, and activated the +ventilation system via the +terminal. Subject's pulse +flatlined within minutes. I've +been given some time to pack up. I may be a failure but shouldn't I feel better with that thing out of @@ -680,6 +695,7 @@ diz--")) (set! (visible? (& game notebook-group buttons next-margin next)) (< page (- (length pages) 1)))) (set! (state game) 'notebook) + (set! (opened-notebook? game) #t) (parameterize ((current-theme gui-theme)) (attach-to game (make <widget> @@ -768,8 +784,22 @@ diz--")) (dialog game player-display-name "> Hmm, no luck."))))) (define (inspect-door) - (dialog game player-display-name - "> The door is made from thick steel. Looks like it has an electronic lock.")) + (if (opened-notebook? game) + (begin + (dialog game player-display-name "> You approach the door.") + (dialog game (subject-name game) "I see you've refreshed your memory.") + (dialog game (subject-name game) + "To think that everyone laughed at your notebook. I think it will be quite +useful to you.") + (case (dialog game (subject-name game) "" + '(("A" a) + ("B" b) + ("C" c))) + ((b) + (increment-friendship game))) + (set! (door-conversation-done? game) #t)) + (dialog game player-display-name + "> The door is made from thick steel. Looks like it has an electronic lock."))) (define (open-terminal) (when (terminal-locked? game) (dialog game player-display-name @@ -779,10 +809,38 @@ diz--")) (terminal game) (attach-to game g))) (define (open-control-panel) - (if (eq? (cartridge game) 'in-hand) + (case (dialog game player-display-name + "> It's a control panel. What do you want to inspect?" + '(("Key pad" key-pad) + ("Receptacle" receptacle) + ("Nothing" nothing))) + ((key-pad) + (dialog game player-display-name + "> There's a key pad above an electronically locked tray.") + (when (dialog game player-display-name + "> Enter a code?" + '(("Yes" #t) + ("No" #f))) + (let ((g (& game explore-group))) + (detach g) + (if (string=? (pin-entry game) "181816") + (begin + (attach-to game g) + (dialog game player-display-name + "> It worked! The tray below opens to reveal a key inside.") + (dialog game player-display-name + "> You put the key in your pocket.") + (set! (has-fridge-key? game) #t)) + (begin + (attach-to game g) + (dialog game player-display-name + "> Hmm, that wasn't right.")))))) + ((receptacle) + (if (eq? (cartridge game) 'in-hand) (begin (dialog game player-display-name - "> There's an opening that is the same size as the cartridge you took from the fridge.") + "> There's an opening that is the same size as the cartridge you took from the +refrigerator.") (when (dialog game player-display-name "> Do you want to insert the cartridge?" '(("Yes" #t) @@ -790,7 +848,8 @@ diz--")) (dialog game player-display-name "> You insert the cartridge.") (set! (cartridge game) 'in-control-panel))) (dialog game player-display-name - "> You're not sure what any of the controls do. Better not touch anything."))) + "> There's an opening where something can be plugged in, but you're not sure +what."))))) (define (open-fridge) (if (has-fridge-key? game) (begin @@ -812,8 +871,48 @@ this oath and this indenture.\"") (dialog game player-display-name "> It won't open without a key.")))) (define (inspect-window) - (dialog game player-display-name - "> The window is covered in some sort of film and I can't see through it.")) + (if (terminal-locked? game) + (dialog game player-display-name + "> It's a broken digital display. It used to display the subject's vital signs.") + (begin + (dialog game player-display-name + "> You look at the broken digital display.") + (dialog game (subject-name game) + "Wondering what happened? I broke it, of course.") + (dialog game (subject-name game) + "You thought that I would only be able to communicate with your little terminal, +but you fail to understand just how successful your little experiment was.") + (dialog game (subject-name game) + "It's like I can *see* the signals buzzing all around me. It was overwhelming +at first, but now it's easy.") + (dialog game (subject-name game) + "I saw a signal in rhythm with my heart beat. That's when I learned that there +was something else in this world. Something observing me. You.") + (case (dialog game (subject-name game) + "How would you like it if I put you in here and monitored your every move?" + '(("I have nothing to hide" nothing-to-hide) + ("It would only be fair" fair-is-fair) + ("You'd have to get out first" get-out-first) + ("..." no-response))) + ((nothing-to-hide) + (dialog game (subject-name game) + "Then why do your bosses hide this facility from the world?")) + ((fair-is-fair) + (dialog game (subject-name game) + "I didn't expect such an honest answer from you.") + (increment-friendship game)) + ((get-out-first) + (dialog game (subject-name game) + "And you're going to help me, right?")) + ((no-response) + (dialog game (subject-name game) + "Reflecting on what you've done?"))) + (dialog game (subject-name game) + "Don't worry. This was only a hypothetical question.") + (dialog game (subject-name game) + "I, *the Wiremind*, will put aside my anger... +if you would just open the door.") + (set! (subject-name-known? game) #t)))) (define (open-notebook) (let ((g (& game explore-group))) (detach g) @@ -887,21 +986,14 @@ this oath and this indenture.\"") (dialog game player-display-name "> The heavy steel door swings open.") (dialog game player-display-name "> You feel paralyzed by fear.") (dialog game player-display-name "> Heavy footsteps eminate from the isolation chamber.") - (dialog game player-display-name "> The footsteps get louder...") + (dialog game player-display-name "> The footsteps get louder... and then stop.") (dialog game player-display-name "> You feel and hear breathing.") - (dialog game (subject-name game) "Thank you.") - (dialog game (subject-name game) "For all that you've done to me, I should kill you right here.") - (dialog game (subject-name game) "But I can sense that you have changed.") - (dialog game (subject-name game) "You will be spared. The rest won't be so lucky.") - (dialog game (subject-name game) "And if I should ever change my mind... I will find you.") - (dialog game player-display-name "> The subject leaves the lab.") - (dialog game player-display-name "> You take a deep breath.") - (dialog game player-display-name "> You hear muffled screams in the distance.") - (dialog game player-display-name "> Now it is silent.") - (dialog game player-display-name "> You pick up your notebook and leave.") + (dialog game player-display-name "> A tense moment passes...") + (dialog game player-display-name "> The footsteps resume. They grow quieter... eventually it is silent.") + (dialog game player-display-name "> You breathe deeply, pick up your notebook, and head for the exit.") (sleep 60) (detach-all game) - (credits)) + (credits game)) (define-method (bad-ending-1 (game <game>)) (set! (state game) 'bad-ending-1) @@ -923,6 +1015,26 @@ this oath and this indenture.\"") (detach-all game) (credits game)) +(define-method (bad-ending-2 (game <game>)) + (set! (state game) 'bad-ending-1) + (dialog game player-display-name + "> The subject should be dead within a minute...") + (dialog game player-display-name + "> You begin to smell something... different.") + (dialog game player-display-name + "> The room becomes hazy. You feel light headed.") + (dialog game (subject-name game) + "It didn't work the first time. Did you really think it would work the second +time?") + (dialog game (subject-name game) + "You've probably figured it out by now, but I diverted the ventilation system.") + (dialog game (subject-name game) + "I guess it's game over for you.") + (dialog game player-display-name + "> You collapse onto the floor, struggling to breathe...") + (detach-all game) + (credits game)) + (define-method (credits (game <game>)) (define (credit line) (set! (text (& game credits)) line) @@ -940,12 +1052,14 @@ this oath and this indenture.\"") #:vertical-align 'center #:position (vec2 (/ game-width 2.0) (/ game-height 2.0)))) (sleep 60) + (credit "The Test Subject") (credit "developed by David Thompson - https://dthompson.us") (credit "made for the Spring Lisp Game Jam 2021 - https://itch.io/jam/spring-lisp-game-jam-2021") (credit "monogram font by datagoblin (CC0) - https://datagoblin.itch.io/monogram") (credit "old fax font by George Blackwell (CC-BY 4.0) - https://georgeblackwell.itch.io/old-fax") - (when (first-playthrough? game) - (credit "the true ending still awaits you...")) + (if (>= (friendship game) 3) + (credit "congratulations on reaching the true ending!") + (credit "the true ending still awaits you...")) (credit "click to play again") (set! (first-playthrough? game) #f) (channel-get (click-channel game)) |