From c30d1dabc129bf170123c39191dce8d984a0cd39 Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Sat, 21 Jul 2018 22:50:45 +0200 Subject: Move characters to separate modules. --- characters/lorenzo.scm | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 characters/lorenzo.scm (limited to 'characters/lorenzo.scm') diff --git a/characters/lorenzo.scm b/characters/lorenzo.scm new file mode 100644 index 0000000..5fa2268 --- /dev/null +++ b/characters/lorenzo.scm @@ -0,0 +1,86 @@ +;;; The Inevitable Game +;;; Copyright © 2018 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 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 ( + previous-key-presses + selecting-message? + wants-to-stop-talking? + resume-messages + lifetime + happiness + weight + music + talking? + + lorenzo)) + +(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 the-position) + (make + #:name 'player + #:position the-position + #:children + (cons + (make + #:name 'sprite + #:atlas player-atlas + #:animations '((idle-right . #(8 8 8 8 8 7 7 7 7 7)) + (idle-left . #(0 0 0 0 0 15 15 15 15 15)) + (idle-front . #(24 24 24 24 24 32 32 32 32 32)) + (idle-back . #(16)) + (left . #(1 35 2 35)) + (right . #(9 34 10 34)) + (up . #(17 16 18 16)) + (down . #(25 24 26 24))) + #:current-animation 'idle-front + #:frame-duration 10) + ;; 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)))))) -- cgit v1.2.3