small racing game im working on
sounds
| -rw-r--r-- | assets/cars/engine.gd | 29 | ||||
| -rw-r--r-- | assets/cars/gearbox.gd | 6 | ||||
| -rw-r--r-- | assets/cars/kenney_sedan/sedan.tscn | 47 | ||||
| -rw-r--r-- | assets/cars/sounds/high_db.tres | 7 | ||||
| -rw-r--r-- | assets/cars/sounds/high_pitch.tres | 5 | ||||
| -rw-r--r-- | assets/cars/sounds/idle_db.tres | 6 | ||||
| -rw-r--r-- | assets/cars/sounds/idle_pitch.tres | 5 | ||||
| -rw-r--r-- | assets/cars/sounds/low_db.tres | 6 | ||||
| -rw-r--r-- | assets/cars/sounds/low_pitch.tres | 5 | ||||
| -rw-r--r-- | assets/cars/sounds/med_db.tres | 7 | ||||
| -rw-r--r-- | assets/cars/sounds/med_pitch.tres | 5 | ||||
| -rw-r--r-- | assets/sounds/engine/high.wav | bin | 0 -> 220012 bytes | |||
| -rw-r--r-- | assets/sounds/engine/high.wav.import | 24 | ||||
| -rw-r--r-- | assets/sounds/engine/idle.wav | bin | 0 -> 582564 bytes | |||
| -rw-r--r-- | assets/sounds/engine/idle.wav.import | 24 | ||||
| -rw-r--r-- | assets/sounds/engine/low.wav | bin | 0 -> 216532 bytes | |||
| -rw-r--r-- | assets/sounds/engine/low.wav.import | 24 | ||||
| -rw-r--r-- | assets/sounds/engine/med.wav | bin | 0 -> 193004 bytes | |||
| -rw-r--r-- | assets/sounds/engine/med.wav.import | 24 | ||||
| -rw-r--r-- | classes/car.gd | 18 | ||||
| -rw-r--r-- | default_bus_layout.tres | 3 | ||||
| -rw-r--r-- | scenes/race_high.tscn | 2 |
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 Binary files differnew file mode 100644 index 0000000..131bdad --- /dev/null +++ b/assets/sounds/engine/high.wav 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 Binary files differnew file mode 100644 index 0000000..e4e5637 --- /dev/null +++ b/assets/sounds/engine/idle.wav 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 Binary files differnew file mode 100644 index 0000000..e92c428 --- /dev/null +++ b/assets/sounds/engine/low.wav 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 Binary files differnew file mode 100644 index 0000000..4209055 --- /dev/null +++ b/assets/sounds/engine/med.wav 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"] |