diff --git a/game.scm b/game.scm index 3819cb9..02dfc37 100644 --- a/game.scm +++ b/game.scm @@ -228,7 +228,7 @@ (update-objects!))) (define (load-credits!) - (replace-game-state! 'win) + (replace-game-state! 'credits) (set! *actormap* (make-whactormap)) (set-vec2-y! *credits-scroll* 0.0) (clear-snapshots!) @@ -371,14 +371,14 @@ (define (menu-up!) (set-menu-index! (max -1 (1- (current-menu-index)))) - (if (and (> (current-menu-page) 0) - (= (current-menu-index) (- (* (current-menu-page) menu:max-items) (current-menu-page) 1))) - (set-menu-page! (1- (current-menu-page))))) + (when (and (> (current-menu-page) 0) + (= (current-menu-index) (- (* (current-menu-page) menu:max-items) (current-menu-page) 1))) + (set-menu-page! (1- (current-menu-page))))) (define (menu-down!) (set-menu-index! (min (1- (vector-length (menu-items (current-menu)))) (1+ (current-menu-index)))) - (if (= (current-menu-index) (- (* (1+ (current-menu-page)) menu:max-items) (current-menu-page))) - (set-menu-page! (1+ (current-menu-page))))) + (when (= (current-menu-index) (- (* (1+ (current-menu-page)) menu:max-items) (current-menu-page))) + (set-menu-page! (1+ (current-menu-page))))) (define (push-menu-history!) (set-menu-history! (cons (cons (current-menu) @@ -801,6 +801,26 @@ (+ r r-page-offset))))) text-x (+ y text-offset-y))))))) +(define (draw-controls) + (let ((cx1 (/ game-width 4.0)) + (cx2 (* game-width 0.75)) + (baseline (/ game-height 2.0))) + (set-fill-color! context "#ffffff") + (set-text-align! context "center") + (set-font! context "normal 16px monogram") + (fill-text context "keyboard:" + cx1 (- baseline 32.0)) + (fill-text context "arrows -> move" + cx1 (- baseline 16.0)) + (fill-text context "Z -> undo" + cx1 baseline) + (fill-text context "touchscreen:" + cx2 (- baseline 32.0)) + (fill-text context "dpad -> move" + cx2 (- baseline 16.0)) + (fill-text context "A -> undo" + cx2 baseline))) + (define (draw-level) (draw-background) (for-each draw-object *objects*) @@ -814,7 +834,9 @@ (set-font! context "normal 32px monogram") (set-fill-color! context "#ffffff") (set-text-align! context "center") - (fill-text context "OUCH... x_x" (/ game-width 2.0) (/ game-height 2.0))))) + (fill-text context "OUCH... x_x" (/ game-width 2.0) (/ game-height 2.0)))) + (when (= *level-idx* 0) + (draw-controls))) (define (draw-interstitial) (draw-level)) @@ -869,7 +891,7 @@ (define credits-line-spacing 16.0) (define max-credits-scroll (+ game-height (* (- (vector-length credits) 9) credits-line-spacing))) -(define (draw-win) +(define (draw-credits) (draw-level) (set-fill-color! context "#ffffff") (set-text-align! context "center") @@ -920,33 +942,13 @@ (scale! context *canvas-scale* *canvas-scale*) (draw-current-effect 'pre) - (let ((state (current-game-state))) - (match state - ((or 'menu 'play 'interstitial) - (draw-level) - ;; Display input mappings on the title screen/first level. - (when (= *level-idx* 0) - (let ((cx1 (/ game-width 4.0)) - (cx2 (* game-width 0.75)) - (baseline (/ game-height 2.0))) - (set-fill-color! context "#ffffff") - (set-text-align! context "center") - (set-font! context "normal 16px monogram") - (fill-text context "keyboard:" - cx1 (- baseline 32.0)) - (fill-text context "arrows -> move" - cx1 (- baseline 16.0)) - (fill-text context "Z -> undo" - cx1 baseline) - (fill-text context "touchscreen:" - cx2 (- baseline 32.0)) - (fill-text context "dpad -> move" - cx2 (- baseline 16.0)) - (fill-text context "A -> undo" - cx2 baseline))) - (when (eq? 'menu state) - (draw-menu))) - ('win (draw-win)))) + (match (current-game-state) + ((or 'play 'interstitial) + (draw-level)) + ('menu + (draw-level) + (draw-menu)) + ('credits (draw-credits))) (draw-current-effect 'post) (request-animation-frame draw-callback))) (define draw-callback (procedure->external draw)) @@ -1058,11 +1060,12 @@ ('menu (hide-menu!)) (_ #f))) ;; Pressing any bound input resets the game. - ('win (if *level-last* - (begin + ;; If traveling to the credits via the menu, go back to '*level-last*' + ('credits (cond + (*level-last* (load-level! *level-last*) (set! *level-last* #f)) - (reset-game!))))) + (else (reset-game!)))))) ;; Canvas and event loop setup (define canvas (get-element-by-id "canvas"))