diff --git a/materials/hair.ptex b/materials/hair.ptex index bee45fbc..d5652474 100644 --- a/materials/hair.ptex +++ b/materials/hair.ptex @@ -157,10 +157,10 @@ }, { "a": 1, - "b": 0.293732, - "g": 0.558716, + "b": 0.317825, + "g": 0.449612, "pos": 1, - "r": 0.683594 + "r": 0.511719 } ], "type": "Gradient" @@ -188,10 +188,10 @@ }, { "a": 1, - "b": 0.238342, - "g": 0.431115, + "b": 0.194183, + "g": 0.320966, "pos": 1, - "r": 0.554688 + "r": 0.394531 } ], "type": "Gradient" @@ -209,9 +209,9 @@ "parameters": { "color": { "a": 1, - "b": 0.148543, - "g": 0.40435, - "r": 0.513205, + "b": 0.098557, + "g": 0.200086, + "r": 0.243821, "type": "Color" } }, diff --git a/materials/leaves.ptex b/materials/leaves.ptex index 83798112..910cd038 100644 --- a/materials/leaves.ptex +++ b/materials/leaves.ptex @@ -246,8 +246,8 @@ "opacity": 0, "rotate": 33.6, "scale": 0, - "scale_x": 0.1, - "scale_y": 0.1, + "scale_x": 0.08, + "scale_y": 0.08, "select_inputs": 0, "variations": false }, @@ -363,15 +363,15 @@ "longdesc": "", "name": "graph", "node_position": { - "x": -1656.337646, - "y": 239.964798 + "x": -1659.217529, + "y": 234.204788 }, "nodes": [ { "name": "gradient", "node_position": { - "x": -1348.702759, - "y": -153.089325 + "x": -975.742798, + "y": -137.249329 }, "parameters": { "gradient": { @@ -410,8 +410,8 @@ { "name": "profile", "node_position": { - "x": -1083.223633, - "y": -554.144897 + "x": -1011.223633, + "y": -529.664917 }, "parameters": { "gradient": { @@ -466,8 +466,8 @@ "generic_size": 1, "name": "transform2", "node_position": { - "x": -840.445862, - "y": -606.117126 + "x": -755.48584, + "y": -525.477112 }, "parameters": { "mode": 0, @@ -483,7 +483,7 @@ { "name": "mirror_2", "node_position": { - "x": -480.723633, + "x": -482.163635, "y": -528.339417 }, "parameters": { @@ -527,8 +527,8 @@ { "name": "gradient_2", "node_position": { - "x": -1407.029297, - "y": -349.533844 + "x": -1034.069336, + "y": -333.693848 }, "parameters": { "gradient": { @@ -560,8 +560,8 @@ { "name": "math_3", "node_position": { - "x": -1096.695801, - "y": -304.339325 + "x": -723.735779, + "y": -288.499329 }, "parameters": { "clamp": true, @@ -575,8 +575,8 @@ { "name": "mirror", "node_position": { - "x": -867.75824, - "y": -317.321564 + "x": -494.798187, + "y": -301.481567 }, "parameters": { "direction": 0, @@ -652,8 +652,8 @@ { "name": "colorize_2", "node_position": { - "x": 768.980774, - "y": -574.599365 + "x": 760.782471, + "y": -570.259094 }, "parameters": { "gradient": { @@ -661,31 +661,24 @@ "points": [ { "a": 0, - "b": 1, - "g": 1, - "pos": 0, - "r": 1 - }, - { - "a": 1, - "b": 1, - "g": 1, - "pos": 0.000001, - "r": 1 + "b": 0, + "g": 0, + "pos": 0.016611, + "r": 0 }, { "a": 1, "b": 0.17453, "g": 0.519531, - "pos": 0.028095, + "pos": 0.0299, "r": 0.201483 }, { "a": 1, - "b": 0.109985, - "g": 0.207031, - "pos": 0.821499, - "r": 0.163057 + "b": 0, + "g": 0, + "pos": 0.851905, + "r": 0 } ], "type": "Gradient" @@ -712,8 +705,8 @@ { "name": "gen_outputs", "node_position": { - "x": 1041.897461, - "y": -436.653137 + "x": 1056.36499, + "y": -564.450195 }, "parameters": { @@ -749,8 +742,8 @@ { "name": "math", "node_position": { - "x": 721.161072, - "y": -414.326324 + "x": 755.883301, + "y": -499.202881 }, "parameters": { "clamp": true, diff --git a/materials/vignette.png b/materials/vignette.png new file mode 100644 index 00000000..f24b9ad1 Binary files /dev/null and b/materials/vignette.png differ diff --git a/materials/vignette.svg b/materials/vignette.svg new file mode 100644 index 00000000..c2d4cb39 --- /dev/null +++ b/materials/vignette.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + diff --git a/modules/going/game_ui.cpp b/modules/going/game_ui.cpp new file mode 100644 index 00000000..69b37c27 --- /dev/null +++ b/modules/going/game_ui.cpp @@ -0,0 +1,33 @@ +#include "game_ui.h" + +GameUI *GameUI::singleton_instance{nullptr}; + +void GameUI::_bind_methods() { + ClassDB::bind_method(D_METHOD("display_message", "text"), &self_type::display_message); + ClassDB::bind_static_method("GameUI", D_METHOD("get_singleton"), &self_type::get_singleton); +} + +void GameUI::_notification(int what) { + if(Engine::get_singleton()->is_editor_hint()) { + return; + } + if(what == NOTIFICATION_ENTER_TREE) { + ERR_FAIL_COND_EDMSG(self_type::singleton_instance != nullptr, "GameUI instance already exists, deleting second instance"); + self_type::singleton_instance = this; + } else if(what == NOTIFICATION_EXIT_TREE) { + self_type::singleton_instance = nullptr; + } + if(what == NOTIFICATION_READY) { + this->message = Object::cast_to(this->get_node(NodePath("%MessageLabel"))); + this->clear_message_timer = Object::cast_to(this->get_node(NodePath("%ClearMessageTimer"))); + } +} + +GameUI *GameUI::get_singleton() { + return self_type::singleton_instance; +} + +void GameUI::display_message(String text) { + this->message->set_text(text); + this->clear_message_timer->start(0.0); +} diff --git a/modules/going/game_ui.h b/modules/going/game_ui.h new file mode 100644 index 00000000..648f628c --- /dev/null +++ b/modules/going/game_ui.h @@ -0,0 +1,22 @@ +#ifndef GAME_UI_H +#define GAME_UI_H + +#include "core/string/ustring.h" +#include "scene/main/canvas_layer.h" +#include "scene/gui/rich_text_label.h" +#include "scene/main/timer.h" + +class GameUI : public CanvasLayer { + GDCLASS(GameUI, CanvasLayer); + static void _bind_methods(); + void _notification(int what); + static GameUI *singleton_instance; +public: + static GameUI *get_singleton(); + void display_message(String text); +private: + RichTextLabel *message{nullptr}; + Timer *clear_message_timer{nullptr}; +}; + +#endif // !GAME_UI_H diff --git a/modules/going/player_body.cpp b/modules/going/player_body.cpp index f6cb23ad..5d2e7df4 100644 --- a/modules/going/player_body.cpp +++ b/modules/going/player_body.cpp @@ -28,6 +28,8 @@ void PlayerBody::_bind_methods() { BIND_PROPERTY(Variant::VECTOR2, jump_impulse); BIND_PROPERTY(Variant::FLOAT, model_lean); BIND_PROPERTY(Variant::FLOAT, model_lean_speed); + BIND_PROPERTY(Variant::FLOAT, game_over_speed); + BIND_PROPERTY(Variant::BOOL, can_jump); } void PlayerBody::_notification(int what) { @@ -189,3 +191,19 @@ void PlayerBody::set_model_lean_speed(float value) { float PlayerBody::get_model_lean_speed() const { return this->model_lean_speed; } + +void PlayerBody::set_game_over_speed(float value) { + this->game_over_speed = value; +} + +float PlayerBody::get_game_over_speed() const { + return this->game_over_speed; +} + +void PlayerBody::set_can_jump(bool value) { + this->can_jump = value; +} + +bool PlayerBody::get_can_jump() const { + return this->can_jump; +} diff --git a/modules/going/player_body.h b/modules/going/player_body.h index b1867c9c..677dda1a 100644 --- a/modules/going/player_body.h +++ b/modules/going/player_body.h @@ -44,6 +44,10 @@ public: float get_model_lean() const; void set_model_lean_speed(float value); float get_model_lean_speed() const; + void set_game_over_speed(float value); + float get_game_over_speed() const; + void set_can_jump(bool value); + bool get_can_jump() const; private: Vector2 movement{0.f, 0.f}; @@ -65,6 +69,8 @@ private: double max_delta_fov{100.f}; float model_lean{0.25f}; float model_lean_speed{0.25f}; + double game_over_speed{1.0/4.0}; + bool can_jump{false}; public: static char *const split_step_action; static char *const move_left_action; diff --git a/modules/going/player_states.cpp b/modules/going/player_states.cpp index 7ac7c1b7..3d51efe4 100644 --- a/modules/going/player_states.cpp +++ b/modules/going/player_states.cpp @@ -3,6 +3,8 @@ #include "core/math/math_funcs.h" #include "core/typedefs.h" #include "going/player_body.h" +#include "scene/main/scene_tree.h" +#include "servers/rendering_server.h" PlayerBody *PlayerState::get_body() const { @@ -21,6 +23,18 @@ PlayerState::StateID StandingState::get_next_state() const { void StandingState::state_entered() { this->get_body()->get_anim()->play("RESET", 0.1); + this->game_over_timer = 0.0; +} + +void StandingState::process(double delta) { + this->game_over_timer += delta * this->get_body()->get_game_over_speed(); + if(this->game_over_timer > 1.0) { + RenderingServer::get_singleton()->global_shader_parameter_set(this->game_over_param, 0.0); + SceneTree::get_singleton()->reload_current_scene(); + } else { + RenderingServer::get_singleton()->global_shader_parameter_set(this->game_over_param, float(this->game_over_timer)); + this->game_over_timer = MIN(this->game_over_timer, 1.f); + } } void StandingState::physics_process(double delta) { @@ -29,6 +43,10 @@ void StandingState::physics_process(double delta) { this->get_body()->set_velocity(current.move_toward(Vector3(), speed_delta)); } +void StandingState::state_exited() { + RenderingServer::get_singleton()->global_shader_parameter_set(this->game_over_param, 0.0f); +} + PlayerState::StateID RunningState::get_next_state() const { Vector3 const velocity{this->get_body()->get_velocity()}; Vector3 const desired{this->get_body()->get_desired_velocity()}; @@ -47,7 +65,7 @@ void RunningState::state_entered() { this->get_body()->get_anim()->play("run", 0.1); } -void RunningState::process(double delta) { +void RunningState::process_lean(double delta) { Vector3 const current{this->get_body()->get_velocity()}; if(!current.is_zero_approx()) { Vector3 const cross{Vector3{0.f, 1.f, 0.f}.cross(current).normalized()}; @@ -77,6 +95,7 @@ void RunningState::physics_process(double delta) { ) }; this->get_body()->set_velocity(current.move_toward(desired, speed_delta) + Vector3{0.f, -0.01f, 0.f}); + this->process_lean(delta); } void RunningState::state_exited() { @@ -91,7 +110,7 @@ void RunningState::state_exited() { PlayerState::StateID SplitStepState::get_next_state() const { if(!this->get_body()->is_on_floor()) { return FallingState::get_class_static(); - } else if(this->timer <= 0.0 && Input::get_singleton()->is_action_pressed("jump")) { + } else if(this->get_body()->get_can_jump() && this->jump && this->timer <= 0.0) { return JumpingState::get_class_static(); } else if(this->timer <= 0.0) { return RunningState::get_class_static(); @@ -101,6 +120,7 @@ PlayerState::StateID SplitStepState::get_next_state() const { } void SplitStepState::state_entered() { + this->jump = false; this->last_velocity = this->get_body()->get_velocity(); this->timer = this->get_body()->get_split_step_time(); this->get_body()->set_velocity(last_velocity.normalized() * this->get_body()->get_target_speed() * 0.75f); @@ -111,17 +131,21 @@ void SplitStepState::process(double delta) { this->timer -= delta; this->get_body()->set_velocity(this->get_body()->get_velocity() .move_toward(Vector3(), this->get_body()->get_target_speed() / this->get_body()->get_split_step_stop_time() * delta)); + this->jump |= Input::get_singleton()->is_action_pressed("jump"); } void SplitStepState::state_exited() { - if(this->get_body()->is_on_floor()) { - Vector3 const desired_direction{this->get_body()->get_desired_direction()}; - float const dot{this->last_velocity.normalized().dot(desired_direction)}; - this->get_body()->set_velocity(dot > -0.8f - ? desired_direction * MAX(last_velocity.length(), this->get_body()->get_step_boost()) - : Vector3() - ); + Vector3 desired_direction{0.f, 0.f, 0.f}; + if(this->jump) { + desired_direction = Vector3{last_velocity.x, 0.f, last_velocity.z}.normalized(); + } else if(this->get_body()->is_on_floor()) { + desired_direction = this->get_body()->get_desired_direction(); } + float const dot{this->last_velocity.normalized().dot(desired_direction)}; + this->get_body()->set_velocity(dot > -0.8f + ? desired_direction * MAX(last_velocity.length(), this->get_body()->get_step_boost()) + : Vector3() + ); } PlayerState::StateID FallingState::get_next_state() const { @@ -133,13 +157,29 @@ PlayerState::StateID FallingState::get_next_state() const { } void FallingState::state_entered() { + this->game_over_timer = 0.0; this->get_body()->get_anim()->play("falling", 0.1); } void FallingState::process(double delta) { Vector3 const current{this->get_body()->get_velocity()}; Vector3 const flattened{current.x, 0.f, current.z}; - this->get_body()->set_velocity((flattened - (flattened * 0.025f)) + Vector3{0.f, current.y - float(9.8 * delta), 0.f}); + this->get_body()->set_velocity((flattened - (flattened * 0.015f)) + Vector3{0.f, current.y - float(9.8 * delta), 0.f}); + if(this->can_game_over_falling) { + this->game_over_timer += delta * this->get_body()->get_game_over_speed(); + if(this->game_over_timer > 1.0) { + RenderingServer::get_singleton()->global_shader_parameter_set(this->game_over_param, 0.0); + SceneTree::get_singleton()->reload_current_scene(); + } else { + RenderingServer::get_singleton()->global_shader_parameter_set(this->game_over_param, float(this->game_over_timer)); + this->game_over_timer = MIN(this->game_over_timer, 1.f); + } + } +} + +void FallingState::state_exited() { + RenderingServer::get_singleton()->global_shader_parameter_set(this->game_over_param, 0.0); + this->can_game_over_falling = true; } PlayerState::StateID JumpingState::get_next_state() const { @@ -153,18 +193,17 @@ PlayerState::StateID JumpingState::get_next_state() const { void JumpingState::state_entered() { Vector3 const current{this->get_body()->get_velocity()}; Vector2 const impulse{this->get_body()->get_jump_impulse()}; - float const force{(Vector2{current.x, current.z}.length() / this->get_body()->get_target_speed())}; this->get_body()->set_velocity( ( Vector3{current.x, impulse.y, current.z} + current.normalized() * impulse.x - ) * force); + )); this->get_body()->get_anim()->play("jump"); } void JumpingState::process(double delta) { Vector3 const current{this->get_body()->get_velocity()}; Vector3 const flattened{current.x, 0.f, current.z}; - this->get_body()->set_velocity((flattened - (flattened * 0.025f)) + Vector3{0.f, current.y - float(9.8 * delta), 0.f}); + this->get_body()->set_velocity((flattened - (flattened * 0.015f)) + Vector3{0.f, current.y - float(9.8 * delta), 0.f}); } void PlayerStateMachine::_bind_methods() { @@ -194,10 +233,10 @@ void PlayerStateMachine::ready() { this->set_process(true); this->set_physics_process(true); this->body = Object::cast_to(this->get_parent()); + this->add_state(); this->add_state(); this->add_state(); this->add_state(); - this->add_state(); this->add_state(); } diff --git a/modules/going/player_states.h b/modules/going/player_states.h index 786c6a64..ce265a1c 100644 --- a/modules/going/player_states.h +++ b/modules/going/player_states.h @@ -30,7 +30,12 @@ class StandingState : public PlayerState { public: virtual StateID get_next_state() const override; virtual void state_entered() override; + virtual void process(double delta) override; virtual void physics_process(double delta) override; + virtual void state_exited() override; +private: + double game_over_timer{0.0}; + StringName game_over_param{"game_over_percentage"}; }; class RunningState : public PlayerState { @@ -38,7 +43,7 @@ class RunningState : public PlayerState { public: virtual StateID get_next_state() const override; virtual void state_entered() override; - virtual void process(double delta) override; + void process_lean(double delta); virtual void physics_process(double delta) override; virtual void state_exited() override; private: @@ -55,6 +60,7 @@ public: private: Vector3 last_velocity{0.f, 0.f, 0.f}; double timer{0.0}; + bool jump{false}; }; class FallingState : public PlayerState { @@ -63,6 +69,11 @@ public: virtual StateID get_next_state() const override; virtual void state_entered() override; virtual void process(double delta) override; + virtual void state_exited() override; +private: + bool can_game_over_falling{false}; + double game_over_timer{0.0}; + StringName game_over_param{"game_over_percentage"}; }; class JumpingState : public PlayerState { diff --git a/modules/going/register_types.cpp b/modules/going/register_types.cpp index 930c5d1d..fe44b840 100644 --- a/modules/going/register_types.cpp +++ b/modules/going/register_types.cpp @@ -1,6 +1,7 @@ #include "register_types.h" #include "core/object/class_db.h" +#include "going/game_ui.h" #include "going/player_body.h" #include "going/player_states.h" @@ -16,6 +17,7 @@ void initialize_going_module(ModuleInitializationLevel p_level) { ClassDB::register_class(); ClassDB::register_class(); ClassDB::register_class(); + ClassDB::register_class(); } void uninitialize_going_module(ModuleInitializationLevel p_level) { diff --git a/project/materials/hair_albedo.png b/project/materials/hair_albedo.png index 86d52008..dc02c9b9 100644 Binary files a/project/materials/hair_albedo.png and b/project/materials/hair_albedo.png differ diff --git a/project/materials/leaves_albedo.png b/project/materials/leaves_albedo.png index 8bcdc5f8..d03dd038 100644 Binary files a/project/materials/leaves_albedo.png and b/project/materials/leaves_albedo.png differ diff --git a/project/materials/leaves_normal.png b/project/materials/leaves_normal.png index c99f20b5..840ec20c 100644 Binary files a/project/materials/leaves_normal.png and b/project/materials/leaves_normal.png differ diff --git a/project/models/pickups/twirly.blend b/project/models/pickups/twirly.blend new file mode 100644 index 00000000..a85fcb8c Binary files /dev/null and b/project/models/pickups/twirly.blend differ diff --git a/project/models/pickups/twirly.blend.import b/project/models/pickups/twirly.blend.import new file mode 100644 index 00000000..02400500 --- /dev/null +++ b/project/models/pickups/twirly.blend.import @@ -0,0 +1,53 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cdyr4yad84cp2" +path="res://.godot/imported/twirly.blend-fad795a9868d207b62ee28c2ea4b5e16.scn" + +[deps] + +source_file="res://models/pickups/twirly.blend" +dest_files=["res://.godot/imported/twirly.blend-fad795a9868d207b62ee28c2ea4b5e16.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +blender/nodes/visible=0 +blender/nodes/active_collection_only=false +blender/nodes/punctual_lights=true +blender/nodes/cameras=true +blender/nodes/custom_properties=true +blender/nodes/modifiers=1 +blender/meshes/colors=false +blender/meshes/uvs=true +blender/meshes/normals=true +blender/meshes/export_geometry_nodes_instances=false +blender/meshes/tangents=true +blender/meshes/skins=2 +blender/meshes/export_bones_deforming_mesh_only=false +blender/materials/unpack_enabled=true +blender/materials/export_materials=1 +blender/animation/limit_playback=true +blender/animation/always_sample=true +blender/animation/group_tracks=true diff --git a/project/models/pickups/twirly.blend1 b/project/models/pickups/twirly.blend1 new file mode 100644 index 00000000..ddb1516c Binary files /dev/null and b/project/models/pickups/twirly.blend1 differ diff --git a/project/models/player/character.blend b/project/models/player/character.blend index bd5b3dfb..e638fa08 100644 Binary files a/project/models/player/character.blend and b/project/models/player/character.blend differ diff --git a/project/models/player/character.blend1 b/project/models/player/character.blend1 index e33465eb..15e56b0f 100644 Binary files a/project/models/player/character.blend1 and b/project/models/player/character.blend1 differ diff --git a/project/models/props/evergreen.blend b/project/models/props/evergreen.blend index 2df986f3..bf7228c5 100644 Binary files a/project/models/props/evergreen.blend and b/project/models/props/evergreen.blend differ diff --git a/project/models/props/evergreen.blend1 b/project/models/props/evergreen.blend1 index 2ea8f611..e712b444 100644 Binary files a/project/models/props/evergreen.blend1 and b/project/models/props/evergreen.blend1 differ diff --git a/project/models/props/evertree_cutout_texture.png b/project/models/props/evertree_cutout_texture.png index ce6f46e1..bcf3a3a7 100644 Binary files a/project/models/props/evertree_cutout_texture.png and b/project/models/props/evertree_cutout_texture.png differ diff --git a/project/models/props/evertree_cutout_texture.png.import b/project/models/props/evertree_cutout_texture.png.import index f2a49443..6edc4005 100644 --- a/project/models/props/evertree_cutout_texture.png.import +++ b/project/models/props/evertree_cutout_texture.png.import @@ -3,25 +3,26 @@ importer="texture" type="CompressedTexture2D" uid="uid://dg6wbdfd7t314" -path="res://.godot/imported/evertree_cutout_texture.png-50f94b21ecb859ae84e27208edce57e7.ctex" +path.s3tc="res://.godot/imported/evertree_cutout_texture.png-50f94b21ecb859ae84e27208edce57e7.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://models/props/evertree_cutout_texture.png" -dest_files=["res://.godot/imported/evertree_cutout_texture.png-50f94b21ecb859ae84e27208edce57e7.ctex"] +dest_files=["res://.godot/imported/evertree_cutout_texture.png-50f94b21ecb859ae84e27208edce57e7.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -31,4 +32,4 @@ process/normal_map_invert_y=false process/hdr_as_srgb=false process/hdr_clamp_exposure=false process/size_limit=0 -detect_3d/compress_to=1 +detect_3d/compress_to=0 diff --git a/project/models/props/tree.blend b/project/models/props/tree.blend index 6c0e1b80..9e64ccde 100644 Binary files a/project/models/props/tree.blend and b/project/models/props/tree.blend differ diff --git a/project/models/props/tree.blend1 b/project/models/props/tree.blend1 index f26d3738..9397dd55 100644 Binary files a/project/models/props/tree.blend1 and b/project/models/props/tree.blend1 differ diff --git a/project/models/props/tree_cutout_texture.png b/project/models/props/tree_cutout_texture.png index c27f87ff..d04710ac 100644 Binary files a/project/models/props/tree_cutout_texture.png and b/project/models/props/tree_cutout_texture.png differ diff --git a/project/models/terrains/level.blend b/project/models/terrains/level.blend index 6b2c807a..712100ed 100644 Binary files a/project/models/terrains/level.blend and b/project/models/terrains/level.blend differ diff --git a/project/models/terrains/level.blend1 b/project/models/terrains/level.blend1 index 69f9d68f..a4f0012f 100644 Binary files a/project/models/terrains/level.blend1 and b/project/models/terrains/level.blend1 differ diff --git a/project/objects/evertre.tscn b/project/objects/evertre.tscn index 2486adc0..ef729697 100644 --- a/project/objects/evertre.tscn +++ b/project/objects/evertre.tscn @@ -1,7 +1,40 @@ -[gd_scene load_steps=2 format=3 uid="uid://dp48t6earfkm4"] +[gd_scene load_steps=6 format=3 uid="uid://dp48t6earfkm4"] [ext_resource type="PackedScene" uid="uid://cvu7bq8hur8yy" path="res://models/props/evergreen.blend" id="1_xfn5b"] +[ext_resource type="Texture2D" uid="uid://dg6wbdfd7t314" path="res://models/props/evertree_cutout_texture.png" id="2_1mi82"] + +[sub_resource type="CylinderMesh" id="CylinderMesh_1mi82"] +top_radius = 0.0 +bottom_radius = 10.626 +height = 20.987 +cap_top = false + +[sub_resource type="QuadMesh" id="QuadMesh_plvfv"] +size = Vector2(34.74, 34.74) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_bi1ef"] +transparency = 2 +alpha_scissor_threshold = 0.709 +alpha_antialiasing_mode = 0 +shading_mode = 2 +specular_mode = 1 +albedo_texture = ExtResource("2_1mi82") +disable_receive_shadows = true +billboard_mode = 2 [node name="Evertre" type="Node3D"] [node name="evergreen" parent="." instance=ExtResource("1_xfn5b")] +visibility_parent = NodePath("../cutout") + +[node name="shadowmesh" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 23.702, 0) +cast_shadow = 3 +visibility_range_begin = 99.0 +mesh = SubResource("CylinderMesh_1mi82") + +[node name="cutout" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 17.7955, 0) +visibility_range_begin = 100.0 +mesh = SubResource("QuadMesh_plvfv") +surface_material_override/0 = SubResource("StandardMaterial3D_bi1ef") diff --git a/project/objects/player.tscn b/project/objects/player.tscn index 7f9d07f2..e5433c07 100644 --- a/project/objects/player.tscn +++ b/project/objects/player.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=4 format=3 uid="uid://dcgsrdacswacl"] +[gd_scene load_steps=5 format=3 uid="uid://dcgsrdacswacl"] [ext_resource type="PackedScene" uid="uid://cl7a4q5m73vlw" path="res://models/player/character.blend" id="1_eqqp1"] +[ext_resource type="PackedScene" uid="uid://dy4yl1paa8whs" path="res://ui/ui.tscn" id="2_ykyjo"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_bxedw"] radius = 0.339355 @@ -15,7 +16,7 @@ script/source = "extends Camera3D func _ready(): self.top_level = true -func _process(_delta): +func _physics_process(_delta): var target : Vector3 = get_parent().global_position + Vector3(0.0, pivot_height, 0.0) var diff := self.global_position - target if abs(diff).x + abs(diff.z) > 0.1: @@ -50,4 +51,6 @@ look_target_height = 1.5 [node name="character" parent="." instance=ExtResource("1_eqqp1")] unique_name_in_owner = true +[node name="CanvasLayer" parent="." instance=ExtResource("2_ykyjo")] + [editable path="character"] diff --git a/project/objects/tre.tscn b/project/objects/tre.tscn index d65bbde4..6bc30e8f 100644 --- a/project/objects/tre.tscn +++ b/project/objects/tre.tscn @@ -7,11 +7,13 @@ size = Vector2(34.7, 34.7) [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_t4bw2"] -transparency = 1 +transparency = 2 +alpha_scissor_threshold = 0.724 +alpha_antialiasing_mode = 0 shading_mode = 2 -diffuse_mode = 1 -specular_mode = 2 +specular_mode = 1 albedo_texture = ExtResource("2_t4bw2") +disable_receive_shadows = true billboard_mode = 2 [sub_resource type="SphereMesh" id="SphereMesh_t4bw2"] @@ -21,15 +23,17 @@ height = 22.768 [node name="Tree" type="Node3D"] [node name="tree" parent="." instance=ExtResource("1_n3f34")] -visibility_parent = NodePath("../MeshInstance3D") +visibility_parent = NodePath("../cutout") -[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +[node name="cutout" type="MeshInstance3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 17.1601, 0) visibility_range_begin = 100.0 mesh = SubResource("QuadMesh_n3f34") surface_material_override/0 = SubResource("StandardMaterial3D_t4bw2") -[node name="MeshInstance3D2" type="MeshInstance3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 22.6292, 0) +[node name="shadowmesh" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 23.4137, 0) cast_shadow = 3 +visibility_range_begin = 99.0 mesh = SubResource("SphereMesh_t4bw2") +skeleton = NodePath("../tree") diff --git a/project/objects/wall_enemy.tscn b/project/objects/wall_enemy.tscn index c03f2416..712ffffd 100644 --- a/project/objects/wall_enemy.tscn +++ b/project/objects/wall_enemy.tscn @@ -36,10 +36,10 @@ func process_ahead(): var target : Vector3 = player.global_position + last_velocity target.y = self.global_position.y var forward : Vector3 = player.velocity.normalized() - if player.global_position.distance_squared_to(self.global_position) < target_distance * target_distance or abs((player.global_position - global_position).dot(forward.cross(Vector3.UP))) < 0.25: + if player.global_position.distance_squared_to(self.global_position) < target_distance * target_distance or abs((player.global_position - global_position).dot(forward.cross(Vector3.UP))) <= 0.1: self.velocity = Vector3() return - if !forward.is_zero_approx(): + if !forward.is_zero_approx() and false: last_velocity = player.velocity forward.y = 0.0 forward = forward.normalized() @@ -47,11 +47,12 @@ func process_ahead(): self.velocity = (target - self.global_position).normalized() * speed func process_behind(): + pass var diff : Vector3 = player.global_position - global_position var forward := diff.normalized() var left := Vector3.UP.cross(forward) self.velocity = forward + left * direction * min(10.0, diff.length()) - self.look_at(Vector3(player.global_position.x, global_position.y, player.global_position.z)) +# self.look_at(Vector3(player.global_position.x, global_position.y, player.global_position.z)) func _physics_process(_delta : float): self.velocity += Vector3(0, -0.25, 0) @@ -59,17 +60,20 @@ func _physics_process(_delta : float): " [sub_resource type="SphereShape3D" id="SphereShape3D_j6w7d"] -radius = 1.83616 +radius = 1.4143 [sub_resource type="BoxShape3D" id="BoxShape3D_j6w7d"] -size = Vector3(4.29688, 3.86325, 2.76758) +size = Vector3(5.79102, 3.86325, 2.76758) [node name="WallEnemy" type="CharacterBody3D"] collision_layer = 2 +floor_snap_length = 10.0 script = SubResource("GDScript_j6w7d") +target_distance = 4.0 +detect_distance = 20.0 [node name="CollisionShape3D" type="CollisionShape3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.83717, 0) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.37512, 0) shape = SubResource("SphereShape3D_j6w7d") [node name="AnimatableBody3D" type="AnimatableBody3D" parent="."] diff --git a/project/project.godot b/project/project.godot index 2b5c9495..89752e94 100644 --- a/project/project.godot +++ b/project/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="going" -run/main_scene="uid://sofv1apr4467" +run/main_scene="uid://cnau7sr4mu3gf" config/features=PackedStringArray("4.4", "Forward Plus") config/icon="res://icon.svg" @@ -19,6 +19,7 @@ config/icon="res://icon.svg" window/size/viewport_width=1920 window/size/viewport_height=1080 +window/size/mode=3 window/size/resizable=false window/vsync/vsync_mode=0 @@ -74,3 +75,10 @@ camera/depth_of_field/depth_of_field_bokeh_shape=0 anti_aliasing/quality/screen_space_aa=1 anti_aliasing/quality/use_debanding=true occlusion_culling/use_occlusion_culling=true + +[shader_globals] + +game_over_percentage={ +"type": "float", +"value": 0.0 +} diff --git a/project/scenes/main_menu.tscn b/project/scenes/main_menu.tscn new file mode 100644 index 00000000..2ce60444 --- /dev/null +++ b/project/scenes/main_menu.tscn @@ -0,0 +1,33 @@ +[gd_scene load_steps=2 format=3 uid="uid://cnau7sr4mu3gf"] + +[sub_resource type="GDScript" id="GDScript_vue75"] +script/source = "extends Button + +func _on_button_up() -> void: + self.get_tree().change_scene_to_file(\"res://scenes/valley.tscn\") +" + +[node name="MainMenu" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Button" type="Button" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 722.0 +offset_top = 400.0 +offset_right = -721.0 +offset_bottom = -399.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 200 +text = "Start" +script = SubResource("GDScript_vue75") + +[connection signal="button_up" from="Button" to="Button" method="_on_button_up"] diff --git a/project/scenes/valley.tscn b/project/scenes/valley.tscn index 91954516..94dd5a77 100644 --- a/project/scenes/valley.tscn +++ b/project/scenes/valley.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=9 format=3 uid="uid://sofv1apr4467"] +[gd_scene load_steps=12 format=3 uid="uid://sofv1apr4467"] [ext_resource type="PackedScene" uid="uid://5cfl3xu1861l" path="res://models/terrains/level.blend" id="1_ch7jd"] [ext_resource type="PackedScene" uid="uid://dcgsrdacswacl" path="res://objects/player.tscn" id="2_pvuhy"] [ext_resource type="PackedScene" uid="uid://dqjurq1nq1fle" path="res://objects/tre.tscn" id="3_lj5yw"] [ext_resource type="PackedScene" uid="uid://cdmksnsttot3j" path="res://objects/wall_enemy.tscn" id="4_kaqos"] [ext_resource type="PackedScene" uid="uid://dp48t6earfkm4" path="res://objects/evertre.tscn" id="5_81e57"] +[ext_resource type="PackedScene" uid="uid://cdyr4yad84cp2" path="res://models/pickups/twirly.blend" id="6_a2vvy"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_pvuhy"] sky_top_color = Color(0.0825, 0.277292, 0.55, 1) @@ -23,13 +24,52 @@ ambient_light_source = 3 ssao_radius = 16.0 glow_enabled = true +[sub_resource type="GDScript" id="GDScript_a2vvy"] +script/source = "extends Area3D + +func _on_body_entered(body: Node3D) -> void: + if body.is_class(\"PlayerBody\"): + body.set_can_jump(true) + queue_free() + GameUI.get_singleton().display_message(\"Jump by pressing F during a split-step\") + +func _process(delta): + $twirly.rotate_y(delta * 2.0) +" + +[sub_resource type="SphereShape3D" id="SphereShape3D_a2vvy"] +radius = 1.61546 + [node name="Valley" type="Node3D"] [node name="Player" parent="." instance=ExtResource("2_pvuhy")] -transform = Transform3D(0.999996, 0, -0.0030368, 0, 1, 0, 0.0030368, 0, 0.999996, 4.19603, 31.6645, -39.4833) +transform = Transform3D(0.999996, 0, -0.0030368, 0, 1, 0, 0.0030368, 0, 0.999996, 31.3342, 31.6645, -39.9581) [node name="WallEnemy" parent="." instance=ExtResource("4_kaqos")] -transform = Transform3D(-0.0472111, 0, -0.998885, 0, 1, 0, 0.998885, 0, -0.0472111, -33.2398, -0.00426483, 142.026) +transform = Transform3D(-0.38249, 0, -0.923959, 0, 1, 0, 0.923959, 0, -0.38249, 135.071, -6.37696, 263.993) + +[node name="WallEnemy3" parent="." instance=ExtResource("4_kaqos")] +transform = Transform3D(0.999926, 0, 0.0121468, 0, 1, 0, -0.0121468, 0, 0.999926, 168.538, -6.37696, 215.507) + +[node name="WallEnemy2" parent="." instance=ExtResource("4_kaqos")] +transform = Transform3D(-0.991635, 0, 0.129073, 0, 1, 0, -0.129073, 0, -0.991635, 229.483, -6.38962, 232.319) +speed = 4.0 + +[node name="Label3D" type="Label3D" parent="WallEnemy2"] +transform = Transform3D(0.994593, -0.103851, 0, -4.53949e-09, -4.3475e-08, 1, -0.103851, -0.994593, -4.37114e-08, 231.324, 6.54938, 243.387) +pixel_size = 0.08 +text = " [W] +A S D" + +[node name="Label3D2" type="Label3D" parent="WallEnemy2"] +transform = Transform3D(0.965926, 0, 0.258819, 0, 1, 0, -0.258819, 0, 0.965926, 228.424, 8.2929, 214.064) +pixel_size = 0.025 +text = "[Space] [D]" + +[node name="Label3D3" type="Label3D" parent="WallEnemy2"] +transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 260.364, 8.2929, 215.45) +pixel_size = 0.025 +text = "[Space] [A]" [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_lj5yw") @@ -82,10 +122,10 @@ transform = Transform3D(-0.583853, 0, 0.811859, 0, 1, 0, -0.811859, 0, -0.583853 transform = Transform3D(-0.806857, 0, 0.590747, 0, 1, 0, -0.590747, 0, -0.806857, 12.0918, 0.326586, 19.9047) [node name="Node3D17" parent="level" instance=ExtResource("3_lj5yw")] -transform = Transform3D(-0.729256, 0, -0.684242, 0, 1, 0, 0.684242, 0, -0.729256, 25.3264, 0.0781007, 1.97371) +transform = Transform3D(-0.729256, 0, -0.684242, 0, 1, 0, 0.684242, 0, -0.729256, 25.1658, -0.570518, 3.70682) [node name="Node3D19" parent="level" instance=ExtResource("3_lj5yw")] -transform = Transform3D(-0.63905, 0, -0.769166, 0, 1, 0, 0.769166, 0, -0.63905, 36.3753, 0.295401, 4.2828) +transform = Transform3D(-0.63905, 0, -0.769166, 0, 1, 0, 0.769166, 0, -0.63905, 35.7514, -0.40734, 5.82252) [node name="Node3D21" parent="level" instance=ExtResource("3_lj5yw")] transform = Transform3D(0.87511, -1.61731e-08, 0.483924, -2.43482e-08, 1, 7.74511e-08, -0.483924, -7.95609e-08, 0.87511, 17.2233, 0.574241, 11.9056) @@ -349,7 +389,7 @@ transform = Transform3D(0.925203, -7.60956e-08, 0.379472, 3.51579e-08, 1, 1.1481 transform = Transform3D(0.395593, 9.15362e-08, -0.918426, 3.51579e-08, 1, 1.14811e-07, 0.918426, -7.77082e-08, 0.395593, -11.1774, -0.230842, 39.2564) [node name="Node3D105" parent="level" instance=ExtResource("3_lj5yw")] -transform = Transform3D(-0.199709, -1.05476e-07, 0.979855, 3.51579e-08, 1, 1.14811e-07, -0.979855, 5.73785e-08, -0.199709, 3.23367, -0.230842, 53.8158) +transform = Transform3D(-0.199709, -1.05476e-07, 0.979855, 3.51579e-08, 1, 1.14811e-07, -0.979855, 5.73785e-08, -0.199709, 3.21507, -0.298522, 43.3237) [node name="Node3D58" parent="level" instance=ExtResource("3_lj5yw")] transform = Transform3D(-0.573291, -7.39146e-08, 0.819353, 3.51579e-08, 1, 1.14811e-07, -0.819353, 9.46265e-08, -0.573291, 41.0137, 1.1686, 34.4092) @@ -777,9 +817,6 @@ transform = Transform3D(-0.954802, 0, 0.297242, 0, 1, 0, -0.297242, 0, -0.954802 [node name="Node3D225" parent="level" instance=ExtResource("3_lj5yw")] transform = Transform3D(-0.954802, 0, 0.297242, 0, 1, 0, -0.297242, 0, -0.954802, -49.3032, 12.6146, 184.871) -[node name="Node3D226" parent="level" instance=ExtResource("3_lj5yw")] -transform = Transform3D(-0.954802, 0, 0.297242, 0, 1, 0, -0.297242, 0, -0.954802, -48.3955, 11.2669, 178.045) - [node name="Node3D227" parent="level" instance=ExtResource("3_lj5yw")] transform = Transform3D(-0.954802, 0, 0.297242, 0, 1, 0, -0.297242, 0, -0.954802, -47.6151, 8.45536, 169.048) @@ -846,9 +883,6 @@ transform = Transform3D(-0.999984, 0, -0.00563782, 0, 1, 0, 0.00563782, 0, -0.99 [node name="Node3D211" parent="level" instance=ExtResource("3_lj5yw")] transform = Transform3D(-0.890832, 0, -0.454333, 0, 1, 0, 0.454333, 0, -0.890832, -39.1819, 13.7524, 202.259) -[node name="Node3D212" parent="level" instance=ExtResource("3_lj5yw")] -transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -40.8661, 4.56589, 159.345) - [node name="Node3D213" parent="level" instance=ExtResource("3_lj5yw")] transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -46.8773, 3.83218, 159.091) @@ -864,9 +898,6 @@ transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, [node name="Node3D217" parent="level" instance=ExtResource("3_lj5yw")] transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -13.0376, 6.92232, 157.9) -[node name="Node3D218" parent="level" instance=ExtResource("3_lj5yw")] -transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -23.1474, 6.80598, 161.031) - [node name="Node3D220" parent="level" instance=ExtResource("3_lj5yw")] transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -22.0954, 10.289, 171.149) @@ -877,7 +908,7 @@ transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -1.87738, 7.83628, 154.856) [node name="Node3D223" parent="level" instance=ExtResource("3_lj5yw")] -transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, 4.71963, 11.8309, 165.954) +transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, 5.2084, 11.3779, 162.47) [node name="Node3D224" parent="level" instance=ExtResource("3_lj5yw")] transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, 24.9724, 13.0452, 151.413) @@ -1036,3 +1067,29 @@ shadow_opacity = 0.74 shadow_blur = 0.973 directional_shadow_blend_splits = true directional_shadow_max_distance = 1063.4 + +[node name="Tree" parent="." instance=ExtResource("3_lj5yw")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 269.46, 0.341235, 236.781) + +[node name="Area3D" type="Area3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 259.242, 1.93115, 234.094) +script = SubResource("GDScript_a2vvy") + +[node name="twirly" parent="Area3D" instance=ExtResource("6_a2vvy")] + +[node name="OmniLight3D" type="OmniLight3D" parent="Area3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.503185, 0) +light_color = Color(0.880355, 0.555272, 0, 1) +light_energy = 8.133 +omni_range = 3.15575 + +[node name="OmniLight3D2" type="OmniLight3D" parent="Area3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.00915, 0) +light_color = Color(0.880355, 0.555272, 0, 1) +light_energy = 8.133 +omni_range = 3.15575 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"] +shape = SubResource("SphereShape3D_a2vvy") + +[connection signal="body_entered" from="Area3D" to="Area3D" method="_on_body_entered"] diff --git a/project/ui/ui.tscn b/project/ui/ui.tscn new file mode 100644 index 00000000..a4e62691 --- /dev/null +++ b/project/ui/ui.tscn @@ -0,0 +1,59 @@ +[gd_scene load_steps=4 format=3 uid="uid://dy4yl1paa8whs"] + +[ext_resource type="Texture2D" uid="uid://bglfaie21avpt" path="res://ui/vignette.png" id="1_nb4k0"] + +[sub_resource type="Shader" id="Shader_ykyjo"] +code = "shader_type canvas_item; +global uniform float game_over_percentage = 0.0; + +void vertex() { + // Called for every vertex the material is visible on. +} + +void fragment() { + COLOR.r = COLOR.g = COLOR.b = 0.0; + COLOR.a = clamp(COLOR.a + game_over_percentage * 2.0 - 1.0, 0.0, 1.0); +} + +//void light() { +// // Called for every pixel for every light affecting the CanvasItem. +// // Uncomment to replace the default light processing function with this one. +//} +" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_uxov2"] +shader = SubResource("Shader_ykyjo") + +[node name="CanvasLayer" type="GameUI"] + +[node name="Vignette" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_uxov2") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +texture = ExtResource("1_nb4k0") +expand_mode = 2 + +[node name="MessageLabel" type="RichTextLabel" parent="."] +unique_name_in_owner = true +anchors_preset = 10 +anchor_right = 1.0 +offset_bottom = 195.0 +grow_horizontal = 2 +theme_override_font_sizes/normal_font_size = 60 +text = "Good Luck!" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="ClearMessageTimer" type="Timer" parent="MessageLabel"] +unique_name_in_owner = true +wait_time = 5.0 +one_shot = true +autostart = true +ignore_time_scale = true + +[connection signal="timeout" from="MessageLabel/ClearMessageTimer" to="MessageLabel" method="set_text" flags=3 binds= [""]] diff --git a/project/ui/vignette.png b/project/ui/vignette.png new file mode 100644 index 00000000..3f8509f0 Binary files /dev/null and b/project/ui/vignette.png differ diff --git a/project/ui/vignette.png.import b/project/ui/vignette.png.import new file mode 100644 index 00000000..f34865ea --- /dev/null +++ b/project/ui/vignette.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bglfaie21avpt" +path="res://.godot/imported/vignette.png-fcc9b969d140e62ae5a80701deb118ec.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/vignette.png" +dest_files=["res://.godot/imported/vignette.png-fcc9b969d140e62ae5a80701deb118ec.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1