Compare commits

...

9 Commits

Author SHA1 Message Date
Kenney 35069ae0fc Upgraded to Godot 4.5
Upgraded to Godot 4.5, added a skybox, small tweaks and changes, and breakable blocks!
2025-09-16 21:21:01 +07:00
Kenney 8a00aa235f
Merge pull request #28 from Calinou/update-to-godot-4.4.1
Update to Godot 4.4.1, fix visuals in web export
2025-09-16 18:54:47 +07:00
Kenney 050df82317
Merge pull request #25 from Joseph-DiGiovanni/falling-platform-fix
Make falling platform frame rate independent
2025-09-16 18:54:14 +07:00
Kenney b965ff4346
Merge pull request #26 from Joseph-DiGiovanni/analog-animation-fix
Fix walking animation speed with analog movement
2025-09-16 18:53:53 +07:00
Hugo Locurcio 136af9113c
Update to Godot 4.4.1, fix visuals in web export
This performs various upgrades and fixes:

- Use lossless compression for all textures to improve quality and fix
  textures on the web export. Textures are very small in size, so they didn't
  use much memory in the first place anyway.
- Adjust the appearance when running under the Compatibility rendering method
  (including the web export), so that the scene brightness roughly matches
  Forward+.
- Enable physics interpolation for smoother visuals when the rendering
  FPS doesn't match the physics tick rate (60 in this project).
- Switch the physics engine to Jolt Physics for faster, more reliable physics.
- Use the `canvas_items` stretch mode to scale 2D elements automatically.
- Remove redundant CanvasLayer node for the HUD (not needed in 3D games).
- Tweak the HUD to constrain the coin display to a 16:9 aspect ratio, so that
  the coin display isn't too far away on ultrawide displays.
2025-07-29 02:39:08 +07:00
Joseph DiGiovanni ffa7ca6857 Use physics_process to move falling platform 2025-02-25 20:14:28 +07:00
Joseph DiGiovanni 767f0f052f Reorganize falling platform logic 2025-02-25 20:14:28 +07:00
Joseph DiGiovanni 1fe809c95d Fix walking animation speed with analog movement 2025-02-25 17:20:10 +07:00
Joseph DiGiovanni 3c0bc7b645 Make falling platform frame rate independent 2025-02-25 16:52:10 +07:00
65 changed files with 1356 additions and 81 deletions

@ -23,6 +23,7 @@ allow_system_fallback=true
force_autohinter=false
hinting=1
subpixel_positioning=1
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
fallbacks=[]

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

@ -3,22 +3,23 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://0odt7cvj574e"
path.bptc="res://.godot/imported/colormap.png-c1bc3c3aabeec406ff4b53328583776a.bptc.ctex"
path="res://.godot/imported/colormap.png-c1bc3c3aabeec406ff4b53328583776a.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
"vram_texture": false
}
[deps]
source_file="res://models/Textures/colormap.png"
dest_files=["res://.godot/imported/colormap.png-c1bc3c3aabeec406ff4b53328583776a.bptc.ctex"]
dest_files=["res://.godot/imported/colormap.png-c1bc3c3aabeec406ff4b53328583776a.ctex"]
[params]
compress/mode=2
compress/mode=0
compress/high_quality=true
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@ -26,6 +27,10 @@ mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

Binary file not shown.

