summaryrefslogtreecommitdiff
path: root/game.scm
diff options
context:
space:
mode:
Diffstat (limited to 'game.scm')
-rw-r--r--game.scm244
1 files changed, 179 insertions, 65 deletions
diff --git a/game.scm b/game.scm
index 35fab7f..e17bdd4 100644
--- a/game.scm
+++ b/game.scm
@@ -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))