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-specific ignores
.mono/ .mono/
data_*/ data_*/
mono_crash.*.json mono_crash.*.json
# Kenney ignores
build/

@ -2,7 +2,7 @@
# Starter Kit 3D Platformer # 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) - Character controller (with double jump)
- Camera controls (rotate, zoom) - 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" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://d0cxd77jybrcn" uid="uid://d0cxd77jybrcn"
path="res://.godot/imported/lilita-one-regular.ttf-c8b840284f76789b63f3d0e62e2428a4.fontdata" path="res://.godot/imported/lilita_one_regular.ttf-68cc4ab6825bdd499d1ad608190f5213.fontdata"
[deps] [deps]
source_file="res://fonts/lilita-one-regular.ttf" source_file="res://fonts/lilita_one_regular.ttf"
dest_files=["res://.godot/imported/lilita-one-regular.ttf-c8b840284f76789b63f3d0e62e2428a4.fontdata"] dest_files=["res://.godot/imported/lilita_one_regular.ttf-68cc4ab6825bdd499d1ad608190f5213.fontdata"]
[params] [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="scene"
importer_version=1 importer_version=1
type="PackedScene" type="PackedScene"
uid="uid://brg64eln7l7wv" uid="uid://bsrmqj84lksd7"
path="res://.godot/imported/cloud.glb-53daedc24f8d7f4baa42baf232c66643.scn" path="res://.godot/imported/cloud.glb-53daedc24f8d7f4baa42baf232c66643.scn"
[deps] [deps]
@ -28,18 +28,5 @@ animation/fps=30
animation/trimming=false animation/trimming=false
animation/remove_immutable_tracks=true animation/remove_immutable_tracks=true
import_script/path="" import_script/path=""
_subresources={ _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 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 extends Area3D
var time = 0 var time := 0.0
var grabbed = false var grabbed := false
# Collecting coins # Collecting coins
@ -10,10 +10,10 @@ func _on_body_entered(body):
body.collect_coin() body.collect_coin()
Audio.play("res://audio/coin.ogg") # Play sound Audio.play("res://sounds/coin.ogg") # Play sound
$Mesh.queue_free() $Mesh.queue_free() # Make invisible
$Particles.emitting = false $Particles.emitting = false # Stop emitting stars
grabbed = true grabbed = true

@ -1,7 +1,7 @@
[gd_scene load_steps=13 format=3 uid="uid://dfpisimsgf5ce"] [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="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"] [ext_resource type="Texture2D" uid="uid://bs6puxrivhkk2" path="res://sprites/particle.png" id="3_xl1k0"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ct61v"] [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_width=1280
window/size/viewport_height=720 window/size/viewport_height=720
[editor]
movie_writer/movie_file="C:/Users/Kenney/Desktop/video-footage.avi"
[input] [input]
move_right={ move_right={
@ -61,39 +65,37 @@ jump={
} }
camera_left={ camera_left={
"deadzone": 0.5, "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) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":-1.0,"script":null)
] ]
} }
camera_right={ camera_right={
"deadzone": 0.5, "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) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null)
] ]
} }
camera_up={ camera_up={
"deadzone": 0.5, "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) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null)
] ]
} }
camera_down={ camera_down={
"deadzone": 0.5, "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) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
] ]
} }
zoom_in={ zoom_in={
"deadzone": 0.5, "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) "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(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)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null)
] ]
} }
zoom_out={ zoom_out={
"deadzone": 0.5, "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) "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(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)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"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="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="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="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="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="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://objects/platform.tscn" id="6_sdmev"]
[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://objects/platform_medium.tscn" id="7_ixpj3"]
[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://objects/platform_grass_large_round.tscn" id="8_4oh1e"]
[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://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://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="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="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"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_lg8b7"]
sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) sky_horizon_color = Color(0.67451, 0.682353, 0.698039, 1)
ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) sky_curve = 0.0175
ground_bottom_color = Color(1, 1, 1, 1)
ground_curve = 0.171484
[sub_resource type="Sky" id="Sky_nhnet"] [sub_resource type="Sky" id="Sky_7bk1c"]
sky_material = SubResource("ProceduralSkyMaterial_iakcd") sky_material = SubResource("ProceduralSkyMaterial_lg8b7")
[sub_resource type="Environment" id="Environment_kt478"] [sub_resource type="Environment" id="Environment_kt478"]
background_mode = 1 background_mode = 1
background_color = Color(0.611765, 0.643137, 0.717647, 1) background_color = Color(0.752941, 0.776471, 0.827451, 1)
sky = SubResource("Sky_nhnet") sky = SubResource("Sky_7bk1c")
ambient_light_source = 2 ambient_light_source = 2
ambient_light_color = Color(0.662745, 0.694118, 0.772549, 1) ambient_light_color = Color(0.662745, 0.694118, 0.772549, 1)
ambient_light_energy = 1.15 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] _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 point_count = 3
[sub_resource type="BoxShape3D" id="BoxShape3D_bxyhw"]
size = Vector3(30, 1, 30)
[sub_resource type="LabelSettings" id="LabelSettings_38ys3"] [sub_resource type="LabelSettings" id="LabelSettings_38ys3"]
font = ExtResource("11_dkqcs") font = ExtResource("17_tk810")
font_size = 48 font_size = 48
shadow_color = Color(0, 0, 0, 0.376471) shadow_color = Color(0, 0, 0, 0.376471)
shadow_offset = Vector2(2, 2) shadow_offset = Vector2(2, 2)
@ -108,7 +109,7 @@ normal_fade = 0.5
material_override = SubResource("StandardMaterial3D_q7stj") material_override = SubResource("StandardMaterial3D_q7stj")
cast_shadow = 0 cast_shadow = 0
amount = 60 amount = 60
mesh = ExtResource("4_dxhne") mesh = ExtResource("4_57mmn")
emission_shape = 1 emission_shape = 1
emission_sphere_radius = 0.2 emission_sphere_radius = 0.2
particle_flag_align_y = true particle_flag_align_y = true
@ -118,7 +119,7 @@ scale_amount_min = 0.75
scale_amount_curve = SubResource("Curve_xh1e2") scale_amount_curve = SubResource("Curve_xh1e2")
[node name="SoundFootsteps" type="AudioStreamPlayer" parent="Player"] [node name="SoundFootsteps" type="AudioStreamPlayer" parent="Player"]
stream = ExtResource("5_wfvi2") stream = ExtResource("5_3o1yd")
volume_db = -5.0 volume_db = -5.0
pitch_scale = 1.25 pitch_scale = 1.25
autoplay = true autoplay = true
@ -138,6 +139,9 @@ fov = 40.0
[node name="platform" parent="World" instance=ExtResource("6_sdmev")] [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) 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")] [node name="platform2" parent="World" instance=ExtResource("6_sdmev")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 2, -3) 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")] [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) 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")] [node name="platform-medium3" parent="World" instance=ExtResource("7_ixpj3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, -6) 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")] [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) 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")] [node name="coin" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0.635, 0) 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")] [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) 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")] [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) 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")] [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) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.0437, 1.97005, -2.33003)
[node name="respawn" type="Area3D" parent="World"] [node name="cube8" parent="World" instance=ExtResource("13_drtpy")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.08165e-12, -15, 2.08165e-12) 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"] [node name="cube14" parent="World" instance=ExtResource("13_drtpy")]
shape = SubResource("BoxShape3D_bxyhw") 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="."] [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) 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") label_settings = SubResource("LabelSettings_38ys3")
[connection signal="coin_collected" from="Player" to="HUD" method="_on_coin_collected"] [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"] [editable path="Player/Character"]

@ -17,7 +17,7 @@ func _ready():
available.append(p) available.append(p)
p.volume_db = -10 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 p.bus = bus

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

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

@ -44,7 +44,7 @@ func handle_input(delta):
input.y = Input.get_axis("camera_left", "camera_right") input.y = Input.get_axis("camera_left", "camera_right")
input.x = Input.get_axis("camera_up", "camera_down") 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) camera_rotation.x = clamp(camera_rotation.x, -80, -10)
# Zooming # 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" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://8ggihh27mlrr" uid="uid://8ggihh27mlrr"
path="res://.godot/imported/blob-shadow.png-3aeee6cb83ccbe2840b8892954e92142.ctex" path="res://.godot/imported/blob_shadow.png-d19f4ffceb1d99dd3331acec2dc6d7df.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://sprites/blob-shadow.png" source_file="res://sprites/blob_shadow.png"
dest_files=["res://.godot/imported/blob-shadow.png-3aeee6cb83ccbe2840b8892954e92142.ctex"] dest_files=["res://.godot/imported/blob_shadow.png-d19f4ffceb1d99dd3331acec2dc6d7df.ctex"]
[params] [params]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

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

Binary file not shown.

Binary file not shown.