diff --git a/Makefile b/Makefile index 22fc356..ca421b3 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,8 @@ levels = \ modules/game/levels/level-1.scm \ modules/game/levels/level-2.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) guild compile-wasm -L modules -o $@ $< diff --git a/assets/fonts/AUTHORS b/assets/fonts/AUTHORS new file mode 100644 index 0000000..a7cc8cd --- /dev/null +++ b/assets/fonts/AUTHORS @@ -0,0 +1,3 @@ +Monogram font by datagoblin +https://datagoblin.itch.io/monogram +Licensed under CC0 diff --git a/assets/fonts/monogram-extended.woff2 b/assets/fonts/monogram-extended.woff2 new file mode 100644 index 0000000..11b3628 Binary files /dev/null and b/assets/fonts/monogram-extended.woff2 differ diff --git a/game.css b/game.css index 5ff196f..da8f138 100644 --- a/game.css +++ b/game.css @@ -1,3 +1,10 @@ +@font-face { + font-family: 'monogram'; + src: url('assets/fonts/monogram-extended.woff2'); + font-weight: normal; + font-style: normal; +} + body { /* background-color: #000; */ margin: 0; diff --git a/game.scm b/game.scm index 77f8a8d..9f3f230 100644 --- a/game.scm +++ b/game.scm @@ -33,6 +33,7 @@ (game levels level-2) (game levels level-3) (game levels level-4) + (game levels credits) (game scripts) (game tileset) (goblins core) @@ -168,6 +169,15 @@ (set! *level* ((vector-ref levels idx) (collected-gem? idx))) (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!) (let ((idx (+ *level-idx* 1))) (pk 'next-level idx) @@ -177,10 +187,19 @@ (save-game!) (run-script (lambda () + (set! *state* 'interstitial) (show-effect! (make-fade-out+in-effect 1.0)) - (wait 30) ; ~half the effect time + (wait 30) ; ~half the effect time (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. (define (save-game!) @@ -390,10 +409,58 @@ (define (draw-interstitial) (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) - (set-fill-color! context "#000000") - (set-text-align! context "left") - (fill-text context "OMG YOU DID IT WOW CONGRATS" 32.0 120.0)) + (draw-level) + (set-fill-color! context "#ffffff") + (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) (clear-rect context 0.0 0.0 *canvas-width* *canvas-height*) diff --git a/modules/game/levels/credits.tmx b/modules/game/levels/credits.tmx new file mode 100644 index 0000000..405a139 --- /dev/null +++ b/modules/game/levels/credits.tmx @@ -0,0 +1,26 @@ + + + + + +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 + + + + + +