generated from krampus/template-godot4
	Compare commits
	
		
			No commits in common. "424ee2f2ae4e702d12e4549ea37c28c6930c61ef" and "b1dead039febc98b094c265bf01933e869c9f986" have entirely different histories.
		
	
	
		
			424ee2f2ae
			...
			b1dead039f
		
	
		
							
								
								
									
										
											BIN
										
									
								
								asset_dev/balls/brick/brick.blend
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								asset_dev/balls/brick/brick.blend
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								asset_dev/balls/brick/brick_uv_layout.png
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								asset_dev/balls/brick/brick_uv_layout.png
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -1,120 +0,0 @@ | |||||||
| { |  | ||||||
| 	"asset":{ |  | ||||||
| 		"generator":"Khronos glTF Blender I/O v4.2.60", |  | ||||||
| 		"version":"2.0" |  | ||||||
| 	}, |  | ||||||
| 	"scene":0, |  | ||||||
| 	"scenes":[ |  | ||||||
| 		{ |  | ||||||
| 			"name":"Scene", |  | ||||||
| 			"nodes":[ |  | ||||||
| 				0 |  | ||||||
| 			] |  | ||||||
| 		} |  | ||||||
| 	], |  | ||||||
| 	"nodes":[ |  | ||||||
| 		{ |  | ||||||
| 			"mesh":0, |  | ||||||
| 			"name":"Brick" |  | ||||||
| 		} |  | ||||||
| 	], |  | ||||||
| 	"materials":[ |  | ||||||
| 		{ |  | ||||||
| 			"doubleSided":true, |  | ||||||
| 			"name":"Brick", |  | ||||||
| 			"pbrMetallicRoughness":{ |  | ||||||
| 				"baseColorFactor":[ |  | ||||||
| 					0.6121358871459961, |  | ||||||
| 					0.21650230884552002, |  | ||||||
| 					0.09049086272716522, |  | ||||||
| 					1 |  | ||||||
| 				], |  | ||||||
| 				"metallicFactor":0 |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	], |  | ||||||
| 	"meshes":[ |  | ||||||
| 		{ |  | ||||||
| 			"name":"Cube", |  | ||||||
| 			"primitives":[ |  | ||||||
| 				{ |  | ||||||
| 					"attributes":{ |  | ||||||
| 						"POSITION":0, |  | ||||||
| 						"NORMAL":1, |  | ||||||
| 						"TEXCOORD_0":2 |  | ||||||
| 					}, |  | ||||||
| 					"indices":3, |  | ||||||
| 					"material":0 |  | ||||||
| 				} |  | ||||||
| 			] |  | ||||||
| 		} |  | ||||||
| 	], |  | ||||||
| 	"accessors":[ |  | ||||||
| 		{ |  | ||||||
| 			"bufferView":0, |  | ||||||
| 			"componentType":5126, |  | ||||||
| 			"count":24, |  | ||||||
| 			"max":[ |  | ||||||
| 				0.09207499027252197, |  | ||||||
| 				0.05715000629425049, |  | ||||||
| 				0.1936749815940857 |  | ||||||
| 			], |  | ||||||
| 			"min":[ |  | ||||||
| 				-0.09207499027252197, |  | ||||||
| 				-0.05715000629425049, |  | ||||||
| 				-0.1936749815940857 |  | ||||||
| 			], |  | ||||||
| 			"type":"VEC3" |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			"bufferView":1, |  | ||||||
| 			"componentType":5126, |  | ||||||
| 			"count":24, |  | ||||||
| 			"type":"VEC3" |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			"bufferView":2, |  | ||||||
| 			"componentType":5126, |  | ||||||
| 			"count":24, |  | ||||||
| 			"type":"VEC2" |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			"bufferView":3, |  | ||||||
| 			"componentType":5123, |  | ||||||
| 			"count":36, |  | ||||||
| 			"type":"SCALAR" |  | ||||||
| 		} |  | ||||||
| 	], |  | ||||||
| 	"bufferViews":[ |  | ||||||
| 		{ |  | ||||||
| 			"buffer":0, |  | ||||||
| 			"byteLength":288, |  | ||||||
| 			"byteOffset":0, |  | ||||||
| 			"target":34962 |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			"buffer":0, |  | ||||||
| 			"byteLength":288, |  | ||||||
| 			"byteOffset":288, |  | ||||||
| 			"target":34962 |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			"buffer":0, |  | ||||||
| 			"byteLength":192, |  | ||||||
| 			"byteOffset":576, |  | ||||||
| 			"target":34962 |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			"buffer":0, |  | ||||||
| 			"byteLength":72, |  | ||||||
| 			"byteOffset":768, |  | ||||||
| 			"target":34963 |  | ||||||
| 		} |  | ||||||
| 	], |  | ||||||
| 	"buffers":[ |  | ||||||
| 		{ |  | ||||||
| 			"byteLength":840, |  | ||||||
| 			"uri":"brick.bin" |  | ||||||
| 		} |  | ||||||
| 	] |  | ||||||
| } |  | ||||||
| @ -1,36 +0,0 @@ | |||||||
| [remap] |  | ||||||
| 
 |  | ||||||
| importer="scene" |  | ||||||
| importer_version=1 |  | ||||||
| type="PackedScene" |  | ||||||
| uid="uid://b1aslqfbciwg8" |  | ||||||
| path="res://.godot/imported/brick.gltf-c734431c3027107f004874542c5d8b9c.scn" |  | ||||||
| 
 |  | ||||||
| [deps] |  | ||||||
| 
 |  | ||||||
| source_file="res://assets/models/balls/brick/brick.gltf" |  | ||||||
| dest_files=["res://.godot/imported/brick.gltf-c734431c3027107f004874542c5d8b9c.scn"] |  | ||||||
| 
 |  | ||||||
| [params] |  | ||||||
| 
 |  | ||||||
| nodes/root_type="" |  | ||||||
| nodes/root_name="" |  | ||||||
| nodes/apply_root_scale=true |  | ||||||
| nodes/root_scale=1.0 |  | ||||||
| nodes/import_as_skeleton_bones=false |  | ||||||
| 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="" |  | ||||||
| _subresources={} |  | ||||||
| gltf/naming_version=1 |  | ||||||
| gltf/embedded_image_handling=1 |  | ||||||
| @ -19,9 +19,6 @@ SETTINGS_GAME_ACCESSIBILITY_HEADING,Accessibility | |||||||
| SETTINGS_GAME_CAMERA_HEADING,Camera | SETTINGS_GAME_CAMERA_HEADING,Camera | ||||||
| SETTINGS_SCREEN_SHAKE,"Enable Screen Shake" | SETTINGS_SCREEN_SHAKE,"Enable Screen Shake" | ||||||
| SETTINGS_HIT_LAG,"Enable Hit Lag Effect" | SETTINGS_HIT_LAG,"Enable Hit Lag Effect" | ||||||
| SETTINGS_GAME_GAMEPLAY_HEADING,Gameplay |  | ||||||
| SETTINGS_PROJECTION_COLLISIONS,"Enable Shot Projection Collisions" |  | ||||||
| SETTINGS_PROJECTION_GRAVITY,"Use Local Gravity for Shot Projection" |  | ||||||
| SETTINGS_FREE_CAMERA_SPEED,"Free Camera Speed" | SETTINGS_FREE_CAMERA_SPEED,"Free Camera Speed" | ||||||
| SETTINGS_SENSITIVITY_X,"Sensitivity, Horizontal" | SETTINGS_SENSITIVITY_X,"Sensitivity, Horizontal" | ||||||
| SETTINGS_SENSITIVITY_Y,"Sensitivity, Vertical" | SETTINGS_SENSITIVITY_Y,"Sensitivity, Vertical" | ||||||
| @ -30,40 +27,6 @@ SETTINGS_ACCELERATION_Y,"Acceleration, Vertical" | |||||||
| SETTINGS_INVERT_PITCH,"Invert Pitch" | SETTINGS_INVERT_PITCH,"Invert Pitch" | ||||||
| SETTINGS_GRAPHICS,Graphics | SETTINGS_GRAPHICS,Graphics | ||||||
| SETTINGS_GRAPHICS_HEADING,"Graphics & Display" | SETTINGS_GRAPHICS_HEADING,"Graphics & Display" | ||||||
| SETTINGS_GRAPHICS_DISPLAY_HEADING,Display |  | ||||||
| SETTINGS_GRAPHICS_FULLSCREEN,Fullscreen |  | ||||||
| SETTINGS_GRAPHICS_VSYNC,V-Sync |  | ||||||
| SETTINGS_GRAPHICS_AA_HEADING,Antialiasing |  | ||||||
| SETTINGS_GRAPHICS_MSAA,MSAA |  | ||||||
| SETTINGS_GRAPHICS_MSAA_0,"Disabled (Fastest)" |  | ||||||
| SETTINGS_GRAPHICS_MSAA_2,"2× (Average)" |  | ||||||
| SETTINGS_GRAPHICS_MSAA_4,"4× (Slow)" |  | ||||||
| SETTINGS_GRAPHICS_MSAA_8,"8× (Slowest)" |  | ||||||
| SETTINGS_GRAPHICS_FXAA,"Enable FXAA" |  | ||||||
| SETTINGS_GRAPHICS_TAA,"Enable TAA" |  | ||||||
| SETTINGS_GRAPHICS_DEBANDING,"Use Debanding" |  | ||||||
| SETTINGS_GRAPHICS_TEXTURES_HEADING,Textures |  | ||||||
| SETTINGS_GRAPHICS_ANISOTROPIC,"Anisotropic Filtering Level (requires restart)" |  | ||||||
| SETTINGS_GRAPHICS_ANISOTROPIC_0,"Disabled (Fastest)" |  | ||||||
| SETTINGS_GRAPHICS_ANISOTROPIC_1,"2× (Faster)" |  | ||||||
| SETTINGS_GRAPHICS_ANISOTROPIC_2,"4× (Fast)" |  | ||||||
| SETTINGS_GRAPHICS_ANISOTROPIC_3,"8× (Average)" |  | ||||||
| SETTINGS_GRAPHICS_ANISOTROPIC_4,"16× (Slow)" |  | ||||||
| SETTINGS_GRAPHICS_LIGHTING_HEADING,"Light & Shadows" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_QUALITY,"Directional Shadow Quality (requires restart)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_QUALITY_0,"Lowest (256)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_QUALITY_1,"Low (2048)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_QUALITY_2,"Average (4096)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_QUALITY_3,"High (8192)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_QUALITY_4,"Higher (16384)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_QUALITY_5,"Ultra (32768)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_FILTER,"Directional Soft Shadow Filter Quality (requires restart)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_FILTER_0,"Hard (Fastest)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_FILTER_1,"Soft Very Low (Faster)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_FILTER_2,"Soft Low (Fast)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_FILTER_3,"Soft Medium (Average)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_FILTER_4,"Soft High (Slow)" |  | ||||||
| SETTINGS_GRAPHICS_SHADOW_FILTER_5,"Soft Ultra (Slowest)" |  | ||||||
| SETTINGS_AUDIO,Audio | SETTINGS_AUDIO,Audio | ||||||
| SETTINGS_AUDIO_HEADING,"Audio Settings" | SETTINGS_AUDIO_HEADING,"Audio Settings" | ||||||
| SETTINGS_CONTROLS,Controls | SETTINGS_CONTROLS,Controls | ||||||
| @ -101,4 +64,3 @@ CLUB_PUTTER,Putter | |||||||
| , | , | ||||||
| BALL_BASIC,Basic | BALL_BASIC,Basic | ||||||
| BALL_PLASMA,Plasma | BALL_PLASMA,Plasma | ||||||
| BALL_BRICK,Brick |  | ||||||
|  | |||||||
| 
 | 
| @ -1,11 +1,10 @@ | |||||||
| [gd_scene load_steps=62 format=3 uid="uid://bm2o3mex10v11"] | [gd_scene load_steps=61 format=3 uid="uid://bm2o3mex10v11"] | ||||||
| 
 | 
 | ||||||
| [ext_resource type="Terrain3DAssets" uid="uid://cwl34gstabgrx" path="res://levels/debug_level/terrain_assets.res" id="1_5smdk"] | [ext_resource type="Terrain3DAssets" uid="uid://cwl34gstabgrx" path="res://levels/debug_level/terrain_assets.res" id="1_5smdk"] | ||||||
| [ext_resource type="Shader" path="res://src/shaders/psx_water.gdshader" id="6_0efu4"] | [ext_resource type="Shader" path="res://src/shaders/psx_water.gdshader" id="6_0efu4"] | ||||||
| [ext_resource type="Texture2D" uid="uid://c47ern0l2d50r" path="res://assets/vista_2.png" id="6_ectru"] | [ext_resource type="Texture2D" uid="uid://c47ern0l2d50r" path="res://assets/vista_2.png" id="6_ectru"] | ||||||
| [ext_resource type="Texture2D" uid="uid://con5a36t6n6sq" path="res://assets/textures/clear_sea_water_2048x2048.png" id="7_t86h2"] | [ext_resource type="Texture2D" uid="uid://con5a36t6n6sq" path="res://assets/textures/clear_sea_water_2048x2048.png" id="7_t86h2"] | ||||||
| [ext_resource type="Script" path="res://src/world/ball_zone/ball_zone.gd" id="9_jwlau"] | [ext_resource type="Script" path="res://src/world/ball_zone/ball_zone.gd" id="9_jwlau"] | ||||||
| [ext_resource type="PackedScene" uid="uid://1s3gywmoi20e" path="res://src/characters/player_characters/gfolf_girl/gfolf_girl.tscn" id="10_8tu3b"] |  | ||||||
| [ext_resource type="PackedScene" uid="uid://dagh38vap4t1d" path="res://src/props/scenery/city/concrete_building_1.tscn" id="10_lf15j"] | [ext_resource type="PackedScene" uid="uid://dagh38vap4t1d" path="res://src/props/scenery/city/concrete_building_1.tscn" id="10_lf15j"] | ||||||
| [ext_resource type="PackedScene" uid="uid://cjubxs7peir5k" path="res://src/props/scenery/city/kana_signboard.tscn" id="11_evxup"] | [ext_resource type="PackedScene" uid="uid://cjubxs7peir5k" path="res://src/props/scenery/city/kana_signboard.tscn" id="11_evxup"] | ||||||
| [ext_resource type="PackedScene" uid="uid://di7aql54lksn7" path="res://src/props/scenery/trees/palm_tree/palm_tree.tscn" id="12_sswxf"] | [ext_resource type="PackedScene" uid="uid://di7aql54lksn7" path="res://src/props/scenery/trees/palm_tree/palm_tree.tscn" id="12_sswxf"] | ||||||
| @ -313,12 +312,7 @@ camera_attributes = SubResource("CameraAttributesPractical_ypy22") | |||||||
| transform = Transform3D(0.782608, -0.611691, 0.11558, 0, 0.185667, 0.982613, -0.622515, -0.769001, 0.145304, 0, 0, 0) | transform = Transform3D(0.782608, -0.611691, 0.11558, 0, 0.185667, 0.982613, -0.622515, -0.769001, 0.145304, 0, 0, 0) | ||||||
| shadow_enabled = true | shadow_enabled = true | ||||||
| shadow_blur = 4.0 | shadow_blur = 4.0 | ||||||
| directional_shadow_split_1 = 0.017 | directional_shadow_max_distance = 160.0 | ||||||
| directional_shadow_split_2 = 0.042 |  | ||||||
| directional_shadow_split_3 = 0.247 |  | ||||||
| directional_shadow_fade_start = 0.98 |  | ||||||
| directional_shadow_max_distance = 750.0 |  | ||||||
| directional_shadow_pancake_size = 5.0 |  | ||||||
| 
 | 
 | ||||||
| [node name="Course" type="Node3D" parent="."] | [node name="Course" type="Node3D" parent="."] | ||||||
| 
 | 
 | ||||||
| @ -380,9 +374,6 @@ draw_pass_1 = SubResource("QuadMesh_l4j8a") | |||||||
| [node name="DemoCamera" type="Camera3D" parent="Course" groups=["DemoCamera"]] | [node name="DemoCamera" type="Camera3D" parent="Course" groups=["DemoCamera"]] | ||||||
| transform = Transform3D(-0.734269, 0.305072, -0.606448, 0, 0.893336, 0.44939, 0.678858, 0.329973, -0.655949, 143.463, 90.0707, 223.738) | transform = Transform3D(-0.734269, 0.305072, -0.606448, 0, 0.893336, 0.44939, 0.678858, 0.329973, -0.655949, 143.463, 90.0707, 223.738) | ||||||
| 
 | 
 | ||||||
| [node name="GfolfGirl" parent="Course" instance=ExtResource("10_8tu3b")] |  | ||||||
| transform = Transform3D(0.909686, 0, 0.415297, 0, 1, 0, -0.415297, 0, 0.909686, 537.767, 4, 452.434) |  | ||||||
| 
 |  | ||||||
| [node name="CityBuildings" type="Node3D" parent="."] | [node name="CityBuildings" type="Node3D" parent="."] | ||||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 129.404, -9.53674e-07, 309.4) | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 129.404, -9.53674e-07, 309.4) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -62,8 +62,6 @@ config/controls/camera/invert_pitch=false | |||||||
| config/accessibility/enable_screen_shake=true | config/accessibility/enable_screen_shake=true | ||||||
| config/accessibility/enable_hit_lag=true | config/accessibility/enable_hit_lag=true | ||||||
| audio/buses/override_bus_layout="user://audio_bus_layout.tres" | audio/buses/override_bus_layout="user://audio_bus_layout.tres" | ||||||
| config/gameplay/projection/detect_collision=true |  | ||||||
| config/gameplay/projection/use_local_gravity=true |  | ||||||
| 
 | 
 | ||||||
