Repository: StayAtHomeDev-Git/FPS-Godot-Basic-Setup Branch: main Commit: 51b268bd45d2 Files: 17 Total size: 15.7 MB Directory structure: gitextract_erq62iwz/ ├── .gitattributes ├── .gitignore ├── README.md ├── controllers/ │ ├── fps_controller.tscn │ └── scripts/ │ └── fps_controller.gd ├── environment/ │ └── WE_test.tres ├── icon.svg.import ├── levels/ │ ├── WE_test.tscn │ └── level_001.tscn ├── materials/ │ ├── grid.tres │ └── player.tres ├── project.godot ├── readme_img.png.import ├── shaders/ │ └── grid.gdshader └── textures/ ├── grid.jpg.import ├── industrial_sunset_puresky_4k.hdr └── industrial_sunset_puresky_4k.hdr.import ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ # Auto detect text files and perform LF normalization * text=auto ================================================ FILE: .gitignore ================================================ .godot/ ================================================ FILE: README.md ================================================ # FPS Godot Basic Setup ![alt text](https://github.com/StayAtHomeDev-Git/FPS-Godot-Basic-Setup/blob/main/readme_img.png) These are the project files for the first episode of my "FPS Godot Engine Project" video tutorial series. That video series can be found here: # Installation Version: Godot Engine 4.1 - Git or Download the Zip - Place project files into a project folder - Import project into the Godot Engine The project comes with all the source code from the tutorial video and any test levels or resources (materials, nodes, etc). # License Agreement Copyright (c) 2023 StayAtHomeDev, LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # Sponsors Thanks to all the sponsors of this project! Geekeh ================================================ FILE: controllers/fps_controller.tscn ================================================ [gd_scene load_steps=5 format=3 uid="uid://c3ffql15mo0aj"] [ext_resource type="Script" path="res://controllers/scripts/fps_controller.gd" id="1_pgc1p"] [ext_resource type="Material" uid="uid://b4gwd5h7ixvct" path="res://materials/player.tres" id="2_gldw4"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_u6tj1"] [sub_resource type="CapsuleMesh" id="CapsuleMesh_6tv51"] material = ExtResource("2_gldw4") [node name="CharacterBody3D" type="CharacterBody3D" node_paths=PackedStringArray("CAMERA_CONTROLLER")] script = ExtResource("1_pgc1p") MOUSE_SENSITIVITY = 0.25 CAMERA_CONTROLLER = NodePath("CameraController/Camera3D") [node name="CollisionShape3D" type="CollisionShape3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) shape = SubResource("CapsuleShape3D_u6tj1") [node name="PlaceholderMesh" type="MeshInstance3D" parent="CollisionShape3D"] mesh = SubResource("CapsuleMesh_6tv51") [node name="CameraController" type="Node3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0) [node name="Camera3D" type="Camera3D" parent="CameraController"] [node name="ReflectionProbe" type="ReflectionProbe" parent="CameraController/Camera3D"] update_mode = 1 enable_shadows = true ================================================ FILE: controllers/scripts/fps_controller.gd ================================================ extends CharacterBody3D @export var SPEED : float = 5.0 @export var JUMP_VELOCITY : float = 4.5 @export var MOUSE_SENSITIVITY : float = 0.5 @export var TILT_LOWER_LIMIT := deg_to_rad(-90.0) @export var TILT_UPPER_LIMIT := deg_to_rad(90.0) @export var CAMERA_CONTROLLER : Camera3D var _mouse_input : bool = false var _rotation_input : float var _tilt_input : float var _mouse_rotation : Vector3 var _player_rotation : Vector3 var _camera_rotation : Vector3 # Get the gravity from the project settings to be synced with RigidBody nodes. var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") func _unhandled_input(event: InputEvent) -> void: _mouse_input = event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED if _mouse_input: _rotation_input = -event.relative.x * MOUSE_SENSITIVITY _tilt_input = -event.relative.y * MOUSE_SENSITIVITY func _input(event): if event.is_action_pressed("exit"): get_tree().quit() func _update_camera(delta): # Rotates camera using euler rotation _mouse_rotation.x += _tilt_input * delta _mouse_rotation.x = clamp(_mouse_rotation.x, TILT_LOWER_LIMIT, TILT_UPPER_LIMIT) _mouse_rotation.y += _rotation_input * delta _player_rotation = Vector3(0.0,_mouse_rotation.y,0.0) _camera_rotation = Vector3(_mouse_rotation.x,0.0,0.0) CAMERA_CONTROLLER.transform.basis = Basis.from_euler(_camera_rotation) global_transform.basis = Basis.from_euler(_player_rotation) CAMERA_CONTROLLER.rotation.z = 0.0 _rotation_input = 0.0 _tilt_input = 0.0 func _ready(): # Get mouse input Input.mouse_mode = Input.MOUSE_MODE_CAPTURED func _physics_process(delta): # Update camera movement based on mouse movement _update_camera(delta) # Add the gravity. if not is_on_floor(): velocity.y -= gravity * delta # Handle Jump. if Input.is_action_just_pressed("jump") and is_on_floor(): velocity.y = JUMP_VELOCITY # Get the input direction and handle the movement/deceleration. # As good practice, you should replace UI actions with custom gameplay actions. var input_dir = Input.get_vector("move_left", "move_right", "move_forward", "move_backward") var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() if direction: velocity.x = direction.x * SPEED velocity.z = direction.z * SPEED else: velocity.x = move_toward(velocity.x, 0, SPEED) velocity.z = move_toward(velocity.z, 0, SPEED) move_and_slide() ================================================ FILE: environment/WE_test.tres ================================================ [gd_resource type="Environment" load_steps=4 format=3 uid="uid://dsay4gdr8k6ur"] [ext_resource type="Texture2D" uid="uid://b1jvh1ehiaebt" path="res://textures/industrial_sunset_puresky_4k.hdr" id="1_iwpli"] [sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_cmrwf"] panorama = ExtResource("1_iwpli") [sub_resource type="Sky" id="Sky_0poj2"] sky_material = SubResource("PanoramaSkyMaterial_cmrwf") [resource] background_mode = 2 sky = SubResource("Sky_0poj2") ambient_light_source = 3 reflected_light_source = 2 volumetric_fog_density = 0.017 ================================================ FILE: icon.svg.import ================================================ [remap] importer="texture" type="CompressedTexture2D" uid="uid://dskt1ln2x8owi" path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" metadata={ "vram_texture": false } [deps] source_file="res://icon.svg" dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] [params] compress/mode=0 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/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=1 svg/scale=1.0 editor/scale_with_editor_scale=false editor/convert_colors_with_editor_theme=false ================================================ FILE: levels/WE_test.tscn ================================================ [gd_scene load_steps=2 format=3 uid="uid://btv0a42cgxt8g"] [ext_resource type="Environment" uid="uid://dsay4gdr8k6ur" path="res://environment/WE_test.tres" id="1_cvy6j"] [node name="WorldEnvironment" type="WorldEnvironment"] environment = ExtResource("1_cvy6j") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] transform = Transform3D(0.905183, -0.346446, -0.246207, 0, -0.579281, 0.815128, -0.425021, -0.73784, -0.524356, 0, 0, 0) shadow_enabled = true ================================================ FILE: levels/level_001.tscn ================================================ [gd_scene load_steps=14 format=3 uid="uid://b1yleqbb8tc7x"] [ext_resource type="PackedScene" uid="uid://btv0a42cgxt8g" path="res://levels/WE_test.tscn" id="1_db21n"] [ext_resource type="Material" uid="uid://cn1gsy15bkaff" path="res://materials/grid.tres" id="2_x5xie"] [ext_resource type="Texture2D" uid="uid://ivvpsi314b34" path="res://textures/grid.jpg" id="3_yfwkt"] [ext_resource type="PackedScene" uid="uid://c3ffql15mo0aj" path="res://controllers/fps_controller.tscn" id="4_liofc"] [sub_resource type="BoxMesh" id="BoxMesh_gd0ev"] material = ExtResource("2_x5xie") size = Vector3(20, 0.5, 20) [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_oahyi"] data = PackedVector3Array(-10, 0.25, 10, 10, 0.25, 10, -10, -0.25, 10, 10, 0.25, 10, 10, -0.25, 10, -10, -0.25, 10, 10, 0.25, -10, -10, 0.25, -10, 10, -0.25, -10, -10, 0.25, -10, -10, -0.25, -10, 10, -0.25, -10, 10, 0.25, 10, 10, 0.25, -10, 10, -0.25, 10, 10, 0.25, -10, 10, -0.25, -10, 10, -0.25, 10, -10, 0.25, -10, -10, 0.25, 10, -10, -0.25, -10, -10, 0.25, 10, -10, -0.25, 10, -10, -0.25, -10, 10, 0.25, 10, -10, 0.25, 10, 10, 0.25, -10, -10, 0.25, 10, -10, 0.25, -10, 10, 0.25, -10, -10, -0.25, 10, 10, -0.25, 10, -10, -0.25, -10, 10, -0.25, 10, 10, -0.25, -10, -10, -0.25, -10) [sub_resource type="Shader" id="Shader_cwof1"] code = "// NOTE: Shader automatically converted from Godot Engine 4.1.dev4's StandardMaterial3D. shader_type spatial; render_mode blend_mix,depth_draw_opaque,cull_back,diffuse_burley,specular_schlick_ggx; uniform vec4 albedo : source_color; uniform sampler2D texture_albedo : source_color,filter_linear_mipmap,repeat_enable; uniform float point_size : hint_range(0,128); uniform float roughness : hint_range(0,1); uniform sampler2D texture_metallic : hint_default_white,filter_linear_mipmap,repeat_enable; uniform vec4 metallic_texture_channel; uniform sampler2D texture_roughness : hint_roughness_r,filter_linear_mipmap,repeat_enable; uniform float specular; uniform float metallic; varying vec3 uv1_triplanar_pos; uniform float uv1_blend_sharpness; varying vec3 uv1_power_normal; uniform vec3 uv1_scale; uniform vec3 uv1_offset; uniform vec3 uv2_scale; uniform vec3 uv2_offset; void vertex() { TANGENT = vec3(0.0,0.0,-1.0) * abs(NORMAL.x); TANGENT+= vec3(1.0,0.0,0.0) * abs(NORMAL.y); TANGENT+= vec3(1.0,0.0,0.0) * abs(NORMAL.z); TANGENT = normalize(TANGENT); BINORMAL = vec3(0.0,1.0,0.0) * abs(NORMAL.x); BINORMAL+= vec3(0.0,0.0,-1.0) * abs(NORMAL.y); BINORMAL+= vec3(0.0,1.0,0.0) * abs(NORMAL.z); BINORMAL = normalize(BINORMAL); uv1_power_normal=pow(abs(NORMAL),vec3(uv1_blend_sharpness)); uv1_triplanar_pos = VERTEX * uv1_scale + uv1_offset; uv1_power_normal/=dot(uv1_power_normal,vec3(1.0)); uv1_triplanar_pos *= vec3(1.0,-1.0, 1.0); } vec4 triplanar_texture(sampler2D p_sampler,vec3 p_weights,vec3 p_triplanar_pos) { vec4 samp=vec4(0.0); samp+= texture(p_sampler,p_triplanar_pos.xy) * p_weights.z; samp+= texture(p_sampler,p_triplanar_pos.xz) * p_weights.y; samp+= texture(p_sampler,p_triplanar_pos.zy * vec2(-1.0,1.0)) * p_weights.x; return samp; } void fragment() { vec4 albedo_tex = triplanar_texture(texture_albedo,uv1_power_normal,uv1_triplanar_pos); ALBEDO = (albedo.rgb * albedo_tex.r) + albedo_tex.g + albedo_tex.b; float metallic_tex = dot(triplanar_texture(texture_metallic,uv1_power_normal,uv1_triplanar_pos),metallic_texture_channel); METALLIC = metallic_tex * metallic; vec4 roughness_texture_channel = vec4(1.0,0.0,0.0,0.0); float roughness_tex = dot(triplanar_texture(texture_roughness,uv1_power_normal,uv1_triplanar_pos),roughness_texture_channel); ROUGHNESS = (1.0 - albedo_tex.g) * roughness; SPECULAR = specular; } " [sub_resource type="ShaderMaterial" id="ShaderMaterial_0racc"] render_priority = 0 shader = SubResource("Shader_cwof1") shader_parameter/albedo = Color(0.937255, 1, 0, 1) shader_parameter/point_size = 1.0 shader_parameter/roughness = 0.5 shader_parameter/metallic_texture_channel = Plane(1, 0, 0, 0) shader_parameter/specular = 0.5 shader_parameter/metallic = 0.0 shader_parameter/uv1_blend_sharpness = 1.0 shader_parameter/uv1_scale = Vector3(0.5, 0.5, 0.5) shader_parameter/uv1_offset = Vector3(0.5, 0.5, 0.5) shader_parameter/uv2_scale = Vector3(1, 1, 1) shader_parameter/uv2_offset = Vector3(0, 0, 0) shader_parameter/texture_albedo = ExtResource("3_yfwkt") shader_parameter/texture_roughness = ExtResource("3_yfwkt") [sub_resource type="BoxMesh" id="BoxMesh_xc4gq"] material = SubResource("ShaderMaterial_0racc") size = Vector3(2, 2, 2) [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_vp4dy"] data = PackedVector3Array(-1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1) [sub_resource type="ShaderMaterial" id="ShaderMaterial_62u37"] render_priority = 0 shader = SubResource("Shader_cwof1") shader_parameter/albedo = Color(0, 0.67451, 0, 1) shader_parameter/point_size = 1.0 shader_parameter/roughness = 0.5 shader_parameter/metallic_texture_channel = Plane(1, 0, 0, 0) shader_parameter/specular = 0.5 shader_parameter/metallic = 0.0 shader_parameter/uv1_blend_sharpness = 1.0 shader_parameter/uv1_scale = Vector3(0.5, 0.5, 0.5) shader_parameter/uv1_offset = Vector3(1, 0.5, 0.5) shader_parameter/uv2_scale = Vector3(1, 1, 1) shader_parameter/uv2_offset = Vector3(0, 0, 0) shader_parameter/texture_albedo = ExtResource("3_yfwkt") shader_parameter/texture_roughness = ExtResource("3_yfwkt") [sub_resource type="PrismMesh" id="PrismMesh_rutao"] material = SubResource("ShaderMaterial_62u37") left_to_right = 0.0 size = Vector3(8, 2, 2) [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_j6kcl"] data = PackedVector3Array(-4, 1, 1, 4, -1, 1, -4, -1, 1, -4, 1, -1, -4, -1, -1, 4, -1, -1, -4, 1, 1, -4, 1, -1, 4, -1, 1, -4, 1, -1, 4, -1, -1, 4, -1, 1, -4, 1, -1, -4, 1, 1, -4, -1, -1, -4, 1, 1, -4, -1, 1, -4, -1, -1, -4, -1, 1, 4, -1, 1, -4, -1, -1, 4, -1, 1, 4, -1, -1, -4, -1, -1) [node name="Node3D" type="Node3D"] [node name="WorldEnvironment" parent="." instance=ExtResource("1_db21n")] [node name="Floor" type="MeshInstance3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.25, 0) mesh = SubResource("BoxMesh_gd0ev") [node name="StaticBody3D" type="StaticBody3D" parent="Floor"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Floor/StaticBody3D"] shape = SubResource("ConcavePolygonShape3D_oahyi") [node name="Box" type="MeshInstance3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 1, -5) mesh = SubResource("BoxMesh_xc4gq") [node name="StaticBody3D" type="StaticBody3D" parent="Box"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Box/StaticBody3D"] shape = SubResource("ConcavePolygonShape3D_vp4dy") [node name="Ramp" type="MeshInstance3D" parent="."] transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 5, 0, 0) mesh = SubResource("PrismMesh_rutao") skeleton = NodePath("../Box") [node name="StaticBody3D" type="StaticBody3D" parent="Ramp"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Ramp/StaticBody3D"] shape = SubResource("ConcavePolygonShape3D_j6kcl") [node name="CharacterBody3D" parent="." instance=ExtResource("4_liofc")] ================================================ FILE: materials/grid.tres ================================================ [gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://cn1gsy15bkaff"] [ext_resource type="Texture2D" uid="uid://ivvpsi314b34" path="res://textures/grid.jpg" id="1_57ppx"] [sub_resource type="Shader" id="Shader_cwof1"] code = "// NOTE: Shader automatically converted from Godot Engine 4.1.dev4's StandardMaterial3D. shader_type spatial; render_mode blend_mix,depth_draw_opaque,cull_back,diffuse_burley,specular_schlick_ggx; uniform vec4 albedo : source_color; uniform sampler2D texture_albedo : source_color,filter_linear_mipmap,repeat_enable; uniform float point_size : hint_range(0,128); uniform float roughness : hint_range(0,1); uniform sampler2D texture_metallic : hint_default_white,filter_linear_mipmap,repeat_enable; uniform vec4 metallic_texture_channel; uniform sampler2D texture_roughness : hint_roughness_r,filter_linear_mipmap,repeat_enable; uniform float specular; uniform float metallic; varying vec3 uv1_triplanar_pos; uniform float uv1_blend_sharpness; varying vec3 uv1_power_normal; uniform vec3 uv1_scale; uniform vec3 uv1_offset; uniform vec3 uv2_scale; uniform vec3 uv2_offset; void vertex() { TANGENT = vec3(0.0,0.0,-1.0) * abs(NORMAL.x); TANGENT+= vec3(1.0,0.0,0.0) * abs(NORMAL.y); TANGENT+= vec3(1.0,0.0,0.0) * abs(NORMAL.z); TANGENT = normalize(TANGENT); BINORMAL = vec3(0.0,1.0,0.0) * abs(NORMAL.x); BINORMAL+= vec3(0.0,0.0,-1.0) * abs(NORMAL.y); BINORMAL+= vec3(0.0,1.0,0.0) * abs(NORMAL.z); BINORMAL = normalize(BINORMAL); uv1_power_normal=pow(abs(NORMAL),vec3(uv1_blend_sharpness)); uv1_triplanar_pos = VERTEX * uv1_scale + uv1_offset; uv1_power_normal/=dot(uv1_power_normal,vec3(1.0)); uv1_triplanar_pos *= vec3(1.0,-1.0, 1.0); } vec4 triplanar_texture(sampler2D p_sampler,vec3 p_weights,vec3 p_triplanar_pos) { vec4 samp=vec4(0.0); samp+= texture(p_sampler,p_triplanar_pos.xy) * p_weights.z; samp+= texture(p_sampler,p_triplanar_pos.xz) * p_weights.y; samp+= texture(p_sampler,p_triplanar_pos.zy * vec2(-1.0,1.0)) * p_weights.x; return samp; } void fragment() { vec4 albedo_tex = triplanar_texture(texture_albedo,uv1_power_normal,uv1_triplanar_pos); ALBEDO = (albedo.rgb * albedo_tex.r) + albedo_tex.g + albedo_tex.b; float metallic_tex = dot(triplanar_texture(texture_metallic,uv1_power_normal,uv1_triplanar_pos),metallic_texture_channel); METALLIC = metallic_tex * metallic; vec4 roughness_texture_channel = vec4(1.0,0.0,0.0,0.0); float roughness_tex = dot(triplanar_texture(texture_roughness,uv1_power_normal,uv1_triplanar_pos),roughness_texture_channel); ROUGHNESS = (1.0 - albedo_tex.g) * roughness; SPECULAR = specular; } " [resource] render_priority = 0 shader = SubResource("Shader_cwof1") shader_parameter/albedo = Color(0, 0, 0, 1) shader_parameter/point_size = 1.0 shader_parameter/roughness = 0.5 shader_parameter/metallic_texture_channel = Plane(1, 0, 0, 0) shader_parameter/specular = 0.5 shader_parameter/metallic = 0.0 shader_parameter/uv1_blend_sharpness = 1.0 shader_parameter/uv1_scale = Vector3(0.5, 0.5, 0.5) shader_parameter/uv1_offset = Vector3(0, 0, 0) shader_parameter/uv2_scale = Vector3(1, 1, 1) shader_parameter/uv2_offset = Vector3(0, 0, 0) shader_parameter/texture_albedo = ExtResource("1_57ppx") shader_parameter/texture_roughness = ExtResource("1_57ppx") ================================================ FILE: materials/player.tres ================================================ [gd_resource type="StandardMaterial3D" format=3 uid="uid://b4gwd5h7ixvct"] [resource] albedo_color = Color(0.847059, 0.0862745, 0, 1) roughness = 0.32 emission = Color(0.188235, 0.254902, 1, 1) emission_energy_multiplier = 0.0 ================================================ FILE: project.godot ================================================ ; Engine configuration file. ; It's best edited using the editor UI and not directly, ; since the parameters that go here are not all obvious. ; ; Format: ; [section] ; section goes between [] ; param=value ; assign values to parameters config_version=5 [application] config/name="001 - Basic Setup" run/main_scene="res://levels/level_001.tscn" config/features=PackedStringArray("4.1", "Forward Plus") config/icon="res://icon.svg" [display] window/size/always_on_top=true [input] move_forward={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null) ] } move_backward={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null) ] } move_left={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null) ] } move_right={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null) ] } jump={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"echo":false,"script":null) ] } exit={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null) ] } [rendering] textures/default_filters/anisotropic_filtering_level=4 textures/default_filters/texture_mipmap_bias=-1.0 anti_aliasing/quality/msaa_3d=3 anti_aliasing/quality/screen_space_aa=1 ================================================ FILE: readme_img.png.import ================================================ [remap] importer="texture" type="CompressedTexture2D" uid="uid://s6s85xa1lxce" path="res://.godot/imported/readme_img.png-c87ac3de286d8379757c000042cce94f.ctex" metadata={ "vram_texture": false } [deps] source_file="res://readme_img.png" dest_files=["res://.godot/imported/readme_img.png-c87ac3de286d8379757c000042cce94f.ctex"] [params] compress/mode=0 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/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=1 ================================================ FILE: shaders/grid.gdshader ================================================ // NOTE: Shader automatically converted from Godot Engine 4.1.dev4's StandardMaterial3D. shader_type spatial; render_mode blend_mix,depth_draw_opaque,cull_back,diffuse_burley,specular_schlick_ggx; uniform vec4 albedo : source_color; uniform sampler2D texture_albedo : source_color,filter_linear_mipmap,repeat_enable; uniform float point_size : hint_range(0,128); uniform float roughness : hint_range(0,1); uniform sampler2D texture_metallic : hint_default_white,filter_linear_mipmap,repeat_enable; uniform vec4 metallic_texture_channel; uniform sampler2D texture_roughness : hint_roughness_r,filter_linear_mipmap,repeat_enable; uniform float specular; uniform float metallic; varying vec3 uv1_triplanar_pos; uniform float uv1_blend_sharpness; varying vec3 uv1_power_normal; uniform vec3 uv1_scale; uniform vec3 uv1_offset; uniform vec3 uv2_scale; uniform vec3 uv2_offset; void vertex() { TANGENT = vec3(0.0,0.0,-1.0) * abs(NORMAL.x); TANGENT+= vec3(1.0,0.0,0.0) * abs(NORMAL.y); TANGENT+= vec3(1.0,0.0,0.0) * abs(NORMAL.z); TANGENT = normalize(TANGENT); BINORMAL = vec3(0.0,1.0,0.0) * abs(NORMAL.x); BINORMAL+= vec3(0.0,0.0,-1.0) * abs(NORMAL.y); BINORMAL+= vec3(0.0,1.0,0.0) * abs(NORMAL.z); BINORMAL = normalize(BINORMAL); uv1_power_normal=pow(abs(NORMAL),vec3(uv1_blend_sharpness)); uv1_triplanar_pos = VERTEX * uv1_scale + uv1_offset; uv1_power_normal/=dot(uv1_power_normal,vec3(1.0)); uv1_triplanar_pos *= vec3(1.0,-1.0, 1.0); } vec4 triplanar_texture(sampler2D p_sampler,vec3 p_weights,vec3 p_triplanar_pos) { vec4 samp=vec4(0.0); samp+= texture(p_sampler,p_triplanar_pos.xy) * p_weights.z; samp+= texture(p_sampler,p_triplanar_pos.xz) * p_weights.y; samp+= texture(p_sampler,p_triplanar_pos.zy * vec2(-1.0,1.0)) * p_weights.x; return samp; } void fragment() { vec4 albedo_tex = triplanar_texture(texture_albedo,uv1_power_normal,uv1_triplanar_pos); ALBEDO = (albedo.rgb * albedo_tex.r) + albedo_tex.g + albedo_tex.b; float metallic_tex = dot(triplanar_texture(texture_metallic,uv1_power_normal,uv1_triplanar_pos),metallic_texture_channel); METALLIC = metallic_tex * metallic; vec4 roughness_texture_channel = vec4(1.0,0.0,0.0,0.0); float roughness_tex = dot(triplanar_texture(texture_roughness,uv1_power_normal,uv1_triplanar_pos),roughness_texture_channel); ROUGHNESS = (1.0 - albedo_tex.g) * roughness; SPECULAR = specular; } ================================================ FILE: textures/grid.jpg.import ================================================ [remap] importer="texture" type="CompressedTexture2D" uid="uid://ivvpsi314b34" path.bptc="res://.godot/imported/grid.jpg-98e91c7ac35e7c2efc8df0a4f602d545.bptc.ctex" metadata={ "imported_formats": ["s3tc_bptc"], "vram_texture": true } [deps] source_file="res://textures/grid.jpg" dest_files=["res://.godot/imported/grid.jpg-98e91c7ac35e7c2efc8df0a4f602d545.bptc.ctex"] [params] compress/mode=2 compress/high_quality=true 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 ================================================ FILE: textures/industrial_sunset_puresky_4k.hdr ================================================ [File too large to display: 15.6 MB] ================================================ FILE: textures/industrial_sunset_puresky_4k.hdr.import ================================================ [remap] importer="texture" type="CompressedTexture2D" uid="uid://b1jvh1ehiaebt" path.bptc="res://.godot/imported/industrial_sunset_puresky_4k.hdr-f720137328f9b57effb6dcc1298b5e3b.bptc.ctex" metadata={ "imported_formats": ["s3tc_bptc"], "vram_texture": true } [deps] source_file="res://textures/industrial_sunset_puresky_4k.hdr" dest_files=["res://.godot/imported/industrial_sunset_puresky_4k.hdr-f720137328f9b57effb6dcc1298b5e3b.bptc.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