Add end-game credits sequence.

This commit is contained in:
David Thompson 2024-05-23 14:05:13 -04:00
parent 91ba2fab66
commit 4ec1666a1d
6 changed files with 110 additions and 6 deletions

View file

@ -29,7 +29,8 @@ levels = \
modules/game/levels/level-1.scm \ modules/game/levels/level-1.scm \
modules/game/levels/level-2.scm \ modules/game/levels/level-2.scm \
modules/game/levels/level-3.scm \ modules/game/levels/level-3.scm \
modules/game/levels/level-4.scm modules/game/levels/level-4.scm \
modules/game/levels/credits.scm
game.wasm: game.scm $(modules) $(levels) game.wasm: game.scm $(modules) $(levels)
guild compile-wasm -L modules -o $@ $< guild compile-wasm -L modules -o $@ $<

3
assets/fonts/AUTHORS Normal file
View file

@ -0,0 +1,3 @@
Monogram font by datagoblin
https://datagoblin.itch.io/monogram
Licensed under CC0

Binary file not shown.

View file

@ -1,3 +1,10 @@
@font-face {
font-family: 'monogram';
src: url('assets/fonts/monogram-extended.woff2');
font-weight: normal;
font-style: normal;
}
body { body {
/* background-color: #000; */ /* background-color: #000; */
margin: 0; margin: 0;

View file

@ -33,6 +33,7 @@
(game levels level-2) (game levels level-2)
(game levels level-3) (game levels level-3)
(game levels level-4) (game levels level-4)
(game levels credits)
(game scripts) (game scripts)
(game tileset) (game tileset)
(goblins core) (goblins core)
@ -168,6 +169,15 @@
(set! *level* ((vector-ref levels idx) (collected-gem? idx))) (set! *level* ((vector-ref levels idx) (collected-gem? idx)))
(update-objects!))) (update-objects!)))
(define (load-credits!)
(set! *state* 'win)
(set! *actormap* (make-whactormap))
(set-vec2-y! *credits-scroll* 0.0)
(clear-snapshots!)
(with-goblins
(set! *level* (load-credits #t))
(update-objects!)))
(define (next-level!) (define (next-level!)
(let ((idx (+ *level-idx* 1))) (let ((idx (+ *level-idx* 1)))
(pk 'next-level idx) (pk 'next-level idx)
@ -177,10 +187,19 @@
(save-game!) (save-game!)
(run-script (run-script
(lambda () (lambda ()
(set! *state* 'interstitial)
(show-effect! (make-fade-out+in-effect 1.0)) (show-effect! (make-fade-out+in-effect 1.0))
(wait 30) ; ~half the effect time (wait 30) ; ~half the effect time
(load-level! idx)))) (load-level! idx))))
(set! *state* 'win)))) (begin
(run-script
(lambda ()
(set! *level-idx* 0)
(save-game!)
(set! *state* 'interstitial)
(show-effect! (make-fade-out+in-effect 2.0))
(wait 60)
(load-credits!)))))))
;; Auto-save/load to local storage. ;; Auto-save/load to local storage.
(define (save-game!) (define (save-game!)
@ -390,10 +409,58 @@
(define (draw-interstitial) (define (draw-interstitial)
(draw-level)) (draw-level))
(define *credits-scroll* (vec2 0.0 0.0))
(define credits
#("Congratulations!"
#f
#f
"Cirkoban was made by the"
"Spritely Institute"
#f
"https://spritely.institute"
#f
"Programming"
#f
"David Thompson"
"Juliana Sims"
#f
"Art"
#f
"Christine Lemmer-Webber"
#f
"monogram font by datagoblin"
#f
#f
#f
#f
#f
#f
#f
#f
"Thank you for playing!"))
(define credits-line-spacing 16.0)
(define max-credits-scroll
(+ game-height (* (- (vector-length credits) 9) credits-line-spacing)))
(define (draw-win) (define (draw-win)
(set-fill-color! context "#000000") (draw-level)
(set-text-align! context "left") (set-fill-color! context "#ffffff")
(fill-text context "OMG YOU DID IT WOW CONGRATS" 32.0 120.0)) (set-text-align! context "center")
(set-font! context "bold 16px monogram")
(set-vec2-y! *credits-scroll*
(min (+ (vec2-y *credits-scroll*) 1.0)
max-credits-scroll))
(let* ((x (* game-width 0.7))
(lines-on-screen 15)
(scroll-y (vec2-y *credits-scroll*))
;; TODO: Only render the lines on screen.
(start 0)
(end (vector-length credits)))
(let lp ((i start) (y (- game-height scroll-y)))
(when (< i end)
(match (vector-ref credits i)
(#f #f)
(str (fill-text context str x y)))
(lp (1+ i) (+ y credits-line-spacing))))))
(define (draw prev-time) (define (draw prev-time)
(clear-rect context 0.0 0.0 *canvas-width* *canvas-height*) (clear-rect context 0.0 0.0 *canvas-width* *canvas-height*)

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.8" tiledversion="1.8.6" orientation="orthogonal" renderorder="right-down" width="20" height="15" tilewidth="16" tileheight="16" infinite="0" nextlayerid="3" nextobjectid="11">
<tileset firstgid="1" source="tiles.tsx"/>
<layer id="1" name="background" width="20" height="15">
<data encoding="csv">
150,211,91,111,150,150,149,131,131,109,210,150,110,191,210,91,131,109,211,131,
211,171,209,110,110,111,151,109,191,210,191,91,131,91,150,150,150,151,210,171,
130,189,151,211,189,170,209,191,151,211,189,171,150,110,111,189,131,210,210,129,
211,169,110,131,189,109,150,191,191,110,190,211,189,131,189,89,170,149,171,130,
169,110,81,82,83,83,84,91,91,171,210,150,189,91,150,189,171,110,169,210,
170,81,108,24,24,24,107,88,90,110,170,130,129,131,209,110,130,191,151,90,
210,85,24,24,24,24,24,86,191,170,109,110,169,150,191,189,210,149,110,151,
91,85,24,24,24,24,24,86,191,169,150,210,170,170,210,130,110,90,170,211,
89,85,24,24,24,24,24,86,131,109,190,150,131,129,131,209,169,189,91,151,
129,101,88,24,24,24,87,104,209,131,169,150,210,189,171,211,169,189,131,190,
111,189,101,102,102,103,104,110,91,150,189,190,211,170,150,170,171,169,130,109,
111,131,110,170,171,169,149,90,90,190,109,170,89,131,150,89,131,209,210,149,
171,189,189,189,111,210,131,171,129,190,209,150,90,191,150,209,151,169,209,90,
90,210,111,171,210,210,211,149,151,209,190,129,169,129,91,131,170,109,90,191,
170,190,210,131,109,210,131,90,131,211,111,130,89,191,169,110,190,109,211,170
</data>
</layer>
<objectgroup id="2" name="objects">
<object id="1" type="player-spawn" gid="1" x="64" y="112" width="16" height="16"/>
</objectgroup>
</map>