Compare commits

...

4 commits

Author SHA1 Message Date
8165cda61c initial uncanny work 2025-02-28 05:31:27 -05:00
ab2d42ccd9 start of level system 2025-02-28 03:37:26 -05:00
c18a7746f7 update to godot 4.4 2025-02-27 04:54:27 -05:00
606fb98afc variable waterpole spinning 2025-02-27 04:23:32 -05:00
76 changed files with 552 additions and 42 deletions

View file

@ -0,0 +1 @@
uid://2pwfgn2flltv

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1 @@
uid://4f7muthq014i

View file

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

View file

@ -0,0 +1 @@
uid://7byord465lig

View file

@ -0,0 +1 @@
uid://2weu7mtvi6em

View file

@ -0,0 +1 @@
uid://7wsknicmgrql

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://donfbhh5giyfy"]
[ext_resource type="Script" path="res://addons/godot_state_charts/utilities/editor_debugger/editor_debugger.gd" id="1_ia1de"]
[ext_resource type="Script" uid="uid://fkbjjsmb60j6" path="res://addons/godot_state_charts/utilities/editor_debugger/editor_debugger.gd" id="1_ia1de"]
[node name="State Charts" type="VBoxContainer"]
anchors_preset = 15

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,6 +1,6 @@
[gd_scene load_steps=8 format=3 uid="uid://bephgxrkhh3e2"]
[ext_resource type="Script" path="res://addons/godot_state_charts/utilities/editor_sidebar.gd" id="1_7kcy8"]
[ext_resource type="Script" uid="uid://cm6kei7xi15jq" path="res://addons/godot_state_charts/utilities/editor_sidebar.gd" id="1_7kcy8"]
[ext_resource type="Texture2D" uid="uid://c4ojtah20jtxc" path="res://addons/godot_state_charts/atomic_state.svg" id="2_0k4pg"]
[ext_resource type="Texture2D" uid="uid://bbudjoa3ds4qj" path="res://addons/godot_state_charts/compound_state.svg" id="3_b4okj"]
[ext_resource type="Texture2D" uid="uid://dsa1nco51br8d" path="res://addons/godot_state_charts/parallel_state.svg" id="4_lmfic"]

View file

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

View file

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

View file

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

View file

@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://cvlabg8e2qbk3"]
[ext_resource type="Script" path="res://addons/godot_state_charts/utilities/event_refactor/event_refactor.gd" id="1_hh1x6"]
[ext_resource type="Script" uid="uid://ce8s0mg7ebk3f" path="res://addons/godot_state_charts/utilities/event_refactor/event_refactor.gd" id="1_hh1x6"]
[node name="event_refactor" type="ConfirmationDialog"]
initial_position = 1

View file

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

View file

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

View file

@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://bcwkugn6v3oy7"]
[ext_resource type="Script" path="res://addons/godot_state_charts/utilities/state_chart_debugger.gd" id="1_i74os"]
[ext_resource type="Script" uid="uid://b8ollw5mltgtm" path="res://addons/godot_state_charts/utilities/state_chart_debugger.gd" id="1_i74os"]
[node name="StateChartDebugger" type="MarginContainer"]
anchors_preset = 15

View file

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

View file

@ -18,6 +18,7 @@ nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true

View file

@ -18,6 +18,7 @@ nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true

View file

@ -0,0 +1 @@
uid://2vowejmm8ams

View file

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

View file

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

View file

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

