summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2023-10-29 12:46:19 -0400
committerDavid Thompson <dthompson2@worcester.edu>2023-10-29 12:46:19 -0400
commitbb981c561a41f6a8d8ca9e65b381eeab721a89e8 (patch)
treeb9be244bf89973492b0f14c0a57ad7d11aec3374
parent4cbdfc0ba1be4e4d867b59a913dece31a86beee3 (diff)
More varied flyer behavior; map tweaks.
-rw-r--r--game.scm192
-rw-r--r--images/flyer0.asebin1340 -> 1334 bytes
-rw-r--r--images/flyer0.pngbin496 -> 442 bytes
-rw-r--r--level.tmx125
-rw-r--r--todo.org16
5 files changed, 225 insertions, 108 deletions
diff --git a/game.scm b/game.scm
index 6820fc8..6d5b884 100644
--- a/game.scm
+++ b/game.scm
@@ -588,37 +588,38 @@
(define (bullet-pool-update! pool collide)
(match pool
(#('bullet-pool length capacity image bullets)
- (let loop ((i 0) (k length))
- (when (< i k)
- (let* ((offset (bullet-pool-offset i))
- (type (s32-ref bullets offset))
- (x (f64-ref bullets (+ offset 12)))
- (y (f64-ref bullets (+ offset 20)))
- (w (f64-ref bullets (+ offset 28)))
- (h (f64-ref bullets (+ offset 36)))
- (dx (f64-ref bullets (+ offset 44)))
- (dy (f64-ref bullets (+ offset 52)))
- (x* (+ x dx))
- (y* (+ y dy)))
- (cond
- ((out-of-bounds? x* y* w h)
- (bullet-pool-remove! pool i)
- (loop i (- k 1)))
- ((collide type x* y* w h)
- (let ((d 1.0)
- (l 3))
- (sound-effect-play sound:bullet-hit 0.02)
- (particle-pool-add! particles 'hit-wall l x* y* d d)
- (particle-pool-add! particles 'hit-wall l x* y* (- d) d)
- (particle-pool-add! particles 'hit-wall l x* y* (- d) (- d))
- (particle-pool-add! particles 'hit-wall l x* y* d (- d))
- #t)
- (bullet-pool-remove! pool i)
- (loop i (- k 1)))
- (else
- (f64-set! bullets (+ offset 12) x*)
- (f64-set! bullets (+ offset 20) y*)
- (loop (+ i 1) k)))))))))
+ (let ((dscroll (- *scroll* *last-scroll*)))
+ (let loop ((i 0) (k length))
+ (when (< i k)
+ (let* ((offset (bullet-pool-offset i))
+ (type (s32-ref bullets offset))
+ (x (f64-ref bullets (+ offset 12)))
+ (y (f64-ref bullets (+ offset 20)))
+ (w (f64-ref bullets (+ offset 28)))
+ (h (f64-ref bullets (+ offset 36)))
+ (dx (f64-ref bullets (+ offset 44)))
+ (dy (f64-ref bullets (+ offset 52)))
+ (x* (+ x dx))
+ (y* (+ y dy dscroll)))
+ (cond
+ ((out-of-bounds? x* y* w h)
+ (bullet-pool-remove! pool i)
+ (loop i (- k 1)))
+ ((collide type x* y* w h)
+ (let ((d 1.0)
+ (l 3))
+ (sound-effect-play sound:bullet-hit 0.02)
+ (particle-pool-add! particles 'hit-wall l x* y* d d)
+ (particle-pool-add! particles 'hit-wall l x* y* (- d) d)
+ (particle-pool-add! particles 'hit-wall l x* y* (- d) (- d))
+ (particle-pool-add! particles 'hit-wall l x* y* d (- d))
+ #t)
+ (bullet-pool-remove! pool i)
+ (loop i (- k 1)))
+ (else
+ (f64-set! bullets (+ offset 12) x*)
+ (f64-set! bullets (+ offset 20) y*)
+ (loop (+ i 1) k))))))))))
(define (draw-bullets pool)
(match pool
(#('bullet-pool length capacity image bullets)
@@ -728,11 +729,16 @@
(match type
('turret (spawn-turret x y))
('popcorn (spawn-popcorn x y))
+ ('popcorn-down (spawn-popcorn-down x y))
('popcorn-swarm (spawn-popcorn-swarm x y))
('popcorn-sweep-left (spawn-popcorn-sweep-left x y))
('popcorn-sweep-right (spawn-popcorn-sweep-right x y))
('flyer0 (spawn-flyer0 x y))
('flyer1 (spawn-flyer1 x y))
+ ('flyer1-tunnel (spawn-tunnel-flyer1 x y))
+ ('flyer1-down (spawn-flyer1-down x y))
+ ('flyer1-down-left (spawn-flyer1-down-left x y))
+ ('flyer1-down-right (spawn-flyer1-down-right x y))
('boss (spawn-boss x y))
('scroll-speed
(let ((speed (assq-ref properties 'speed))
@@ -791,6 +797,10 @@
(vec2-x (enemy-position enemy)))
(define (enemy-y enemy)
(vec2-y (enemy-position enemy)))
+ (define (set-enemy-x! enemy x)
+ (set-vec2-x! (enemy-position enemy) x))
+ (define (set-enemy-y! enemy y)
+ (set-vec2-y! (enemy-position enemy) y))
(define (enemy-width enemy)
(vec2-x (enemy-size enemy)))
(define (enemy-height enemy)
@@ -943,7 +953,7 @@
(define (spawn-popcorn* x y script)
(spawn-enemy
- (make-enemy 'popcorn 1 (vec2 x y) (vec2 12.0 12.0)
+ (make-enemy 'popcorn 2 (vec2 x y) (vec2 12.0 12.0)
(vec2 0.0 0.0) script 100
#(0.0 16.0 32.0 48.0) image:popcorn (vec2 16.0 16.0))))
@@ -988,7 +998,22 @@
(spawn-turret* x y script))
(define (spawn-popcorn x y)
- (spawn-popcorn* x y #f))
+ (define (script popcorn)
+ (forever
+ (tween (lambda (dy)
+ (set-enemy-dy! popcorn dy))
+ 30 -0.2 0.2
+ smoothstep lerp)
+ (tween (lambda (dy)
+ (set-enemy-dy! popcorn dy))
+ 30 0.2 -0.2
+ smoothstep lerp)))
+ (spawn-popcorn* x y script))
+
+ (define (spawn-popcorn-down x y)
+ (define (script popcorn)
+ (set-enemy-dy! popcorn 1.1))
+ (spawn-popcorn* x y script))
(define (spawn-popcorn-swarm x y)
(define (script popcorn)
@@ -1035,10 +1060,10 @@
(define (script flyer)
(run-script
(lambda ()
+ (wait 60)
(let ((speed 1.0))
- (forever
- (do-circle
- (lambda (theta)
+ (let loop ((i 0.0))
+ (let ((theta (+ (* (sin i) (/ pi 3.0)) (/ pi 3.0))))
(bullet-pool-add! enemy-bullets 0
(enemy-x flyer)
(enemy-y flyer)
@@ -1046,17 +1071,84 @@
(* (cos theta) speed)
(* (sin theta) speed))
(wait 5))
- 16)))))
- (forever
- (set-enemy-dx! flyer 0.5)
- (wait 60)
- (set-enemy-dx! flyer -0.5)
- (wait 60)))
+ (loop (+ i 0.5))))))
+ (let ((speed 0.5))
+ (forever
+ (tween (lambda (dx)
+ (set-enemy-dx! flyer dx))
+ 60 -0.5 0.5
+ smoothstep lerp)
+ (tween (lambda (dx)
+ (set-enemy-dx! flyer dx))
+ 60 0.5 -0.5
+ smoothstep lerp))))
(spawn-flyer0* x y script))
(define (spawn-flyer1 x y)
(spawn-flyer1* x y #f))
+ (define (spawn-tunnel-flyer1 x y)
+ (define (script flyer)
+ (set-enemy-dy! flyer 1.0)
+ (wait 80)
+ (set-enemy-dx! flyer -1.0)
+ (set-enemy-dy! flyer 0.0)
+ (wait 140)
+ (set-enemy-dx! flyer 0.0)
+ (set-enemy-dy! flyer 1.0))
+ (spawn-flyer1* x y script))
+
+ (define (spawn-flyer1-down x y)
+ (define (script flyer)
+ (define (shoot* theta)
+ (let ((speed 3.5))
+ (bullet-pool-add! enemy-bullets 0
+ (enemy-x flyer)
+ (enemy-y flyer)
+ 2.0 2.0
+ (* (cos theta) speed)
+ (* (sin theta) speed))))
+ (define (shoot)
+ (shoot* pi/2)
+ (shoot* (+ pi/2 0.1))
+ (shoot* (- pi/2 0.1)))
+ (set-enemy-dy! flyer 1.0)
+ (wait 30)
+ (forever
+ (shoot)
+ (wait 5)
+ (shoot)
+ (wait 5)
+ (shoot)
+ (wait 45)))
+ (spawn-flyer1* x y script))
+
+ (define (spawn-flyer1-down-left x y)
+ (define (script flyer)
+ (set-enemy-dy! flyer 1.0)
+ (wait 60)
+ (set-enemy-dx! flyer -1.0)
+ (set-enemy-dy! flyer 0.0)
+ (wait 60)
+ (tween (lambda (dx)
+ (set-enemy-dx! flyer dx))
+ 30 -1.0 0.0
+ smoothstep lerp))
+ (spawn-flyer1* x y script))
+
+ (define (spawn-flyer1-down-right x y)
+ (define (script flyer)
+ (set-enemy-dy! flyer 1.0)
+ (wait 60)
+ (set-enemy-dx! flyer 1.0)
+ (set-enemy-dy! flyer 0.0)
+ (wait 60)
+ (tween (lambda (dx)
+ (set-enemy-dx! flyer dx))
+ 30 1.0 0.0
+ smoothstep lerp))
+ (spawn-flyer1* x y script))
+
(define (spawn-chaser x y)
(define (script flyer)
(set-enemy-dy! flyer -3.0)
@@ -1506,11 +1598,11 @@
(set! *game-state* 'play)
(scheduler-reset! *scheduler*)
(set! *scroll* 0.0)
- ;; (set! *scroll* (* 335.0 tile-height))
+ ;; (set! *scroll* (* 60.0 tile-height))
(set! *last-scroll* 0.0)
(set! *last-row-scanned* (level-height level))
;; (set! *last-row-scanned* (- (level-height level)
- ;; 335))
+ ;; 60))
(bullet-pool-reset! player-bullets)
(bullet-pool-reset! enemy-bullets)
(enemy-pool-reset! enemies)
@@ -1542,7 +1634,8 @@
((string-=? code "KeyZ")
(set-firing! #t)
(prevent-default! event))
- ((string-=? code "ShiftLeft")
+ ((string-=? code "KeyX";; "ShiftLeft"
+ )
(set-focusing! #t)
(prevent-default! event)))))
@@ -1564,7 +1657,8 @@
((string-=? code "KeyZ")
(set-firing! #f)
(prevent-default! event))
- ((string-=? code "ShiftLeft")
+ ((string-=? code "KeyX";; "ShiftLeft"
+ )
(set-focusing! #f)
(prevent-default! event))
(else
@@ -1661,11 +1755,7 @@
(do-game-over)))
('game-over
(set! *scroll* *last-scroll*)
- (scheduler-tick! *countdown-scheduler*)
- (bullet-pool-update! player-bullets player-bullet-collide)
- (bullet-pool-update! enemy-bullets enemy-bullet-collide)
- (particle-pool-update! particles)
- (enemy-pool-update! enemies))
+ (scheduler-tick! *countdown-scheduler*))
('game-clear
(scheduler-tick! *scheduler*)
(bullet-pool-update! player-bullets player-bullet-collide)
diff --git a/images/flyer0.ase b/images/flyer0.ase
index 619b3b5..4cb6c92 100644
--- a/images/flyer0.ase
+++ b/images/flyer0.ase
Binary files differ
diff --git a/images/flyer0.png b/images/flyer0.png
index 1f8ce69..8a467c5 100644
--- a/images/flyer0.png
+++ b/images/flyer0.png
Binary files differ
diff --git a/level.tmx b/level.tmx
index be526de..288bf3f 100644
--- a/level.tmx
+++ b/level.tmx
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<map version="1.8" tiledversion="1.8.6" orientation="orthogonal" renderorder="right-down" width="15" height="500" tilewidth="16" tileheight="16" infinite="0" nextlayerid="8" nextobjectid="449">
+<map version="1.8" tiledversion="1.8.6" orientation="orthogonal" renderorder="right-down" width="15" height="500" tilewidth="16" tileheight="16" infinite="0" nextlayerid="8" nextobjectid="576">
<tileset firstgid="1" source="tiles.tsx"/>
<tileset firstgid="11" source="background.tsx"/>
<objectgroup id="7" name="background" visible="0" parallaxy="0.75">
@@ -317,15 +317,15 @@
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,2,0,0,0,0,0,0,0,0,0,0,0,1,
-1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,
-1,8,1,1,1,1,1,8,1,0,0,0,0,0,9,
-1,1,1,1,9,1,1,1,1,0,0,0,0,0,1,
-1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,
+1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,
+1,8,1,1,1,1,1,8,1,1,0,0,0,0,9,
1,5,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
+1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
+1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,3,1,
-1,0,0,0,0,0,0,0,0,0,0,0,3,1,1,
+1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,
9,0,0,0,1,1,1,1,1,1,1,1,1,8,1,
1,0,0,0,0,4,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,4,1,1,8,1,1,1,1,
@@ -821,15 +821,15 @@
6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
6,6,0,0,0,0,0,0,0,0,0,0,0,0,6,
-6,6,6,6,6,6,6,6,6,0,0,0,0,0,6,
-6,6,6,6,6,6,6,6,6,0,0,0,0,0,6,
-6,6,6,6,6,6,6,6,6,0,0,0,0,0,6,
-6,6,6,6,6,6,6,6,6,0,0,0,0,0,6,
+6,6,6,6,6,6,6,6,6,6,0,0,0,0,6,
+6,6,6,6,6,6,6,6,6,6,0,0,0,0,6,
6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
-6,0,0,0,0,0,0,0,0,0,0,0,0,6,6,
+6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
+6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
+6,0,0,0,6,6,6,6,6,6,6,6,6,6,6,
6,0,0,0,6,6,6,6,6,6,6,6,6,6,6,
6,0,0,0,0,0,6,6,6,6,6,6,6,6,6,
6,0,0,0,0,0,0,0,6,6,6,6,6,6,6,
@@ -1018,21 +1018,6 @@
<objectgroup id="3" name="objects">
<object id="10" type="turret" x="96" y="7424" width="16" height="16"/>
<object id="11" type="turret" x="224" y="6480" width="16" height="16"/>
- <object id="19" type="popcorn" x="128" y="6320" width="16" height="16"/>
- <object id="20" type="popcorn" x="48" y="6272" width="16" height="16"/>
- <object id="21" type="popcorn" x="64" y="6288" width="16" height="16"/>
- <object id="22" type="popcorn" x="80" y="6304" width="16" height="16"/>
- <object id="23" type="popcorn" x="96" y="6320" width="16" height="16"/>
- <object id="24" type="popcorn" x="112" y="6336" width="16" height="16"/>
- <object id="25" type="popcorn" x="64" y="6432" width="16" height="16"/>
- <object id="26" type="popcorn" x="96" y="6432" width="16" height="16"/>
- <object id="27" type="popcorn" x="128" y="6432" width="16" height="16"/>
- <object id="28" type="popcorn" x="160" y="6432" width="16" height="16"/>
- <object id="29" type="popcorn" x="80" y="6400" width="16" height="16"/>
- <object id="30" type="popcorn" x="112" y="6400" width="16" height="16"/>
- <object id="31" type="popcorn" x="144" y="6400" width="16" height="16"/>
- <object id="39" type="flyer0" x="64" y="6736" width="16" height="16"/>
- <object id="42" type="flyer0" x="160" y="6736" width="16" height="16"/>
<object id="71" type="scroll-speed" x="0" y="4992" width="16" height="16">
<properties>
<property name="duration" type="int" value="30"/>
@@ -1049,24 +1034,10 @@
<object id="104" type="turret" x="192" y="7232" width="16" height="16"/>
<object id="105" type="turret" x="32" y="7056" width="16" height="16"/>
<object id="106" type="turret" x="192" y="7056" width="16" height="16"/>
- <object id="107" type="turret" x="112" y="6992" width="16" height="16"/>
- <object id="138" type="flyer0" x="112" y="6672" width="16" height="16"/>
- <object id="139" type="flyer0" x="64" y="6608" width="16" height="16"/>
- <object id="140" type="flyer0" x="160" y="6608" width="16" height="16"/>
- <object id="141" type="flyer0" x="112" y="6544" width="16" height="16"/>
<object id="142" type="turret" x="0" y="6480" width="16" height="16"/>
- <object id="143" type="popcorn" x="144" y="6304" width="16" height="16"/>
- <object id="144" type="popcorn" x="160" y="6288" width="16" height="16"/>
- <object id="145" type="popcorn" x="176" y="6272" width="16" height="16"/>
- <object id="146" type="turret" x="96" y="6144" width="16" height="16"/>
- <object id="147" type="turret" x="112" y="6144" width="16" height="16"/>
- <object id="148" type="turret" x="96" y="6160" width="16" height="16"/>
- <object id="149" type="turret" x="112" y="6160" width="16" height="16"/>
- <object id="150" type="flyer0" x="96" y="6000" width="16" height="16"/>
- <object id="151" type="flyer0" x="128" y="6000" width="16" height="16"/>
- <object id="152" type="flyer0" x="112" y="5952" width="16" height="16"/>
- <object id="153" type="flyer0" x="96" y="5904" width="16" height="16"/>
- <object id="154" type="flyer0" x="128" y="5904" width="16" height="16"/>
+ <object id="150" type="flyer0" x="64" y="6048" width="16" height="16"/>
+ <object id="153" type="flyer0" x="64" y="5904" width="16" height="16"/>
+ <object id="154" type="flyer0" x="160" y="5904" width="16" height="16"/>
<object id="161" type="scroll-speed" x="0" y="4096" width="16" height="16">
<properties>
<property name="duration" type="int" value="30"/>
@@ -1183,7 +1154,6 @@
<object id="293" type="turret" x="208" y="4592" width="16" height="16"/>
<object id="294" type="turret" x="16" y="4720" width="16" height="16"/>
<object id="295" type="turret" x="208" y="4848" width="16" height="16"/>
- <object id="296" type="turret" x="16" y="4992" width="16" height="16"/>
<object id="297" type="turret" x="176" y="5344" width="16" height="16"/>
<object id="298" type="turret" x="48" y="5472" width="16" height="16"/>
<object id="299" type="turret" x="96" y="5824" width="16" height="16"/>
@@ -1207,11 +1177,8 @@
<object id="324" type="popcorn" x="160" y="4848" width="16" height="16"/>
<object id="325" type="popcorn" x="128" y="4848" width="16" height="16"/>
<object id="326" type="popcorn" x="96" y="4848" width="16" height="16"/>
- <object id="327" type="popcorn" x="128" y="5008" width="16" height="16"/>
- <object id="328" type="popcorn" x="96" y="5008" width="16" height="16"/>
- <object id="329" type="popcorn" x="64" y="5008" width="16" height="16"/>
- <object id="360" type="popcorn-sweep-right" x="16" y="7520" width="16" height="16"/>
- <object id="361" type="popcorn-sweep-left" x="208" y="7440" width="16" height="16"/>
+ <object id="360" type="popcorn-sweep-right" x="16" y="7568" width="16" height="16"/>
+ <object id="361" type="popcorn-sweep-left" x="208" y="7456" width="16" height="16"/>
<object id="363" type="popcorn-sweep-right" x="16" y="7344" width="16" height="16"/>
<object id="364" type="popcorn-sweep-left" x="208" y="7344" width="16" height="16"/>
<object id="365" type="popcorn-swarm" x="0" y="7184" width="16" height="16"/>
@@ -1271,5 +1238,65 @@
<object id="446" type="popcorn-swarm" x="80" y="544" width="16" height="16"/>
<object id="447" type="popcorn-swarm" x="112" y="544" width="16" height="16"/>
<object id="448" type="popcorn-swarm" x="144" y="544" width="16" height="16"/>
+ <object id="461" type="flyer1-tunnel" x="176" y="4928" width="16" height="16"/>
+ <object id="463" type="flyer1-tunnel" x="176" y="4672" width="16" height="16"/>
+ <object id="464" type="flyer1-tunnel" x="176" y="4416" width="16" height="16"/>
+ <object id="465" type="turret" x="16" y="4960" width="16" height="16"/>
+ <object id="466" type="popcorn" x="128" y="4976" width="16" height="16"/>
+ <object id="467" type="popcorn" x="96" y="4976" width="16" height="16"/>
+ <object id="468" type="popcorn" x="64" y="4976" width="16" height="16"/>
+ <object id="469" type="flyer1-tunnel" x="176" y="4160" width="16" height="16"/>
+ <object id="470" type="flyer0" x="32" y="4752" width="16" height="16"/>
+ <object id="471" type="flyer0" x="32" y="4496" width="16" height="16"/>
+ <object id="472" type="flyer0" x="32" y="4240" width="16" height="16"/>
+ <object id="474" type="flyer0" x="112" y="3904" width="16" height="16"/>
+ <object id="482" type="flyer1-down-right" x="128" y="640" width="16" height="16"/>
+ <object id="483" type="flyer1-down-left" x="96" y="640" width="16" height="16"/>
+ <object id="487" type="flyer0" x="64" y="400" width="16" height="16"/>
+ <object id="488" type="flyer0" x="160" y="400" width="16" height="16"/>
+ <object id="489" type="flyer0" x="112" y="336" width="16" height="16"/>
+ <object id="490" type="flyer1-down" x="32" y="5040" width="16" height="16"/>
+ <object id="491" type="flyer0" x="112" y="6992" width="16" height="16"/>
+ <object id="492" type="turret" x="32" y="6656" width="16" height="16"/>
+ <object id="493" type="turret" x="192" y="6656" width="16" height="16"/>
+ <object id="494" type="turret" x="112" y="6592" width="16" height="16"/>
+ <object id="495" type="flyer0" x="112" y="6656" width="16" height="16"/>
+ <object id="496" type="flyer0" x="112" y="6512" width="16" height="16"/>
+ <object id="498" type="flyer0" x="112" y="6784" width="16" height="16"/>
+ <object id="500" type="flyer0" x="64" y="5584" width="16" height="16"/>
+ <object id="501" type="flyer0" x="160" y="5424" width="16" height="16"/>
+ <object id="502" type="flyer0" x="64" y="5232" width="16" height="16"/>
+ <object id="513" type="turret" x="96" y="6144" width="16" height="16"/>
+ <object id="514" type="turret" x="128" y="6144" width="16" height="16"/>
+ <object id="515" type="turret" x="96" y="6176" width="16" height="16"/>
+ <object id="517" type="turret" x="128" y="6176" width="16" height="16"/>
+ <object id="533" type="popcorn-down" x="176" y="5776" width="16" height="16"/>
+ <object id="534" type="popcorn-down" x="128" y="5760" width="16" height="16"/>
+ <object id="535" type="popcorn-down" x="144" y="5776" width="16" height="16"/>
+ <object id="536" type="popcorn-down" x="160" y="5792" width="16" height="16"/>
+ <object id="537" type="popcorn-down" x="192" y="5760" width="16" height="16"/>
+ <object id="548" type="popcorn-down" x="128" y="6400" width="16" height="16"/>
+ <object id="549" type="popcorn-down" x="48" y="6352" width="16" height="16"/>
+ <object id="550" type="popcorn-down" x="64" y="6368" width="16" height="16"/>
+ <object id="551" type="popcorn-down" x="80" y="6384" width="16" height="16"/>
+ <object id="552" type="popcorn-down" x="96" y="6400" width="16" height="16"/>
+ <object id="553" type="popcorn-down" x="112" y="6416" width="16" height="16"/>
+ <object id="554" type="popcorn-down" x="144" y="6384" width="16" height="16"/>
+ <object id="555" type="popcorn-down" x="160" y="6368" width="16" height="16"/>
+ <object id="556" type="popcorn-down" x="176" y="6352" width="16" height="16"/>
+ <object id="557" type="flyer0" x="112" y="6352" width="16" height="16"/>
+ <object id="563" type="popcorn-down" x="128" y="5968" width="16" height="16"/>
+ <object id="564" type="popcorn-down" x="80" y="5952" width="16" height="16"/>
+ <object id="565" type="popcorn-down" x="96" y="5968" width="16" height="16"/>
+ <object id="566" type="popcorn-down" x="112" y="5984" width="16" height="16"/>
+ <object id="567" type="popcorn-down" x="144" y="5952" width="16" height="16"/>
+ <object id="568" type="popcorn-down" x="48" y="5056" width="16" height="16"/>
+ <object id="569" type="popcorn-down" x="16" y="5056" width="16" height="16"/>
+ <object id="570" type="popcorn-down" x="32" y="5072" width="16" height="16"/>
+ <object id="571" type="flyer0" x="64" y="6224" width="16" height="16"/>
+ <object id="572" type="flyer0" x="160" y="6224" width="16" height="16"/>
+ <object id="573" type="flyer0" x="160" y="6048" width="16" height="16"/>
+ <object id="574" type="flyer0" x="64" y="5344" width="16" height="16"/>
+ <object id="575" type="flyer0" x="64" y="5664" width="16" height="16"/>
</objectgroup>
</map>
diff --git a/todo.org b/todo.org
index 841b91e..e135b11 100644
--- a/todo.org
+++ b/todo.org
@@ -2,21 +2,21 @@
* DONE tiled map compilation
* DONE pause state
-* TODO intro state
+* DONE intro state
* DONE win state
* DONE focus fire
* DONE per bullet hitbox
-* TODO parallax tile object backgrounds
-* TODO player animation
+* DONE parallax backgrounds
+* DONE player animation
* DONE enemy animation
* DONE nested scripts
-* TODO turret enemy
-* TODO popcorn enemy
-* TODO flying enemy 1
-* TODO flying enemy 2
+* DONE turret enemy
+* DONE popcorn enemy
+* DONE flying enemy 1
+* DONE flying enemy 2
* TODO boss
* DONE scoring
-* TODO design map
+* DONE design map
** phases
- open space, just the player for the first screen of tiles
- popcorn appear