@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bda8mco5tke2b"
path="res://.godot/imported/block-coin.glb-26799c6efd41074eeb3f7c8566032c8e.scn"
[deps]
source_file="res://models/block-coin.glb"
dest_files=["res://.godot/imported/block-coin.glb-26799c6efd41074eeb3f7c8566032c8e.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1

Binary file not shown.

@ -0,0 +1,54 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bl20a5n3hd1ld"
path="res://.godot/imported/brick-particle.glb-1ce284ed15b9117800af66cc9e326935.scn"
[deps]
source_file="res://models/brick-particle.glb"
dest_files=["res://.godot/imported/brick-particle.glb-1ce284ed15b9117800af66cc9e326935.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={
"meshes": {
"brick-particle_brick-particle": {
"generate/lightmap_uv": 0,
"generate/lods": 0,
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 20.0,
"save_to_file/enabled": true,
"save_to_file/fallback_path": "res://meshes/brick.res",
"save_to_file/path": "uid://bkyb0o2ipxxya"
}
}
}
gltf/naming_version=2
gltf/embedded_image_handling=1

Binary file not shown.

@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cs417o1y08xb1"
path="res://.godot/imported/brick.glb-e638d8c24b1ef123aeb8188535621295.scn"
[deps]
source_file="res://models/brick.glb"
dest_files=["res://.godot/imported/brick.glb-e638d8c24b1ef123aeb8188535621295.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=0.75
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=1
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

@ -15,9 +15,12 @@ dest_files=["res://.godot/imported/cloud.glb-53daedc24f8d7f4baa42baf232c66643.sc
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
@ -31,6 +34,9 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=0
gltf/embedded_image_handling=1

Binary file not shown.

@ -15,9 +15,12 @@ dest_files=["res://.godot/imported/coin.glb-71ddb7e9cec3b646e7e111521df88060.scn
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
@ -31,6 +34,9 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=0
gltf/embedded_image_handling=1

@ -0,0 +1,8 @@
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://booc27br2ap2l"]
[ext_resource type="Texture2D" uid="uid://0odt7cvj574e" path="res://models/Textures/colormap.png" id="1_0ut8r"]
[resource]
resource_name = "colormap"
cull_mode = 2
albedo_texture = ExtResource("1_0ut8r")

Binary file not shown.

@ -15,9 +15,12 @@ dest_files=["res://.godot/imported/dust.glb-1353ca834ae15b165f2b80c04f99a5a8.scn
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
@ -31,6 +34,9 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=0
gltf/embedded_image_handling=1

Binary file not shown.

@ -15,9 +15,12 @@ dest_files=["res://.godot/imported/flag.glb-0b6fa3c4b5180c1221a26057702dcf53.scn
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
@ -31,6 +34,9 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=0
gltf/embedded_image_handling=1

Binary file not shown.

@ -15,9 +15,12 @@ dest_files=["res://.godot/imported/grass-small.glb-0be1c06405ef2ce478dc00acb5be5
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
@ -31,6 +34,9 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=0
gltf/embedded_image_handling=1

Binary file not shown.

@ -15,9 +15,12 @@ dest_files=["res://.godot/imported/grass.glb-0ce858eae1c69c894a569863f13e24f1.sc
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
@ -31,6 +34,9 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=0
gltf/embedded_image_handling=1

Binary file not shown.

@ -15,9 +15,12 @@ dest_files=["res://.godot/imported/platform-falling.glb-a1321a8710589d27b2a6e247
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
@ -31,6 +34,9 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=0
gltf/embedded_image_handling=1

@ -15,9 +15,12 @@ dest_files=["res://.godot/imported/platform-grass-large-round.glb-1baa8c47f88d67
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
@ -31,6 +34,9 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=0
gltf/embedded_image_handling=1

Binary file not shown.

@ -15,9 +15,12 @@ dest_files=["res://.godot/imported/platform-large.glb-0787c0d4110cac7aeebc2ebcb5
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
@ -31,6 +34,9 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=0
gltf/embedded_image_handling=1

Binary file not shown.

@ -15,9 +15,12 @@ dest_files=["res://.godot/imported/platform-medium.glb-fef62c5a42cae1343dea58f53
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
@ -31,6 +34,9 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=0
gltf/embedded_image_handling=1

Binary file not shown.

@ -15,9 +15,12 @@ dest_files=["res://.godot/imported/platform.glb-3476c7cd272116fb58fd5d0a0eddb703
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
@ -31,6 +34,9 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=0
gltf/embedded_image_handling=1

@ -0,0 +1,32 @@
extends StaticBody3D
@onready var bottom_detector = $BottomDetector
@onready var mesh = $Mesh
@onready var particles = $Particles
var exploded = false
func _ready():
bottom_detector.body_entered.connect(_on_bottom_hit)
func _on_bottom_hit(body: Node3D) -> void:
if body.is_in_group("player"):
explode()
func explode():
if exploded:
return
exploded = true
Audio.play("res://sounds/break.ogg") # Play sound
particles.restart()
mesh.hide()
$CollisionShape3D.disabled = true
bottom_detector.monitoring = false
await get_tree().create_timer(1).timeout
queue_free()

@ -0,0 +1 @@
uid://b1egvfagp7vs1

@ -0,0 +1,70 @@
[gd_scene load_steps=12 format=3 uid="uid://85ldumyetgou"]
[ext_resource type="PackedScene" uid="uid://cs417o1y08xb1" path="res://models/brick.glb" id="1_lex57"]
[ext_resource type="Script" uid="uid://b1egvfagp7vs1" path="res://objects/brick.gd" id="2_hbwgr"]
[ext_resource type="Material" uid="uid://booc27br2ap2l" path="res://models/colormap.tres" id="3_2u2la"]
[ext_resource type="ArrayMesh" uid="uid://ddrdfs0j71wla" path="res://meshes/brick.res" id="4_pm7ss"]
[sub_resource type="BoxShape3D" id="BoxShape3D_a8y0u"]
size = Vector3(0.75, 0.75, 0.75)
[sub_resource type="BoxShape3D" id="BoxShape3D_jkv2x"]
size = Vector3(0.5, 0.25, 0.5)
[sub_resource type="Gradient" id="Gradient_pm7ss"]
colors = PackedColorArray(0.996094, 0.910156, 0.351563, 1, 1, 1, 1, 1)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_1o7s2"]
gradient = SubResource("Gradient_pm7ss")
[sub_resource type="Curve" id="Curve_y3bws"]
_data = [Vector2(0.0075757504, 0.8651686), 0.0, 0.018773995, 0, 0, Vector2(0.9924243, 0), -3.356592, 0.0, 0, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_iwokp"]
curve = SubResource("Curve_y3bws")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_mi6g1"]
particle_flag_align_y = true
particle_flag_disable_z = true
emission_shape = 1
emission_sphere_radius = 0.6
direction = Vector3(0, 10, 0)
spread = 40.0
initial_velocity_min = 4.0
initial_velocity_max = 6.0
linear_accel_min = -2.0000021
linear_accel_max = -1.0000023
scale_min = 0.29999998
scale_curve = SubResource("CurveTexture_iwokp")
color_ramp = SubResource("GradientTexture1D_1o7s2")
[node name="brick" type="StaticBody3D"]
script = ExtResource("2_hbwgr")
[node name="Mesh" parent="." instance=ExtResource("1_lex57")]
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.375, 0)
shape = SubResource("BoxShape3D_a8y0u")
[node name="BottomDetector" type="Area3D" parent="."]
[node name="CollisionShape3D" type="CollisionShape3D" parent="BottomDetector"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.1, 0)
shape = SubResource("BoxShape3D_jkv2x")
[node name="Particles" type="GPUParticles3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25192702, 0)
material_override = ExtResource("3_2u2la")
emitting = false
amount = 5
one_shot = true
preprocess = 0.1
speed_scale = 1.25
explosiveness = 1.0
randomness = 1.0
fixed_fps = 60
local_coords = true
process_material = SubResource("ParticleProcessMaterial_mi6g1")
draw_pass_1 = ExtResource("4_pm7ss")

@ -0,0 +1 @@
uid://dlh7g3g207i7c

@ -1,7 +1,7 @@
[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"]
[ext_resource type="Script" uid="uid://dlh7g3g207i7c" path="res://objects/cloud.gd" id="2_hugjq"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_m5bs8"]
transparency = 1

@ -0,0 +1 @@
uid://0gfgixhikw1y

File diff suppressed because one or more lines are too long

@ -1,19 +1,19 @@
extends Node3D
var falling := false
var gravity := 0.0
var fall_velocity := 0.0
func _process(delta):
func _physics_process(delta):
scale = scale.lerp(Vector3(1, 1, 1), delta * 10) # Animate scale
position.y -= gravity * delta
if falling:
fall_velocity += 15.0 * delta
position.y -= fall_velocity * delta
else:
fall_velocity = 0.0
if position.y < -10:
queue_free() # Remove platform if below threshold
if falling:
gravity += 0.25
func _on_body_entered(_body):
if !falling:

@ -0,0 +1 @@
uid://c1yo3ijh0gjjt

@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://c8up71en5djgm"]
[ext_resource type="PackedScene" uid="uid://biyd6x403gvny" path="res://models/platform-falling.glb" id="1_gkggt"]
[ext_resource type="Script" path="res://objects/platform_falling.gd" id="2_6ganw"]
[ext_resource type="Script" uid="uid://c1yo3ijh0gjjt" path="res://objects/platform_falling.gd" id="2_6ganw"]
[sub_resource type="BoxShape3D" id="BoxShape3D_t551e"]
size = Vector3(2, 0.1, 2)

@ -1,6 +1,6 @@
[gd_scene load_steps=9 format=3 uid="uid://dl2ed4gkybggf"]
[gd_scene load_steps=11 format=3 uid="uid://dl2ed4gkybggf"]
[ext_resource type="Script" path="res://scripts/player.gd" id="1_ffboj"]
[ext_resource type="Script" uid="uid://br1k30d32naot" path="res://scripts/player.gd" id="1_ffboj"]
[ext_resource type="PackedScene" uid="uid://c0e27836xgmhi" path="res://objects/character.tscn" id="2_nero3"]
[ext_resource type="Texture2D" uid="uid://8ggihh27mlrr" path="res://sprites/blob_shadow.png" id="3_0c7wt"]
[ext_resource type="ArrayMesh" uid="uid://deu06eho4c74" path="res://meshes/dust.res" id="4_mvhqy"]
@ -23,8 +23,19 @@ 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="CurveTexture" id="CurveTexture_f46kd"]
curve = SubResource("Curve_xh1e2")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_3rerk"]
particle_flag_align_y = true
emission_shape = 1
emission_sphere_radius = 0.2
direction = Vector3(0, 0, 0)
gravity = Vector3(0, 0.1, 0)
scale_min = 0.75
scale_curve = SubResource("CurveTexture_f46kd")
[node name="Player" type="CharacterBody3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
script = ExtResource("1_ffboj")
[node name="Collider" type="CollisionShape3D" parent="."]
@ -40,18 +51,14 @@ texture_albedo = ExtResource("3_0c7wt")
modulate = Color(1, 1, 1, 0.705882)
normal_fade = 0.5
[node name="ParticlesTrail" type="CPUParticles3D" parent="."]
[node name="ParticlesTrail" type="GPUParticles3D" parent="."]
physics_interpolation_mode = 2
material_override = SubResource("StandardMaterial3D_q7stj")
cast_shadow = 0
amount = 60
mesh = ExtResource("4_mvhqy")
emission_shape = 1
emission_sphere_radius = 0.2
particle_flag_align_y = true
direction = Vector3(0, 0, 0)
gravity = Vector3(0, 0.1, 0)
scale_amount_min = 0.75
scale_amount_curve = SubResource("Curve_xh1e2")
fixed_fps = 0
process_material = SubResource("ParticleProcessMaterial_3rerk")
draw_pass_1 = ExtResource("4_mvhqy")
[node name="SoundFootsteps" type="AudioStreamPlayer" parent="."]
stream = ExtResource("5_ics1s")

@ -13,7 +13,7 @@ config_version=5
config/name="Starter Kit 3D Platformer"
config/tags=PackedStringArray("starterkit")
run/main_scene="res://scenes/main.tscn"
config/features=PackedStringArray("4.3", "Forward Plus")
config/features=PackedStringArray("4.5", "Forward Plus")
boot_splash/bg_color=Color(0.92549, 0.92549, 0.960784, 1)
boot_splash/image="res://splash-screen.png"
config/icon="res://icon.png"
@ -26,6 +26,8 @@ Audio="*res://scripts/audio.gd"
window/size/viewport_width=1280
window/size/viewport_height=720
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
[editor]
@ -104,6 +106,11 @@ zoom_out={
]
}
[physics]
3d/physics_engine="Jolt Physics"
common/physics_interpolation=true
[rendering]
anti_aliasing/quality/screen_space_aa=1

@ -1,22 +1,21 @@
[gd_resource type="Environment" load_steps=3 format=3 uid="uid://bqnqgflivjvue"]
[gd_resource type="Environment" load_steps=4 format=3 uid="uid://bqnqgflivjvue"]
[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
[ext_resource type="Texture2D" uid="uid://cb7sdk1i5rx04" path="res://sprites/skybox.png" id="1_u3n42"]
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_cme76"]
panorama = ExtResource("1_u3n42")
[sub_resource type="Sky" id="Sky_7bk1c"]
sky_material = SubResource("ProceduralSkyMaterial_lg8b7")
sky_material = SubResource("PanoramaSkyMaterial_cme76")
[resource]
background_mode = 1
background_mode = 2
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
ambient_light_color = Color(0.80999845, 0.843779, 0.9999983, 1)
tonemap_mode = 2
tonemap_exposure = 0.9
ssao_enabled = true
ssao_radius = 0.45
ssao_intensity = 1.0
@ -26,3 +25,7 @@ glow_levels/2 = 0.6
glow_levels/3 = 0.6
glow_levels/5 = 0.0
glow_intensity = 2.0
adjustment_enabled = true
adjustment_brightness = 0.9
adjustment_contrast = 1.1
adjustment_saturation = 1.1

@ -1,15 +1,17 @@
[gd_scene load_steps=15 format=3 uid="uid://bqqgyqafm7xwp"]
[gd_scene load_steps=17 format=3 uid="uid://bqqgyqafm7xwp"]
[ext_resource type="Environment" uid="uid://bqnqgflivjvue" path="res://scenes/main-environment.tres" id="1_ahusb"]
[ext_resource type="Script" uid="uid://djpme521r3cxe" path="res://scripts/main.gd" id="1_jkv2x"]
[ext_resource type="PackedScene" uid="uid://dl2ed4gkybggf" path="res://objects/player.tscn" id="2_onms2"]
[ext_resource type="Script" path="res://scripts/view.gd" id="5_bg0fr"]
[ext_resource type="Script" uid="uid://bcg2kkbsnttec" path="res://scripts/view.gd" id="5_bg0fr"]
[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://objects/coin.tscn" id="10_fwhys"]
[ext_resource type="Script" path="res://scripts/hud.gd" id="11_apvpm"]
[ext_resource type="Script" uid="uid://bap462su1xjtx" path="res://scripts/hud.gd" id="11_apvpm"]
[ext_resource type="PackedScene" uid="uid://85ldumyetgou" path="res://objects/brick.tscn" id="12_jkv2x"]
[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"]
@ -21,11 +23,13 @@ shadow_color = Color(0, 0, 0, 0.376471)
shadow_offset = Vector2(2, 2)
[node name="Main" type="Node3D"]
script = ExtResource("1_jkv2x")
[node name="Environment" type="WorldEnvironment" parent="."]
environment = ExtResource("1_ahusb")
[node name="Player" parent="." node_paths=PackedStringArray("view") instance=ExtResource("2_onms2")]
[node name="Player" parent="." node_paths=PackedStringArray("view") groups=["player"] instance=ExtResource("2_onms2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.49277484, 0)
view = NodePath("../View")
[node name="View" type="Node3D" parent="." node_paths=PackedStringArray("target")]
@ -46,6 +50,12 @@ transform = Transform3D(0.993085, 0, -0.117399, 0, 1, 0, 0.117399, 0, 0.993085,
[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="platform5" parent="World" instance=ExtResource("6_sdmev")]
transform = Transform3D(0.993085, 0, -0.117399, 0, 1, 0, 0.117399, 0, 0.993085, -21.925076, 0.3466103, -2.6836262)
[node name="platform6" parent="World" instance=ExtResource("6_sdmev")]
transform = Transform3D(0.9779442, 0, 0.20886743, 0, 1, 0, -0.20886743, 0, 0.9779442, -22.07586, 1.5132568, -4.765484)
[node name="platform2" parent="World" instance=ExtResource("6_sdmev")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 2, -3)
@ -76,6 +86,9 @@ transform = Transform3D(0.939693, 0, 0.34202, 0, 1, 0, -0.34202, 0, 0.939693, -1
[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)
[node name="platform-grass-large-round2" parent="World" instance=ExtResource("8_4oh1e")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.31048, 1, 2.8319645)
[node name="flag" parent="World" instance=ExtResource("9_fw1f5")]
transform = Transform3D(0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, 0.707107, 0, 3.48077, -6)
@ -109,6 +122,18 @@ 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="coin11" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.7093306, 5.3392777, -2.0042212)
[node name="coin12" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.979, 1.7754431, 2.8622048)
[node name="coin13" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22.11739, 2.56071, -4.7569985)
[node name="coin14" parent="World" instance=ExtResource("10_fwhys")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22.11739, 3.320589, -4.7569985)
[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)
@ -119,26 +144,47 @@ transform = Transform3D(1.27593, -0.401864, 0.422933, 0.471408, 1.30937, -0.1780
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)
transform = Transform3D(0.476646, 0.924607, 0.941422, -0.929853, 0.945559, -0.457882, -0.93624, -0.468385, 0.934042, -9.467535, 2.0381904, 11.509415)
[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)
transform = Transform3D(-1.02876, -0.695523, 0.652886, -0.929853, 0.945557, -0.457881, -0.213027, -0.768461, -1.15432, -9.201835, 2.7950804, 13.743215)
[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="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)
transform = Transform3D(1.56209, -1.37982, 1.71508, 1.97375, 1.80907, -0.342241, -0.974547, 1.4522, 2.05595, -14.152035, 2.0381904, 10.065234)
[node name="brick" parent="World" instance=ExtResource("12_jkv2x")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.119135, 1.9857206, -0.08861771)
[node name="brick2" parent="World" instance=ExtResource("12_jkv2x")]
transform = Transform3D(0.8552648, 0, -0.5181912, 0, 1, 0, 0.5181912, 0, 0.8552648, -6.7635055, 3.2150104, -2.0195704)
[node name="brick3" parent="World" instance=ExtResource("12_jkv2x")]
transform = Transform3D(0.93908226, 0, 0.34369248, 0, 1, 0, -0.34369248, 0, 0.93908226, -19.034018, 3.215011, 2.869449)
[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)
shadow_enabled = true
shadow_opacity = 0.75
[node name="HUD" type="CanvasLayer" parent="."]
[node name="HUD" type="Control" parent="."]
layout_mode = 3
anchors_preset = 13
anchor_left = 0.5
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -640.0
offset_right = 640.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 8
size_flags_vertical = 8
script = ExtResource("11_apvpm")
[node name="Icon" type="TextureRect" parent="HUD"]
layout_mode = 0
offset_left = 57.0
offset_top = 67.0
offset_right = 313.0
@ -147,19 +193,23 @@ scale = Vector2(0.2, 0.2)
texture = ExtResource("13_jfda3")
[node name="x" type="Label" parent="HUD"]
layout_mode = 0
offset_left = 112.0
offset_top = 64.0
offset_right = 144.0
offset_bottom = 123.0
text = "×"
label_settings = SubResource("LabelSettings_38ys3")
metadata/_edit_use_anchors_ = true
[node name="Coins" type="Label" parent="HUD"]
layout_mode = 0
offset_left = 144.0
offset_top = 64.0
offset_right = 368.0
offset_bottom = 123.0
text = "0"
label_settings = SubResource("LabelSettings_38ys3")
metadata/_edit_use_anchors_ = true
[connection signal="coin_collected" from="Player" to="HUD" method="_on_coin_collected"]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 322 KiB

@ -0,0 +1 @@
uid://71e1lia2abr7

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

@ -0,0 +1 @@
uid://bap462su1xjtx

@ -0,0 +1,11 @@
extends Node3D
func _ready() -> void:
if RenderingServer.get_current_rendering_method() == "gl_compatibility":
# Reduce background and sun brightness when using the Compatibility renderer;
# this tries to roughly match the appearance of Forward+.
# This compensates for the different color space and light rendering for lights with shadows enabled.
$Sun.light_energy = 0.24
$Sun.shadow_opacity = 0.85
$Environment.environment.background_energy_multiplier = 0.25

@ -0,0 +1 @@
uid://djpme521r3cxe

@ -93,6 +93,12 @@ func handle_effects(delta):
elif animation.current_animation != "idle":
animation.play("idle", 0.1)
if animation.current_animation == "walk":
animation.speed_scale = speed_factor
else:
animation.speed_scale = 1.0
elif animation.current_animation != "jump":
animation.play("jump", 0.1)

@ -0,0 +1 @@
uid://br1k30d32naot

@ -0,0 +1 @@
uid://bcg2kkbsnttec

Binary file not shown.

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

@ -3,22 +3,23 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cd7oyc56ehkx1"
path.s3tc="res://.godot/imported/coin.png-54d5e156d7891d9603a51f76f85b4fd9.s3tc.ctex"
path="res://.godot/imported/coin.png-54d5e156d7891d9603a51f76f85b4fd9.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
"vram_texture": false
}
[deps]
source_file="res://sprites/coin.png"
dest_files=["res://.godot/imported/coin.png-54d5e156d7891d9603a51f76f85b4fd9.s3tc.ctex"]
dest_files=["res://.godot/imported/coin.png-54d5e156d7891d9603a51f76f85b4fd9.ctex"]
[params]
compress/mode=2
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@ -26,6 +27,10 @@ mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

@ -3,22 +3,23 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bs6puxrivhkk2"
path.s3tc="res://.godot/imported/particle.png-9c8c1748211b697ea72e6a5d18d7f578.s3tc.ctex"
path="res://.godot/imported/particle.png-9c8c1748211b697ea72e6a5d18d7f578.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
"vram_texture": false
}
[deps]
source_file="res://sprites/particle.png"
dest_files=["res://.godot/imported/particle.png-9c8c1748211b697ea72e6a5d18d7f578.s3tc.ctex"]
dest_files=["res://.godot/imported/particle.png-9c8c1748211b697ea72e6a5d18d7f578.ctex"]
[params]
compress/mode=2
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@ -26,6 +27,10 @@ mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cb7sdk1i5rx04"
path.bptc="res://.godot/imported/skybox.png-3a75a15c5dbffccdaa926738885bd0eb.bptc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://sprites/skybox.png"
dest_files=["res://.godot/imported/skybox.png-3a75a15c5dbffccdaa926738885bd0eb.bptc.ctex"]
[params]
compress/mode=2
compress/high_quality=true
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=false
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0