View file

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bu4dwr7l6pwcv"
path="res://.godot/imported/gskin0.png-181c0e3148c4126d978cd8f14eb610d1.ctex"
path.s3tc="res://.godot/imported/gskin0.png-181c0e3148c4126d978cd8f14eb610d1.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://assets/textures/chaser/gskin0.png"
dest_files=["res://.godot/imported/gskin0.png-181c0e3148c4126d978cd8f14eb610d1.ctex"]
dest_files=["res://.godot/imported/gskin0.png-181c0e3148c4126d978cd8f14eb610d1.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.

After

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c2a63sfnh6il"
path.s3tc="res://.godot/imported/uncanny.png-738ed8a4c24053be61a387bfe7510f94.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://assets/textures/chaser/uncanny.png"
dest_files=["res://.godot/imported/uncanny.png-738ed8a4c24053be61a387bfe7510f94.s3tc.ctex"]
[params]
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=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Before After
Before After

View file

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

View file

@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://dxrvocxjk8vs3"]
[ext_resource type="Script" path="res://autoloads/scene_manager.gd" id="1_d112a"]
[ext_resource type="Script" uid="uid://dno6wobc85qrw" path="res://autoloads/scene_manager.gd" id="1_d112a"]
[node name="SceneManager" type="Node" node_paths=PackedStringArray("scene_parent")]
script = ExtResource("1_d112a")

View file

@ -1,2 +1,12 @@
class_name Level
extends Node3D
@export var info: LevelInfo
func _unhandled_input(event: InputEvent) -> void:
if event is InputEventKey:
if event.keycode == KEY_R and event.pressed:
var new_level = load(scene_file_path).instantiate()
SceneManager.change_scene(new_level)

1
levels/level.gd.uid Normal file
View file

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

6
levels/level_info.gd Normal file
View file

@ -0,0 +1,6 @@
class_name LevelInfo
extends Resource
@export var title: String
@export_range(1,5,1) var difficulty: int = 1

1
levels/level_info.gd.uid Normal file
View file

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

47
levels/level_set.gd Normal file
View file

@ -0,0 +1,47 @@
@tool
class_name LevelSet
extends Resource
@export var title: String
@export_tool_button("Update Levels") var _update_action = update_level_info
@export_dir var levels_dir: String:
set(value):
levels_dir = value
if Engine.is_editor_hint():
update_level_info()
@export var levels: Array[LevelEntry] = []
func update_level_info():
levels.clear()
if levels_dir.is_empty() or not DirAccess.dir_exists_absolute(levels_dir):
notify_property_list_changed()
return
var dir = DirAccess.open(levels_dir)
var files = Array(dir.get_files()).filter(
func(path: String):
return path.ends_with(".tscn") or path.ends_with(".scn")
) as Array[String]
for file in files:
var packed_scene = load(levels_dir + "/" + file) as PackedScene
if packed_scene:
var level = packed_scene.instantiate()
if level is Level:
var entry = LevelEntry.new()
entry.resource_name = level.info.title
entry.info = level.info
entry.scene = packed_scene
levels.append(entry)
level.free()
notify_property_list_changed()
if Engine.is_editor_hint():
ResourceSaver.save(self, resource_path)
class LevelEntry extends Resource:
@export var info: LevelInfo
@export var scene: PackedScene

1
levels/level_set.gd.uid Normal file
View file

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

65
levels/w1.tres Normal file
View file

@ -0,0 +1,65 @@
[gd_resource type="Resource" script_class="LevelSet" load_steps=16 format=3 uid="uid://btw8hqdurtu4l"]
[ext_resource type="Script" uid="uid://hmtamckjm4vm" path="res://levels/level_info.gd" id="1_aabai"]
[ext_resource type="Script" uid="uid://pgfv21pnsipl" path="res://levels/level_set.gd" id="1_wemf7"]
[ext_resource type="PackedScene" uid="uid://bkas0lj53glkn" path="res://levels/w1/1_01.tscn" id="2_e78ac"]
[ext_resource type="PackedScene" uid="uid://w0nd4xra2jf1" path="res://levels/w1/1_02.tscn" id="3_t0snc"]
[ext_resource type="PackedScene" uid="uid://brskrrxg5v5wq" path="res://levels/w1/1_03.tscn" id="4_argu4"]
[ext_resource type="PackedScene" uid="uid://3ck33ekhtriv" path="res://levels/w1/1_04.scn" id="5_qkhto"]
[sub_resource type="GDScript" id="GDScript_ue4o7"]
[sub_resource type="Resource" id="Resource_qskty"]
script = ExtResource("1_aabai")
title = "Welcome To Poo Central!"
difficulty = 1
metadata/_custom_type_script = "uid://hmtamckjm4vm"
[sub_resource type="Resource" id="Resource_ymcbg"]
resource_name = "Welcome To Golf Central!"
script = SubResource("GDScript_ue4o7")
info = SubResource("Resource_qskty")
scene = ExtResource("2_e78ac")
[sub_resource type="Resource" id="Resource_4m1at"]
script = ExtResource("1_aabai")
title = "Oogly Goo"
difficulty = 2
metadata/_custom_type_script = "uid://hmtamckjm4vm"
[sub_resource type="Resource" id="Resource_604lb"]
resource_name = "Oogly Goo"
script = SubResource("GDScript_ue4o7")
info = SubResource("Resource_4m1at")
scene = ExtResource("3_t0snc")
[sub_resource type="Resource" id="Resource_108v6"]
script = ExtResource("1_aabai")
title = "Number Three!"
difficulty = 5
metadata/_custom_type_script = "uid://hmtamckjm4vm"
[sub_resource type="Resource" id="Resource_4ntyl"]
resource_name = "Number Three!"
script = SubResource("GDScript_ue4o7")
info = SubResource("Resource_108v6")
scene = ExtResource("4_argu4")
[sub_resource type="Resource" id="Resource_ra4qo"]
script = ExtResource("1_aabai")
title = "Foursyies"
difficulty = 3
metadata/_custom_type_script = "uid://hmtamckjm4vm"
[sub_resource type="Resource" id="Resource_0h8e4"]
resource_name = "Foursyies"
script = SubResource("GDScript_ue4o7")
info = SubResource("Resource_ra4qo")
scene = ExtResource("5_qkhto")
[resource]
script = ExtResource("1_wemf7")
title = "Golf Central"
levels_dir = "res://levels/w1"
levels = Array[SubResource("GDScript_ue4o7")]([SubResource("Resource_ymcbg"), SubResource("Resource_604lb"), SubResource("Resource_4ntyl"), SubResource("Resource_0h8e4")])
metadata/_custom_type_script = "uid://pgfv21pnsipl"

View file

@ -1,12 +1,21 @@
[gd_scene load_steps=14 format=3 uid="uid://bkas0lj53glkn"]
[gd_scene load_steps=18 format=3 uid="uid://bkas0lj53glkn"]
[ext_resource type="Script" path="res://levels/level.gd" id="1_r1ilo"]
[ext_resource type="Script" uid="uid://vydhlp6ju8bw" path="res://levels/level.gd" id="1_r1ilo"]
[ext_resource type="Script" uid="uid://hmtamckjm4vm" path="res://levels/level_info.gd" id="2_61qek"]
[ext_resource type="MeshLibrary" uid="uid://bqxgr3arh0i7f" path="res://assets/mesh_libraries/w1/w1_walls.meshlib" id="2_81akk"]
[ext_resource type="PackedScene" uid="uid://cybm74xwbsivx" path="res://objects/canny_cat.tscn" id="4_emyyh"]
[ext_resource type="PackedScene" uid="uid://cdpgby3r6xe4n" path="res://objects/goal_post.tscn" id="5_oq0l4"]
[ext_resource type="Shader" path="res://assets/shaders/horizontal_world_uv.gdshader" id="6_ka4lg"]
[ext_resource type="Shader" uid="uid://c3y1ht34ep01k" path="res://assets/shaders/horizontal_world_uv.gdshader" id="6_ka4lg"]
[ext_resource type="PackedScene" uid="uid://bfic5n608nc5j" path="res://objects/sand_pit.tscn" id="6_rlgmy"]
[ext_resource type="Texture2D" uid="uid://cpmi7w2fwm2sf" path="res://assets/textures/world/checker_grass.png" id="7_3jvq7"]
[ext_resource type="PackedScene" uid="uid://bndtsprfwrkau" path="res://objects/uncanny_cat.tscn" id="7_qskty"]
[ext_resource type="PackedScene" uid="uid://13qlrib2dk36" path="res://objects/waterman_pole.tscn" id="10_qrwyj"]
[sub_resource type="Resource" id="Resource_qskty"]
script = ExtResource("2_61qek")
title = "Welcome To Golf Central!"
difficulty = 1
metadata/_custom_type_script = "uid://hmtamckjm4vm"
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_oakh3"]
sky_top_color = Color(0.270389, 0.858166, 0.929253, 1)
@ -33,18 +42,19 @@ resource_local_to_scene = true
shading_mode = 0
albedo_color = Color(0.916968, 0.113727, 0, 1)
[sub_resource type="PlaneMesh" id="PlaneMesh_roqf0"]
size = Vector2(32, 32)
[sub_resource type="BoxMesh" id="BoxMesh_25rxq"]
size = Vector3(32, 1, 32)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_tpmcl"]
render_priority = 0
shader = ExtResource("6_ka4lg")
shader_parameter/albedo_texture = ExtResource("7_3jvq7")
shader_parameter/horizontal_uv_offset = Vector2(0, 0)
shader_parameter/uv_scale = Vector2(0.5, 0.5)
shader_parameter/albedo_texture = ExtResource("7_3jvq7")
[node name="Level" type="Node3D"]
script = ExtResource("1_r1ilo")
info = SubResource("Resource_qskty")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_n6dij")
@ -85,8 +95,15 @@ polygon = PackedVector2Array(-3, -2, 1, 0, 5, 6, -3, 6)
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, -12.5406, 0, -10.5995)
polygon = PackedVector2Array(2.33224, -4.27959, 0.718879, 0.533604, 2.00957, 6.26103, -3.74475, 6.12658, -3.52964, -4.44092)
[node name="UncannyCat" parent="Objects" instance=ExtResource("7_qskty")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.89785, 0)
[node name="CSGMesh3D" type="CSGMesh3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
use_collision = true
collision_mask = 0
mesh = SubResource("PlaneMesh_roqf0")
mesh = SubResource("BoxMesh_25rxq")
material = SubResource("ShaderMaterial_tpmcl")
[node name="WatermanPole" parent="." instance=ExtResource("10_qrwyj")]
transform = Transform3D(1, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 4)

101
levels/w1/1_02.tscn Normal file

File diff suppressed because one or more lines are too long

101
levels/w1/1_03.tscn Normal file

File diff suppressed because one or more lines are too long

View file

@ -168,13 +168,15 @@ var _pole_stored_speed: float = 0.0
func _start_pole_spin() -> void:
_pole_stored_speed = flatten_vector(velocity).length()
velocity = Vector3.ZERO
floor_snap_length = 0.0
var pole_xz = flatten_vector(_attached_pole.global_position)
var self_xz = flatten_vector(global_position)
_pole_angle = Vector3.FORWARD.angle_to(self_xz - pole_xz)
func _process_pole_spin(delta: float) -> void:
var speed_factor = inverse_lerp(0.0, power_scale, _pole_stored_speed)
# rise
global_position.y += _attached_pole.rise_speed * delta
global_position.y += lerpf(0.0, _attached_pole.rise_speed, speed_factor) * delta
global_position.y = clampf(
global_position.y,
_attached_pole.global_position.y,
@ -182,7 +184,7 @@ func _process_pole_spin(delta: float) -> void:
)
# spin
_pole_angle += _attached_pole.spin_speed * delta
_pole_angle += lerpf(0.0, _attached_pole.spin_speed, speed_factor) * delta
var pole_xz = flatten_vector(_attached_pole.global_position)
var self_dir = Vector3.FORWARD.rotated(Vector3.UP, _pole_angle)
var self_xz = pole_xz + self_dir * _attached_pole.offset
@ -194,6 +196,7 @@ func _end_pole_spin() -> void:
var impulse = Vector3.FORWARD.rotated(Vector3.UP, _pole_angle) * _pole_stored_speed
velocity.x = impulse.x
velocity.z = impulse.z
floor_snap_length = 0.1
#endregion

1
objects/canny_cat.gd.uid Normal file
View file

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

View file

@ -1,17 +1,17 @@
[gd_scene load_steps=20 format=3 uid="uid://cybm74xwbsivx"]
[ext_resource type="Texture2D" uid="uid://3i17aqnrspma" path="res://assets/textures/player/canny.png" id="1_cp4br"]
[ext_resource type="Script" path="res://objects/canny_cat.gd" id="1_twfq8"]
[ext_resource type="Script" uid="uid://b04ridmyf6571" path="res://objects/canny_cat.gd" id="1_twfq8"]
[ext_resource type="Texture2D" uid="uid://bqg7vd5r7w8tm" path="res://assets/textures/shadow.png" id="2_fwt6m"]
[ext_resource type="AudioStream" uid="uid://7u8a6osl4buo" path="res://assets/sounds/player/grab.ogg" id="4_hojxu"]
[ext_resource type="Script" path="res://addons/godot_state_charts/state_chart.gd" id="4_n67yk"]
[ext_resource type="Script" path="res://addons/godot_state_charts/compound_state.gd" id="5_ox6hb"]
[ext_resource type="Script" uid="uid://dsjiox4ahsvqn" path="res://addons/godot_state_charts/state_chart.gd" id="4_n67yk"]
[ext_resource type="Script" uid="uid://1csmnvxpk1j3" path="res://addons/godot_state_charts/compound_state.gd" id="5_ox6hb"]
[ext_resource type="AudioStream" uid="uid://dis5fg68ese7r" path="res://assets/sounds/player/cancel.ogg" id="5_v6u4q"]
[ext_resource type="AudioStream" uid="uid://dnyjfcq8m2r4f" path="res://assets/sounds/player/hit.ogg" id="6_a7neg"]
[ext_resource type="Script" path="res://addons/godot_state_charts/atomic_state.gd" id="6_bu01i"]
[ext_resource type="Script" uid="uid://kctk5uejlaoh" path="res://addons/godot_state_charts/atomic_state.gd" id="6_bu01i"]
[ext_resource type="AudioStream" uid="uid://bv4plfa1oj3tf" path="res://assets/sounds/player/wall_bump.ogg" id="7_8ee3y"]
[ext_resource type="Script" path="res://addons/godot_state_charts/transition.gd" id="7_epv8h"]
[ext_resource type="Script" path="res://addons/godot_state_charts/expression_guard.gd" id="8_d5slg"]
[ext_resource type="Script" uid="uid://clasig0wood63" path="res://addons/godot_state_charts/transition.gd" id="7_epv8h"]
[ext_resource type="Script" uid="uid://m32s76pjucg7" path="res://addons/godot_state_charts/expression_guard.gd" id="8_d5slg"]
[sub_resource type="Gradient" id="Gradient_u5ds4"]
interpolation_mode = 2
@ -52,7 +52,7 @@ resource_name = "Not Moving"
script = ExtResource("8_d5slg")
expression = "velocity.is_zero_approx()"
[node name="CannyCat" type="CharacterBody3D" node_paths=PackedStringArray("state_chart", "graphics", "power_indicator", "camera_arm", "collision_shape")]
[node name="CannyCat" type="CharacterBody3D" node_paths=PackedStringArray("state_chart", "graphics", "power_indicator", "camera_arm", "collision_shape") groups=["chaser_target"]]
process_priority = -100
process_physics_priority = -100
collision_layer = 16
@ -87,7 +87,7 @@ shape = SubResource("SphereShape3D_4o01j")
[node name="Graphics" type="Node3D" parent="."]
[node name="CannySprite" type="Sprite3D" parent="Graphics"]
pixel_size = 0.0156
pixel_size = 0.0313
billboard = 1
texture_filter = 0
texture = ExtResource("1_cp4br")
@ -136,7 +136,7 @@ mesh = SubResource("CylinderMesh_b16dl")
[node name="CameraArm" type="SpringArm3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, 0, 0, 0)
collision_mask = 8
spring_length = 8.0
spring_length = 7.0
[node name="Camera3D" type="Camera3D" parent="CameraArm"]
current = true
@ -213,9 +213,9 @@ delay_in_seconds = "0.0"
[connection signal="charge_canceled" from="." to="Sounds/ChargeCancel" method="play"]
[connection signal="shot" from="." to="Sounds/Shoot" method="play"]
[connection signal="state_physics_processing" from="StateChart/Root/Idle" to="." method="_apply_gravity"]
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_bounce_on_walls"]
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_slow_to_stop"]
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_apply_gravity"]
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_slow_to_stop"]
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_bounce_on_walls"]
[connection signal="state_entered" from="StateChart/Root/Charging" to="." method="_start_charge"]
[connection signal="state_entered" from="StateChart/Root/Charging" to="Sounds/ChargeStart" method="play"]
[connection signal="state_exited" from="StateChart/Root/Charging" to="." method="_end_charge"]

1
objects/goal_post.gd.uid Normal file
View file

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

View file

@ -1,9 +1,9 @@
[gd_scene load_steps=17 format=3 uid="uid://cdpgby3r6xe4n"]
[ext_resource type="Script" path="res://objects/goal_post.gd" id="1_08x2x"]
[ext_resource type="Shader" path="res://assets/shaders/flag.gdshader" id="2_xbid5"]
[ext_resource type="Script" uid="uid://dbec3pvrmeehx" path="res://objects/goal_post.gd" id="1_08x2x"]
[ext_resource type="Shader" uid="uid://bk3ssuhuvbahl" path="res://assets/shaders/flag.gdshader" id="2_xbid5"]
[ext_resource type="Texture2D" uid="uid://cyxkbck2gs2wt" path="res://assets/textures/objects/goal_hole.png" id="3_yg6kd"]
[ext_resource type="Shader" path="res://assets/shaders/confetti_spin.gdshader" id="4_2tajh"]
[ext_resource type="Shader" uid="uid://bwh16agcnae24" path="res://assets/shaders/confetti_spin.gdshader" id="4_2tajh"]
[sub_resource type="Gradient" id="Gradient_lo531"]
interpolation_mode = 1

1
objects/sand_pit.gd.uid Normal file
View file

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

View file

@ -1,15 +1,15 @@
[gd_scene load_steps=5 format=3 uid="uid://bfic5n608nc5j"]
[ext_resource type="Shader" path="res://assets/shaders/horizontal_world_uv.gdshader" id="1_2mr0t"]
[ext_resource type="Shader" uid="uid://c3y1ht34ep01k" path="res://assets/shaders/horizontal_world_uv.gdshader" id="1_2mr0t"]
[ext_resource type="Texture2D" uid="uid://djx2x3jjn01w2" path="res://assets/textures/world/sand.png" id="1_yg8om"]
[ext_resource type="Script" path="res://objects/sand_pit.gd" id="2_vtyum"]
[ext_resource type="Script" uid="uid://b7vjcer1ah68k" path="res://objects/sand_pit.gd" id="2_vtyum"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_7s0pr"]
render_priority = 0
shader = ExtResource("1_2mr0t")
shader_parameter/albedo_texture = ExtResource("1_yg8om")
shader_parameter/horizontal_uv_offset = Vector2(0, 0)
shader_parameter/uv_scale = Vector2(1, 1)
shader_parameter/albedo_texture = ExtResource("1_yg8om")
[node name="SandPit" type="CSGPolygon3D" node_paths=PackedStringArray("collision_polygon")]
process_physics_priority = 100

1
objects/skull.gd.uid Normal file
View file

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

View file

@ -1,6 +1,6 @@
[gd_scene load_steps=6 format=3 uid="uid://b4a8aif3iigdw"]
[ext_resource type="Script" path="res://objects/skull.gd" id="1_ledhy"]
[ext_resource type="Script" uid="uid://cg1ki7xt2uvjl" path="res://objects/skull.gd" id="1_ledhy"]
[ext_resource type="PackedScene" uid="uid://46kyrtlb6b0a" path="res://assets/models/enemies/boney.glb" id="2_lwsb0"]
[ext_resource type="AudioStream" uid="uid://cgotekctoej7m" path="res://assets/sounds/enemies/skull_death.ogg" id="3_6ybas"]

26
objects/uncanny_cat.gd Normal file
View file

@ -0,0 +1,26 @@
extends CharacterBody3D
@export var acceleration: float
@export var speed: float
@export var vertical_speed: float
func _physics_process(delta: float) -> void:
var target: Node3D = null
for node in get_tree().get_nodes_in_group(&"chaser_target"):
if node is Node3D:
if not target or (
global_position.distance_squared_to(node.global_position) <
global_position.distance_squared_to(target.global_position)
):
target = node
if target:
velocity += global_position.direction_to(target.global_position) * acceleration * delta
velocity = velocity.limit_length(speed)
velocity.y = (target.global_position.y - global_position.y) * vertical_speed
var col = move_and_collide(velocity * delta)
if col:
velocity = velocity.bounce(col.get_normal())

View file

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

47
objects/uncanny_cat.tscn Normal file
View file

@ -0,0 +1,47 @@
[gd_scene load_steps=6 format=3 uid="uid://bndtsprfwrkau"]
[ext_resource type="Script" uid="uid://1mhmcaluavhg" path="res://objects/uncanny_cat.gd" id="1_bsm3e"]
[ext_resource type="Texture2D" uid="uid://c2a63sfnh6il" path="res://assets/textures/chaser/uncanny.png" id="2_eotxf"]
[sub_resource type="SphereShape3D" id="SphereShape3D_eotxf"]
radius = 0.45
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_eotxf"]
transparency = 3
alpha_hash_scale = 1.0
alpha_antialiasing_mode = 0
no_depth_test = true
shading_mode = 0
albedo_color = Color(1, 0, 0, 0.501961)
albedo_texture = ExtResource("2_eotxf")
texture_filter = 0
billboard_mode = 1
[sub_resource type="SphereShape3D" id="SphereShape3D_ixuei"]
[node name="UncannyCat" type="CharacterBody3D"]
collision_layer = 32
collision_mask = 32
motion_mode = 1
script = ExtResource("1_bsm3e")
acceleration = 0.6
speed = 1.5
vertical_speed = 0.5
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("SphereShape3D_eotxf")
[node name="Sprite3D" type="Sprite3D" parent="."]
material_overlay = SubResource("StandardMaterial3D_eotxf")
pixel_size = 0.0313
billboard = 1
texture_filter = 0
texture = ExtResource("2_eotxf")
[node name="PlayerDetector" type="Area3D" parent="."]
collision_layer = 0
collision_mask = 16
monitorable = false
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerDetector"]
shape = SubResource("SphereShape3D_ixuei")

View file

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

View file

@ -1,7 +1,7 @@
[gd_scene load_steps=7 format=3 uid="uid://13qlrib2dk36"]
[ext_resource type="Script" path="res://objects/waterman_pole.gd" id="1_8whes"]
[ext_resource type="Shader" path="res://assets/shaders/barber_shop.gdshader" id="2_dukp0"]
[ext_resource type="Script" uid="uid://gqdkco5gmxpu" path="res://objects/waterman_pole.gd" id="1_8whes"]
[ext_resource type="Shader" uid="uid://2vowejmm8ams" path="res://assets/shaders/barber_shop.gdshader" id="2_dukp0"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_2dh7w"]
render_priority = 0

View file

@ -11,8 +11,8 @@ config_version=5
[application]
config/name="ucg-3d"
run/main_scene="res://test_scene.tscn"
config/features=PackedStringArray("4.3", "GL Compatibility")
run/main_scene="uid://bkas0lj53glkn"
config/features=PackedStringArray("4.4", "GL Compatibility")
config/icon="res://icon.svg"
[autoload]
@ -36,6 +36,7 @@ import/blender/enabled=false
[global_group]
friction_floor=""
chaser_target="Targets that chaser enemies will lock on to."
[input]
@ -51,6 +52,7 @@ charge_shot={
3d_physics/layer_2="friction"
3d_physics/layer_3="water"
3d_physics/layer_5="player"
3d_physics/layer_6="uncanny"
[rendering]