;;; The Inevitable Game ;;; Copyright © 2018, 2019, 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 lorenzo) #: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 ( previous-key-presses selecting-message? wants-to-stop-talking? resume-messages lifetime happiness weight music talking? lorenzo player-atlas)) (define-class () (previous-key-presses #:accessor previous-key-presses #:init-form (list)) (selecting-message? #:accessor selecting-message? #:init-form #f) (wants-to-stop-talking? #:accessor wants-to-stop-talking? #:init-form #f) (resume-messages #:accessor resume-messages #:init-form '()) (lifetime #:accessor lifetime #:init-form 100) (happiness #:accessor happiness #:init-form 50) (weight #:accessor weight #:init-form 50) (music #:accessor music #:init-form 50) (talking? #:accessor talking? #:init-form #f)) (define-asset player-atlas (load-atlas "assets/images/lorenzo.png" 32 32)) (define* (lorenzo #:key (position (vec2 0 0)) (dead? #f)) (make #:name 'player #:position position #:children (cons (make #:name 'sprite #:atlas player-atlas #:tint (if dead? (make-color 1.0 1.0 1.0 0.5) (make-color 1.0 1.0 1.0 1.0)) #:animations '((idle-right . #(24 24 24 24 24 39 39 39 39 39)) (idle-left . #(32 32 32 32 32 31 31 31 31 31)) (idle-front . #(8 8 8 8 8 0 0 0 0 0)) (idle-back . #(16)) (left . #(33 3 34 3)) (right . #(25 2 26 2)) (up . #(17 16 18 16)) (down . #(9 8 10 8))) #:current-animation 'idle-front #:frame-duration 10) (if dead? '() ;; Simple player 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 x (- 2 n)) #:color color)) ;; position in the stack (iota 5) ;; x offsets (list 12 10 8 10 12) ;; widths (list 8 12 16 12 8)))))))