| [global_group] | [global_group] | ||||||
| 
 | 
 | ||||||
| @ -244,5 +242,3 @@ jolt_3d/limits/max_temporary_memory=64 | |||||||
| [rendering] | [rendering] | ||||||
| 
 | 
 | ||||||
| textures/canvas_textures/default_texture_filter=0 | textures/canvas_textures/default_texture_filter=0 | ||||||
| lights_and_shadows/directional_shadow/size=8192 |  | ||||||
| lights_and_shadows/directional_shadow/soft_shadow_filter_quality=3 |  | ||||||
|  | |||||||
| @ -1,26 +0,0 @@ | |||||||
| [gd_scene load_steps=5 format=3 uid="uid://cc8molh324unk"] |  | ||||||
| 
 |  | ||||||
| [ext_resource type="PackedScene" uid="uid://dfttci386ohip" path="res://src/equipment/balls/physics_ball/physics_ball.tscn" id="1_y1dte"] |  | ||||||
| [ext_resource type="PackedScene" uid="uid://b1aslqfbciwg8" path="res://assets/models/balls/brick/brick.gltf" id="2_ubuxr"] |  | ||||||
| 
 |  | ||||||
| [sub_resource type="PhysicsMaterial" id="PhysicsMaterial_f03f4"] |  | ||||||
| rough = true |  | ||||||
| bounce = 1.0 |  | ||||||
| absorbent = true |  | ||||||
| 
 |  | ||||||
