Changes, fixes and additions

### Coding & project

- Minor bug fixes and improvements
- Improved code (best practice)
- Changed folder structure, filenames (best practice)
- Signal style changed to Godot 4.x-like

### Gameplay

- Respawning added
- Falling platforms added
- Clouds (floating cubes) added

### Sprites

- Newly designed splash screen
- Newly designed coin HUD icon

### Audio

- Coin sound replaced
- Jumping sound volume adjusted
- Landing sound added
pull/8/head
Kenney 2023-09-17 02:57:12 +07:00
parent 7e1deca901
commit f9731dff46
60 changed files with 439 additions and 198 deletions

5
.gitignore vendored

@ -12,4 +12,7 @@ export_presets.cfg
# Mono-specific ignores
.mono/
data_*/
mono_crash.*.json
mono_crash.*.json
# Kenney ignores
build/

@ -2,7 +2,7 @@
# Starter Kit 3D Platformer
This package includes a basic template for a 3D platformer game in Godot 4.1. Includes features like;
This package includes a basic template for a 3D platformer game in Godot 4.1.1.stable.official. Includes features like;
- Character controller (with double jump)
- Camera controls (rotate, zoom)

@ -1,19 +0,0 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://cmw625fu13tr2"
path="res://.godot/imported/coin.ogg-5fee6894aec1659e3145035f6432d2a8.oggvorbisstr"
[deps]
source_file="res://audio/coin.ogg"
dest_files=["res://.godot/imported/coin.ogg-5fee6894aec1659e3145035f6432d2a8.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

@ -1,19 +0,0 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dw2m5fxhfjykq"
path="res://.godot/imported/jump.ogg-4ccfa78b534f5c9be6e08e8e4c7c9740.oggvorbisstr"
[deps]
source_file="res://audio/jump.ogg"
dest_files=["res://.godot/imported/jump.ogg-4ccfa78b534f5c9be6e08e8e4c7c9740.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

@ -1,19 +0,0 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://ddiy2lbypiwqv"
path="res://.godot/imported/walking.ogg-3121538949dac2211d0d0a34fd2bf073.oggvorbisstr"
[deps]
source_file="res://audio/walking.ogg"
dest_files=["res://.godot/imported/walking.ogg-3121538949dac2211d0d0a34fd2bf073.oggvorbisstr"]
[params]
loop=true
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4

@ -3,12 +3,12 @@
importer="font_data_dynamic"
type="FontFile"
uid="uid://d0cxd77jybrcn"
path="res://.godot/imported/lilita-one-regular.ttf-c8b840284f76789b63f3d0e62e2428a4.fontdata"
path="res://.godot/imported/lilita_one_regular.ttf-68cc4ab6825bdd499d1ad608190f5213.fontdata"
[deps]
source_file="res://fonts/lilita-one-regular.ttf"
dest_files=["res://.godot/imported/lilita-one-regular.ttf-c8b840284f76789b63f3d0e62e2428a4.fontdata"]
source_file="res://fonts/lilita_one_regular.ttf"
dest_files=["res://.godot/imported/lilita_one_regular.ttf-68cc4ab6825bdd499d1ad608190f5213.fontdata"]
[params]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Binary file not shown.

@ -3,7 +3,7 @@
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://brg64eln7l7wv"
uid="uid://bsrmqj84lksd7"
path="res://.godot/imported/cloud.glb-53daedc24f8d7f4baa42baf232c66643.scn"
[deps]
@ -28,18 +28,5 @@ animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
import_script/path=""
_subresources={
"meshes": {
"cloud_cloud": {
"generate/lightmap_uv": 0,
"generate/lods": 0,
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 60.0,
"lods/normal_split_angle": 25.0,
"save_to_file/enabled": true,
"save_to_file/make_streamable": "",
"save_to_file/path": "res://prefabs/cloud.res"
}
}
}
_subresources={}
gltf/embedded_image_handling=1

Binary file not shown.

@ -0,0 +1,45 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://brg64eln7l7wv"
path="res://.godot/imported/dust.glb-1353ca834ae15b165f2b80c04f99a5a8.scn"
[deps]
source_file="res://models/dust.glb"
dest_files=["res://.godot/imported/dust.glb-1353ca834ae15b165f2b80c04f99a5a8.scn"]
[params]
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
import_script/path=""
_subresources={
"meshes": {
"cloud_cloud": {
"generate/lightmap_uv": 0,
"generate/lods": 0,
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 60.0,
"lods/normal_split_angle": 25.0,
"save_to_file/enabled": true,
"save_to_file/make_streamable": "",
"save_to_file/path": "res://prefabs/cloud.res"
}
}
}
gltf/embedded_image_handling=1

Binary file not shown.

@ -0,0 +1,32 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://biyd6x403gvny"
path="res://.godot/imported/platform-falling.glb-a1321a8710589d27b2a6e247cfe23359.scn"
[deps]
source_file="res://models/platform-falling.glb"
dest_files=["res://.godot/imported/platform-falling.glb-a1321a8710589d27b2a6e247cfe23359.scn"]
[params]
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
import_script/path=""
_subresources={}
gltf/embedded_image_handling=1

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,19 @@
extends Node3D
var time = 0.0
var random_number = RandomNumberGenerator.new()
var random_velocity:float
var random_time:float
func _ready():
random_velocity = random_number.randf_range(0.1, 2.0)
random_time = random_number.randf_range(0.1, 2.0)
func _process(delta):
position.y += (cos(time * random_time) * random_velocity) * delta # Sine movement
time += delta

@ -0,0 +1,17 @@
[gd_scene load_steps=4 format=3 uid="uid://dy017k58p20sk"]
[ext_resource type="PackedScene" uid="uid://bsrmqj84lksd7" path="res://models/cloud.glb" id="1_pjiy0"]
[ext_resource type="Script" path="res://objects/cloud.gd" id="2_hugjq"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8nets"]
transparency = 1
distance_fade_mode = 1
distance_fade_min_distance = 2.0
distance_fade_max_distance = 3.0
[node name="cube" instance=ExtResource("1_pjiy0")]
script = ExtResource("2_hugjq")
[node name="cube2" parent="." index="0"]
visibility_range_fade_mode = 1
surface_material_override/0 = SubResource("StandardMaterial3D_8nets")

@ -1,7 +1,7 @@
extends Area3D
var time = 0
var grabbed = false
var time := 0.0
var grabbed := false
# Collecting coins
@ -10,10 +10,10 @@ func _on_body_entered(body):
body.collect_coin()
Audio.play("res://audio/coin.ogg") # Play sound
Audio.play("res://sounds/coin.ogg") # Play sound
$Mesh.queue_free()
$Particles.emitting = false
$Mesh.queue_free() # Make invisible
$Particles.emitting = false # Stop emitting stars
grabbed = true

@ -1,7 +1,7 @@
[gd_scene load_steps=13 format=3 uid="uid://dfpisimsgf5ce"]
[ext_resource type="Texture2D" uid="uid://0odt7cvj574e" path="res://models/Textures/colormap.png" id="2_04qt4"]
[ext_resource type="Script" path="res://scripts/coin.gd" id="2_gaakh"]
[ext_resource type="Script" path="res://objects/coin.gd" id="2_gaakh"]
[ext_resource type="Texture2D" uid="uid://bs6puxrivhkk2" path="res://sprites/particle.png" id="3_xl1k0"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ct61v"]

File diff suppressed because one or more lines are too long

@ -0,0 +1,23 @@
extends Node3D
var falling := false
var gravity := 0.0
func _process(delta):
scale = scale.lerp(Vector3(1, 1, 1), delta * 10) # Animate scale
position.y -= gravity * delta
if position.y < -10:
queue_free() # Remove platform if below threshold
if falling:
gravity += 0.25
func _on_body_entered(_body):
if !falling:
Audio.play("res://sounds/fall.ogg") # Play sound
scale = Vector3(1.25, 1, 1.25) # Animate scale
falling = true

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -27,6 +27,10 @@ Audio="*res://scripts/audio.gd"
window/size/viewport_width=1280
window/size/viewport_height=720
[editor]
movie_writer/movie_file="C:/Users/Kenney/Desktop/video-footage.avi"
[input]
move_right={
@ -61,39 +65,37 @@ jump={
}
camera_left={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":74,"key_label":0,"unicode":106,"echo":false,"script":null)
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":-1.0,"script":null)
]
}
camera_right={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":76,"key_label":0,"unicode":108,"echo":false,"script":null)
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null)
]
}
camera_up={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":73,"key_label":0,"unicode":105,"echo":false,"script":null)
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null)
]
}
camera_down={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":75,"key_label":0,"unicode":107,"echo":false,"script":null)
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
]
}
zoom_in={
"deadzone": 0.5,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":8,"position":Vector2(119, 1),"global_position":Vector2(123, 44),"factor":1.0,"button_index":4,"canceled":false,"pressed":true,"double_click":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":61,"key_label":0,"unicode":61,"echo":false,"script":null)
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194437,"key_label":0,"unicode":43,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null)
]
}
zoom_out={
"deadzone": 0.5,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":16,"position":Vector2(120, 8),"global_position":Vector2(124, 51),"factor":1.0,"button_index":5,"canceled":false,"pressed":true,"double_click":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":45,"key_label":0,"unicode":45,"echo":false,"script":null)
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194435,"key_label":0,"unicode":45,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null)
]
}

