add support for more levels and add victory celebration

This commit is contained in:
Peter Tillemans 2024-05-24 01:22:28 +02:00
parent 9d99030f07
commit 5ddc4542f9
6 changed files with 59 additions and 20 deletions

View file

@ -25,12 +25,14 @@ godir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache
SOURCES = \
game/util/assets.scm \
game/util/pipe.scm \
game/model/level.scm \
game/model/hero.scm \
game/model/key.scm \
game/model/level.scm \
game/model/other.scm \
game/model/runner.scm \
game/render/level.scm \
game/render/hero.scm \
game/render/key.scm \
game/render/level.scm \
game/render/other.scm \
game/main.scm
@ -38,7 +40,10 @@ asset_files = \
assets/images/simples_pimples.png \
assets/images/lr_penguin2.png \
assets/images/glamshot.png \
assets/levels/level-1.map
assets/images/boxart.png \
assets/images/victory.jpg \
assets/levels/level-001.map \
assets/levels/level-002.map
nobase_dist_pkgdata_DATA = $(asset_files)

View file

@ -36,7 +36,7 @@ let the _others_ fall in so you can pass over their head.
So now, go out, collect the keys and maintain a healthy diet!
* Game Plan [12/20]
* Game Plan [16/21]
- [X] start project organization
- [X] select some assets to start with
@ -54,13 +54,14 @@ So now, go out, collect the keys and maintain a healthy diet!
- [X] create other's AI
- [X] add keys and portal
- [X] make other avoid each other
- [ ] Detect success reaching the goal and progress to next level
- [X] ask AI for some boxart
- [X] Detect success reaching the goal and progress to next level
- [ ] add foods and bloat indicator
- [ ] scale hero waist related to bloat level
- [ ] create more levels
- [X] create more levels
- [ ] dig potholes
- [ ] make others steal keys
- [ ] some level celebration/animation
- [X] some level celebration/animation
* Installation and Development
@ -180,7 +181,7 @@ asset_files = \
assets/images/glamshot.png \
assets/levels/level1.tmx \
assets/levels/tiles.tsx \
assets/levels/level-1.map
assets/levels/level-001.map
nobase_dist_pkgdata_DATA = $(asset_files)

View file

@ -21,40 +21,56 @@
#:use-module (srfi srfi-1)
#:export (launch-game))
(define levels #f)
(define level #f)
(define repl #f)
(define hero #f)
(define others #f)
(define keys #f)
(define inputs '())
(define has-won? #f)
(define (load)
(assets-load)
(render-level-load)
(set! level (level-parse-file "assets/levels/level-1.map"))
(set! levels (assets-map-levels level-parse-file))
(load-level)
(set! repl (spawn-coop-repl-server)))
(define (load-level)
(set! level (car levels))
(set! levels (cdr levels))
(render-level-set! level)
(set! hero (hero-load level))
(set! others (other-load-others level))
(set! keys (keys-load level))
(set! repl (spawn-coop-repl-server)))
)
(define (update dt)
(poll-coop-repl-server repl)
(set! hero (hero-update hero level inputs keys dt))
(set! others (map (lambda (other) (other-update other level hero others dt)) others))
(set! keys (keys-update keys hero))
(if (level-same-cell? (hero-position hero) (level-find-goal level))
(if (null? levels)
(set! has-won? #t)
(load-level)))
)
(define (draw _alpha)
(define (render-level)
(render-level-draw level)
(for-each render-other others)
(render-keys keys (level-find-goal level))
(render-hero hero)
)
(render-hero hero))
(define (draw _alpha)
(if has-won?
(render-victory)
(render-level)))
(define (set-add set item)
(if (member item set)
(if (member item set)
set
(cons item set)))

View file

@ -156,8 +156,8 @@
(test-equal (parse-tile #\G) 'goal)
(test-equal (parse-tile #\space) 'empty)
(test-equal (level-width (level-parse-file "assets/levels/level-1.map")) 40)
(test-equal (level-height (level-parse-file "assets/levels/level-1.map")) 30)
(test-equal (level-width (level-parse-file "assets/levels/level-001.map")) 40)
(test-equal (level-height (level-parse-file "assets/levels/level-001.map")) 30)
(test-equal
(level-tile-at-row-col (level-parse "WWWWW\nWP GW\nWWWWW\n") 1 1)

View file

@ -5,10 +5,12 @@
#:use-module (chickadee graphics color)
#:use-module (chickadee graphics sprite)
#:use-module (chickadee graphics texture)
#:use-module (chickadee graphics text)
#:use-module (chickadee math vector)
#:export (render-level-load
render-level-draw
render-level-set!
render-victory
))
@ -57,6 +59,9 @@
(draw-sprite-batch sprite-batch))
(define (render-victory)
(draw-sprite (load-image (assets-file-name "assets/images/victory.jpg")) (vec2 0 0)))
(test-begin "tile translation")
(test-equal (level-tile-index 'empty) 3800)

View file

@ -1,7 +1,9 @@
(define-module (game util assets)
#:use-module (ice-9 ftw)
#:use-module (ice-9 textual-ports)
#:use-module (chickadee graphics texture)
#:use-module (chickadee graphics color)
#:export (assets-load assets-file-name tile-texture tile-atlas hero-texture hero-atlas)
#:export (assets-load assets-file-name tile-texture tile-atlas hero-texture hero-atlas assets-map-levels)
)
@ -18,6 +20,16 @@
(string-append prefix "/" name)
)
(define (read-level-map filename)
(call-with-input-file get-string-all))
(define (assets-map-levels f)
(map f
(map (lambda (filename)(string-append prefix "/assets/levels/" filename))
(scandir (assets-file-name "assets/levels")
(lambda (filename) (string-suffix? ".map" filename ))))))
(define (assets-load)
(set! tile-texture (load-image (assets-file-name "assets/images/simples_pimples.png")
#:transparent-color black))