| [sub_resource type="BoxShape3D" id="BoxShape3D_7v3re"] |  | ||||||
| size = Vector3(0.147, 0.092, 0.31) |  | ||||||
| 
 |  | ||||||
| [node name="Brick" instance=ExtResource("1_y1dte")] |  | ||||||
| mass = 0.08 |  | ||||||
| physics_material_override = SubResource("PhysicsMaterial_f03f4") |  | ||||||
| radius = 0.15 |  | ||||||
| 
 |  | ||||||
| [node name="BrickMesh" parent="." index="0" instance=ExtResource("2_ubuxr")] |  | ||||||
| transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0, 0) |  | ||||||
| 
 |  | ||||||
| [node name="BallMesh" parent="." index="1"] |  | ||||||
| visible = false |  | ||||||
| 
 |  | ||||||
| [node name="CollisionShape3D" parent="." index="2"] |  | ||||||
| shape = SubResource("BoxShape3D_7v3re") |  | ||||||
| @ -9,7 +9,6 @@ enum Type { | |||||||
| 	NONE, | 	NONE, | ||||||
| 	BASIC, | 	BASIC, | ||||||
| 	PLASMA, | 	PLASMA, | ||||||
| 	BRICK, |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const TERRAIN_DAMPING_EPSILON := 1e-6 | const TERRAIN_DAMPING_EPSILON := 1e-6 | ||||||
| @ -39,9 +38,6 @@ const MAGNUS_EPSILON := 1e-3 | |||||||
| ## Scaling factor for additional force-based damage | ## Scaling factor for additional force-based damage | ||||||
| @export var damage_force_scale := 0.01 | @export var damage_force_scale := 0.01 | ||||||
| 
 | 
 | ||||||
| ## Approximate average radius, for physics purposes |  | ||||||
| @export var radius := 0.05 |  | ||||||
| 
 |  | ||||||
| var current_gravity: Vector3 | var current_gravity: Vector3 | ||||||
| 
 | 
 | ||||||
| var _last_contact_normal: Vector3 = Vector3.UP | var _last_contact_normal: Vector3 = Vector3.UP | ||||||
|  | |||||||
| @ -1,10 +1,9 @@ | |||||||
| [gd_scene load_steps=10 format=3 uid="uid://cefit4bc8akbb"] | [gd_scene load_steps=9 format=3 uid="uid://cefit4bc8akbb"] | ||||||
| 
 | 
 | ||||||
| [ext_resource type="Script" path="res://src/game/game.gd" id="1_4qa87"] | [ext_resource type="Script" path="res://src/game/game.gd" id="1_4qa87"] | ||||||
| [ext_resource type="FontFile" uid="uid://dsa0oh7c0h4pu" path="res://assets/fonts/Racing_Sans_One/RacingSansOne-Regular.ttf" id="2_y3adf"] | [ext_resource type="FontFile" uid="uid://dsa0oh7c0h4pu" path="res://assets/fonts/Racing_Sans_One/RacingSansOne-Regular.ttf" id="2_y3adf"] | ||||||
| [ext_resource type="Script" path="res://src/ui/decorations/rumbler.gd" id="3_3vfdb"] | [ext_resource type="Script" path="res://src/ui/decorations/rumbler.gd" id="3_3vfdb"] | ||||||
| [ext_resource type="Script" path="res://src/ui/game_viewport_container.gd" id="3_rmm5i"] | [ext_resource type="Script" path="res://src/ui/game_viewport_container.gd" id="3_rmm5i"] | ||||||
| [ext_resource type="Script" path="res://src/game/game_viewport.gd" id="5_v2qv5"] |  | ||||||
| 
 | 
 | ||||||
| [sub_resource type="Animation" id="Animation_c3dlb"] | [sub_resource type="Animation" id="Animation_c3dlb"] | ||||||
| length = 0.001 | length = 0.001 | ||||||
| @ -193,7 +192,6 @@ use_taa = true | |||||||
| audio_listener_enable_3d = true | audio_listener_enable_3d = true | ||||||
| size = Vector2i(1920, 1080) | size = Vector2i(1920, 1080) | ||||||
| render_target_update_mode = 4 | render_target_update_mode = 4 | ||||||
| script = ExtResource("5_v2qv5") |  | ||||||
| 
 | 
 | ||||||
| [node name="Content" type="Node" parent="RootControl/Rumbler/ViewportContainer/Viewport"] | [node name="Content" type="Node" parent="RootControl/Rumbler/ViewportContainer/Viewport"] | ||||||
| unique_name_in_owner = true | unique_name_in_owner = true | ||||||
|  | |||||||
| @ -13,9 +13,6 @@ var invert_pitch: bool | |||||||
| var enable_screen_shake: bool | var enable_screen_shake: bool | ||||||
| var enable_hit_lag: bool | var enable_hit_lag: bool | ||||||
| 
 | 
 | ||||||
| var projection_collisions: bool |  | ||||||
| var projection_gravity: bool |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| func _init() -> void: | func _init() -> void: | ||||||
| 	ProjectSettings.settings_changed.connect(_read_settings) | 	ProjectSettings.settings_changed.connect(_read_settings) | ||||||
| @ -39,13 +36,6 @@ func _read_settings() -> void: | |||||||
| 	) | 	) | ||||||
| 	enable_hit_lag = ProjectSettings.get_setting("game/config/accessibility/enable_hit_lag") | 	enable_hit_lag = ProjectSettings.get_setting("game/config/accessibility/enable_hit_lag") | ||||||
| 
 | 
 | ||||||