@ -1,31 +1,35 @@
[gd_scene load_steps=23 format=3 uid="uid://d0ymn6u246bv2"]
[gd_scene load_steps=24 format=3 uid="uid://bqqgyqafm7xwp"]
[ext_resource type="Script" path="res://scripts/player.gd" id="1_rvwhc"]
[ext_resource type="PackedScene" uid="uid://c0e27836xgmhi" path="res://prefabs/character_prefab.tscn" id="2_g2iyx"]
[ext_resource type="Texture2D" uid="uid://8ggihh27mlrr" path="res://sprites/blob-shadow.png" id="3_gq1fq"]
[ext_resource type="ArrayMesh" uid="uid://deu06eho4c74" path="res://prefabs/cloud.res" id="4_dxhne"]
[ext_resource type="PackedScene" uid="uid://c0e27836xgmhi" path="res://objects/character.tscn" id="2_g2iyx"]
[ext_resource type="Texture2D" uid="uid://8ggihh27mlrr" path="res://sprites/blob_shadow.png" id="3_gq1fq"]
[ext_resource type="ArrayMesh" uid="uid://deu06eho4c74" path="res://meshes/dust.res" id="4_57mmn"]
[ext_resource type="AudioStream" uid="uid://cydjn1ct3hps2" path="res://sounds/walking.ogg" id="5_3o1yd"]
[ext_resource type="Script" path="res://scripts/view.gd" id="5_bg0fr"]
[ext_resource type="AudioStream" uid="uid://ddiy2lbypiwqv" path="res://audio/walking.ogg" id="5_wfvi2"]
[ext_resource type="PackedScene" uid="uid://cnymdajj1vsqm" path="res://prefabs/platform_prefab.tscn" id="6_sdmev"]
[ext_resource type="PackedScene" uid="uid://rjh4ifidqrfp" path="res://prefabs/platform_medium_prefab.tscn" id="7_ixpj3"]
[ext_resource type="PackedScene" uid="uid://uqr4hswv6d2g" path="res://prefabs/platform_grass_large_round_prefab.tscn" id="8_4oh1e"]
[ext_resource type="PackedScene" uid="uid://cnymdajj1vsqm" path="res://objects/platform.tscn" id="6_sdmev"]
[ext_resource type="PackedScene" uid="uid://rjh4ifidqrfp" path="res://objects/platform_medium.tscn" id="7_ixpj3"]
[ext_resource type="PackedScene" uid="uid://uqr4hswv6d2g" path="res://objects/platform_grass_large_round.tscn" id="8_4oh1e"]
[ext_resource type="PackedScene" uid="uid://c8up71en5djgm" path="res://objects/platform_falling.tscn" id="9_2fnpo"]
[ext_resource type="PackedScene" uid="uid://dtjvjdjl8cs6e" path="res://models/flag.glb" id="9_fw1f5"]
[ext_resource type="PackedScene" uid="uid://dfpisimsgf5ce" path="res://prefabs/coin_prefab.tscn" id="10_fwhys"]
[ext_resource type="PackedScene" uid="uid://dfpisimsgf5ce" path="res://objects/coin.tscn" id="10_fwhys"]
[ext_resource type="Script" path="res://scripts/hud.gd" id="11_apvpm"]
[ext_resource type="FontFile" uid="uid://d0cxd77jybrcn" path="res://fonts/lilita-one-regular.ttf" id="11_dkqcs"]
[ext_resource type="PackedScene" uid="uid://dy017k58p20sk" path="res://objects/cloud.tscn" id="13_drtpy"]
[ext_resource type="Texture2D" uid="uid://cd7oyc56ehkx1" path="res://sprites/coin.png" id="13_jfda3"]
[ext_resource type="FontFile" uid="uid://d0cxd77jybrcn" path="res://fonts/lilita_one_regular.ttf" id="17_tk810"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_iakcd"]
sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_lg8b7"]
sky_horizon_color = Color(0.67451, 0.682353, 0.698039, 1)
sky_curve = 0.0175
ground_bottom_color = Color(1, 1, 1, 1)
ground_curve = 0.171484
[sub_resource type="Sky" id="Sky_nhnet"]
sky_material = SubResource("ProceduralSkyMaterial_iakcd")
[sub_resource type="Sky" id="Sky_7bk1c"]
sky_material = SubResource("ProceduralSkyMaterial_lg8b7")
[sub_resource type="Environment" id="Environment_kt478"]
background_mode = 1
background_color = Color(0.611765, 0.643137, 0.717647, 1)
sky = SubResource("Sky_nhnet")
background_color = Color(0.752941, 0.776471, 0.827451, 1)
sky = SubResource("Sky_7bk1c")
ambient_light_source = 2
ambient_light_color = Color(0.662745, 0.694118, 0.772549, 1)
ambient_light_energy = 1.15
@ -57,11 +61,8 @@ proximity_fade_distance = 0.25
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.249284, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 3
[sub_resource type="BoxShape3D" id="BoxShape3D_bxyhw"]
size = Vector3(30, 1, 30)
[sub_resource type="LabelSettings" id="LabelSettings_38ys3"]
font = ExtResource("11_dkqcs")
font = ExtResource("17_tk810")
font_size = 48
shadow_color = Color(0, 0, 0, 0.376471)
shadow_offset = Vector2(2, 2)
@ -108,7 +109,7 @@ normal_fade = 0.5
material_override = SubResource("StandardMaterial3D_q7stj")
cast_shadow = 0
amount = 60
mesh = ExtResource("4_dxhne")
mesh = ExtResource("4_57mmn")
emission_shape = 1
emission_sphere_radius = 0.2
particle_flag_align_y = true
@ -118,7 +119,7 @@ scale_amount_min = 0.75
scale_amount_curve = SubResource("Curve_xh1e2")
[node name="SoundFootsteps" type="AudioStreamPlayer" parent="Player"]
stream = ExtResource("5_wfvi2")
stream = ExtResource("5_3o1yd")
volume_db = -5.0
pitch_scale = 1.25
autoplay = true
@ -138,6 +139,9 @@ fov = 40.0
[node name="platform" parent="World" instance=ExtResource("6_sdmev")]
transform = Transform3D(0.993085, 0, -0.117399, 0, 1, 0, 0.117399, 0, 0.993085, 0, 0, 0)
[node name="platform4" parent="World" instance=ExtResource("6_sdmev")]
transform = Transform3D(0.993085, 0, -0.117399, 0, 1, 0, 0.117399, 0, 0.993085, -15, 0, 4)
[node name="platform2" parent="World" instance=ExtResource("6_sdmev")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 2, -3)
@ -150,9 +154,21 @@ transform = Transform3D(0.996134, 0, 0.0878512, 0, 1, 0, -0.0878512, 0, 0.996134
[node name="platform-medium2" parent="World" instance=ExtResource("7_ixpj3")]
transform = Transform3D(0.995121, 0, 0.0986598, 0, 1, 0, -0.0986598, 0, 0.995121, -5, 0, 4)
[node name="platform-medium4" parent="World" instance=ExtResource("7_ixpj3")]
transform = Transform3D(0.929796, 0, -0.368076, 0, 1, 0, 0.368076, 0, 0.929796, -14.9422, 0.991941, 0.128304)
[node name="platform-medium3" parent="World" instance=ExtResource("7_ixpj3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, -6)
[node name="platform-falling" parent="World" instance=ExtResource("9_2fnpo")]
transform = Transform3D(0.984808, 0, 0.173648, 0, 1, 0, -0.173648, 0, 0.984808, -9, 0.419294, 4)
[node name="platform-falling2" parent="World" instance=ExtResource("9_2fnpo")]
transform = Transform3D(0.994522, 0, -0.104528, 0, 1, 0, 0.104528, 0, 0.994522, -12, -0.315063, 4)
[node name="platform-falling3" parent="World" instance=ExtResource("9_2fnpo")]
transform = Transform3D(0.939693, 0, 0.34202, 0, 1, 0, -0.34202, 0, 0.939693, -11.7527, 1.8303, -2.30579)
[node name="platform-grass-large-round" parent="World" instance=ExtResource("8_4oh1e")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7, 1, -2)
@ -162,20 +178,53 @@ transform = Transform3D(0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, 0.707107,
[node name="coin" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0.635, 0)
[node name="coin10" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 0.635, 4)
[node name="coin2" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.0437, 1.97005, -0.33003)
[node name="coin3" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.0437, 1.97005, -1.33003)
[node name="coin5" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.7731, 2.54941, -2.28223)
[node name="coin6" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.8111, 1.6888, 0.328574)
[node name="coin7" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.8111, 2.6888, 0.328574)
[node name="coin8" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.9647, 0.801836, 3.99354)
[node name="coin9" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, -6)
[node name="coin4" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.0437, 1.97005, -2.33003)
[node name="respawn" type="Area3D" parent="World"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.08165e-12, -15, 2.08165e-12)
[node name="cube8" parent="World" instance=ExtResource("13_drtpy")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5495, 1.10741, -2.666)
[node name="cube9" parent="World" instance=ExtResource("13_drtpy")]
transform = Transform3D(1.27593, -0.401864, 0.422933, 0.471408, 1.30937, -0.178025, -0.343721, 0.304009, 1.32582, 3.33538, 1.37146, -4.1932)
[node name="cube10" parent="World" instance=ExtResource("13_drtpy")]
transform = Transform3D(1.32811, 0.370441, 0.259369, -0.293866, 1.3186, -0.37854, -0.34372, 0.30401, 1.32582, -10.5752, 2.03819, -7.93707)
[node name="cube11" parent="World" instance=ExtResource("13_drtpy")]
transform = Transform3D(0.476646, 0.924607, 0.941422, -0.929853, 0.945559, -0.457882, -0.93624, -0.468385, 0.934042, -11.1815, 2.03819, 9.2812)
[node name="cube12" parent="World" instance=ExtResource("13_drtpy")]
transform = Transform3D(-1.02876, -0.695523, 0.652886, -0.929853, 0.945557, -0.457881, -0.213027, -0.768461, -1.15432, -10.9158, 2.79508, 11.515)
[node name="cube13" parent="World" instance=ExtResource("13_drtpy")]
transform = Transform3D(1.56209, -1.37982, 1.71508, 1.97375, 1.80907, -0.342241, -0.974547, 1.4522, 2.05595, -14.3045, 2.03819, -8.24191)
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/respawn"]
shape = SubResource("BoxShape3D_bxyhw")
[node name="cube14" parent="World" instance=ExtResource("13_drtpy")]
transform = Transform3D(1.56209, -1.37982, 1.71508, 1.97375, 1.80907, -0.342241, -0.974547, 1.4522, 2.05595, -15.866, 2.03819, 7.83702)
[node name="Sun" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.422618, -0.694272, 0.582563, 0, 0.642788, 0.766044, -0.906308, 0.323744, -0.271654, 0, 0, 0)
@ -210,6 +259,5 @@ text = "0"
label_settings = SubResource("LabelSettings_38ys3")
[connection signal="coin_collected" from="Player" to="HUD" method="_on_coin_collected"]
[connection signal="body_entered" from="World/respawn" to="Player" method="_on_respawn_body_entered"]
[editable path="Player/Character"]

@ -17,7 +17,7 @@ func _ready():
available.append(p)
p.volume_db = -10
p.connect("finished", Callable(self, "_on_stream_finished").bind(p))
p.finished.connect(_on_stream_finished.bind(p))
p.bus = bus

@ -1,4 +1,4 @@
extends Node
extends CanvasLayer
func _on_coin_collected(coins):

@ -6,8 +6,8 @@ signal coin_collected
@export var view: Node3D
@export_subgroup("Properties")
@export var movement_speed = 200
@export var jump_strength = 6
@export var movement_speed = 250
@export var jump_strength = 7
var movement_velocity: Vector3
var rotation_direction: float
@ -27,10 +27,6 @@ var coins = 0
# Functions
func _ready():
pass
func _physics_process(delta):
# Handle functions
@ -38,7 +34,7 @@ func _physics_process(delta):
handle_controls(delta)
handle_gravity(delta)
handle_animations()
handle_effects()
# Movement
@ -57,7 +53,12 @@ func _physics_process(delta):
rotation.y = lerp_angle(rotation.y, rotation_direction, delta * 10)
# Scale animation (juice)
# Falling/respawning
if position.y < -10:
get_tree().reload_current_scene()
# Animation for scale (jumping and landing)
model.scale = model.scale.lerp(Vector3(1, 1, 1), delta * 10)
@ -65,12 +66,13 @@ func _physics_process(delta):
if is_on_floor() and gravity > 2 and !previously_floored:
model.scale = Vector3(1.25, 0.75, 1.25)
Audio.play("res://sounds/land.ogg")
previously_floored = is_on_floor()
# Handle animation(s)
func handle_animations():
func handle_effects():
particles_trail.emitting = false
sound_footsteps.stream_paused = true
@ -96,14 +98,17 @@ func handle_controls(delta):
input.x = Input.get_axis("move_left", "move_right")
input.z = Input.get_axis("move_forward", "move_back")
movement_velocity = view.basis * input * movement_speed * delta
input = input.rotated(Vector3.UP, view.rotation.y).normalized()
movement_velocity = input * movement_speed * delta
#movement_velocity = view.basis * input.limit_length(1.0) * movement_speed * delta
# Jumping
if Input.is_action_just_pressed("jump"):
if jump_single or jump_double:
Audio.play("res://audio/jump.ogg")
Audio.play("res://sounds/jump.ogg")
if jump_double:
@ -142,9 +147,4 @@ func collect_coin():
coins += 1
emit_signal("coin_collected", coins)
# Respawn
func _on_respawn_body_entered(_body):
get_tree().reload_current_scene()
coin_collected.emit(coins)

@ -44,7 +44,7 @@ func handle_input(delta):
input.y = Input.get_axis("camera_left", "camera_right")
input.x = Input.get_axis("camera_up", "camera_down")
camera_rotation += input * rotation_speed * delta
camera_rotation += input.limit_length(1.0) * rotation_speed * delta
camera_rotation.x = clamp(camera_rotation.x, -80, -10)
# Zooming

Binary file not shown.

@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://bygrj12u37fyu"
path="res://.godot/imported/coin.ogg-03bf8cca0d4317de64b04e344cce1fba.oggvorbisstr"
[deps]
source_file="res://sounds/coin.ogg"
dest_files=["res://.godot/imported/coin.ogg-03bf8cca0d4317de64b04e344cce1fba.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://cko3em7xury11"
path="res://.godot/imported/fall.ogg-ed1ea1270f869ae1edfb2ff9fa634b4b.oggvorbisstr"
[deps]
source_file="res://sounds/fall.ogg"
dest_files=["res://.godot/imported/fall.ogg-ed1ea1270f869ae1edfb2ff9fa634b4b.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dw2m5fxhfjykq"
path="res://.godot/imported/jump.ogg-de8df8640ff526968292c23fe5ec784f.oggvorbisstr"
[deps]
source_file="res://sounds/jump.ogg"
dest_files=["res://.godot/imported/jump.ogg-de8df8640ff526968292c23fe5ec784f.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://xnxidwkp46un"
path="res://.godot/imported/land.ogg-7222ba872273a4a7535937ef5cfdffd0.oggvorbisstr"
[deps]
source_file="res://sounds/land.ogg"
dest_files=["res://.godot/imported/land.ogg-7222ba872273a4a7535937ef5cfdffd0.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://cydjn1ct3hps2"
path="res://.godot/imported/walking.ogg-bf61e9916135189ff0d5c06a148b02ab.oggvorbisstr"
[deps]
source_file="res://sounds/walking.ogg"
dest_files=["res://.godot/imported/walking.ogg-bf61e9916135189ff0d5c06a148b02ab.oggvorbisstr"]
[params]
loop=true
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://8ggihh27mlrr"
path="res://.godot/imported/blob-shadow.png-3aeee6cb83ccbe2840b8892954e92142.ctex"
path="res://.godot/imported/blob_shadow.png-d19f4ffceb1d99dd3331acec2dc6d7df.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/blob-shadow.png"
dest_files=["res://.godot/imported/blob-shadow.png-3aeee6cb83ccbe2840b8892954e92142.ctex"]
source_file="res://sprites/blob_shadow.png"
dest_files=["res://.godot/imported/blob_shadow.png-d19f4ffceb1d99dd3331acec2dc6d7df.ctex"]
[params]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cd7oyc56ehkx1"
path="res://.godot/imported/coin.png-54d5e156d7891d9603a51f76f85b4fd9.ctex"
path.s3tc="res://.godot/imported/coin.png-54d5e156d7891d9603a51f76f85b4fd9.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://sprites/coin.png"
dest_files=["res://.godot/imported/coin.png-54d5e156d7891d9603a51f76f85b4fd9.ctex"]
dest_files=["res://.godot/imported/coin.png-54d5e156d7891d9603a51f76f85b4fd9.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
detect_3d/compress_to=0

Binary file not shown.

Binary file not shown.