summaryrefslogtreecommitdiff
path: root/characters/reaper.scm
blob: 1a93ab17d51eff75a58f14e75593d37fe63688d8 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
;;; The Inevitable Game
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;;
;;; This program is free software: you can redistribute it and/or
;;; modify it under the terms of the GNU General Public License as
;;; published by the Free Software Foundation, either version 3 of the
;;; License, or (at your option) any later version.
;;;
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;;; General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with this program.  If not, see
;;; <http://www.gnu.org/licenses/>.

(define-module (characters reaper)
  #:use-module (chickadee render texture)
  #:use-module (chickadee render color)
  #:use-module (chickadee math rect)
  #:use-module (chickadee math vector)
  #:use-module (engine assets)
  #:use-module (engine node-2d)
  #:use-module (characters)
  #:use-module (oop goops)
  #:export (<reaper> reaper))

(define-class <reaper> (<character>))

(define-asset reaper-atlas
  (load-atlas "assets/images/reaper.png" 32 32))

(define (reaper the-position)
  (make <reaper>
    #:name 'reaper
    #:position the-position
    #:conversations
    '((hello
       "Salutations!"
       ((who-are-you? "Who are you?")
        (bye "I have to leave now. Bye!"
             #:resume
             (hello "Hi again!"))))
      (who-are-you?
       "People have given me too many names to recount.
Paul Celan called me a master from Germany, but he must have confused
me with somebody else. Some call me a part of life, but I think that's
missing the point. Others call me the grim reaper, but do I look grim
to you?"
       ((grim-no "No, not at all.")
        (grim-yes "Well, actually you kinda do...")
        (grim-bye "I can't answer, I need to go."
                  #:resume
                  (what-do-you-do? "Could you tell me what you are doing here?"))))
      (grim-bye
       "Well, I guess that's a 'yes'..."
       ())
      (grim-no
       "Ah, that's a relief!"
       ((what-do-you-do?
         "I hope you don't mind me asking: what is it you're
doing here?")
        (bye
         "Well, it was nice meeting you. See you around!"
         #:resume
         (what-do-you-do? "Could you tell me what you are doing here?"))))
      (grim-yes
       "Hmm, that's very unfortunate. I just can't figure out
why people have that impression. It's rather depressing."
       ((its-the-robe "Maybe it's the robe?")
        (dont-worry "Aww, don't feel bad about it!")
        (bye "I'm sure you'll be okay. Gotta go!"
             #:resume
             (what-do-you-do?
              "So... what do you do around here?"))))
      (its-the-robe
       "I don't see how this comfortable robe could have that
effect. The fabric is a little coarse, I admit, but it's really
durable and doesn't chafe on my bones. Excellent quality."
       ((what-do-you-do?
         "So... what do you do around here?")
        (bye "That's really interesting, but I'm afraid I need
to hurry. Bye!"
             #:resume
             (what-do-you-do?
              "So... what do you do around here?"))))
      (dont-worry
       "Yeah, I guess I shouldn't. It just tears me
down. Luckily, the garden keeps me distracted."
       ((what-do-you-grow? "Oh, you have a garden? What do you
grow there?")
        (bye "That's good. Well, I should go now. Bye!"
             #:resume
             (what-do-you-grow?
              "You mentioned a garden. What do you grow there?"))))
      (what-do-you-do?
       "Well, you may have noticed the garden behind the house.
For the past few eons I have been tending to it."
       ((eons? "Did you say 'eons'?")
        (what-do-you-grow? "Oh, that's nice! What do you grow there?")
        (bye "I see. Unfortunately, I must get going now."
             #:resume
             (bye "Sorry, I didn't mean to disturb you."))))
      (eons?
       "Oh yes, I have been here long before you appeared and
I will be here long after you will have rejoined the void. You could
say that I am the void, occasionally receding just enough for a little
bit of inconsequential folly before eventually and invariably
restoring equilibrium."
       ;; TODO
       ())
      (what-do-you-grow?
       "You know, this and that. I enjoy soul food, and it's
best when the ingredients are fresh."
       ())
      (bye
       "Farewell! Don't be afraid, for I'm always here for
you. I'm sure we will meet again sooner than you expect."
       ()))
    #:children
    (cons (make <animated-sprite>
            #:name 'sprite
            #:atlas reaper-atlas
            #:animations
            '((idle  . #(12 12 12 13 13 13 5 13 13 13 4 4 4 4 4 4 9 8 8 8 12 12 12 15 15))
              (pause . #(8 8 8 8 8 8 8 9))
              (talk  . #(12 15 14 11 9 8 10 9 15 14 14 14 8 8 12 12 12))
              (up    . #(7 3 7 0  2 6 2 1)))
            #:current-animation 'idle
            #:frame-duration 20)
          ;; Simple shadow.  This should better be done with a
          ;; single ellipse shader.
          (let ((color (make-color 0 0 0 0.2)))
            (map (lambda (n x w)
                   (make <filled-rect>
                     #:region (make-rect 0.0 0.0 w 1.0)
                     #:position (vec2 (+ 3 x) (- 2 n))
                     #:color color))
                 ;; position in the stack
                 (iota 5)
                 ;; x offsets
                 (list 12 10 8 10 12)
                 ;; widths
                 (list 12 16 20 16 12))))))