| 	projection_collisions = ProjectSettings.get_setting( |  | ||||||
| 		"game/config/gameplay/projection/detect_collision" |  | ||||||
| 	) |  | ||||||
| 	projection_gravity = ProjectSettings.get_setting( |  | ||||||
| 		"game/config/gameplay/projection/use_local_gravity" |  | ||||||
| 	) |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| func _load_audio_bus_override() -> void: | func _load_audio_bus_override() -> void: | ||||||
| 	# Load override audio bus file | 	# Load override audio bus file | ||||||
|  | |||||||
| @ -1,16 +0,0 @@ | |||||||
| extends SubViewport |  | ||||||
| ## Logic for dynamically resetting viewport graphics settings |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| func _ready() -> void: |  | ||||||
| 	ProjectSettings.settings_changed.connect(apply_rendering_settings) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| func apply_rendering_settings() -> void: |  | ||||||
| 	print_debug("Applying rendering settings to viewport") |  | ||||||
| 
 |  | ||||||
| 	msaa_2d = ProjectSettings.get_setting("rendering/anti_aliasing/quality/msaa_2d") |  | ||||||
| 	msaa_3d = ProjectSettings.get_setting("rendering/anti_aliasing/quality/msaa_3d") |  | ||||||
| 	screen_space_aa = ProjectSettings.get_setting("rendering/anti_aliasing/quality/screen_space_aa") |  | ||||||
| 	use_taa = ProjectSettings.get_setting("rendering/anti_aliasing/quality/use_taa") |  | ||||||
| 	use_debanding = ProjectSettings.get_setting("rendering/anti_aliasing/quality/use_debanding") |  | ||||||
| @ -17,6 +17,5 @@ wedge = ExtResource("5_wm4ae") | |||||||
| putter = ExtResource("3_tytwr") | putter = ExtResource("3_tytwr") | ||||||
| _balls = { | _balls = { | ||||||
| 1: -1, | 1: -1, | ||||||
| 2: 5, | 2: 5 | ||||||
| 3: -1 |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -8,7 +8,6 @@ signal ball_changed(ball: GameBall) | |||||||
| const SCENE_MAP: Dictionary = { | const SCENE_MAP: Dictionary = { | ||||||
| 	GameBall.Type.BASIC: preload("res://src/equipment/balls/physics_ball/physics_ball.tscn"), | 	GameBall.Type.BASIC: preload("res://src/equipment/balls/physics_ball/physics_ball.tscn"), | ||||||
| 	GameBall.Type.PLASMA: preload("res://src/equipment/balls/plasma_ball/plasma_ball.tscn"), | 	GameBall.Type.PLASMA: preload("res://src/equipment/balls/plasma_ball/plasma_ball.tscn"), | ||||||
| 	GameBall.Type.BRICK: preload("res://src/equipment/balls/brick/brick.tscn"), |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @export var ball: GameBall: | @export var ball: GameBall: | ||||||
|  | |||||||
| @ -39,9 +39,6 @@ const WATER_DAMAGE := 10.0 | |||||||
| ## Angle of influence that shot curve has, in radians | ## Angle of influence that shot curve has, in radians | ||||||
| const CURVE_INFLUENCE := PI / 16 | const CURVE_INFLUENCE := PI / 16 | ||||||
| 
 | 
 | ||||||
| ## Just enough to make things interesting! |  | ||||||
| const SHOT_OFFSET_Z_FACTOR := 2.0 / 45.0 |  | ||||||
| 
 |  | ||||||
| ## Impulse offset multiplier due to curve, in meters | ## Impulse offset multiplier due to curve, in meters | ||||||
| const CURVE_FACTOR := 0.002 | const CURVE_FACTOR := 0.002 | ||||||
| 
 | 
 | ||||||
| @ -265,16 +262,10 @@ func take_shot() -> void: | |||||||
| 	print_debug("Shot impulse: ", impulse, "; ", impulse.length(), " N*s") | 	print_debug("Shot impulse: ", impulse, "; ", impulse.length(), " N*s") | ||||||
| 
 | 
 | ||||||
| 	# Curve the curve | 	# Curve the curve | ||||||
| 	var curve := shot_curve * absf(shot_curve) * CURVE_FACTOR | 	var curve := direction.global_basis.x.normalized() * shot_curve * absf(shot_curve) | ||||||
| 
 | 
 | ||||||
| 	# Position where the ball is hit (imparts spin) | 	# Position where the ball is hit (imparts spin) | ||||||
| 	var offset := direction.global_basis.x.normalized() * -curve | 	var offset := -curve * CURVE_FACTOR | ||||||
| 	offset += ( |  | ||||||
| 		direction.global_basis.z.normalized() |  | ||||||
| 		* game_ball.radius |  | ||||||
| 		* game_ball.radius |  | ||||||
| 		* SHOT_OFFSET_Z_FACTOR |  | ||||||
| 	) |  | ||||||
| 	print_debug("Shot offset: ", offset, "; ", offset.length(), " m") | 	print_debug("Shot offset: ", offset, "; ", offset.length(), " m") | ||||||
| 
 | 
 | ||||||
| 	if game_ball: | 	if game_ball: | ||||||
|  | |||||||
| @ -22,7 +22,7 @@ const PUTT_ATTRITION := 0.8325  # green? | |||||||
| ## If enabled, project a linear putt instead of an arcing shot | ## If enabled, project a linear putt instead of an arcing shot | ||||||
| @export var putt_projection := false | @export var putt_projection := false | ||||||
| 
 | 
 | ||||||
| @export_category("Collision & Physics") | @export_category("Collision") | ||||||
| ## Enables collision checking. Projection will end at the point where a collision is detected. | ## Enables collision checking. Projection will end at the point where a collision is detected. | ||||||
| ## Uses continuous collision detection. | ## Uses continuous collision detection. | ||||||
| @export var check_collision := true | @export var check_collision := true | ||||||
| @ -32,10 +32,6 @@ const PUTT_ATTRITION := 0.8325  # green? | |||||||
| ## This should probably include the ball! | ## This should probably include the ball! | ||||||
| @export var excluded_bodies: Array[CollisionObject3D] = [] | @export var excluded_bodies: Array[CollisionObject3D] = [] | ||||||
| 
 | 
 | ||||||
| ## Enables checking local gravity at each point along the trajectory. |  | ||||||
| ## If disabled, global gravity will be used instead. |  | ||||||
| @export var check_gravity := true |  | ||||||
| 
 |  | ||||||
| var _tick_counter := 0 | var _tick_counter := 0 | ||||||
| 
 | 
 | ||||||
| var _debug_points: Array[Vector3] = [] | var _debug_points: Array[Vector3] = [] | ||||||
| @ -77,17 +73,12 @@ func _process(_delta: float) -> void: | |||||||
| 		# TODO: smooth curve with bezier handles | 		# TODO: smooth curve with bezier handles | ||||||
| 		path.curve.add_point(pos - global_position) | 		path.curve.add_point(pos - global_position) | ||||||
| 
 | 
 | ||||||
| 		# Get local gravity if enabled |  | ||||||
| 		var local_gravity := gravity * gravity_vec |  | ||||||
| 		if check_gravity and Game.settings.projection_gravity: |  | ||||||
| 			local_gravity = _get_gravity(pos) |  | ||||||
| 
 |  | ||||||
| 		# Integrate projectile path | 		# Integrate projectile path | ||||||
| 		vel += local_gravity * time_step | 		vel += gravity * gravity_vec * time_step | ||||||
| 		var next_pos := pos + vel * time_step | 		var next_pos := pos + vel * time_step | ||||||
| 
 | 
 | ||||||
| 		# Collision | 		# Collision | ||||||
| 		if check_collision and Game.settings.projection_collisions: | 		if check_collision: | ||||||
| 			var ray_params := PhysicsRayQueryParameters3D.create( | 			var ray_params := PhysicsRayQueryParameters3D.create( | ||||||
| 				pos, next_pos, collision_mask, excluded_rid | 				pos, next_pos, collision_mask, excluded_rid | ||||||
| 			) | 			) | ||||||
| @ -119,58 +110,6 @@ func _process(_delta: float) -> void: | |||||||
| 	(%DebugDraw as CanvasItem).queue_redraw() | 	(%DebugDraw as CanvasItem).queue_redraw() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| func _get_gravity(point: Vector3) -> Vector3: |  | ||||||
| 	# Start with global gravity |  | ||||||
| 	var local_gravity := gravity * gravity_vec |  | ||||||
| 
 |  | ||||||
| 	# TODO this is awful, surely there has to be a better way than this!!! |  | ||||||
| 	# Get areas at point |  | ||||||
| 	var point_params := PhysicsPointQueryParameters3D.new() |  | ||||||
| 	point_params.collide_with_areas = true |  | ||||||
| 	point_params.collide_with_bodies = false |  | ||||||
| 	point_params.collision_mask = collision_mask |  | ||||||
| 	point_params.position = point |  | ||||||
| 	var collisions := get_world_3d().direct_space_state.intersect_point(point_params) |  | ||||||
| 	var gravity_areas: Array[Area3D] = [] |  | ||||||
| 	gravity_areas.assign( |  | ||||||
| 		collisions.map(func(d: Dictionary) -> Area3D: return d["collider"] as Area3D) |  | ||||||
| 	) |  | ||||||
| 	gravity_areas.sort_custom(func(a: Area3D, b: Area3D) -> bool: return a.priority < b.priority) |  | ||||||
| 
 |  | ||||||
| 	# Iteratively integrate gravity |  | ||||||
| 	for area: Area3D in gravity_areas: |  | ||||||
| 		var point_local := point - area.global_position |  | ||||||
| 		var area_gravity: Vector3 |  | ||||||
| 		if area.gravity_point: |  | ||||||
| 			# TODO: `point` may need to be local |  | ||||||
| 			var v := area.transform * area.gravity_direction - point_local |  | ||||||
| 			if area.gravity_point_unit_distance > 0: |  | ||||||
| 				var v_sq := v.length_squared() |  | ||||||
| 				if v_sq > 0: |  | ||||||
| 					area_gravity = ( |  | ||||||
| 						v.normalized() |  | ||||||
| 						* area.gravity |  | ||||||
| 						* pow(area.gravity_point_unit_distance, 2) |  | ||||||
| 						/ v_sq |  | ||||||
| 					) |  | ||||||
| 				else: |  | ||||||
| 					area_gravity = Vector3.ZERO |  | ||||||
| 			else: |  | ||||||
| 				area_gravity = v.normalized() * area.gravity |  | ||||||
| 		else: |  | ||||||
| 			area_gravity = area.gravity * area.gravity_direction |  | ||||||
| 
 |  | ||||||
| 		match area.gravity_space_override: |  | ||||||
| 			Area3D.SPACE_OVERRIDE_COMBINE, Area3D.SPACE_OVERRIDE_COMBINE_REPLACE: |  | ||||||
| 				local_gravity += area_gravity |  | ||||||
| 			Area3D.SPACE_OVERRIDE_REPLACE_COMBINE, Area3D.SPACE_OVERRIDE_REPLACE: |  | ||||||
| 				local_gravity = area_gravity |  | ||||||
| 			Area3D.SPACE_OVERRIDE_COMBINE_REPLACE, Area3D.SPACE_OVERRIDE_REPLACE: |  | ||||||
| 				break |  | ||||||
| 
 |  | ||||||
| 	return local_gravity |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| func _on_visibility_changed() -> void: | func _on_visibility_changed() -> void: | ||||||
| 	# Force update as soon as visible | 	# Force update as soon as visible | ||||||
| 	_tick_counter = 0 | 	_tick_counter = 0 | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ class_name OrbitalCamera extends Node3D | |||||||
| 
 | 
 | ||||||
| const POSITION_ACCELERATION := 4.0 | const POSITION_ACCELERATION := 4.0 | ||||||
| const BASIS_ACCELERATION := 4.0 | const BASIS_ACCELERATION := 4.0 | ||||||
| const TARGETER_ACCELERATION := 8.0 | const TARGETER_ACCELERATION := 4.0 | ||||||
| 
 | 
 | ||||||
| @export var target: Node3D | @export var target: Node3D | ||||||
| @export var offset := Vector3(0, 1, 0) | @export var offset := Vector3(0, 1, 0) | ||||||
|  | |||||||
| @ -1,10 +0,0 @@ | |||||||
| extends "res://src/ui/menus/settings_menu/settings/checkbox_setting/checkbox_setting.gd" |  | ||||||
| ## Special case setting for fullscreen mode |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| func initialize_value(value: Variant) -> void: |  | ||||||
| 	checkbox.button_pressed = (value as Window.Mode) == Window.MODE_FULLSCREEN |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| func get_value() -> Variant: |  | ||||||
| 	return Window.MODE_FULLSCREEN if checkbox.button_pressed else Window.MODE_WINDOWED |  | ||||||
| @ -1,12 +0,0 @@ | |||||||
| extends Setting |  | ||||||
| ## Setting with a dropdown menu representing an enum value |  | ||||||
| 
 |  | ||||||
| @onready var dropdown: OptionButton = %Dropdown |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| func initialize_value(value: Variant) -> void: |  | ||||||
| 	dropdown.selected = dropdown.get_item_index(value as int) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| func get_value() -> Variant: |  | ||||||
| 	return dropdown.get_item_id(dropdown.selected) |  | ||||||
| @ -1,13 +1,9 @@ | |||||||
| [gd_scene load_steps=3 format=3 uid="uid://dpry41u0ctikn"] | [gd_scene load_steps=2 format=3 uid="uid://dpry41u0ctikn"] | ||||||
| 
 | 
 | ||||||
| [ext_resource type="PackedScene" uid="uid://dcah6r3ku60g6" path="res://src/ui/menus/settings_menu/settings/setting/setting.tscn" id="1_km84n"] | [ext_resource type="PackedScene" uid="uid://dcah6r3ku60g6" path="res://src/ui/menus/settings_menu/settings/setting/setting.tscn" id="1_km84n"] | ||||||
| [ext_resource type="Script" path="res://src/ui/menus/settings_menu/settings/dropdown_setting/dropdown_setting.gd" id="2_ubo13"] |  | ||||||
| 
 | 
 | ||||||
| [node name="DropdownSetting" instance=ExtResource("1_km84n")] | [node name="DropdownSetting" instance=ExtResource("1_km84n")] | ||||||
| script = ExtResource("2_ubo13") |  | ||||||
| 
 | 
 | ||||||
| [node name="Dropdown" type="OptionButton" parent="PanelContainer/MarginContainer" index="0"] | [node name="OptionButton" type="OptionButton" parent="PanelContainer/MarginContainer" index="0"] | ||||||
| unique_name_in_owner = true |  | ||||||
| layout_mode = 2 | layout_mode = 2 | ||||||
| selected = 0 |  | ||||||
| item_count = 1 | item_count = 1 | ||||||
|  | |||||||
| @ -1,10 +1,8 @@ | |||||||
| [gd_scene load_steps=6 format=3 uid="uid://d3eaqw2rdurct"] | [gd_scene load_steps=4 format=3 uid="uid://d3eaqw2rdurct"] | ||||||
| 
 | 
 | ||||||
| [ext_resource type="Script" path="res://src/ui/menus/settings_menu/settings_menu.gd" id="1_lbcn7"] | [ext_resource type="Script" path="res://src/ui/menus/settings_menu/settings_menu.gd" id="1_lbcn7"] | ||||||
| [ext_resource type="PackedScene" uid="uid://bpmpj4n6xp17l" path="res://src/ui/menus/settings_menu/settings/checkbox_setting/checkbox_setting.tscn" id="2_f274v"] | [ext_resource type="PackedScene" uid="uid://bpmpj4n6xp17l" path="res://src/ui/menus/settings_menu/settings/checkbox_setting/checkbox_setting.tscn" id="2_f274v"] | ||||||
| [ext_resource type="PackedScene" uid="uid://dut1lj8ju37sq" path="res://src/ui/menus/settings_menu/settings/numeric_setting/numeric_setting.tscn" id="3_jox8e"] | [ext_resource type="PackedScene" uid="uid://dut1lj8ju37sq" path="res://src/ui/menus/settings_menu/settings/numeric_setting/numeric_setting.tscn" id="3_jox8e"] | ||||||
| [ext_resource type="PackedScene" uid="uid://dpry41u0ctikn" path="res://src/ui/menus/settings_menu/settings/dropdown_setting/dropdown_setting.tscn" id="4_g7eck"] |  | ||||||
| [ext_resource type="Script" path="res://src/ui/menus/settings_menu/settings/checkbox_setting/fullscreen_setting.gd" id="4_ug1id"] |  | ||||||
| 
 | 
 | ||||||
| [node name="SettingsMenu" type="MarginContainer"] | [node name="SettingsMenu" type="MarginContainer"] | ||||||
| anchors_preset = 15 | anchors_preset = 15 | ||||||
| @ -80,32 +78,6 @@ key = &"game/config/accessibility/enable_hit_lag" | |||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/HitLag" index="1"] | [node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/HitLag" index="1"] | ||||||
| text = "SETTINGS_HIT_LAG" | text = "SETTINGS_HIT_LAG" | ||||||
| 
 | 
 | ||||||
| [node name="GameplayHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"] |  | ||||||
| layout_mode = 2 |  | ||||||
| 
 |  | ||||||
| [node name="Label" type="Label" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/GameplayHeading"] |  | ||||||
| layout_mode = 2 |  | ||||||
| theme_type_variation = &"HeaderMedium" |  | ||||||
| text = "SETTINGS_GAME_GAMEPLAY_HEADING" |  | ||||||
| 
 |  | ||||||
| [node name="HSeparator" type="HSeparator" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/GameplayHeading"] |  | ||||||
| layout_mode = 2 |  | ||||||
| size_flags_horizontal = 3 |  | ||||||
| 
 |  | ||||||
| [node name="ProjectionCollision" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("2_f274v")] |  | ||||||
| layout_mode = 2 |  | ||||||
| key = &"game/config/gameplay/projection/detect_collision" |  | ||||||
| 
 |  | ||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ProjectionCollision" index="1"] |  | ||||||
| text = "SETTINGS_PROJECTION_COLLISIONS" |  | ||||||
| 
 |  | ||||||
| [node name="ProjectionGravity" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("2_f274v")] |  | ||||||
| layout_mode = 2 |  | ||||||
| key = &"game/config/gameplay/projection/use_local_gravity" |  | ||||||
| 
 |  | ||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ProjectionGravity" index="1"] |  | ||||||
| text = "SETTINGS_PROJECTION_GRAVITY" |  | ||||||
| 
 |  | ||||||
| [node name="CameraHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"] | [node name="CameraHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"] | ||||||
| layout_mode = 2 | layout_mode = 2 | ||||||
| 
 | 
 | ||||||
| @ -222,169 +194,6 @@ theme_type_variation = &"SettingsListMargin" | |||||||
| [node name="SettingsList" type="VBoxContainer" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer"] | [node name="SettingsList" type="VBoxContainer" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer"] | ||||||
| layout_mode = 2 | layout_mode = 2 | ||||||
| 
 | 
 | ||||||
| [node name="DisplayHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"] |  | ||||||
| layout_mode = 2 |  | ||||||
| 
 |  | ||||||
| [node name="Label" type="Label" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/DisplayHeading"] |  | ||||||
| layout_mode = 2 |  | ||||||
| theme_type_variation = &"HeaderMedium" |  | ||||||
| text = "SETTINGS_GRAPHICS_DISPLAY_HEADING" |  | ||||||
| 
 |  | ||||||
| [node name="HSeparator" type="HSeparator" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/DisplayHeading"] |  | ||||||
| layout_mode = 2 |  | ||||||
| size_flags_horizontal = 3 |  | ||||||
| 
 |  | ||||||
| [node name="Fullscreen" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("2_f274v")] |  | ||||||
| layout_mode = 2 |  | ||||||
| script = ExtResource("4_ug1id") |  | ||||||
| key = &"display/window/size/mode" |  | ||||||
| 
 |  | ||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/Fullscreen" index="1"] |  | ||||||
| text = "SETTINGS_GRAPHICS_FULLSCREEN" |  | ||||||
| 
 |  | ||||||
| [node name="VSync" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("2_f274v")] |  | ||||||
| layout_mode = 2 |  | ||||||
| key = &"display/window/vsync/vsync_mode" |  | ||||||
| 
 |  | ||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/VSync" index="1"] |  | ||||||
| text = "SETTINGS_GRAPHICS_VSYNC" |  | ||||||
| 
 |  | ||||||
| [node name="AntialiasingHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"] |  | ||||||
| layout_mode = 2 |  | ||||||
| 
 |  | ||||||
| [node name="Label" type="Label" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/AntialiasingHeading"] |  | ||||||
| layout_mode = 2 |  | ||||||
| theme_type_variation = &"HeaderMedium" |  | ||||||
| text = "SETTINGS_GRAPHICS_AA_HEADING" |  | ||||||
| 
 |  | ||||||
| [node name="HSeparator" type="HSeparator" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/AntialiasingHeading"] |  | ||||||
| layout_mode = 2 |  | ||||||
| size_flags_horizontal = 3 |  | ||||||
| 
 |  | ||||||
| [node name="MSAA" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("4_g7eck")] |  | ||||||
| layout_mode = 2 |  | ||||||
| key = &"rendering/anti_aliasing/quality/msaa_3d" |  | ||||||
| 
 |  | ||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/MSAA" index="1"] |  | ||||||
| text = "SETTINGS_GRAPHICS_MSAA" |  | ||||||
| 
 |  | ||||||
| [node name="Dropdown" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/MSAA/PanelContainer/MarginContainer" index="0"] |  | ||||||
| item_count = 4 |  | ||||||
| popup/item_0/text = "SETTINGS_GRAPHICS_MSAA_0" |  | ||||||
| popup/item_1/text = "SETTINGS_GRAPHICS_MSAA_2" |  | ||||||
| popup/item_1/id = 1 |  | ||||||
| popup/item_2/text = "SETTINGS_GRAPHICS_MSAA_4" |  | ||||||
| popup/item_2/id = 2 |  | ||||||
| popup/item_3/text = "SETTINGS_GRAPHICS_MSAA_8" |  | ||||||
| popup/item_3/id = 3 |  | ||||||
| 
 |  | ||||||
| [node name="FXAA" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("2_f274v")] |  | ||||||
| layout_mode = 2 |  | ||||||
| key = &"rendering/anti_aliasing/quality/screen_space_aa" |  | ||||||
| 
 |  | ||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/FXAA" index="1"] |  | ||||||
| text = "SETTINGS_GRAPHICS_FXAA" |  | ||||||
| 
 |  | ||||||
| [node name="TAA" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("2_f274v")] |  | ||||||
| layout_mode = 2 |  | ||||||
| key = &"rendering/anti_aliasing/quality/use_taa" |  | ||||||
| 
 |  | ||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/TAA" index="1"] |  | ||||||
| text = "SETTINGS_GRAPHICS_TAA" |  | ||||||
| 
 |  | ||||||
| [node name="Debanding" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("2_f274v")] |  | ||||||
| layout_mode = 2 |  | ||||||
| key = &"rendering/anti_aliasing/quality/use_debanding" |  | ||||||
| 
 |  | ||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/Debanding" index="1"] |  | ||||||
| text = "SETTINGS_GRAPHICS_DEBANDING" |  | ||||||
| 
 |  | ||||||
| [node name="TextureHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"] |  | ||||||
| layout_mode = 2 |  | ||||||
| 
 |  | ||||||
| [node name="Label" type="Label" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/TextureHeading"] |  | ||||||
| layout_mode = 2 |  | ||||||
| theme_type_variation = &"HeaderMedium" |  | ||||||
| text = "SETTINGS_GRAPHICS_TEXTURES_HEADING" |  | ||||||
| 
 |  | ||||||
| [node name="HSeparator" type="HSeparator" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/TextureHeading"] |  | ||||||
| layout_mode = 2 |  | ||||||
| size_flags_horizontal = 3 |  | ||||||
| 
 |  | ||||||
| [node name="AnisotropicLevel" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("4_g7eck")] |  | ||||||
| layout_mode = 2 |  | ||||||
| key = &"rendering/textures/default_filters/anisotropic_filtering_level" |  | ||||||
| 
 |  | ||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/AnisotropicLevel" index="1"] |  | ||||||
| text = "SETTINGS_GRAPHICS_ANISOTROPIC" |  | ||||||
| 
 |  | ||||||
| [node name="Dropdown" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/AnisotropicLevel/PanelContainer/MarginContainer" index="0"] |  | ||||||
| item_count = 5 |  | ||||||
| popup/item_0/text = "SETTINGS_GRAPHICS_ANISOTROPIC_0" |  | ||||||
| popup/item_1/text = "SETTINGS_GRAPHICS_ANISOTROPIC_1" |  | ||||||
| popup/item_1/id = 1 |  | ||||||
| popup/item_2/text = "SETTINGS_GRAPHICS_ANISOTROPIC_2" |  | ||||||
| popup/item_2/id = 2 |  | ||||||
| popup/item_3/text = "SETTINGS_GRAPHICS_ANISOTROPIC_3" |  | ||||||
| popup/item_3/id = 3 |  | ||||||
| popup/item_4/text = "SETTINGS_GRAPHICS_ANISOTROPIC_4" |  | ||||||
| popup/item_4/id = 4 |  | ||||||
| 
 |  | ||||||
| [node name="LightingHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"] |  | ||||||
| layout_mode = 2 |  | ||||||
| 
 |  | ||||||
| [node name="Label" type="Label" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/LightingHeading"] |  | ||||||
| layout_mode = 2 |  | ||||||
| theme_type_variation = &"HeaderMedium" |  | ||||||
| text = "SETTINGS_GRAPHICS_LIGHTING_HEADING" |  | ||||||
| 
 |  | ||||||
| [node name="HSeparator" type="HSeparator" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/LightingHeading"] |  | ||||||
| layout_mode = 2 |  | ||||||
| size_flags_horizontal = 3 |  | ||||||
| 
 |  | ||||||
| [node name="DirectionalShadowQuality" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("4_g7eck")] |  | ||||||
| layout_mode = 2 |  | ||||||
| key = &"rendering/lights_and_shadows/directional_shadow/size" |  | ||||||
| 
 |  | ||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/DirectionalShadowQuality" index="1"] |  | ||||||
| text = "SETTINGS_GRAPHICS_SHADOW_QUALITY" |  | ||||||
| 
 |  | ||||||
| [node name="Dropdown" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/DirectionalShadowQuality/PanelContainer/MarginContainer" index="0"] |  | ||||||
| item_count = 6 |  | ||||||
| popup/item_0/text = "SETTINGS_GRAPHICS_SHADOW_QUALITY_0" |  | ||||||
| popup/item_0/id = 256 |  | ||||||
| popup/item_1/text = "SETTINGS_GRAPHICS_SHADOW_QUALITY_1" |  | ||||||
| popup/item_1/id = 2048 |  | ||||||
| popup/item_2/text = "SETTINGS_GRAPHICS_SHADOW_QUALITY_2" |  | ||||||
| popup/item_2/id = 4096 |  | ||||||
| popup/item_3/text = "SETTINGS_GRAPHICS_SHADOW_QUALITY_3" |  | ||||||
| popup/item_3/id = 8192 |  | ||||||
| popup/item_4/text = "SETTINGS_GRAPHICS_SHADOW_QUALITY_4" |  | ||||||
| popup/item_4/id = 16384 |  | ||||||
| popup/item_5/text = "SETTINGS_GRAPHICS_SHADOW_QUALITY_5" |  | ||||||
| popup/item_5/id = 32768 |  | ||||||
| 
 |  | ||||||
| [node name="DirectionalShadowFilter" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("4_g7eck")] |  | ||||||
| layout_mode = 2 |  | ||||||
| key = &"rendering/lights_and_shadows/directional_shadow/soft_shadow_filter_quality" |  | ||||||
| 
 |  | ||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/DirectionalShadowFilter" index="1"] |  | ||||||
| text = "SETTINGS_GRAPHICS_SHADOW_FILTER" |  | ||||||
| 
 |  | ||||||
| [node name="Dropdown" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/DirectionalShadowFilter/PanelContainer/MarginContainer" index="0"] |  | ||||||
| item_count = 6 |  | ||||||
| popup/item_0/text = "SETTINGS_GRAPHICS_SHADOW_FILTER_0" |  | ||||||
| popup/item_1/text = "SETTINGS_GRAPHICS_SHADOW_FILTER_1" |  | ||||||
| popup/item_1/id = 1 |  | ||||||
| popup/item_2/text = "SETTINGS_GRAPHICS_SHADOW_FILTER_2" |  | ||||||
| popup/item_2/id = 2 |  | ||||||
| popup/item_3/text = "SETTINGS_GRAPHICS_SHADOW_FILTER_3" |  | ||||||
| popup/item_3/id = 3 |  | ||||||
| popup/item_4/text = "SETTINGS_GRAPHICS_SHADOW_FILTER_4" |  | ||||||
| popup/item_4/id = 4 |  | ||||||
| popup/item_5/text = "SETTINGS_GRAPHICS_SHADOW_FILTER_5" |  | ||||||
| popup/item_5/id = 5 |  | ||||||
| 
 |  | ||||||
| [node name="SETTINGS_AUDIO" type="MarginContainer" parent="TabContainer"] | [node name="SETTINGS_AUDIO" type="MarginContainer" parent="TabContainer"] | ||||||
| visible = false | visible = false | ||||||
| layout_mode = 2 | layout_mode = 2 | ||||||
| @ -490,8 +299,6 @@ text = "UI_ACCEPT" | |||||||
| 
 | 
 | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ScreenShake"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ScreenShake"] | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/HitLag"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/HitLag"] | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ProjectionCollision"] |  | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ProjectionGravity"] |  | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/FreeCameraSpeed"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/FreeCameraSpeed"] | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/FreeCameraSpeed/PanelContainer/MarginContainer/NumericSlider"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/FreeCameraSpeed/PanelContainer/MarginContainer/NumericSlider"] | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/SensitivityX"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/SensitivityX"] | ||||||
| @ -499,12 +306,3 @@ text = "UI_ACCEPT" | |||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/AccelerationX"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/AccelerationX"] | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/AccelerationY"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/AccelerationY"] | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/InvertPitch"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/InvertPitch"] | ||||||
| [editable path="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/Fullscreen"] |  | ||||||
| [editable path="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/VSync"] |  | ||||||
| [editable path="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/MSAA"] |  | ||||||
| [editable path="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/FXAA"] |  | ||||||
| [editable path="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/TAA"] |  | ||||||
| [editable path="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/Debanding"] |  | ||||||
| [editable path="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/AnisotropicLevel"] |  | ||||||
| [editable path="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/DirectionalShadowQuality"] |  | ||||||
| [editable path="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/DirectionalShadowFilter"] |  | ||||||
|  | |||||||
| @ -7,7 +7,6 @@ const Y_OFFSET := { | |||||||
| 	GameBall.Type.NONE: 50, | 	GameBall.Type.NONE: 50, | ||||||
| 	GameBall.Type.BASIC: 18, | 	GameBall.Type.BASIC: 18, | ||||||
| 	GameBall.Type.PLASMA: -14, | 	GameBall.Type.PLASMA: -14, | ||||||
| 	GameBall.Type.BRICK: -46, |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @export var value: GameBall.Type: | @export var value: GameBall.Type: | ||||||
| @ -16,7 +15,6 @@ const Y_OFFSET := { | |||||||
| @onready var ball_list: VBoxContainer = %BallList | @onready var ball_list: VBoxContainer = %BallList | ||||||
| @onready var basic_icon: BallIcon = %BasicIcon | @onready var basic_icon: BallIcon = %BasicIcon | ||||||
| @onready var plasma_icon: BallIcon = %PlasmaIcon | @onready var plasma_icon: BallIcon = %PlasmaIcon | ||||||
| @onready var brick_icon: BallIcon = %BrickIcon |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| func _ready() -> void: | func _ready() -> void: | ||||||
| @ -27,7 +25,6 @@ func _ready() -> void: | |||||||
| func set_state_for_player(player: WorldPlayer) -> void: | func set_state_for_player(player: WorldPlayer) -> void: | ||||||
| 	basic_icon.quantity = player.get_balls(GameBall.Type.BASIC) | 	basic_icon.quantity = player.get_balls(GameBall.Type.BASIC) | ||||||
| 	plasma_icon.quantity = player.get_balls(GameBall.Type.PLASMA) | 	plasma_icon.quantity = player.get_balls(GameBall.Type.PLASMA) | ||||||
| 	brick_icon.quantity = player.get_balls(GameBall.Type.BRICK) |  | ||||||
| 	if player.shot_setup: | 	if player.shot_setup: | ||||||
| 		value = player.shot_setup.ball_type | 		value = player.shot_setup.ball_type | ||||||
| 	player.on_balls_changed.connect(_set_quantity) | 	player.on_balls_changed.connect(_set_quantity) | ||||||
| @ -39,8 +36,6 @@ func _get_icon(type: GameBall.Type) -> BallIcon: | |||||||
| 			return basic_icon | 			return basic_icon | ||||||
| 		GameBall.Type.PLASMA: | 		GameBall.Type.PLASMA: | ||||||
| 			return plasma_icon | 			return plasma_icon | ||||||
| 		GameBall.Type.BRICK: |  | ||||||
| 			return brick_icon |  | ||||||
| 	return null | 	return null | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -46,7 +46,7 @@ custom_minimum_size = Vector2(120, 0) | |||||||
| layout_mode = 0 | layout_mode = 0 | ||||||
| offset_top = 50.0 | offset_top = 50.0 | ||||||
| offset_right = 120.0 | offset_right = 120.0 | ||||||
| offset_bottom = 141.0 | offset_bottom = 109.0 | ||||||
| theme_override_constants/separation = 5 | theme_override_constants/separation = 5 | ||||||
| 
 | 
 | ||||||
| [node name="BasicIcon" parent="GradientMask/BallList" instance=ExtResource("1_1v8xg")] | [node name="BasicIcon" parent="GradientMask/BallList" instance=ExtResource("1_1v8xg")] | ||||||
| @ -60,11 +60,3 @@ unique_name_in_owner = true | |||||||
| custom_minimum_size = Vector2(120, 27) | custom_minimum_size = Vector2(120, 27) | ||||||
| layout_mode = 2 | layout_mode = 2 | ||||||
| text = "BALL_PLASMA" | text = "BALL_PLASMA" | ||||||
| 
 |  | ||||||
| [node name="BrickIcon" parent="GradientMask/BallList" instance=ExtResource("1_1v8xg")] |  | ||||||
| unique_name_in_owner = true |  | ||||||
| custom_minimum_size = Vector2(120, 27) |  | ||||||
| layout_mode = 2 |  | ||||||
| text = "BALL_BRICK" |  | ||||||
| quantity = 0 |  | ||||||
| empty = true |  | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| [gd_scene load_steps=13 format=3 uid="uid://dwfckgdxnwwru"] | [gd_scene load_steps=13 format=3 uid="uid://dwfckgdxnwwru"] | ||||||
| 
 | 
 | ||||||
| [ext_resource type="Texture2D" uid="uid://b1bfyk5c003se" path="res://src/world/effects/zephyr/zephyr_scale_curve.tres" id="1_opmvf"] | [ext_resource type="Texture2D" uid="uid://c0rf8luj8nbom" path="res://src/world/effects/zephyr/zephyr_scale_curve.tres" id="1_opmvf"] | ||||||
| [ext_resource type="Curve" uid="uid://5vyddepvq1ho" path="res://src/world/effects/zephyr/zephyr_mesh_curve.tres" id="2_5lvg1"] | [ext_resource type="Curve" uid="uid://5vyddepvq1ho" path="res://src/world/effects/zephyr/zephyr_mesh_curve.tres" id="2_5lvg1"] | ||||||
| [ext_resource type="Material" uid="uid://b20gam4x6f8gw" path="res://src/world/effects/zephyr/zephyr_mesh_material.tres" id="3_yxxm1"] | [ext_resource type="Material" uid="uid://b20gam4x6f8gw" path="res://src/world/effects/zephyr/zephyr_mesh_material.tres" id="3_yxxm1"] | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user