Merge branch 'develop'

This commit is contained in:
Dan 2026-02-21 12:22:17 +00:00
commit fc3825067f
1251 changed files with 130295 additions and 0 deletions

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
# Godot 4+ specific ignores
.godot/
/android/
*.tmp

BIN
Assets/skybox/AllSkyFree_Sky_AnotherPlanet_Equirect.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cmp5aqolgq5ja"
path="res://.godot/imported/AllSkyFree_Sky_AnotherPlanet_Equirect.png-f472fa93928210007749533fa1259b6c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/skybox/AllSkyFree_Sky_AnotherPlanet_Equirect.png"
dest_files=["res://.godot/imported/AllSkyFree_Sky_AnotherPlanet_Equirect.png-f472fa93928210007749533fa1259b6c.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

BIN
Assets/skybox/AllSkyFree_Sky_CartoonNightSky_Equirect.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://0frng64ju3dh"
path="res://.godot/imported/AllSkyFree_Sky_CartoonNightSky_Equirect.png-52fdbf942dfee97a08abb221c309d17c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/skybox/AllSkyFree_Sky_CartoonNightSky_Equirect.png"
dest_files=["res://.godot/imported/AllSkyFree_Sky_CartoonNightSky_Equirect.png-52fdbf942dfee97a08abb221c309d17c.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

BIN
Assets/skybox/AllSkyFree_Sky_ClearBlueSky_Equirect.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ehqdf2ka4fhy"
path="res://.godot/imported/AllSkyFree_Sky_ClearBlueSky_Equirect.png-a2ed175d45de374cad502841e1011c08.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/skybox/AllSkyFree_Sky_ClearBlueSky_Equirect.png"
dest_files=["res://.godot/imported/AllSkyFree_Sky_ClearBlueSky_Equirect.png-a2ed175d45de374cad502841e1011c08.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

BIN
Assets/skybox/AllSkyFree_Sky_ColdNight_Equirect.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cqyng2l1ccgjt"
path="res://.godot/imported/AllSkyFree_Sky_ColdNight_Equirect.png-a10084bc767271a8d80fa9267f2d9dec.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/skybox/AllSkyFree_Sky_ColdNight_Equirect.png"
dest_files=["res://.godot/imported/AllSkyFree_Sky_ColdNight_Equirect.png-a10084bc767271a8d80fa9267f2d9dec.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

BIN
Assets/skybox/AllSkyFree_Sky_ColdSunset_Equirect.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dwv4jlwoq1cev"
path="res://.godot/imported/AllSkyFree_Sky_ColdSunset_Equirect.png-f98f8d38f7987c0a591d330dabb4ae25.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/skybox/AllSkyFree_Sky_ColdSunset_Equirect.png"
dest_files=["res://.godot/imported/AllSkyFree_Sky_ColdSunset_Equirect.png-f98f8d38f7987c0a591d330dabb4ae25.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

BIN
Assets/skybox/AllSkyFree_Sky_DeepDusk_Equirect.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bnufkjiwlsbsn"
path="res://.godot/imported/AllSkyFree_Sky_DeepDusk_Equirect.png-26348cbfe859edd490f712b86c6dd925.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/skybox/AllSkyFree_Sky_DeepDusk_Equirect.png"
dest_files=["res://.godot/imported/AllSkyFree_Sky_DeepDusk_Equirect.png-26348cbfe859edd490f712b86c6dd925.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

BIN
Assets/skybox/AllSkyFree_Sky_EpicBlueSunset_Equirect.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bge2mlo15mqqy"
path="res://.godot/imported/AllSkyFree_Sky_EpicBlueSunset_Equirect.png-40d922c511b94cccba391065ac64678e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/skybox/AllSkyFree_Sky_EpicBlueSunset_Equirect.png"
dest_files=["res://.godot/imported/AllSkyFree_Sky_EpicBlueSunset_Equirect.png-40d922c511b94cccba391065ac64678e.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

BIN
Assets/skybox/AllSkyFree_Sky_EpicGloriousPink_Equirect.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dysuqxmmas0iv"
path="res://.godot/imported/AllSkyFree_Sky_EpicGloriousPink_Equirect.png-e7689b4364b44d277fab8c9a857ac0f1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/skybox/AllSkyFree_Sky_EpicGloriousPink_Equirect.png"
dest_files=["res://.godot/imported/AllSkyFree_Sky_EpicGloriousPink_Equirect.png-e7689b4364b44d277fab8c9a857ac0f1.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

BIN
Assets/skybox/AllSkyFree_Sky_MoonBurst_Equirect.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b216qsrdyb16u"
path="res://.godot/imported/AllSkyFree_Sky_MoonBurst_Equirect.png-90a4bc136c7b26273ec17f8d5a25eb50.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/skybox/AllSkyFree_Sky_MoonBurst_Equirect.png"
dest_files=["res://.godot/imported/AllSkyFree_Sky_MoonBurst_Equirect.png-90a4bc136c7b26273ec17f8d5a25eb50.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

BIN
Assets/skybox/AllSkyFree_Sky_OvercastLow_Equirect.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c01sjk702vkj8"
path="res://.godot/imported/AllSkyFree_Sky_OvercastLow_Equirect.png-e32c14c480aaf52f9f03d4d5e0b6e597.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/skybox/AllSkyFree_Sky_OvercastLow_Equirect.png"
dest_files=["res://.godot/imported/AllSkyFree_Sky_OvercastLow_Equirect.png-e32c14c480aaf52f9f03d4d5e0b6e597.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

BIN
Assets/temp_models/Textures/colormap.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://m3jsjukytaqy"
path.s3tc="res://.godot/imported/colormap.png-ba57e54e3743a282f3d81dcd3a2fa8c2.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://Assets/temp_models/Textures/colormap.png"
dest_files=["res://.godot/imported/colormap.png-ba57e54e3743a282f3d81dcd3a2fa8c2.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

View file

@ -0,0 +1,37 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://c5squxlbapts8"
path="res://.godot/imported/flowers-tall.glb-f244b44beee32be4bca978c256b9b6a3.scn"
[deps]
source_file="res://Assets/temp_models/flowers-tall.glb"
dest_files=["res://.godot/imported/flowers-tall.glb-f244b44beee32be4bca978c256b9b6a3.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={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

View file

@ -0,0 +1,37 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://10c6aovvh80f"
path="res://.godot/imported/flowers.glb-643d814f11eac4de9f7fc76085d3adac.scn"
[deps]
source_file="res://Assets/temp_models/flowers.glb"
dest_files=["res://.godot/imported/flowers.glb-643d814f11eac4de9f7fc76085d3adac.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={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

View file

@ -0,0 +1,37 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cltv073ea1df6"
path="res://.godot/imported/grass.glb-7e581c773d5cf661e4fb13652143204c.scn"
[deps]
source_file="res://Assets/temp_models/grass.glb"
dest_files=["res://.godot/imported/grass.glb-7e581c773d5cf661e4fb13652143204c.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={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

View file

@ -0,0 +1,37 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://7pg0hhklawxb"
path="res://.godot/imported/mushrooms.glb-3620553a4f83af03e1259fecf477bba9.scn"
[deps]
source_file="res://Assets/temp_models/mushrooms.glb"
dest_files=["res://.godot/imported/mushrooms.glb-3620553a4f83af03e1259fecf477bba9.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={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

View file

@ -0,0 +1,37 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dpsdijnn33q12"
path="res://.godot/imported/plant.glb-339d9b8108b82f10d7e228e28ae0b50b.scn"
[deps]
source_file="res://Assets/temp_models/plant.glb"
dest_files=["res://.godot/imported/plant.glb-339d9b8108b82f10d7e228e28ae0b50b.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={}
gltf/naming_version=1
gltf/embedded_image_handling=1

View file

@ -0,0 +1,63 @@
[gd_resource type="BoneMap" load_steps=2 format=3 uid="uid://jsmvf7l3e2tg"]
[sub_resource type="SkeletonProfileHumanoid" id="SkeletonProfileHumanoid_eq0yh"]
[resource]
profile = SubResource("SkeletonProfileHumanoid_eq0yh")
bonemap = null
bone_map/Root = &""
bone_map/Hips = &"mixamorig_Hips"
bone_map/Spine = &"mixamorig_Spine"
bone_map/Chest = &"mixamorig_Spine1"
bone_map/UpperChest = &"mixamorig_Spine2"
bone_map/Neck = &"mixamorig_Neck"
bone_map/Head = &"mixamorig_Head"
bone_map/LeftEye = &""
bone_map/RightEye = &""
bone_map/Jaw = &""
bone_map/LeftShoulder = &"mixamorig_LeftShoulder"
bone_map/LeftUpperArm = &"mixamorig_LeftArm"
bone_map/LeftLowerArm = &"mixamorig_LeftForeArm"
bone_map/LeftHand = &"mixamorig_LeftHand"
bone_map/LeftThumbMetacarpal = &"mixamorig_LeftHandThumb2"
bone_map/LeftThumbProximal = &"mixamorig_LeftHandThumb3"
bone_map/LeftThumbDistal = &"mixamorig_LeftHandThumb4"
bone_map/LeftIndexProximal = &"mixamorig_LeftHandIndex2"
bone_map/LeftIndexIntermediate = &"mixamorig_LeftHandIndex3"
bone_map/LeftIndexDistal = &"mixamorig_LeftHandIndex4"
bone_map/LeftMiddleProximal = &"mixamorig_LeftHandMiddle2"
bone_map/LeftMiddleIntermediate = &"mixamorig_LeftHandMiddle3"
bone_map/LeftMiddleDistal = &"mixamorig_LeftHandMiddle4"
bone_map/LeftRingProximal = &"mixamorig_LeftHandRing2"
bone_map/LeftRingIntermediate = &"mixamorig_LeftHandRing3"
bone_map/LeftRingDistal = &"mixamorig_LeftHandRing4"
bone_map/LeftLittleProximal = &"mixamorig_LeftHandPinky2"
bone_map/LeftLittleIntermediate = &"mixamorig_LeftHandPinky3"
bone_map/LeftLittleDistal = &"mixamorig_LeftHandPinky4"
bone_map/RightShoulder = &"mixamorig_RightShoulder"
bone_map/RightUpperArm = &"mixamorig_RightArm"
bone_map/RightLowerArm = &"mixamorig_RightForeArm"
bone_map/RightHand = &"mixamorig_RightHand"
bone_map/RightThumbMetacarpal = &"mixamorig_RightHandThumb2"
bone_map/RightThumbProximal = &"mixamorig_RightHandThumb3"
bone_map/RightThumbDistal = &"mixamorig_RightHandThumb4"
bone_map/RightIndexProximal = &"mixamorig_RightHandIndex2"
bone_map/RightIndexIntermediate = &"mixamorig_RightHandIndex3"
bone_map/RightIndexDistal = &"mixamorig_RightHandIndex4"
bone_map/RightMiddleProximal = &"mixamorig_RightHandMiddle2"
bone_map/RightMiddleIntermediate = &"mixamorig_RightHandMiddle3"
bone_map/RightMiddleDistal = &"mixamorig_RightHandMiddle4"
bone_map/RightRingProximal = &"mixamorig_RightHandRing2"
bone_map/RightRingIntermediate = &"mixamorig_RightHandRing3"
bone_map/RightRingDistal = &"mixamorig_RightHandRing4"
bone_map/RightLittleProximal = &"mixamorig_RightHandPinky2"
bone_map/RightLittleIntermediate = &"mixamorig_RightHandPinky3"
bone_map/RightLittleDistal = &"mixamorig_RightHandPinky4"
bone_map/LeftUpperLeg = &"mixamorig_LeftUpLeg"
bone_map/LeftLowerLeg = &"mixamorig_LeftLeg"
bone_map/LeftFoot = &"mixamorig_LeftFoot"
bone_map/LeftToes = &"mixamorig_LeftToeBase"
bone_map/RightUpperLeg = &"mixamorig_RightUpLeg"
bone_map/RightLowerLeg = &"mixamorig_RightLeg"
bone_map/RightFoot = &"mixamorig_RightFoot"
bone_map/RightToes = &"mixamorig_RightToeBase"

Binary file not shown.

View file

@ -0,0 +1,43 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cpfj1pxueabmh"
path="res://.godot/imported/YbotPacked.glb-130f94c236840a667089df3d8e3daf02.scn"
[deps]
source_file="res://Common/animations/YbotPacked.glb"
dest_files=["res://.godot/imported/YbotPacked.glb-130f94c236840a667089df3d8e3daf02.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={
"nodes": {
"PATH:Armature/Skeleton3D": {
"retarget/bone_map": Resource("res://common/animations/Mixamo BoneMap.tres")
}
}
}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

View file

@ -0,0 +1,59 @@
shader_type spatial;
render_mode cull_disabled, diffuse_toon, specular_schlick_ggx;
// Nice Shader by @_Malido ^^
uniform vec3 top_color: source_color;
uniform vec3 bottom_color: source_color;
uniform float ambient_occlusion_factor: hint_range(0.0, 1.0, 0.01) = 0.3;
uniform float specular_strength: hint_range(0.0, 1.0, 0.01) = 0.4;
uniform float player_displacement_strength: hint_range(0.0, 1.0, 0.01) = 0.4;
uniform float player_displacement_size: hint_range(0.0, 2.0, 0.01) = 1.0;
global uniform vec3 wind_direction; // Use a negative y component to give it an extra touch (For displacement effect and noise scroll direction)
global uniform float wind_strength;
uniform sampler2D wind_noise; // Periln FBM Noise looks Best
global uniform float wind_noise_size; // high values dont work well
global uniform float wind_noise_speed;
// Instance the Player Position through a GDScript in the _physics_process
global uniform vec3 player_position;
void vertex() {
vec3 world_position = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
vec3 wind_texture = texture(wind_noise, world_position.xz * wind_noise_size + normalize(-wind_direction.xz) * (TIME + UV.y / 2.5) * wind_noise_speed).rgb;
vec3 wind_vector = (vec4(wind_texture * normalize(wind_direction) * wind_strength, 0.0) * MODEL_MATRIX).xyz;
float player_height = smoothstep(1.0, 0.0, length(player_position.y - world_position.y + 0.3));
vec3 push_direction = vec3(world_position - player_position) * vec3(1 , -0.3 ,1);
float player_position_factor = smoothstep(player_displacement_size, 0.0, length(push_direction));
vec3 player_push_vector = (vec4(normalize(push_direction), 0.0) * MODEL_MATRIX).xyz;
// Apply Player Position displacement
VERTEX += player_push_vector * (1.0 - UV.y) * player_position_factor * player_displacement_strength * player_height;
// Apply Wind displacement linearly
VERTEX += wind_vector * (1.0 - UV.y) * (1.0 - player_position_factor * 0.7);
// A new normal correction, which aligns the normals of the mesh facing upwards no matter the original direction.
NORMAL = vec3(0.0, 1.0, 0.0);
}
void fragment() {
vec3 color = mix(bottom_color, top_color, 1.0 - UV.y);
// Add fake ambient occlusion by darkening the base of the mesh
float ao_fallof = pow(UV.y, 5.0);
vec3 ao_color = bottom_color * (1.0 - ambient_occlusion_factor);
ALBEDO = mix(color, ao_color, ao_fallof);
ROUGHNESS = 0.4;
// Increase the Specular with Grass Height
SPECULAR *= (1.0 - UV.y) * specular_strength;
// Just removing some funny shading
if (!FRONT_FACING) {
NORMAL = -NORMAL;
}
}

View file

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

View file

@ -0,0 +1,23 @@
shader_type spatial;
uniform vec4 base_color : source_color = vec4(0.2, 0.6, 0.1, 1.0);
uniform vec4 variation_color : source_color = vec4(0.4, 0.8, 0.2, 1.0);
uniform float gradient_height : hint_range(0.1, 5.0) = 2.0;
uniform float gradient_offset : hint_range(-2.0, 2.0) = 0.0;
varying vec3 world_position;
void vertex() {
world_position = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
}
void fragment() {
// Use world Y position instead of UV
float gradient_factor = (world_position.y + gradient_offset) / gradient_height;
gradient_factor = clamp(gradient_factor, 0.0, 1.0);
vec3 final_color = mix(base_color.rgb, variation_color.rgb, gradient_factor);
ALBEDO = final_color;
ROUGHNESS = 0.8;
METALLIC = 0.0;
}

View file

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

View file

@ -0,0 +1,13 @@
shader_type spatial;
render_mode cull_front, unshaded;
uniform vec3 color : source_color = vec3(0,0,0);
uniform float thickness : hint_range(0.0, 1.0, 0.01) = 0.01;
void vertex() {
VERTEX += thickness*NORMAL;
}
void fragment() {
ALBEDO = color;
}

View file

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

View file

@ -0,0 +1,90 @@
shader_type spatial;
render_mode unshaded;
uniform sampler2D screen_texture : source_color, hint_screen_texture, filter_nearest;
uniform sampler2D depth_texture : source_color, hint_depth_texture, filter_nearest;
uniform sampler2D normal_texture : source_color, hint_normal_roughness_texture, filter_nearest;
uniform float depth_threshold : hint_range(0, 1) = 0.05;
uniform float reverse_depth_threshold : hint_range(0, 1) = 0.25;
uniform float normal_threshold : hint_range(0, 1) = 0.6;
uniform float darken_amount : hint_range(0, 1, 0.01) = 0.3;
uniform float lighten_amount : hint_range(0, 10, 0.01) = 1.5;
uniform vec3 normal_edge_bias = vec3(1, 1, 1);
global uniform vec3 light_direction;
float get_depth(vec2 screen_uv, mat4 inv_projection_matrix) {
float depth = texture(depth_texture, screen_uv).r;
vec3 ndc = vec3(screen_uv * 2.0 - 1.0, depth);
vec4 view = inv_projection_matrix * vec4(ndc, 1.0);
view.xyz /= view.w;
return -view.z;
}
void vertex() {
POSITION = vec4(VERTEX.xy, 1.0, 1.0);
}
void fragment() {
float depth = get_depth(SCREEN_UV, INV_PROJECTION_MATRIX);
vec3 normal = texture(normal_texture, SCREEN_UV).xyz * 2.0 - 1.0;
vec2 texel_size = 1.0 / VIEWPORT_SIZE.xy;
vec2 uvs[4];
uvs[0] = vec2(SCREEN_UV.x, min(1.0 - 0.001, SCREEN_UV.y + texel_size.y));
uvs[1] = vec2(SCREEN_UV.x, max(0.0, SCREEN_UV.y - texel_size.y));
uvs[2] = vec2(min(1.0 - 0.001, SCREEN_UV.x + texel_size.x), SCREEN_UV.y);
uvs[3] = vec2(max(0.0, SCREEN_UV.x - texel_size.x), SCREEN_UV.y);
float depth_diff = 0.0;
float depth_diff_reversed = 0.0;
float nearest_depth = depth;
vec2 nearest_uv = SCREEN_UV;
float normal_sum = 0.0;
for (int i = 0; i < 4; i++) {
float d = get_depth(uvs[i], INV_PROJECTION_MATRIX);
depth_diff += depth - d;
depth_diff_reversed += d - depth;
if (d < nearest_depth) {
nearest_depth = d;
nearest_uv = uvs[i];
}
vec3 n = texture(normal_texture, uvs[i]).xyz * 2.0 - 1.0;
vec3 normal_diff = normal - n;
// Edge pixels should yield to the normal closest to the bias direction
float normal_bias_diff = dot(normal_diff, normal_edge_bias);
float normal_indicator = smoothstep(-0.01, 0.01, normal_bias_diff);
normal_sum += dot(normal_diff, normal_diff) * normal_indicator;
}
float depth_edge = step(depth_threshold, depth_diff);
// The reverse depth sum produces depth lines inside of the object, but they don't look as nice as the normal depth_diff
// Instead, we can use this value to mask the normal edge along the outside of the object
float reverse_depth_edge = step(reverse_depth_threshold, depth_diff_reversed);
float indicator = sqrt(normal_sum);
float normal_edge = step(normal_threshold, indicator - reverse_depth_edge);
vec3 original = texture(screen_texture, SCREEN_UV).rgb;
vec3 nearest = texture(screen_texture, nearest_uv).rgb;
mat3 view_to_world_normal_mat = mat3(
INV_VIEW_MATRIX[0].xyz,
INV_VIEW_MATRIX[1].xyz,
INV_VIEW_MATRIX[2].xyz
);
float ld = dot((view_to_world_normal_mat * normal), normalize(light_direction));
vec3 depth_col = nearest * darken_amount;
vec3 normal_col = original * (ld > 0.0 ? darken_amount : lighten_amount);
vec3 edge_mix = mix(normal_col, depth_col, depth_edge);
ALBEDO = mix(original, edge_mix, (depth_edge > 0.0 ? depth_edge : normal_edge));
}

View file

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

156
Config/Globals.gd Normal file
View file

@ -0,0 +1,156 @@
class_name Globals
extends Node
var map_height: int = 200
var map_width: int = 200
var _map_data: Array
var _biome_data: Dictionary = {}
var _camp_data: Dictionary = {}
var spawn_point: Vector3 = Vector3(0, 0, 0)
# Property for map_data with logging
var map_data: Array:
get:
return _map_data
set(value):
_map_data = value
Log.pr("Map data updated")
# Property for biome_data with logging
var biome_data: Dictionary:
get:
return _biome_data
set(value):
_biome_data = value
_log_biome_update()
func _init() -> void:
_map_data.resize(map_height)
for y in range(map_height):
_map_data[y] = []
_map_data[y].resize(map_width)
Log.pr("Globals initialized with map size: %d x %d" % [map_width, map_height])
# Helper methods for updating specific parts of the data
func set_map_cell(x: int, y: int, value) -> void:
if x >= 0 and x < map_width and y >= 0 and y < map_height:
_map_data[y][x] = value
Log.pr("Map cell updated at (%d, %d)" % [x, y])
func update_biome(key: String, value) -> void:
_biome_data[key] = value
Log.pr("Biome data updated for key: %s" % key)
# Internal logging function for biome updates
func _log_biome_update() -> void:
var details = []
for key in _biome_data.keys():
var value = _biome_data[key]
if value is Image:
var img = value as Image
details.append("%s: Image[%dx%d]" % [key, img.get_width(), img.get_height()])
else:
details.append("%s: %s" % [key, str(value)])
Log.pr("Biome data updated: { %s }" % ", ".join(details))
display_all_noise_maps()
# Display visual representation of noise map
func display_noise_map(key: String, scale: int = 4) -> void:
if not _biome_data.has(key):
Log.pr("No biome data found for key: %s" % key)
return
var img = _biome_data[key]
if not img is Image:
Log.pr("Data for key '%s' is not an image" % key)
return
var image = img as Image
var width = image.get_width()
var height = image.get_height()
# Sample the image at lower resolution for console display
var display_width = min(width / scale, 50) # Max 50 chars wide
var display_height = min(height / scale, 25) # Max 25 lines tall
Log.pr("=== %s Noise Map (%dx%d) ===" % [key.capitalize(), width, height])
for y in range(display_height):
var line = ""
for x in range(display_width):
# Sample from the original image
var sample_x = int(x * scale)
var sample_y = int(y * scale)
# Get pixel color (assuming grayscale or we'll use red channel)
var pixel = image.get_pixel(sample_x, sample_y)
var intensity = pixel.r # Use red channel as intensity
# Convert intensity to colored circle
line += _get_colored_circle(intensity)
Log.pr(line)
Log.pr("Scale: 1 character = %dx%d pixels" % [scale, scale])
# Convert intensity value to colored circle character
func _get_colored_circle(intensity: float) -> String:
# ANSI color codes for red > yellow > green gradient
var color_code: String
var circle = ""
if intensity < 0.1:
color_code = "[color=maroon]" # Dark red
elif intensity < 0.2:
color_code = "[color=red]" # Red
elif intensity < 0.3:
color_code = "[color=#FF4500]" # Orange red
elif intensity < 0.4:
color_code = "[color=orange]" # Orange
elif intensity < 0.5:
color_code = "[color=#FFD700]" # Gold
elif intensity < 0.6:
color_code = "[color=yellow]" # Yellow
elif intensity < 0.7:
color_code = "[color=#ADFF2F]" # Green yellow
elif intensity < 0.8:
color_code = "[color=lime]" # Lime
elif intensity < 0.9:
color_code = "[color=green]" # Green
else:
color_code = "[color=darkgreen]" # Dark green
return color_code + circle + "[/color]"
# Display all biome maps
func display_all_noise_maps(scale: int = 4) -> void:
for key in _biome_data.keys():
if _biome_data[key] is Image:
display_noise_map(key, scale)
Log.pr("") # Empty line between maps
# Helper function to get detailed biome info
func log_biome_details() -> void:
Log.pr("=== Biome Data Details ===")
for key in _biome_data.keys():
var value = _biome_data[key]
if value is Image:
var img = value as Image
Log.pr("%s: Image [%dx%d, Format: %s]" % [key, img.get_width(), img.get_height(), _get_format_name(img.get_format())])
else:
Log.pr("%s: %s" % [key, str(value)])
# Helper to convert image format enum to readable string
func _get_format_name(format: Image.Format) -> String:
match format:
Image.FORMAT_L8: return "L8"
Image.FORMAT_LA8: return "LA8"
Image.FORMAT_R8: return "R8"
Image.FORMAT_RG8: return "RG8"
Image.FORMAT_RGB8: return "RGB8"
Image.FORMAT_RGBA8: return "RGBA8"
Image.FORMAT_RF: return "RF"
Image.FORMAT_RGF: return "RGF"
Image.FORMAT_RGBF: return "RGBF"
Image.FORMAT_RGBAF: return "RGBAF"
_: return "Unknown (%d)" % format

1
Config/Globals.gd.uid Normal file
View file

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,37 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://c3objh5he4fv7"
path="res://.godot/imported/plant_bush.glb-4eaf384fbf61c7e3b82505202bc9874e.scn"
[deps]
source_file="res://Entities/Bush/assets/plant_bush.glb"
dest_files=["res://.godot/imported/plant_bush.glb-4eaf384fbf61c7e3b82505202bc9874e.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={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

View file

@ -0,0 +1,48 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cefyfwcx88gn8"
path="res://.godot/imported/plant_bushDetailed.glb-8633db2639023d65ffc045b449119f56.scn"
[deps]
source_file="res://Entities/Bush/assets/plant_bushDetailed.glb"
dest_files=["res://.godot/imported/plant_bushDetailed.glb-8633db2639023d65ffc045b449119f56.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={
"meshes": {
"plant_bushDetailed_Mesh plant_bushDetailed": {
"generate/lightmap_uv": 0,
"generate/lods": 0,
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 60.0,
"save_to_file/enabled": true,
"save_to_file/path": "res://Entities/Bush/assets/bush_large.res"
}
}
}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

View file

@ -0,0 +1,37 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bqh742nyfy67t"
path="res://.godot/imported/plant_bushLarge.glb-034f46e010fc48537badbba708af03b9.scn"
[deps]
source_file="res://Entities/Bush/assets/plant_bushLarge.glb"
dest_files=["res://.godot/imported/plant_bushLarge.glb-034f46e010fc48537badbba708af03b9.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={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

View file

@ -0,0 +1,37 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://xj45kysvl047"
path="res://.godot/imported/plant_bushLargeTriangle.glb-4c2a6e5fedd13bffdd9cfb0a212c89c8.scn"
[deps]
source_file="res://Entities/Bush/assets/plant_bushLargeTriangle.glb"
dest_files=["res://.godot/imported/plant_bushLargeTriangle.glb-4c2a6e5fedd13bffdd9cfb0a212c89c8.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={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

View file

@ -0,0 +1,48 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cjoyr61xdo3hx"
path="res://.godot/imported/plant_bushSmall.glb-2218874f9d8b685dac1fd79232f82be8.scn"
[deps]
source_file="res://Entities/Bush/assets/plant_bushSmall.glb"
dest_files=["res://.godot/imported/plant_bushSmall.glb-2218874f9d8b685dac1fd79232f82be8.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={
"meshes": {
"plant_bushSmall_Mesh plant_bushSmall": {
"generate/lightmap_uv": 0,
"generate/lods": 0,
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 60.0,
"save_to_file/enabled": true,
"save_to_file/path": "res://Entities/Bush/assets/bush_small.res"
}
}
}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

View file

@ -0,0 +1,37 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dsch27pqxgud5"
path="res://.godot/imported/plant_bushTriangle.glb-518273ba96c29be659e875adddc31676.scn"
[deps]
source_file="res://Entities/Bush/assets/plant_bushTriangle.glb"
dest_files=["res://.godot/imported/plant_bushTriangle.glb-518273ba96c29be659e875adddc31676.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={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,16 @@
shader_type spatial;
uniform sampler2D noise_texture : filter_linear_mipmap;
uniform sampler2D gradient_texture : filter_linear;
uniform float noise_scale : hint_range(0.1, 10.0) = 1.0;
uniform float roughness_value : hint_range(0.0, 1.0) = 0.8;
void fragment() {
vec2 noise_uv = UV * noise_scale;
float noise_val = texture(noise_texture, noise_uv).r;
vec4 earth_color = texture(gradient_texture, vec2(noise_val, 0.0));
ALBEDO = earth_color.rgb;
ROUGHNESS = roughness_value;
}

View file

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

View file

@ -0,0 +1,101 @@
[gd_scene load_steps=16 format=3 uid="uid://bwcevwwphdvq"]
[ext_resource type="Script" uid="uid://bq7hia2dit80y" path="res://Entities/GroundTile/scripts/ground_tile.gd" id="1_uwxqs"]
[ext_resource type="Script" uid="uid://cacp8ncwuofuj" path="res://Entities/GroundTile/scripts/grass.gd" id="3_224hx"]
[ext_resource type="Material" uid="uid://b1miqvl8lus75" path="res://Stages/Test3D/GrassMaterialOverride.tres" id="3_f37ob"]
[ext_resource type="Script" uid="uid://btju6b83mvgvk" path="res://Entities/GroundTile/scripts/grass_multimesh.gd" id="4_3wpcb"]
[ext_resource type="Script" uid="uid://bt67yhdkwtqy5" path="res://Entities/GroundTile/scripts/bushes.gd" id="6_224hx"]
[ext_resource type="Script" uid="uid://cqko4m7cbxsfb" path="res://Entities/GroundTile/scripts/trees.gd" id="7_7lc7k"]
[ext_resource type="Script" uid="uid://dri5tubavplji" path="res://Entities/GroundTile/scripts/bush_multimesh.gd" id="7_jysav"]
[ext_resource type="Script" uid="uid://d3s0u7rm1y7i6" path="res://Entities/GroundTile/scripts/flower_multimesh.gd" id="8_jysav"]
[ext_resource type="Script" uid="uid://18vxtm3ua4x0" path="res://Entities/GroundTile/scripts/flowers.gd" id="8_q0r4p"]
[sub_resource type="ViewportTexture" id="ViewportTexture_h4g11"]
viewport_path = NodePath("DebugText/DebugTextViewport")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_f37ob"]
albedo_color = Color(0.196078, 0.392157, 0.196078, 1)
[sub_resource type="PlaneMesh" id="PlaneMesh_oqd8f"]
[sub_resource type="BoxShape3D" id="BoxShape3D_h4g11"]
size = Vector3(2, 2, 2)
[sub_resource type="MultiMesh" id="MultiMesh_3wpcb"]
transform_format = 1
[sub_resource type="PlaneMesh" id="PlaneMesh_f37ob"]
flip_faces = true
[node name="GroundTile" type="Node3D"]
script = ExtResource("1_uwxqs")
[node name="DebugText" type="Node3D" parent="."]
visible = false
[node name="DebugTextViewport" type="SubViewport" parent="DebugText"]
size = Vector2i(50, 50)
[node name="DebugTextLabel" type="Label" parent="DebugText/DebugTextViewport"]
offset_right = 40.0
offset_bottom = 23.0
text = "Hello world"
[node name="DebugTextBillboard" type="Sprite3D" parent="DebugText"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0461426, 0.199493, 0.0660986)
texture = SubResource("ViewportTexture_h4g11")
[node name="Ground" type="MeshInstance3D" parent="."]
material_override = SubResource("StandardMaterial3D_f37ob")
cast_shadow = 0
mesh = SubResource("PlaneMesh_oqd8f")
[node name="GroundCollision" type="StaticBody3D" parent="Ground"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground/GroundCollision"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
shape = SubResource("BoxShape3D_h4g11")
[node name="Grass" type="Node3D" parent="."]
script = ExtResource("3_224hx")
[node name="GrassMultimesh" type="MultiMeshInstance3D" parent="Grass"]
material_override = ExtResource("3_f37ob")
cast_shadow = 0
multimesh = SubResource("MultiMesh_3wpcb")
script = ExtResource("4_3wpcb")
[node name="GrassTarget" type="MeshInstance3D" parent="Grass"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0111763, 0)
mesh = SubResource("PlaneMesh_f37ob")
[node name="Bushes" type="Node3D" parent="."]
script = ExtResource("6_224hx")
[node name="BushMultimesh" type="MultiMeshInstance3D" parent="Bushes"]
cast_shadow = 0
multimesh = SubResource("MultiMesh_3wpcb")
script = ExtResource("7_jysav")
[node name="BushTarget" type="MeshInstance3D" parent="Bushes"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0111763, 0)
mesh = SubResource("PlaneMesh_f37ob")
[node name="Flowers" type="Node3D" parent="."]
script = ExtResource("8_q0r4p")
[node name="FlowerMultimesh" type="MultiMeshInstance3D" parent="Flowers"]
cast_shadow = 0
multimesh = SubResource("MultiMesh_3wpcb")
script = ExtResource("8_jysav")
[node name="FloewerTarget" type="MeshInstance3D" parent="Flowers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0111763, 0)
mesh = SubResource("PlaneMesh_f37ob")
[node name="Trees" type="Node3D" parent="."]
script = ExtResource("7_7lc7k")
[node name="Special" type="Node3D" parent="."]
[node name="Rocks" type="Node3D" parent="Special"]

BIN
Entities/GroundTile/assets/Dirt_05-256x256.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b8pca7c2vlwaa"
path.s3tc="res://.godot/imported/Dirt_05-256x256.png-df3829dddfb4eeab82c63b0845e8a300.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://Entities/GroundTile/assets/Dirt_05-256x256.png"
dest_files=["res://.godot/imported/Dirt_05-256x256.png-df3829dddfb4eeab82c63b0845e8a300.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

View file

@ -0,0 +1,56 @@
extends MultiMeshInstance3D
var mm: MultiMesh
var parent_node: BushController
static var bush_mesh: Mesh = null
var material: ShaderMaterial
func _ready() -> void:
parent_node = get_parent() as BushController
if parent_node == null:
Log.pr("Error: Parent node is not a BushController!")
# Load mesh once and reuse
if bush_mesh == null:
bush_mesh = load("res://Entities/Bush/assets/bush_large.res")
func setup_multimesh() -> void:
if parent_node == null:
return
if bush_mesh == null:
Log.pr("Error: Could not load bush mesh")
return
# Reuse existing MultiMesh if possible, or create new one
if mm == null:
mm = MultiMesh.new()
mm.transform_format = MultiMesh.TRANSFORM_3D
mm.mesh = bush_mesh
material = ColorData.get_random_bush_material(Season.current)
mm.mesh.surface_set_material(0, material)
# Configure instance count
mm.instance_count = parent_node.bush_instance_range
# Get shared RNG from GroundTile
var rng = parent_node.parent_node.get_rng()
# Generate positions using shared RNG
for i in range(mm.instance_count):
var random_pos = Vector3(
rng.randf_range(-1.0, 1.0),
0.0,
rng.randf_range(-1.0, 1.0)
)
var random_rotation = rng.randf_range(0.0, TAU)
var basis = Basis(Vector3.UP, random_rotation)
var random_scale = rng.randf_range(0.3, 0.9)
basis = basis.scaled(Vector3(random_scale, random_scale, random_scale))
var tx = Transform3D(basis, random_pos)
mm.set_instance_transform(i, tx)
multimesh = mm

View file

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

View file

@ -0,0 +1,36 @@
# GrassController.gd
extends Node3D
class_name BushController
@onready var bush_multimesh: MultiMeshInstance3D = $BushMultimesh
var parent_node: GroundTile = null
var bush_density: float = 0.5
var bush_instance_range: int = 10
func _ready() -> void:
parent_node = get_parent() as GroundTile
func spawn_bushes_for_cell(value):
if value == null:
return
bush_density = value.vegetation_density
update_bush_density()
if bush_multimesh and bush_multimesh.has_method("setup_multimesh"):
bush_multimesh.setup_multimesh()
func update_bush_density() -> void:
if parent_node == null:
return
var rng = parent_node.get_rng()
if bush_density > 0.8:
bush_instance_range = rng.randi_range(5, 10)
elif bush_density > 0.6:
bush_instance_range = rng.randi_range(2, 7)
elif bush_density > 0.3:
bush_instance_range = rng.randi_range(0, 1)
else:
bush_instance_range = rng.randi_range(0, 0)

View file

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

View file

@ -0,0 +1,59 @@
extends MultiMeshInstance3D
var mm: MultiMesh
var parent_node: FlowerController
static var flower_mesh: Mesh = null
var material: StandardMaterial3D
func _ready() -> void:
parent_node = get_parent() as FlowerController
if parent_node == null:
Log.pr("Error: Parent node is not a FlowerController!")
# Load mesh once and reuse
if flower_mesh == null:
flower_mesh = load("res://Entities/Plant/assets/flower_tall.res")
func setup_multimesh() -> void:
if parent_node == null:
return
if flower_mesh == null:
Log.pr("Error: Could not load flower mesh")
return
# Reuse existing MultiMesh if possible, or create new one
if mm == null:
mm = MultiMesh.new()
mm.transform_format = MultiMesh.TRANSFORM_3D
mm.mesh = flower_mesh
var flower_material = ColorData.flower_materials[Season.current]["flower"]
var stem_material = ColorData.flower_materials[Season.current]["stem"]
mm.mesh.surface_set_material(0, stem_material)
mm.mesh.surface_set_material(1, flower_material)
# Configure instance count
mm.instance_count = parent_node.flower_instance_range
# Get shared RNG from GroundTile
var rng = parent_node.parent_node.get_rng()
# Generate positions using shared RNG
for i in range(mm.instance_count):
var random_pos = Vector3(
rng.randf_range(-1.0, 1.0),
0.0,
rng.randf_range(-1.0, 1.0)
)
var random_rotation = rng.randf_range(0.0, TAU)
var basis = Basis(Vector3.UP, random_rotation)
var random_scale = rng.randf_range(0.2, 0.4)
basis = basis.scaled(Vector3(random_scale, random_scale, random_scale))
var tx = Transform3D(basis, random_pos)
mm.set_instance_transform(i, tx)
multimesh = mm

View file

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

View file

@ -0,0 +1,36 @@
# GrassController.gd
extends Node3D
class_name FlowerController
@onready var flower_multimesh: MultiMeshInstance3D = $FlowerMultimesh
var parent_node: GroundTile = null
var flower_density: float = 0.5
var flower_instance_range: int = 10
func _ready() -> void:
parent_node = get_parent() as GroundTile
func spawn_flowers_for_cell(value):
if value == null:
return
flower_density = value.vegetation_density
update_flower_density()
if flower_multimesh and flower_multimesh.has_method("setup_multimesh"):
flower_multimesh.setup_multimesh()
func update_flower_density() -> void:
if parent_node == null:
return
var rng = parent_node.get_rng()
if flower_density > 0.8:
flower_instance_range = rng.randi_range(1, 3)
elif flower_density > 0.6:
flower_instance_range = rng.randi_range(3, 4)
elif flower_density > 0.3:
flower_instance_range = rng.randi_range(4, 7)
else:
flower_instance_range = rng.randi_range(5, 10)

View file

@ -0,0 +1 @@
uid://18vxtm3ua4x0

View file

@ -0,0 +1,36 @@
# GrassController.gd
extends Node3D
class_name GrassController
@onready var grass_multimesh: MultiMeshInstance3D = $GrassMultimesh
var parent_node: GroundTile = null
var grass_density: float = 0.5
var grass_instance_range: int = 10
func _ready() -> void:
parent_node = get_parent() as GroundTile
func spawn_grass_for_cell(value):
if value == null:
return
grass_density = value.vegetation_density
update_grass_density()
if grass_multimesh and grass_multimesh.has_method("setup_multimesh"):
grass_multimesh.setup_multimesh()
func update_grass_density() -> void:
if parent_node == null:
return
var rng = parent_node.get_rng()
if grass_density > 0.8:
grass_instance_range = rng.randi_range(100, 500)
elif grass_density > 0.6:
grass_instance_range = rng.randi_range(30, 50)
elif grass_density > 0.3:
grass_instance_range = rng.randi_range(5, 20)
else:
grass_instance_range = rng.randi_range(0, 1)

View file

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

View file

@ -0,0 +1,70 @@
extends MultiMeshInstance3D
var mm: MultiMesh
var parent_node: GrassController
static var grass_mesh: Mesh = null
func _ready() -> void:
parent_node = get_parent() as GrassController
if parent_node == null:
Log.pr("Error: Parent node is not a GrassController!")
# Load mesh once and reuse
if grass_mesh == null:
grass_mesh = load("res://Entities/Grass/assets/grass2_mesh.res")
func setup_multimesh() -> void:
if parent_node == null:
return
if grass_mesh == null:
Log.pr("Error: Could not load grass mesh")
return
# Reuse existing MultiMesh if possible, or create new one
if mm == null:
mm = MultiMesh.new()
mm.transform_format = MultiMesh.TRANSFORM_3D
mm.mesh = grass_mesh
update_shader_parameter('top_color', ColorData.grass_materials[Season.current]['top'])
update_shader_parameter('bottom_color', ColorData.grass_materials[Season.current]['base'])
# Configure instance count
mm.instance_count = parent_node.grass_instance_range
# Get shared RNG from GroundTile
var rng = parent_node.parent_node.get_rng()
# Generate positions using shared RNG
for i in range(mm.instance_count):
var random_pos = Vector3(
rng.randf_range(-1.0, 1.0),
0.0,
rng.randf_range(-1.0, 1.0)
)
var random_rotation = rng.randf_range(0.0, TAU)
var basis = Basis(Vector3.UP, random_rotation)
var random_scale = rng.randf_range(0.05, 0.3)
basis = basis.scaled(Vector3(random_scale, random_scale, random_scale))
var tx = Transform3D(basis, random_pos)
mm.set_instance_transform(i, tx)
multimesh = mm
cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
func update_shader_parameter(param_name: String, value) -> void:
if material_override == null:
Log.pr("Error: No material override found")
return
# Check if it's a ShaderMaterial
if material_override is ShaderMaterial:
var shader_material = material_override as ShaderMaterial
shader_material.set_shader_parameter(param_name, value)
else:
Log.pr("Error: Material override is not a ShaderMaterial")
return

View file

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

View file

@ -0,0 +1,59 @@
class_name GroundTile
extends Node3D
@onready var debug_text: Label = $DebugText/DebugTextViewport/DebugTextLabel
@onready var tree_spawner = $Trees
@onready var grass_spawner = $Grass
@onready var bush_spawner = $Bushes
@onready var flower_spawner = $Flowers
@onready var ground = $Ground
var grid_x: int
var grid_z: int
var cell_info: CellDataResource = null
var spawners_ready: bool = false
var cached_rng: RandomClass = null
# 326432 229379
# Grass - 1a7761 1f6051
func _ready() -> void:
spawners_ready = true
if cell_info != null:
spawn_content()
update_text_label()
ground.material_override.albedo_color = ColorData.grass_materials[Season.current]['base']
func get_rng() -> RandomClass:
if cached_rng == null and cell_info:
cached_rng = RandomClass.get_seeded_instance(cell_info.cell_seed)
elif cached_rng == null:
cached_rng = RandomClass.get_shared_instance()
return cached_rng
func set_grid_location(x, z) -> void:
grid_x = x
grid_z = z
cell_info = MapData.get_map_data(grid_x, grid_z)
# Only spawn if spawners are ready
if spawners_ready and cell_info != null:
spawn_content()
func spawn_content():
if cell_info == null:
return
if tree_spawner and cell_info.should_spawn_trees():
tree_spawner.spawn_trees_for_cell(cell_info)
if grass_spawner and cell_info.should_spawn_grass():
grass_spawner.spawn_grass_for_cell(cell_info)
if bush_spawner and cell_info.should_spawn_bushes():
bush_spawner.spawn_bushes_for_cell(cell_info)
if flower_spawner and cell_info.should_spawn_flowers():
flower_spawner.spawn_flowers_for_cell(cell_info)
func update_text_label() -> void:
debug_text.text = str(cell_info.vegetation_density)

View file

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

View file

@ -0,0 +1,75 @@
extends Node3D
@export var spawn_area_size: Vector2 = Vector2(2.0, 2.0)
@export var min_distance: float = 0.5
var spawned_positions: Array[Vector3] = []
var parent_ground_tile: GroundTile
func _ready():
parent_ground_tile = get_parent() as GroundTile
func spawn_trees_for_cell(cell_info: CellDataResource):
if not cell_info:
return
if not parent_ground_tile:
return
# Clear existing trees WITHOUT queue_free()
for child in get_children():
child.free() # Immediate cleanup instead of queue_free()
spawned_positions.clear()
# Spawn each tree in the array
var spawned_count = 0
var attempts = 0
var max_attempts = cell_info.trees.size() * 10
for tree_resource in cell_info.trees:
if attempts >= max_attempts:
Log.pr("Reached max attempts, could only spawn %d of %d trees" % [spawned_count, cell_info.trees.size()])
break
var pos = get_random_position()
if is_position_valid(pos):
spawn_tree_at_position(pos, tree_resource as TreeDataResource)
spawned_positions.append(pos)
spawned_count += 1
attempts += 1
#Log.pr("Spawned %d of %d trees in cell" % [spawned_count, cell_info.trees.size()])
func get_random_position() -> Vector3:
var rng = parent_ground_tile.get_rng()
var x = rng.randf_range(-spawn_area_size.x / 2, spawn_area_size.x / 2)
var z = rng.randf_range(-spawn_area_size.y / 2, spawn_area_size.y / 2)
return Vector3(x, 0, z)
func spawn_tree_at_position(pos: Vector3, tree_resource: TreeDataResource):
if not tree_resource:
Log.pr("No tree resource provided")
return
var tree_scene = preload("res://Entities/Tree/Tree.tscn")
var tree_instance = tree_scene.instantiate()
add_child(tree_instance)
tree_instance.position = pos
var rng = parent_ground_tile.get_rng()
tree_instance.rotation.y = rng.randf() * TAU
# Pass the TreeDataResource to the Tree instance
if tree_instance.has_method("set_tree_data"):
tree_instance.set_tree_data(tree_resource)
else:
Log.pr("Tree instance doesn't have set_tree_data() method")
func is_position_valid(pos: Vector3) -> bool:
for existing_pos in spawned_positions:
if pos.distance_to(existing_pos) < min_distance:
return false
return true

View file

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

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,48 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://c8kl0a1nstbuc"
path="res://.godot/imported/flower_tall.glb-105aa1c03f7501793bbf8ad0e150a0ed.scn"
[deps]
source_file="res://Entities/Plant/assets/flower_tall.glb"
dest_files=["res://.godot/imported/flower_tall.glb-105aa1c03f7501793bbf8ad0e150a0ed.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={
"meshes": {
"flower_tall_Mesh flower_purpleB": {
"generate/lightmap_uv": 0,
"generate/lods": 0,
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 60.0,
"save_to_file/enabled": true,
"save_to_file/path": "res://Entities/Plant/assets/flower.res"
}
}
}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

591
Entities/Player/Player.tscn Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

View file

@ -0,0 +1,53 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://b8eo2wxpmpsn3"
path="res://.godot/imported/PlayerCharacter.glb-4183cc8dd55ffc9d207c3c8910d89126.scn"
[deps]
source_file="res://Entities/Player/assets/PlayerCharacter.glb"
dest_files=["res://.godot/imported/PlayerCharacter.glb-4183cc8dd55ffc9d207c3c8910d89126.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={
"meshes": {
"PlayerCharacter_mergedBlocksmesh": {
"generate/lightmap_uv": 0,
"generate/lods": 0,
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 60.0,
"save_to_file/enabled": true,
"save_to_file/path": ""
}
},
"nodes": {
"PATH:Armature/Skeleton3D": {
"retarget/bone_map": Resource("res://common/animations/Mixamo BoneMap.tres")
}
}
}
gltf/naming_version=1
gltf/embedded_image_handling=1

View file

@ -0,0 +1,53 @@
extends CharacterBody3D
@export var speed = 2
@export var fall_acceleration = 75
var target_velocity = Vector3.ZERO
func _ready() -> void:
position = Global.spawn_point
%Camp.position = Global.spawn_point
func _physics_process(delta):
RenderingServer.global_shader_parameter_set("player_position", position)
%TileGround.update_chunks(position)
# We create a local variable to store the input direction.
var direction = Vector3.ZERO
# We check for each move input and update the direction accordingly.
if Input.is_action_pressed("move_right"):
direction.x += 1
if Input.is_action_pressed("move_left"):
direction.x -= 1
if Input.is_action_pressed("move_back"):
# Notice how we are working with the vector's x and z axes.
# In 3D, the XZ plane is the ground plane.
direction.z += 1
if Input.is_action_pressed("move_forward"):
direction.z -= 1
if direction != Vector3.ZERO:
direction = direction.normalized()
# Setting the basis property will affect the rotation of the node.
$Pivot.basis = Basis.looking_at(-direction)
# Ground Velocity
target_velocity.x = direction.x * speed
target_velocity.z = direction.z * speed
# Vertical Velocity
if not is_on_floor(): # If in the air, fall towards the floor. Literally gravity
target_velocity.y = target_velocity.y - (fall_acceleration * delta)
# Moving the Character
velocity = target_velocity
if direction != Vector3.ZERO:
%PlayerAnimationPlayer.play('basic-movement/walk')
else:
%PlayerAnimationPlayer.play('basic-movement/idle')
move_and_slide()

View file

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

38
Entities/Tree/Tree.tscn Normal file
View file

@ -0,0 +1,38 @@
[gd_scene load_steps=5 format=3 uid="uid://c27fogucecn0r"]
[ext_resource type="Script" uid="uid://lcedx3lau6v5" path="res://Entities/Tree/scripts/tree.gd" id="1_702jv"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_s6kdm"]
radius = 0.2
height = 0.5
[sub_resource type="SphereShape3D" id="SphereShape3D_702jv"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_702jv"]
radius = 0.6
height = 2.5
[node name="Tree" type="Node3D"]
script = ExtResource("1_702jv")
[node name="TreeCollision" type="StaticBody3D" parent="." groups=["tree"]]
[node name="CollisionShape3D" type="CollisionShape3D" parent="TreeCollision"]
shape = SubResource("CapsuleShape3D_s6kdm")
[node name="InteractRange" type="Area3D" parent="."]
[node name="CollisionShape3D" type="CollisionShape3D" parent="InteractRange"]
shape = SubResource("SphereShape3D_702jv")
[node name="VisibilityArea" type="StaticBody3D" parent="." groups=["tree_visibility"]]
collision_layer = 2
collision_mask = 2
[node name="VisibilityShape" type="CollisionShape3D" parent="VisibilityArea"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.616604, 0)
shape = SubResource("CapsuleShape3D_702jv")
debug_color = Color(0.837648, 0.364145, 0.346694, 0.42)
[node name="LastBlocked" type="Timer" parent="."]
wait_time = 0.5

BIN
Entities/Tree/assets/Textures/colormap.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://v50x7hoiyguq"
path.s3tc="res://.godot/imported/colormap.png-540ab81ce65a030f551beee068cf0950.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://Entities/Tree/assets/Textures/colormap.png"
dest_files=["res://.godot/imported/colormap.png-540ab81ce65a030f551beee068cf0950.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

View file

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://m2m6dc4so845"
path.s3tc="res://.godot/imported/colormap.png-6d658b554c420448394e4d9ad962a5e1.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://stages/test3d/assets/Textures/colormap.png"
dest_files=["res://.godot/imported/colormap.png-6d658b554c420448394e4d9ad962a5e1.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

BIN
Entities/Tree/assets/Textures/texture.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dhajcn6k04poe"
path.s3tc="res://.godot/imported/texture.png-27d352bfc378434578d288ba141a0d45.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://Entities/Tree/assets/Textures/texture.png"
dest_files=["res://.godot/imported/texture.png-27d352bfc378434578d288ba141a0d45.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more