summaryrefslogtreecommitdiff
path: root/characters/lorenzo.scm
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2018-07-21 22:50:45 +0200
committerRicardo Wurmus <rekado@elephly.net>2018-07-27 17:15:46 +0200
commitc30d1dabc129bf170123c39191dce8d984a0cd39 (patch)
treea94fd787bfce38cebc12dfc0b10eb43a860b7728 /characters/lorenzo.scm
parent88e05c30a8537695d162db11302b99ed4d54df94 (diff)
Move characters to separate modules.
Diffstat (limited to 'characters/lorenzo.scm')
-rw-r--r--characters/lorenzo.scm86
1 files changed, 86 insertions, 0 deletions
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 <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 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 (<player>
+ previous-key-presses
+ selecting-message?
+ wants-to-stop-talking?
+ resume-messages
+ lifetime
+ happiness
+ weight
+ music
+ talking?
+
+ lorenzo))
+
+(define-class <player> (<character>)
+ (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 <player>
+ #:name 'player
+ #:position the-position
+ #:children
+ (cons
+ (make <animated-sprite>
+ #: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 <filled-rect>
+ #: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))))))