├── .gitattributes ├── .gitignore ├── Box ├── Box.gd ├── Box.tscn ├── BoxVisuals │ ├── BoxModel.glb │ ├── BoxModel.glb.import │ ├── DestroyedBox.glb │ └── DestroyedBox.glb.import ├── DestroyedBox.gd ├── DestroyedBox.tscn └── Sounds │ ├── crate-break-1-93926.wav │ └── crate-break-1-93926.wav.import ├── CameraMode ├── CameraMode.gd └── CameraMode.tscn ├── DemoPage ├── Assets │ ├── BlurShader.gdshader │ ├── DemoPageBackground.png │ ├── DemoPageBackground.png.import │ ├── RoundedRectangle.png │ ├── RoundedRectangle.png.import │ ├── discord-icon.png │ ├── discord-icon.png.import │ ├── gdquest_logo_white.svg │ ├── gdquest_logo_white.svg.import │ ├── itch-icon.png │ ├── itch-icon.png.import │ ├── twitter-icon.png │ └── twitter-icon.png.import ├── ControllerIcons │ ├── buttonStart.png │ ├── buttonStart.png.import │ ├── down_button.png │ ├── down_button.png.import │ ├── esc.png │ ├── esc.png.import │ ├── gamepad.png │ ├── gamepad.png.import │ ├── joystickL_side.png │ ├── joystickL_side.png.import │ ├── joystickR_side.png │ ├── joystickR_side.png.import │ ├── keyboard.png │ ├── keyboard.png.import │ ├── keyboard.svg.import │ ├── l2_button.png │ ├── l2_button.png.import │ ├── left_button.png │ ├── left_button.png.import │ ├── minus.png │ ├── minus.png.import │ ├── mouse.png │ ├── mouse.png.import │ ├── mouseLeft.png │ ├── mouseLeft.png.import │ ├── mouseRight.png │ ├── mouseRight.png.import │ ├── r2_button.png │ ├── r2_button.png.import │ ├── right_button.png │ ├── right_button.png.import │ ├── spacebar.png │ ├── spacebar.png.import │ ├── spacebar2.png │ ├── spacebar2.png.import │ ├── tab.png │ ├── tab.png.import │ ├── up_button.png │ ├── up_button.png.import │ ├── wasd.png │ └── wasd.png.import ├── DemoPage.gd ├── DemoPage.tscn ├── Fonts │ ├── Montserrat-Bold.ttf │ ├── Montserrat-Bold.ttf.import │ ├── Montserrat-Medium.ttf │ └── Montserrat-Medium.ttf.import ├── LinkButton.gd ├── discord-icon.svg.import ├── itch-icon.svg.import └── twitter-icon.svg.import ├── Enemies ├── BeeBot.gd ├── BeeBot.tscn ├── BeeBot │ ├── bee_bot.glb │ ├── bee_bot.glb.import │ ├── bee_root.gd │ ├── bee_root.tscn │ ├── bee_wings_shader.gdshader │ ├── wing_pattern.png │ └── wing_pattern.png.import ├── Beetle.gd ├── Beetle.tscn ├── Sounds │ ├── mechanical_1.wav │ ├── mechanical_1.wav.import │ ├── mechanical_2.wav │ ├── mechanical_2.wav.import │ ├── robot_defeat.wav │ └── robot_defeat.wav.import ├── beetle_bot │ ├── beetle_bot_fused.glb │ ├── beetle_bot_fused.glb.import │ ├── beetle_bot_fused_Image.png │ ├── beetle_bot_fused_Image.png.import │ ├── beetle_bot_fused_beetle_albedo.png │ ├── beetle_bot_fused_beetle_albedo.png.import │ ├── beetle_bot_fused_beetle_normal.png │ ├── beetle_bot_fused_beetle_normal.png.import │ ├── beetle_bot_fused_beetle_roughness.png │ ├── beetle_bot_fused_beetle_roughness.png.import │ ├── beetle_bot_fused_eye_mask.png │ ├── beetle_bot_fused_eye_mask.png.import │ ├── beetlebot_skin.gd │ ├── beetlebot_skin.tscn │ └── materials │ │ ├── beetlebot_eyes_mat.tres │ │ └── beetlebot_lights_mat.tres └── smoke_puff │ ├── Sounds │ ├── poof_1.wav │ ├── poof_1.wav.import │ ├── poof_2.wav │ └── poof_2.wav.import │ ├── smoke_ball.gdshader │ ├── smoke_ball.glb │ ├── smoke_ball.glb.import │ ├── smoke_ball_middle.gdshader │ ├── smoke_ball_middle_mat.tres │ ├── smoke_ball_middle_mat.tres~ │ ├── smoke_puff.gd │ ├── smoke_puff.tscn │ └── smoke_puff.tscn~ ├── Environment ├── Terrain │ ├── Textures │ │ ├── cliff_mat_albedo.png │ │ ├── cliff_mat_albedo.png.import │ │ ├── cliff_mat_depth.png │ │ ├── cliff_mat_depth.png.import │ │ ├── cliff_mat_normal.png │ │ ├── cliff_mat_normal.png.import │ │ ├── cliff_mat_orm.png │ │ ├── cliff_mat_orm.png.import │ │ ├── cliff_motif.png │ │ ├── cliff_motif.png.import │ │ ├── grass_mat_albedo.png │ │ ├── grass_mat_albedo.png.import │ │ ├── grass_mat_normal.png │ │ ├── grass_mat_normal.png.import │ │ ├── grass_mat_orm.png │ │ ├── grass_mat_orm.png.import │ │ ├── ground_mat_albedo.png │ │ ├── ground_mat_albedo.png.import │ │ ├── ground_mat_normal.png │ │ ├── ground_mat_normal.png.import │ │ └── voronoi_rock_cliff │ │ │ ├── voronoi_rock_cliff_albedo.png │ │ │ ├── voronoi_rock_cliff_albedo.png.import │ │ │ ├── voronoi_rock_cliff_heightmap.png │ │ │ ├── voronoi_rock_cliff_heightmap.png.import │ │ │ ├── voronoi_rock_cliff_normal.png │ │ │ ├── voronoi_rock_cliff_normal.png.import │ │ │ ├── voronoi_rock_cliff_orm.png │ │ │ └── voronoi_rock_cliff_orm.png.import │ ├── terrain_mat.tres │ └── terrain_shader.gdshader ├── bushes │ ├── bush.obj │ ├── bush.obj.import │ ├── bush.tscn │ └── bush_wind.gdshader ├── dark_bark │ ├── dark_bark.tres │ ├── dark_bark_albedo.png │ ├── dark_bark_albedo.png.import │ ├── dark_bark_heightmap.png │ ├── dark_bark_heightmap.png.import │ ├── dark_bark_normal.png │ ├── dark_bark_normal.png.import │ ├── dark_bark_orm.png │ └── dark_bark_orm.png.import ├── environment.tscn ├── environment_navmesh.res ├── flowers │ ├── flower_patch.gdshader │ ├── flower_patch.obj │ ├── flower_patch.obj.import │ ├── flower_patch.tscn │ └── textures │ │ ├── flower_head_albedo.png │ │ ├── flower_head_albedo.png.import │ │ ├── flower_head_normal.png │ │ └── flower_head_normal.png.import ├── grass │ ├── GrassChunk.tscn │ ├── grass.gdshader │ ├── grass_1_geo.obj │ ├── grass_1_geo.obj.import │ ├── grass_mat.tres │ └── grass_multimesh.res ├── grass_scatter.gd ├── large_tree_trunk │ ├── large_tree_trunk.gdshader │ ├── large_tree_trunk_mat.tres │ ├── large_trunk.obj │ ├── large_trunk.obj.import │ ├── moss │ │ ├── moss.tres │ │ ├── moss_albedo.png │ │ ├── moss_albedo.png.import │ │ ├── moss_depth.png │ │ ├── moss_depth.png.import │ │ ├── moss_normal.png │ │ ├── moss_normal.png.import │ │ ├── moss_orm.png │ │ └── moss_orm.png.import │ └── trunk_top │ │ ├── trunk_top.tres │ │ ├── trunk_top_albedo.png │ │ ├── trunk_top_albedo.png.import │ │ ├── trunk_top_normal.png │ │ ├── trunk_top_normal.png.import │ │ ├── trunk_top_orm.png │ │ └── trunk_top_orm.png.import ├── mushroom │ ├── mushroom.glb │ ├── mushroom.glb.import │ ├── mushroom_mushroom_albedo.png │ ├── mushroom_mushroom_albedo.png.import │ ├── mushroom_mushroom_normal.png │ └── mushroom_mushroom_normal.png.import ├── orange_flowers │ ├── orange_flower.glb │ ├── orange_flower.glb.import │ ├── orange_flower.tscn │ ├── orange_flower_Image.png │ ├── orange_flower_Image.png.import │ ├── orange_flower_Image_3.png │ ├── orange_flower_Image_3.png.import │ ├── orange_flower_flower_blade_albedo.png │ ├── orange_flower_flower_blade_albedo.png.import │ ├── orange_flower_flower_blade_normal.png │ ├── orange_flower_flower_blade_normal.png.import │ ├── orange_flower_pink_flower_albedo.png │ ├── orange_flower_pink_flower_albedo.png.import │ ├── orange_flower_pink_flower_normal.png │ └── orange_flower_pink_flower_normal.png.import ├── simple_leaves │ ├── simple_leaves.tres │ ├── simple_leaves_albedo.png │ ├── simple_leaves_albedo.png.import │ ├── simple_leaves_normal.png │ ├── simple_leaves_normal.png.import │ ├── simple_leaves_orm.png │ └── simple_leaves_orm.png.import ├── sky │ ├── blue_sky.tres │ └── sky.gdshader ├── terrain.glb ├── terrain.glb.import ├── terrain_bridge_planks_albedo.png ├── terrain_bridge_planks_albedo.png.import ├── terrain_bridge_planks_roughness.png ├── terrain_bridge_planks_roughness.png.import ├── tree_trunk │ ├── tree_trunk_long.glb │ ├── tree_trunk_long.glb.import │ ├── tree_trunk_small.glb │ └── tree_trunk_small.glb.import ├── trees │ ├── simple_bark │ │ ├── simple_bark.tres │ │ ├── simple_bark_albedo.png │ │ ├── simple_bark_albedo.png.import │ │ ├── simple_bark_depth.png │ │ ├── simple_bark_depth.png.import │ │ ├── simple_bark_heightmap.png │ │ ├── simple_bark_heightmap.png.import │ │ ├── simple_bark_mask.png │ │ ├── simple_bark_mask.png.import │ │ ├── simple_bark_normal.png │ │ ├── simple_bark_normal.png.import │ │ ├── simple_bark_orm.png │ │ └── simple_bark_orm.png.import │ ├── simple_pine_leaves │ │ ├── simple_pin_leaves.tres │ │ ├── simple_pin_leaves_albedo.png │ │ ├── simple_pin_leaves_albedo.png.import │ │ ├── simple_pin_leaves_normal.png │ │ ├── simple_pin_leaves_normal.png.import │ │ ├── simple_pin_leaves_orm.png │ │ └── simple_pin_leaves_orm.png.import │ ├── tree.obj │ ├── tree.obj.import │ └── tree.tscn ├── water │ ├── textures │ │ ├── caustic_texture.png │ │ └── caustic_texture.png.import │ └── water_shader.gdshader └── waterfall │ └── waterfall.gdshader ├── FullScreenHandler.gd ├── JumpingPad ├── JumpingPad.gd ├── JumpingPad.tscn └── JumpingPadVisuals │ ├── JumpingPadModel.glb │ ├── JumpingPadModel.glb.import │ ├── JumpingPadModel.tscn │ ├── JumpingPadModel_screen.gdshader │ ├── JumpingPadModel_screen_mat.tres │ ├── cross_sprite.png │ └── cross_sprite.png.import ├── LICENSE ├── Level ├── DeathPlane.gd ├── Main_navmesh.res ├── Music │ ├── mountain.mp3 │ └── mountain.mp3.import ├── Terrain.glb ├── Terrain.glb.import ├── gridbox_texture.png └── gridbox_texture.png.import ├── Main.tscn ├── Player ├── Bullet.gd ├── Bullet.tscn ├── BulletVisuals │ ├── BulletModel.obj │ ├── BulletModel.obj.import │ ├── BulletModel.tscn │ ├── bullet_spark_shader.gdshader │ ├── bullet_trail_mat.tres │ ├── bullet_trail_shader.gdshader │ ├── sparks.png │ └── sparks.png.import ├── CameraController.gd ├── CharacterSkin.gd ├── CharacterSkin.tscn ├── Coin │ ├── Audio │ │ ├── completetask_0.mp3 │ │ └── completetask_0.mp3.import │ ├── Coin.gd │ ├── Coin.tscn │ └── CoinVisuals │ │ ├── CoinModel.gd │ │ ├── CoinModel.glb │ │ ├── CoinModel.glb.import │ │ └── CoinModel.tscn ├── CoinsContainer.gd ├── ExplosionVisuals │ ├── explosion_scene.tscn │ ├── materials │ │ ├── blast_mat.tres │ │ ├── particles_mat.tres │ │ └── shell_mat.tres │ ├── objects │ │ ├── disk.obj │ │ ├── disk.obj.import │ │ ├── explosion_smoke.glb │ │ └── explosion_smoke.glb.import │ └── shaders │ │ ├── blast_shader.gdshader │ │ ├── explosion_trails_shader.gdshader │ │ ├── shell_shader.gdshader │ │ └── smoke_shader.gdshader ├── Grenade.gd ├── Grenade.tscn ├── GrenadeLauncher.gd ├── GrenadeLauncher.tscn ├── GrenadeVisuals │ ├── aim_material.tres │ ├── grenade │ │ ├── grenade.gd │ │ ├── grenade.glb │ │ ├── grenade.glb.import │ │ ├── grenade.material │ │ └── grenade.tscn │ ├── shaders │ │ ├── grenade_target_shader.gdshader │ │ └── grenade_trajectory_shader.gdshader │ ├── textures │ │ ├── direction_arrow.png │ │ ├── direction_arrow.png.import │ │ ├── target_frame_mask.png │ │ ├── target_frame_mask.png.import │ │ ├── target_mask.png │ │ └── target_mask.png.import │ ├── trajectory_material.tres │ ├── trajectory_mockup.obj │ ├── trajectory_mockup.obj.import │ └── trajectory_mockup.tscn ├── MeleeAttackArea.gd ├── Player.gd ├── Player.tscn ├── Sounds │ ├── 03_Step_grass_03.wav │ ├── 03_Step_grass_03.wav.import │ ├── 45_Landing_01.wav │ ├── 45_Landing_01.wav.import │ ├── lasershot-102078.wav │ ├── lasershot-102078.wav.import │ ├── musket-explosion-6383.wav │ └── musket-explosion-6383.wav.import ├── face_mat.gdshader └── model │ ├── character_blend_tree.tres │ ├── custom_animations │ ├── default_heartbeat.tres │ └── simple_blink.tres │ ├── default_state_machine.tres │ ├── faces │ ├── closed.png │ ├── closed.png.import │ ├── open.png │ └── open.png.import │ ├── gdbot.glb │ ├── gdbot.glb.import │ └── materials │ ├── face_mat.tres │ ├── glass_mat.tres │ └── heart_core_mat.tres ├── Playground.tscn ├── README.md ├── icon.png ├── icon.png.import ├── icon.svg ├── icon.svg.import ├── icons ├── bomb_icon.png ├── bomb_icon.png.import ├── flash_icon.png ├── flash_icon.png.import ├── icone.gd ├── icone.tscn ├── weapon_ui.gd └── weapon_ui.tscn ├── project.godot ├── shared ├── eye_mask.png ├── eye_mask.png.import ├── shaders │ ├── face_mat.gdshader │ ├── screen_shader.gdshader │ └── wireframe.gdshader └── textures │ ├── eye_mask.png │ └── eye_mask.png.import └── static ├── .gdignore ├── cover.webp ├── third-person-character-aiming-grenade.webp └── third-person-shooter-demo.webp /.gitattributes: -------------------------------------------------------------------------------- 1 | # Normalize EOL for all files that Git considers text files. 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Godot 4+ specific ignores 2 | .godot/ 3 | exports/ 4 | bin/ 5 | 6 | .env -------------------------------------------------------------------------------- /Box/Box.gd: -------------------------------------------------------------------------------- 1 | extends RigidBody3D 2 | 3 | const COIN_SCENE := preload("res://Player/Coin/Coin.tscn") 4 | const COINS_COUNT := 5 5 | const DESTROYED_BOX_SCENE := preload("res://Box/DestroyedBox.tscn") 6 | 7 | @onready var _destroy_sound: AudioStreamPlayer3D = $DestroySound 8 | @onready var _collision_shape: CollisionShape3D = $CollisionShape3d 9 | 10 | 11 | func damage(_impact_point: Vector3, _force: Vector3): 12 | for i in range(COINS_COUNT): 13 | var coin := COIN_SCENE.instantiate() 14 | get_parent().add_child(coin) 15 | coin.global_position = global_position 16 | coin.spawn() 17 | 18 | var destroyed_box := DESTROYED_BOX_SCENE.instantiate() 19 | get_parent().add_child(destroyed_box) 20 | destroyed_box.global_position = global_position 21 | 22 | _collision_shape.set_deferred("disabled", true) 23 | _destroy_sound.pitch_scale = randfn(1.0, 0.1) 24 | _destroy_sound.play() 25 | await _destroy_sound.finished 26 | queue_free() 27 | -------------------------------------------------------------------------------- /Box/Box.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=6 format=3 uid="uid://cmwyiep10m4u4"] 2 | 3 | [ext_resource type="Script" path="res://Box/Box.gd" id="1_oklwc"] 4 | [ext_resource type="PackedScene" uid="uid://cqekaooy1ktfl" path="res://Box/BoxVisuals/BoxModel.glb" id="2_ggurh"] 5 | [ext_resource type="AudioStream" uid="uid://dd7nemvkapogt" path="res://Box/Sounds/crate-break-1-93926.wav" id="3_71fsr"] 6 | 7 | [sub_resource type="PhysicsMaterial" id="PhysicsMaterial_sjlkk"] 8 | rough = true 9 | 10 | [sub_resource type="BoxShape3D" id="BoxShape3D_vcweg"] 11 | 12 | [node name="Box" type="RigidBody3D" groups=["damageables", "targeteables"]] 13 | physics_material_override = SubResource("PhysicsMaterial_sjlkk") 14 | lock_rotation = true 15 | script = ExtResource("1_oklwc") 16 | 17 | [node name="CollisionShape3d" type="CollisionShape3D" parent="."] 18 | shape = SubResource("BoxShape3D_vcweg") 19 | 20 | [node name="CrateVisual" parent="." instance=ExtResource("2_ggurh")] 21 | 22 | [node name="DestroySound" type="AudioStreamPlayer3D" parent="."] 23 | stream = ExtResource("3_71fsr") 24 | volume_db = 1.0 25 | -------------------------------------------------------------------------------- /Box/BoxVisuals/BoxModel.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Box/BoxVisuals/BoxModel.glb -------------------------------------------------------------------------------- /Box/BoxVisuals/BoxModel.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://cqekaooy1ktfl" 7 | path="res://.godot/imported/BoxModel.glb-89778339d2ef0e8a7be350006bb3d63b.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://Box/BoxVisuals/BoxModel.glb" 12 | dest_files=["res://.godot/imported/BoxModel.glb-89778339d2ef0e8a7be350006bb3d63b.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | meshes/force_disable_compression=false 26 | skins/use_named_skins=true 27 | animation/import=true 28 | animation/fps=30 29 | animation/trimming=false 30 | animation/remove_immutable_tracks=true 31 | import_script/path="" 32 | _subresources={} 33 | gltf/naming_version=0 34 | gltf/embedded_image_handling=3 35 | -------------------------------------------------------------------------------- /Box/BoxVisuals/DestroyedBox.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Box/BoxVisuals/DestroyedBox.glb -------------------------------------------------------------------------------- /Box/DestroyedBox.gd: -------------------------------------------------------------------------------- 1 | extends Node3D 2 | 3 | const FLYING_PIECES := 3 4 | const THROW_STRENGTH := 500 5 | 6 | @onready var _pieces_idx := [0, 1, 2, 3, 4, 5] 7 | 8 | 9 | func _ready() -> void: 10 | _pieces_idx.shuffle() 11 | 12 | for i in range(FLYING_PIECES): 13 | var piece_idx: int = _pieces_idx[i] 14 | var piece: RigidBody3D = get_child(piece_idx) 15 | piece.show() 16 | piece.freeze = false 17 | piece.sleeping = false 18 | piece.set_collision_mask_value(1, true) 19 | 20 | var rand_vector := (Vector3.ONE * 0.5) - Vector3(randf(), randf(), randf()) 21 | 22 | piece.apply_force(rand_vector * THROW_STRENGTH, rand_vector) 23 | -------------------------------------------------------------------------------- /Box/Sounds/crate-break-1-93926.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Box/Sounds/crate-break-1-93926.wav -------------------------------------------------------------------------------- /Box/Sounds/crate-break-1-93926.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://dd7nemvkapogt" 6 | path="res://.godot/imported/crate-break-1-93926.wav-60e787a6214d2527dbd44ba2f03c9841.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Box/Sounds/crate-break-1-93926.wav" 11 | dest_files=["res://.godot/imported/crate-break-1-93926.wav-60e787a6214d2527dbd44ba2f03c9841.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /CameraMode/CameraMode.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://q3osrwkgcbi0"] 2 | 3 | [ext_resource type="Script" path="res://CameraMode/CameraMode.gd" id="1_iqqgo"] 4 | 5 | [node name="CameraMode" type="Node3D"] 6 | process_mode = 3 7 | visible = false 8 | script = ExtResource("1_iqqgo") 9 | mouse_sensitivity = 0.001 10 | -------------------------------------------------------------------------------- /DemoPage/Assets/DemoPageBackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/Assets/DemoPageBackground.png -------------------------------------------------------------------------------- /DemoPage/Assets/DemoPageBackground.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bisdpbdirkat6" 6 | path="res://.godot/imported/DemoPageBackground.png-fe5c4d7b5270d53df4a33ccdf65bbcea.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/Assets/DemoPageBackground.png" 14 | dest_files=["res://.godot/imported/DemoPageBackground.png-fe5c4d7b5270d53df4a33ccdf65bbcea.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/Assets/RoundedRectangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/Assets/RoundedRectangle.png -------------------------------------------------------------------------------- /DemoPage/Assets/RoundedRectangle.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c1h5gk8rsf3va" 6 | path="res://.godot/imported/RoundedRectangle.png-367c8fe3793a3b7b239ed567e708e341.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/Assets/RoundedRectangle.png" 14 | dest_files=["res://.godot/imported/RoundedRectangle.png-367c8fe3793a3b7b239ed567e708e341.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/Assets/discord-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/Assets/discord-icon.png -------------------------------------------------------------------------------- /DemoPage/Assets/discord-icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://u8dgw2xh1ofy" 6 | path="res://.godot/imported/discord-icon.png-7e73321edb194b96633ef69202113ec3.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/Assets/discord-icon.png" 14 | dest_files=["res://.godot/imported/discord-icon.png-7e73321edb194b96633ef69202113ec3.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/Assets/gdquest_logo_white.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://3fxtm3u8im2" 6 | path="res://.godot/imported/gdquest_logo_white.svg-e648f77fdefa5b54d79f6a80974758ca.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/Assets/gdquest_logo_white.svg" 14 | dest_files=["res://.godot/imported/gdquest_logo_white.svg-e648f77fdefa5b54d79f6a80974758ca.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /DemoPage/Assets/itch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/Assets/itch-icon.png -------------------------------------------------------------------------------- /DemoPage/Assets/itch-icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bu5fw8vbrfsmm" 6 | path="res://.godot/imported/itch-icon.png-efbe69a4c90bc05782582d2eeb8a5050.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/Assets/itch-icon.png" 14 | dest_files=["res://.godot/imported/itch-icon.png-efbe69a4c90bc05782582d2eeb8a5050.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/Assets/twitter-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/Assets/twitter-icon.png -------------------------------------------------------------------------------- /DemoPage/Assets/twitter-icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://4028ms3tu0f0" 6 | path="res://.godot/imported/twitter-icon.png-b6e20038143212bbbf99d38fea1fbaae.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/Assets/twitter-icon.png" 14 | dest_files=["res://.godot/imported/twitter-icon.png-b6e20038143212bbbf99d38fea1fbaae.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/buttonStart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/buttonStart.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/buttonStart.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dnk6rxv8ejgny" 6 | path="res://.godot/imported/buttonStart.png-20ffd5741a19e61212fd09acb6ba47b1.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/buttonStart.png" 14 | dest_files=["res://.godot/imported/buttonStart.png-20ffd5741a19e61212fd09acb6ba47b1.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/down_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/down_button.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/down_button.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://26gko37h02x" 6 | path="res://.godot/imported/down_button.png-a138812ff538b428189fab3aea7add2c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/down_button.png" 14 | dest_files=["res://.godot/imported/down_button.png-a138812ff538b428189fab3aea7add2c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/esc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/esc.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/esc.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cercyyjcwv0x8" 6 | path="res://.godot/imported/esc.png-39a7666a4ba74269f39f945779f1fa64.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/esc.png" 14 | dest_files=["res://.godot/imported/esc.png-39a7666a4ba74269f39f945779f1fa64.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/gamepad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/gamepad.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/gamepad.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cwnhk6pv52ilv" 6 | path="res://.godot/imported/gamepad.png-cda47e9a1204a07ea93249858c69aa30.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/gamepad.png" 14 | dest_files=["res://.godot/imported/gamepad.png-cda47e9a1204a07ea93249858c69aa30.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/joystickL_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/joystickL_side.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/joystickL_side.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dr3g38uhvcdhd" 6 | path="res://.godot/imported/joystickL_side.png-d33ff6ba2e65193296d53a4642f91577.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/joystickL_side.png" 14 | dest_files=["res://.godot/imported/joystickL_side.png-d33ff6ba2e65193296d53a4642f91577.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/joystickR_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/joystickR_side.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/joystickR_side.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cgp8kkys51rsh" 6 | path="res://.godot/imported/joystickR_side.png-85d3d6a119122699dac820a558348d5a.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/joystickR_side.png" 14 | dest_files=["res://.godot/imported/joystickR_side.png-85d3d6a119122699dac820a558348d5a.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/keyboard.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/keyboard.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://tfus7d2ysvap" 6 | path="res://.godot/imported/keyboard.png-1684e7cb7cb3aad441d7b01188f044fb.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/keyboard.png" 14 | dest_files=["res://.godot/imported/keyboard.png-1684e7cb7cb3aad441d7b01188f044fb.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/keyboard.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bpk5br3pfj6o7" 6 | path="res://.godot/imported/keyboard.svg-f05366f0b549a9db4f3d1bab3707c0a1.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/keyboard.svg" 14 | dest_files=["res://.godot/imported/keyboard.svg-f05366f0b549a9db4f3d1bab3707c0a1.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/lossy_quality=0.7 20 | compress/hdr_compression=1 21 | compress/bptc_ldr=0 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/l2_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/l2_button.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/l2_button.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cwxudh6hj0dx" 6 | path="res://.godot/imported/l2_button.png-b973bf70167ab047253bfc841790878b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/l2_button.png" 14 | dest_files=["res://.godot/imported/l2_button.png-b973bf70167ab047253bfc841790878b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/left_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/left_button.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/left_button.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b5f15cpj3yrnt" 6 | path="res://.godot/imported/left_button.png-ad924212c4cef02f5a11eb8d6fcad56b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/left_button.png" 14 | dest_files=["res://.godot/imported/left_button.png-ad924212c4cef02f5a11eb8d6fcad56b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/minus.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/minus.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c17jnaxhrdv75" 6 | path="res://.godot/imported/minus.png-9e3b4c4e8b5cd2d4f083b0bf37336c73.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/minus.png" 14 | dest_files=["res://.godot/imported/minus.png-9e3b4c4e8b5cd2d4f083b0bf37336c73.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/mouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/mouse.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/mouse.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://drxg34lsicm31" 6 | path="res://.godot/imported/mouse.png-358b67a17dfef801c7b785667827ca5d.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/mouse.png" 14 | dest_files=["res://.godot/imported/mouse.png-358b67a17dfef801c7b785667827ca5d.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/mouseLeft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/mouseLeft.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/mouseLeft.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dnanigj1fkkop" 6 | path="res://.godot/imported/mouseLeft.png-62422c0f8665357fb6bc68083d2d9f85.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/mouseLeft.png" 14 | dest_files=["res://.godot/imported/mouseLeft.png-62422c0f8665357fb6bc68083d2d9f85.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/mouseRight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/mouseRight.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/mouseRight.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://betbepmba8wdn" 6 | path="res://.godot/imported/mouseRight.png-29963af6b02b81cce9095032752a9ebe.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/mouseRight.png" 14 | dest_files=["res://.godot/imported/mouseRight.png-29963af6b02b81cce9095032752a9ebe.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/r2_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/r2_button.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/r2_button.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bm4i5limc5q4h" 6 | path="res://.godot/imported/r2_button.png-036d3b6670c614bd49b417989517fda0.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/r2_button.png" 14 | dest_files=["res://.godot/imported/r2_button.png-036d3b6670c614bd49b417989517fda0.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/right_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/right_button.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/right_button.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://qhn7huwjgd4a" 6 | path="res://.godot/imported/right_button.png-1f25e74dcaa394528c2559afd55bae7f.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/right_button.png" 14 | dest_files=["res://.godot/imported/right_button.png-1f25e74dcaa394528c2559afd55bae7f.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/spacebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/spacebar.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/spacebar.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bvnnnyq5iuj81" 6 | path="res://.godot/imported/spacebar.png-304d897e46c2c60af518837db20813ee.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/spacebar.png" 14 | dest_files=["res://.godot/imported/spacebar.png-304d897e46c2c60af518837db20813ee.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/spacebar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/spacebar2.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/spacebar2.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://078sfj6nla2e" 6 | path="res://.godot/imported/spacebar2.png-cb2b6de14ecd805bfd2933cea8c526bd.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/spacebar2.png" 14 | dest_files=["res://.godot/imported/spacebar2.png-cb2b6de14ecd805bfd2933cea8c526bd.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/tab.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/tab.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cgkvjl80iqkeg" 6 | path="res://.godot/imported/tab.png-f49dd08f3f6380ca0c30c2657cb6f948.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/tab.png" 14 | dest_files=["res://.godot/imported/tab.png-f49dd08f3f6380ca0c30c2657cb6f948.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/up_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/up_button.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/up_button.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b8tabivxbgcgj" 6 | path="res://.godot/imported/up_button.png-228f43893c85207931a1a3a14ae60957.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/up_button.png" 14 | dest_files=["res://.godot/imported/up_button.png-228f43893c85207931a1a3a14ae60957.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/wasd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/ControllerIcons/wasd.png -------------------------------------------------------------------------------- /DemoPage/ControllerIcons/wasd.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://xhe0n1psocjo" 6 | path="res://.godot/imported/wasd.png-cfddefaff5353a6bba5415161946d5f7.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/ControllerIcons/wasd.png" 14 | dest_files=["res://.godot/imported/wasd.png-cfddefaff5353a6bba5415161946d5f7.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /DemoPage/Fonts/Montserrat-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/Fonts/Montserrat-Bold.ttf -------------------------------------------------------------------------------- /DemoPage/Fonts/Montserrat-Bold.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://ch2aef1jex81f" 6 | path="res://.godot/imported/Montserrat-Bold.ttf-257e34a39865240a009b88cdee11a55a.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://DemoPage/Fonts/Montserrat-Bold.ttf" 11 | dest_files=["res://.godot/imported/Montserrat-Bold.ttf-257e34a39865240a009b88cdee11a55a.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | multichannel_signed_distance_field=false 19 | msdf_pixel_range=8 20 | msdf_size=48 21 | allow_system_fallback=true 22 | force_autohinter=false 23 | hinting=1 24 | subpixel_positioning=1 25 | oversampling=0.0 26 | Fallbacks=null 27 | fallbacks=[] 28 | Compress=null 29 | compress=true 30 | preload=[] 31 | language_support={} 32 | script_support={} 33 | opentype_features={} 34 | -------------------------------------------------------------------------------- /DemoPage/Fonts/Montserrat-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/DemoPage/Fonts/Montserrat-Medium.ttf -------------------------------------------------------------------------------- /DemoPage/Fonts/Montserrat-Medium.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://t50djx4didf7" 6 | path="res://.godot/imported/Montserrat-Medium.ttf-9d8d2119fd890c2e3ca56ec78c926a91.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://DemoPage/Fonts/Montserrat-Medium.ttf" 11 | dest_files=["res://.godot/imported/Montserrat-Medium.ttf-9d8d2119fd890c2e3ca56ec78c926a91.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | multichannel_signed_distance_field=false 19 | msdf_pixel_range=8 20 | msdf_size=48 21 | allow_system_fallback=true 22 | force_autohinter=false 23 | hinting=1 24 | subpixel_positioning=1 25 | oversampling=0.0 26 | Fallbacks=null 27 | fallbacks=[] 28 | Compress=null 29 | compress=true 30 | preload=[] 31 | language_support={} 32 | script_support={} 33 | opentype_features={} 34 | -------------------------------------------------------------------------------- /DemoPage/LinkButton.gd: -------------------------------------------------------------------------------- 1 | extends TextureButton 2 | 3 | @export var link := "" 4 | 5 | 6 | func _ready() -> void: 7 | pressed.connect(_on_button_pressed) 8 | 9 | 10 | func _on_button_pressed() -> void: 11 | OS.shell_open(link) 12 | -------------------------------------------------------------------------------- /DemoPage/discord-icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cg5whqoocejte" 6 | path="res://.godot/imported/discord-icon.svg-c557f900d2beb28a5f86fa72ea36a406.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/discord-icon.svg" 14 | dest_files=["res://.godot/imported/discord-icon.svg-c557f900d2beb28a5f86fa72ea36a406.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/lossy_quality=0.7 20 | compress/hdr_compression=1 21 | compress/bptc_ldr=0 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /DemoPage/itch-icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://2dj174impbhp" 6 | path="res://.godot/imported/itch-icon.svg-743af81174e7a6003f94f98b25b19a44.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/itch-icon.svg" 14 | dest_files=["res://.godot/imported/itch-icon.svg-743af81174e7a6003f94f98b25b19a44.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/lossy_quality=0.7 20 | compress/hdr_compression=1 21 | compress/bptc_ldr=0 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /DemoPage/twitter-icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b1whqev1vdl88" 6 | path="res://.godot/imported/twitter-icon.svg-fe563385c8ee2a8f27181bf20c3d987f.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://DemoPage/twitter-icon.svg" 14 | dest_files=["res://.godot/imported/twitter-icon.svg-fe563385c8ee2a8f27181bf20c3d987f.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/lossy_quality=0.7 20 | compress/hdr_compression=1 21 | compress/bptc_ldr=0 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /Enemies/BeeBot/bee_bot.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/BeeBot/bee_bot.glb -------------------------------------------------------------------------------- /Enemies/BeeBot/bee_root.gd: -------------------------------------------------------------------------------- 1 | extends Node3D 2 | 3 | @onready var state_machine: AnimationNodeStateMachinePlayback = $AnimationTree["parameters/StateMachine/playback"] 4 | 5 | func _ready(): 6 | $AnimationTree.active = true 7 | play_idle() 8 | 9 | func play_idle(): 10 | state_machine.travel("idle") 11 | 12 | func play_spit_attack(): 13 | state_machine.travel("spit_attack") 14 | 15 | func play_poweroff(): 16 | state_machine.travel("power_off") 17 | 18 | func _exit_tree(): # When someone calls queue_free() here 19 | $bee_bot/Armature/Skeleton3D/bee_bot2.set("surface_material_override/1", null) 20 | $bee_bot/Armature/Skeleton3D/bee_bot2.set("surface_material_override/2", null) 21 | $bee_bot/Armature/Skeleton3D/bee_bot2.set("surface_material_override/3", null) 22 | -------------------------------------------------------------------------------- /Enemies/BeeBot/bee_wings_shader.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode cull_disabled; 3 | 4 | uniform sampler2D wing_pattern_sampler : repeat_disable; 5 | uniform vec3 emission_color : source_color = vec3(1.0); 6 | uniform float global_intensity = 1.0; 7 | 8 | void fragment() { 9 | float wing_pattern = texture(wing_pattern_sampler, UV).x; 10 | float pulse = ((1.0 + sin(UV.y + TIME)) / 2.0) + 0.5; 11 | ALBEDO = vec3(0.0); 12 | EMISSION = emission_color * smoothstep(0.51, 0.49, wing_pattern) * pulse * global_intensity; 13 | } 14 | -------------------------------------------------------------------------------- /Enemies/BeeBot/wing_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/BeeBot/wing_pattern.png -------------------------------------------------------------------------------- /Enemies/BeeBot/wing_pattern.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c4mdnjycm0yse" 6 | path.s3tc="res://.godot/imported/wing_pattern.png-e92b2efb572a3f9859c2bee431e14a55.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Enemies/BeeBot/wing_pattern.png" 15 | dest_files=["res://.godot/imported/wing_pattern.png-e92b2efb572a3f9859c2bee431e14a55.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Enemies/Sounds/mechanical_1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/Sounds/mechanical_1.wav -------------------------------------------------------------------------------- /Enemies/Sounds/mechanical_1.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://b6npjky1rks7r" 6 | path="res://.godot/imported/mechanical_1.wav-5c5f2862fb02dd26f2ddae444f0d20ef.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Enemies/Sounds/mechanical_1.wav" 11 | dest_files=["res://.godot/imported/mechanical_1.wav-5c5f2862fb02dd26f2ddae444f0d20ef.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Enemies/Sounds/mechanical_2.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/Sounds/mechanical_2.wav -------------------------------------------------------------------------------- /Enemies/Sounds/mechanical_2.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://d4xqhatidj5f" 6 | path="res://.godot/imported/mechanical_2.wav-50be6a08338f29a4393de31d92181baa.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Enemies/Sounds/mechanical_2.wav" 11 | dest_files=["res://.godot/imported/mechanical_2.wav-50be6a08338f29a4393de31d92181baa.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Enemies/Sounds/robot_defeat.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/Sounds/robot_defeat.wav -------------------------------------------------------------------------------- /Enemies/Sounds/robot_defeat.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://c66nnoqtanfw2" 6 | path="res://.godot/imported/robot_defeat.wav-5ba51aba54187de215e8fb36afb5cd3e.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Enemies/Sounds/robot_defeat.wav" 11 | dest_files=["res://.godot/imported/robot_defeat.wav-5ba51aba54187de215e8fb36afb5cd3e.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Enemies/beetle_bot/beetle_bot_fused.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/beetle_bot/beetle_bot_fused.glb -------------------------------------------------------------------------------- /Enemies/beetle_bot/beetle_bot_fused.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://dbqoj8oam1dsg" 7 | path="res://.godot/imported/beetle_bot_fused.glb-c34eea35fe0753ac1e4496004851330a.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://Enemies/beetle_bot/beetle_bot_fused.glb" 12 | dest_files=["res://.godot/imported/beetle_bot_fused.glb-c34eea35fe0753ac1e4496004851330a.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | meshes/force_disable_compression=false 26 | skins/use_named_skins=true 27 | animation/import=true 28 | animation/fps=30 29 | animation/trimming=false 30 | animation/remove_immutable_tracks=true 31 | import_script/path="" 32 | _subresources={} 33 | gltf/naming_version=0 34 | gltf/embedded_image_handling=1 35 | -------------------------------------------------------------------------------- /Enemies/beetle_bot/beetle_bot_fused_Image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/beetle_bot/beetle_bot_fused_Image.png -------------------------------------------------------------------------------- /Enemies/beetle_bot/beetle_bot_fused_Image.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://budymvq3u3y6o" 6 | path="res://.godot/imported/beetle_bot_fused_Image.png-d98b619f827823a28a2395991c0d101c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Enemies/beetle_bot/beetle_bot_fused_Image.png" 14 | dest_files=["res://.godot/imported/beetle_bot_fused_Image.png-d98b619f827823a28a2395991c0d101c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=true 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Enemies/beetle_bot/beetle_bot_fused_beetle_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/beetle_bot/beetle_bot_fused_beetle_albedo.png -------------------------------------------------------------------------------- /Enemies/beetle_bot/beetle_bot_fused_beetle_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cotxhuihgcxaa" 6 | path.s3tc="res://.godot/imported/beetle_bot_fused_beetle_albedo.png-a15883ec02d9e8a8023512ffd13d4cf0.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Enemies/beetle_bot/beetle_bot_fused_beetle_albedo.png" 15 | dest_files=["res://.godot/imported/beetle_bot_fused_beetle_albedo.png-a15883ec02d9e8a8023512ffd13d4cf0.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Enemies/beetle_bot/beetle_bot_fused_beetle_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/beetle_bot/beetle_bot_fused_beetle_normal.png -------------------------------------------------------------------------------- /Enemies/beetle_bot/beetle_bot_fused_beetle_roughness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/beetle_bot/beetle_bot_fused_beetle_roughness.png -------------------------------------------------------------------------------- /Enemies/beetle_bot/beetle_bot_fused_beetle_roughness.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://d00kps1fgnbvy" 6 | path.s3tc="res://.godot/imported/beetle_bot_fused_beetle_roughness.png-7154e2997efed0523986ee0c595ac3f9.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Enemies/beetle_bot/beetle_bot_fused_beetle_roughness.png" 15 | dest_files=["res://.godot/imported/beetle_bot_fused_beetle_roughness.png-7154e2997efed0523986ee0c595ac3f9.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Enemies/beetle_bot/beetle_bot_fused_eye_mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/beetle_bot/beetle_bot_fused_eye_mask.png -------------------------------------------------------------------------------- /Enemies/beetle_bot/beetle_bot_fused_eye_mask.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://3upig7nmgp3q" 6 | path.s3tc="res://.godot/imported/beetle_bot_fused_eye_mask.png-075f6627c95674d7504f9e1ab17febf2.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Enemies/beetle_bot/beetle_bot_fused_eye_mask.png" 15 | dest_files=["res://.godot/imported/beetle_bot_fused_eye_mask.png-075f6627c95674d7504f9e1ab17febf2.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Enemies/beetle_bot/materials/beetlebot_eyes_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://cnqdakqjse13v"] 2 | 3 | [ext_resource type="Shader" path="res://shared/shaders/screen_shader.gdshader" id="1_n44cl"] 4 | [ext_resource type="Texture2D" uid="uid://bvxkh2pa1nqdq" path="res://shared/textures/eye_mask.png" id="2_hdljt"] 5 | 6 | [resource] 7 | render_priority = 0 8 | shader = ExtResource("1_n44cl") 9 | shader_parameter/intensity = 2.0 10 | shader_parameter/screen_color = Color(0.619608, 0.862745, 0, 0.0784314) 11 | shader_parameter/screen_red_offset = Vector2(0, 0) 12 | shader_parameter/screen_green_offset = Vector2(0, 0) 13 | shader_parameter/screen_blue_offset = Vector2(0, 0) 14 | shader_parameter/pixel_size = 32.0 15 | shader_parameter/face_texture = ExtResource("2_hdljt") 16 | -------------------------------------------------------------------------------- /Enemies/beetle_bot/materials/beetlebot_lights_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" format=3 uid="uid://h2e57pyy6lu4"] 2 | 3 | [resource] 4 | albedo_color = Color(0.470588, 0.470588, 0.470588, 1) 5 | emission_enabled = true 6 | emission = Color(0.619608, 0.862745, 0, 1) 7 | emission_energy_multiplier = 1.5 8 | -------------------------------------------------------------------------------- /Enemies/smoke_puff/Sounds/poof_1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/smoke_puff/Sounds/poof_1.wav -------------------------------------------------------------------------------- /Enemies/smoke_puff/Sounds/poof_1.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://ddhimfnmpxlrp" 6 | path="res://.godot/imported/poof_1.wav-e5511e9d33269c1f409daf4bf9485217.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Enemies/smoke_puff/Sounds/poof_1.wav" 11 | dest_files=["res://.godot/imported/poof_1.wav-e5511e9d33269c1f409daf4bf9485217.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Enemies/smoke_puff/Sounds/poof_2.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/smoke_puff/Sounds/poof_2.wav -------------------------------------------------------------------------------- /Enemies/smoke_puff/Sounds/poof_2.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://cgv0ngrh5ofe" 6 | path="res://.godot/imported/poof_2.wav-3e5919c3dd1f184ade8a8f46288a85c6.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Enemies/smoke_puff/Sounds/poof_2.wav" 11 | dest_files=["res://.godot/imported/poof_2.wav-3e5919c3dd1f184ade8a8f46288a85c6.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Enemies/smoke_puff/smoke_ball.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode shadows_disabled, cull_disabled; 3 | uniform sampler2D voronoi_sampler; 4 | varying float voronoi; 5 | 6 | uniform float progress = 0.0; 7 | uniform float smoothness = 0.01; 8 | 9 | uniform float ease = 2.0; 10 | uniform float base_scale = 1.0; 11 | uniform float deformation_scale = 1.0; 12 | 13 | uniform float texture_offset = 0.0; 14 | 15 | void vertex() { 16 | float smooth_df = deformation_scale * (1.0 - distance(UV, vec2(0.5)) * 2.0); 17 | voronoi = texture(voronoi_sampler, UV + vec2(0.0, texture_offset)).x; 18 | VERTEX += NORMAL * (1.0 - pow(voronoi, ease)) * smooth_df; 19 | VERTEX *= base_scale; 20 | } 21 | 22 | void fragment(){ 23 | ALPHA = smoothstep(progress - smoothness, progress + smoothness, voronoi); 24 | ALPHA_SCISSOR_THRESHOLD = 0.5; 25 | } 26 | -------------------------------------------------------------------------------- /Enemies/smoke_puff/smoke_ball.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Enemies/smoke_puff/smoke_ball.glb -------------------------------------------------------------------------------- /Enemies/smoke_puff/smoke_ball.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://n5v4vlr80bj8" 7 | path="res://.godot/imported/smoke_ball.glb-2002d32b3d30ddcc38486549432127ed.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://Enemies/smoke_puff/smoke_ball.glb" 12 | dest_files=["res://.godot/imported/smoke_ball.glb-2002d32b3d30ddcc38486549432127ed.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | meshes/force_disable_compression=false 26 | skins/use_named_skins=true 27 | animation/import=true 28 | animation/fps=30 29 | animation/trimming=false 30 | animation/remove_immutable_tracks=true 31 | import_script/path="" 32 | _subresources={} 33 | gltf/naming_version=0 34 | gltf/embedded_image_handling=3 35 | -------------------------------------------------------------------------------- /Enemies/smoke_puff/smoke_ball_middle.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode shadows_disabled, cull_back; 3 | 4 | uniform sampler2D voronoi_sampler; 5 | varying float voronoi; 6 | 7 | uniform float progress = 0.0; 8 | uniform float smoothness = 0.01; 9 | 10 | uniform float ease = 2.0; 11 | uniform float base_scale = 1.0; 12 | uniform float deformation_scale = 1.0; 13 | 14 | uniform float texture_offset = 0.0; 15 | 16 | uniform float fresnel_offset = 1.0; 17 | uniform float global_alpha = 1.0; 18 | 19 | float fresnel(vec3 normal, vec3 view, float amount){ 20 | return pow(1.0 - clamp(dot(normal, view), 0.0, 1.0), amount); 21 | } 22 | 23 | void vertex() { 24 | float smooth_df = deformation_scale * (1.0 - distance(UV, vec2(0.5)) * 2.0); 25 | voronoi = texture(voronoi_sampler, UV + vec2(0.0, texture_offset)).x; 26 | VERTEX += NORMAL * (1.0 - pow(voronoi, ease)) * smooth_df; 27 | VERTEX *= base_scale; 28 | } 29 | 30 | void fragment(){ 31 | ALPHA = 1.0 - fresnel(NORMAL, VIEW, 2.0 * fresnel_offset); 32 | ALPHA *= global_alpha; 33 | } 34 | -------------------------------------------------------------------------------- /Enemies/smoke_puff/smoke_ball_middle_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://cnvmsr64tkgyn"] 2 | 3 | [ext_resource type="Shader" path="res://Enemies/smoke_puff/smoke_ball_middle.gdshader" id="1_oh10p"] 4 | 5 | [sub_resource type="FastNoiseLite" id="FastNoiseLite_6jv1k"] 6 | noise_type = 2 7 | fractal_type = 0 8 | fractal_octaves = 1 9 | 10 | [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_s56rg"] 11 | noise = SubResource("FastNoiseLite_6jv1k") 12 | 13 | [resource] 14 | resource_local_to_scene = true 15 | render_priority = 10 16 | shader = ExtResource("1_oh10p") 17 | shader_parameter/progress = 0.0 18 | shader_parameter/smoothness = 0.01 19 | shader_parameter/ease = 2.0 20 | shader_parameter/base_scale = 1.1 21 | shader_parameter/deformation_scale = 2.0 22 | shader_parameter/texture_offset = 0.1 23 | shader_parameter/fresnel_offset = 0.5 24 | shader_parameter/global_alpha = 0.0 25 | shader_parameter/voronoi_sampler = SubResource("NoiseTexture2D_s56rg") 26 | -------------------------------------------------------------------------------- /Enemies/smoke_puff/smoke_ball_middle_mat.tres~: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=4 format=3] 2 | 3 | [ext_resource type="Shader" path="res://Enemies/smoke_puff/smoke_ball_middle.gdshader" id="1_oh10p"] 4 | -------------------------------------------------------------------------------- /Enemies/smoke_puff/smoke_puff.gd: -------------------------------------------------------------------------------- 1 | extends Node3D 2 | 3 | # Emit when smoke density is at maximum 4 | signal full 5 | 6 | @onready var smoke_sounds := $SmokeSounds.get_children() 7 | 8 | 9 | func _ready(): 10 | smoke_sounds.pick_random().play() 11 | 12 | $AnimationPlayer.play("poof") 13 | await $AnimationPlayer.animation_finished 14 | queue_free() 15 | 16 | 17 | func smoke_at_full_density(): 18 | full.emit() 19 | -------------------------------------------------------------------------------- /Environment/Terrain/Textures/cliff_mat_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/cliff_mat_albedo.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/cliff_mat_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://oj33wofxyp33" 6 | path.s3tc="res://.godot/imported/cliff_mat_albedo.png-380f152af6d7ef84165c0dfc6d61f465.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/Terrain/Textures/cliff_mat_albedo.png" 15 | dest_files=["res://.godot/imported/cliff_mat_albedo.png-380f152af6d7ef84165c0dfc6d61f465.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/Terrain/Textures/cliff_mat_depth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/cliff_mat_depth.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/cliff_mat_depth.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dvjf8fld1dqdg" 6 | path.s3tc="res://.godot/imported/cliff_mat_depth.png-d9bf6dc9e50b7f709c34c72511ff3acf.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/Terrain/Textures/cliff_mat_depth.png" 15 | dest_files=["res://.godot/imported/cliff_mat_depth.png-d9bf6dc9e50b7f709c34c72511ff3acf.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/Terrain/Textures/cliff_mat_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/cliff_mat_normal.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/cliff_mat_normal.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://qfrx7oj27t0m" 6 | path.s3tc="res://.godot/imported/cliff_mat_normal.png-509cf4b44ba71e46d7f76b19001be91b.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/Terrain/Textures/cliff_mat_normal.png" 15 | dest_files=["res://.godot/imported/cliff_mat_normal.png-509cf4b44ba71e46d7f76b19001be91b.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=1 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/Terrain/Textures/cliff_mat_orm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/cliff_mat_orm.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/cliff_mat_orm.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://tmachtl13mjl" 6 | path.s3tc="res://.godot/imported/cliff_mat_orm.png-21a3556effe9b8fe78f337a8da1fad41.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/Terrain/Textures/cliff_mat_orm.png" 15 | dest_files=["res://.godot/imported/cliff_mat_orm.png-21a3556effe9b8fe78f337a8da1fad41.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/Terrain/Textures/cliff_motif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/cliff_motif.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/cliff_motif.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bng5mcjuskuvs" 6 | path.s3tc="res://.godot/imported/cliff_motif.png-fc55d5bfeb99fb6e3ee06dca67db30eb.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/Terrain/Textures/cliff_motif.png" 15 | dest_files=["res://.godot/imported/cliff_motif.png-fc55d5bfeb99fb6e3ee06dca67db30eb.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/Terrain/Textures/grass_mat_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/grass_mat_albedo.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/grass_mat_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c2b12n5de0huc" 6 | path.s3tc="res://.godot/imported/grass_mat_albedo.png-253a4baf35e2a420ac3878ac8cc996a8.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/Terrain/Textures/grass_mat_albedo.png" 15 | dest_files=["res://.godot/imported/grass_mat_albedo.png-253a4baf35e2a420ac3878ac8cc996a8.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/Terrain/Textures/grass_mat_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/grass_mat_normal.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/grass_mat_normal.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c5dkkyvgddtx4" 6 | path.s3tc="res://.godot/imported/grass_mat_normal.png-50c12a003e380d428da4aafdecb10c1a.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/Terrain/Textures/grass_mat_normal.png" 15 | dest_files=["res://.godot/imported/grass_mat_normal.png-50c12a003e380d428da4aafdecb10c1a.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=1 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/Terrain/Textures/grass_mat_orm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/grass_mat_orm.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/grass_mat_orm.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://iwemoebuvucg" 6 | path.s3tc="res://.godot/imported/grass_mat_orm.png-3ed231334201073323671381746cadc2.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/Terrain/Textures/grass_mat_orm.png" 15 | dest_files=["res://.godot/imported/grass_mat_orm.png-3ed231334201073323671381746cadc2.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/Terrain/Textures/ground_mat_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/ground_mat_albedo.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/ground_mat_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dj0jtv0nuvg17" 6 | path.s3tc="res://.godot/imported/ground_mat_albedo.png-1b1de269cb0ef6833b1f550c9dd5a723.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/Terrain/Textures/ground_mat_albedo.png" 15 | dest_files=["res://.godot/imported/ground_mat_albedo.png-1b1de269cb0ef6833b1f550c9dd5a723.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/Terrain/Textures/ground_mat_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/ground_mat_normal.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/ground_mat_normal.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://gmvm6bg3lh0i" 6 | path.s3tc="res://.godot/imported/ground_mat_normal.png-20ba10975d22ec80410250fd948a2a12.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/Terrain/Textures/ground_mat_normal.png" 15 | dest_files=["res://.godot/imported/ground_mat_normal.png-20ba10975d22ec80410250fd948a2a12.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=1 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/Terrain/Textures/voronoi_rock_cliff/voronoi_rock_cliff_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/voronoi_rock_cliff/voronoi_rock_cliff_albedo.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/voronoi_rock_cliff/voronoi_rock_cliff_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ccle3gd0lgtig" 6 | path="res://.godot/imported/voronoi_rock_cliff_albedo.png-59ba13c1d5104503d111e7a9d04af1c6.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Environment/Terrain/Textures/voronoi_rock_cliff/voronoi_rock_cliff_albedo.png" 14 | dest_files=["res://.godot/imported/voronoi_rock_cliff_albedo.png-59ba13c1d5104503d111e7a9d04af1c6.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=true 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=0 35 | -------------------------------------------------------------------------------- /Environment/Terrain/Textures/voronoi_rock_cliff/voronoi_rock_cliff_heightmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/voronoi_rock_cliff/voronoi_rock_cliff_heightmap.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/voronoi_rock_cliff/voronoi_rock_cliff_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/voronoi_rock_cliff/voronoi_rock_cliff_normal.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/voronoi_rock_cliff/voronoi_rock_cliff_orm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/Terrain/Textures/voronoi_rock_cliff/voronoi_rock_cliff_orm.png -------------------------------------------------------------------------------- /Environment/Terrain/Textures/voronoi_rock_cliff/voronoi_rock_cliff_orm.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c5t0wkqsdvy0a" 6 | path.s3tc="res://.godot/imported/voronoi_rock_cliff_orm.png-ddf5de803f8b37b120cf284c9515f037.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/Terrain/Textures/voronoi_rock_cliff/voronoi_rock_cliff_orm.png" 15 | dest_files=["res://.godot/imported/voronoi_rock_cliff_orm.png-ddf5de803f8b37b120cf284c9515f037.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/bushes/bush.obj.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wavefront_obj" 4 | importer_version=1 5 | type="Mesh" 6 | uid="uid://dbvyvmrfv7b41" 7 | path="res://.godot/imported/bush.obj-6fc986ef449614dd2e250f4ea76be403.mesh" 8 | 9 | [deps] 10 | 11 | files=["res://.godot/imported/bush.obj-6fc986ef449614dd2e250f4ea76be403.mesh"] 12 | 13 | source_file="res://Environment/bushes/bush.obj" 14 | dest_files=["res://.godot/imported/bush.obj-6fc986ef449614dd2e250f4ea76be403.mesh", "res://.godot/imported/bush.obj-6fc986ef449614dd2e250f4ea76be403.mesh"] 15 | 16 | [params] 17 | 18 | generate_tangents=true 19 | scale_mesh=Vector3(1, 1, 1) 20 | offset_mesh=Vector3(0, 0, 0) 21 | optimize_mesh=true 22 | force_disable_mesh_compression=false 23 | -------------------------------------------------------------------------------- /Environment/bushes/bush_wind.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode cull_disabled; 3 | uniform sampler2D wind_noise_sampler; 4 | 5 | uniform sampler2D albedo_sampler : source_color; 6 | uniform sampler2D orm_sampler; 7 | uniform sampler2D normal_sampler; 8 | 9 | void vertex() { 10 | float wind_value = texture(wind_noise_sampler, (UV.y) + VERTEX.y + NODE_POSITION_WORLD.xz + vec2(0.0, (TIME * 0.2))).x; 11 | VERTEX.xz += (wind_value) * 0.05 * UV.y; 12 | } 13 | 14 | void fragment() { 15 | vec4 albedo = texture(albedo_sampler, UV); 16 | vec3 orm = texture(orm_sampler, UV).rgb; 17 | vec3 normal_map = texture(normal_sampler, UV).rgb; 18 | 19 | ALBEDO = albedo.rgb * orm.r; 20 | ROUGHNESS = orm.g; 21 | NORMAL_MAP = normal_map; 22 | ALPHA = albedo.a; 23 | ALPHA_SCISSOR_THRESHOLD = 0.5; 24 | } 25 | -------------------------------------------------------------------------------- /Environment/dark_bark/dark_bark.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" load_steps=5 format=2] 2 | [ext_resource path="dark_bark_albedo.png" type="Texture" id=1] 3 | [ext_resource path="dark_bark_orm.png" type="Texture" id=2] 4 | [ext_resource path="dark_bark_normal.png" type="Texture" id=3] 5 | [ext_resource path="dark_bark_heightmap.png" type="Texture" id=4] 6 | [resource] 7 | albedo_color = Color(1, 1, 1, 1) 8 | albedo_texture = ExtResource( 1 ) 9 | metallic = 0 10 | roughness = 1 11 | roughness_texture = ExtResource( 2 ) 12 | roughness_texture_channel = 1 13 | normal_enabled = true 14 | normal_scale = 1 15 | normal_texture = ExtResource( 3 ) 16 | ao_enabled = true 17 | ao_texture = ExtResource( 2 ) 18 | ao_texture_channel = 0 19 | heightmap_enabled = true 20 | heightmap_scale = 5 21 | heightmap_deep_parallax = true 22 | heightmap_min_layers = 8 23 | heightmap_max_layers = 32 24 | heightmap_texture = ExtResource( 4 ) 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Environment/dark_bark/dark_bark_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/dark_bark/dark_bark_albedo.png -------------------------------------------------------------------------------- /Environment/dark_bark/dark_bark_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://puxw8ak4sfc3" 6 | path.s3tc="res://.godot/imported/dark_bark_albedo.png-031bcc2b4a9ccc5ae5522bfe36a67a32.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/dark_bark/dark_bark_albedo.png" 15 | dest_files=["res://.godot/imported/dark_bark_albedo.png-031bcc2b4a9ccc5ae5522bfe36a67a32.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/dark_bark/dark_bark_heightmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/dark_bark/dark_bark_heightmap.png -------------------------------------------------------------------------------- /Environment/dark_bark/dark_bark_heightmap.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://xxp11wuuoht" 6 | path.s3tc="res://.godot/imported/dark_bark_heightmap.png-58c09251a1ea499109b15930f26cdccb.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/dark_bark/dark_bark_heightmap.png" 15 | dest_files=["res://.godot/imported/dark_bark_heightmap.png-58c09251a1ea499109b15930f26cdccb.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=7 28 | roughness/src_normal="res://Environment/dark_bark/dark_bark_normal.png" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/dark_bark/dark_bark_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/dark_bark/dark_bark_normal.png -------------------------------------------------------------------------------- /Environment/dark_bark/dark_bark_normal.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://2fec5qn5vv22" 6 | path.s3tc="res://.godot/imported/dark_bark_normal.png-50e6ec9dd144b6c4ee51092d361f1c55.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/dark_bark/dark_bark_normal.png" 15 | dest_files=["res://.godot/imported/dark_bark_normal.png-50e6ec9dd144b6c4ee51092d361f1c55.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=1 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=1 28 | roughness/src_normal="res://Environment/dark_bark/dark_bark_normal.png" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/dark_bark/dark_bark_orm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/dark_bark/dark_bark_orm.png -------------------------------------------------------------------------------- /Environment/dark_bark/dark_bark_orm.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bcgrggue2d1ax" 6 | path.s3tc="res://.godot/imported/dark_bark_orm.png-ab3920f1925442b1d5ad14c8c2fdbe1d.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/dark_bark/dark_bark_orm.png" 15 | dest_files=["res://.godot/imported/dark_bark_orm.png-ab3920f1925442b1d5ad14c8c2fdbe1d.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=8 28 | roughness/src_normal="res://Environment/dark_bark/dark_bark_normal.png" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/environment_navmesh.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/environment_navmesh.res -------------------------------------------------------------------------------- /Environment/flowers/flower_patch.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode cull_disabled; 3 | uniform sampler2D flower_albedo_sampler : repeat_disable, source_color; 4 | uniform sampler2D flower_normal_sampler : repeat_disable; 5 | 6 | void vertex(){ 7 | float Y = 1.0 - VERTEX.y; 8 | VERTEX.x += sin(NODE_POSITION_WORLD.x + TIME + Y) * ( 1.0 - Y) * 0.1; 9 | VERTEX.z += cos(NODE_POSITION_WORLD.z + TIME * 0.45 + Y) * ( 1.0 - Y) * 0.1; 10 | } 11 | 12 | void fragment() { 13 | vec4 albedo = texture(flower_albedo_sampler, UV); 14 | vec3 normal = texture(flower_normal_sampler, UV).rgb; 15 | ALBEDO = albedo.rgb; 16 | NORMAL_MAP = normal; 17 | ALPHA = albedo.a; 18 | ALPHA_SCISSOR_THRESHOLD = 0.5; 19 | } 20 | -------------------------------------------------------------------------------- /Environment/flowers/flower_patch.obj.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wavefront_obj" 4 | importer_version=1 5 | type="Mesh" 6 | uid="uid://rkhbgqrcux2x" 7 | path="res://.godot/imported/flower_patch.obj-1f0567ff76b2d57c2346384c4cef3807.mesh" 8 | 9 | [deps] 10 | 11 | files=["res://.godot/imported/flower_patch.obj-1f0567ff76b2d57c2346384c4cef3807.mesh"] 12 | 13 | source_file="res://Environment/flowers/flower_patch.obj" 14 | dest_files=["res://.godot/imported/flower_patch.obj-1f0567ff76b2d57c2346384c4cef3807.mesh", "res://.godot/imported/flower_patch.obj-1f0567ff76b2d57c2346384c4cef3807.mesh"] 15 | 16 | [params] 17 | 18 | generate_tangents=true 19 | scale_mesh=Vector3(1, 1, 1) 20 | offset_mesh=Vector3(0, 0, 0) 21 | optimize_mesh=true 22 | force_disable_mesh_compression=false 23 | -------------------------------------------------------------------------------- /Environment/flowers/flower_patch.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=6 format=3 uid="uid://bi31qtqv1sf2s"] 2 | 3 | [ext_resource type="Shader" path="res://Environment/flowers/flower_patch.gdshader" id="1_jw7pd"] 4 | [ext_resource type="Texture2D" uid="uid://c8f84qeseq2rk" path="res://Environment/flowers/textures/flower_head_albedo.png" id="2_j64bn"] 5 | [ext_resource type="Texture2D" uid="uid://rqrvv1eud2n1" path="res://Environment/flowers/textures/flower_head_normal.png" id="3_o8sff"] 6 | [ext_resource type="ArrayMesh" uid="uid://rkhbgqrcux2x" path="res://Environment/flowers/flower_patch.obj" id="4_lp6rb"] 7 | 8 | [sub_resource type="ShaderMaterial" id="ShaderMaterial_tyk6o"] 9 | render_priority = 0 10 | shader = ExtResource("1_jw7pd") 11 | shader_parameter/flower_albedo_sampler = ExtResource("2_j64bn") 12 | shader_parameter/flower_normal_sampler = ExtResource("3_o8sff") 13 | 14 | [node name="FlowerPatch" type="MeshInstance3D"] 15 | transform = Transform3D(2.2, 0, 0, 0, 2.2, 0, 0, 0, 2.2, 0, 0, 0) 16 | material_override = SubResource("ShaderMaterial_tyk6o") 17 | cast_shadow = 0 18 | mesh = ExtResource("4_lp6rb") 19 | -------------------------------------------------------------------------------- /Environment/flowers/textures/flower_head_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/flowers/textures/flower_head_albedo.png -------------------------------------------------------------------------------- /Environment/flowers/textures/flower_head_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c8f84qeseq2rk" 6 | path.s3tc="res://.godot/imported/flower_head_albedo.png-86730fb34d1afbb44d7c4c4e48a0dccb.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/flowers/textures/flower_head_albedo.png" 15 | dest_files=["res://.godot/imported/flower_head_albedo.png-86730fb34d1afbb44d7c4c4e48a0dccb.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/flowers/textures/flower_head_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/flowers/textures/flower_head_normal.png -------------------------------------------------------------------------------- /Environment/flowers/textures/flower_head_normal.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://rqrvv1eud2n1" 6 | path.s3tc="res://.godot/imported/flower_head_normal.png-06801e51a262e5cd93b2f9c399c8cad5.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/flowers/textures/flower_head_normal.png" 15 | dest_files=["res://.godot/imported/flower_head_normal.png-06801e51a262e5cd93b2f9c399c8cad5.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/grass/GrassChunk.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://dx8qkjcbt8emp"] 2 | 3 | [ext_resource type="Material" uid="uid://ovciasxou830" path="res://Environment/grass/grass_mat.tres" id="1_t5arf"] 4 | [ext_resource type="ArrayMesh" uid="uid://bmveegrtd4yaa" path="res://Environment/grass/grass_1_geo.obj" id="2_0hpms"] 5 | 6 | [node name="grass_chunk_scene" type="MeshInstance3D"] 7 | material_override = ExtResource("1_t5arf") 8 | cast_shadow = 0 9 | mesh = ExtResource("2_0hpms") 10 | -------------------------------------------------------------------------------- /Environment/grass/grass.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode cull_disabled, world_vertex_coords; 3 | 4 | uniform sampler2D wind_noise_sampler; 5 | uniform sampler2D gradient : source_color; 6 | 7 | void vertex(){ 8 | NORMAL = vec3(0.0, 1.0, 0.0); 9 | vec2 world_uv = VERTEX.xz / 20.0 + 0.5 * TIME * 0.1; 10 | 11 | float wind = texture(wind_noise_sampler, world_uv).x - 0.5; 12 | VERTEX.xz += wind * 0.1 * ( 1.0 - UV.y); 13 | } 14 | 15 | void fragment() { 16 | vec3 gradient_color = texture(gradient, vec2(UV.y, UV.x)).rgb; 17 | ALBEDO = gradient_color; 18 | NORMAL = NORMAL * (float(FRONT_FACING) * 2.0 - 1.0); 19 | } 20 | -------------------------------------------------------------------------------- /Environment/grass/grass_1_geo.obj.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wavefront_obj" 4 | importer_version=1 5 | type="Mesh" 6 | uid="uid://bmveegrtd4yaa" 7 | path="res://.godot/imported/grass_1_geo.obj-ca87b7efa417a8df17fe8b3f74eade49.mesh" 8 | 9 | [deps] 10 | 11 | files=["res://.godot/imported/grass_1_geo.obj-ca87b7efa417a8df17fe8b3f74eade49.mesh"] 12 | 13 | source_file="res://Environment/grass/grass_1_geo.obj" 14 | dest_files=["res://.godot/imported/grass_1_geo.obj-ca87b7efa417a8df17fe8b3f74eade49.mesh", "res://.godot/imported/grass_1_geo.obj-ca87b7efa417a8df17fe8b3f74eade49.mesh"] 15 | 16 | [params] 17 | 18 | generate_tangents=true 19 | scale_mesh=Vector3(1, 1, 1) 20 | offset_mesh=Vector3(0, 0, 0) 21 | optimize_mesh=true 22 | force_disable_mesh_compression=false 23 | -------------------------------------------------------------------------------- /Environment/grass/grass_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=6 format=3 uid="uid://ovciasxou830"] 2 | 3 | [ext_resource type="Shader" path="res://Environment/grass/grass.gdshader" id="1_21fji"] 4 | 5 | [sub_resource type="Gradient" id="Gradient_og0wy"] 6 | colors = PackedColorArray(0.11908, 0.387024, 0.176702, 1, 0.278388, 0.581803, 0.267947, 1) 7 | 8 | [sub_resource type="GradientTexture1D" id="GradientTexture1D_deq1y"] 9 | gradient = SubResource("Gradient_og0wy") 10 | 11 | [sub_resource type="FastNoiseLite" id="FastNoiseLite_3wvog"] 12 | 13 | [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_d8pqm"] 14 | noise = SubResource("FastNoiseLite_3wvog") 15 | 16 | [resource] 17 | render_priority = 0 18 | shader = ExtResource("1_21fji") 19 | shader_parameter/wind_noise_sampler = SubResource("NoiseTexture2D_d8pqm") 20 | shader_parameter/gradient = SubResource("GradientTexture1D_deq1y") 21 | -------------------------------------------------------------------------------- /Environment/grass/grass_multimesh.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/grass/grass_multimesh.res -------------------------------------------------------------------------------- /Environment/large_tree_trunk/large_trunk.obj.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wavefront_obj" 4 | importer_version=1 5 | type="Mesh" 6 | uid="uid://bc18k45jn4wcx" 7 | path="res://.godot/imported/large_trunk.obj-93b3f63be650b466ac5eca60b515bbfd.mesh" 8 | 9 | [deps] 10 | 11 | files=["res://.godot/imported/large_trunk.obj-93b3f63be650b466ac5eca60b515bbfd.mesh"] 12 | 13 | source_file="res://Environment/large_tree_trunk/large_trunk.obj" 14 | dest_files=["res://.godot/imported/large_trunk.obj-93b3f63be650b466ac5eca60b515bbfd.mesh", "res://.godot/imported/large_trunk.obj-93b3f63be650b466ac5eca60b515bbfd.mesh"] 15 | 16 | [params] 17 | 18 | generate_tangents=true 19 | scale_mesh=Vector3(1, 1, 1) 20 | offset_mesh=Vector3(0, 0, 0) 21 | optimize_mesh=true 22 | force_disable_mesh_compression=false 23 | -------------------------------------------------------------------------------- /Environment/large_tree_trunk/moss/moss.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="SpatialMaterial" load_steps=5 format=2] 2 | [ext_resource path="moss_albedo.png" type="Texture" id=1] 3 | [ext_resource path="moss_orm.png" type="Texture" id=2] 4 | [ext_resource path="moss_normal.png" type="Texture" id=3] 5 | [ext_resource path="moss_depth.png" type="Texture" id=4] 6 | [resource] 7 | albedo_color = Color(1, 1, 1, 1) 8 | albedo_texture = ExtResource( 1 ) 9 | metallic = 0 10 | roughness = 1 11 | roughness_texture = ExtResource( 2 ) 12 | roughness_texture_channel = 1 13 | normal_enabled = true 14 | normal_scale = 1 15 | normal_texture = ExtResource( 3 ) 16 | depth_enabled = true 17 | depth_scale = 0.1 18 | depth_deep_parallax = true 19 | depth_min_layers = 8 20 | depth_max_layers = 32 21 | depth_flip_tangent = false 22 | depth_flip_binormal = false 23 | depth_texture = ExtResource( 4 ) 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Environment/large_tree_trunk/moss/moss_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/large_tree_trunk/moss/moss_albedo.png -------------------------------------------------------------------------------- /Environment/large_tree_trunk/moss/moss_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cn7jeol1kvocq" 6 | path.s3tc="res://.godot/imported/moss_albedo.png-7427abcbeacc4e9a560261f0e15b4691.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/large_tree_trunk/moss/moss_albedo.png" 15 | dest_files=["res://.godot/imported/moss_albedo.png-7427abcbeacc4e9a560261f0e15b4691.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/large_tree_trunk/moss/moss_depth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/large_tree_trunk/moss/moss_depth.png -------------------------------------------------------------------------------- /Environment/large_tree_trunk/moss/moss_depth.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bvho5kdx7am3f" 6 | path.s3tc="res://.godot/imported/moss_depth.png-7b6fbc0fd549b65800fba2f1663b6d3f.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/large_tree_trunk/moss/moss_depth.png" 15 | dest_files=["res://.godot/imported/moss_depth.png-7b6fbc0fd549b65800fba2f1663b6d3f.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=7 28 | roughness/src_normal="res://Environment/large_tree_trunk/moss/moss_normal.png" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/large_tree_trunk/moss/moss_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/large_tree_trunk/moss/moss_normal.png -------------------------------------------------------------------------------- /Environment/large_tree_trunk/moss/moss_normal.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dubwk207cispr" 6 | path.s3tc="res://.godot/imported/moss_normal.png-82fdffba7db493d54b8a317bfde308b9.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/large_tree_trunk/moss/moss_normal.png" 15 | dest_files=["res://.godot/imported/moss_normal.png-82fdffba7db493d54b8a317bfde308b9.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=1 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=1 28 | roughness/src_normal="res://Environment/large_tree_trunk/moss/moss_normal.png" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/large_tree_trunk/moss/moss_orm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/large_tree_trunk/moss/moss_orm.png -------------------------------------------------------------------------------- /Environment/large_tree_trunk/moss/moss_orm.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cra3ujt6hgoq8" 6 | path.s3tc="res://.godot/imported/moss_orm.png-6e01273275e2bf6ac0a7b5237c3d2194.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/large_tree_trunk/moss/moss_orm.png" 15 | dest_files=["res://.godot/imported/moss_orm.png-6e01273275e2bf6ac0a7b5237c3d2194.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/large_tree_trunk/trunk_top/trunk_top.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" load_steps=4 format=3 uid="uid://cbwea5kec68u6"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://dgpwvrgx1i8um" path="res://Environment/large_tree_trunk/trunk_top/trunk_top_albedo.png" id="1"] 4 | [ext_resource type="Texture2D" uid="uid://dt6dvupgfyhdw" path="res://Environment/large_tree_trunk/trunk_top/trunk_top_orm.png" id="2"] 5 | [ext_resource type="Texture2D" uid="uid://cwf2n313rmv35" path="res://Environment/large_tree_trunk/trunk_top/trunk_top_normal.png" id="3"] 6 | 7 | [resource] 8 | albedo_texture = ExtResource("1") 9 | roughness_texture = ExtResource("2") 10 | roughness_texture_channel = 1 11 | normal_enabled = true 12 | normal_texture = ExtResource("3") 13 | -------------------------------------------------------------------------------- /Environment/large_tree_trunk/trunk_top/trunk_top_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/large_tree_trunk/trunk_top/trunk_top_albedo.png -------------------------------------------------------------------------------- /Environment/large_tree_trunk/trunk_top/trunk_top_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dgpwvrgx1i8um" 6 | path.s3tc="res://.godot/imported/trunk_top_albedo.png-d6789e676e124c0cf215462e96e634da.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/large_tree_trunk/trunk_top/trunk_top_albedo.png" 15 | dest_files=["res://.godot/imported/trunk_top_albedo.png-d6789e676e124c0cf215462e96e634da.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/large_tree_trunk/trunk_top/trunk_top_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/large_tree_trunk/trunk_top/trunk_top_normal.png -------------------------------------------------------------------------------- /Environment/large_tree_trunk/trunk_top/trunk_top_orm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/large_tree_trunk/trunk_top/trunk_top_orm.png -------------------------------------------------------------------------------- /Environment/large_tree_trunk/trunk_top/trunk_top_orm.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dt6dvupgfyhdw" 6 | path.s3tc="res://.godot/imported/trunk_top_orm.png-e29967a1645d1f79c63fdf151ed47305.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/large_tree_trunk/trunk_top/trunk_top_orm.png" 15 | dest_files=["res://.godot/imported/trunk_top_orm.png-e29967a1645d1f79c63fdf151ed47305.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/mushroom/mushroom.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/mushroom/mushroom.glb -------------------------------------------------------------------------------- /Environment/mushroom/mushroom.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://d3jgve1g030hy" 7 | path="res://.godot/imported/mushroom.glb-d2d5892f58c1ae49db0a671ce4040747.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://Environment/mushroom/mushroom.glb" 12 | dest_files=["res://.godot/imported/mushroom.glb-d2d5892f58c1ae49db0a671ce4040747.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | meshes/force_disable_compression=false 26 | skins/use_named_skins=true 27 | animation/import=true 28 | animation/fps=30 29 | animation/trimming=false 30 | animation/remove_immutable_tracks=true 31 | import_script/path="" 32 | _subresources={} 33 | gltf/naming_version=0 34 | gltf/embedded_image_handling=1 35 | -------------------------------------------------------------------------------- /Environment/mushroom/mushroom_mushroom_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/mushroom/mushroom_mushroom_albedo.png -------------------------------------------------------------------------------- /Environment/mushroom/mushroom_mushroom_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bn2dckxcyjlje" 6 | path.s3tc="res://.godot/imported/mushroom_mushroom_albedo.png-10f452aa8ba8910acbcea333968fb90a.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/mushroom/mushroom_mushroom_albedo.png" 15 | dest_files=["res://.godot/imported/mushroom_mushroom_albedo.png-10f452aa8ba8910acbcea333968fb90a.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/mushroom/mushroom_mushroom_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/mushroom/mushroom_mushroom_normal.png -------------------------------------------------------------------------------- /Environment/mushroom/mushroom_mushroom_normal.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bc8j1qgoetjdi" 6 | path.s3tc="res://.godot/imported/mushroom_mushroom_normal.png-45e93ef4317d5dd3ceaec486cc92452a.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/mushroom/mushroom_mushroom_normal.png" 15 | dest_files=["res://.godot/imported/mushroom_mushroom_normal.png-45e93ef4317d5dd3ceaec486cc92452a.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=1 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=1 28 | roughness/src_normal="res://Environment/mushroom/mushroom_mushroom_normal.png" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/orange_flowers/orange_flower.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/orange_flowers/orange_flower.glb -------------------------------------------------------------------------------- /Environment/orange_flowers/orange_flower.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://cndyqf8jamodj" 7 | path="res://.godot/imported/orange_flower.glb-eb02d8bfd3069c3c7b71246be2c48b90.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://Environment/orange_flowers/orange_flower.glb" 12 | dest_files=["res://.godot/imported/orange_flower.glb-eb02d8bfd3069c3c7b71246be2c48b90.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | meshes/force_disable_compression=false 26 | skins/use_named_skins=true 27 | animation/import=true 28 | animation/fps=30 29 | animation/trimming=false 30 | animation/remove_immutable_tracks=true 31 | import_script/path="" 32 | _subresources={} 33 | gltf/naming_version=0 34 | gltf/embedded_image_handling=1 35 | -------------------------------------------------------------------------------- /Environment/orange_flowers/orange_flower.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://8o56ett8oups"] 2 | 3 | [ext_resource type="PackedScene" uid="uid://cndyqf8jamodj" path="res://Environment/orange_flowers/orange_flower.glb" id="1_yjl25"] 4 | 5 | [node name="OrangeFlower" instance=ExtResource("1_yjl25")] 6 | -------------------------------------------------------------------------------- /Environment/orange_flowers/orange_flower_Image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/orange_flowers/orange_flower_Image.png -------------------------------------------------------------------------------- /Environment/orange_flowers/orange_flower_Image.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b4un2d3uwwwub" 6 | path="res://.godot/imported/orange_flower_Image.png-ac9c0f4c51d01de8668f243ab03a46fd.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | generator_parameters={} 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/orange_flowers/orange_flower_Image.png" 15 | dest_files=["res://.godot/imported/orange_flower_Image.png-ac9c0f4c51d01de8668f243ab03a46fd.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | -------------------------------------------------------------------------------- /Environment/orange_flowers/orange_flower_Image_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/orange_flowers/orange_flower_Image_3.png -------------------------------------------------------------------------------- /Environment/orange_flowers/orange_flower_Image_3.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dbnko66pmayh" 6 | path="res://.godot/imported/orange_flower_Image_3.png-171dc3ee714164287e391bf526afefeb.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | generator_parameters={} 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/orange_flowers/orange_flower_Image_3.png" 15 | dest_files=["res://.godot/imported/orange_flower_Image_3.png-171dc3ee714164287e391bf526afefeb.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | -------------------------------------------------------------------------------- /Environment/orange_flowers/orange_flower_flower_blade_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/orange_flowers/orange_flower_flower_blade_albedo.png -------------------------------------------------------------------------------- /Environment/orange_flowers/orange_flower_flower_blade_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/orange_flowers/orange_flower_flower_blade_normal.png -------------------------------------------------------------------------------- /Environment/orange_flowers/orange_flower_pink_flower_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/orange_flowers/orange_flower_pink_flower_albedo.png -------------------------------------------------------------------------------- /Environment/orange_flowers/orange_flower_pink_flower_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/orange_flowers/orange_flower_pink_flower_normal.png -------------------------------------------------------------------------------- /Environment/simple_leaves/simple_leaves.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" load_steps=4 format=3 uid="uid://mjqb6o6pbo2p"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://dap2afqj737q5" path="res://Environment/simple_leaves/simple_leaves_albedo.png" id="1"] 4 | [ext_resource type="Texture2D" uid="uid://ovrmwwayytuc" path="res://Environment/simple_leaves/simple_leaves_orm.png" id="2"] 5 | [ext_resource type="Texture2D" uid="uid://cu1fm3jggdcgv" path="res://Environment/simple_leaves/simple_leaves_normal.png" id="3"] 6 | 7 | [resource] 8 | transparency = 2 9 | alpha_scissor_threshold = 0.5 10 | alpha_antialiasing_mode = 0 11 | albedo_texture = ExtResource("1") 12 | roughness = 0.9 13 | roughness_texture = ExtResource("2") 14 | roughness_texture_channel = 1 15 | normal_enabled = true 16 | normal_texture = ExtResource("3") 17 | ao_enabled = true 18 | ao_light_affect = 1.0 19 | ao_texture = ExtResource("2") 20 | -------------------------------------------------------------------------------- /Environment/simple_leaves/simple_leaves_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/simple_leaves/simple_leaves_albedo.png -------------------------------------------------------------------------------- /Environment/simple_leaves/simple_leaves_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dap2afqj737q5" 6 | path.s3tc="res://.godot/imported/simple_leaves_albedo.png-b39067d69a3b7c959f58972a05dd6db8.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/simple_leaves/simple_leaves_albedo.png" 15 | dest_files=["res://.godot/imported/simple_leaves_albedo.png-b39067d69a3b7c959f58972a05dd6db8.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/simple_leaves/simple_leaves_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/simple_leaves/simple_leaves_normal.png -------------------------------------------------------------------------------- /Environment/simple_leaves/simple_leaves_normal.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cu1fm3jggdcgv" 6 | path.s3tc="res://.godot/imported/simple_leaves_normal.png-8cec5f74e66d4a645352f52c25400352.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/simple_leaves/simple_leaves_normal.png" 15 | dest_files=["res://.godot/imported/simple_leaves_normal.png-8cec5f74e66d4a645352f52c25400352.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=1 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=1 28 | roughness/src_normal="res://materials/simple_leaves/simple_leaves_normal.png" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/simple_leaves/simple_leaves_orm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/simple_leaves/simple_leaves_orm.png -------------------------------------------------------------------------------- /Environment/simple_leaves/simple_leaves_orm.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ovrmwwayytuc" 6 | path.s3tc="res://.godot/imported/simple_leaves_orm.png-290033f05266e7c2796da9a78c2dd5c8.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/simple_leaves/simple_leaves_orm.png" 15 | dest_files=["res://.godot/imported/simple_leaves_orm.png-290033f05266e7c2796da9a78c2dd5c8.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=8 28 | roughness/src_normal="res://materials/simple_leaves/simple_leaves_normal.png" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/sky/blue_sky.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Sky" load_steps=5 format=3 uid="uid://jonn5eom7asv"] 2 | 3 | [ext_resource type="Shader" path="res://Environment/sky/sky.gdshader" id="1_nntdr"] 4 | 5 | [sub_resource type="FastNoiseLite" id="FastNoiseLite_p7i03"] 6 | noise_type = 0 7 | 8 | [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_bkjhb"] 9 | seamless = true 10 | noise = SubResource("FastNoiseLite_p7i03") 11 | 12 | [sub_resource type="ShaderMaterial" id="ShaderMaterial_gu028"] 13 | shader = ExtResource("1_nntdr") 14 | shader_parameter/top_color = Color(0.164706, 0.541176, 0.823529, 1) 15 | shader_parameter/bottom_color = Color(0.215686, 0.109804, 0.0196078, 1) 16 | shader_parameter/sun_scatter = Color(0.529412, 0.8, 1, 1) 17 | shader_parameter/star_stength = 0.0 18 | shader_parameter/clouds_sampler = SubResource("NoiseTexture2D_bkjhb") 19 | 20 | [resource] 21 | sky_material = SubResource("ShaderMaterial_gu028") 22 | -------------------------------------------------------------------------------- /Environment/terrain.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/terrain.glb -------------------------------------------------------------------------------- /Environment/terrain_bridge_planks_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/terrain_bridge_planks_albedo.png -------------------------------------------------------------------------------- /Environment/terrain_bridge_planks_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b4nbhaovwgjrj" 6 | path.s3tc="res://.godot/imported/terrain_bridge_planks_albedo.png-4236f858032947de8e4278500b663129.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/terrain_bridge_planks_albedo.png" 15 | dest_files=["res://.godot/imported/terrain_bridge_planks_albedo.png-4236f858032947de8e4278500b663129.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/terrain_bridge_planks_roughness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/terrain_bridge_planks_roughness.png -------------------------------------------------------------------------------- /Environment/terrain_bridge_planks_roughness.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cu3aa5yfewdlj" 6 | path.s3tc="res://.godot/imported/terrain_bridge_planks_roughness.png-163200a1ef4e33dea672729bfc2e6dea.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/terrain_bridge_planks_roughness.png" 15 | dest_files=["res://.godot/imported/terrain_bridge_planks_roughness.png-163200a1ef4e33dea672729bfc2e6dea.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/tree_trunk/tree_trunk_long.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/tree_trunk/tree_trunk_long.glb -------------------------------------------------------------------------------- /Environment/tree_trunk/tree_trunk_small.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/tree_trunk/tree_trunk_small.glb -------------------------------------------------------------------------------- /Environment/trees/simple_bark/simple_bark_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/trees/simple_bark/simple_bark_albedo.png -------------------------------------------------------------------------------- /Environment/trees/simple_bark/simple_bark_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://vqumgy47y65a" 6 | path.s3tc="res://.godot/imported/simple_bark_albedo.png-1f574432e29aa317aac25a9971c10aab.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/trees/simple_bark/simple_bark_albedo.png" 15 | dest_files=["res://.godot/imported/simple_bark_albedo.png-1f574432e29aa317aac25a9971c10aab.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/trees/simple_bark/simple_bark_depth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/trees/simple_bark/simple_bark_depth.png -------------------------------------------------------------------------------- /Environment/trees/simple_bark/simple_bark_depth.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dnmd828c21irw" 6 | path.s3tc="res://.godot/imported/simple_bark_depth.png-910b2160431894f162cae7213adac9ed.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/trees/simple_bark/simple_bark_depth.png" 15 | dest_files=["res://.godot/imported/simple_bark_depth.png-910b2160431894f162cae7213adac9ed.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=7 28 | roughness/src_normal="res://Environment/trees/simple_bark/simple_bark_normal.png" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/trees/simple_bark/simple_bark_heightmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/trees/simple_bark/simple_bark_heightmap.png -------------------------------------------------------------------------------- /Environment/trees/simple_bark/simple_bark_heightmap.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dd4v2mrsloa8d" 6 | path="res://.godot/imported/simple_bark_heightmap.png-32a5db3add1cf76047772dc42e4fd766.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Environment/trees/simple_bark/simple_bark_heightmap.png" 14 | dest_files=["res://.godot/imported/simple_bark_heightmap.png-32a5db3add1cf76047772dc42e4fd766.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Environment/trees/simple_bark/simple_bark_mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/trees/simple_bark/simple_bark_mask.png -------------------------------------------------------------------------------- /Environment/trees/simple_bark/simple_bark_mask.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://biuslycmdg0lp" 6 | path.s3tc="res://.godot/imported/simple_bark_mask.png-87eb3cea7741bf87a825469df5c91548.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/trees/simple_bark/simple_bark_mask.png" 15 | dest_files=["res://.godot/imported/simple_bark_mask.png-87eb3cea7741bf87a825469df5c91548.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/trees/simple_bark/simple_bark_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/trees/simple_bark/simple_bark_normal.png -------------------------------------------------------------------------------- /Environment/trees/simple_bark/simple_bark_normal.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://0t565g631mks" 6 | path.s3tc="res://.godot/imported/simple_bark_normal.png-642c7d6a3bd5837d3aad581360126f52.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/trees/simple_bark/simple_bark_normal.png" 15 | dest_files=["res://.godot/imported/simple_bark_normal.png-642c7d6a3bd5837d3aad581360126f52.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=1 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=1 28 | roughness/src_normal="res://Environment/trees/simple_bark/simple_bark_normal.png" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/trees/simple_bark/simple_bark_orm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/trees/simple_bark/simple_bark_orm.png -------------------------------------------------------------------------------- /Environment/trees/simple_bark/simple_bark_orm.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://4rh8np1t3ks5" 6 | path.s3tc="res://.godot/imported/simple_bark_orm.png-a84505912f6027f26322f6909f019d37.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/trees/simple_bark/simple_bark_orm.png" 15 | dest_files=["res://.godot/imported/simple_bark_orm.png-a84505912f6027f26322f6909f019d37.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=8 28 | roughness/src_normal="res://Environment/trees/simple_bark/simple_bark_normal.png" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/trees/simple_pine_leaves/simple_pin_leaves.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" load_steps=4 format=3 uid="uid://dow0sucy0ypv3"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://bkohv1qjq5s83" path="res://Environment/trees/simple_pine_leaves/simple_pin_leaves_albedo.png" id="1"] 4 | [ext_resource type="Texture2D" uid="uid://b3j82svml7tsy" path="res://Environment/trees/simple_pine_leaves/simple_pin_leaves_orm.png" id="2"] 5 | [ext_resource type="Texture2D" uid="uid://ctt3orpnvqw7" path="res://Environment/trees/simple_pine_leaves/simple_pin_leaves_normal.png" id="3"] 6 | 7 | [resource] 8 | transparency = 2 9 | alpha_scissor_threshold = 0.5 10 | alpha_antialiasing_mode = 0 11 | albedo_texture = ExtResource("1") 12 | roughness = 0.8 13 | roughness_texture = ExtResource("2") 14 | roughness_texture_channel = 1 15 | normal_enabled = true 16 | normal_texture = ExtResource("3") 17 | -------------------------------------------------------------------------------- /Environment/trees/simple_pine_leaves/simple_pin_leaves_albedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/trees/simple_pine_leaves/simple_pin_leaves_albedo.png -------------------------------------------------------------------------------- /Environment/trees/simple_pine_leaves/simple_pin_leaves_albedo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bkohv1qjq5s83" 6 | path.s3tc="res://.godot/imported/simple_pin_leaves_albedo.png-d4ba65decd3b014daa87e037a392b29e.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/trees/simple_pine_leaves/simple_pin_leaves_albedo.png" 15 | dest_files=["res://.godot/imported/simple_pin_leaves_albedo.png-d4ba65decd3b014daa87e037a392b29e.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/trees/simple_pine_leaves/simple_pin_leaves_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/trees/simple_pine_leaves/simple_pin_leaves_normal.png -------------------------------------------------------------------------------- /Environment/trees/simple_pine_leaves/simple_pin_leaves_orm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/trees/simple_pine_leaves/simple_pin_leaves_orm.png -------------------------------------------------------------------------------- /Environment/trees/simple_pine_leaves/simple_pin_leaves_orm.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b3j82svml7tsy" 6 | path.s3tc="res://.godot/imported/simple_pin_leaves_orm.png-9ae4dc69102b73b8176f41bd581e2368.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Environment/trees/simple_pine_leaves/simple_pin_leaves_orm.png" 15 | dest_files=["res://.godot/imported/simple_pin_leaves_orm.png-9ae4dc69102b73b8176f41bd581e2368.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Environment/trees/tree.obj.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wavefront_obj" 4 | importer_version=1 5 | type="Mesh" 6 | uid="uid://l52lbtnqjt5h" 7 | path="res://.godot/imported/tree.obj-f863df6b684cabd6423c367d0f349e26.mesh" 8 | 9 | [deps] 10 | 11 | files=["res://.godot/imported/tree.obj-f863df6b684cabd6423c367d0f349e26.mesh"] 12 | 13 | source_file="res://Environment/trees/tree.obj" 14 | dest_files=["res://.godot/imported/tree.obj-f863df6b684cabd6423c367d0f349e26.mesh", "res://.godot/imported/tree.obj-f863df6b684cabd6423c367d0f349e26.mesh"] 15 | 16 | [params] 17 | 18 | generate_tangents=true 19 | scale_mesh=Vector3(1, 1, 1) 20 | offset_mesh=Vector3(0, 0, 0) 21 | optimize_mesh=true 22 | force_disable_mesh_compression=false 23 | -------------------------------------------------------------------------------- /Environment/water/textures/caustic_texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Environment/water/textures/caustic_texture.png -------------------------------------------------------------------------------- /Environment/water/textures/caustic_texture.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ssrlnj65d4bs" 6 | path="res://.godot/imported/caustic_texture.png-f4d5056fe9371006b6a958b03db4a951.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Environment/water/textures/caustic_texture.png" 14 | dest_files=["res://.godot/imported/caustic_texture.png-f4d5056fe9371006b6a958b03db4a951.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=1 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=1 23 | compress/channel_pack=0 24 | mipmaps/generate=true 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=0 35 | -------------------------------------------------------------------------------- /Environment/waterfall/waterfall.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | 3 | uniform sampler2D voronoi_sampler; 4 | uniform vec3 water_color_top : source_color; 5 | uniform vec3 water_color_bottom : source_color; 6 | 7 | uniform sampler2D DEPTH_TEXTURE : hint_depth_texture, filter_linear_mipmap; 8 | uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap; 9 | 10 | void vertex(){ 11 | float voronoi = 1.0 - texture(voronoi_sampler, UV + vec2(TIME * 0.1, TIME)).x; 12 | VERTEX += NORMAL * voronoi * (1.0 - UV.y); 13 | } 14 | 15 | void fragment() { 16 | float voronoi = texture(voronoi_sampler, (UV * vec2(4.0, 1.0) * 0.5) + vec2(TIME * 0.1, TIME)).x; 17 | 18 | float water_edge = 1.0 - smoothstep(0.84, 0.86, voronoi + UV.y); 19 | ALBEDO = mix(mix(water_color_bottom , water_color_top, UV.y), vec3(1.0), water_edge); 20 | // ALBEDO *= texture(SCREEN_TEXTURE, SCREEN_UV, 2.0).rgb; 21 | // ALPHA = smoothstep(0.6, 0.65, voronoi + UV.y); 22 | // ALPHA_SCISSOR_THRESHOLD = 0.5; 23 | NORMAL_MAP = normalize(vec3(0.5, voronoi, 0.5)); 24 | NORMAL_MAP_DEPTH = 0.5; 25 | ROUGHNESS = 0.05; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /FullScreenHandler.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | 3 | func _init() -> void: 4 | process_mode = Node.PROCESS_MODE_ALWAYS 5 | 6 | 7 | func _input(event: InputEvent) -> void: 8 | if OS.has_feature("HTML5"): 9 | if event is InputEventMouseButton and Input.mouse_mode != Input.MOUSE_MODE_CAPTURED: 10 | Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) 11 | else: 12 | if event is InputEventKey \ 13 | and event.is_pressed() \ 14 | and ( 15 | event.keycode == KEY_F11 \ 16 | or ( 17 | event.keycode == KEY_ENTER and \ 18 | event.is_alt_pressed() 19 | ) 20 | ): 21 | get_tree().root.mode = Window.MODE_WINDOWED \ 22 | if get_tree().root.mode == Window.MODE_FULLSCREEN \ 23 | else Window.MODE_FULLSCREEN 24 | -------------------------------------------------------------------------------- /JumpingPad/JumpingPad.gd: -------------------------------------------------------------------------------- 1 | extends Area3D 2 | 3 | @export var impulse_strength := 10.0 4 | @onready var mushroom : Node3D = %mushroom 5 | 6 | func _ready() -> void: 7 | body_entered.connect(func(body): 8 | if body is Player: 9 | body.velocity = (Vector3.UP * body.jump_initial_impulse) + (transform.basis * Vector3.UP * impulse_strength) 10 | 11 | var tween := create_tween() 12 | mushroom.scale.y = 0.4 13 | tween.tween_property(mushroom, "scale:y", 1.0, 1.0).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_ELASTIC) 14 | ) 15 | -------------------------------------------------------------------------------- /JumpingPad/JumpingPad.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=3 uid="uid://7j15r0ej4fwx"] 2 | 3 | [ext_resource type="Script" path="res://JumpingPad/JumpingPad.gd" id="1_w7mtj"] 4 | [ext_resource type="PackedScene" uid="uid://d3jgve1g030hy" path="res://Environment/mushroom/mushroom.glb" id="2_3e4pb"] 5 | [ext_resource type="PackedScene" uid="uid://ueivw4w2t3rj" path="res://JumpingPad/JumpingPadVisuals/JumpingPadModel.tscn" id="2_otx0r"] 6 | 7 | [sub_resource type="BoxShape3D" id="BoxShape3D_dspj3"] 8 | size = Vector3(1, 1.4, 1) 9 | 10 | [node name="JumpingPad" type="Area3D"] 11 | script = ExtResource("1_w7mtj") 12 | 13 | [node name="mushroom" parent="." instance=ExtResource("2_3e4pb")] 14 | unique_name_in_owner = true 15 | 16 | [node name="jump_pad" parent="." instance=ExtResource("2_otx0r")] 17 | visible = false 18 | 19 | [node name="CollisionShape3D" type="CollisionShape3D" parent="."] 20 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.694488, 0) 21 | shape = SubResource("BoxShape3D_dspj3") 22 | -------------------------------------------------------------------------------- /JumpingPad/JumpingPadVisuals/JumpingPadModel.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/JumpingPad/JumpingPadVisuals/JumpingPadModel.glb -------------------------------------------------------------------------------- /JumpingPad/JumpingPadVisuals/JumpingPadModel.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://octunbukmgdx" 7 | path="res://.godot/imported/JumpingPadModel.glb-3e6c30d14a0560af68bd0cada394ca5a.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://JumpingPad/JumpingPadVisuals/JumpingPadModel.glb" 12 | dest_files=["res://.godot/imported/JumpingPadModel.glb-3e6c30d14a0560af68bd0cada394ca5a.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | meshes/force_disable_compression=false 26 | skins/use_named_skins=true 27 | animation/import=true 28 | animation/fps=30 29 | animation/trimming=false 30 | animation/remove_immutable_tracks=true 31 | import_script/path="" 32 | _subresources={} 33 | gltf/naming_version=0 34 | gltf/embedded_image_handling=3 35 | -------------------------------------------------------------------------------- /JumpingPad/JumpingPadVisuals/JumpingPadModel.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3 uid="uid://ueivw4w2t3rj"] 2 | 3 | [ext_resource type="PackedScene" uid="uid://octunbukmgdx" path="res://JumpingPad/JumpingPadVisuals/JumpingPadModel.glb" id="1_b8bry"] 4 | [ext_resource type="Material" path="res://JumpingPad/JumpingPadVisuals/JumpingPadModel_screen_mat.tres" id="2_54yml"] 5 | 6 | [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_v7h2g"] 7 | albedo_color = Color(0, 0, 0, 1) 8 | emission_enabled = true 9 | emission = Color(0.27451, 0.462745, 1, 1) 10 | emission_energy_multiplier = 2.0 11 | 12 | [node name="jump_pad" instance=ExtResource("1_b8bry")] 13 | 14 | [node name="Circle_002" parent="." index="1"] 15 | material_override = ExtResource("2_54yml") 16 | 17 | [node name="Circle_003" parent="." index="2"] 18 | material_override = SubResource("StandardMaterial3D_v7h2g") 19 | -------------------------------------------------------------------------------- /JumpingPad/JumpingPadVisuals/JumpingPadModel_screen.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | 3 | uniform vec3 screen_color : source_color = vec3(1.0); 4 | uniform sampler2D cross_sprite : source_color, filter_nearest; 5 | 6 | void fragment() { 7 | // Place fragment code here. 8 | float res = 20.0; 9 | 10 | vec2 g_2 = round(UV * res) / res; 11 | float truc = g_2.x * g_2.y; 12 | 13 | float dist = distance(vec2(0.5), g_2); 14 | float waves = (1.0 + sin((dist - TIME * 0.2) * 10.0)) / 2.0; 15 | 16 | vec2 grid_2d = sin(fract(UV * res + 0.5) * 3.14); 17 | float grid = grid_2d.x * grid_2d.y; 18 | grid = grid * 0.8 + 0.2; 19 | 20 | float cross_shape = 1.0 - round(texture(cross_sprite, g_2 * vec2(0.5, 1.0) 21 | + vec2(mod(round(TIME) * 0.5, 1.0), 0.0) 22 | ).x); 23 | 24 | ALBEDO = vec3(0.0); 25 | EMISSION = screen_color * ((waves * 0.2) + cross_shape) * grid * 2.0; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /JumpingPad/JumpingPadVisuals/JumpingPadModel_screen_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=3 format=3] 2 | 3 | [ext_resource type="Shader" path="res://JumpingPad/JumpingPadVisuals/JumpingPadModel_screen.gdshader" id="1_wo8iw"] 4 | [ext_resource type="Texture2D" uid="uid://byjn4swf18j3i" path="res://JumpingPad/JumpingPadVisuals/cross_sprite.png" id="2_f4kcc"] 5 | 6 | [resource] 7 | render_priority = 0 8 | shader = ExtResource("1_wo8iw") 9 | shader_parameter/cross_sprite = ExtResource("2_f4kcc") 10 | shader_parameter/screen_color = Color(0.376471, 0.615686, 1, 1) 11 | -------------------------------------------------------------------------------- /JumpingPad/JumpingPadVisuals/cross_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/JumpingPad/JumpingPadVisuals/cross_sprite.png -------------------------------------------------------------------------------- /JumpingPad/JumpingPadVisuals/cross_sprite.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://byjn4swf18j3i" 6 | path.s3tc="res://.godot/imported/cross_sprite.png-a97ab93b11b6c2bbacc6bccdbb1e97ba.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://JumpingPad/JumpingPadVisuals/cross_sprite.png" 15 | dest_files=["res://.godot/imported/cross_sprite.png-a97ab93b11b6c2bbacc6bccdbb1e97ba.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Level/DeathPlane.gd: -------------------------------------------------------------------------------- 1 | extends Area3D 2 | 3 | 4 | func _ready() -> void: 5 | body_entered.connect(_on_body_entered) 6 | 7 | 8 | func _on_body_entered(body: Node3D) -> void: 9 | if body is Player: 10 | body.reset_position() 11 | -------------------------------------------------------------------------------- /Level/Main_navmesh.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Level/Main_navmesh.res -------------------------------------------------------------------------------- /Level/Music/mountain.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Level/Music/mountain.mp3 -------------------------------------------------------------------------------- /Level/Music/mountain.mp3.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="mp3" 4 | type="AudioStreamMP3" 5 | uid="uid://bveh08m6w5ryf" 6 | path="res://.godot/imported/mountain.mp3-dced39d6eceee23df0d23af5a54e04c7.mp3str" 7 | 8 | [deps] 9 | 10 | source_file="res://Level/Music/mountain.mp3" 11 | dest_files=["res://.godot/imported/mountain.mp3-dced39d6eceee23df0d23af5a54e04c7.mp3str"] 12 | 13 | [params] 14 | 15 | loop=true 16 | loop_offset=0 17 | bpm=0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /Level/Terrain.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Level/Terrain.glb -------------------------------------------------------------------------------- /Level/gridbox_texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Level/gridbox_texture.png -------------------------------------------------------------------------------- /Level/gridbox_texture.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://boexk81is8yhq" 6 | path.s3tc="res://.godot/imported/gridbox_texture.png-c03ac9b87049f33239d268b57c8b42f8.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Level/gridbox_texture.png" 15 | dest_files=["res://.godot/imported/gridbox_texture.png-c03ac9b87049f33239d268b57c8b42f8.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Player/BulletVisuals/BulletModel.obj.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wavefront_obj" 4 | importer_version=1 5 | type="Mesh" 6 | uid="uid://ch30025kg24b1" 7 | path="res://.godot/imported/BulletModel.obj-68a7a01cbdfffe2b2db64d2e983b8347.mesh" 8 | 9 | [deps] 10 | 11 | files=["res://.godot/imported/BulletModel.obj-68a7a01cbdfffe2b2db64d2e983b8347.mesh"] 12 | 13 | source_file="res://Player/BulletVisuals/BulletModel.obj" 14 | dest_files=["res://.godot/imported/BulletModel.obj-68a7a01cbdfffe2b2db64d2e983b8347.mesh", "res://.godot/imported/BulletModel.obj-68a7a01cbdfffe2b2db64d2e983b8347.mesh"] 15 | 16 | [params] 17 | 18 | generate_tangents=true 19 | scale_mesh=Vector3(1, 1, 1) 20 | offset_mesh=Vector3(0, 0, 0) 21 | optimize_mesh=true 22 | force_disable_mesh_compression=false 23 | -------------------------------------------------------------------------------- /Player/BulletVisuals/bullet_spark_shader.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode unshaded; 3 | 4 | uniform sampler2D sparks_sampler; 5 | 6 | varying float rand_id; 7 | varying float lifetime; 8 | varying vec3 particle_color; 9 | 10 | // Random function from : Patricio Gonzalez Vivo 11 | // https://gist.github.com/patriciogonzalezvivo/670c22f3966e662d2f83 12 | float randF(float n){return fract(sin(n) * 43758.5453123);} 13 | 14 | 15 | void vertex(){ 16 | rand_id = randF(float(INSTANCE_ID)); 17 | particle_color = COLOR.rgb; 18 | lifetime = COLOR.a; 19 | } 20 | 21 | void fragment() { 22 | // Place fragment code here. 23 | float frame_index = round(mod(rand_id + TIME * 8.0, 1.0)) / 2.0; 24 | float mask = texture(sparks_sampler, UV * vec2(0.5, 1.0) + vec2(frame_index, 1.0)).x; 25 | ALPHA = mask * lifetime; 26 | // ALPHA_SCISSOR_THRESHOLD = 0.5; 27 | ALBEDO = particle_color; 28 | EMISSION = particle_color * 1.0; 29 | } 30 | -------------------------------------------------------------------------------- /Player/BulletVisuals/bullet_trail_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=6 format=3 uid="uid://bii1msr5lsqwb"] 2 | 3 | [ext_resource type="Shader" path="res://Player/BulletVisuals/bullet_trail_shader.gdshader" id="1_g6a2q"] 4 | 5 | [sub_resource type="Gradient" id="Gradient_nmj62"] 6 | colors = PackedColorArray(0.992188, 0.338334, 0.021303, 1, 0.979201, 1, 0.461844, 1) 7 | 8 | [sub_resource type="GradientTexture1D" id="GradientTexture1D_mfy1m"] 9 | gradient = SubResource("Gradient_nmj62") 10 | 11 | [sub_resource type="FastNoiseLite" id="FastNoiseLite_q7vao"] 12 | seed = 10 13 | frequency = 0.005 14 | fractal_octaves = 2 15 | 16 | [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_s6o2e"] 17 | seamless = true 18 | noise = SubResource("FastNoiseLite_q7vao") 19 | 20 | [resource] 21 | render_priority = 0 22 | shader = ExtResource("1_g6a2q") 23 | shader_parameter/noise_sampler = SubResource("NoiseTexture2D_s6o2e") 24 | shader_parameter/gradient_1D = SubResource("GradientTexture1D_mfy1m") 25 | -------------------------------------------------------------------------------- /Player/BulletVisuals/bullet_trail_shader.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | 3 | 4 | uniform sampler2D noise_sampler; 5 | uniform sampler2D gradient_1D : source_color; 6 | 7 | void vertex(){ 8 | float v = sin((TIME * 4.0 + UV.y) * 10.0) - 0.5; 9 | 10 | VERTEX.xz += v * NORMAL.xz * 0.02; 11 | } 12 | 13 | void fragment() { 14 | float n = texture(noise_sampler, UV * vec2(1.0, 0.2) + vec2(0.0, TIME)).x; 15 | float edge = smoothstep(0.0, 0.8, UV.y); 16 | // Place fragment code here. 17 | ALPHA = smoothstep(0.0, 0.15, edge * (n + smoothstep(0.6, 1.0, UV.y))); 18 | 19 | 20 | vec3 color = texture(gradient_1D, vec2(n, 0.0)).rgb; 21 | ALBEDO = color; 22 | EMISSION = color * 1.4; 23 | ROUGHNESS = 0.0; 24 | SPECULAR = 0.0; 25 | } 26 | -------------------------------------------------------------------------------- /Player/BulletVisuals/sparks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/BulletVisuals/sparks.png -------------------------------------------------------------------------------- /Player/BulletVisuals/sparks.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dsxj3ih1ne0bu" 6 | path.s3tc="res://.godot/imported/sparks.png-18078a47b59d15deb88d29adc50b5f30.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Player/BulletVisuals/sparks.png" 15 | dest_files=["res://.godot/imported/sparks.png-18078a47b59d15deb88d29adc50b5f30.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Player/Coin/Audio/completetask_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/Coin/Audio/completetask_0.mp3 -------------------------------------------------------------------------------- /Player/Coin/Audio/completetask_0.mp3.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="mp3" 4 | type="AudioStreamMP3" 5 | uid="uid://dxv00m8q7huw5" 6 | path="res://.godot/imported/completetask_0.mp3-06c657f738eb98ae3e61293ae1479493.mp3str" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/Coin/Audio/completetask_0.mp3" 11 | dest_files=["res://.godot/imported/completetask_0.mp3-06c657f738eb98ae3e61293ae1479493.mp3str"] 12 | 13 | [params] 14 | 15 | loop=false 16 | loop_offset=0 17 | bpm=0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /Player/Coin/CoinVisuals/CoinModel.gd: -------------------------------------------------------------------------------- 1 | extends Node3D 2 | 3 | @export var y_amplitude := 0.04 4 | 5 | 6 | func _process(delta): 7 | var t := Time.get_ticks_msec() / 1000.0; 8 | rotation.y += 1.5 * delta 9 | position.y = sin(t) * y_amplitude; 10 | -------------------------------------------------------------------------------- /Player/Coin/CoinVisuals/CoinModel.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/Coin/CoinVisuals/CoinModel.glb -------------------------------------------------------------------------------- /Player/Coin/CoinVisuals/CoinModel.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://dta8u77j4ye4v" 7 | path="res://.godot/imported/CoinModel.glb-8979cd10b263ba5bb6aa0cf262c766bc.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://Player/Coin/CoinVisuals/CoinModel.glb" 12 | dest_files=["res://.godot/imported/CoinModel.glb-8979cd10b263ba5bb6aa0cf262c766bc.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | meshes/force_disable_compression=false 26 | skins/use_named_skins=true 27 | animation/import=true 28 | animation/fps=30 29 | animation/trimming=false 30 | animation/remove_immutable_tracks=true 31 | import_script/path="" 32 | _subresources={} 33 | gltf/naming_version=0 34 | gltf/embedded_image_handling=3 35 | -------------------------------------------------------------------------------- /Player/Coin/CoinVisuals/CoinModel.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://cqw64w6kb0fyg"] 2 | 3 | [ext_resource type="PackedScene" uid="uid://dta8u77j4ye4v" path="res://Player/Coin/CoinVisuals/CoinModel.glb" id="1_0qdgb"] 4 | [ext_resource type="Script" path="res://Player/Coin/CoinVisuals/CoinModel.gd" id="2_eyhxj"] 5 | 6 | [node name="Coin" type="Node3D"] 7 | 8 | [node name="godot_coin" parent="." instance=ExtResource("1_0qdgb")] 9 | script = ExtResource("2_eyhxj") 10 | -------------------------------------------------------------------------------- /Player/CoinsContainer.gd: -------------------------------------------------------------------------------- 1 | extends HBoxContainer 2 | 3 | const HIDDEN_Y_POS := -100 4 | const DISPLAY_Y_POS := 20 5 | 6 | @onready var display_timer: Timer = $Timer 7 | @onready var coins_label: Label = $CoinsLabel 8 | 9 | 10 | func _ready() -> void: 11 | display_timer.timeout.connect(_on_timeout) 12 | 13 | 14 | func update_coins_amount(amount: int) -> void: 15 | if display_timer.is_stopped(): 16 | var tween := create_tween() 17 | tween.tween_property(self, "position:y", DISPLAY_Y_POS, 0.5) 18 | display_timer.start() 19 | coins_label.text = "%d" % amount 20 | 21 | 22 | func _on_timeout() -> void: 23 | var tween := create_tween() 24 | tween.tween_property(self, "position:y", HIDDEN_Y_POS, 0.5) 25 | -------------------------------------------------------------------------------- /Player/ExplosionVisuals/materials/shell_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://b68u2dl4qlooi"] 2 | 3 | [ext_resource type="Shader" path="res://Player/ExplosionVisuals/shaders/shell_shader.gdshader" id="1_lk055"] 4 | 5 | [sub_resource type="FastNoiseLite" id="FastNoiseLite_4kwk8"] 6 | noise_type = 2 7 | seed = 2 8 | fractal_type = 0 9 | fractal_octaves = 1 10 | 11 | [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_q4shp"] 12 | seamless = true 13 | noise = SubResource("FastNoiseLite_4kwk8") 14 | 15 | [resource] 16 | resource_local_to_scene = true 17 | render_priority = 0 18 | shader = ExtResource("1_lk055") 19 | shader_parameter/intensity = 1.0 20 | shader_parameter/shell_color = Color(0.972549, 0.521569, 0, 1) 21 | shader_parameter/edge = 0.05 22 | shader_parameter/progress = 0.0 23 | shader_parameter/voronoi_sampler = SubResource("NoiseTexture2D_q4shp") 24 | -------------------------------------------------------------------------------- /Player/ExplosionVisuals/objects/disk.obj.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wavefront_obj" 4 | importer_version=1 5 | type="Mesh" 6 | uid="uid://bw14c1iaac2sq" 7 | path="res://.godot/imported/disk.obj-d152addaa2d0c7449058da7e1c9d230b.mesh" 8 | 9 | [deps] 10 | 11 | files=["res://.godot/imported/disk.obj-d152addaa2d0c7449058da7e1c9d230b.mesh"] 12 | 13 | source_file="res://Player/ExplosionVisuals/objects/disk.obj" 14 | dest_files=["res://.godot/imported/disk.obj-d152addaa2d0c7449058da7e1c9d230b.mesh", "res://.godot/imported/disk.obj-d152addaa2d0c7449058da7e1c9d230b.mesh"] 15 | 16 | [params] 17 | 18 | generate_tangents=true 19 | scale_mesh=Vector3(1, 1, 1) 20 | offset_mesh=Vector3(0, 0, 0) 21 | optimize_mesh=true 22 | force_disable_mesh_compression=false 23 | -------------------------------------------------------------------------------- /Player/ExplosionVisuals/objects/explosion_smoke.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/ExplosionVisuals/objects/explosion_smoke.glb -------------------------------------------------------------------------------- /Player/ExplosionVisuals/objects/explosion_smoke.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://dmeh0no3vldp6" 7 | path="res://.godot/imported/explosion_smoke.glb-5d36c1c03b12fbf1071eaadecae8fd46.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://Player/ExplosionVisuals/objects/explosion_smoke.glb" 12 | dest_files=["res://.godot/imported/explosion_smoke.glb-5d36c1c03b12fbf1071eaadecae8fd46.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | meshes/force_disable_compression=false 26 | skins/use_named_skins=true 27 | animation/import=true 28 | animation/fps=30 29 | animation/trimming=false 30 | animation/remove_immutable_tracks=true 31 | import_script/path="" 32 | _subresources={} 33 | gltf/naming_version=0 34 | gltf/embedded_image_handling=3 35 | -------------------------------------------------------------------------------- /Player/ExplosionVisuals/shaders/explosion_trails_shader.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode particle_trails, cull_disabled; 3 | 4 | uniform sampler2D noise_sampler; 5 | uniform sampler2D gradient_1D : source_color; 6 | 7 | void fragment() { 8 | float n = texture(noise_sampler, (UV * vec2(0.5, 1.0)) - vec2(0, TIME * 4.0)).x; 9 | float edge = sin(UV.x * PI) * sin(UV.y * PI) ; 10 | float clamped_noise = smoothstep(0.6, 0.2, UV.y * n); 11 | ALPHA = smoothstep(0.2, 0.4, edge) * clamped_noise; 12 | 13 | vec3 color = texture(gradient_1D, vec2(clamped_noise, 0.0)).rgb; 14 | // ALBEDO = color; 15 | EMISSION = color * 1.2; 16 | } 17 | -------------------------------------------------------------------------------- /Player/ExplosionVisuals/shaders/shell_shader.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode cull_disabled; 3 | 4 | uniform float intensity; 5 | uniform vec4 shell_color : source_color; 6 | uniform sampler2D voronoi_sampler; 7 | uniform float edge = 0.05; 8 | uniform float progress : hint_range(0.0, 1.0, 0.01) = 0.5; 9 | void fragment() { 10 | float voronoi = texture(voronoi_sampler, UV * vec2(1.0, 0.6) + TIME * 0.06).x; 11 | float mask = smoothstep(progress - edge, progress + edge, voronoi); 12 | ALPHA = mask * shell_color.a; 13 | ALBEDO = shell_color.rgb; 14 | EMISSION = shell_color.rgb * intensity; 15 | } 16 | -------------------------------------------------------------------------------- /Player/ExplosionVisuals/shaders/smoke_shader.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | uniform sampler2D noise_sampler; 3 | 4 | uniform float progress : hint_range(0.0, 1.0, 0.1) = 0.0; 5 | uniform float movement = 0.5; 6 | uniform float uv_offset = 0.0; 7 | 8 | float fresnel(vec3 normal, vec3 view, float intensity) { 9 | return pow(1.0 - clamp(dot(normal, view), 0.0, 1.0), intensity); 10 | } 11 | 12 | void vertex() { 13 | float noise = texture(noise_sampler, UV + vec2(0.0, uv_offset)).x; 14 | 15 | VERTEX *= movement * COLOR.r; 16 | VERTEX += NORMAL * noise * 0.2; 17 | } 18 | 19 | void fragment() { 20 | // Place fragment code here. 21 | float noise = texture(noise_sampler, UV + COLOR.g * 0.1).x; 22 | float mask = smoothstep(progress - 0.1, progress + 0.1, noise); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Player/GrenadeVisuals/aim_material.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://dus6jtbfyqwj8"] 2 | 3 | [ext_resource type="Shader" path="res://Player/GrenadeVisuals/shaders/grenade_target_shader.gdshader" id="1_uga5q"] 4 | [ext_resource type="Texture2D" uid="uid://xyoxovlnkwl" path="res://Player/GrenadeVisuals/textures/target_frame_mask.png" id="2_s8r32"] 5 | [ext_resource type="Texture2D" uid="uid://cqvk4kfl0bxav" path="res://Player/GrenadeVisuals/textures/target_mask.png" id="3_tgeou"] 6 | 7 | [resource] 8 | render_priority = 0 9 | shader = ExtResource("1_uga5q") 10 | shader_parameter/fill_color = Color(0, 0.72549, 1, 1) 11 | shader_parameter/target_mask_sampler = ExtResource("3_tgeou") 12 | shader_parameter/target_frame_mask_sampler = ExtResource("2_s8r32") 13 | -------------------------------------------------------------------------------- /Player/GrenadeVisuals/grenade/grenade.gd: -------------------------------------------------------------------------------- 1 | extends Node3D 2 | 3 | var rotation_axis := Vector3(1.0, 0.0, 0.0).normalized() 4 | 5 | func _ready(): 6 | $AnimationPlayer.play("wave") 7 | 8 | func _process(delta): 9 | rotate_object_local(rotation_axis, 10.0 * delta) 10 | 11 | -------------------------------------------------------------------------------- /Player/GrenadeVisuals/grenade/grenade.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/GrenadeVisuals/grenade/grenade.glb -------------------------------------------------------------------------------- /Player/GrenadeVisuals/grenade/grenade.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://bmg4l7oil4aeu" 7 | path="res://.godot/imported/grenade.glb-f043f42f6efaffee235dda6174637778.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://Player/GrenadeVisuals/grenade/grenade.glb" 12 | dest_files=["res://.godot/imported/grenade.glb-f043f42f6efaffee235dda6174637778.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | meshes/force_disable_compression=false 26 | skins/use_named_skins=true 27 | animation/import=true 28 | animation/fps=30 29 | animation/trimming=false 30 | animation/remove_immutable_tracks=true 31 | import_script/path="" 32 | _subresources={} 33 | gltf/naming_version=0 34 | gltf/embedded_image_handling=3 35 | -------------------------------------------------------------------------------- /Player/GrenadeVisuals/grenade/grenade.material: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/GrenadeVisuals/grenade/grenade.material -------------------------------------------------------------------------------- /Player/GrenadeVisuals/shaders/grenade_target_shader.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode ambient_light_disabled; 3 | 4 | uniform sampler2D target_mask_sampler : source_color, repeat_disable, filter_linear_mipmap_anisotropic; 5 | uniform sampler2D target_frame_mask_sampler : source_color, repeat_disable; 6 | uniform vec3 fill_color : source_color = vec3(1.0); 7 | 8 | vec2 rotateUV(vec2 uv, float rotation) 9 | { 10 | float mid = 0.5; 11 | return vec2( 12 | cos(rotation) * (uv.x - mid) + sin(rotation) * (uv.y - mid) + mid, 13 | cos(rotation) * (uv.y - mid) - sin(rotation) * (uv.x - mid) + mid 14 | ); 15 | } 16 | 17 | void fragment() { 18 | float dist = 1.0 - distance(vec2(0.5, 0.5), UV); 19 | ALBEDO = fill_color; 20 | EMISSION = fill_color * 1.0; 21 | float circle = texture(target_mask_sampler, rotateUV(UV, mod(TIME, PI))).x; 22 | float frame = texture(target_frame_mask_sampler, UV).x; 23 | ALPHA = circle + frame; 24 | ALPHA += (1.0 + sin((dist * 15.0) + TIME)) / 2.0 * smoothstep(0.5,1.0, dist) * 0.1; 25 | ALPHA = clamp(ALPHA, 0.0, 1.0); 26 | } -------------------------------------------------------------------------------- /Player/GrenadeVisuals/shaders/grenade_trajectory_shader.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode ambient_light_disabled, cull_disabled; 3 | 4 | uniform sampler2D arrow_sampler : source_color; 5 | uniform vec3 fill_color : source_color = vec3(1.0); 6 | uniform float arrow_scale = 1.0; 7 | 8 | void fragment() { 9 | float y_ease = sin(UV.x * PI); 10 | float arrow_time = mod(TIME, 1.0); 11 | float band_time = mod(TIME * 0.2, 1.0); 12 | 13 | float arrows = y_ease * texture(arrow_sampler, UV * vec2(arrow_scale, 1.0) - vec2(arrow_time, 0.0)).x; 14 | float band_ease = y_ease * sin(UV.y * PI); 15 | float stripes = (1.0 + sin((UV.x * 6.0 - band_time) * TAU)) / 2.0 * 0.1 + 0.4; 16 | 17 | ALBEDO = fill_color; 18 | EMISSION = fill_color + arrows * fill_color * 5.0; 19 | ALPHA = clamp(band_ease * stripes + arrows, 0.0, 1.0); 20 | } 21 | 22 | -------------------------------------------------------------------------------- /Player/GrenadeVisuals/textures/direction_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/GrenadeVisuals/textures/direction_arrow.png -------------------------------------------------------------------------------- /Player/GrenadeVisuals/textures/direction_arrow.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bippf64bo5eeo" 6 | path.s3tc="res://.godot/imported/direction_arrow.png-564ea6b147ccdb60c9ab32a57bc60e94.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Player/GrenadeVisuals/textures/direction_arrow.png" 15 | dest_files=["res://.godot/imported/direction_arrow.png-564ea6b147ccdb60c9ab32a57bc60e94.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Player/GrenadeVisuals/textures/target_frame_mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/GrenadeVisuals/textures/target_frame_mask.png -------------------------------------------------------------------------------- /Player/GrenadeVisuals/textures/target_frame_mask.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://xyoxovlnkwl" 6 | path.s3tc="res://.godot/imported/target_frame_mask.png-b3001f5275bce6d804e0261444c1ec76.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Player/GrenadeVisuals/textures/target_frame_mask.png" 15 | dest_files=["res://.godot/imported/target_frame_mask.png-b3001f5275bce6d804e0261444c1ec76.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Player/GrenadeVisuals/textures/target_mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/GrenadeVisuals/textures/target_mask.png -------------------------------------------------------------------------------- /Player/GrenadeVisuals/textures/target_mask.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cqvk4kfl0bxav" 6 | path.s3tc="res://.godot/imported/target_mask.png-8b4905ea4b020dc2a337483e00bad706.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Player/GrenadeVisuals/textures/target_mask.png" 15 | dest_files=["res://.godot/imported/target_mask.png-8b4905ea4b020dc2a337483e00bad706.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Player/GrenadeVisuals/trajectory_material.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://b6h7p7jogt6ep"] 2 | 3 | [ext_resource type="Shader" path="res://Player/GrenadeVisuals/shaders/grenade_trajectory_shader.gdshader" id="1_kmqra"] 4 | [ext_resource type="Texture2D" uid="uid://bippf64bo5eeo" path="res://Player/GrenadeVisuals/textures/direction_arrow.png" id="2_tlckp"] 5 | 6 | [resource] 7 | render_priority = 0 8 | shader = ExtResource("1_kmqra") 9 | shader_parameter/fill_color = Color(0, 0.725568, 1, 1) 10 | shader_parameter/arrow_scale = 60.0 11 | shader_parameter/arrow_sampler = ExtResource("2_tlckp") 12 | -------------------------------------------------------------------------------- /Player/GrenadeVisuals/trajectory_mockup.obj.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wavefront_obj" 4 | importer_version=1 5 | type="Mesh" 6 | uid="uid://laarq7txjf7v" 7 | path="res://.godot/imported/trajectory_mockup.obj-3fc2c5c3d7b205e9d7fcc7c160ff5735.mesh" 8 | 9 | [deps] 10 | 11 | files=["res://.godot/imported/trajectory_mockup.obj-3fc2c5c3d7b205e9d7fcc7c160ff5735.mesh"] 12 | 13 | source_file="res://Player/GrenadeVisuals/trajectory_mockup.obj" 14 | dest_files=["res://.godot/imported/trajectory_mockup.obj-3fc2c5c3d7b205e9d7fcc7c160ff5735.mesh", "res://.godot/imported/trajectory_mockup.obj-3fc2c5c3d7b205e9d7fcc7c160ff5735.mesh"] 15 | 16 | [params] 17 | 18 | generate_tangents=true 19 | scale_mesh=Vector3(1, 1, 1) 20 | offset_mesh=Vector3(0, 0, 0) 21 | optimize_mesh=true 22 | force_disable_mesh_compression=false 23 | -------------------------------------------------------------------------------- /Player/GrenadeVisuals/trajectory_mockup.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://b8uv1u3dqfsex"] 2 | 3 | [ext_resource type="ArrayMesh" uid="uid://laarq7txjf7v" path="res://Player/GrenadeVisuals/trajectory_mockup.obj" id="1_aj1ww"] 4 | [ext_resource type="Material" uid="uid://b6h7p7jogt6ep" path="res://Player/GrenadeVisuals/trajectory_material.tres" id="2_rs318"] 5 | 6 | [node name="TrajectoryMockup" type="MeshInstance3D"] 7 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0) 8 | mesh = ExtResource("1_aj1ww") 9 | surface_material_override/0 = ExtResource("2_rs318") 10 | -------------------------------------------------------------------------------- /Player/MeleeAttackArea.gd: -------------------------------------------------------------------------------- 1 | extends Area3D 2 | 3 | @onready var collision_shape: CollisionShape3D = $CollisionShape3d 4 | 5 | 6 | 7 | # Called when the node enters the scene tree for the first time. 8 | func _ready() -> void: 9 | body_entered.connect(_on_body_entered) 10 | 11 | 12 | func activate(): 13 | collision_shape.set_deferred("disabled", false) 14 | 15 | 16 | func deactivate(): 17 | collision_shape.set_deferred("disabled", true) 18 | 19 | 20 | func _on_body_entered(body: Node3D) -> void: 21 | if body.is_in_group("damageables"): 22 | var impact_point := global_position - body.global_position 23 | var force := -impact_point 24 | body.damage(impact_point, force) 25 | -------------------------------------------------------------------------------- /Player/Sounds/03_Step_grass_03.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/Sounds/03_Step_grass_03.wav -------------------------------------------------------------------------------- /Player/Sounds/03_Step_grass_03.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://bx0t7f2nuk2lr" 6 | path="res://.godot/imported/03_Step_grass_03.wav-7ef15f9a4deda9d7247792f51488eaaa.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/Sounds/03_Step_grass_03.wav" 11 | dest_files=["res://.godot/imported/03_Step_grass_03.wav-7ef15f9a4deda9d7247792f51488eaaa.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/Sounds/45_Landing_01.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/Sounds/45_Landing_01.wav -------------------------------------------------------------------------------- /Player/Sounds/45_Landing_01.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://cbcb2d63weegs" 6 | path="res://.godot/imported/45_Landing_01.wav-c911172293f2da90943cedfb3b8ed17f.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/Sounds/45_Landing_01.wav" 11 | dest_files=["res://.godot/imported/45_Landing_01.wav-c911172293f2da90943cedfb3b8ed17f.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/Sounds/lasershot-102078.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/Sounds/lasershot-102078.wav -------------------------------------------------------------------------------- /Player/Sounds/lasershot-102078.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://c7w6ecthdjbuk" 6 | path="res://.godot/imported/lasershot-102078.wav-d665d98e82257b346ed19f9c68668ecf.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/Sounds/lasershot-102078.wav" 11 | dest_files=["res://.godot/imported/lasershot-102078.wav-d665d98e82257b346ed19f9c68668ecf.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/Sounds/musket-explosion-6383.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/Sounds/musket-explosion-6383.wav -------------------------------------------------------------------------------- /Player/Sounds/musket-explosion-6383.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://csou1m38pk3m4" 6 | path="res://.godot/imported/musket-explosion-6383.wav-3c1061a01a4d0adfed66e20385b2c864.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/Sounds/musket-explosion-6383.wav" 11 | dest_files=["res://.godot/imported/musket-explosion-6383.wav-3c1061a01a4d0adfed66e20385b2c864.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/model/custom_animations/default_heartbeat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Animation" format=3 uid="uid://b627b68jhaqwt"] 2 | 3 | [resource] 4 | length = 3.0 5 | loop_mode = 1 6 | tracks/0/type = "value" 7 | tracks/0/imported = false 8 | tracks/0/enabled = true 9 | tracks/0/path = NodePath("Armature/Skeleton3D/gdbot_mesh:surface_material_override/2:emission_energy_multiplier") 10 | tracks/0/interp = 1 11 | tracks/0/loop_wrap = true 12 | tracks/0/keys = { 13 | "times": PackedFloat32Array(0, 1.5, 3), 14 | "transitions": PackedFloat32Array(1, 1, 1), 15 | "update": 0, 16 | "values": [0.5, 3.0, 0.5] 17 | } 18 | -------------------------------------------------------------------------------- /Player/model/custom_animations/simple_blink.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Animation" load_steps=3 format=3 uid="uid://diuutac72yquv"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://dbag7f8i27ub1" path="res://Player/model/faces/open.png" id="1_vbky0"] 4 | [ext_resource type="Texture2D" uid="uid://ci7cn145ld3l5" path="res://Player/model/faces/closed.png" id="2_xwfhj"] 5 | 6 | [resource] 7 | length = 4.0 8 | loop_mode = 1 9 | tracks/0/type = "value" 10 | tracks/0/imported = false 11 | tracks/0/enabled = true 12 | tracks/0/path = NodePath("Armature/Skeleton3D/gdbot_mesh:surface_material_override/1:shader_parameter/face_texture") 13 | tracks/0/interp = 0 14 | tracks/0/loop_wrap = true 15 | tracks/0/keys = { 16 | "times": PackedFloat32Array(1.5, 1.7, 1.9, 2.1, 2.5), 17 | "transitions": PackedFloat32Array(1, 1, 1, 1, 1), 18 | "update": 1, 19 | "values": [ExtResource("1_vbky0"), ExtResource("2_xwfhj"), ExtResource("1_vbky0"), ExtResource("2_xwfhj"), ExtResource("1_vbky0")] 20 | } 21 | -------------------------------------------------------------------------------- /Player/model/default_state_machine.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="AnimationNodeStateMachinePlayback" format=3 uid="uid://uhx6kfu45rrc"] 2 | 3 | [resource] 4 | -------------------------------------------------------------------------------- /Player/model/faces/closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/model/faces/closed.png -------------------------------------------------------------------------------- /Player/model/faces/closed.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ci7cn145ld3l5" 6 | path.s3tc="res://.godot/imported/closed.png-42532ba54706a0108ef22e811cad244d.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Player/model/faces/closed.png" 15 | dest_files=["res://.godot/imported/closed.png-42532ba54706a0108ef22e811cad244d.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Player/model/faces/open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/model/faces/open.png -------------------------------------------------------------------------------- /Player/model/faces/open.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dbag7f8i27ub1" 6 | path.s3tc="res://.godot/imported/open.png-928abc3f6bef2a9c60756e3d690fc8df.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Player/model/faces/open.png" 15 | dest_files=["res://.godot/imported/open.png-928abc3f6bef2a9c60756e3d690fc8df.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /Player/model/gdbot.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/Player/model/gdbot.glb -------------------------------------------------------------------------------- /Player/model/materials/face_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://dh42cdejchkr3"] 2 | 3 | [ext_resource type="Shader" path="res://Player/face_mat.gdshader" id="1_u8nh3"] 4 | [ext_resource type="Texture2D" uid="uid://dbag7f8i27ub1" path="res://Player/model/faces/open.png" id="2_3u454"] 5 | 6 | [resource] 7 | render_priority = 0 8 | shader = ExtResource("1_u8nh3") 9 | shader_parameter/intensity = 4.0 10 | shader_parameter/screen_color = Color(0.0784314, 0.556863, 1, 0.00784314) 11 | shader_parameter/screen_red_offset = Vector2(0, 0) 12 | shader_parameter/screen_green_offset = Vector2(0, 0) 13 | shader_parameter/screen_blue_offset = Vector2(0, 0) 14 | shader_parameter/pixel_size = 44.0 15 | shader_parameter/face_texture = ExtResource("2_3u454") 16 | -------------------------------------------------------------------------------- /Player/model/materials/glass_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" format=3 uid="uid://4ugdxr58llu8"] 2 | 3 | [resource] 4 | transparency = 1 5 | albedo_color = Color(1, 1, 1, 0.443137) 6 | metallic_specular = 1.0 7 | roughness = 0.1 8 | -------------------------------------------------------------------------------- /Player/model/materials/heart_core_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" format=3 uid="uid://cq6bdna8ieu87"] 2 | 3 | [resource] 4 | albedo_color = Color(0, 0, 0, 1) 5 | emission_enabled = true 6 | emission = Color(0, 1, 0.392157, 1) 7 | emission_energy_multiplier = 2.29758 8 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/icon.png -------------------------------------------------------------------------------- /icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bhisslvb8otag" 6 | path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.png" 14 | dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bdfgu6dhltmjh" 6 | path.s3tc="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://icon.svg" 15 | dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=false 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /icons/bomb_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/icons/bomb_icon.png -------------------------------------------------------------------------------- /icons/bomb_icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cj4npx16cmso7" 6 | path="res://.godot/imported/bomb_icon.png-96c345518cdc06adf7cb2c1903677917.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icons/bomb_icon.png" 14 | dest_files=["res://.godot/imported/bomb_icon.png-96c345518cdc06adf7cb2c1903677917.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /icons/flash_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/icons/flash_icon.png -------------------------------------------------------------------------------- /icons/flash_icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://10s03a0ng24t" 6 | path="res://.godot/imported/flash_icon.png-fed37284415cdafb516be7a0a7e63cd3.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icons/flash_icon.png" 14 | dest_files=["res://.godot/imported/flash_icon.png-fed37284415cdafb516be7a0a7e63cd3.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /icons/icone.gd: -------------------------------------------------------------------------------- 1 | extends TextureRect 2 | 3 | var disabled_alpha := 0.2 4 | 5 | func _ready(): 6 | modulate.a = disabled_alpha 7 | 8 | func set_state(state: bool): 9 | var from_to := [Color(1, 1, 1, disabled_alpha), Color.WHITE] 10 | if state : from_to.reverse() 11 | var tween := create_tween() 12 | tween.tween_property(self, "modulate", from_to[0], 0.2).from(from_to[1]) 13 | -------------------------------------------------------------------------------- /icons/icone.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://b1fed4rxaa3qj"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://10s03a0ng24t" path="res://icons/flash_icon.png" id="1_tbpcg"] 4 | [ext_resource type="Script" path="res://icons/icone.gd" id="2_fy12r"] 5 | 6 | [node name="Flash" type="TextureRect"] 7 | unique_name_in_owner = true 8 | anchors_preset = 8 9 | anchor_left = 0.5 10 | anchor_top = 0.5 11 | anchor_right = 0.5 12 | anchor_bottom = 0.5 13 | offset_left = -32.0 14 | offset_top = -32.0 15 | offset_right = 32.0 16 | offset_bottom = 32.0 17 | grow_horizontal = 2 18 | grow_vertical = 2 19 | size_flags_horizontal = 4 20 | size_flags_vertical = 4 21 | texture = ExtResource("1_tbpcg") 22 | stretch_mode = 5 23 | script = ExtResource("2_fy12r") 24 | -------------------------------------------------------------------------------- /icons/weapon_ui.gd: -------------------------------------------------------------------------------- 1 | extends PanelContainer 2 | 3 | @onready var nodes := { 4 | "DEFAULT" : %Flash, 5 | "GRENADE" : %Grenade 6 | } 7 | 8 | var selected_node: String = "" 9 | 10 | 11 | func switch_to(node_name : String): 12 | # Return if same node 13 | if node_name == selected_node: return 14 | if selected_node != "": 15 | # Unselect previous 16 | nodes[selected_node].set_state(false) 17 | # Select node 18 | nodes[node_name].set_state(true) 19 | selected_node = node_name 20 | -------------------------------------------------------------------------------- /shared/eye_mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/shared/eye_mask.png -------------------------------------------------------------------------------- /shared/eye_mask.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://d3i42hq0p8ijb" 6 | path="res://.godot/imported/eye_mask.png-eb04deff24da2e33c71378a92e296303.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://shared/eye_mask.png" 14 | dest_files=["res://.godot/imported/eye_mask.png-eb04deff24da2e33c71378a92e296303.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=true 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=0 35 | -------------------------------------------------------------------------------- /shared/shaders/wireframe.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | 3 | uniform float wire_width : hint_range(0.0, 40.0) = 5.0; 4 | uniform float wire_smoothness : hint_range(0.0, 0.1) = 0.01; 5 | uniform bool flat_shading = true; 6 | 7 | varying vec3 barys; 8 | 9 | void vertex() { 10 | int index = VERTEX_ID % 3; 11 | switch (index) { 12 | case 0: 13 | barys = vec3(1.0, 0.0, 0.0); 14 | break; 15 | case 1: 16 | barys = vec3(0.0, 1.0, 0.0); 17 | break; 18 | case 2: 19 | barys = vec3(0.0, 0.0, 1.0); 20 | break; 21 | } 22 | } 23 | 24 | void fragment() { 25 | if (flat_shading) 26 | NORMAL = normalize(cross(dFdy(VERTEX), dFdx(VERTEX))); 27 | vec3 deltas = fwidth(barys); 28 | vec3 barys_s = smoothstep(deltas * wire_width - wire_smoothness, deltas * wire_width + wire_smoothness, barys); 29 | float min_bary = min(barys_s.x, min(barys_s.y, barys_s.z)); 30 | ALBEDO = vec3(min_bary); 31 | } -------------------------------------------------------------------------------- /shared/textures/eye_mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/shared/textures/eye_mask.png -------------------------------------------------------------------------------- /shared/textures/eye_mask.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bvxkh2pa1nqdq" 6 | path="res://.godot/imported/eye_mask.png-2376545ebf6390f41a05fc93cfb8901c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://shared/textures/eye_mask.png" 14 | dest_files=["res://.godot/imported/eye_mask.png-2376545ebf6390f41a05fc93cfb8901c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=true 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=0 35 | -------------------------------------------------------------------------------- /static/.gdignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/static/.gdignore -------------------------------------------------------------------------------- /static/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/static/cover.webp -------------------------------------------------------------------------------- /static/third-person-character-aiming-grenade.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/static/third-person-character-aiming-grenade.webp -------------------------------------------------------------------------------- /static/third-person-shooter-demo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-3d-third-person-controller/9fffa2947744181e05078e3e364f43dbb8a221d7/static/third-person-shooter-demo.webp --------------------------------------------------------------------------------