aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGene Pasquet <dev@etenil.net>2024-05-23 19:55:04 +0100
committerGene Pasquet <dev@etenil.net>2024-05-23 19:55:04 +0100
commit8987818800c434a452fdc427efdc45f7e2cbbfb4 (patch)
treef355d8d4abcee1ea0d75461dd88a2a9f4579f588
parent5f9856cdda5ce1c88494b658425dd50bd53967ca (diff)
Tweaks to difficulty and speeds
-rw-r--r--TODO.org3
-rw-r--r--turbo.scm135
2 files changed, 69 insertions, 69 deletions
diff --git a/TODO.org b/TODO.org
index 4a4bbda..aafd919 100644
--- a/TODO.org
+++ b/TODO.org
@@ -10,8 +10,9 @@
** DONE Make cars in different lanes drive at different speeds
** DONE Add restart option
** DONE Smooth acceleration
+** TODO Measure traveled distance
** TODO Smooth increasing turn rate
-** TODO Display level on screen
+** STARTED Display level on screen
** TODO Add weapon to player car
*** TODO Make weapon a power-up
*** TODO Make weapon use limited (bullet? time?)
diff --git a/turbo.scm b/turbo.scm
index 4af0b6b..fee5553 100644
--- a/turbo.scm
+++ b/turbo.scm
@@ -28,7 +28,7 @@
(define player-velocity (vec2 0 0))
(define player-min-speed 250)
-(define player-max-speed 2000)
+(define player-max-speed 1072)
(define player-rotation 0)
;; 2px/s/s acceleration
(define player-car-acceleration 100)
@@ -38,7 +38,6 @@
(define level-difficulty 1)
-(define music-play? #t)
(define music-res (load-audio "music.ogg"))
(define music (make-source #:audio music-res #:loop? #t))
(define engine-res (load-audio "engine-loop-1.ogg"))
@@ -68,7 +67,7 @@
(let ((lane-num (random road-num-lanes)))
(set-vehicle-position! veh (calculate-vehicle-position
(+ 1 lane-num)))
- (set-vehicle-speed! veh (+ player-min-speed (* 25 lane-num)) )
+ (set-vehicle-speed! veh (+ player-min-speed (* 75 lane-num)) )
(set-vehicle-active! veh #f)))
(define vehicles (make-vehicle-list (list) 0))
@@ -91,10 +90,9 @@
;;;; Game functions
(define (draw-lanes x y num-lanes)
- (if (> num-lanes 0)
- (begin
- (draw-sprite road-lane (vec2 x y))
- (draw-lanes x (+ lane-height y) (- num-lanes 1)))))
+ (when (> num-lanes 0)
+ (draw-sprite road-lane (vec2 x y))
+ (draw-lanes x (+ lane-height y) (- num-lanes 1))))
(define (draw-road-section startx starty num-lanes)
(draw-sprite road-bottom (vec2 startx starty))
@@ -108,12 +106,11 @@
(draw-sprite grass (vec2 x y)))
(define (draw-road startx starty num-lanes)
- (if (< startx (window-width (current-window)))
- (begin
- (draw-grass-down startx starty)
- (draw-road-section startx starty num-lanes)
- (draw-road (+ startx lane-length) starty num-lanes)
- (draw-grass-up startx (+ starty (* lane-height num-lanes))))))
+ (when (< startx (window-width (current-window)))
+ (draw-grass-down startx starty)
+ (draw-road-section startx starty num-lanes)
+ (draw-road (+ startx lane-length) starty num-lanes)
+ (draw-grass-up startx (+ starty (* lane-height num-lanes)))))
(define (lane-y num-lane)
(+ road-start-y
@@ -131,11 +128,13 @@
(+ 1 player-min-speed)
#t))
+(define (level-min-speed)
+ (+ player-min-speed (* (- level-difficulty 1) 18)))
+
(define (set-player-speed! new-speed)
- (let* ((player-speed (max (min new-speed player-max-speed) player-min-speed))
- (pitch-factor (* 0.10
- (- player-speed
- player-min-speed))))
+ (let* ((min-speed (level-min-speed))
+ (player-speed (max (min new-speed player-max-speed) min-speed))
+ (pitch-factor (* 0.10 (- player-speed min-speed))))
(set-vehicle-speed! player-car player-speed)
(set-source-pitch! engine-sound (+ 1 pitch-factor))))
@@ -175,59 +174,54 @@
;;;; Chickadee hooks
(set-source-volume! music 0.5)
-(if music-play?
- (source-play music))
-(if music-play?
- (source-play engine-sound))
+(source-play music)
+(source-play engine-sound)
(define (update interval)
- (if (not game-over)
- (begin
- (if (not (player-on-road?))
- (begin
- (off-road-player)
- (set! game-over #t)))
-
- (let ((new-speed (+ (vehicle-speed player-car)
- (* player-current-acceleration interval))))
- (set-vehicle-speed! player-car (min player-max-speed
- (max player-min-speed
- new-speed))))
-
- (if (player-collides?)
- (begin
- (off-road-player)
- ;; TODO: Think of different animation for this game over
- (set! game-over #t)))
-
- (set! road-section-position
- (if (< road-section-position (- lane-length))
- (- (+ road-section-position lane-length) (* interval (vehicle-speed player-car)))
- (- road-section-position (* interval (vehicle-speed player-car)))))
-
- (set-vehicle-position! player-car (vec2+ (vehicle-position player-car)
- player-velocity))
-
- (for-each (lambda (veh)
- (vehicle-move! veh (vec2 (- (* interval (vehicle-speed- player-car veh))) 0)))
- (filter vehicle-active? vehicles))
-
- ;; Reset vehicles that have gone off screen
- (for-each vehicle-reset-ahead (filter vehicle-off-screen? vehicles))
-
- ;; Randomly respawn vehicles based on level difficulty
- (if (= 0 (random level-difficulty))
- (begin
- (let* ((inactive-vehicles (filter vehicle-inactive? vehicles))
- (spawnable-vehicles (filter vehicle-has-spawn-space? inactive-vehicles)))
- (if (not (null? spawnable-vehicles))
- (set-vehicle-active! (list-ref
- spawnable-vehicles
- (random (length spawnable-vehicles)))
- #t)))))
- ;; End begin
- )))
+ (unless game-over
+ (unless (player-on-road?)
+ (off-road-player)
+ (set! game-over #t))
+
+ (let ((new-speed (+ (vehicle-speed player-car)
+ (* player-current-acceleration interval))))
+ (set-vehicle-speed! player-car (min player-max-speed
+ (max (level-min-speed)
+ new-speed))))
+
+ (when (player-collides?)
+ (off-road-player)
+ ;; TODO: Think of different animation for this game over
+ (set! game-over #t))
+
+ (set! road-section-position
+ (if (< road-section-position (- lane-length))
+ (- (+ road-section-position lane-length) (* interval (vehicle-speed player-car)))
+ (- road-section-position (* interval (vehicle-speed player-car)))))
+
+ (set-vehicle-position! player-car (vec2+ (vehicle-position player-car)
+ player-velocity))
+
+ (for-each (lambda (veh)
+ (vehicle-move! veh (vec2 (- (* interval (vehicle-speed- player-car veh))) 0)))
+ (filter vehicle-active? vehicles))
+
+ ;; Reset vehicles that have gone off screen
+ (for-each vehicle-reset-ahead (filter vehicle-off-screen? vehicles))
+
+ ;; Randomly respawn vehicles based on level difficulty
+ (let ((challenge (- (/ 200 level-difficulty) 9)))
+ (when (= 0 (random challenge))
+ (let* ((inactive-vehicles (filter vehicle-inactive? vehicles))
+ (spawnable-vehicles (filter vehicle-has-spawn-space? inactive-vehicles)))
+ (if (not (null? spawnable-vehicles))
+ (set-vehicle-active! (list-ref
+ spawnable-vehicles
+ (random (length spawnable-vehicles)))
+ #t)))))
+ ;; End (unless game-over)
+ ))
(define (draw alpha)
(draw-road road-section-position road-start-y road-num-lanes)
@@ -246,6 +240,11 @@
(vec2 400.0 20.0)
#:font the-font
#:scale (vec2 2 2))
+
+ (draw-text (format #f "Level: ~s" level-difficulty)
+ (vec2 30.0 20.0)
+ #:font the-font
+ #:scale (vec2 2 2))
(if game-over
(draw-text "GAME OVER" (vec2 260 (/ (window-width (current-window)) 2))
@@ -267,7 +266,7 @@
(abort-game))
((and (eq? key 'return) game-over)
(set-vehicle-position! player-car initial-player-position)
- (set-player-speed! (+ 1 player-min-speed))
+ (set-player-speed! (level-min-speed))
(set! player-rotation 0)
(source-play engine-sound)
(for-each vehicle-reset-ahead vehicles)