;;; The Inevitable Game ;;; Copyright © 2018, 2021 Ricardo Wurmus ;;; ;;; 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 ;;; . (define-module (characters reaper) #:use-module (chickadee graphics texture) #:use-module (chickadee graphics 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)) (define-class ()) (define-asset reaper-atlas (load-atlas "assets/images/reaper.png" 32 32)) (define (reaper the-position) (make #: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 #: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 #: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))))))