small racing game im working on
sounds
bendn 2023-02-18
parent 43c61c9 · commit 821eac9
-rw-r--r--assets/cars/engine.gd29
-rw-r--r--assets/cars/gearbox.gd6
-rw-r--r--assets/cars/kenney_sedan/sedan.tscn47
-rw-r--r--assets/cars/sounds/high_db.tres7
-rw-r--r--assets/cars/sounds/high_pitch.tres5
-rw-r--r--assets/cars/sounds/idle_db.tres6
-rw-r--r--assets/cars/sounds/idle_pitch.tres5
-rw-r--r--assets/cars/sounds/low_db.tres6
-rw-r--r--assets/cars/sounds/low_pitch.tres5
-rw-r--r--assets/cars/sounds/med_db.tres7
-rw-r--r--assets/cars/sounds/med_pitch.tres5
-rw-r--r--assets/sounds/engine/high.wavbin0 -> 220012 bytes
-rw-r--r--assets/sounds/engine/high.wav.import24
-rw-r--r--assets/sounds/engine/idle.wavbin0 -> 582564 bytes
-rw-r--r--assets/sounds/engine/idle.wav.import24
-rw-r--r--assets/sounds/engine/low.wavbin0 -> 216532 bytes
-rw-r--r--assets/sounds/engine/low.wav.import24
-rw-r--r--assets/sounds/engine/med.wavbin0 -> 193004 bytes
-rw-r--r--assets/sounds/engine/med.wav.import24
-rw-r--r--classes/car.gd18
-rw-r--r--default_bus_layout.tres3
-rw-r--r--scenes/race_high.tscn2
22 files changed, 244 insertions, 3 deletions
diff --git a/assets/cars/engine.gd b/assets/cars/engine.gd
new file mode 100644
index 0000000..47d6a59
--- /dev/null
+++ b/assets/cars/engine.gd
@@ -0,0 +1,29 @@
+extends Node3D
+
+@onready var idle := $idle as AudioStreamPlayer
+@onready var low := $low as AudioStreamPlayer
+@onready var med := $med as AudioStreamPlayer
+@onready var high := $high as AudioStreamPlayer
+
+@onready var players: Array[AudioStreamPlayer] = [idle, low, med, high]
+@export var db_curves: Array[Curve]
+@export var pitch_curves: Array[Curve]
+
+@export var car: Car
+
+func _ready() -> void:
+ await get_tree().physics_frame
+ for p in players: p.play()
+
+func _process(_d: float):
+ var r := car.rpm()
+ var n := clampf(r / 500.0, 0, 1)
+# var s := "with n: %.2f" % n
+ for i in 4:
+ players[i].volume_db = (db_curves[i].sample_baked(n) - 50)
+ players[i].pitch_scale = (pitch_curves[i].sample_baked(n) * 2) + .001
+# s += " | %s's: %.2f (%.2f)" % [players[i].name, players[i].volume_db, players[i].pitch_scale]
+ if n > .9:
+ players[-1].pitch_scale = (car.rpm() / 600) + 1
+# print(s)
+
diff --git a/assets/cars/gearbox.gd b/assets/cars/gearbox.gd
new file mode 100644
index 0000000..cd069b1
--- /dev/null
+++ b/assets/cars/gearbox.gd
@@ -0,0 +1,6 @@
+extends Node
+
+@onready var shift_1 := $Shift1 as AudioStreamPlayer
+
+func _on_sedan_shifted() -> void:
+ shift_1.play()
diff --git a/assets/cars/kenney_sedan/sedan.tscn b/assets/cars/kenney_sedan/sedan.tscn
index 3dce50a..de261b3 100644
--- a/assets/cars/kenney_sedan/sedan.tscn
+++ b/assets/cars/kenney_sedan/sedan.tscn
@@ -1,6 +1,21 @@
-[gd_scene load_steps=18 format=3 uid="uid://t1r24qnrojl"]
+[gd_scene load_steps=33 format=3 uid="uid://c157wew5y33bo"]
[ext_resource type="Script" path="res://classes/car.gd" id="1_pdccm"]
+[ext_resource type="Script" path="res://assets/cars/engine.gd" id="2_rxib8"]
+[ext_resource type="AudioStream" uid="uid://dlh4kgp4a23ib" path="res://assets/sounds/engine/high.wav" id="2_xgntt"]
+[ext_resource type="AudioStream" uid="uid://dua01ca8om1md" path="res://assets/sounds/engine/low.wav" id="3_4jicv"]
+[ext_resource type="Curve" uid="uid://f1go1j7raaq1" path="res://assets/cars/sounds/idle_db.tres" id="3_gwsff"]
+[ext_resource type="AudioStream" uid="uid://c8ndjqdhoymmd" path="res://assets/sounds/engine/med.wav" id="4_aqqj1"]
+[ext_resource type="AudioStream" uid="uid://yh1tvvitnvhl" path="res://assets/sounds/engine/idle.wav" id="4_fubff"]
+[ext_resource type="Curve" uid="uid://bq1r63t410ork" path="res://assets/cars/sounds/low_db.tres" id="4_rdkge"]
+[ext_resource type="Curve" uid="uid://d15cjufi3m0wg" path="res://assets/cars/sounds/med_db.tres" id="5_7w6r4"]
+[ext_resource type="Curve" uid="uid://d0rkqfng2uvkw" path="res://assets/cars/sounds/high_db.tres" id="6_h74co"]
+[ext_resource type="Curve" uid="uid://blatk508sq620" path="res://assets/cars/sounds/idle_pitch.tres" id="7_hu8t3"]
+[ext_resource type="Curve" uid="uid://bof1lx0nk5jte" path="res://assets/cars/sounds/low_pitch.tres" id="8_7rdpj"]
+[ext_resource type="Curve" uid="uid://da7vdsdlv8l70" path="res://assets/cars/sounds/med_pitch.tres" id="9_ret6y"]
+[ext_resource type="Curve" uid="uid://ox0sapaob1jh" path="res://assets/cars/sounds/high_pitch.tres" id="10_28pjg"]
+[ext_resource type="Script" path="res://assets/cars/gearbox.gd" id="11_augb2"]
+[ext_resource type="AudioStream" uid="uid://di8wcnme3mqbf" path="res://assets/sounds/shifts/1.wav" id="11_rwd1j"]
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_hs0do"]
friction = 0.71
@@ -417,3 +432,33 @@ skeleton = NodePath("")
[node name="Coll" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.43328, 0)
shape = SubResource("SphereShape3D_t532n")
+
+[node name="Engine" type="Node3D" parent="." node_paths=PackedStringArray("car")]
+script = ExtResource("2_rxib8")
+db_curves = Array[Curve]([ExtResource("3_gwsff"), ExtResource("4_rdkge"), ExtResource("5_7w6r4"), ExtResource("6_h74co")])
+pitch_curves = Array[Curve]([ExtResource("7_hu8t3"), ExtResource("8_7rdpj"), ExtResource("9_ret6y"), ExtResource("10_28pjg")])
+car = NodePath("..")
+
+[node name="low" type="AudioStreamPlayer" parent="Engine"]
+stream = ExtResource("3_4jicv")
+volume_db = -25.0
+
+[node name="med" type="AudioStreamPlayer" parent="Engine"]
+stream = ExtResource("4_aqqj1")
+volume_db = -25.0
+
+[node name="high" type="AudioStreamPlayer" parent="Engine"]
+stream = ExtResource("2_xgntt")
+volume_db = -25.0
+
+[node name="idle" type="AudioStreamPlayer" parent="Engine"]
+stream = ExtResource("4_fubff")
+
+[node name="Gearbox" type="Node3D" parent="."]
+script = ExtResource("11_augb2")
+
+[node name="Shift1" type="AudioStreamPlayer" parent="Gearbox"]
+stream = ExtResource("11_rwd1j")
+volume_db = -25.0
+
+[connection signal="shifted" from="." to="Gearbox" method="_on_sedan_shifted"]
diff --git a/assets/cars/sounds/high_db.tres b/assets/cars/sounds/high_db.tres
new file mode 100644
index 0000000..3ba6495
--- /dev/null
+++ b/assets/cars/sounds/high_db.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Curve" format=3 uid="uid://d0rkqfng2uvkw"]
+
+[resource]
+max_value = 100.0
+bake_resolution = 200
+_data = [Vector2(0.561404, 0), 0.0, 250.943, 0, 0, Vector2(1, 26.4151), 0.0, 0.0, 0, 0]
+point_count = 2
diff --git a/assets/cars/sounds/high_pitch.tres b/assets/cars/sounds/high_pitch.tres
new file mode 100644
index 0000000..341aeae
--- /dev/null
+++ b/assets/cars/sounds/high_pitch.tres
@@ -0,0 +1,5 @@
+[gd_resource type="Curve" format=3 uid="uid://ox0sapaob1jh"]
+
+[resource]
+_data = [Vector2(0.413146, 0), 0.0, 0.0, 0, 0, Vector2(0.600939, 0.415094), 4.42076, 0.669811, 0, 0, Vector2(1, 0.518868), 0.0, 0.0, 0, 0]
+point_count = 3
diff --git a/assets/cars/sounds/idle_db.tres b/assets/cars/sounds/idle_db.tres
new file mode 100644
index 0000000..231d79c
--- /dev/null
+++ b/assets/cars/sounds/idle_db.tres
@@ -0,0 +1,6 @@
+[gd_resource type="Curve" format=3 uid="uid://f1go1j7raaq1"]
+
+[resource]
+max_value = 100.0
+_data = [Vector2(0, 29.2453), 0.0, 0.0, 0, 0, Vector2(0.7277, 0), 0.0, 0.0, 0, 0]
+point_count = 2
diff --git a/assets/cars/sounds/idle_pitch.tres b/assets/cars/sounds/idle_pitch.tres
new file mode 100644
index 0000000..330db1c
--- /dev/null
+++ b/assets/cars/sounds/idle_pitch.tres
@@ -0,0 +1,5 @@
+[gd_resource type="Curve" format=3 uid="uid://blatk508sq620"]
+
+[resource]
+_data = [Vector2(0, 0.4), 0.0, 0.0, 0, 0, Vector2(0.5, 0.5), 0.0, 0.0, 0, 0, Vector2(1, 0.641509), 1.14825, 0.0, 0, 0]
+point_count = 3
diff --git a/assets/cars/sounds/low_db.tres b/assets/cars/sounds/low_db.tres
new file mode 100644
index 0000000..d5df175
--- /dev/null
+++ b/assets/cars/sounds/low_db.tres
@@ -0,0 +1,6 @@
+[gd_resource type="Curve" format=3 uid="uid://bq1r63t410ork"]
+
+[resource]
+max_value = 100.0
+_data = [Vector2(0, 0), 0.0, 1.46262, 0, 0, Vector2(0.211268, 26.4151), -4.44437, 0.0, 0, 0, Vector2(0.446009, 24.5283), -47.8437, -47.8437, 0, 0, Vector2(0.671362, 0), -72.5629, 0.0, 0, 0]
+point_count = 4
diff --git a/assets/cars/sounds/low_pitch.tres b/assets/cars/sounds/low_pitch.tres
new file mode 100644
index 0000000..0ec3278
--- /dev/null
+++ b/assets/cars/sounds/low_pitch.tres
@@ -0,0 +1,5 @@
+[gd_resource type="Curve" format=3 uid="uid://bof1lx0nk5jte"]
+
+[resource]
+_data = [Vector2(0, 0.632075), 0.0, 0.0, 0, 0, Vector2(0.751174, 0.613208), 0.0, 0.0, 0, 0]
+point_count = 2
diff --git a/assets/cars/sounds/med_db.tres b/assets/cars/sounds/med_db.tres
new file mode 100644
index 0000000..fc28c40
--- /dev/null
+++ b/assets/cars/sounds/med_db.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Curve" format=3 uid="uid://d15cjufi3m0wg"]
+
+[resource]
+max_value = 100.0
+bake_resolution = 200
+_data = [Vector2(0.357895, 0), 0.0, 0.0, 0, 0, Vector2(0.533333, 22.6415), -2.51346, -2.51346, 0, 0, Vector2(0.723005, 17.9245), -76.0327, -76.0327, 0, 0, Vector2(0.892019, 0), -122.213, 0.0, 0, 0]
+point_count = 4
diff --git a/assets/cars/sounds/med_pitch.tres b/assets/cars/sounds/med_pitch.tres
new file mode 100644
index 0000000..66d2dcd
--- /dev/null
+++ b/assets/cars/sounds/med_pitch.tres
@@ -0,0 +1,5 @@
+[gd_resource type="Curve" format=3 uid="uid://da7vdsdlv8l70"]
+
+[resource]
+_data = [Vector2(0.187793, 0), 0.0, 0.0, 0, 0, Vector2(0.253521, 0.235849), 0.0, 0.0, 0, 0, Vector2(0.356808, 0.415094), 0.0, 0.0, 0, 0, Vector2(1, 0.556604), 0.0, 0.0, 0, 0]
+point_count = 4
diff --git a/assets/sounds/engine/high.wav b/assets/sounds/engine/high.wav
new file mode 100644
index 0000000..131bdad
--- /dev/null
+++ b/assets/sounds/engine/high.wav
Binary files differ
diff --git a/assets/sounds/engine/high.wav.import b/assets/sounds/engine/high.wav.import
new file mode 100644
index 0000000..849e683
--- /dev/null
+++ b/assets/sounds/engine/high.wav.import
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://dlh4kgp4a23ib"
+path="res://.godot/imported/high.wav-6debdfdc0853c7116cc151973f7c20d5.sample"
+
+[deps]
+
+source_file="res://assets/sounds/engine/high.wav"
+dest_files=["res://.godot/imported/high.wav-6debdfdc0853c7116cc151973f7c20d5.sample"]
+
+[params]
+
+force/8_bit=false
+force/mono=false
+force/max_rate=false
+force/max_rate_hz=44100
+edit/trim=false
+edit/normalize=false
+edit/loop_mode=2
+edit/loop_begin=0
+edit/loop_end=-1
+compress/mode=0
diff --git a/assets/sounds/engine/idle.wav b/assets/sounds/engine/idle.wav
new file mode 100644
index 0000000..e4e5637
--- /dev/null
+++ b/assets/sounds/engine/idle.wav
Binary files differ
diff --git a/assets/sounds/engine/idle.wav.import b/assets/sounds/engine/idle.wav.import
new file mode 100644
index 0000000..2f65d0e
--- /dev/null
+++ b/assets/sounds/engine/idle.wav.import
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://yh1tvvitnvhl"
+path="res://.godot/imported/idle.wav-1ce6c6b9bdd32a1a0c393ad4733e0b8a.sample"
+
+[deps]
+
+source_file="res://assets/sounds/engine/idle.wav"
+dest_files=["res://.godot/imported/idle.wav-1ce6c6b9bdd32a1a0c393ad4733e0b8a.sample"]
+
+[params]
+
+force/8_bit=false
+force/mono=false
+force/max_rate=false
+force/max_rate_hz=44100
+edit/trim=false
+edit/normalize=false
+edit/loop_mode=2
+edit/loop_begin=0
+edit/loop_end=-1
+compress/mode=0
diff --git a/assets/sounds/engine/low.wav b/assets/sounds/engine/low.wav
new file mode 100644
index 0000000..e92c428
--- /dev/null
+++ b/assets/sounds/engine/low.wav
Binary files differ
diff --git a/assets/sounds/engine/low.wav.import b/assets/sounds/engine/low.wav.import
new file mode 100644
index 0000000..35ee3d0
--- /dev/null
+++ b/assets/sounds/engine/low.wav.import
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://dua01ca8om1md"
+path="res://.godot/imported/low.wav-aabb9e9df05ab8f1fbfa52dbab0c0d82.sample"
+
+[deps]
+
+source_file="res://assets/sounds/engine/low.wav"
+dest_files=["res://.godot/imported/low.wav-aabb9e9df05ab8f1fbfa52dbab0c0d82.sample"]
+
+[params]
+
+force/8_bit=false
+force/mono=false
+force/max_rate=false
+force/max_rate_hz=44100
+edit/trim=false
+edit/normalize=false
+edit/loop_mode=2
+edit/loop_begin=0
+edit/loop_end=-1
+compress/mode=0
diff --git a/assets/sounds/engine/med.wav b/assets/sounds/engine/med.wav
new file mode 100644
index 0000000..4209055
--- /dev/null
+++ b/assets/sounds/engine/med.wav
Binary files differ
diff --git a/assets/sounds/engine/med.wav.import b/assets/sounds/engine/med.wav.import
new file mode 100644
index 0000000..b1076b6
--- /dev/null
+++ b/assets/sounds/engine/med.wav.import
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://c8ndjqdhoymmd"
+path="res://.godot/imported/med.wav-c80ce62302bf0e6139c56c77f2e9002a.sample"
+
+[deps]
+
+source_file="res://assets/sounds/engine/med.wav"
+dest_files=["res://.godot/imported/med.wav-c80ce62302bf0e6139c56c77f2e9002a.sample"]
+
+[params]
+
+force/8_bit=false
+force/mono=false
+force/max_rate=false
+force/max_rate_hz=44100
+edit/trim=false
+edit/normalize=false
+edit/loop_mode=2
+edit/loop_begin=0
+edit/loop_end=-1
+compress/mode=0
diff --git a/classes/car.gd b/classes/car.gd
index 872fd5a..40c4e21 100644
--- a/classes/car.gd
+++ b/classes/car.gd
@@ -15,7 +15,9 @@ var steer_target := 0.0
@export var power_curve: Curve = preload("res://assets/cars/kenney_sedan/power_curve.tres")
@onready var body_mesh := $body as MeshInstance3D
-@onready var wheels := [$bl, $br, $fl, $fr]
+@onready var wheels: Array[VehicleWheel3D] = [$bl as VehicleWheel3D, $br as VehicleWheel3D, $fl as VehicleWheel3D, $fr as VehicleWheel3D]
+
+signal shifted
var gear_ratios: Array[float] = [ 2.69, 2.01, 1.59, 1.32, 1.13, 1.0 ]
var current_gear := 0 # -1 reverse, 0 = neutral, 1 - 6 = gear 1 to 6.
@@ -25,6 +27,18 @@ var throttle := 0.0
var current_speed_mps := 0.0 # meters
@onready var last_pos = position
+func ratio() -> float:
+ match current_gear:
+ 0: return 0
+ -1: return reverse_ratio
+ _: return gear_ratios[current_gear - 1]
+
+func is_on_ground() -> bool:
+ return wheels.all(func(whl: VehicleWheel3D): return whl.get_contact_body() != null)
+
+func is_not_on_ground() -> bool:
+ return wheels.any(func(whl: VehicleWheel3D): return whl.get_contact_body() == null)
+
func _ready() -> void:
randomize()
brake = 15
@@ -65,10 +79,12 @@ func _process_gear_inputs(delta: float):
current_gear = current_gear - 1
gear_timer = gear_shift_time
clutch_position = 0
+ shifted.emit()
elif shift_up() and current_gear < gear_ratios.size():
current_gear = current_gear + 1
gear_timer = gear_shift_time
clutch_position = 0
+ shifted.emit()
else:
clutch_position = 1
diff --git a/default_bus_layout.tres b/default_bus_layout.tres
new file mode 100644
index 0000000..5aa9abb
--- /dev/null
+++ b/default_bus_layout.tres
@@ -0,0 +1,3 @@
+[gd_resource type="AudioBusLayout" format=3 uid="uid://bqa1ktdoiq6xq"]
+
+[resource]
diff --git a/scenes/race_high.tscn b/scenes/race_high.tscn
index 13e599a..798b6b0 100644
--- a/scenes/race_high.tscn
+++ b/scenes/race_high.tscn
@@ -2,7 +2,7 @@
[ext_resource type="Script" path="res://scenes/race_highlevel.gd" id="1_q8hua"]
[ext_resource type="PackedScene" uid="uid://vok7fdcyec68" path="res://ui/hud.tscn" id="3_xp6f0"]
-[ext_resource type="PackedScene" uid="uid://t1r24qnrojl" path="res://assets/cars/kenney_sedan/sedan.tscn" id="4_0jpx1"]
+[ext_resource type="PackedScene" uid="uid://c157wew5y33bo" path="res://assets/cars/kenney_sedan/sedan.tscn" id="4_0jpx1"]
[ext_resource type="PackedScene" uid="uid://clpo7rt0vkudy" path="res://ui/countdown.tscn" id="4_llox4"]
[ext_resource type="PackedScene" uid="uid://bbj2agqv581cd" path="res://assets/cars/kenney_sedan/sedan.blend" id="4_waubg"]
[ext_resource type="PackedScene" uid="uid://clw61td2wh84w" path="res://scenes/track.tscn" id="5_8mqbt"]