aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGene Pasquet <dev@etenil.net>2024-05-19 10:28:36 +0100
committerGene Pasquet <dev@etenil.net>2024-05-19 10:28:36 +0100
commit5160d65741662dc86286edc2d39e4fa33e1380c2 (patch)
tree2824e5787551fcd38d970dc439410b1d680a3640
parentbbbf8d68b8619ae0bd9df952759e072add09b2a3 (diff)
Let the user crash out of the road
-rw-r--r--TODO.org13
-rw-r--r--turbo.scm53
2 files changed, 56 insertions, 10 deletions
diff --git a/TODO.org b/TODO.org
new file mode 100644
index 0000000..69d8e4a
--- /dev/null
+++ b/TODO.org
@@ -0,0 +1,13 @@
+* Stuff left to do
+
+** TODO Detect when player leaves the road
+** TODO Add non-player cars onto the road
+** TODO Detect collision with other vehicles
+** TODO Add weapon to player car
+*** TODO Make weapon a power-up
+*** TODO Make weapon use limited (bullet? time?)
+** TODO Add graphical speedometer (look at knight rider)
+** TODO Improve visuals
+** TODO Add start menu
+** TODO Add music
+** TODO Add sound effects
diff --git a/turbo.scm b/turbo.scm
index 47f9265..eb7f656 100644
--- a/turbo.scm
+++ b/turbo.scm
@@ -11,11 +11,13 @@
(define road-start-y 80)
(define road-section-position 0)
(define road (load-tileset "road.png" lane-length lane-height))
-(define grass (load-image "grass.png"))
-(define grass-height 96)
+(define road-num-lanes 5)
+(define road-end-y (+ road-start-y (* road-num-lanes lane-height)))
(define road-top (texture-atlas-ref road 2))
(define road-bottom (texture-atlas-ref road 0))
(define road-lane (texture-atlas-ref road 1))
+(define grass (load-image "grass.png"))
+(define grass-height 96)
(define vehicle-height 45)
(define vehicle-length 100)
@@ -28,7 +30,7 @@
(define player-max-speed 20)
(define player-speed player-min-speed)
-(define load-complete #f)
+(define game-over #f)
;;;; Game functions
@@ -66,25 +68,56 @@
(+ (lane-y 3)
(/ (- lane-height vehicle-height) 2))))
+(define player-rotation 0)
+
+(define (player-on-road?)
+ (and (> (vec2-y player-position) road-start-y)
+ (< (+ (vec2-y player-position) vehicle-height) road-end-y)))
+
+(define (off-road-player-top)
+ (set! player-rotation 1)
+ (set! player-position (vec2+ player-position (vec2 0 30)))
+ (set! player-speed 0))
+(define (off-road-player-bottom)
+ (set! player-rotation -1)
+ (set! player-position (vec2+ player-position (vec2 0 -10)))
+ (set! player-speed 0))
+
+(define (off-road-player)
+ "Moves the player off-road"
+ (if (> (vec2-y player-position) road-start-y)
+ (off-road-player-top)
+ (off-road-player-bottom)))
+
;;;; Chickadee hooks
(define (update interval)
- (set! road-section-position
- (if (< road-section-position (* lane-length -1))
- (- (+ road-section-position lane-length) player-speed)
- (- road-section-position player-speed)))
+ (if (not game-over)
+ (begin
+ (if (not (player-on-road?))
+ (begin
+ (off-road-player)
+ (set! game-over #t)))
- (set! player-position (vec2+ player-position player-velocity)))
+ (set! road-section-position
+ (if (< road-section-position (* lane-length -1))
+ (- (+ road-section-position lane-length) player-speed)
+ (- road-section-position player-speed)))
+
+ (set! player-position (vec2+ player-position player-velocity)))))
(define (draw alpha)
- (draw-road road-section-position road-start-y 5)
+ (draw-road road-section-position road-start-y road-num-lanes)
(draw-text "Turbo Racers!"
(vec2 260.0 (- (window-height (current-window)) 25)))
(draw-text (format #f "Speed: ~smph" (* player-speed 5))
(vec2 450.0 20.0))
- (draw-sprite player-car player-position))
+ (draw-sprite player-car player-position #:rotation player-rotation)
+
+ (if game-over
+ (draw-text "GAME OVER" (vec2 260 (/ (window-width (current-window)) 2)))))