summaryrefslogtreecommitdiff
path: root/lisparuga/enemy.scm
diff options
context:
space:
mode:
Diffstat (limited to 'lisparuga/enemy.scm')
-rw-r--r--lisparuga/enemy.scm79
1 files changed, 69 insertions, 10 deletions
diff --git a/lisparuga/enemy.scm b/lisparuga/enemy.scm
index 06533ea..9213890 100644
--- a/lisparuga/enemy.scm
+++ b/lisparuga/enemy.scm
@@ -41,7 +41,9 @@
dead?
fire-parting-shots-maybe
- make-utatsugumi))
+ make-utatsugumi
+ make-toratsugumi
+ make-renjyaku))
;;;
@@ -107,15 +109,22 @@
(set! (fire-parting-shots? enemy) #t)))
#t)
-(define %enemy-tiles
- ;; 0: Utatsugumi - white
- `((0.0 0.0 24.0 24.0)
- ;; 1: Utatsugumi - black
- (24.0 0.0 24.0 24.0)))
-
-(define (load-enemy-atlas file-name)
- (let ((texture (load-image file-name)))
- (list->texture-atlas texture %enemy-tiles)))
+(define-method (load-enemy-atlas file-name)
+ (let ((texture (load-image file-name))
+ (enemy-tiles
+ ;; 0: Utatsugumi - white
+ `((0.0 0.0 24.0 24.0)
+ ;; 1: Utatsugumi - black
+ (24.0 0.0 24.0 24.0)
+ ;; 2: Toratsugumi - white
+ (0.0 24.0 24.0 24.0)
+ ;; 3: Toratsugumi - black
+ (24.0 24.0 24.0 24.0)
+ ;; 4: Renjyaku - white
+ (48.0 0.0 48.0 48.0)
+ ;; 5: Renjyaku - black
+ (96.0 0.0 48.0 48.0))))
+ (list->texture-atlas texture enemy-tiles)))
(define-asset enemy-atlas
(load-enemy-atlas (scope-asset "images/enemies.png")))
@@ -144,3 +153,53 @@
#:hitboxes
(list (make-hitbox 'utatsugumi (make-rect -10.0 -10.0 20.0 20.0)))
#:position (vec2 x y)))
+
+
+;;;
+;;; Toratsugumi
+;;;
+
+(define-class <toratsugumi> (<enemy>))
+
+(define-method (on-boot (toratsugumi <toratsugumi>))
+ (attach-to toratsugumi
+ (make <atlas-sprite>
+ #:atlas enemy-atlas
+ #:index (if (eq? 'white (polarity toratsugumi)) 2 3)
+ #:origin (vec2 12.0 12.0))))
+
+(define (make-toratsugumi polarity x y)
+ (make <toratsugumi>
+ #:name (gensym "toratsugumi-")
+ #:health 1
+ #:points 20
+ #:parting-shots 5
+ #:polarity polarity
+ #:hitboxes
+ (list (make-hitbox 'toratsugumi (make-rect -5.5 -5.5 11.0 11.0)))
+ #:position (vec2 x y)))
+
+
+;;;
+;;; Renjyaku
+;;;
+
+(define-class <renjyaku> (<enemy>))
+
+(define-method (on-boot (renjyaku <renjyaku>))
+ (attach-to renjyaku
+ (make <atlas-sprite>
+ #:atlas enemy-atlas
+ #:index (if (eq? 'white (polarity renjyaku)) 4 5)
+ #:origin (vec2 24.0 24.0))))
+
+(define (make-renjyaku polarity x y)
+ (make <renjyaku>
+ #:name (gensym "renjyaku-")
+ #:health 20
+ #:points 100
+ #:parting-shots 7
+ #:polarity polarity
+ #:hitboxes
+ (list (make-hitbox 'renjyaku (make-rect -16.0 -12.0 32.0 25.0)))
+ #:position (vec2 x y)))