Getting started heregit status!

master
Jorge Vásquez Pérez 11 months ago
commit 7b0ae277b9

BIN
2d/fonts/bpc_sans_black.png (Stored with Git LFS)

Binary file not shown.

@ -0,0 +1,22 @@
[remap]
importer="font_data_image"
type="FontFile"
uid="uid://cxubkr80cb33s"
path="res://.godot/imported/bpc_sans_black.png-e3582b1c8e2c9bd6420548f3683a65cb.fontdata"
[deps]
source_file="res://2d/fonts/bpc_sans_black.png"
dest_files=["res://.godot/imported/bpc_sans_black.png-e3582b1c8e2c9bd6420548f3683a65cb.fontdata"]
[params]
character_ranges=PackedStringArray()
columns=9
rows=9
image_margin=Rect2i(0, 0, 0, 0)
character_margin=Rect2i(0, 0, 0, 0)
fallbacks=[]
compress=true
scaling_mode=2

File diff suppressed because it is too large Load Diff

@ -0,0 +1,22 @@
[remap]
importer="wavefront_obj"
importer_version=1
type="Mesh"
uid="uid://n27p1yxk4rhn"
path="res://.godot/imported/ASST_Cloud.obj-09ed8f65149166927596cc124c0c9f65.mesh"
[deps]
files=["res://.godot/imported/ASST_Cloud.obj-09ed8f65149166927596cc124c0c9f65.mesh"]
source_file="res://3d/models/ASST_Cloud.obj"
dest_files=["res://.godot/imported/ASST_Cloud.obj-09ed8f65149166927596cc124c0c9f65.mesh", "res://.godot/imported/ASST_Cloud.obj-09ed8f65149166927596cc124c0c9f65.mesh"]
[params]
generate_tangents=true
scale_mesh=Vector3(1, 1, 1)
offset_mesh=Vector3(0, 0, 0)
optimize_mesh=true
force_disable_mesh_compression=false

BIN
3d/models/CHAR_Abe.blend (Stored with Git LFS)

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -0,0 +1,51 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://hxobkgpjv4xo"
path="res://.godot/imported/CHAR_Abe_v004.blend-ff0b60604a4ef1f914298c16427b1f8b.scn"
[deps]
source_file="res://3d/models/CHAR_Abe_v004.blend"
dest_files=["res://.godot/imported/CHAR_Abe_v004.blend-ff0b60604a4ef1f914298c16427b1f8b.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={}
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/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

BIN
3d/models/LVL_Dojo.blend (Stored with Git LFS)

Binary file not shown.

@ -0,0 +1,62 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://b8gjuyilsgnws"
path="res://.godot/imported/LVL_Dojo.blend-253a6672bbffd75a74429786686feb4a.scn"
[deps]
source_file="res://3d/models/LVL_Dojo.blend"
dest_files=["res://.godot/imported/LVL_Dojo.blend-253a6672bbffd75a74429786686feb4a.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={
"materials": {
"LVL_MAT_Grid": {
"use_external/enabled": true,
"use_external/path": "res://Shaders/LVL_MAT_Dojo.tres"
},
"MAT_Trees": {
"use_external/enabled": true,
"use_external/path": "res://Shaders/ASST_MAT_Trees.res"
}
}
}
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/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

BIN
3d/models/LVL_Promenade.blend (Stored with Git LFS)

Binary file not shown.

@ -0,0 +1,58 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://b1seql40y0fmd"
path="res://.godot/imported/LVL_Promenade.blend-684bf91e67519ef5f3885b827db724df.scn"
[deps]
source_file="res://3d/models/LVL_Promenade.blend"
dest_files=["res://.godot/imported/LVL_Promenade.blend-684bf91e67519ef5f3885b827db724df.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={
"materials": {
"LVL_MAT_Grid": {
"use_external/enabled": true,
"use_external/path": "res://Shaders/LVL_MAT_Dojo.tres"
}
}
}
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/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

Binary file not shown.

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cekq5a63l8u15"
path="res://.godot/imported/ASST_prBuildings_diffuse.png-5895f6e82e42f681b981bce948a31cc5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://3d/models/textures/ASST_prBuildings_diffuse.png"
dest_files=["res://.godot/imported/ASST_prBuildings_diffuse.png-5895f6e82e42f681b981bce948a31cc5.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

Binary file not shown.

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://8iwjdih3bvj1"
path="res://.godot/imported/ASST_prBuildings_normal.png-a72e084e0da21d25a1fa6c03b6e40a85.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://3d/models/textures/ASST_prBuildings_normal.png"
dest_files=["res://.godot/imported/ASST_prBuildings_normal.png-a72e084e0da21d25a1fa6c03b6e40a85.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

Binary file not shown.

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c7g1lervup6pt"
path.s3tc="res://.godot/imported/CHAR_AbeFace_emit.png-75f6b275c9e4dba64f1dd6c9477906cb.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://3d/models/textures/CHAR_AbeFace_emit.png"
dest_files=["res://.godot/imported/CHAR_AbeFace_emit.png-75f6b275c9e4dba64f1dd6c9477906cb.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=2
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=0

BIN
3d/models/textures/CHAR_Abe_diffuse.png (Stored with Git LFS)

Binary file not shown.

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bi3cljuc4dicl"
path.s3tc="res://.godot/imported/CHAR_Abe_diffuse.png-48d1477d9dd39856c915dd1d9227bc89.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://3d/models/textures/CHAR_Abe_diffuse.png"
dest_files=["res://.godot/imported/CHAR_Abe_diffuse.png-48d1477d9dd39856c915dd1d9227bc89.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
3d/models/textures/CHAR_Abe_emit.png (Stored with Git LFS)

Binary file not shown.

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://45tpikb0js5i"
path.s3tc="res://.godot/imported/CHAR_Abe_emit.png-b756bebdd1a6664d0bf7f890d4102522.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://3d/models/textures/CHAR_Abe_emit.png"
dest_files=["res://.godot/imported/CHAR_Abe_emit.png-b756bebdd1a6664d0bf7f890d4102522.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.

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dhdeki5r0pg63"
path.s3tc="res://.godot/imported/CHAR_Abe_metal-CHAR_Abe_roughness.png-cca03751391afc6f5ba38d5f313846ba.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://3d/models/textures/CHAR_Abe_metal-CHAR_Abe_roughness.png"
dest_files=["res://.godot/imported/CHAR_Abe_metal-CHAR_Abe_roughness.png-cca03751391afc6f5ba38d5f313846ba.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
3d/models/textures/CHAR_Abe_normal.png (Stored with Git LFS)

Binary file not shown.

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bcilhv0vmo23e"
path.s3tc="res://.godot/imported/CHAR_Abe_normal.png-eb7d6d0472051530dea234f8f63b391d.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://3d/models/textures/CHAR_Abe_normal.png"
dest_files=["res://.godot/imported/CHAR_Abe_normal.png-eb7d6d0472051530dea234f8f63b391d.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=1
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=1
roughness/src_normal="res://3d/models/textures/CHAR_Abe_normal.png"
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

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cj3ncv0ep6gcp"
path.s3tc="res://.godot/imported/LVL_Dojo_grid.jpg-8541ce5d007c5f96457ca4a2b0a1e7eb.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://3d/models/textures/LVL_Dojo_grid.jpg"
dest_files=["res://.godot/imported/LVL_Dojo_grid.jpg-8541ce5d007c5f96457ca4a2b0a1e7eb.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=1
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
3d/models/textures/LVL_Dojo_grid.png (Stored with Git LFS)

Binary file not shown.

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://1xneemhylx7g"
path.s3tc="res://.godot/imported/LVL_Dojo_grid.png-882a584d5ae4101e969615d6f9b9acf4.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://3d/models/textures/LVL_Dojo_grid.png"
dest_files=["res://.godot/imported/LVL_Dojo_grid.png-882a584d5ae4101e969615d6f9b9acf4.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=1
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=1
roughness/src_normal="res://3d/models/textures/LVL_Dojo_grid.png"
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

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ba8nw16ss0gdk"
path.s3tc="res://.godot/imported/LVL_Dojo_grid.webp-b13641b424946ef2ead9968d95349f9f.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://3d/models/textures/LVL_Dojo_grid.webp"
dest_files=["res://.godot/imported/LVL_Dojo_grid.webp-b13641b424946ef2ead9968d95349f9f.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=1
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=1
roughness/src_normal="res://3d/models/textures/LVL_Dojo_grid.webp"
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.

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ckkmt8fxo5m1l"
path="res://.godot/imported/building.001.diff.blue.png-965a4c05496d26ecd92dc01efcb83f70.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://3d/models/textures/building.001.diff.blue.png"
dest_files=["res://.godot/imported/building.001.diff.blue.png-965a4c05496d26ecd92dc01efcb83f70.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

Binary file not shown.

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ckv3hfwlqfg2u"
path="res://.godot/imported/building.001.diff.red.png-7a762a2553a6bda335c159b3369115cd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://3d/models/textures/building.001.diff.red.png"
dest_files=["res://.godot/imported/building.001.diff.red.png-7a762a2553a6bda335c159b3369115cd.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

Binary file not shown.

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://biv1wq2esi4jq"
path="res://.godot/imported/building.001.normals.png-0c39a9755f5eebbd263204093696cf66.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://3d/models/textures/building.001.normals.png"
dest_files=["res://.godot/imported/building.001.normals.png-0c39a9755f5eebbd263204093696cf66.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

Binary file not shown.

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bgd3uni2ldqow"
path="res://.godot/imported/construction.fence.diff.png-8d7d3b3869d22332c4a6230b2d9a733d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://3d/models/textures/construction.fence.diff.png"
dest_files=["res://.godot/imported/construction.fence.diff.png-8d7d3b3869d22332c4a6230b2d9a733d.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
3d/models/textures/displacement_01.png (Stored with Git LFS)

Binary file not shown.

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bi23vaupci4cq"
path.s3tc="res://.godot/imported/displacement_01.png-e7f6e045e280b1f14e7ae1c10dfaa3c1.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://3d/models/textures/displacement_01.png"
dest_files=["res://.godot/imported/displacement_01.png-e7f6e045e280b1f14e7ae1c10dfaa3c1.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.

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dawb3pyro85uw"
path.s3tc="res://.godot/imported/green_metal_rust_disp_4k.png-cdf37fc4e8c93dedef62d5974a988aa1.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://3d/models/textures/green_metal_rust_disp_4k.png"
dest_files=["res://.godot/imported/green_metal_rust_disp_4k.png-cdf37fc4e8c93dedef62d5974a988aa1.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.

@ -0,0 +1,30 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cytidj4nu1lq4"
valid=false
[deps]
source_file="res://3d/models/textures/green_metal_rust_nor_gl_4k.exr"
[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

Binary file not shown.

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dpjvc7odynlvb"
path="res://.godot/imported/green_metal_rust_nor_gl_4k.png-fbb5e9feb2f17db7c43aea5009fd7d69.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://3d/models/textures/green_metal_rust_nor_gl_4k.png"
dest_files=["res://.godot/imported/green_metal_rust_nor_gl_4k.png-fbb5e9feb2f17db7c43aea5009fd7d69.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

Binary file not shown.

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bqpym0dd7www0"
path.s3tc="res://.godot/imported/green_metal_rust_rough_4k.jpg-bb4043ba6ef8bcffd47edf265e9c4461.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://3d/models/textures/green_metal_rust_rough_4k.jpg"
dest_files=["res://.godot/imported/green_metal_rust_rough_4k.jpg-bb4043ba6ef8bcffd47edf265e9c4461.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

@ -0,0 +1,43 @@
[gd_scene load_steps=7 format=3 uid="uid://dqst72t4smkp"]
[ext_resource type="ArrayMesh" uid="uid://n27p1yxk4rhn" path="res://3d/models/ASST_Cloud.obj" id="1_6hp1t"]
[sub_resource type="Curve" id="Curve_peh0b"]
min_value = -360.0
max_value = 360.0
_data = [Vector2(0, -360), 0.0, 0.0, 0, 0, Vector2(1, 360), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_8dfsx"]
curve = SubResource("Curve_peh0b")
[sub_resource type="Curve" id="Curve_6320t"]
_data = [Vector2(0, 0.224738), 0.0, 4.1593, 0, 0, Vector2(0.503817, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 3
[sub_resource type="CurveTexture" id="CurveTexture_71r7k"]
curve = SubResource("Curve_6320t")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_mwq43"]
particle_flag_align_y = true
particle_flag_rotate_y = true
angle_min = -180.0
angle_max = 180.0
velocity_pivot = Vector3(0, 0, 1)
direction = Vector3(0, 1, 0)
initial_velocity_min = 2.0
initial_velocity_max = 2.0
angular_velocity_max = 1.0
angular_velocity_curve = SubResource("CurveTexture_8dfsx")
gravity = Vector3(0, 0, 0)
scale_min = 0.0
scale_max = 0.5
scale_curve = SubResource("CurveTexture_71r7k")
turbulence_enabled = true
turbulence_noise_strength = 20.0
turbulence_noise_speed = Vector3(0, 0, 1)
[node name="GPUParticles3D" type="GPUParticles3D"]
amount = 64
process_material = SubResource("ParticleProcessMaterial_mwq43")
draw_pass_1 = ExtResource("1_6hp1t")

@ -0,0 +1,437 @@
[gd_scene load_steps=13 format=3 uid="uid://dkt4b5x12c0o8"]
[ext_resource type="Script" path="res://Scripts/Abe_v3.gd" id="1_03pdh"]
[ext_resource type="PackedScene" uid="uid://bk1lpms6pjidx" path="res://3d/models/CHAR_Abe.blend" id="2_ec8d2"]
[ext_resource type="Material" uid="uid://cpx8gdyqdntn5" path="res://Shaders/CHAR_MAT_Abe.tres" id="3_l1nqp"]
[ext_resource type="Material" uid="uid://b3q4c07bt6rra" path="res://Shaders/CHAR_MAT_AbeFace.tres" id="4_qxawg"]
[ext_resource type="PackedScene" uid="uid://dqst72t4smkp" path="res://Particles/PART_DustClouds.tscn" id="5_dtwkc"]
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_eph3m"]
animation = &"ANIM_Abe_Idle_01"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_8e0pg"]
animation = &"ANIM_Abe_Run_01"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_8ud4y"]
animation = &"ANIM_Abe_Walk_01"
[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_2elp8"]
[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_2bro7"]
[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_seljc"]
nodes/ANIM_Idle/node = SubResource("AnimationNodeAnimation_eph3m")
nodes/ANIM_Idle/position = Vector2(-380, 80)
nodes/ANIM_Run/node = SubResource("AnimationNodeAnimation_8e0pg")
nodes/ANIM_Run/position = Vector2(360, 420)
nodes/ANIM_Walk/node = SubResource("AnimationNodeAnimation_8ud4y")
nodes/ANIM_Walk/position = Vector2(-360, 400)
nodes/Run/node = SubResource("AnimationNodeBlend2_2elp8")
nodes/Run/position = Vector2(640, 80)
nodes/Walk/node = SubResource("AnimationNodeBlend2_2bro7")
nodes/Walk/position = Vector2(160, 80)
nodes/output/position = Vector2(1120, 220)
node_connections = [&"Run", 0, &"Walk", &"Run", 1, &"ANIM_Run", &"Walk", 0, &"ANIM_Idle", &"Walk", 1, &"ANIM_Walk", &"output", 0, &"Run"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_8bcc1"]
radius = 0.360252
height = 1.47759
[node name="Abe" type="CharacterBody3D"]
script = ExtResource("1_03pdh")
[node name="Abe_Lo" parent="." instance=ExtResource("2_ec8d2")]
[node name="Skeleton3D" parent="Abe_Lo/CLOUDRIG_Abe" index="0"]
bones/0/position = Vector3(2.44296e-15, 0.846554, -0.339267)
bones/0/rotation = Quaternion(0.707107, -5.33851e-08, -5.33851e-08, 0.707107)
bones/0/scale = Vector3(1, 1, 1)
bones/1/position = Vector3(1.17192e-15, 0.846554, -0.109783)
bones/1/rotation = Quaternion(0.707107, -5.33851e-08, -5.33851e-08, 0.707107)
bones/2/position = Vector3(-1.02567e-14, 0.846554, 0.1197)
bones/2/rotation = Quaternion(0.707107, -5.33851e-08, -5.33851e-08, 0.707107)
bones/3/position = Vector3(0.108782, 0.452581, 0.687795)
bones/3/rotation = Quaternion(0.708387, -0.0281323, 0.0282804, 0.704696)
bones/3/scale = Vector3(1.00001, 1, 1)
bones/4/position = Vector3(1.15857e-08, -1.0361e-07, -2.15004e-08)
bones/5/rotation = Quaternion(-0.00149004, -2.66694e-11, 0.000911234, 0.999999)
bones/6/rotation = Quaternion(-6.46946e-08, 0.00149002, 0.999999, -0.000911244)
bones/6/scale = Vector3(1, 0.960708, 1)
bones/7/position = Vector3(0.115194, 0.455178, 0.60763)
bones/7/rotation = Quaternion(0.689093, 0.00521478, 0.724088, -0.0286373)
bones/7/scale = Vector3(1, 1, 1)
bones/8/position = Vector3(0.183301, 0.0320629, 0.168592)
bones/9/position = Vector3(0.139509, 0.772434, -0.0330334)
bones/9/rotation = Quaternion(0.998093, 0.0408963, 0.0408964, 0.0215775)
bones/11/rotation = Quaternion(0.0416217, -0.0157768, 0.0184478, 0.998839)
bones/11/scale = Vector3(1, 1, 1)
bones/12/rotation = Quaternion(-0.652949, -0.0462559, 0.0164149, 0.75581)
bones/13/rotation = Quaternion(0.708387, 0.0281323, -0.0282804, 0.704696)
bones/13/scale = Vector3(1.00001, 1, 1)
bones/14/position = Vector3(-1.15858e-08, -1.06171e-07, -2.14932e-08)
bones/15/rotation = Quaternion(-0.00149002, 2.31711e-11, -0.000911263, 0.999999)
bones/16/rotation = Quaternion(6.29591e-08, 0.00149002, 0.999999, 0.000911252)
bones/16/scale = Vector3(1, 0.960708, 1)
bones/17/position = Vector3(-0.115194, 0.455178, 0.60763)
bones/17/rotation = Quaternion(0.724088, -0.0286372, 0.689094, 0.00521482)
bones/17/scale = Vector3(1, 1, 1)
bones/18/position = Vector3(-0.183301, 0.0320629, 0.168592)
bones/19/position = Vector3(-0.139509, 0.772435, -0.0330334)
bones/19/rotation = Quaternion(0.998093, -0.0408963, -0.0408964, 0.0215775)
bones/21/rotation = Quaternion(0.0416217, 0.0157768, -0.0184478, 0.998839)
bones/21/scale = Vector3(1, 1, 1)
bones/22/rotation = Quaternion(-0.652949, 0.0462559, -0.0164149, 0.75581)
bones/23/rotation = Quaternion(-0.000598773, 0.707794, -0.706419, -0.000599891)
bones/23/scale = Vector3(1, 1, 1)
bones/24/position = Vector3(4.38533e-08, -1.0943e-08, 8.31342e-08)
bones/25/rotation = Quaternion(-0.167863, -2.81581e-09, 0.132465, 0.97687)
bones/26/rotation = Quaternion(-7.64918e-09, 0.167863, 0.97687, -0.132465)
bones/26/scale = Vector3(1, 0.752002, 1)
bones/27/position = Vector3(0.281916, 0.860277, -0.0319441)
bones/27/rotation = Quaternion(-0.00491779, 0.00628552, -0.706444, 0.707724)
bones/29/rotation = Quaternion(0.0146383, 1.06669e-06, 9.14342e-05, 0.999893)
bones/30/rotation = Quaternion(-0.00671585, 1.88861e-09, -0.000988972, 0.999977)
bones/31/position = Vector3(0.497069, 0.241987, 0.244877)
bones/31/rotation = Quaternion(0.843504, -0.245402, -0.115874, 0.463522)
bones/34/position = Vector3(0.431412, 0.341106, 0.148042)
bones/34/rotation = Quaternion(0.609001, -0.646138, 0.171796, 0.426743)
bones/37/scale = Vector3(1, 1, 1)
bones/38/position = Vector3(-4.38533e-08, -1.07102e-08, 8.31342e-08)
bones/39/rotation = Quaternion(-0.167863, 1.92891e-09, -0.132465, 0.97687)
bones/40/rotation = Quaternion(-1.37198e-07, 0.167863, 0.97687, 0.132465)
bones/40/scale = Vector3(1, 0.752002, 1)
bones/41/position = Vector3(-0.281916, 0.860277, -0.0319441)
bones/41/rotation = Quaternion(-0.00491779, -0.00628552, 0.706444, 0.707724)
bones/43/rotation = Quaternion(0.0146383, -1.06669e-06, -9.14342e-05, 0.999893)
bones/44/rotation = Quaternion(-0.00671585, -1.88861e-09, 0.000988972, 0.999977)
bones/45/position = Vector3(-0.497069, 0.241987, 0.244877)
bones/45/rotation = Quaternion(0.843504, 0.245402, 0.115874, 0.463522)
bones/48/position = Vector3(-0.431412, 0.341106, 0.148042)
bones/48/rotation = Quaternion(0.609001, 0.646138, -0.171796, 0.426743)
bones/53/position = Vector3(2.33451e-15, 0.339267, 0.846554)
bones/53/rotation = Quaternion(1, -8.60132e-15, -7.54979e-08, -3.46312e-07)
bones/54/position = Vector3(1.57101e-14, 0.229484, -4.30948e-08)
bones/54/rotation = Quaternion(-2.59734e-07, 3.17865e-08, 1.13533e-14, 1)
bones/55/position = Vector3(-1.28961e-14, 0.229484, -1.08855e-07)
bones/55/rotation = Quaternion(-3.46312e-07, -7.10543e-15, 1.75445e-14, 1)
bones/62/rotation = Quaternion(0.690501, 0.0578362, 5.94173e-08, 0.721016)
bones/63/rotation = Quaternion(-0.0431732, -0.00602341, -0.00197977, 0.999048)
bones/64/rotation = Quaternion(0.120842, -0.0142614, 0.0196429, 0.992375)
bones/64/scale = Vector3(1, 1, 1)
bones/65/position = Vector3(-3.52642e-08, 0.386825, -1.78805e-08)
bones/65/rotation = Quaternion(-0.679739, -0.0421004, 0.0208819, 0.731947)
bones/66/rotation = Quaternion(-0.0932356, -7.75849e-08, 0.00172522, 0.995643)
bones/67/rotation = Quaternion(0.0549193, -2.74158e-05, -0.00101757, 0.99849)
bones/67/scale = Vector3(1, 1, 1)
bones/68/position = Vector3(1.36182e-08, 0.143821, -1.3902e-09)
bones/69/rotation = Quaternion(0.0549193, -2.74866e-05, -0.00101776, 0.99849)
bones/69/scale = Vector3(1, 1, 1)
bones/70/position = Vector3(1.36182e-08, 0.143821, -1.3902e-09)
bones/70/rotation = Quaternion(7.4541e-09, -0.000163676, -4.41826e-11, 1)
bones/71/rotation = Quaternion(0.266022, 0.0610619, -0.00659357, 0.962009)
bones/71/scale = Vector3(1, 1, 1)
bones/72/rotation = Quaternion(0.466077, 0.0558265, -0.0107742, 0.882915)
bones/72/scale = Vector3(1, 1, 1)
bones/74/position = Vector3(-2.60188e-08, 0.128942, -1.53668e-08)
bones/74/rotation = Quaternion(-7.39819e-08, 0.0131227, 7.91839e-09, 0.999914)
bones/75/position = Vector3(-3.25963e-09, -4.61587e-08, 9.31323e-10)
bones/76/position = Vector3(-6.05361e-09, -1.19326e-08, -9.31322e-10)
bones/76/rotation = Quaternion(2.82307e-08, 3.87082e-09, 1.89466e-08, 1)
bones/77/position = Vector3(-3.25963e-09, 0.257883, -7.45058e-09)
bones/77/rotation = Quaternion(1.61607e-06, 0.00950054, 4.04271e-07, 0.999955)
bones/78/position = Vector3(3.6438e-08, 6.0536e-09, -1.86265e-09)
bones/79/position = Vector3(3.31784e-08, 1.47848e-08, -9.31323e-10)
bones/79/rotation = Quaternion(7.70669e-08, -8.64382e-09, -4.5431e-08, 1)
bones/80/position = Vector3(-3.69553e-10, 1.48274e-08, -3.17964e-09)
bones/80/rotation = Quaternion(-0.0549733, 0.0162937, -0.00904719, 0.998314)
bones/81/rotation = Quaternion(1.65871e-08, 0.707107, -1.75338e-08, 0.707107)
bones/82/position = Vector3(1.52717e-08, -3.24731e-08, -5.63805e-09)
bones/82/rotation = Quaternion(-0.0189144, 0.0160251, -0.00838864, 0.999658)
bones/83/position = Vector3(-3.84171e-09, 2.49001e-08, -6.66134e-16)
bones/84/rotation = Quaternion(1.80612e-06, 0.00574695, 1.25855e-07, 0.999984)
bones/85/rotation = Quaternion(-1.14052e-06, -6.17004e-09, -6.2806e-08, 1)
bones/86/rotation = Quaternion(8.14906e-10, 2.85218e-09, -2.73576e-09, 1)
bones/86/scale = Vector3(1, 0.999999, 1)
bones/87/rotation = Quaternion(-2.04891e-08, -1.47265e-08, -1.04134e-07, 1)
bones/88/rotation = Quaternion(0.120623, -0.0143199, 0.020949, 0.992374)
bones/88/scale = Vector3(1, 1, 1)
bones/89/rotation = Quaternion(7.7649e-08, -5.07862e-08, -1.07335e-07, 1)
bones/89/scale = Vector3(1, 1, 1)
bones/90/rotation = Quaternion(-5.47734e-08, 5.60831e-08, 1.09401e-07, 1)
bones/90/scale = Vector3(1, 1, 1)
bones/91/rotation = Quaternion(-0.679859, -0.0452708, 0.0165278, 0.731757)
bones/91/scale = Vector3(1, 1, 1)
bones/92/rotation = Quaternion(-0.0932345, 4.34894e-06, 0.0017757, 0.995643)
bones/92/scale = Vector3(1, 0.999999, 1)
bones/93/position = Vector3(-2.11876e-08, 0.107384, 2.79397e-09)
bones/93/rotation = Quaternion(-2.02721e-08, 0.00440498, 6.52444e-08, 0.99999)
bones/94/position = Vector3(2.00234e-08, -2.4098e-08, -1.86264e-09)
bones/95/position = Vector3(2.67755e-08, -5.59958e-08, -9.31323e-10)
bones/95/rotation = Quaternion(-5.12228e-09, -3.28873e-08, 1.04774e-08, 1)
bones/96/position = Vector3(-2.44472e-09, 0.214768, 4.65661e-09)
bones/96/rotation = Quaternion(4.11189e-07, 0.00334685, 8.15521e-08, 0.999994)
bones/97/position = Vector3(-1.01281e-08, -4.34229e-08, -9.31322e-10)
bones/98/position = Vector3(4.65675e-10, -1.52504e-08, -6.66134e-16)
bones/98/rotation = Quaternion(-6.89178e-08, -1.68802e-08, -2.25846e-08, 1)
bones/99/rotation = Quaternion(1.87195e-06, 0.00574696, 1.61908e-07, 0.999984)
bones/100/rotation = Quaternion(-0.0431732, -0.00602341, -0.00197977, 0.999048)
bones/101/rotation = Quaternion(0.120842, -0.0142614, 0.0196429, 0.992375)
bones/101/scale = Vector3(1, 1, 1)
bones/102/rotation = Quaternion(0.0660117, -0.00834247, 0.0111363, 0.997722)
bones/102/scale = Vector3(1, 0.993487, 1)
bones/103/rotation = Quaternion(0.0226449, -0.00878254, 0.0102272, 0.999653)
bones/103/scale = Vector3(1, 0.993487, 1)
bones/104/rotation = Quaternion(0.690501, -0.0578361, -1.03334e-07, 0.721016)
bones/104/scale = Vector3(1, 1, 1)
bones/105/rotation = Quaternion(-0.0431733, 0.00602337, 0.00197969, 0.999047)
bones/106/rotation = Quaternion(0.120843, 0.0142614, -0.0196429, 0.992375)
bones/106/scale = Vector3(1, 1, 1)
bones/107/position = Vector3(-3.67291e-09, 0.386825, -7.10854e-09)
bones/107/rotation = Quaternion(-0.679739, 0.0421005, -0.0208819, 0.731947)
bones/108/rotation = Quaternion(-0.0932356, 7.749e-08, -0.00172522, 0.995643)
bones/109/scale = Vector3(1, 1, 1)
bones/111/rotation = Quaternion(0.0549193, 2.74856e-05, 0.00101776, 0.99849)
bones/111/scale = Vector3(1, 1, 1)
bones/113/rotation = Quaternion(0.266022, -0.0610619, 0.00659351, 0.962009)
bones/113/scale = Vector3(1, 1, 1)
bones/114/rotation = Quaternion(0.466077, -0.0558265, 0.0107742, 0.882915)
bones/114/scale = Vector3(1, 1, 1)
bones/116/position = Vector3(8.32371e-09, 0.128941, 9.31326e-10)
bones/116/rotation = Quaternion(-2.97018e-08, -0.0131227, 3.48104e-08, 0.999914)
bones/117/position = Vector3(-1.86264e-09, -3.89991e-08, 3.72529e-09)
bones/118/position = Vector3(-1.16412e-09, -2.73576e-09, 5.58794e-09)
bones/118/rotation = Quaternion(5.52973e-09, 8.99308e-09, -5.14847e-08, 1)
bones/119/position = Vector3(-1.74622e-09, 0.257883, 7.91624e-09)
bones/119/rotation = Quaternion(1.61936e-06, -0.00950054, -3.3526e-07, 0.999955)
bones/120/position = Vector3(-8.26549e-09, -1.24564e-08, -2.79397e-09)
bones/121/position = Vector3(-9.66248e-09, -1.04773e-09, -2.79397e-09)
bones/121/rotation = Quaternion(9.01055e-08, 1.89175e-08, -1.09431e-08, 1)
bones/122/position = Vector3(-4.20612e-09, -3.23389e-08, -2.99743e-09)
bones/122/rotation = Quaternion(-0.0549734, -0.0162937, 0.00904716, 0.998314)
bones/123/scale = Vector3(1, 1, 1)
bones/124/position = Vector3(-5.77858e-09, -4.56626e-08, -4.87866e-09)
bones/124/rotation = Quaternion(-0.0189144, -0.0160251, 0.00838864, 0.999658)
bones/125/position = Vector3(-5.3551e-09, 8.49764e-09, 2.3283e-10)
bones/126/rotation = Quaternion(1.7499e-06, -0.00574691, -1.24082e-07, 0.999984)
bones/127/rotation = Quaternion(-1.05484e-06, 1.25147e-08, 7.22939e-08, 1)
bones/127/scale = Vector3(0.999999, 1, 1)
bones/128/rotation = Quaternion(2.1304e-08, 1.57161e-09, 6.2224e-08, 1)
bones/129/rotation = Quaternion(5.12227e-09, 1.30967e-08, -6.92671e-09, 1)
bones/129/scale = Vector3(1, 0.999999, 1)
bones/130/rotation = Quaternion(0.120623, 0.0143199, -0.0209492, 0.992374)
bones/130/scale = Vector3(1, 0.999999, 1)
bones/131/rotation = Quaternion(2.60188e-08, 5.09317e-08, 9.1124e-08, 1)
bones/132/rotation = Quaternion(3.7253e-09, -5.59667e-08, -5.02914e-08, 1)
bones/133/rotation = Quaternion(-0.679859, 0.0452709, -0.0165278, 0.731757)
bones/134/rotation = Quaternion(-0.0932345, -4.33605e-06, -0.0017757, 0.995643)
bones/135/position = Vector3(7.45058e-09, 0.107384, 1.86265e-09)
bones/135/rotation = Quaternion(-4.07517e-08, -0.00440498, 8.45847e-08, 0.99999)
bones/136/position = Vector3(3.25963e-09, 1.69966e-08, -1.86264e-09)
bones/137/position = Vector3(2.32825e-10, -1.32713e-08, -2.22045e-16)
bones/137/rotation = Quaternion(4.17931e-08, -8.44012e-08, -3.69037e-08, 1)
bones/138/position = Vector3(2.56114e-09, 0.214768, 4.65661e-09)
bones/138/rotation = Quaternion(-9.24356e-08, -0.00334687, 8.69841e-08, 0.999994)
bones/139/position = Vector3(1.04774e-08, -2.70084e-08, -2.79397e-09)
bones/140/position = Vector3(-2.32846e-10, -3.49246e-10, -1.86265e-09)
bones/140/rotation = Quaternion(2.51457e-08, 1.36206e-08, 1.45521e-09, 1)
bones/141/rotation = Quaternion(1.7649e-06, -0.00574693, -1.73661e-07, 0.999984)
bones/142/rotation = Quaternion(-0.0431733, 0.00602337, 0.00197969, 0.999047)
bones/143/rotation = Quaternion(0.120843, 0.0142614, -0.0196429, 0.992375)
bones/143/scale = Vector3(1, 1, 1)
bones/144/rotation = Quaternion(0.0660118, 0.00834246, -0.0111363, 0.997722)
bones/144/scale = Vector3(1, 0.993487, 1)
bones/145/rotation = Quaternion(0.0226449, 0.00878252, -0.0102273, 0.999653)
bones/145/scale = Vector3(1, 0.993487, 1)
bones/147/rotation = Quaternion(-0.219003, 0.341639, -0.369336, 0.836009)
bones/148/rotation = Quaternion(0.81522, 7.43909e-05, 5.32059e-05, 0.579152)
bones/149/position = Vector3(-1.07735e-07, 0.494896, 3.85158e-05)
bones/149/rotation = Quaternion(0.107228, 0.83968, 0.051806, 0.529864)
bones/151/position = Vector3(1.36807e-08, 2.24339e-08, -1.37479e-08)
bones/151/rotation = Quaternion(-0.0732567, -7.13131e-05, 0.00495183, 0.997301)
bones/151/scale = Vector3(1, 1, 1)
bones/152/rotation = Quaternion(1.02442e-08, 6.74359e-06, -3.34531e-08, 1)
bones/153/rotation = Quaternion(0.00456637, 6.17241e-07, 0.000672086, 0.999989)
bones/153/scale = Vector3(1, 1, 1)
bones/154/position = Vector3(4.55475e-09, 3.55358e-08, 7.33417e-09)
bones/166/rotation = Quaternion(0.0388408, 0.0198681, 0.524688, 0.850176)
bones/166/scale = Vector3(1, 1, 1)
bones/171/rotation = Quaternion(4.65661e-10, 4.36557e-08, 5.31145e-09, 1)
bones/173/rotation = Quaternion(-3.21306e-08, 1.49012e-08, 1.10622e-06, 1)
bones/177/position = Vector3(-3.56486e-08, 0.164965, 1.28221e-05)
bones/177/rotation = Quaternion(2.35277e-05, 0.328324, 8.2827e-06, 0.944565)
bones/178/position = Vector3(0.0658124, -0.0797506, -0.0365105)
bones/179/position = Vector3(0.0658124, -0.0797506, -0.0365105)
bones/179/rotation = Quaternion(-0.0693663, 1.49464e-07, -0.122064, 0.990095)
bones/180/position = Vector3(-4.18369e-08, 0.32993, 2.56432e-05)
bones/180/rotation = Quaternion(1.95979e-05, 0.621253, 1.54677e-05, 0.78361)
bones/181/position = Vector3(0.0811552, -0.0461419, 0.0126689)
bones/182/position = Vector3(0.0811552, -0.0461419, 0.0126689)
bones/182/rotation = Quaternion(-0.0149116, 1.19449e-07, 0.0894791, 0.995877)
bones/183/position = Vector3(-6.65803e-08, 5.7527e-08, -4.60477e-08)
bones/183/rotation = Quaternion(-0.546081, -0.000982046, -0.133186, 0.827076)
bones/183/scale = Vector3(1, 1, 1)
bones/184/rotation = Quaternion(-0.00756344, -7.25003e-07, -4.72928e-05, 0.999971)
bones/184/scale = Vector3(1, 1, 1)
bones/185/position = Vector3(3.64525e-09, 4.06653e-08, 8.95234e-08)
bones/186/rotation = Quaternion(-4.92301e-08, -0.342104, -2.11345e-08, 0.939662)
bones/187/rotation = Quaternion(-0.0581099, -2.91537e-09, 0.12446, 0.990522)
bones/187/scale = Vector3(1, 1.18887, 1)
bones/188/rotation = Quaternion(0.0479844, 0.0270955, -0.104993, 0.992945)
bones/188/scale = Vector3(0.994011, 0.864314, 0.99845)
bones/189/rotation = Quaternion(0.118834, 0.0246305, -0.201641, 0.971912)
bones/189/scale = Vector3(0.997495, 0.906595, 0.99911)
bones/190/rotation = Quaternion(0.29514, 0.0749761, -0.300512, 0.90386)
bones/190/scale = Vector3(1.02235, 0.709612, 1.0299)
bones/191/rotation = Quaternion(0.32316, 0.116134, -0.10982, 0.932749)
bones/191/scale = Vector3(1.0094, 1.54739, 1.20044)
bones/192/rotation = Quaternion(0.173214, 0.179398, 0.0447759, 0.967372)
bones/192/scale = Vector3(0.996346, 1.17857, 0.985403)
bones/193/rotation = Quaternion(-0.0862938, 0.181149, -0.0279599, 0.979263)
bones/193/scale = Vector3(0.998068, 0.720967, 0.994873)
bones/194/position = Vector3(1.85901e-08, 0.176364, 1.38534e-08)
bones/194/rotation = Quaternion(-9.99147e-08, -0.264142, 3.42653e-08, 0.964484)
bones/195/position = Vector3(-0.0470743, 0.0253987, -0.0322391)
bones/196/position = Vector3(-0.0470743, 0.0253987, -0.0322391)
bones/196/rotation = Quaternion(-0.0494305, -3.47834e-08, 0.0703945, 0.996294)
bones/197/position = Vector3(1.38389e-08, 0.352729, -3.46918e-08)
bones/197/rotation = Quaternion(-1.47716e-07, -0.164722, -5.48462e-08, 0.98634)
bones/198/position = Vector3(-0.045366, 0.0281271, -0.0482924)
bones/199/position = Vector3(-0.045366, 0.028127, -0.0482924)
bones/199/rotation = Quaternion(0.0621149, -6.1895e-08, -0.0597352, 0.99628)
bones/200/rotation = Quaternion(-0.136841, -0.338861, 0.0118695, 0.930756)
bones/201/rotation = Quaternion(-0.219003, 0.341639, -0.369336, 0.836009)
bones/202/rotation = Quaternion(0.81522, 7.43909e-05, 5.32059e-05, 0.579152)
bones/203/rotation = Quaternion(0.501391, 0.805919, -0.0957336, 0.299897)
bones/203/scale = Vector3(1, 0.57981, 1)
bones/204/rotation = Quaternion(-0.503914, 0.495087, 0.503976, 0.496959)
bones/205/rotation = Quaternion(-0.219003, -0.341639, 0.369336, 0.836009)
bones/206/rotation = Quaternion(0.81522, -7.44085e-05, -5.31957e-05, 0.579152)
bones/207/position = Vector3(-1.15469e-08, 0.494896, 3.84836e-05)
bones/207/rotation = Quaternion(0.107228, -0.83968, -0.051806, 0.529864)
bones/209/position = Vector3(-1.33819e-08, -1.53429e-08, 2.13007e-08)
bones/209/rotation = Quaternion(-0.0732567, 7.13137e-05, -0.00495196, 0.997301)
bones/209/scale = Vector3(1, 1, 1)
bones/210/rotation = Quaternion(1.02442e-08, -6.74359e-06, 3.34531e-08, 1)
bones/211/rotation = Quaternion(0.00456637, -6.17241e-07, -0.000672086, 0.999989)
bones/211/scale = Vector3(1, 1, 1)
bones/212/position = Vector3(2.54804e-08, 1.29512e-08, 1.10595e-08)
bones/224/rotation = Quaternion(0.0388408, -0.0198681, -0.524688, 0.850176)
bones/224/scale = Vector3(1, 1, 1)
bones/229/rotation = Quaternion(4.65661e-10, -4.36557e-08, -5.31145e-09, 1)
bones/231/rotation = Quaternion(-3.21306e-08, -1.49012e-08, -1.10622e-06, 1)
bones/235/position = Vector3(2.81981e-08, 0.164965, 1.28519e-05)
bones/235/rotation = Quaternion(2.36268e-05, -0.328324, -8.07753e-06, 0.944565)
bones/236/position = Vector3(-0.0658125, -0.0797506, -0.0365105)
bones/237/position = Vector3(-0.0658125, -0.0797506, -0.0365105)
bones/237/rotation = Quaternion(-0.0693662, -1.45787e-07, 0.122063, 0.990095)
bones/238/position = Vector3(6.7914e-08, 0.32993, 2.5632e-05)
bones/238/rotation = Quaternion(1.99667e-05, -0.621253, -1.54502e-05, 0.78361)
bones/239/position = Vector3(-0.0811552, -0.0461419, 0.0126689)
bones/240/position = Vector3(-0.0811551, -0.0461419, 0.0126689)
bones/240/rotation = Quaternion(-0.0149117, -1.07845e-07, -0.0894789, 0.995877)
bones/241/position = Vector3(-7.9269e-09, 7.26937e-08, -1.27491e-08)
bones/241/rotation = Quaternion(-0.546081, 0.00098205, 0.133186, 0.827076)
bones/241/scale = Vector3(1, 1, 1)
bones/242/rotation = Quaternion(-0.00756344, 7.24974e-07, 4.72928e-05, 0.999971)
bones/242/scale = Vector3(1, 1, 1)
bones/243/position = Vector3(5.59594e-08, 2.55313e-08, 2.23517e-08)
bones/244/rotation = Quaternion(-2.42667e-08, 0.342104, 3.48847e-09, 0.939662)
bones/245/rotation = Quaternion(-0.0581097, 3.55013e-09, -0.12446, 0.990522)
bones/245/scale = Vector3(1, 1.18887, 1)
bones/246/rotation = Quaternion(0.0433332, 0.0270641, 0.102198, 0.993451)
bones/246/scale = Vector3(0.993998, 0.863624, 0.999039)
bones/247/rotation = Quaternion(0.0964902, -0.0245834, 0.221737, 0.970009)
bones/247/scale = Vector3(0.996973, 0.910928, 0.99941)
bones/248/rotation = Quaternion(0.264407, -0.0749736, 0.322956, 0.905631)
bones/248/scale = Vector3(1.02527, 0.709419, 1.02345)
bones/249/rotation = Quaternion(0.316387, -0.116425, 0.149686, 0.929483)
bones/249/scale = Vector3(1.02182, 1.5388, 1.19392)
bones/250/rotation = Quaternion(0.171979, -0.179688, -0.0231134, 0.968298)
bones/250/scale = Vector3(0.99805, 1.1723, 0.984874)
bones/251/rotation = Quaternion(-0.0961541, -0.232497, 0.00881001, 0.967792)
bones/251/scale = Vector3(0.998816, 0.728407, 0.993272)
bones/252/position = Vector3(1.26696e-07, 0.176364, -8.87085e-08)
bones/252/rotation = Quaternion(-2.3399e-09, 0.264142, -1.32725e-07, 0.964484)
bones/253/position = Vector3(0.0470742, 0.0253987, -0.0322391)
bones/254/position = Vector3(0.0470742, 0.0253988, -0.0322391)
bones/254/rotation = Quaternion(-0.0494307, 2.39894e-08, -0.0703947, 0.996294)
bones/255/position = Vector3(6.06669e-08, 0.352729, -3.10829e-08)
bones/255/rotation = Quaternion(4.47978e-08, 0.164722, -1.07918e-07, 0.98634)
bones/256/position = Vector3(0.0453662, 0.0281271, -0.0482923)
bones/257/position = Vector3(0.0453661, 0.028127, -0.0482923)
bones/257/rotation = Quaternion(0.0621146, 7.41652e-08, 0.0597349, 0.99628)
bones/258/rotation = Quaternion(-0.136841, 0.338862, -0.0118696, 0.930756)
bones/259/rotation = Quaternion(-0.219003, -0.341639, 0.369336, 0.836009)
bones/260/rotation = Quaternion(0.81522, -7.44085e-05, -5.31957e-05, 0.579152)
bones/261/rotation = Quaternion(0.501391, -0.805919, 0.0957336, 0.299897)
bones/261/scale = Vector3(1, 0.57981, 1)
bones/262/position = Vector3(-1.21964e-08, 0.0616701, -0.139511)
bones/262/rotation = Quaternion(-0.695299, 3.14162e-08, 3.03925e-08, 0.71872)
bones/263/position = Vector3(5.10703e-15, 0.230976, -1.16472e-08)
bones/263/rotation = Quaternion(-0.0311281, 1.19152e-07, -3.71076e-09, 0.999515)
bones/264/position = Vector3(1.65165e-15, -6.35167e-08, -6.64239e-09)
bones/264/rotation = Quaternion(0.0145709, -1.19197e-07, 1.73699e-09, 0.999894)
bones/266/position = Vector3(1.2315e-16, 0.262514, -1.86264e-09)
bones/266/rotation = Quaternion(9.31323e-10, -5.40167e-08, 6.35104e-15, 1)
bones/268/position = Vector3(7.72315e-15, 2.5495e-08, -7.45058e-09)
bones/268/rotation = Quaternion(-3.72529e-08, -1.00583e-07, 7.56064e-15, 1)
bones/269/rotation = Quaternion(7.45058e-09, 1.00583e-07, -3.46469e-16, 1)
bones/270/rotation = Quaternion(-0.0311281, 1.19152e-07, -3.71076e-09, 0.999515)
bones/272/position = Vector3(-1.21964e-08, 0.0616701, -0.139511)
bones/272/rotation = Quaternion(-0.695299, 3.14162e-08, 3.03925e-08, 0.71872)
bones/273/position = Vector3(5.10703e-15, 0.230976, -1.16472e-08)
bones/273/rotation = Quaternion(-0.0311281, 1.19152e-07, -3.71076e-09, 0.999515)
bones/277/rotation = Quaternion(2.59734e-07, -8.74228e-08, 8.2323e-15, 1)
bones/277/scale = Vector3(1, 1, 1)
bones/278/rotation = Quaternion(-3.89601e-07, -7.10543e-15, 1.75954e-14, 1)
bones/279/rotation = Quaternion(-1.29867e-07, -3.55271e-15, 1.13533e-14, 1)
bones/281/rotation = Quaternion(8.74228e-08, 8.65779e-08, 1, 1.69407e-21)
bones/283/rotation = Quaternion(0.995472, -1.03344e-08, -0.0184201, -0.0932516)
bones/283/scale = Vector3(1, 1, 0.999995)
bones/284/rotation = Quaternion(-0.00444672, 0.995644, -0.0931348, -0.000255377)
bones/284/scale = Vector3(1, 1, 1)
bones/285/rotation = Quaternion(-0.0732337, 0.000863981, 0.0118871, 0.997244)
bones/285/scale = Vector3(1, 1, 1)
bones/288/rotation = Quaternion(-0.0932358, -3.07698e-08, 0.00172522, 0.995643)
bones/289/rotation = Quaternion(3.25963e-08, 2.17263e-15, 1, 1.39045e-15)
bones/290/rotation = Quaternion(3.1665e-08, -1.70334e-15, 1, 4.4403e-16)
bones/291/position = Vector3(0.000173845, 0.290832, -6.4288e-06)
bones/291/rotation = Quaternion(-1.03274e-07, -0.0932359, 0.995643, 0.00172523)
bones/291/scale = Vector3(1, 1, 1)
bones/292/rotation = Quaternion(-1.39728e-07, 4.10728e-09, 1, -1.16415e-10)
bones/293/rotation = Quaternion(0.995472, 1.03344e-08, 0.0184201, -0.0932516)
bones/293/scale = Vector3(1, 1, 0.999995)
bones/294/rotation = Quaternion(-0.0931348, -0.000255354, -0.00444673, 0.995644)
bones/294/scale = Vector3(1, 1, 1)
bones/295/rotation = Quaternion(-0.0732337, -0.000863981, -0.0118871, 0.997244)
bones/295/scale = Vector3(1, 1, 1)
bones/298/rotation = Quaternion(-0.0932358, 3.07698e-08, -0.00172522, 0.995643)
bones/299/rotation = Quaternion(-9.31324e-10, 1.7229e-15, 1, -1.83186e-15)
bones/300/rotation = Quaternion(1.07553e-15, -1.68127e-15, 1, -8.88167e-16)
bones/301/position = Vector3(-0.000173845, 0.290832, -6.4288e-06)
bones/301/rotation = Quaternion(1.03274e-07, -0.0932359, 0.995643, -0.00172523)
bones/301/scale = Vector3(1, 1, 1)
bones/302/rotation = Quaternion(1.39728e-07, 4.10728e-09, 1, 1.16415e-10)
bones/303/position = Vector3(0.52051, -0.0494387, 0.346797)
bones/303/rotation = Quaternion(0.924457, -0.0918536, -0.254553, -0.268597)
bones/306/position = Vector3(-0.52051, -0.0494387, 0.346797)
bones/306/rotation = Quaternion(0.924457, 0.0918536, 0.254553, -0.268597)
[node name="Abe_GEO_Lo" parent="Abe_Lo/CLOUDRIG_Abe/Skeleton3D" index="0"]
material_override = ExtResource("3_l1nqp")
material_overlay = ExtResource("4_qxawg")
[node name="AnimationTree" type="AnimationTree" parent="Abe_Lo"]
tree_root = SubResource("AnimationNodeBlendTree_seljc")
anim_player = NodePath("../AnimationPlayer")
parameters/Run/blend_amount = 0.0
parameters/Walk/blend_amount = 0.0
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.72, 0)
shape = SubResource("CapsuleShape3D_8bcc1")
[node name="GPUParticles3D" parent="." instance=ExtResource("5_dtwkc")]
amount_ratio = 0.0
[editable path="Abe_Lo"]

@ -0,0 +1,217 @@
[gd_scene load_steps=13 format=3 uid="uid://ca3n1cme1tpmk"]
[ext_resource type="PackedScene" uid="uid://c11r5uc4ird3x" path="res://Scenes/Nodes/NODE_Camera.tscn" id="1_0afry"]
[ext_resource type="PackedScene" uid="uid://b8gjuyilsgnws" path="res://3d/models/LVL_Dojo.blend" id="1_ed8bi"]
[ext_resource type="PackedScene" uid="uid://dkt4b5x12c0o8" path="res://Scenes/Characters/CHAR_Abe.tscn" id="4_top0t"]
[ext_resource type="Shader" uid="uid://c1r07k4gw7q3w" path="res://Shaders/CHAR_SHD_Abe.tres" id="5_jvw1q"]
[ext_resource type="Shader" uid="uid://dewwedodqpjub" path="res://Shaders/CHAR_SHD_AbeFace.tres" id="6_5y5n7"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_hj74p"]
[sub_resource type="Sky" id="Sky_4l6vg"]
sky_material = SubResource("ProceduralSkyMaterial_hj74p")
[sub_resource type="Environment" id="Environment_6s8v0"]
background_mode = 2
sky = SubResource("Sky_4l6vg")
ambient_light_source = 3
reflected_light_source = 2
ssr_enabled = true
ssao_enabled = true
ssao_radius = 1.43
ssao_intensity = 37.75
ssao_power = 0.351196
ssao_detail = 5.0
ssao_horizon = 0.0
ssao_light_affect = 0.31
ssao_ao_channel_affect = 0.77
ssil_enabled = true
ssil_radius = 8.26
ssil_intensity = 3.58
sdfgi_enabled = true
glow_enabled = true
glow_strength = 1.25
volumetric_fog_density = 0.1
volumetric_fog_length = 5.0
adjustment_contrast = 1.1
[sub_resource type="ShaderMaterial" id="ShaderMaterial_o5d2o"]
render_priority = 0
shader = ExtResource("5_jvw1q")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_jet42"]
render_priority = 0
shader = ExtResource("6_5y5n7")
[sub_resource type="CameraAttributesPhysical" id="CameraAttributesPhysical_penuw"]
frustum_focal_length = 75.0
[sub_resource type="Curve3D" id="Curve3D_dtff4"]
bake_interval = 2.0
_data = {
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, -46.5686, 10.868, 21.0979, -16.8377, 0.609722, 1.98655, 16.8377, -0.609722, -1.98655, -16.2611, 6.3926, 13.9617, 0, 0, 0, 0, 0, 0, 4.74607, 5.75686, 11.9171),
"tilts": PackedFloat32Array(0, 0, 0)
}
point_count = 3
[node name="LVL_Dojo" type="Node3D"]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_6s8v0")
[node name="LVL_Dojo" parent="." instance=ExtResource("1_ed8bi")]
[node name="Abe" parent="." instance=ExtResource("4_top0t")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -24.8903, 0, -11.9762)
[node name="Skeleton3D" parent="Abe/Abe_Lo/CLOUDRIG_Abe" index="0"]
bones/0/position = Vector3(-1.28258e-15, 0.842768, -0.339177)
bones/1/position = Vector3(1.90574e-15, 0.842767, -0.109693)
bones/2/position = Vector3(-9.48729e-15, 0.842767, 0.119791)
bones/5/rotation = Quaternion(-0.00283197, 4.1306e-12, 0.00124316, 0.999995)
bones/6/rotation = Quaternion(-6.46874e-08, 0.00283197, 0.999995, -0.00124317)
bones/6/scale = Vector3(1, 0.944865, 1)
bones/7/position = Vector3(0.113971, 0.455101, 0.618781)
bones/7/rotation = Quaternion(0.688687, 0.00630833, 0.724502, -0.0277132)
bones/9/position = Vector3(0.139509, 0.768648, -0.0329433)
bones/15/rotation = Quaternion(-0.00283196, 1.36607e-11, -0.00124318, 0.999995)
bones/16/rotation = Quaternion(6.29445e-08, 0.00283197, 0.999995, 0.00124317)
bones/16/scale = Vector3(1, 0.944865, 1)
bones/17/position = Vector3(-0.113971, 0.455101, 0.61878)
bones/17/rotation = Quaternion(0.724502, -0.0277132, 0.688687, 0.00630838)
bones/19/position = Vector3(-0.139509, 0.768648, -0.0329433)
bones/25/rotation = Quaternion(-0.167726, -2.26867e-09, 0.130688, 0.977133)
bones/26/rotation = Quaternion(-7.62499e-09, 0.167727, 0.977133, -0.130688)
bones/26/scale = Vector3(1, 0.751029, 1)
bones/27/position = Vector3(0.281916, 0.856491, -0.0318539)
bones/31/position = Vector3(0.50427, 0.241987, 0.244877)
bones/34/position = Vector3(0.438613, 0.341106, 0.148042)
bones/39/rotation = Quaternion(-0.167726, 1.6109e-09, -0.130688, 0.977133)
bones/40/rotation = Quaternion(-1.3784e-07, 0.167726, 0.977133, 0.130688)
bones/40/scale = Vector3(1, 0.751029, 1)
bones/41/position = Vector3(-0.281916, 0.856491, -0.0318539)
bones/45/position = Vector3(-0.50427, 0.241987, 0.244877)
bones/48/position = Vector3(-0.438613, 0.341106, 0.148042)
bones/53/position = Vector3(2.97757e-15, 0.339177, 0.842768)
bones/63/rotation = Quaternion(-0.0607229, -0.00642314, -0.00273675, 0.99813)
bones/64/rotation = Quaternion(0.152823, -0.0136197, 0.0200932, 0.987955)
bones/65/rotation = Quaternion(-0.690424, -0.0420233, 0.0214913, 0.721863)
bones/71/rotation = Quaternion(0.270098, 0.0611336, -0.00696073, 0.960865)
bones/77/rotation = Quaternion(6.32201e-07, 0.00990275, 2.02172e-07, 0.999951)
bones/80/rotation = Quaternion(-0.0695654, 0.0163957, -0.00935188, 0.997399)
bones/84/rotation = Quaternion(1.44402e-06, 0.0051612, 9.9365e-08, 0.999987)
bones/88/rotation = Quaternion(0.152582, -0.0136992, 0.0218949, 0.987953)
bones/91/rotation = Quaternion(-0.690564, -0.0449856, 0.0164135, 0.721684)
bones/93/rotation = Quaternion(-1.84482e-08, 0.00450073, 6.36633e-08, 0.99999)
bones/96/rotation = Quaternion(2.95234e-07, 0.00404007, 5.54266e-08, 0.999992)
bones/99/rotation = Quaternion(1.4855e-06, 0.00516121, 1.38683e-07, 0.999987)
bones/100/rotation = Quaternion(-0.0607229, -0.00642314, -0.00273675, 0.99813)
bones/101/rotation = Quaternion(0.152823, -0.0136197, 0.0200932, 0.987955)
bones/102/rotation = Quaternion(0.0836251, -0.00815776, 0.0114506, 0.996398)
bones/102/scale = Vector3(1, 0.988152, 1)
bones/103/scale = Vector3(1, 0.988152, 1)
bones/105/rotation = Quaternion(-0.0607229, 0.0064231, 0.00273666, 0.99813)
bones/106/rotation = Quaternion(0.152823, 0.0136197, -0.0200932, 0.987955)
bones/107/rotation = Quaternion(-0.690424, 0.0420233, -0.0214912, 0.721863)
bones/113/rotation = Quaternion(0.270098, -0.0611336, 0.00696069, 0.960865)
bones/119/rotation = Quaternion(5.90219e-07, -0.00990275, -1.20435e-07, 0.999951)
bones/122/rotation = Quaternion(-0.0695654, -0.0163958, 0.00935187, 0.997399)
bones/126/rotation = Quaternion(1.38898e-06, -0.00516117, -9.51478e-08, 0.999987)
bones/130/rotation = Quaternion(0.152581, 0.0136992, -0.021895, 0.987953)
bones/133/rotation = Quaternion(-0.690564, 0.0449856, -0.0164135, 0.721684)
bones/135/rotation = Quaternion(-2.84722e-08, -0.00450073, 8.02392e-08, 0.99999)
bones/138/rotation = Quaternion(-6.81693e-08, -0.00404008, 6.64109e-08, 0.999992)
bones/141/rotation = Quaternion(1.40981e-06, -0.00516118, -1.35581e-07, 0.999987)
bones/142/rotation = Quaternion(-0.0607229, 0.0064231, 0.00273666, 0.99813)
bones/143/rotation = Quaternion(0.152823, 0.0136197, -0.0200932, 0.987955)
bones/144/rotation = Quaternion(0.0836251, 0.00815776, -0.0114506, 0.996398)
bones/144/scale = Vector3(1, 0.988152, 1)
bones/145/scale = Vector3(1, 0.988152, 1)
bones/147/rotation = Quaternion(-0.221647, 0.339515, -0.363982, 0.838522)
bones/148/rotation = Quaternion(0.814934, 7.43642e-05, 5.32438e-05, 0.579554)
bones/149/rotation = Quaternion(0.111233, 0.836302, 0.0532699, 0.534218)
bones/151/rotation = Quaternion(-0.073814, -6.38316e-05, 0.00323307, 0.997267)
bones/177/rotation = Quaternion(2.33455e-05, 0.326488, 8.18146e-06, 0.945201)
bones/179/rotation = Quaternion(-0.0692451, 1.4876e-07, -0.122133, 0.990095)
bones/180/rotation = Quaternion(1.94093e-05, 0.618271, 1.52784e-05, 0.785965)
bones/182/rotation = Quaternion(-0.0148716, 1.19001e-07, 0.0894861, 0.995877)
bones/183/rotation = Quaternion(-0.54574, -0.000989999, -0.134237, 0.827132)
bones/186/rotation = Quaternion(-6.03214e-08, -0.339379, -3.20066e-08, 0.94065)
bones/187/rotation = Quaternion(-0.0577629, 4.29432e-09, 0.124622, 0.990522)
bones/188/rotation = Quaternion(0.0487956, 0.0270956, -0.104618, 0.992945)
bones/189/rotation = Quaternion(0.119618, 0.0246304, -0.201232, 0.971901)
bones/190/rotation = Quaternion(0.296053, 0.074978, -0.299789, 0.903802)
bones/190/scale = Vector3(1.02228, 0.709667, 1.02989)
bones/191/rotation = Quaternion(0.323383, 0.116111, -0.108216, 0.932862)
bones/191/scale = Vector3(1.00927, 1.54748, 1.20052)
bones/192/rotation = Quaternion(0.173203, 0.179363, 0.0473622, 0.967257)
bones/192/scale = Vector3(0.996109, 1.1795, 0.985498)
bones/193/rotation = Quaternion(-0.0818352, 0.181082, -0.0332217, 0.979494)
bones/193/scale = Vector3(0.997718, 0.719073, 0.995578)
bones/194/rotation = Quaternion(-1.0994e-07, -0.261964, 4.11698e-08, 0.965078)
bones/196/rotation = Quaternion(-0.0491421, -2.59942e-08, 0.0705966, 0.996294)
bones/197/rotation = Quaternion(-1.75578e-07, -0.163309, -2.94126e-08, 0.986575)
bones/199/rotation = Quaternion(0.0623591, -5.43522e-08, -0.0594805, 0.99628)
bones/200/rotation = Quaternion(-0.136749, -0.336162, 0.0128837, 0.931734)
bones/201/rotation = Quaternion(-0.221647, 0.339515, -0.363982, 0.838522)
bones/202/rotation = Quaternion(0.814934, 7.43642e-05, 5.32438e-05, 0.579554)
bones/203/rotation = Quaternion(0.495299, 0.807857, -0.0961371, 0.304637)
bones/203/scale = Vector3(1, 0.580216, 1)
bones/205/rotation = Quaternion(-0.221647, -0.339515, 0.363982, 0.838522)
bones/206/rotation = Quaternion(0.814934, -7.43829e-05, -5.32325e-05, 0.579554)
bones/207/rotation = Quaternion(0.111233, -0.836302, -0.0532699, 0.534218)
bones/209/rotation = Quaternion(-0.0738139, 6.38378e-05, -0.00323315, 0.997267)
bones/235/rotation = Quaternion(2.34042e-05, -0.326488, -7.92195e-06, 0.945201)
bones/237/rotation = Quaternion(-0.069245, -1.45863e-07, 0.122132, 0.990095)
bones/238/rotation = Quaternion(1.96737e-05, -0.618271, -1.5251e-05, 0.785965)
bones/240/rotation = Quaternion(-0.0148717, -1.07838e-07, -0.0894859, 0.995877)
bones/241/rotation = Quaternion(-0.54574, 0.000990001, 0.134237, 0.827132)
bones/244/rotation = Quaternion(-1.95898e-08, 0.339379, 1.78843e-09, 0.94065)
bones/245/rotation = Quaternion(-0.0577627, -2.23176e-09, -0.124622, 0.990521)
bones/246/rotation = Quaternion(0.0441633, 0.0270641, 0.101772, 0.993458)
bones/247/rotation = Quaternion(0.0973164, -0.0245838, 0.221388, 0.970007)
bones/248/rotation = Quaternion(0.265409, -0.0749767, 0.322363, 0.905549)
bones/248/scale = Vector3(1.0252, 0.709469, 1.02345)
bones/249/rotation = Quaternion(0.316723, -0.116423, 0.148175, 0.929611)
bones/249/scale = Vector3(1.02125, 1.53912, 1.19427)
bones/250/rotation = Quaternion(0.172219, -0.179654, -0.0256488, 0.968198)
bones/250/scale = Vector3(0.997876, 1.17317, 0.984926)
bones/251/rotation = Quaternion(-0.0920978, -0.232406, 0.0143437, 0.968143)
bones/251/scale = Vector3(0.998542, 0.72628, 0.994076)
bones/252/rotation = Quaternion(1.70448e-08, 0.261964, -1.2244e-07, 0.965078)
bones/254/rotation = Quaternion(-0.0491422, 8.41024e-09, -0.0705967, 0.996294)
bones/255/rotation = Quaternion(8.96787e-08, 0.163309, -8.49257e-08, 0.986575)
bones/257/rotation = Quaternion(0.0623588, 6.93806e-08, 0.0594803, 0.99628)
bones/258/rotation = Quaternion(-0.136749, 0.336162, -0.0128838, 0.931734)
bones/259/rotation = Quaternion(-0.221647, -0.339515, 0.363982, 0.838522)
bones/260/rotation = Quaternion(0.814934, -7.43829e-05, -5.32325e-05, 0.579554)
bones/261/rotation = Quaternion(0.495299, -0.807857, 0.0961371, 0.304637)
bones/261/scale = Vector3(1, 0.580216, 1)
bones/274/position = Vector3(1.9984e-15, 0.22424, 0.834584)
bones/303/position = Vector3(0.589192, -0.0494387, 0.346797)
bones/306/position = Vector3(-0.589192, -0.0494387, 0.346797)
[node name="Abe_GEO_Lo" parent="Abe/Abe_Lo/CLOUDRIG_Abe/Skeleton3D" index="0"]
material_override = SubResource("ShaderMaterial_o5d2o")
material_overlay = SubResource("ShaderMaterial_jet42")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.78824, 0.103786, 0.606553, -0.481108, 0.718508, 0.502277, -0.383683, -0.687732, 0.616289, 0.473871, 5.27602, -0.424684)
shadow_enabled = true
shadow_bias = 0.01
shadow_blur = 8.0
directional_shadow_blend_splits = true
[node name="Camera3D" parent="." node_paths=PackedStringArray("rail", "target") instance=ExtResource("1_0afry")]
transform = Transform3D(1, 0, 0, 0, 0.996195, 0.0871557, 0, -0.0871557, 0.996195, -29.5075, 5.39118, 15.9966)
attributes = SubResource("CameraAttributesPhysical_penuw")
current = true
rail = NodePath("../Path3D")
target = NodePath("../Abe")
[node name="Path3D" type="Path3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19.9759, 0, 0)
curve = SubResource("Curve3D_dtff4")
[editable path="Abe"]
[editable path="Abe/Abe_Lo"]

@ -0,0 +1,405 @@
[gd_scene load_steps=13 format=3 uid="uid://5qbof11l1jsf"]
[ext_resource type="PackedScene" uid="uid://b1seql40y0fmd" path="res://3d/models/LVL_Promenade.blend" id="1_adl68"]
[ext_resource type="PackedScene" uid="uid://dkt4b5x12c0o8" path="res://Scenes/Characters/CHAR_Abe.tscn" id="2_3l20a"]
[ext_resource type="Shader" uid="uid://c1r07k4gw7q3w" path="res://Shaders/CHAR_SHD_Abe.tres" id="3_wumdf"]
[ext_resource type="Shader" uid="uid://dewwedodqpjub" path="res://Shaders/CHAR_SHD_AbeFace.tres" id="4_q1v5t"]
[ext_resource type="PackedScene" uid="uid://c11r5uc4ird3x" path="res://Scenes/Nodes/NODE_Camera.tscn" id="5_gxkek"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_hj74p"]
[sub_resource type="Sky" id="Sky_4l6vg"]
sky_material = SubResource("ProceduralSkyMaterial_hj74p")
[sub_resource type="Environment" id="Environment_6s8v0"]
background_mode = 2
sky = SubResource("Sky_4l6vg")
ambient_light_source = 3
reflected_light_source = 2
ssr_enabled = true
ssao_enabled = true
ssao_radius = 1.43
ssao_intensity = 37.75
ssao_power = 0.351196
ssao_detail = 5.0
ssao_horizon = 0.0
ssao_light_affect = 0.31
ssao_ao_channel_affect = 0.77
ssil_enabled = true
ssil_radius = 8.26
ssil_intensity = 3.58
sdfgi_enabled = true
glow_enabled = true
glow_strength = 1.25
volumetric_fog_density = 0.1
volumetric_fog_length = 5.0
adjustment_contrast = 1.1
[sub_resource type="ShaderMaterial" id="ShaderMaterial_o5d2o"]
render_priority = 0
shader = ExtResource("3_wumdf")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_jet42"]
render_priority = 0
shader = ExtResource("4_q1v5t")
[sub_resource type="CameraAttributesPhysical" id="CameraAttributesPhysical_penuw"]
frustum_focal_length = 75.0
[sub_resource type="Curve3D" id="Curve3D_0vf4k"]
_data = {
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, -7.46449, 3.07805, 43.7011, -15.9972, 0, 0.326469, 15.9972, 0, -0.326469, 70.9184, 3.07805, 43.0481, -15.2806, 0, -2.1919, 15.2806, 0, 2.1919, 104.134, 3.078, 30.8442, -8.73353, 0, -1.5095, 8.73353, 0, 1.5095, 133.599, 3.078, 35.0138, -14.6433, 7.51019e-05, -0.727512, 14.6433, -7.51019e-05, 0.727512, 156.619, 3.078, 40.935, 0, 0, 0, 0, 0, 0, 209.966, 3.07805, 44.354),
"tilts": PackedFloat32Array(0, 0, 0, 0, 0, 0)
}
point_count = 6
[node name="LVL_Dojo" type="Node3D"]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_6s8v0")
[node name="LVL_Promenade" parent="." instance=ExtResource("1_adl68")]
[node name="Abe" parent="." instance=ExtResource("2_3l20a")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.91346, 0, -11.9762)
[node name="Skeleton3D" parent="Abe/Abe_Lo/CLOUDRIG_Abe" index="0"]
bones/0/position = Vector3(-9.56341e-15, 0.834584, -0.338982)
bones/0/rotation = Quaternion(0.707107, -5.33851e-08, -5.33851e-08, 0.707107)
bones/1/position = Vector3(3.55271e-15, 0.834584, -0.109498)
bones/1/rotation = Quaternion(0.707107, -5.33851e-08, -5.33851e-08, 0.707107)
bones/2/position = Vector3(-7.75607e-15, 0.834584, 0.119985)
bones/2/rotation = Quaternion(0.707107, -5.33851e-08, -5.33851e-08, 0.707107)
bones/3/position = Vector3(0.108782, 0.452581, 0.687795)
bones/3/rotation = Quaternion(0.708387, -0.0281323, 0.0282804, 0.704696)
bones/4/position = Vector3(1.15857e-08, -1.0361e-07, -2.15004e-08)
bones/5/rotation = Quaternion(-0.00514548, 5.94625e-11, 0.00179705, 0.999985)
bones/6/rotation = Quaternion(-6.46742e-08, 0.00514552, 0.999985, -0.00179706)
bones/6/scale = Vector3(1, 0.911684, 1)
bones/7/position = Vector3(0.111407, 0.454822, 0.642132)
bones/7/rotation = Quaternion(0.688006, 0.00813628, 0.725187, -0.0261774)
bones/7/scale = Vector3(1, 1, 1)
bones/8/position = Vector3(0.183301, 0.0320629, 0.168592)
bones/9/position = Vector3(0.139509, 0.760465, -0.0327484)
bones/9/rotation = Quaternion(0.998093, 0.0408963, 0.0408964, 0.0215775)
bones/13/rotation = Quaternion(0.708387, 0.0281323, -0.0282804, 0.704696)
bones/14/position = Vector3(-1.15858e-08, -1.06171e-07, -2.14932e-08)
bones/15/rotation = Quaternion(-0.0051455, -3.72211e-12, -0.00179705, 0.999985)
bones/16/rotation = Quaternion(6.29178e-08, 0.00514552, 0.999985, 0.00179705)
bones/16/scale = Vector3(1, 0.911684, 1)
bones/17/position = Vector3(-0.111407, 0.454822, 0.642132)
bones/17/rotation = Quaternion(0.725187, -0.0261774, 0.688006, 0.00813633)
bones/17/scale = Vector3(1, 1, 1)
bones/18/position = Vector3(-0.183301, 0.0320629, 0.168592)
bones/19/position = Vector3(-0.139509, 0.760465, -0.0327484)
bones/19/rotation = Quaternion(0.998093, -0.0408963, -0.0408964, 0.0215775)
bones/23/rotation = Quaternion(-0.000598773, 0.707794, -0.706419, -0.000599891)
bones/24/position = Vector3(4.38533e-08, -1.0943e-08, 8.31342e-08)
bones/25/rotation = Quaternion(-0.167783, -9.52683e-10, 0.127235, 0.977579)
bones/26/rotation = Quaternion(-7.62146e-09, 0.167783, 0.977579, -0.127235)
bones/26/scale = Vector3(1, 0.749534, 1)
bones/27/position = Vector3(0.281916, 0.848307, -0.0316591)
bones/27/rotation = Quaternion(-0.00491779, 0.00628552, -0.706444, 0.707724)
bones/31/position = Vector3(0.517764, 0.241987, 0.244877)
bones/31/rotation = Quaternion(0.843504, -0.245402, -0.115874, 0.463522)
bones/34/position = Vector3(0.452107, 0.341106, 0.148042)
bones/34/rotation = Quaternion(0.609001, -0.646138, 0.171796, 0.426743)
bones/38/position = Vector3(-4.38533e-08, -1.07102e-08, 8.31342e-08)
bones/39/rotation = Quaternion(-0.167783, 9.52683e-10, -0.127235, 0.977579)
bones/40/rotation = Quaternion(-1.39092e-07, 0.167783, 0.977579, 0.127235)
bones/40/scale = Vector3(1, 0.749534, 1)
bones/41/position = Vector3(-0.281916, 0.848307, -0.0316591)
bones/41/rotation = Quaternion(-0.00491779, -0.00628552, 0.706444, 0.707724)
bones/45/position = Vector3(-0.517764, 0.241987, 0.244877)
bones/45/rotation = Quaternion(0.843504, 0.245402, 0.115874, 0.463522)
bones/48/position = Vector3(-0.452107, 0.341106, 0.148042)
bones/48/rotation = Quaternion(0.609001, 0.646138, -0.171796, 0.426743)
bones/53/position = Vector3(4.4254e-15, 0.338982, 0.834584)
bones/53/rotation = Quaternion(1, -8.60132e-15, -7.54979e-08, -3.46312e-07)
bones/54/position = Vector3(1.57101e-14, 0.229484, -4.30948e-08)
bones/55/position = Vector3(-1.28961e-14, 0.229484, -1.08855e-07)
bones/55/rotation = Quaternion(-3.46312e-07, -7.10543e-15, 1.75445e-14, 1)
bones/63/rotation = Quaternion(-0.0974315, -0.00725811, -0.00432622, 0.995206)
bones/64/rotation = Quaternion(0.219286, -0.0122297, 0.0209682, 0.975359)
bones/65/position = Vector3(-3.52642e-08, 0.386825, -1.78805e-08)
bones/65/rotation = Quaternion(-0.712328, -0.0418331, 0.0227654, 0.700229)
bones/66/rotation = Quaternion(-0.0932356, -7.75849e-08, 0.00172522, 0.995643)
bones/68/position = Vector3(1.36182e-08, 0.143821, -1.3902e-09)
bones/69/rotation = Quaternion(0.0549193, -2.74866e-05, -0.00101776, 0.99849)
bones/70/position = Vector3(1.36182e-08, 0.143821, -1.3902e-09)
bones/70/rotation = Quaternion(7.4541e-09, -0.000163676, -4.41826e-11, 1)
bones/71/rotation = Quaternion(0.2786, 0.0612847, -0.00773649, 0.958419)
bones/74/position = Vector3(-2.60188e-08, 0.128942, -1.53668e-08)
bones/74/rotation = Quaternion(-7.39819e-08, 0.0131227, 7.91839e-09, 0.999914)
bones/75/position = Vector3(-3.25963e-09, -4.61587e-08, 9.31323e-10)
bones/76/position = Vector3(-6.05361e-09, -1.19326e-08, -9.31322e-10)
bones/76/rotation = Quaternion(2.82307e-08, 3.87082e-09, 1.89466e-08, 1)
bones/77/position = Vector3(-3.25963e-09, 0.257883, -7.45058e-09)
bones/77/rotation = Quaternion(2.03707e-06, 0.00932844, 4.90749e-07, 0.999957)
bones/78/position = Vector3(3.6438e-08, 6.0536e-09, -1.86265e-09)
bones/79/position = Vector3(3.31784e-08, 1.47848e-08, -9.31323e-10)
bones/79/rotation = Quaternion(7.70669e-08, -8.64382e-09, -4.5431e-08, 1)
bones/80/position = Vector3(-3.69553e-10, 1.48274e-08, -3.17964e-09)
bones/80/rotation = Quaternion(-0.100088, 0.016598, -0.00998912, 0.99479)
bones/82/position = Vector3(1.52717e-08, -3.24731e-08, -5.63805e-09)
bones/83/position = Vector3(-3.84171e-09, 2.49001e-08, -6.66134e-16)
bones/84/rotation = Quaternion(1.98964e-06, 0.0060611, 1.39954e-07, 0.999982)
bones/85/rotation = Quaternion(-1.14052e-06, -6.17004e-09, -6.2806e-08, 1)
bones/85/scale = Vector3(1, 1, 1)
bones/86/rotation = Quaternion(8.14906e-10, 2.85218e-09, -2.73576e-09, 1)
bones/86/scale = Vector3(1, 0.999999, 1)
bones/87/rotation = Quaternion(-2.04891e-08, -1.47265e-08, -1.04134e-07, 1)
bones/88/rotation = Quaternion(0.218998, -0.0123537, 0.0238178, 0.975356)
bones/88/scale = Vector3(1, 1, 1)
bones/89/rotation = Quaternion(7.7649e-08, -5.07862e-08, -1.07335e-07, 1)
bones/90/rotation = Quaternion(-5.47734e-08, 5.60831e-08, 1.09401e-07, 1)
bones/91/rotation = Quaternion(-0.712511, -0.0443565, 0.0161623, 0.700071)
bones/91/scale = Vector3(1, 1, 1)
bones/92/rotation = Quaternion(-0.0932345, 4.34894e-06, 0.0017757, 0.995643)
bones/92/scale = Vector3(1, 0.999999, 1)
bones/93/position = Vector3(-2.11876e-08, 0.107384, 2.79397e-09)
bones/93/rotation = Quaternion(1.74246e-10, 0.00542307, 3.78699e-08, 0.999985)
bones/94/position = Vector3(2.00234e-08, -2.4098e-08, -1.86264e-09)
bones/95/position = Vector3(2.67755e-08, -5.59958e-08, -9.31323e-10)
bones/95/rotation = Quaternion(-5.12228e-09, -3.28873e-08, 1.04774e-08, 1)
bones/96/position = Vector3(-2.44472e-09, 0.214768, 4.65661e-09)
bones/96/rotation = Quaternion(1.16006e-07, 0.0049668, 1.56383e-08, 0.999988)
bones/97/position = Vector3(-1.01281e-08, -4.34229e-08, -9.31322e-10)
bones/98/position = Vector3(4.65675e-10, -1.52504e-08, -6.66134e-16)
bones/98/rotation = Quaternion(-6.89178e-08, -1.68802e-08, -2.25846e-08, 1)
bones/99/rotation = Quaternion(2.06768e-06, 0.00606111, 1.79111e-07, 0.999982)
bones/100/rotation = Quaternion(-0.0974315, -0.00725811, -0.00432622, 0.995206)
bones/101/rotation = Quaternion(0.219286, -0.0122297, 0.0209682, 0.975359)
bones/102/rotation = Quaternion(0.120448, -0.0077623, 0.0120914, 0.992616)
bones/102/scale = Vector3(1, 0.976621, 1)
bones/103/rotation = Quaternion(0.0226449, -0.00878254, 0.0102272, 0.999653)
bones/103/scale = Vector3(1, 0.976621, 1)
bones/105/rotation = Quaternion(-0.097431, 0.00725804, 0.00432611, 0.995206)
bones/106/rotation = Quaternion(0.219285, 0.0122297, -0.0209682, 0.975359)
bones/107/position = Vector3(-3.67291e-09, 0.386825, -7.10854e-09)
bones/107/rotation = Quaternion(-0.712328, 0.0418331, -0.0227654, 0.700229)
bones/108/rotation = Quaternion(-0.0932356, 7.749e-08, -0.00172522, 0.995643)
bones/111/rotation = Quaternion(0.0549193, 2.74856e-05, 0.00101776, 0.99849)
bones/113/rotation = Quaternion(0.2786, -0.0612847, 0.00773651, 0.958419)
bones/116/position = Vector3(8.32371e-09, 0.128941, 9.31326e-10)
bones/116/rotation = Quaternion(-2.97018e-08, -0.0131227, 3.48104e-08, 0.999914)
bones/117/position = Vector3(-1.86264e-09, -3.89991e-08, 3.72529e-09)
bones/118/position = Vector3(-1.16412e-09, -2.73576e-09, 5.58794e-09)
bones/118/rotation = Quaternion(5.52973e-09, 8.99308e-09, -5.14847e-08, 1)
bones/119/position = Vector3(-1.74622e-09, 0.257883, 7.91624e-09)
bones/119/rotation = Quaternion(2.05972e-06, -0.00932843, -4.27184e-07, 0.999957)
bones/120/position = Vector3(-8.26549e-09, -1.24564e-08, -2.79397e-09)
bones/121/position = Vector3(-9.66248e-09, -1.04773e-09, -2.79397e-09)
bones/121/rotation = Quaternion(9.01055e-08, 1.89175e-08, -1.09431e-08, 1)
bones/122/position = Vector3(-4.20612e-09, -3.23389e-08, -2.99743e-09)
bones/122/rotation = Quaternion(-0.100088, -0.016598, 0.00998913, 0.99479)
bones/124/position = Vector3(-5.77858e-09, -4.56626e-08, -4.87866e-09)
bones/125/position = Vector3(-5.3551e-09, 8.49764e-09, 2.3283e-10)
bones/126/rotation = Quaternion(1.94594e-06, -0.00606107, -1.38573e-07, 0.999982)
bones/127/rotation = Quaternion(-1.05484e-06, 1.25147e-08, 7.22939e-08, 1)
bones/127/scale = Vector3(0.999999, 1, 1)
bones/128/rotation = Quaternion(2.1304e-08, 1.57161e-09, 6.2224e-08, 1)
bones/128/scale = Vector3(1, 1, 1)
bones/129/rotation = Quaternion(5.12227e-09, 1.30967e-08, -6.92671e-09, 1)
bones/129/scale = Vector3(1, 0.999999, 1)
bones/130/rotation = Quaternion(0.218997, 0.0123537, -0.0238178, 0.975357)
bones/130/scale = Vector3(1, 0.999999, 1)
bones/131/rotation = Quaternion(2.60188e-08, 5.09317e-08, 9.1124e-08, 1)
bones/131/scale = Vector3(1, 1, 1)
bones/132/rotation = Quaternion(3.7253e-09, -5.59667e-08, -5.02914e-08, 1)
bones/132/scale = Vector3(1, 1, 1)
bones/133/rotation = Quaternion(-0.712511, 0.0443565, -0.0161623, 0.700071)
bones/133/scale = Vector3(1, 1, 1)
bones/134/rotation = Quaternion(-0.0932345, -4.33605e-06, -0.0017757, 0.995643)
bones/135/position = Vector3(7.45058e-09, 0.107384, 1.86265e-09)
bones/135/rotation = Quaternion(1.10312e-07, -0.00542306, 2.99582e-08, 0.999985)
bones/136/position = Vector3(3.25963e-09, 1.69966e-08, -1.86264e-09)
bones/137/position = Vector3(2.32825e-10, -1.32713e-08, -2.22045e-16)
bones/137/rotation = Quaternion(4.17931e-08, -8.44012e-08, -3.69037e-08, 1)
bones/138/position = Vector3(2.56114e-09, 0.214768, 4.65661e-09)
bones/138/rotation = Quaternion(-3.14892e-08, -0.0049668, 3.53092e-08, 0.999988)
bones/139/position = Vector3(1.04774e-08, -2.70084e-08, -2.79397e-09)
bones/140/position = Vector3(-2.32846e-10, -3.49246e-10, -1.86265e-09)
bones/140/rotation = Quaternion(2.51457e-08, 1.36206e-08, 1.45521e-09, 1)
bones/141/rotation = Quaternion(1.96374e-06, -0.00606108, -1.96702e-07, 0.999982)
bones/142/rotation = Quaternion(-0.097431, 0.00725804, 0.00432611, 0.995206)
bones/143/rotation = Quaternion(0.219285, 0.0122297, -0.0209682, 0.975359)
bones/144/rotation = Quaternion(0.120448, 0.00776231, -0.0120914, 0.992616)
bones/144/scale = Vector3(1, 0.976622, 1)
bones/145/rotation = Quaternion(0.0226449, 0.00878252, -0.0102273, 0.999653)
bones/145/scale = Vector3(1, 0.976622, 1)
bones/147/rotation = Quaternion(-0.226939, 0.335595, -0.353352, 0.843218)
bones/148/rotation = Quaternion(0.814934, 7.43642e-05, 5.32438e-05, 0.579554)
bones/149/position = Vector3(-1.07735e-07, 0.494896, 3.85158e-05)
bones/149/rotation = Quaternion(0.118528, 0.829653, 0.0556171, 0.54271)
bones/151/position = Vector3(1.36807e-08, 2.24339e-08, -1.37479e-08)
bones/151/rotation = Quaternion(-0.0747633, -5.35377e-05, 0.000842159, 0.997201)
bones/152/rotation = Quaternion(1.02442e-08, 6.74359e-06, -3.34531e-08, 1)
bones/154/position = Vector3(4.55475e-09, 3.55358e-08, 7.33417e-09)
bones/177/position = Vector3(-3.56486e-08, 0.164965, 1.28221e-05)
bones/177/rotation = Quaternion(2.36276e-05, 0.322902, 8.22036e-06, 0.946432)
bones/178/position = Vector3(0.0658124, -0.0797506, -0.0365105)
bones/179/position = Vector3(0.0658124, -0.0797506, -0.0365105)
bones/179/rotation = Quaternion(-0.0685076, 1.39894e-07, -0.122546, 0.990096)
bones/180/position = Vector3(-4.18369e-08, 0.32993, 2.56432e-05)
bones/180/rotation = Quaternion(1.95433e-05, 0.612415, 1.5362e-05, 0.790536)
bones/181/position = Vector3(0.0811552, -0.0461419, 0.0126689)
bones/182/position = Vector3(0.0811552, -0.0461419, 0.0126689)
bones/182/rotation = Quaternion(-0.0148716, 1.19001e-07, 0.0894861, 0.995877)
bones/183/position = Vector3(-6.65803e-08, 5.7527e-08, -4.60477e-08)
bones/183/rotation = Quaternion(-0.54559, -0.00100244, -0.135884, 0.826962)
bones/185/position = Vector3(3.64525e-09, 4.06653e-08, 8.95234e-08)
bones/186/rotation = Quaternion(-7.79206e-08, -0.334333, -5.37461e-08, 0.942455)
bones/187/rotation = Quaternion(-0.0583205, -6.23305e-09, 0.124362, 0.990522)
bones/187/scale = Vector3(1, 1.18887, 1)
bones/188/rotation = Quaternion(0.0483008, 0.0270955, -0.104847, 0.992945)
bones/188/scale = Vector3(0.994011, 0.864314, 0.99845)
bones/189/rotation = Quaternion(0.120582, 0.0246303, -0.200725, 0.971886)
bones/189/scale = Vector3(0.997495, 0.906595, 0.99911)
bones/190/rotation = Quaternion(0.297822, 0.074968, -0.299365, 0.903362)
bones/190/scale = Vector3(1.02228, 0.709667, 1.02989)
bones/191/rotation = Quaternion(0.323663, 0.116078, -0.105909, 0.933033)
bones/191/scale = Vector3(1.0087, 1.54804, 1.20077)
bones/192/rotation = Quaternion(0.173153, 0.179295, 0.0521826, 0.967031)
bones/192/scale = Vector3(0.99575, 1.18091, 0.985644)
bones/193/rotation = Quaternion(-0.0738482, 0.180957, -0.0428573, 0.979778)
bones/193/scale = Vector3(0.997028, 0.715805, 0.99675)
bones/194/position = Vector3(1.85901e-08, 0.176364, 1.38534e-08)
bones/194/rotation = Quaternion(-1.32433e-07, -0.258015, 5.84031e-08, 0.966141)
bones/195/position = Vector3(-0.0470743, 0.0253987, -0.0322391)
bones/196/position = Vector3(-0.0470743, 0.0253987, -0.0322391)
bones/196/rotation = Quaternion(-0.0496126, -3.64071e-08, 0.0702671, 0.996294)
bones/197/position = Vector3(1.38389e-08, 0.352729, -3.46918e-08)
bones/197/rotation = Quaternion(-2.21124e-07, -0.161338, 1.92805e-08, 0.986899)
bones/198/position = Vector3(-0.045366, 0.0281271, -0.0482924)
bones/199/position = Vector3(-0.045366, 0.028127, -0.0482924)
bones/199/rotation = Quaternion(0.061961, -6.81295e-08, -0.059896, 0.99628)
bones/200/rotation = Quaternion(-0.136567, -0.331164, 0.0147343, 0.933522)
bones/201/rotation = Quaternion(-0.226939, 0.335595, -0.353352, 0.843218)
bones/202/rotation = Quaternion(0.814934, 7.43642e-05, 5.32438e-05, 0.579554)
bones/203/rotation = Quaternion(0.483473, 0.811405, -0.0967988, 0.313857)
bones/203/scale = Vector3(1, 0.580216, 1)
bones/205/rotation = Quaternion(-0.226939, -0.335595, 0.353352, 0.843218)
bones/206/rotation = Quaternion(0.814934, -7.43829e-05, -5.32325e-05, 0.579554)
bones/207/position = Vector3(-1.15469e-08, 0.494896, 3.84836e-05)
bones/207/rotation = Quaternion(0.118528, -0.829653, -0.0556171, 0.54271)
bones/209/position = Vector3(-1.33819e-08, -1.53429e-08, 2.13007e-08)
bones/209/rotation = Quaternion(-0.0747631, 5.35541e-05, -0.000842145, 0.997201)
bones/210/rotation = Quaternion(1.02442e-08, -6.74359e-06, 3.34531e-08, 1)
bones/212/position = Vector3(2.54804e-08, 1.29512e-08, 1.10595e-08)
bones/235/position = Vector3(2.81981e-08, 0.164965, 1.28519e-05)
bones/235/rotation = Quaternion(2.35912e-05, -0.322902, -7.84077e-06, 0.946432)
bones/236/position = Vector3(-0.0658125, -0.0797506, -0.0365105)
bones/237/position = Vector3(-0.0658125, -0.0797506, -0.0365105)
bones/237/rotation = Quaternion(-0.0685076, -1.51774e-07, 0.122546, 0.990096)
bones/238/position = Vector3(6.7914e-08, 0.32993, 2.5632e-05)
bones/238/rotation = Quaternion(1.95633e-05, -0.612415, -1.52919e-05, 0.790536)
bones/239/position = Vector3(-0.0811552, -0.0461419, 0.0126689)
bones/240/position = Vector3(-0.0811551, -0.0461419, 0.0126689)
bones/240/rotation = Quaternion(-0.0148717, -1.07838e-07, -0.0894859, 0.995877)
bones/241/position = Vector3(-7.9269e-09, 7.26937e-08, -1.27491e-08)
bones/241/rotation = Quaternion(-0.54559, 0.00100244, 0.135883, 0.826962)
bones/243/position = Vector3(5.59594e-08, 2.55313e-08, 2.23517e-08)
bones/244/rotation = Quaternion(-1.27005e-08, 0.334333, 3.83886e-10, 0.942455)
bones/245/rotation = Quaternion(-0.0583204, 6.25458e-09, -0.124362, 0.990522)
bones/245/scale = Vector3(1, 1.18887, 1)
bones/246/rotation = Quaternion(0.0436569, 0.0270641, 0.102032, 0.993454)
bones/246/scale = Vector3(0.993998, 0.863624, 0.999039)
bones/247/rotation = Quaternion(0.0985868, -0.0245844, 0.220849, 0.970001)
bones/247/scale = Vector3(0.996973, 0.910928, 0.99941)
bones/248/rotation = Quaternion(0.267247, -0.0749658, 0.322158, 0.905082)
bones/248/scale = Vector3(1.0252, 0.709469, 1.02345)
bones/249/rotation = Quaternion(0.317163, -0.11642, 0.146007, 0.929805)
bones/249/scale = Vector3(1.02061, 1.53952, 1.19464)
bones/250/rotation = Quaternion(0.172645, -0.179587, -0.0303798, 0.967998)
bones/250/scale = Vector3(0.997664, 1.17424, 0.984991)
bones/251/rotation = Quaternion(-0.0848517, -0.232238, 0.0244435, 0.968643)
bones/251/scale = Vector3(0.997992, 0.722583, 0.995424)
bones/252/position = Vector3(1.26696e-07, 0.176364, -8.87085e-08)
bones/252/rotation = Quaternion(6.22874e-08, 0.258015, -8.43097e-08, 0.966141)
bones/253/position = Vector3(0.0470742, 0.0253987, -0.0322391)
bones/254/position = Vector3(0.0470742, 0.0253988, -0.0322391)
bones/254/rotation = Quaternion(-0.0496128, 3.14256e-08, -0.0702673, 0.996294)
bones/255/position = Vector3(6.06669e-08, 0.352729, -3.10829e-08)
bones/255/rotation = Quaternion(1.69437e-07, 0.161338, -3.51333e-08, 0.986899)
bones/256/position = Vector3(0.0453662, 0.0281271, -0.0482923)
bones/257/position = Vector3(0.0453661, 0.028127, -0.0482923)
bones/257/rotation = Quaternion(0.0619606, 7.56819e-08, 0.0598957, 0.99628)
bones/258/rotation = Quaternion(-0.136566, 0.331164, -0.0147344, 0.933522)
bones/259/rotation = Quaternion(-0.226939, -0.335595, 0.353352, 0.843218)
bones/260/rotation = Quaternion(0.814934, -7.43829e-05, -5.32325e-05, 0.579554)
bones/261/rotation = Quaternion(0.483473, -0.811405, 0.0967988, 0.313856)
bones/261/scale = Vector3(1, 0.580216, 1)
bones/262/position = Vector3(-1.21964e-08, 0.0616701, -0.139511)
bones/262/rotation = Quaternion(-0.695299, 3.14162e-08, 3.03925e-08, 0.71872)
bones/263/position = Vector3(5.10703e-15, 0.230976, -1.16472e-08)
bones/263/rotation = Quaternion(-0.0311281, 1.19152e-07, -3.71076e-09, 0.999515)
bones/264/position = Vector3(1.65165e-15, -6.35167e-08, -6.64239e-09)
bones/264/rotation = Quaternion(0.0145709, -1.19197e-07, 1.73699e-09, 0.999894)
bones/264/scale = Vector3(1, 1, 1)
bones/266/position = Vector3(1.2315e-16, 0.262514, -1.86264e-09)
bones/266/rotation = Quaternion(9.31323e-10, -5.40167e-08, 6.35104e-15, 1)
bones/268/position = Vector3(7.72315e-15, 2.5495e-08, -7.45058e-09)
bones/268/rotation = Quaternion(-3.72529e-08, -1.00583e-07, 7.56064e-15, 1)
bones/268/scale = Vector3(1, 1, 1)
bones/269/rotation = Quaternion(7.45058e-09, 1.00583e-07, -3.46469e-16, 1)
bones/269/scale = Vector3(1, 1, 1)
bones/270/rotation = Quaternion(-0.0311281, 1.19152e-07, -3.71076e-09, 0.999515)
bones/270/scale = Vector3(1, 1, 1)
bones/272/position = Vector3(-1.21964e-08, 0.0616701, -0.139511)
bones/272/rotation = Quaternion(-0.695299, 3.14162e-08, 3.03925e-08, 0.71872)
bones/273/position = Vector3(5.10703e-15, 0.230976, -1.16472e-08)
bones/273/rotation = Quaternion(-0.0311281, 1.19152e-07, -3.71076e-09, 0.999515)
bones/274/position = Vector3(1.9984e-15, 0.22424, 0.834584)
bones/277/rotation = Quaternion(2.59734e-07, -8.74228e-08, 8.2323e-15, 1)
bones/278/rotation = Quaternion(-3.89601e-07, -7.10543e-15, 1.75954e-14, 1)
bones/278/scale = Vector3(1, 1, 1)
bones/279/rotation = Quaternion(-1.29867e-07, -3.55271e-15, 1.13533e-14, 1)
bones/279/scale = Vector3(1, 1, 1)
bones/281/rotation = Quaternion(8.74228e-08, 8.65779e-08, 1, 1.69407e-21)
bones/283/rotation = Quaternion(0.995472, -1.03344e-08, -0.0184201, -0.0932516)
bones/284/rotation = Quaternion(-0.00444672, 0.995644, -0.0931348, -0.000255377)
bones/285/rotation = Quaternion(-0.0732337, 0.000863981, 0.0118871, 0.997244)
bones/288/rotation = Quaternion(-0.0932358, -3.07698e-08, 0.00172522, 0.995643)
bones/289/rotation = Quaternion(3.25963e-08, 2.17263e-15, 1, 1.39045e-15)
bones/290/rotation = Quaternion(3.1665e-08, -1.70334e-15, 1, 4.4403e-16)
bones/291/position = Vector3(0.000173845, 0.290832, -6.4288e-06)
bones/291/rotation = Quaternion(-1.03274e-07, -0.0932359, 0.995643, 0.00172523)
bones/292/rotation = Quaternion(-1.39728e-07, 4.10728e-09, 1, -1.16415e-10)
bones/293/rotation = Quaternion(0.995472, 1.03344e-08, 0.0184201, -0.0932516)
bones/295/rotation = Quaternion(-0.0732337, -0.000863981, -0.0118871, 0.997244)
bones/298/rotation = Quaternion(-0.0932358, 3.07698e-08, -0.00172522, 0.995643)
bones/299/rotation = Quaternion(-9.31324e-10, 1.7229e-15, 1, -1.83186e-15)
bones/300/rotation = Quaternion(1.07553e-15, -1.68127e-15, 1, -8.88167e-16)
bones/301/position = Vector3(-0.000173845, 0.290832, -6.4288e-06)
bones/301/rotation = Quaternion(1.03274e-07, -0.0932359, 0.995643, -0.00172523)
bones/302/rotation = Quaternion(1.39728e-07, 4.10728e-09, 1, 1.16415e-10)
bones/303/position = Vector3(0.589192, -0.0494387, 0.346797)
bones/303/rotation = Quaternion(0.924457, -0.0918536, -0.254553, -0.268597)
bones/306/position = Vector3(-0.589192, -0.0494387, 0.346797)
bones/306/rotation = Quaternion(0.924457, 0.0918536, 0.254553, -0.268597)
[node name="Abe_GEO_Lo" parent="Abe/Abe_Lo/CLOUDRIG_Abe/Skeleton3D" index="0"]
material_override = SubResource("ShaderMaterial_o5d2o")
material_overlay = SubResource("ShaderMaterial_jet42")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.78824, 0.103786, 0.606553, -0.481108, 0.718508, 0.502277, -0.383683, -0.687732, 0.616289, 0.473871, 5.27602, -0.424684)
shadow_enabled = true
shadow_bias = 0.01
shadow_blur = 8.0
directional_shadow_blend_splits = true
[node name="Camera3D" parent="." node_paths=PackedStringArray("rail", "target") instance=ExtResource("5_gxkek")]
transform = Transform3D(1, 0, 0, 0, 0.996195, 0.0871557, 0, -0.0871557, 0.996195, 0.296257, 5.39118, 15.9966)
attributes = SubResource("CameraAttributesPhysical_penuw")
current = true
rail = NodePath("../Path3D")
target = NodePath("../Abe")
seek_easing = 2.0
[node name="Path3D" type="Path3D" parent="."]
curve = SubResource("Curve3D_0vf4k")
[editable path="Abe"]
[editable path="Abe/Abe_Lo"]

@ -0,0 +1,222 @@
[gd_scene load_steps=12 format=3 uid="uid://t6lbjipbipwh"]
[ext_resource type="PackedScene" uid="uid://dkt4b5x12c0o8" path="res://Scenes/Characters/CHAR_Abe.tscn" id="1_hotrp"]
[ext_resource type="Shader" uid="uid://c1r07k4gw7q3w" path="res://Shaders/CHAR_SHD_Abe.tres" id="2_2wj36"]
[ext_resource type="Shader" uid="uid://dewwedodqpjub" path="res://Shaders/CHAR_SHD_AbeFace.tres" id="3_75ifg"]
[ext_resource type="PackedScene" uid="uid://c11r5uc4ird3x" path="res://Scenes/Nodes/NODE_Camera.tscn" id="4_u0her"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_hj74p"]
[sub_resource type="Sky" id="Sky_4l6vg"]
sky_material = SubResource("ProceduralSkyMaterial_hj74p")
[sub_resource type="Environment" id="Environment_6s8v0"]
background_mode = 2
sky = SubResource("Sky_4l6vg")
ambient_light_source = 3
reflected_light_source = 2
ssr_enabled = true
ssao_enabled = true
ssao_radius = 1.43
ssao_intensity = 37.75
ssao_power = 0.351196
ssao_detail = 5.0
ssao_horizon = 0.0
ssao_light_affect = 0.31
ssao_ao_channel_affect = 0.77
ssil_enabled = true
ssil_radius = 8.26
ssil_intensity = 3.58
sdfgi_enabled = true
glow_enabled = true
glow_strength = 1.25
volumetric_fog_density = 0.1
volumetric_fog_length = 5.0
adjustment_contrast = 1.1
[sub_resource type="ShaderMaterial" id="ShaderMaterial_o5d2o"]
render_priority = 0
shader = ExtResource("2_2wj36")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_jet42"]
render_priority = 0
shader = ExtResource("3_75ifg")
[sub_resource type="CameraAttributesPhysical" id="CameraAttributesPhysical_penuw"]
frustum_focal_length = 75.0
[sub_resource type="Curve3D" id="Curve3D_dtff4"]
bake_interval = 2.0
_data = {
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, -46.5686, 10.868, 21.0979, -16.8377, 0.609722, 1.98655, 16.8377, -0.609722, -1.98655, -16.2611, 6.3926, 13.9617, 0, 0, 0, 0, 0, 0, 4.74607, 5.75686, 11.9171),
"tilts": PackedFloat32Array(0, 0, 0)
}
point_count = 3
[node name="LVL_Dojo" type="Node3D"]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_6s8v0")
[node name="Abe" parent="." instance=ExtResource("1_hotrp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19.9728, 0, -11.9762)
[node name="Skeleton3D" parent="Abe/Abe_Lo/CLOUDRIG_Abe" index="0"]
bones/0/position = Vector3(-9.56341e-15, 0.834584, -0.338982)
bones/1/position = Vector3(3.55271e-15, 0.834584, -0.109498)
bones/2/position = Vector3(-7.75607e-15, 0.834584, 0.119985)
bones/5/rotation = Quaternion(-0.00504518, 5.70635e-11, 0.00177304, 0.999986)
bones/6/rotation = Quaternion(-6.46748e-08, 0.00504521, 0.999986, -0.00177305)
bones/6/scale = Vector3(1, 0.911684, 1)
bones/7/position = Vector3(0.111407, 0.454822, 0.642132)
bones/7/rotation = Quaternion(0.688036, 0.00805703, 0.725157, -0.026244)
bones/9/position = Vector3(0.139509, 0.760465, -0.0327484)
bones/15/rotation = Quaternion(-0.00504519, -2.96843e-12, -0.00177304, 0.999986)
bones/16/rotation = Quaternion(6.2919e-08, 0.00504521, 0.999986, 0.00177303)
bones/16/scale = Vector3(1, 0.911684, 1)
bones/17/position = Vector3(-0.111407, 0.454822, 0.642132)
bones/17/rotation = Quaternion(0.725157, -0.026244, 0.688036, 0.00805708)
bones/19/position = Vector3(-0.139509, 0.760465, -0.0327484)
bones/25/rotation = Quaternion(-0.167783, -9.52683e-10, 0.127235, 0.977579)
bones/26/rotation = Quaternion(-7.62146e-09, 0.167783, 0.977579, -0.127235)
bones/26/scale = Vector3(1, 0.749599, 1)
bones/27/position = Vector3(0.281916, 0.848307, -0.0316591)
bones/31/position = Vector3(0.517764, 0.241987, 0.244877)
bones/34/position = Vector3(0.452107, 0.341106, 0.148042)
bones/39/rotation = Quaternion(-0.167783, 9.52683e-10, -0.127235, 0.977579)
bones/40/rotation = Quaternion(-1.39092e-07, 0.167783, 0.977579, 0.127235)
bones/40/scale = Vector3(1, 0.749599, 1)
bones/41/position = Vector3(-0.281916, 0.848307, -0.0316591)
bones/45/position = Vector3(-0.517764, 0.241987, 0.244877)
bones/48/position = Vector3(-0.452107, 0.341106, 0.148042)
bones/53/position = Vector3(4.4254e-15, 0.338982, 0.834584)
bones/63/rotation = Quaternion(-0.0974315, -0.00725811, -0.00432622, 0.995206)
bones/64/rotation = Quaternion(0.219286, -0.0122297, 0.0209682, 0.975359)
bones/65/rotation = Quaternion(-0.712328, -0.0418331, 0.0227654, 0.700229)
bones/71/rotation = Quaternion(0.2786, 0.0612847, -0.00773649, 0.958419)
bones/77/rotation = Quaternion(2.21269e-06, 0.00925664, 5.26823e-07, 0.999957)
bones/80/rotation = Quaternion(-0.100088, 0.016598, -0.00998912, 0.99479)
bones/84/rotation = Quaternion(2.05785e-06, 0.00617359, 1.45028e-07, 0.999981)
bones/88/rotation = Quaternion(0.218998, -0.0123537, 0.0238178, 0.975356)
bones/91/rotation = Quaternion(-0.712511, -0.0443565, 0.0161623, 0.700071)
bones/93/rotation = Quaternion(2.50222e-09, 0.00553837, 3.46455e-08, 0.999985)
bones/96/rotation = Quaternion(1.07683e-07, 0.00500984, 1.37907e-08, 0.999988)
bones/99/rotation = Quaternion(2.14046e-06, 0.00617361, 1.84164e-07, 0.999981)
bones/100/rotation = Quaternion(-0.0974315, -0.00725811, -0.00432622, 0.995206)
bones/101/rotation = Quaternion(0.219286, -0.0122297, 0.0209682, 0.975359)
bones/102/rotation = Quaternion(0.120448, -0.0077623, 0.0120914, 0.992616)
bones/102/scale = Vector3(1, 0.976621, 1)
bones/103/scale = Vector3(1, 0.976621, 1)
bones/105/rotation = Quaternion(-0.097431, 0.00725804, 0.00432611, 0.995206)
bones/106/rotation = Quaternion(0.219285, 0.0122297, -0.0209682, 0.975359)
bones/107/rotation = Quaternion(-0.712328, 0.0418331, -0.0227654, 0.700229)
bones/113/rotation = Quaternion(0.278601, -0.0612847, 0.00773651, 0.958419)
bones/119/rotation = Quaternion(2.24342e-06, -0.00925663, -4.6553e-07, 0.999957)
bones/122/rotation = Quaternion(-0.100088, -0.016598, 0.00998913, 0.99479)
bones/126/rotation = Quaternion(2.01556e-06, -0.00617356, -1.44001e-07, 0.999981)
bones/130/rotation = Quaternion(0.218997, 0.0123537, -0.0238178, 0.975357)
bones/133/rotation = Quaternion(-0.712511, 0.0443565, -0.0161623, 0.700071)
bones/135/rotation = Quaternion(1.27661e-07, -0.00553836, 2.36726e-08, 0.999985)
bones/138/rotation = Quaternion(-2.97859e-08, -0.00500983, 3.3865e-08, 0.999988)
bones/141/rotation = Quaternion(2.03299e-06, -0.00617358, -2.04343e-07, 0.999981)
bones/142/rotation = Quaternion(-0.097431, 0.00725804, 0.00432611, 0.995206)
bones/143/rotation = Quaternion(0.219285, 0.0122297, -0.0209682, 0.975359)
bones/144/rotation = Quaternion(0.120448, 0.00776231, -0.0120913, 0.992616)
bones/144/scale = Vector3(1, 0.976622, 1)
bones/145/scale = Vector3(1, 0.976622, 1)
bones/147/rotation = Quaternion(-0.226939, 0.335595, -0.353352, 0.843218)
bones/148/rotation = Quaternion(0.814934, 7.43642e-05, 5.32438e-05, 0.579554)
bones/149/rotation = Quaternion(0.118528, 0.829653, 0.0556171, 0.54271)
bones/151/rotation = Quaternion(-0.0747221, -5.3984e-05, 0.000945823, 0.997204)
bones/177/rotation = Quaternion(2.36276e-05, 0.322902, 8.22036e-06, 0.946432)
bones/179/rotation = Quaternion(-0.0684154, 1.38785e-07, -0.122598, 0.990095)
bones/180/rotation = Quaternion(1.95433e-05, 0.612415, 1.5362e-05, 0.790536)
bones/182/rotation = Quaternion(-0.0148716, 1.19001e-07, 0.0894861, 0.995877)
bones/183/rotation = Quaternion(-0.545597, -0.0010019, -0.135812, 0.826969)
bones/186/rotation = Quaternion(-7.79206e-08, -0.334333, -5.37461e-08, 0.942455)
bones/187/rotation = Quaternion(-0.0583902, -7.54906e-09, 0.12433, 0.990521)
bones/188/rotation = Quaternion(0.0482389, 0.0270955, -0.104875, 0.992945)
bones/189/rotation = Quaternion(0.120626, 0.0246303, -0.200702, 0.971886)
bones/190/rotation = Quaternion(0.297746, 0.0749684, -0.299384, 0.903381)
bones/190/scale = Vector3(1.02228, 0.709667, 1.02989)
bones/191/rotation = Quaternion(0.323651, 0.116079, -0.106009, 0.933026)
bones/191/scale = Vector3(1.00862, 1.54811, 1.2008)
bones/192/rotation = Quaternion(0.173153, 0.179295, 0.0521826, 0.967031)
bones/192/scale = Vector3(0.995766, 1.18085, 0.985638)
bones/193/rotation = Quaternion(-0.0738482, 0.180957, -0.0428573, 0.979778)
bones/193/scale = Vector3(0.997028, 0.715805, 0.99675)
bones/194/rotation = Quaternion(-1.32433e-07, -0.258015, 5.84031e-08, 0.966141)
bones/196/rotation = Quaternion(-0.0496714, -3.77088e-08, 0.0702259, 0.996294)
bones/197/rotation = Quaternion(-2.19149e-07, -0.161424, 1.71693e-08, 0.986885)
bones/199/rotation = Quaternion(0.0619112, -6.98518e-08, -0.059948, 0.99628)
bones/200/rotation = Quaternion(-0.136567, -0.331164, 0.0147343, 0.933522)
bones/201/rotation = Quaternion(-0.226939, 0.335595, -0.353352, 0.843218)
bones/202/rotation = Quaternion(0.814934, 7.43642e-05, 5.32438e-05, 0.579554)
bones/203/rotation = Quaternion(0.483473, 0.811405, -0.0967988, 0.313857)
bones/203/scale = Vector3(1, 0.580216, 1)
bones/205/rotation = Quaternion(-0.226939, -0.335595, 0.353352, 0.843218)
bones/206/rotation = Quaternion(0.814934, -7.43829e-05, -5.32325e-05, 0.579554)
bones/207/rotation = Quaternion(0.118528, -0.829653, -0.0556171, 0.54271)
bones/209/rotation = Quaternion(-0.0747219, 5.4e-05, -0.000945814, 0.997204)
bones/235/rotation = Quaternion(2.35912e-05, -0.322902, -7.84077e-06, 0.946433)
bones/237/rotation = Quaternion(-0.0684154, -1.52513e-07, 0.122598, 0.990096)
bones/238/rotation = Quaternion(1.95633e-05, -0.612415, -1.52919e-05, 0.790536)
bones/240/rotation = Quaternion(-0.0148717, -1.07838e-07, -0.0894859, 0.995877)
bones/241/rotation = Quaternion(-0.545597, 0.0010019, 0.135812, 0.826969)
bones/244/rotation = Quaternion(-1.27005e-08, 0.334333, 3.83886e-10, 0.942455)
bones/245/rotation = Quaternion(-0.0583901, 7.31545e-09, -0.12433, 0.990521)
bones/246/rotation = Quaternion(0.0435936, 0.0270641, 0.102065, 0.993454)
bones/247/rotation = Quaternion(0.0985318, -0.0245843, 0.220872, 0.970001)
bones/248/rotation = Quaternion(0.267167, -0.0749663, 0.322167, 0.905102)
bones/248/scale = Vector3(1.0252, 0.709469, 1.02345)
bones/249/rotation = Quaternion(0.317143, -0.116421, 0.146101, 0.929796)
bones/249/scale = Vector3(1.02058, 1.53954, 1.19466)
bones/250/rotation = Quaternion(0.172645, -0.179587, -0.0303798, 0.967998)
bones/250/scale = Vector3(0.997654, 1.17429, 0.984994)
bones/251/rotation = Quaternion(-0.0848517, -0.232238, 0.0244435, 0.968643)
bones/251/scale = Vector3(0.997992, 0.722583, 0.995424)
bones/252/rotation = Quaternion(6.22874e-08, 0.258015, -8.43097e-08, 0.966141)
bones/254/rotation = Quaternion(-0.0496717, 3.43027e-08, -0.0702262, 0.996294)
bones/255/rotation = Quaternion(1.65979e-07, 0.161424, -3.72922e-08, 0.986885)
bones/257/rotation = Quaternion(0.0619108, 7.64696e-08, 0.0599476, 0.99628)
bones/258/rotation = Quaternion(-0.136566, 0.331164, -0.0147344, 0.933522)
bones/259/rotation = Quaternion(-0.226939, -0.335595, 0.353352, 0.843218)
bones/260/rotation = Quaternion(0.814934, -7.43829e-05, -5.32325e-05, 0.579554)
bones/261/rotation = Quaternion(0.483473, -0.811405, 0.0967988, 0.313856)
bones/261/scale = Vector3(1, 0.580216, 1)
bones/274/position = Vector3(1.9984e-15, 0.22424, 0.834584)
bones/303/position = Vector3(0.589192, -0.0494387, 0.346797)
bones/306/position = Vector3(-0.589192, -0.0494387, 0.346797)
[node name="Abe_GEO_Lo" parent="Abe/Abe_Lo/CLOUDRIG_Abe/Skeleton3D" index="0"]
material_override = SubResource("ShaderMaterial_o5d2o")
material_overlay = SubResource("ShaderMaterial_jet42")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.78824, 0.103786, 0.606553, -0.481108, 0.718508, 0.502277, -0.383683, -0.687732, 0.616289, 0.473871, 5.27602, -0.424684)
shadow_enabled = true
shadow_bias = 0.01
shadow_blur = 8.0
directional_shadow_blend_splits = true
[node name="Camera3D" parent="." node_paths=PackedStringArray("rail", "target") instance=ExtResource("4_u0her")]
transform = Transform3D(1, 0, 0, 0, 0.996195, 0.0871557, 0, -0.0871557, 0.996195, 21.8838, 5.39118, 6.77292)
attributes = SubResource("CameraAttributesPhysical_penuw")
current = true
rail = NodePath("../Path3D")
target = NodePath("../Abe")
[node name="Path3D" type="Path3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 39.4172, 0, 0)
curve = SubResource("Curve3D_dtff4")
[node name="waypoint_01" type="Marker3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30.1021, 4.03714, 10.8083)
gizmo_extents = 1.29
[node name="waypoint_02" type="Marker3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.2583, 1.91104, 9.33807)
gizmo_extents = 1.29
[editable path="Abe"]
[editable path="Abe/Abe_Lo"]

@ -0,0 +1,16 @@
[gd_scene load_steps=2 format=3 uid="uid://c11r5uc4ird3x"]
[ext_resource type="Script" path="res://Scripts/Camera.gd" id="1_am1sr"]
[node name="Camera3D" type="Camera3D"]
transform = Transform3D(1, 0, 0, 0, 0.994327, 0.106368, 0, -0.106368, 0.994327, 0, 5.02177, 39.3568)
fov = 2.29153
size = 10.0
script = ExtResource("1_am1sr")
jump_waypoints = true
[node name="Timer" type="Timer" parent="."]
wait_time = 3.0
one_shot = true
[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]

@ -0,0 +1,76 @@
extends CharacterBody3D
const SPEED = 3.5
const RUN_MULT = 2.0
const JUMP_VELOCITY = 4.5
const LIN_ACCEL = 0.25
const ANG_ACCEL = 0.25
const INNERTIA = 0.4
var animp : AnimationPlayer
var anim_tree : AnimationTree
# Get the gravity from the project settings to be synced with RigidBody nodes.
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
var speed = SPEED
func _ready():
anim_tree = $Abe_Lo/AnimationTree
animp = $Abe_Lo/AnimationPlayer
animp.play("ANIM_Abe_Idle_01")
animp.speed_scale = 1.5
func map( value : float , in_min : float, in_max : float, out_min : float, out_max : float ):
#=( ( value - in_min ) / ( in_max - in_min ) * ( out_max-out_min ) + out_min)
var mapped_value = ( value - in_min ) / ( in_max - in_min ) * ( out_max-out_min ) + out_min
return mapped_value
func update_tree():
anim_tree["parameters/Walk/blend_amount"] = animp.speed_scale / 1.5
anim_tree["parameters/Run/blend_amount"] = map ( speed , SPEED , SPEED * RUN_MULT , 0 , 1 )
func _physics_process(delta):
# Add the gravity.
if not is_on_floor():
velocity.y -= gravity * delta
# Handle jump.
if Input.is_action_just_pressed("jump") and is_on_floor():
velocity.y = JUMP_VELOCITY
# Get the input direction and handle the movement/deceleration.
# As good practice, you should replace UI actions with custom gameplay actions.
var input_dir = Input.get_vector("left", "right", "up", "down")
var run = Input.is_action_pressed("run")
if run:
speed = move_toward( speed , SPEED * RUN_MULT , LIN_ACCEL )
else:
speed = move_toward( speed , SPEED , LIN_ACCEL )
# Caculate directions from input
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
var direction2d = Vector2(-direction.x,direction.z)
#moving
if direction and (is_on_floor() or (not is_on_floor() and is_on_wall()) ):
animp.speed_scale = 1.5
velocity.x = direction.x * speed
velocity.z = direction.z * speed
#if speed > SPEED:
#$GPUParticles3D.amount_ratio = speed / ( SPEED * RUN_MULT )
var new_rotation = Vector3( 0.0, direction2d.angle() - (PI/2) , 0.0 )
$Abe_Lo.rotation = Vector3( 0.0 , rotate_toward( $Abe_Lo.rotation.y , new_rotation.y , ANG_ACCEL ), 0.0)
else:
if is_on_floor():
velocity.x = move_toward(velocity.x, 0, INNERTIA )
velocity.z = move_toward(velocity.z, 0, INNERTIA )
animp.speed_scale = move_toward( animp.speed_scale, 0 , .05 )
$GPUParticles3D.amount_ratio = 0.0
update_tree()
move_and_slide()

@ -0,0 +1,29 @@
extends Camera3D
@export var rail : Path3D
@export var target : Node3D
@export var seek_easing : float
var target_pos
# Called when the node enters the scene tree for the first time.
func init():
target_pos = target.position
func seek_target():
if target_pos != target.position:
target_pos = target_pos.move_toward( target.position , target.position.distance_to(target_pos)/seek_easing )
look_at( target_pos + Vector3(0.0,0.70,0.0) )
func constraint_to_rail():
position = rail.curve.get_closest_point( target.position )
func _ready():
init()
func _process(delta):
constraint_to_rail()
seek_target()

@ -0,0 +1,59 @@
extends Camera3D
@export var target : Node3D
@export var delay : float
@export var easing : float
@export var waypoints : Array[Node3D]
var target_pos
var max_time
var t
var factor
# Called when the node enters the scene tree for the first time.
func _ready():
t = $Timer
t.autostart = false
t.wait_time = delay
target_pos = target.position
t.start()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
if len(waypoints) == 0:
pass
else:
var wp1 = waypoints[0].position
var wp2 = waypoints[1].position
#var ratio = wp2.distance_to( target.position )/wp1.distance_to(wp2)
var ratio = target.position.distance_to(wp2) / ( target.position.distance_to(wp1) + target.position.distance_to(wp2) )
position = lerp( wp2 , wp1 , ratio )
#if len(waypoints)<2:
#pass
#elif len(waypoints) == 1:
#pass
#else:
#var wp1 = waypoints[0].position
#var wp2 = waypoints[1].position
##var ratio = wp2.distance_to( target.position )/wp1.distance_to(wp2)
#var ratio = target.position.distance_to(wp2) / ( target.position.distance_to(wp1) + target.position.distance_to(wp2) )
#position = lerp( wp2 , wp1 , ratio )
for i in waypoints:
pass
#print( i , " name:" + i.name , " pos:" + str(target.position.distance_to(i.position)) )
if target_pos != target.position:
factor = t.time_left / t.wait_time
print( t.wait_time, factor )
look_at( lerp( target.position , target_pos , pow( factor, easing ) ) + Vector3(0.0,0.70,0.0) )
func _on_timer_timeout():
target_pos = target.position
t.start()

Binary file not shown.

Binary file not shown.

@ -0,0 +1,7 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://cpx8gdyqdntn5"]
[ext_resource type="Shader" uid="uid://c1r07k4gw7q3w" path="res://Shaders/CHAR_SHD_Abe.tres" id="1_ejlbn"]
[resource]
render_priority = 0
shader = ExtResource("1_ejlbn")

@ -0,0 +1,7 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://b3q4c07bt6rra"]
[ext_resource type="Shader" uid="uid://dewwedodqpjub" path="res://Shaders/CHAR_SHD_AbeFace.tres" id="1_q4hts"]
[resource]
render_priority = 0
shader = ExtResource("1_q4hts")

@ -0,0 +1,138 @@
[gd_resource type="VisualShader" load_steps=16 format=3 uid="uid://c1r07k4gw7q3w"]
[ext_resource type="Texture2D" uid="uid://45tpikb0js5i" path="res://3d/models/textures/CHAR_Abe_emit.png" id="1_12cij"]
[ext_resource type="Texture2D" uid="uid://bi3cljuc4dicl" path="res://3d/models/textures/CHAR_Abe_diffuse.png" id="3_uxtot"]
[ext_resource type="Texture2D" uid="uid://dhdeki5r0pg63" path="res://3d/models/textures/CHAR_Abe_metal-CHAR_Abe_roughness.png" id="4_ihydq"]
[ext_resource type="Texture2D" uid="uid://bcilhv0vmo23e" path="res://3d/models/textures/CHAR_Abe_normal.png" id="5_wlfoi"]
[sub_resource type="VisualShaderNodeFloatConstant" id="VisualShaderNodeFloatConstant_ecx0m"]
constant = 0.2
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_fl837"]
input_name = "uv2"
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_p4c60"]
operator = 2
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_fya24"]
texture = ExtResource("1_12cij")
texture_type = 1
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_gndfb"]
texture = ExtResource("3_uxtot")
texture_type = 1
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_nomvq"]
texture = ExtResource("4_ihydq")
[sub_resource type="VisualShaderNodeVectorDecompose" id="VisualShaderNodeVectorDecompose_jkogv"]
output_port_for_preview = 1
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_ficjf"]
input_name = "uv"
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_63lrl"]
texture = ExtResource("5_wlfoi")
texture_type = 1
[sub_resource type="VisualShaderNodeFloatConstant" id="VisualShaderNodeFloatConstant_aakqf"]
constant = 0.5
[sub_resource type="VisualShaderNodeFloatConstant" id="VisualShaderNodeFloatConstant_trpxg"]
constant = 16.0
[resource]
code = "shader_type spatial;
render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_lambert, specular_schlick_ggx;
uniform sampler2D tex_frg_2 : source_color;
uniform sampler2D tex_frg_4;
uniform sampler2D tex_frg_13 : source_color;
uniform sampler2D tex_frg_7 : source_color;
void fragment() {
// Input:6
vec2 n_out6p0 = UV;
// Texture2D:2
vec4 n_out2p0 = texture(tex_frg_2, n_out6p0);
// Texture2D:4
vec4 n_out4p0 = texture(tex_frg_4, n_out6p0);
// VectorDecompose:5
float n_out5p0 = vec3(n_out4p0.xyz).x;
float n_out5p1 = vec3(n_out4p0.xyz).y;
float n_out5p2 = vec3(n_out4p0.xyz).z;
// Texture2D:13
vec4 n_out13p0 = texture(tex_frg_13, n_out6p0);
// Texture2D:7
vec4 n_out7p0 = texture(tex_frg_7, n_out6p0);
// FloatConstant:8
float n_out8p0 = 0.500000;
// FloatConstant:9
float n_out9p0 = 16.000000;
// Input:11
vec2 n_out11p0 = UV2;
// FloatOp:12
float n_out12p0 = n_out9p0 * n_out11p0.x;
// FloatConstant:10
float n_out10p0 = 0.200000;
// Output:0
ALBEDO = vec3(n_out2p0.xyz);
METALLIC = n_out5p2;
ROUGHNESS = n_out5p1;
EMISSION = vec3(n_out13p0.xyz);
NORMAL_MAP = vec3(n_out7p0.xyz);
NORMAL_MAP_DEPTH = n_out8p0;
CLEARCOAT = n_out12p0;
CLEARCOAT_ROUGHNESS = n_out10p0;
}
"
nodes/fragment/0/position = Vector2(940, 280)
nodes/fragment/2/node = SubResource("VisualShaderNodeTexture_gndfb")
nodes/fragment/2/position = Vector2(-320, -100)
nodes/fragment/4/node = SubResource("VisualShaderNodeTexture_nomvq")
nodes/fragment/4/position = Vector2(-320, 160)
nodes/fragment/5/node = SubResource("VisualShaderNodeVectorDecompose_jkogv")
nodes/fragment/5/position = Vector2(-80, 160)
nodes/fragment/6/node = SubResource("VisualShaderNodeInput_ficjf")
nodes/fragment/6/position = Vector2(-900, 300)
nodes/fragment/7/node = SubResource("VisualShaderNodeTexture_63lrl")
nodes/fragment/7/position = Vector2(-320, 440)
nodes/fragment/8/node = SubResource("VisualShaderNodeFloatConstant_aakqf")
nodes/fragment/8/position = Vector2(-140, 940)
nodes/fragment/9/node = SubResource("VisualShaderNodeFloatConstant_trpxg")
nodes/fragment/9/position = Vector2(-140, 640)
nodes/fragment/10/node = SubResource("VisualShaderNodeFloatConstant_ecx0m")
nodes/fragment/10/position = Vector2(180, 780)
nodes/fragment/11/node = SubResource("VisualShaderNodeInput_fl837")
nodes/fragment/11/position = Vector2(-240, 720)
nodes/fragment/12/node = SubResource("VisualShaderNodeFloatOp_p4c60")
nodes/fragment/12/position = Vector2(220, 580)
nodes/fragment/13/node = SubResource("VisualShaderNodeTexture_fya24")
nodes/fragment/13/position = Vector2(-460, 760)
nodes/fragment/connections = PackedInt32Array(4, 0, 5, 0, 2, 0, 0, 0, 5, 2, 0, 2, 5, 1, 0, 3, 7, 0, 0, 9, 8, 0, 0, 10, 6, 0, 2, 0, 6, 0, 4, 0, 6, 0, 7, 0, 10, 0, 0, 14, 9, 0, 12, 0, 11, 0, 12, 1, 12, 0, 0, 13, 6, 0, 13, 0, 13, 0, 0, 5)

@ -0,0 +1,216 @@
[gd_resource type="VisualShader" load_steps=22 format=3 uid="uid://dewwedodqpjub"]
[ext_resource type="Texture2D" uid="uid://c7g1lervup6pt" path="res://3d/models/textures/CHAR_AbeFace_emit.png" id="1_i27k8"]
[sub_resource type="VisualShaderNodeVectorDecompose" id="VisualShaderNodeVectorDecompose_d6qq4"]
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_elov7"]
default_input_values = [0, 0.0, 1, 0.063]
operator = 4
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_terno"]
default_input_values = [0, 0.0, 1, 16.0]
operator = 2
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_t2rfa"]
default_input_values = [0, 0.0, 1, 16.0]
operator = 2
[sub_resource type="Curve" id="Curve_xwnuv"]
_data = [Vector2(0.1, 0), 0.0, 0.0, 0, 0, Vector2(0.1, 1), inf_neg, 0.0, 1, 1, Vector2(0.9, 1), 0.0, 1.0, 1, 0, Vector2(0.9, 0), 0.0, inf_neg, 0, 1]
point_count = 4
[sub_resource type="CurveTexture" id="CurveTexture_gyi8v"]
curve = SubResource("Curve_xwnuv")
[sub_resource type="VisualShaderNodeCurveTexture" id="VisualShaderNodeCurveTexture_4kyr2"]
texture = SubResource("CurveTexture_gyi8v")
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_4i6vu"]
output_port_for_preview = 0
operator = 2
[sub_resource type="VisualShaderNodeVectorCompose" id="VisualShaderNodeVectorCompose_0m68h"]
op_type = 0
[sub_resource type="VisualShaderNodeVectorDecompose" id="VisualShaderNodeVectorDecompose_n0bop"]
default_input_values = [0, Vector2(0, 0)]
op_type = 0
[sub_resource type="VisualShaderNodeVectorDecompose" id="VisualShaderNodeVectorDecompose_ljdly"]
output_port_for_preview = 3
default_input_values = [0, Quaternion(0, 0, 0, 0)]
op_type = 2
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_73meh"]
output_port_for_preview = 0
texture = ExtResource("1_i27k8")
texture_type = 1
[sub_resource type="VisualShaderNodeTexture2DParameter" id="VisualShaderNodeTexture2DParameter_1mc6n"]
parameter_name = "Texture2DParameter"
texture_filter = 1
texture_source = 1
[sub_resource type="VisualShaderNodeCurveTexture" id="VisualShaderNodeCurveTexture_hhrdd"]
texture = SubResource("CurveTexture_gyi8v")
[sub_resource type="VisualShaderNodeMix" id="VisualShaderNodeMix_4bp17"]
output_port_for_preview = 0
[sub_resource type="VisualShaderNodeColorConstant" id="VisualShaderNodeColorConstant_4wfcn"]
constant = Color(0, 0, 0, 1)
[sub_resource type="VisualShaderNodeMix" id="VisualShaderNodeMix_6vexp"]
default_input_values = [0, Vector3(0, 0, 0), 1, Vector3(1, 1, 1), 2, Vector3(0.5, 0.5, 0.5)]
op_type = 3
[sub_resource type="VisualShaderNodeColorConstant" id="VisualShaderNodeColorConstant_tbf24"]
constant = Color(2.49804, 1.28235, 0, 1)
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_tmgrx"]
input_name = "uv2"
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_4ty6k"]
default_input_values = [0, 0.0, 1, 0.063]
operator = 4
[resource]
code = "shader_type spatial;
render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_lambert, specular_schlick_ggx;
uniform sampler2D Texture2DParameter : filter_nearest, hint_screen_texture;
uniform sampler2D tex_frg_24 : source_color;
uniform sampler2D curve_frg_26 : repeat_disable;
uniform sampler2D curve_frg_14 : repeat_disable;
void fragment() {
// ColorConstant:28
vec4 n_out28p0 = vec4(0.000000, 0.000000, 0.000000, 1.000000);
// Input:6
vec2 n_out6p0 = UV2;
// VectorDecompose:17
float n_out17p0 = n_out6p0.x;
float n_out17p1 = n_out6p0.y;
// VectorCompose:16
vec2 n_out16p0 = vec2(n_out17p0, n_out17p1);
// Texture2D:24
vec4 n_out24p0 = texture(tex_frg_24, n_out16p0);
// VectorDecompose:22
float n_out22p0 = n_out24p0.x;
float n_out22p1 = n_out24p0.y;
float n_out22p2 = n_out24p0.z;
float n_out22p3 = n_out24p0.w;
// VectorDecompose:10
float n_out10p0 = vec3(n_out6p0, 0.0).x;
float n_out10p1 = vec3(n_out6p0, 0.0).y;
float n_out10p2 = vec3(n_out6p0, 0.0).z;
// FloatOp:11
float n_in11p1 = 0.06300;
float n_out11p0 = mod(n_out10p1, n_in11p1);
// FloatOp:13
float n_in13p1 = 16.00000;
float n_out13p0 = n_out11p0 * n_in13p1;
// CurveTexture:26
float n_out26p0 = texture(curve_frg_26, vec2(n_out13p0)).r;
// FloatOp:9
float n_in9p1 = 0.06300;
float n_out9p0 = mod(n_out10p0, n_in9p1);
// FloatOp:12
float n_in12p1 = 16.00000;
float n_out12p0 = n_out9p0 * n_in12p1;
// CurveTexture:14
float n_out14p0 = texture(curve_frg_14, vec2(n_out12p0)).r;
// FloatOp:15
float n_out15p0 = n_out26p0 * n_out14p0;
// Mix:27
float n_in27p0 = 0.00000;
float n_out27p0 = mix(n_in27p0, n_out22p3, n_out15p0);
// ColorConstant:5
vec4 n_out5p0 = vec4(2.498040, 1.282350, 0.000000, 1.000000);
// Mix:4
vec3 n_in4p0 = vec3(0.00000, 0.00000, 0.00000);
vec3 n_out4p0 = mix(n_in4p0, vec3(n_out5p0.xyz), vec3(n_out27p0));
// Output:0
ALBEDO = vec3(n_out28p0.xyz);
ALPHA = n_out27p0;
EMISSION = n_out4p0;
DEPTH = n_out27p0;
}
"
nodes/fragment/0/position = Vector2(1720, -480)
nodes/fragment/4/node = SubResource("VisualShaderNodeMix_6vexp")
nodes/fragment/4/position = Vector2(1120, 360)
nodes/fragment/5/node = SubResource("VisualShaderNodeColorConstant_tbf24")
nodes/fragment/5/position = Vector2(660, 480)
nodes/fragment/6/node = SubResource("VisualShaderNodeInput_tmgrx")
nodes/fragment/6/position = Vector2(-1339.8, 488.2)
nodes/fragment/9/node = SubResource("VisualShaderNodeFloatOp_4ty6k")
nodes/fragment/9/position = Vector2(-439.8, 48.2)
nodes/fragment/10/node = SubResource("VisualShaderNodeVectorDecompose_d6qq4")
nodes/fragment/10/position = Vector2(-699.8, 168.2)
nodes/fragment/11/node = SubResource("VisualShaderNodeFloatOp_elov7")
nodes/fragment/11/position = Vector2(-439.8, 168.2)
nodes/fragment/12/node = SubResource("VisualShaderNodeFloatOp_terno")
nodes/fragment/12/position = Vector2(-279.8, 28.2)
nodes/fragment/13/node = SubResource("VisualShaderNodeFloatOp_t2rfa")
nodes/fragment/13/position = Vector2(-279.8, 148.2)
nodes/fragment/14/node = SubResource("VisualShaderNodeCurveTexture_4kyr2")
nodes/fragment/14/position = Vector2(-99.8, -111.8)
nodes/fragment/15/node = SubResource("VisualShaderNodeFloatOp_4i6vu")
nodes/fragment/15/position = Vector2(300.2, 48.2)
nodes/fragment/16/node = SubResource("VisualShaderNodeVectorCompose_0m68h")
nodes/fragment/16/position = Vector2(-239.8, 428.2)
nodes/fragment/17/node = SubResource("VisualShaderNodeVectorDecompose_n0bop")
nodes/fragment/17/position = Vector2(-799.8, 448.2)
nodes/fragment/22/node = SubResource("VisualShaderNodeVectorDecompose_ljdly")
nodes/fragment/22/position = Vector2(340.2, 468.2)
nodes/fragment/24/node = SubResource("VisualShaderNodeTexture_73meh")
nodes/fragment/24/position = Vector2(60.2, 488.2)
nodes/fragment/25/node = SubResource("VisualShaderNodeTexture2DParameter_1mc6n")
nodes/fragment/25/position = Vector2(-620, 680)
nodes/fragment/26/node = SubResource("VisualShaderNodeCurveTexture_hhrdd")
nodes/fragment/26/position = Vector2(-99.8, 148.2)
nodes/fragment/27/node = SubResource("VisualShaderNodeMix_4bp17")
nodes/fragment/27/position = Vector2(620, 140)
nodes/fragment/28/node = SubResource("VisualShaderNodeColorConstant_4wfcn")
nodes/fragment/28/position = Vector2(1365.81, -489.417)
nodes/fragment/connections = PackedInt32Array(25, 0, 24, 2, 24, 0, 22, 0, 5, 0, 4, 1, 6, 0, 10, 0, 10, 0, 9, 0, 10, 1, 11, 0, 9, 0, 12, 0, 11, 0, 13, 0, 12, 0, 14, 0, 13, 0, 26, 0, 26, 0, 15, 0, 14, 0, 15, 1, 6, 0, 17, 0, 17, 1, 16, 1, 16, 0, 24, 0, 17, 0, 16, 0, 15, 0, 27, 2, 22, 3, 27, 1, 27, 0, 4, 2, 27, 0, 0, 1, 4, 0, 0, 5, 28, 0, 0, 0, 27, 0, 0, 23)

@ -0,0 +1,7 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://o47otplapfan"]
[ext_resource type="Shader" uid="uid://ct38forho5n4j" path="res://Shaders/LVL_SHD_Dojo.tres" id="1_epuwb"]
[resource]
render_priority = 0
shader = ExtResource("1_epuwb")

@ -0,0 +1,67 @@
[gd_resource type="VisualShader" load_steps=6 format=3 uid="uid://ct38forho5n4j"]
[ext_resource type="Texture2D" uid="uid://cj3ncv0ep6gcp" path="res://3d/models/textures/LVL_Dojo_grid.jpg" id="1_1ynut"]
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_ipci5"]
texture = ExtResource("1_1ynut")
texture_type = 1
[sub_resource type="VisualShaderNodeVectorDecompose" id="VisualShaderNodeVectorDecompose_0onfs"]
[sub_resource type="VisualShaderNodeVectorCompose" id="VisualShaderNodeVectorCompose_h2oi5"]
[sub_resource type="VisualShaderNodeRemap" id="VisualShaderNodeRemap_m8jn0"]
[resource]
code = "shader_type spatial;
render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_lambert, specular_schlick_ggx;
uniform sampler2D tex_frg_2 : source_color;
void fragment() {
// Texture2D:2
vec4 n_out2p0 = texture(tex_frg_2, UV);
// VectorDecompose:3
float n_out3p0 = vec3(n_out2p0.xyz).x;
float n_out3p1 = vec3(n_out2p0.xyz).y;
float n_out3p2 = vec3(n_out2p0.xyz).z;
// VectorCompose:4
vec3 n_out4p0 = vec3(n_out3p0, n_out3p0, n_out3p0);
float n_out5p0;
// Remap:5
float n_in5p1 = 0.00000;
float n_in5p2 = 1.00000;
float n_in5p3 = 0.00000;
float n_in5p4 = 1.00000;
{
float __input_range = n_in5p2 - n_in5p1;
float __output_range = n_in5p4 - n_in5p3;
n_out5p0 = n_in5p3 + __output_range * ((n_out4p0.x - n_in5p1) / __input_range);
}
// Output:0
ALBEDO = n_out4p0;
ROUGHNESS = n_out5p0;
}
"
nodes/fragment/0/position = Vector2(720, 100)
nodes/fragment/2/node = SubResource("VisualShaderNodeTexture_ipci5")
nodes/fragment/2/position = Vector2(-460, 220)
nodes/fragment/3/node = SubResource("VisualShaderNodeVectorDecompose_0onfs")
nodes/fragment/3/position = Vector2(0, 100)
nodes/fragment/4/node = SubResource("VisualShaderNodeVectorCompose_h2oi5")
nodes/fragment/4/position = Vector2(260, 120)
nodes/fragment/5/node = SubResource("VisualShaderNodeRemap_m8jn0")
nodes/fragment/5/position = Vector2(440, 260)
nodes/fragment/connections = PackedInt32Array(2, 0, 3, 0, 3, 0, 4, 0, 3, 0, 4, 1, 3, 0, 4, 2, 4, 0, 0, 0, 4, 0, 5, 0, 5, 0, 0, 3)

@ -0,0 +1,3 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://b6gfyuvl8423f"]
[resource]

@ -0,0 +1,26 @@
[gd_resource type="VisualShader" load_steps=2 format=3 uid="uid://do64lk1u6jf17"]
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_ofnfe"]
input_name = "color"
[resource]
code = "shader_type spatial;
render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_lambert, specular_schlick_ggx;
void fragment() {
// Input:3
vec4 n_out3p0 = COLOR;
// Output:0
ALBEDO = vec3(n_out3p0.xyz);
}
"
nodes/fragment/3/node = SubResource("VisualShaderNodeInput_ofnfe")
nodes/fragment/3/position = Vector2(-140, 280)
nodes/fragment/connections = PackedInt32Array(3, 0, 0, 0)

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
<g transform="matrix(0.785928,0,0,0.796326,1.23126,1.65589)">
<path d="M8,0L0,0L0,16L16,16L16,8" style="fill:none;stroke:rgb(224,224,224);stroke-width:2.63px;"/>
</g>
<g transform="matrix(0.97399,0.0268552,0.0268552,0.972272,-0.215329,0.222325)">
<path d="M4.893,11.105L14.919,1.062" style="fill:none;stroke:rgb(224,224,224);stroke-width:2.08px;"/>
</g>
<g transform="matrix(1.49932,0,0,1.58615,-6.13491,-1.95252)">
<path d="M14.763,4.334C14.763,4.49 14.664,4.631 14.511,4.691C14.358,4.751 14.181,4.718 14.064,4.607C13.271,3.858 11.985,2.642 11.191,1.892C11.074,1.781 11.039,1.615 11.103,1.47C11.166,1.325 11.315,1.231 11.481,1.231C12.391,1.231 13.698,1.231 14.354,1.231C14.58,1.231 14.763,1.404 14.763,1.618C14.763,2.238 14.763,3.473 14.763,4.334Z" style="fill:rgb(224,224,224);"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/ExternalLink.svg-68da2553f64c9b2f7a0ae4a9502e3475.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/texture_fonts/Assets/ExternalLink.svg"
dest_files=[ "res://.import/ExternalLink.svg-68da2553f64c9b2f7a0ae4a9502e3475.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g><g transform="matrix(1.14286,0,0,1.11731,-1.14286,-1.11731)"><path d="M15,1.895C15,1.401 14.608,1 14.125,1L1.875,1C1.392,1 1,1.401 1,1.895L1,14.425C1,14.919 1.392,15.32 1.875,15.32L14.125,15.32C14.608,15.32 15,14.919 15,14.425L15,1.895ZM13.25,2.79L13.25,11.74C13.25,11.74 2.75,11.74 2.75,11.74C2.75,11.74 2.75,2.79 2.75,2.79L13.25,2.79Z" style="fill:rgb(224,224,224);"/></g><g transform="matrix(0.6257,0,0,0.6257,3.62158,1.67975)"><path d="M4.122,15.761L4.122,13.668L4.123,13.668C4.504,13.668 4.87,13.517 5.139,13.247C5.409,12.978 5.56,12.612 5.56,12.231C5.56,9.364 5.56,3.205 5.56,3.205L4.409,3.205C3.986,3.205 3.579,3.373 3.28,3.673C2.981,3.972 2.812,4.378 2.812,4.802C2.812,5.088 2.812,5.298 2.812,5.298L0.959,5.298L0.959,1.112L13.036,1.112L13.036,5.298L11.183,5.298L11.183,4.802C11.183,4.378 11.015,3.972 10.715,3.673C10.416,3.373 10.01,3.205 9.586,3.205C8.981,3.205 8.435,3.205 8.435,3.205L8.435,12.231C8.435,12.612 8.587,12.978 8.856,13.247C9.126,13.517 9.491,13.668 9.872,13.668C9.873,13.668 9.873,13.668 9.873,13.668L9.873,15.761L4.122,15.761Z" style="fill:rgb(224,224,224);fill-rule:nonzero;"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/TextureFont.svg-adef2debb7c79848948a2b7635388fbc.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/texture_fonts/Assets/TextureFont.svg"
dest_files=[ "res://.import/TextureFont.svg-adef2debb7c79848948a2b7635388fbc.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

Binary file not shown.

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/TransparentBG.png-3af58a3dff736086211bd6d5a3d9251d.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/texture_fonts/Assets/TransparentBG.png"
dest_files=[ "res://.import/TransparentBG.png-3af58a3dff736086211bd6d5a3d9251d.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/TransparentBG_small.png-831547cc9a7eea4c3d8547ee68a417be.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/texture_fonts/Assets/TransparentBG_small.png"
dest_files=[ "res://.import/TransparentBG_small.png-831547cc9a7eea4c3d8547ee68a417be.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

@ -0,0 +1,147 @@
tool
extends BitmapFont
class_name TextureFont, "res://addons/texture_fonts/Assets/TextureFont.svg"
var _texture_mappings: Array
var _font_settings
const default_texture_mappings := {
rect_size = Vector2(14, 14),
rect_gap = Vector2(1, 1),
texture_offset = Vector2(1, 1),
chars = \
"""abcdefgh
ijklmnop
qrstuvwx
yz.,!?" """
}
func _init():
_font_settings = load("res://addons/texture_fonts/Classes/TextureFontSettings.gd").new()
func get_class():
return "TextureFont"
func add_texture(texture: Texture) -> void:
.add_texture(texture)
var mapping = load("res://addons/texture_fonts/Classes/TextureFontMapping.gd").new()
mapping.set_texture(texture)
mapping.rect_size = default_texture_mappings.rect_size
mapping.rect_gap = default_texture_mappings.rect_gap
mapping.texture_offset = default_texture_mappings.texture_offset
mapping.chars = default_texture_mappings.chars
self.texture_mappings.append(mapping)
func remove_texture(index: int) -> void:
self.texture_mappings.remove(index)
func build_font():
var height = self.height
var ascent = self.ascent
var distance_field = self.distance_field
var fallback = self.fallback
.clear()
var mono: bool = self.font_settings.monospace
var h_align: int = self.font_settings.horizontal_align
var v_align: int = self.font_settings.vertical_align
var gap: int = self.font_settings.gap
var is_space_defined := false
for i in _texture_mappings.size():
var mapping = _texture_mappings[i]
.add_texture(mapping.scaled_texture)
var char_codes = mapping.char_codes
for line in char_codes:
for code in line:
if code == 32:
is_space_defined = true
var rect
if mono:
rect = mapping.get_char_rect(code)
else:
rect = mapping.get_cropped_char_rect(code)
if rect == null:
continue
var char_setting = _font_settings.get_setting(code)
var align = char_setting.offset
var advance = rect.size.x + char_setting.advance + gap
align.x += h_align
align.y += v_align
add_char(code, i, rect, align, advance)
# add empty space char
if not is_space_defined and not fallback and _texture_mappings.size() > 0:
var char_setting = _font_settings.get_setting(32)
var extra_space := 0
if mono:
extra_space = _texture_mappings[0].rect_size.x * _texture_mappings[0].scale
var advance = char_setting.advance + extra_space + gap
var rect := Rect2(0,0,0,0)
add_char(32, 0, rect, Vector2.ZERO, advance)
self.height = height
self.ascent = ascent
self.distance_field = distance_field
self.fallback = fallback
var kerning_pairs = _font_settings.solve_kerning_pairs()
for pair in kerning_pairs:
add_kerning_pair(pair.char_a, pair.char_b, pair.kerning)
emit_signal("changed")
func _get_property_list():
var props = [
{
name = "texture_mappings",
usage = PROPERTY_USAGE_NOEDITOR,
type = TYPE_RAW_ARRAY
},
{
name = "font_settings",
usage = PROPERTY_USAGE_NOEDITOR,
type = TYPE_NIL
}
]
return props
func _get(property: String):
match property:
"texture_mappings":
return _texture_mappings
"font_settings":
return _font_settings
func _set(property: String, val):
match property:
"texture_mappings":
_texture_mappings = val
"font_settings":
_font_settings = val

@ -0,0 +1,192 @@
tool
extends Resource
var char_utils := preload("../Util/CharUtils.gd").new()
export var source_texture: Texture
export var scaled_texture: Texture
func set_texture(new_texture):
source_texture = new_texture
scaled_texture = get_scaled_texture()
func get_texture():
return scaled_texture
export var rect_size: Vector2
export var rect_gap: Vector2
export var texture_offset: Vector2
export var scale := 1 setget set_scale, get_scale
func set_scale(new_scale):
scale = new_scale
scaled_texture = get_scaled_texture()
func get_scale():
return scale
export var interpolation := Image.INTERPOLATE_NEAREST setget set_interpolation, get_interpolation
func set_interpolation(new_in):
interpolation = new_in
scaled_texture = get_scaled_texture()
func get_interpolation():
return interpolation
export var chars: String setget set_chars, get_chars
func set_chars(new_chars):
chars = new_chars
char_codes = char_utils.chars_to_codes(new_chars)
func get_chars():
return chars
# 2d Array containing int char codes
var char_codes: Array
func get_scaled_texture() -> Texture:
if scale == 1:
return source_texture
var size := source_texture.get_size()
var flags := source_texture.flags
var scaled = size * scale
if scaled.x > 16384 or scaled.y > 16384:
push_error("Could not Upscale Texture! Texture too large")
return source_texture
var img := source_texture.get_data()
img.resize(scaled.x, scaled.y, interpolation)
var tex = ImageTexture.new()
tex.create_from_image(img, flags)
return tex
func get_char_width(char_code: int) -> int:
if char_codes.find(char_code) == -1:
return -1
var rect = get_char_rect(char_code)
return rect.size.x
func get_char_pos(char_code: int):
for i in char_codes.size():
var line = char_codes[i]
var pos = line.find(char_code)
if pos == -1:
continue
else:
return Vector2(pos, i)
return null
func _get_char_rect_unscaled(char_code: int):
var pos: Vector2 = get_char_pos(char_code)
if pos == null:
return null
var rect := Rect2(
(rect_size + rect_gap) * pos + texture_offset,
rect_size
)
var texture_size := source_texture.get_size()
if rect.end.x > texture_size.x or rect.end.y > texture_size.y:
return null
return rect
func get_char_rect(char_code: int):
var rect = _get_char_rect_unscaled(char_code)
if rect == null:
return null
rect.position *= scale
rect.size *= scale
return rect
func get_cropped_char_rect(char_code: int):
var rect = _get_char_rect_unscaled(char_code)
if rect == null:
return null
var empty_left := _scan_empty_pixels(
rect.position.x, rect.position.x + rect.size.x,
rect.position.y, rect.position.y + rect.size.y)
rect.position.x += empty_left
rect.size.x -= empty_left
if rect.size.x == 0:
return rect
var empty_right := _scan_empty_pixels(
rect.position.x + rect.size.x - 1, rect.position.x - 1,
rect.position.y, rect.position.y + rect.size.y)
rect.size.x -= empty_right
rect.position *= scale
rect.size *= scale
return rect
# returns number of empty collumns
func _scan_empty_pixels(from_x: int, to_x: int, from_y: int, to_y: int) -> int:
var img_data := source_texture.get_data()
img_data.lock()
var c = 0
var dir = 1
if from_x > to_x:
dir = -1
for x in range(from_x, to_x, dir):
for y in range(from_y, to_y):
var pix := img_data.get_pixel(x, y)
if pix.a != 0.0:
return c
c += 1
img_data.unlock()
return c
func get_local_position(position: Vector2) -> Vector2:
var pos = ((position - texture_offset * scale) / ((rect_size + rect_gap) * scale)).floor()
return pos
func get_char_at_position(position: Vector2) -> String:
var tex_size = scaled_texture.get_size()
if position.x < 0.0 or position.y < 0.0 or position.x > tex_size.x or position.y > tex_size.y:
return ""
var pos = get_local_position(position)
if pos.y >= char_codes.size() or pos.y < 0:
return ""
var line: Array = char_codes[pos.y]
if pos.x >= line.size() or pos.x < 0:
return ""
return char(line[pos.x])
func get_rect_for_position(position: Vector2):
var tex_size = scaled_texture.get_size()
if position.x < 0.0 or position.y < 0.0 or position.x > tex_size.x or position.y > tex_size.y:
return null
var pos = get_local_position(position)
return Rect2(
((rect_size + rect_gap) * pos + texture_offset) * scale,
rect_size * scale
)

@ -0,0 +1,168 @@
tool
extends Resource
var char_utils := preload("../Util/CharUtils.gd").new()
# {
# for_char: String = {
# advance: int,
# offset: Vector2
# }
# }
export var char_settings: Dictionary
# [
# {
# from: String,
# to: String,
# kerning: int
# }
# ]
export var kerning_pairs: Array
export var gap := 2
export var horizontal_align := 1
export var vertical_align := 0
export var monospace := false
export var preview_color: Color = Color("202431")
export var preview_chars: String
func get_default_setting():
return {
advance = 0.0,
offset = Vector2.ZERO
}
func _init():
char_settings = {}
kerning_pairs = []
# ------ Settings Functions ------
func add_setting(for_char: String) -> Dictionary:
char_settings[for_char] = {
advance = 0.0,
offset = Vector2.ZERO
}
return char_settings[for_char]
func insert_setting(for_char: String, setting: Dictionary):
char_settings[for_char] = setting
func remove_setting(for_char: String):
if char_settings.has(for_char):
char_settings.erase(for_char)
func set_setting(for_char: String, advance: int, offset: Vector2):
char_settings[for_char] = {
advance = advance,
offset = offset
}
func get_setting(char_code: int):
if char_code == -1:
return get_default_setting()
for char_string in char_settings:
var char_codes: Array = char_utils.chars_to_codes(char_string).front()
if char_code in char_codes:
return char_settings[char_string]
return get_default_setting()
func set_advance(for_char: String, advance: int):
if not char_settings.has(for_char):
add_setting(for_char)
char_settings[for_char].advance = advance
func set_offset(for_char: String, offset: Vector2):
if not char_settings.has(for_char):
add_setting(for_char)
char_settings[for_char].offset = offset
func get_advance(for_char: String):
if char_settings.has(for_char):
return char_settings[for_char].advance
else:
return 0.0
func get_offset(for_char: String):
if char_settings.has(for_char):
return char_settings[for_char].offset
else:
return Vector2.ZERO
# ------ Kerning Pair Functions ------
func add_kerning_pair() -> Dictionary:
var new_pair = {
from = "",
to = "",
kerning = 0
}
kerning_pairs.append(new_pair)
return new_pair
func insert_kerning_pair(idx: int, new_kerning: Dictionary):
kerning_pairs.insert(idx, new_kerning)
func remove_kerning_pair(idx: int):
kerning_pairs.remove(idx)
func set_kerning_pair(idx: int, new_kerning: Dictionary):
kerning_pairs[idx] = new_kerning
func set_kerning_pair_from(idx: int, new_from: String):
kerning_pairs[idx].from = new_from
func set_kerning_pair_to(idx: int, new_to: String):
kerning_pairs[idx].to = new_to
func set_kerning_pair_kerning(idx: int, new_kerning: int):
kerning_pairs[idx].kerning = new_kerning
func get_kerning_pair(idx: int) -> Dictionary:
return kerning_pairs[idx]
func solve_kerning_pairs() -> Array:
var solved_list := []
for pair in kerning_pairs:
if pair.from == "" or pair.to == "" or pair.kerning == 0:
continue
var from_array: Array = char_utils.chars_to_codes(pair.from).front()
var to_array: Array = char_utils.chars_to_codes(pair.to).front()
for a in from_array:
for b in to_array:
solved_list.append({
char_a = a,
char_b = b,
kerning = pair.kerning
})
return solved_list

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Laila L. (ElectronicBlueberry)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -0,0 +1,61 @@
tool
extends VBoxContainer
signal change
signal delete
var font_settings
var for_char: String
onready var char_edit := $Heading/Char
onready var advance := $MarginContainer/HBoxContainer/VBoxContainer/SpinBox
onready var offset := $MarginContainer/HBoxContainer/Vector2Edit
func _ready():
if for_char:
char_edit.text = for_char
advance.value = font_settings.get_advance(for_char)
offset.value = font_settings.get_offset(for_char)
func _on_DeleteButton_pressed():
emit_signal("delete", self)
func _on_Char_text_changed(to_char: String):
# if char is emptied
if to_char.length() == 0:
if for_char:
font_settings.remove_setting(for_char)
emit_signal("change")
return
# char allready exists, ignore
if to_char in font_settings.char_settings:
return
# if char was set before, delete old entry
if for_char:
font_settings.remove_setting(for_char)
# add new char setting
font_settings.add_setting(to_char)
font_settings.set_setting(to_char, advance.value, offset.value)
for_char = to_char
emit_signal("change")
func _on_SpinBox_value_changed(value):
if for_char:
font_settings.set_advance(for_char, value)
emit_signal("change")
func _on_Vector2Edit_value_changed(value):
if for_char:
font_settings.set_offset(for_char, value)
emit_signal("change")

@ -0,0 +1,102 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://addons/texture_fonts/UI/Components/Vector2Edit.tscn" type="PackedScene" id=1]
[ext_resource path="res://addons/texture_fonts/UI/Components/CharSetting.gd" type="Script" id=2]
[node name="CharSetting" type="VBoxContainer"]
anchor_right = 0.326172
anchor_bottom = 0.117
margin_bottom = -40.1998
script = ExtResource( 2 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Heading" type="HBoxContainer" parent="."]
margin_right = 341.0
margin_bottom = 24.0
[node name="Label" type="Label" parent="Heading"]
margin_top = 5.0
margin_right = 17.0
margin_bottom = 19.0
text = "for"
[node name="Char" type="LineEdit" parent="Heading"]
margin_left = 21.0
margin_right = 149.0
margin_bottom = 24.0
rect_min_size = Vector2( 128, 0 )
placeholder_text = "char(s)"
caret_blink = true
caret_blink_speed = 0.5
[node name="HSeparator" type="Control" parent="Heading"]
margin_left = 153.0
margin_right = 282.0
margin_bottom = 24.0
size_flags_horizontal = 3
[node name="DeleteButton" type="Button" parent="Heading"]
margin_left = 286.0
margin_right = 341.0
margin_bottom = 24.0
text = "Delete"
[node name="MarginContainer" type="MarginContainer" parent="."]
margin_top = 28.0
margin_right = 341.0
margin_bottom = 70.0
custom_constants/margin_right = 8
custom_constants/margin_left = 8
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"]
margin_left = 8.0
margin_right = 333.0
margin_bottom = 42.0
size_flags_horizontal = 3
custom_constants/separation = 8
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/HBoxContainer"]
margin_right = 134.0
margin_bottom = 42.0
size_flags_horizontal = 3
[node name="Heading" type="HBoxContainer" parent="MarginContainer/HBoxContainer/VBoxContainer"]
margin_right = 134.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="MarginContainer/HBoxContainer/VBoxContainer/Heading"]
margin_right = 54.0
margin_bottom = 14.0
text = "Advance"
[node name="HSeparator" type="HSeparator" parent="MarginContainer/HBoxContainer/VBoxContainer/Heading"]
margin_left = 58.0
margin_right = 134.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="SpinBox" type="SpinBox" parent="MarginContainer/HBoxContainer/VBoxContainer"]
margin_top = 18.0
margin_right = 134.0
margin_bottom = 42.0
min_value = -100.0
[node name="Vector2Edit" parent="MarginContainer/HBoxContainer" instance=ExtResource( 1 )]
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 142.0
margin_right = 325.0
margin_bottom = 42.0
size_flags_horizontal = 3
min_value = Vector2( -4096, -4096 )
max_value = Vector2( 4096, 4096 )
value = Vector2( 0, 0 )
label = "Offset"
[connection signal="text_changed" from="Heading/Char" to="." method="_on_Char_text_changed"]
[connection signal="pressed" from="Heading/DeleteButton" to="." method="_on_DeleteButton_pressed"]
[connection signal="value_changed" from="MarginContainer/HBoxContainer/VBoxContainer/SpinBox" to="." method="_on_SpinBox_value_changed"]
[connection signal="value_changed" from="MarginContainer/HBoxContainer/Vector2Edit" to="." method="_on_Vector2Edit_value_changed"]

@ -0,0 +1,45 @@
tool
extends MarginContainer
signal file_removed
signal file_changed
onready var name_label := $MarginContainer/HBoxContainer/ClipLabel/Label
onready var preview := $MarginContainer/HBoxContainer/ImageContainer/TexturePreview
onready var panel := $Panel
var texture: Texture
onready var selected := false setget set_selected, get_selected
var _selected: bool
func set_selected(new_selected: bool):
_selected = new_selected
if not is_inside_tree():
return
var stylebox: StyleBoxFlat = panel.get("custom_styles/panel")
if new_selected:
stylebox.bg_color.a = 0.2
stylebox.border_color.a = 0.2
else:
stylebox.bg_color.a = 0.0
stylebox.border_color.a = 0.0
func get_selected() -> bool:
return _selected
func set_texture(new_texture: Texture):
if is_inside_tree():
name_label.text = new_texture.resource_path
preview.texture = new_texture
texture = new_texture
func _on_DeleteButton_pressed():
emit_signal("file_removed", self)
self.queue_free()
func _on_ToolButton_pressed():
emit_signal("file_changed", self)
self.selected = true

@ -0,0 +1,123 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://addons/texture_fonts/Assets/TransparentBG_small.png" type="Texture" id=1]
[ext_resource path="res://addons/texture_fonts/UI/Components/File.gd" type="Script" id=2]
[sub_resource type="StyleBoxFlat" id=1]
resource_local_to_scene = true
bg_color = Color( 0.376471, 0.392157, 0.509804, 0 )
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
border_color = Color( 0.823529, 0.894118, 0.87451, 0 )
[node name="File" type="MarginContainer"]
anchor_right = 0.292
anchor_bottom = 0.1
margin_right = -0.00802612
mouse_filter = 2
size_flags_horizontal = 3
script = ExtResource( 2 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Panel" type="Panel" parent="."]
margin_right = 298.0
margin_bottom = 60.0
mouse_filter = 2
custom_styles/panel = SubResource( 1 )
[node name="ToolButton" type="ToolButton" parent="."]
margin_right = 298.0
margin_bottom = 60.0
[node name="MarginContainer" type="MarginContainer" parent="."]
margin_right = 298.0
margin_bottom = 60.0
mouse_filter = 2
custom_constants/margin_right = 6
custom_constants/margin_top = 6
custom_constants/margin_left = 6
custom_constants/margin_bottom = 6
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"]
margin_left = 6.0
margin_top = 6.0
margin_right = 292.0
margin_bottom = 54.0
mouse_filter = 2
size_flags_horizontal = 3
__meta__ = {
"_edit_use_anchors_": false
}
[node name="ImageContainer" type="MarginContainer" parent="MarginContainer/HBoxContainer"]
margin_right = 48.0
margin_bottom = 48.0
mouse_filter = 2
[node name="TextureRect" type="TextureRect" parent="MarginContainer/HBoxContainer/ImageContainer"]
margin_right = 48.0
margin_bottom = 48.0
rect_min_size = Vector2( 48, 48 )
mouse_filter = 2
size_flags_horizontal = 5
size_flags_vertical = 4
texture = ExtResource( 1 )
expand = true
stretch_mode = 2
[node name="TexturePreview" type="TextureRect" parent="MarginContainer/HBoxContainer/ImageContainer"]
margin_right = 48.0
margin_bottom = 48.0
rect_min_size = Vector2( 48, 48 )
mouse_filter = 2
size_flags_horizontal = 5
size_flags_vertical = 4
expand = true
stretch_mode = 6
[node name="ClipLabel" type="Control" parent="MarginContainer/HBoxContainer"]
margin_left = 52.0
margin_right = 227.0
margin_bottom = 48.0
rect_clip_content = true
mouse_filter = 2
size_flags_horizontal = 3
size_flags_vertical = 7
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Label" type="Label" parent="MarginContainer/HBoxContainer/ClipLabel"]
anchor_bottom = 1.0
margin_top = 12.0
margin_right = 42.0
margin_bottom = -12.0
size_flags_vertical = 6
text = "Texture"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/HBoxContainer"]
margin_left = 231.0
margin_right = 286.0
margin_bottom = 48.0
mouse_filter = 2
custom_constants/margin_top = 12
custom_constants/margin_bottom = 12
__meta__ = {
"_edit_use_anchors_": false
}
[node name="DeleteButton" type="Button" parent="MarginContainer/HBoxContainer/MarginContainer"]
margin_top = 12.0
margin_right = 55.0
margin_bottom = 36.0
text = "Delete"
[connection signal="pressed" from="ToolButton" to="." method="_on_ToolButton_pressed"]
[connection signal="pressed" from="MarginContainer/HBoxContainer/MarginContainer/DeleteButton" to="." method="_on_DeleteButton_pressed"]

@ -0,0 +1,47 @@
tool
extends HBoxContainer
signal change
signal delete
onready var fromLine = $LineEditFrom
onready var toLine = $LineEditTo
onready var offsetLine = $SpinBoxOffset
var font_settings
onready var idx := get_index()
# Dict which holds info about a kerning pair
#
# Kerning: {
# from: String,
# to: String,
# kerning: float
# }
func set_kerning_pair(new_kerning):
fromLine.text = new_kerning.from
toLine.text = new_kerning.to
offsetLine.value = new_kerning.kerning
func _on_LineEditFrom_text_changed(new_text):
font_settings.set_kerning_pair_from(idx, new_text)
emit_signal("change")
func _on_LineEditTo_text_changed(new_text):
font_settings.set_kerning_pair_to(idx, new_text)
emit_signal("change")
func _on_SpinBoxOffset_value_changed(value):
font_settings.set_kerning_pair_kerning(idx, value)
emit_signal("change")
func _on_DeleteButton_pressed():
emit_signal("delete", self)

@ -0,0 +1,85 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/texture_fonts/UI/Components/KerningPair.gd" type="Script" id=1]
[node name="KerningPair" type="HBoxContainer"]
anchor_left = -0.000976563
anchor_right = 0.545523
anchor_bottom = 0.04
margin_right = 0.383972
margin_bottom = -1.90735e-06
size_flags_horizontal = 3
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": true
}
[node name="Label" type="Label" parent="."]
margin_top = 5.0
margin_right = 30.0
margin_bottom = 19.0
text = "from"
[node name="LineEditFrom" type="LineEdit" parent="."]
margin_left = 34.0
margin_right = 181.0
margin_bottom = 25.0
size_flags_horizontal = 3
size_flags_stretch_ratio = 2.0
align = 1
placeholder_text = "abc"
[node name="Label2" type="Label" parent="."]
margin_left = 185.0
margin_top = 5.0
margin_right = 198.0
margin_bottom = 19.0
text = "to"
[node name="LineEditTo" type="LineEdit" parent="."]
margin_left = 202.0
margin_right = 350.0
margin_bottom = 25.0
size_flags_horizontal = 3
size_flags_stretch_ratio = 2.0
align = 1
placeholder_text = "123"
[node name="Label3" type="Label" parent="."]
margin_left = 354.0
margin_top = 5.0
margin_right = 358.0
margin_bottom = 19.0
text = ":"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="SpinBoxOffset" type="SpinBox" parent="."]
margin_left = 362.0
margin_right = 436.0
margin_bottom = 25.0
min_value = -4096.0
max_value = 4096.0
align = 2
[node name="Seperator" type="Control" parent="."]
margin_left = 440.0
margin_right = 514.0
margin_bottom = 25.0
size_flags_horizontal = 3
size_flags_vertical = 3
__meta__ = {
"_edit_use_anchors_": false
}
[node name="DeleteButton" type="Button" parent="."]
margin_left = 518.0
margin_right = 573.0
margin_bottom = 25.0
text = "Delete"
[connection signal="text_changed" from="LineEditFrom" to="." method="_on_LineEditFrom_text_changed"]
[connection signal="text_changed" from="LineEditTo" to="." method="_on_LineEditTo_text_changed"]
[connection signal="value_changed" from="SpinBoxOffset" to="." method="_on_SpinBoxOffset_value_changed"]
[connection signal="pressed" from="DeleteButton" to="." method="_on_DeleteButton_pressed"]

@ -0,0 +1,35 @@
tool
extends Container
var texture: Texture
func set_texture(tex: Texture):
texture = tex
self.offset = Vector2.ZERO
const margin := 8.0
export var offset := Vector2.ZERO setget set_offset, get_offset
func set_offset(new_offset: Vector2):
if not texture:
return
var rect := self.get_rect()
var t_size = texture.get_size()
var child: Control = get_children().front()
var scale = child.rect_scale
var total_bounds = (rect.size + t_size * scale) / 2.0
offset.x = clamp(new_offset.x, -total_bounds.x + margin, total_bounds.x - margin)
offset.y = clamp(new_offset.y, -total_bounds.y + margin, total_bounds.y - margin)
rect.position += offset
fit_child_in_rect(get_children().front(), rect)
child.rect_scale = scale
func get_offset() -> Vector2:
return offset
func _on_TextureContainer_resized():
set_offset(offset)

@ -0,0 +1,33 @@
tool
extends TextureRect
var hover := false
var texture_font_mapping
onready var rect_preview := $RectPreview
onready var label := $RectPreview/Label
func _on_TextureView_mouse_entered():
hover = true
rect_preview.visible = true
func _on_TextureView_mouse_exited():
hover = false
rect_preview.visible = false
func _gui_input(event):
if hover and event is InputEventMouseMotion:
var c = texture_font_mapping.get_char_at_position(event.position)
if c == "":
rect_preview.visible = false
return
else:
label.text = c
var rect: Rect2 = texture_font_mapping.get_rect_for_position(event.position)
rect_preview.rect_position = rect.position
rect_preview.rect_size = rect.size
rect_preview.visible = true

@ -0,0 +1,65 @@
tool
extends VBoxContainer
onready var texture_view := $Control/TextureContainer/TextureView
onready var texture_container := $Control/TextureContainer
onready var zoom_spinbox := $Heading/SpinBox
var hover := false
var zoom := 100.0 setget set_zoom, get_zoom
var _zoom := 100.0
func set_zoom(new_zoom):
_zoom = clamp(new_zoom, 10, 5000)
texture_view.rect_scale = Vector2(float(_zoom) / 100.0, float(_zoom) / 100.0)
texture_view.rect_pivot_offset = texture_view.rect_size / 2.0
func get_zoom():
return _zoom
var texture_font_mapping setget set_mapping
func set_mapping(new_mapping):
texture_view.texture_font_mapping = new_mapping
func zoom_in():
self.zoom *= 1.1
zoom_spinbox.value = self.zoom
func zoom_out():
self.zoom *= 0.9
zoom_spinbox.value = self.zoom
func set_texture(texture: Texture):
if is_inside_tree():
texture_container.set_texture(texture)
texture_view.texture = texture
texture_view.rect_size = texture.get_size()
texture_view.rect_pivot_offset = texture_view.rect_size / 2.0
func _input(event):
if hover:
if event is InputEventMouseButton and event.pressed:
match event.button_index:
BUTTON_WHEEL_UP:
zoom_in()
BUTTON_WHEEL_DOWN:
zoom_out()
elif event is InputEventMouseMotion:
event = event as InputEventMouseMotion
if event.button_mask & BUTTON_LEFT:
texture_container.offset += event.relative
func _on_SpinBox_value_changed(value):
self.zoom = value
func _on_TextureContainer_mouse_entered():
hover = true
func _on_TextureContainer_mouse_exited():
hover = false

@ -0,0 +1,142 @@
[gd_scene load_steps=7 format=2]
[ext_resource path="res://addons/texture_fonts/Assets/Fonts/RobotoMono/RobotoMono-Medium.ttf" type="DynamicFontData" id=2]
[ext_resource path="res://addons/texture_fonts/Assets/TransparentBG.png" type="Texture" id=3]
[ext_resource path="res://addons/texture_fonts/UI/Components/TextureViewer/TextureViewer.gd" type="Script" id=4]
[ext_resource path="res://addons/texture_fonts/UI/Components/TextureViewer/TextureView.gd" type="Script" id=5]
[ext_resource path="res://addons/texture_fonts/UI/Components/TextureViewer/TextureContainer.gd" type="Script" id=6]
[sub_resource type="DynamicFont" id=1]
extra_spacing_top = -2
extra_spacing_bottom = 5
font_data = ExtResource( 2 )
[node name="TextureViewer" type="VBoxContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
size_flags_horizontal = 3
size_flags_vertical = 3
script = ExtResource( 4 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Heading" type="HBoxContainer" parent="."]
margin_right = 1024.0
margin_bottom = 24.0
[node name="Label" type="Label" parent="Heading"]
margin_top = 5.0
margin_right = 82.0
margin_bottom = 19.0
text = "View Texture"
[node name="HSeparator" type="HSeparator" parent="Heading"]
margin_left = 86.0
margin_right = 901.0
margin_bottom = 24.0
mouse_filter = 2
size_flags_horizontal = 3
[node name="Label2" type="Label" parent="Heading"]
margin_left = 905.0
margin_top = 5.0
margin_right = 946.0
margin_bottom = 19.0
text = "Zoom:"
[node name="SpinBox" type="SpinBox" parent="Heading"]
margin_left = 950.0
margin_right = 1024.0
margin_bottom = 24.0
min_value = 10.0
max_value = 5000.0
step = 10.0
value = 100.0
exp_edit = true
suffix = "%"
[node name="Control" type="Control" parent="."]
margin_top = 28.0
margin_right = 1024.0
margin_bottom = 600.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="TextureRect" type="TextureRect" parent="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
mouse_filter = 2
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 3 )
expand = true
stretch_mode = 2
[node name="TextureContainer" type="Container" parent="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
rect_clip_content = true
size_flags_horizontal = 3
size_flags_vertical = 3
script = ExtResource( 6 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="TextureView" type="TextureRect" parent="Control/TextureContainer"]
margin_left = 512.0
margin_top = 286.0
margin_right = 512.0
margin_bottom = 286.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 6
size_flags_vertical = 6
stretch_mode = 3
script = ExtResource( 5 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="RectPreview" type="ColorRect" parent="Control/TextureContainer/TextureView"]
visible = false
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
size_flags_horizontal = 5
size_flags_vertical = 5
color = Color( 1, 0, 0, 0.431373 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Label" type="Label" parent="Control/TextureContainer/TextureView/RectPreview"]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -5.0
margin_top = -11.0
margin_right = 5.0
margin_bottom = 11.0
grow_horizontal = 2
grow_vertical = 2
custom_fonts/font = SubResource( 1 )
custom_colors/font_color = Color( 1, 1, 1, 1 )
custom_colors/font_color_shadow = Color( 0, 0, 0, 0.45098 )
text = "a"
align = 1
valign = 1
__meta__ = {
"_edit_use_anchors_": false
}
[connection signal="value_changed" from="Heading/SpinBox" to="." method="_on_SpinBox_value_changed"]
[connection signal="mouse_entered" from="Control/TextureContainer" to="." method="_on_TextureContainer_mouse_entered"]
[connection signal="mouse_exited" from="Control/TextureContainer" to="." method="_on_TextureContainer_mouse_exited"]
[connection signal="resized" from="Control/TextureContainer" to="Control/TextureContainer" method="_on_TextureContainer_resized"]
[connection signal="mouse_entered" from="Control/TextureContainer/TextureView" to="Control/TextureContainer/TextureView" method="_on_TextureView_mouse_entered"]
[connection signal="mouse_exited" from="Control/TextureContainer/TextureView" to="Control/TextureContainer/TextureView" method="_on_TextureView_mouse_exited"]

@ -0,0 +1,70 @@
tool
extends VBoxContainer
signal value_changed(value)
onready var label_node := $Heading/Label
onready var x_node := $Values/X
onready var y_node := $Values/Y
export(Vector2) var min_value: Vector2 = Vector2(-100.0, -100.0) setget set_min_value, get_min_value
var _min_value := Vector2(-100.0, -100.0)
func set_min_value(new_value: Vector2):
_min_value = new_value
if is_instance_valid(x_node) and is_instance_valid(y_node):
x_node.min_value = new_value.x
y_node.min_value = new_value.y
func get_min_value():
if is_instance_valid(x_node) and is_instance_valid(y_node):
return Vector2(x_node.min_value, y_node.min_value)
export(Vector2) var max_value: Vector2 = Vector2.ZERO setget set_max_value, get_max_value
var _max_value := Vector2(100.0, 100.0)
func set_max_value(new_value: Vector2):
_max_value = new_value
if is_instance_valid(x_node) and is_instance_valid(y_node):
x_node.max_value = new_value.x
y_node.max_value = new_value.y
func get_max_value():
if is_instance_valid(x_node) and is_instance_valid(y_node):
return Vector2(x_node.max_value, y_node.max_value)
export(Vector2) var value: Vector2 setget set_value, get_value
var _value := Vector2.ZERO
func set_value(new_value: Vector2):
_value = new_value
if is_instance_valid(x_node) and is_instance_valid(y_node):
x_node.value = new_value.x
y_node.value = new_value.y
func get_value():
if is_instance_valid(x_node) and is_instance_valid(y_node):
return Vector2(x_node.value, y_node.value)
export(String) var label := "Label" setget set_label, get_label
var _label := "Label"
func set_label(new_label: String):
_label = new_label
if is_instance_valid(label_node):
label_node.text = new_label
func get_label():
if is_instance_valid(label_node):
return label_node.text
func _ready():
set_label(_label)
set_value(_value)
set_min_value(_min_value)
set_max_value(_max_value)
func _on_X_value_changed(new_value):
value.x = new_value
emit_signal("value_changed", value)
func _on_Y_value_changed(new_value):
value.y = new_value
emit_signal("value_changed", value)

@ -0,0 +1,70 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/texture_fonts/UI/Components/Vector2Edit.gd" type="Script" id=1]
[node name="Vector2Edit" type="VBoxContainer"]
anchor_right = 0.179
anchor_bottom = 0.07
margin_right = -32.2959
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": true
}
min_value = null
max_value = null
value = null
label = null
[node name="Heading" type="HBoxContainer" parent="."]
margin_right = 183.0
margin_bottom = 14.0
[node name="Label" type="Label" parent="Heading"]
margin_right = 34.0
margin_bottom = 14.0
text = "Label"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="HSeparator" type="HSeparator" parent="Heading"]
margin_left = 38.0
margin_right = 183.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="Values" type="HBoxContainer" parent="."]
margin_top = 18.0
margin_right = 183.0
margin_bottom = 42.0
[node name="XLabel" type="Label" parent="Values"]
margin_top = 5.0
margin_right = 12.0
margin_bottom = 19.0
text = "X:"
[node name="X" type="SpinBox" parent="Values"]
margin_left = 16.0
margin_right = 90.0
margin_bottom = 24.0
min_value = -100.0
[node name="YLabel" type="Label" parent="Values"]
margin_left = 94.0
margin_top = 5.0
margin_right = 105.0
margin_bottom = 19.0
text = "Y:"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Y" type="SpinBox" parent="Values"]
margin_left = 109.0
margin_right = 183.0
margin_bottom = 24.0
min_value = -100.0
[connection signal="value_changed" from="Values/X" to="." method="_on_X_value_changed"]
[connection signal="value_changed" from="Values/Y" to="." method="_on_Y_value_changed"]

@ -0,0 +1,88 @@
tool
extends MarginContainer
signal change
onready var size := $VBoxContainer/RectSettings/Size
onready var gap := $VBoxContainer/RectSettings/Gap
onready var offset := $VBoxContainer/RectSettings/Offset
onready var chars := $VBoxContainer/HSplitContainer/HBoxContainer/TextEdit
onready var texture_viewer := $VBoxContainer/HSplitContainer/TextureViewer
onready var scale := $VBoxContainer/RectSettings/Scaling/HBoxContainer/Scale
onready var interpolation := $VBoxContainer/RectSettings/Scaling/HBoxContainer/Interpolation
var current_mapping #: TextureFontMapping
var interpolation_options = [
Image.INTERPOLATE_BILINEAR,
Image.INTERPOLATE_CUBIC,
Image.INTERPOLATE_LANCZOS,
Image.INTERPOLATE_NEAREST,
Image.INTERPOLATE_TRILINEAR
]
func _ready():
interpolation.clear()
interpolation.add_item("Bilinear")
interpolation.add_item("Cubic")
interpolation.add_item("Lanczos")
interpolation.add_item("Nearest")
interpolation.add_item("Trilinear")
func set_mapping(mapping):
current_mapping = mapping
var texture: Texture = mapping.source_texture
var max_size := texture.get_size()
size.max_value = max_size
gap.max_value = max_size
offset.max_value = max_size
size.value = mapping.rect_size
gap.value = mapping.rect_gap
offset.value = mapping.texture_offset
chars.text = mapping.chars
scale.value = mapping.scale
interpolation.selected = interpolation_options.find(mapping.interpolation)
func _on_Size_value_changed(value: Vector2):
if current_mapping:
current_mapping.rect_size = value
emit_signal("change")
func _on_Gap_value_changed(value: Vector2):
if current_mapping:
current_mapping.rect_gap = value
emit_signal("change")
func _on_Offset_value_changed(value: Vector2):
if current_mapping:
current_mapping.texture_offset = value
emit_signal("change")
func _on_TextEdit_text_changed():
if current_mapping:
current_mapping.chars = chars.text
emit_signal("change")
func _on_Scale_value_changed(value):
if current_mapping:
current_mapping.scale = value
texture_viewer.set_texture(current_mapping.scaled_texture)
emit_signal("change")
func _on_OptionButton_item_selected(index):
if current_mapping:
current_mapping.interpolation = interpolation_options[index]
texture_viewer.set_texture(current_mapping.scaled_texture)
emit_signal("change")

@ -0,0 +1,204 @@
tool
extends MarginContainer
signal close
# ------ Resources ------
const file_scene = preload("./Components/File.tscn")
# ------ References ------
onready var file_list := $TabContainer/Textures/Files/Panel/ScrollContainer/FileList
onready var file_dialog := $TabContainer/Textures/Files/HeadingBox/AddTextureButton/FileDialog
onready var file_settings := $TabContainer/Textures/FileSettings
onready var texture_viewer := $TabContainer/Textures/FileSettings/VBoxContainer/HSplitContainer/TextureViewer
onready var no_selection_overlay := $TabContainer/Textures/FileSettings/NoSelectionOverlay
onready var font_preview := $"TabContainer/Font Settings/Preview"
onready var font_settings := $"TabContainer/Font Settings"
# ------ Variables ------
var selected_file_node
var file_nodes: Array = []
var font_ref: WeakRef
# ------ Inherited Methods -----
func _ready():
file_settings.connect("change", self, "queue_save")
font_settings.connect("change", self, "queue_save")
# ------ Methods ------
# reset editor, and populate for new font
func edit_font(new_font) -> void:
if font_ref:
save_now()
font_ref = weakref(new_font)
for node in file_nodes:
node.queue_free()
file_nodes.clear()
no_selection_overlay.visible = true
for mapping in new_font.texture_mappings:
_add_texture_ui(mapping.source_texture)
if file_nodes.size() != 0:
change_texture(0)
if is_inside_tree():
font_settings.set_font(new_font)
font_preview.set_font(new_font)
func get_font_from_ref() -> Font:
var font = font_ref.get_ref()
if font: return font
else:
emit_signal("close")
return font
func update_overlay():
if is_instance_valid(selected_file_node):
no_selection_overlay.visible = false
else:
no_selection_overlay.visible = true
var _queued_save_count := 0
func queue_save(timeout := 2.5):
_queued_save_count += 1
if not is_inside_tree():
return
var timer = Timer.new()
add_child(timer)
timer.start(2.5)
yield(timer, "timeout")
_queued_save_count -= 1
if _queued_save_count == 0:
_save()
elif _queued_save_count < 0:
_queued_save_count += 1
func save_now():
_queued_save_count = 0
_save()
func _save():
if font_ref and font_ref.get_ref():
var font = get_font_from_ref()
font.build_font()
if font.resource_path == "":
return
var error := ResourceSaver.save(font.resource_path, font)
if error != OK:
push_error("Failed to Save Font with Path: " + font.resource_path + ". Error Code: " + String(error))
else:
print("Saved Font: " + font.resource_path)
else:
emit_signal("close")
# ------ Actions ------
func add_texture(texture: Texture, idx := -1):
_add_texture_ui(texture, idx)
var font = get_font_from_ref()
font.add_texture(texture)
change_texture(file_list.get_child_count() - 1)
queue_save()
func _add_texture_ui(texture: Texture, idx := -1):
var file_node := file_scene.instance()
file_list.add_child(file_node)
file_node.set_texture(texture)
if idx == -1:
file_nodes.append(file_node)
else:
file_list.move_child(file_node, idx)
file_nodes.insert(idx, file_node)
file_node.connect("file_removed", self, "_on_file_removed")
file_node.connect("file_changed", self, "_on_file_changed")
func delete_texture(node):
var index = file_nodes.find(node)
node.queue_free()
file_nodes.remove(index)
if node == selected_file_node:
selected_file_node = null
var font = get_font_from_ref()
font.remove_texture(index)
update_overlay()
queue_save()
func change_texture(index: int):
var file = file_nodes[index]
if is_instance_valid(selected_file_node):
selected_file_node.selected = false
var font = get_font_from_ref()
if is_instance_valid(file):
file.selected = true
selected_file_node = file
texture_viewer.set_texture(font.texture_mappings[index].scaled_texture)
file_settings.set_mapping(font.texture_mappings[index])
texture_viewer.set_mapping(font.texture_mappings[index])
update_overlay()
# ------ Signals ------
func _on_file_removed(file):
if file == selected_file_node:
selected_file_node = null
if not file_nodes.empty():
selected_file_node = file_nodes.front()
selected_file_node.selected = true
delete_texture(file)
update_overlay()
func _on_file_changed(file):
var idx = file_nodes.find(file)
if idx == -1:
return
change_texture(idx)
func _on_AddTextureButton_pressed():
file_dialog.popup_centered()
func _on_FileDialog_file_selected(path):
var texture = load(path)
if texture is Texture:
add_texture(texture)

@ -0,0 +1,666 @@
[gd_scene load_steps=13 format=2]
[ext_resource path="res://addons/texture_fonts/UI/Components/Vector2Edit.tscn" type="PackedScene" id=1]
[ext_resource path="res://addons/texture_fonts/Assets/ExternalLink.svg" type="Texture" id=2]
[ext_resource path="res://addons/texture_fonts/UI/FontSettings.gd" type="Script" id=3]
[ext_resource path="res://addons/texture_fonts/UI/Components/TextureViewer/TextureViewer.tscn" type="PackedScene" id=4]
[ext_resource path="res://addons/texture_fonts/Assets/Fonts/RobotoMono/RobotoMono-Medium.ttf" type="DynamicFontData" id=5]
[ext_resource path="res://addons/texture_fonts/UI/FontEditor.gd" type="Script" id=6]
[ext_resource path="res://addons/texture_fonts/UI/FileSettings.gd" type="Script" id=7]
[ext_resource path="res://addons/texture_fonts/UI/Preview.gd" type="Script" id=8]
[ext_resource path="res://addons/texture_fonts/UI/HelpButton.gd" type="Script" id=9]
[sub_resource type="DynamicFont" id=1]
font_data = ExtResource( 5 )
[sub_resource type="StyleBoxFlat" id=2]
resource_local_to_scene = true
bg_color = Color( 0.12549, 0.141176, 0.192157, 1 )
[sub_resource type="StyleBoxFlat" id=3]
resource_local_to_scene = true
bg_color = Color( 0.100392, 0.112941, 0.153726, 1 )
[node name="FontEditor" type="MarginContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
rect_min_size = Vector2( 0, 280 )
size_flags_stretch_ratio = 2.0
script = ExtResource( 6 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="TabContainer" type="TabContainer" parent="."]
margin_right = 1048.0
margin_bottom = 628.0
size_flags_horizontal = 3
tab_align = 0
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Textures" type="HSplitContainer" parent="TabContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 4.0
margin_top = 32.0
margin_right = -4.0
margin_bottom = -4.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="Files" type="VBoxContainer" parent="TabContainer/Textures"]
margin_right = 254.0
margin_bottom = 592.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="HeadingBox" type="HBoxContainer" parent="TabContainer/Textures/Files"]
margin_right = 254.0
margin_bottom = 20.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="TabContainer/Textures/Files/HeadingBox"]
margin_top = 3.0
margin_right = 30.0
margin_bottom = 17.0
text = "Files"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="HSeparator" type="HSeparator" parent="TabContainer/Textures/Files/HeadingBox"]
margin_left = 34.0
margin_right = 213.0
margin_bottom = 20.0
size_flags_horizontal = 3
[node name="AddTextureButton" type="Button" parent="TabContainer/Textures/Files/HeadingBox"]
margin_left = 217.0
margin_right = 254.0
margin_bottom = 20.0
text = "Add"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="FileDialog" type="FileDialog" parent="TabContainer/Textures/Files/HeadingBox/AddTextureButton"]
margin_right = 400.0
margin_bottom = 300.0
rect_min_size = Vector2( 400, 300 )
size_flags_vertical = 3
window_title = "Open a File"
resizable = true
mode = 0
filters = PoolStringArray( "*.png, *.bmp, *.dds, *.exr, *.hdr, *.jpg, *.jpeg, *.tga, *.svg, *.svgz, *.webp; Textures" )
[node name="Panel" type="Panel" parent="TabContainer/Textures/Files"]
margin_top = 24.0
margin_right = 254.0
margin_bottom = 592.0
size_flags_horizontal = 3
size_flags_vertical = 3
__meta__ = {
"_edit_use_anchors_": false
}
[node name="ScrollContainer" type="ScrollContainer" parent="TabContainer/Textures/Files/Panel"]
anchor_right = 1.0
anchor_bottom = 1.0
size_flags_horizontal = 3
size_flags_vertical = 3
__meta__ = {
"_edit_use_anchors_": false
}
[node name="FileList" type="VBoxContainer" parent="TabContainer/Textures/Files/Panel/ScrollContainer"]
margin_right = 254.0
size_flags_horizontal = 3
__meta__ = {
"_edit_use_anchors_": false
}
[node name="FileSettings" type="MarginContainer" parent="TabContainer/Textures"]
margin_left = 266.0
margin_right = 1040.0
margin_bottom = 592.0
size_flags_horizontal = 3
size_flags_vertical = 3
size_flags_stretch_ratio = 3.0
script = ExtResource( 7 )
[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/Textures/FileSettings"]
margin_right = 774.0
margin_bottom = 592.0
size_flags_horizontal = 3
size_flags_vertical = 3
__meta__ = {
"_edit_use_anchors_": false
}
[node name="RectSettings" type="HBoxContainer" parent="TabContainer/Textures/FileSettings/VBoxContainer"]
margin_right = 774.0
margin_bottom = 42.0
custom_constants/separation = 12
[node name="Size" parent="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings" instance=ExtResource( 1 )]
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 183.0
margin_bottom = 42.0
min_value = Vector2( 1, 1 )
max_value = Vector2( 100, 100 )
value = Vector2( 1, 1 )
label = "Rect Size"
[node name="Gap" parent="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings" instance=ExtResource( 1 )]
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 195.0
margin_right = 378.0
margin_bottom = 42.0
min_value = Vector2( 0, 0 )
max_value = Vector2( 100, 100 )
value = Vector2( 0, 0 )
label = "Rect Gap"
[node name="Offset" parent="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings" instance=ExtResource( 1 )]
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 390.0
margin_right = 573.0
margin_bottom = 42.0
min_value = Vector2( 0, 0 )
max_value = Vector2( 100, 100 )
value = Vector2( 0, 0 )
label = "Texture Offset"
[node name="Scaling" type="VBoxContainer" parent="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings"]
margin_left = 585.0
margin_right = 741.0
margin_bottom = 42.0
[node name="HeadingContainer" type="HBoxContainer" parent="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings/Scaling"]
margin_right = 156.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings/Scaling/HeadingContainer"]
margin_right = 103.0
margin_bottom = 14.0
text = "Upscale Texture"
[node name="HSeparator" type="HSeparator" parent="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings/Scaling/HeadingContainer"]
margin_left = 107.0
margin_right = 156.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings/Scaling"]
margin_top = 18.0
margin_right = 156.0
margin_bottom = 42.0
[node name="Scale" type="SpinBox" parent="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings/Scaling/HBoxContainer"]
margin_right = 74.0
margin_bottom = 24.0
min_value = 1.0
max_value = 10.0
value = 1.0
suffix = "x"
[node name="Interpolation" type="OptionButton" parent="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings/Scaling/HBoxContainer"]
margin_left = 78.0
margin_right = 156.0
margin_bottom = 24.0
text = "Bilinear"
items = [ "Bilinear", null, false, 0, null, "Cubic", null, false, 1, null, "Lanczos", null, false, 2, null, "Nearest", null, false, 3, null, "Trilinear", null, false, 4, null ]
selected = 0
[node name="HSplitContainer" type="HSplitContainer" parent="TabContainer/Textures/FileSettings/VBoxContainer"]
margin_top = 46.0
margin_right = 774.0
margin_bottom = 592.0
size_flags_vertical = 3
[node name="HBoxContainer" type="VBoxContainer" parent="TabContainer/Textures/FileSettings/VBoxContainer/HSplitContainer"]
margin_right = 381.0
margin_bottom = 546.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="HeadingBox" type="HBoxContainer" parent="TabContainer/Textures/FileSettings/VBoxContainer/HSplitContainer/HBoxContainer"]
margin_right = 381.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="CharactersLabel" type="Label" parent="TabContainer/Textures/FileSettings/VBoxContainer/HSplitContainer/HBoxContainer/HeadingBox"]
margin_right = 135.0
margin_bottom = 14.0
text = "Characters in Texture"
[node name="HSeparator" type="HSeparator" parent="TabContainer/Textures/FileSettings/VBoxContainer/HSplitContainer/HBoxContainer/HeadingBox"]
margin_left = 139.0
margin_right = 381.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="TextEdit" type="TextEdit" parent="TabContainer/Textures/FileSettings/VBoxContainer/HSplitContainer/HBoxContainer"]
margin_top = 18.0
margin_right = 381.0
margin_bottom = 546.0
size_flags_horizontal = 3
size_flags_vertical = 7
custom_fonts/font = SubResource( 1 )
draw_tabs = true
draw_spaces = true
[node name="TextureViewer" parent="TabContainer/Textures/FileSettings/VBoxContainer/HSplitContainer" instance=ExtResource( 4 )]
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 393.0
margin_right = 774.0
margin_bottom = 546.0
[node name="NoSelectionOverlay" type="ColorRect" parent="TabContainer/Textures/FileSettings"]
margin_right = 774.0
margin_bottom = 592.0
color = Color( 0.14902, 0.172549, 0.231373, 0.784314 )
[node name="Label" type="Label" parent="TabContainer/Textures/FileSettings/NoSelectionOverlay"]
anchor_right = 1.0
anchor_bottom = 1.0
text = "Add or Select a Texture"
align = 1
valign = 1
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Font Settings" type="HSplitContainer" parent="TabContainer"]
visible = false
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 4.0
margin_top = 32.0
margin_right = -4.0
margin_bottom = -4.0
script = ExtResource( 3 )
[node name="HSplitContainer" type="HSplitContainer" parent="TabContainer/Font Settings"]
margin_right = 687.0
margin_bottom = 592.0
size_flags_horizontal = 3
size_flags_stretch_ratio = 2.0
[node name="Settings" type="VBoxContainer" parent="TabContainer/Font Settings/HSplitContainer"]
margin_right = 223.0
margin_bottom = 592.0
size_flags_horizontal = 3
[node name="HeadingBox" type="HBoxContainer" parent="TabContainer/Font Settings/HSplitContainer/Settings"]
margin_right = 223.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="TabContainer/Font Settings/HSplitContainer/Settings/HeadingBox"]
margin_right = 83.0
margin_bottom = 14.0
text = "Font Settings"
[node name="HSeparator" type="HSeparator" parent="TabContainer/Font Settings/HSplitContainer/Settings/HeadingBox"]
margin_left = 87.0
margin_right = 223.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="MarginContainer" type="MarginContainer" parent="TabContainer/Font Settings/HSplitContainer/Settings"]
margin_top = 18.0
margin_right = 223.0
margin_bottom = 592.0
size_flags_horizontal = 3
size_flags_vertical = 3
custom_constants/margin_right = 4
custom_constants/margin_top = 4
custom_constants/margin_left = 4
custom_constants/margin_bottom = 4
[node name="Grid" type="GridContainer" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer"]
margin_left = 4.0
margin_top = 4.0
margin_right = 219.0
margin_bottom = 570.0
columns = 2
[node name="Label" type="Label" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid"]
margin_top = 5.0
margin_right = 106.0
margin_bottom = 19.0
size_flags_horizontal = 3
text = "Height:"
[node name="Height" type="SpinBox" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid"]
margin_left = 110.0
margin_right = 215.0
margin_bottom = 24.0
size_flags_horizontal = 3
min_value = 1.0
max_value = 4096.0
value = 1.0
[node name="Label2" type="Label" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid"]
margin_top = 33.0
margin_right = 106.0
margin_bottom = 47.0
size_flags_horizontal = 3
text = "Gap:"
[node name="Gap" type="SpinBox" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid"]
margin_left = 110.0
margin_top = 28.0
margin_right = 215.0
margin_bottom = 52.0
size_flags_horizontal = 3
min_value = -4096.0
max_value = 4096.0
[node name="Label3" type="Label" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid"]
margin_top = 61.0
margin_right = 106.0
margin_bottom = 75.0
size_flags_horizontal = 3
text = "Horizontal Align:"
[node name="HorizontalAlign" type="SpinBox" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid"]
margin_left = 110.0
margin_top = 56.0
margin_right = 215.0
margin_bottom = 80.0
size_flags_horizontal = 3
min_value = -4096.0
max_value = 4096.0
[node name="Label6" type="Label" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid"]
margin_top = 89.0
margin_right = 106.0
margin_bottom = 103.0
size_flags_horizontal = 3
text = "Vertical Align:"
[node name="VerticalAlign" type="SpinBox" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid"]
margin_left = 110.0
margin_top = 84.0
margin_right = 215.0
margin_bottom = 108.0
size_flags_horizontal = 3
min_value = -4096.0
max_value = 4096.0
[node name="Label4" type="Label" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid"]
margin_top = 117.0
margin_right = 106.0
margin_bottom = 131.0
size_flags_horizontal = 3
text = "Ascent:"
[node name="Ascent" type="SpinBox" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid"]
margin_left = 110.0
margin_top = 112.0
margin_right = 215.0
margin_bottom = 136.0
size_flags_horizontal = 3
max_value = 4096.0
[node name="Label5" type="Label" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid"]
margin_top = 145.0
margin_right = 106.0
margin_bottom = 159.0
text = "Monospaced:"
[node name="MonoSpaced" type="CheckBox" parent="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid"]
margin_left = 110.0
margin_top = 140.0
margin_right = 215.0
margin_bottom = 164.0
[node name="ListSettings" type="VBoxContainer" parent="TabContainer/Font Settings/HSplitContainer"]
margin_left = 235.0
margin_right = 687.0
margin_bottom = 592.0
size_flags_horizontal = 3
size_flags_vertical = 3
size_flags_stretch_ratio = 2.0
[node name="VSplitContainer" type="VSplitContainer" parent="TabContainer/Font Settings/HSplitContainer/ListSettings"]
margin_right = 452.0
margin_bottom = 592.0
size_flags_vertical = 3
[node name="Kerning" type="VBoxContainer" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer"]
margin_right = 452.0
margin_bottom = 230.0
size_flags_vertical = 3
size_flags_stretch_ratio = 2.0
[node name="HeadingBox" type="HBoxContainer" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/Kerning"]
margin_right = 452.0
margin_bottom = 20.0
size_flags_horizontal = 3
[node name="KerningLabel" type="Label" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/Kerning/HeadingBox"]
margin_top = 3.0
margin_right = 83.0
margin_bottom = 17.0
text = "Kerning Pairs"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="HSeparator" type="HSeparator" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/Kerning/HeadingBox"]
margin_left = 87.0
margin_right = 411.0
margin_bottom = 20.0
size_flags_horizontal = 3
[node name="AddKerningButton" type="Button" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/Kerning/HeadingBox"]
margin_left = 415.0
margin_right = 452.0
margin_bottom = 20.0
text = "Add"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="MarginContainer" type="MarginContainer" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/Kerning"]
margin_top = 24.0
margin_right = 452.0
margin_bottom = 230.0
size_flags_horizontal = 3
size_flags_vertical = 3
custom_constants/margin_right = 4
custom_constants/margin_top = 4
custom_constants/margin_left = 4
custom_constants/margin_bottom = 4
[node name="ScrollContainer" type="ScrollContainer" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/Kerning/MarginContainer"]
margin_left = 4.0
margin_top = 4.0
margin_right = 448.0
margin_bottom = 202.0
[node name="KerningList" type="VBoxContainer" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/Kerning/MarginContainer/ScrollContainer"]
margin_right = 444.0
margin_bottom = 198.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="CharSettings" type="VBoxContainer" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer"]
margin_top = 242.0
margin_right = 452.0
margin_bottom = 592.0
size_flags_vertical = 3
size_flags_stretch_ratio = 3.0
[node name="HeadingBox" type="HBoxContainer" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/CharSettings"]
margin_right = 452.0
margin_bottom = 20.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/CharSettings/HeadingBox"]
margin_top = 3.0
margin_right = 76.0
margin_bottom = 17.0
text = "Char Setting"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="HSeparator" type="HSeparator" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/CharSettings/HeadingBox"]
margin_left = 80.0
margin_right = 411.0
margin_bottom = 20.0
size_flags_horizontal = 3
[node name="AddCharSettingButton" type="Button" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/CharSettings/HeadingBox"]
margin_left = 415.0
margin_right = 452.0
margin_bottom = 20.0
text = "Add"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="MarginContainer" type="MarginContainer" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/CharSettings"]
margin_top = 24.0
margin_right = 452.0
margin_bottom = 350.0
size_flags_horizontal = 3
size_flags_vertical = 3
custom_constants/margin_right = 4
custom_constants/margin_top = 4
custom_constants/margin_left = 4
custom_constants/margin_bottom = 4
[node name="ScrollContainer" type="ScrollContainer" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/CharSettings/MarginContainer"]
margin_left = 4.0
margin_top = 4.0
margin_right = 448.0
margin_bottom = 322.0
size_flags_horizontal = 3
size_flags_vertical = 3
size_flags_stretch_ratio = 2.0
[node name="SettingList" type="VBoxContainer" parent="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/CharSettings/MarginContainer/ScrollContainer"]
margin_right = 444.0
margin_bottom = 318.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="Preview" type="VBoxContainer" parent="TabContainer/Font Settings"]
margin_left = 699.0
margin_right = 1040.0
margin_bottom = 592.0
size_flags_horizontal = 3
script = ExtResource( 8 )
[node name="HeadingBox" type="HBoxContainer" parent="TabContainer/Font Settings/Preview"]
margin_right = 341.0
margin_bottom = 24.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="TabContainer/Font Settings/Preview/HeadingBox"]
margin_top = 5.0
margin_right = 50.0
margin_bottom = 19.0
text = "Preview"
[node name="HSeparator" type="HSeparator" parent="TabContainer/Font Settings/Preview/HeadingBox"]
margin_left = 54.0
margin_right = 195.0
margin_bottom = 24.0
size_flags_horizontal = 3
[node name="Scale" type="SpinBox" parent="TabContainer/Font Settings/Preview/HeadingBox"]
margin_left = 199.0
margin_right = 273.0
margin_bottom = 24.0
min_value = 100.0
max_value = 1000.0
step = 10.0
value = 100.0
exp_edit = true
suffix = "%"
[node name="ColorPickerButton" type="ColorPickerButton" parent="TabContainer/Font Settings/Preview/HeadingBox"]
margin_left = 277.0
margin_right = 341.0
margin_bottom = 24.0
rect_min_size = Vector2( 64, 0 )
color = Color( 0.12549, 0.141176, 0.192157, 1 )
[node name="MarginContainer" type="ScrollContainer" parent="TabContainer/Font Settings/Preview"]
margin_top = 28.0
margin_right = 341.0
margin_bottom = 592.0
size_flags_vertical = 3
[node name="TextEdit" type="TextEdit" parent="TabContainer/Font Settings/Preview/MarginContainer"]
margin_right = 341.0
margin_bottom = 564.0
rect_clip_content = true
size_flags_horizontal = 3
size_flags_vertical = 3
custom_styles/focus = SubResource( 2 )
custom_styles/normal = SubResource( 3 )
[node name="Control" type="Control" parent="."]
margin_right = 1048.0
margin_bottom = 628.0
mouse_filter = 2
[node name="HelpButton" type="Button" parent="Control"]
anchor_left = 1.0
anchor_right = 1.0
margin_left = -63.0
margin_bottom = 20.0
text = "Help"
align = 0
script = ExtResource( 9 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="TextureRect" type="TextureRect" parent="Control/HelpButton"]
anchor_left = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = -16.0
margin_right = -4.0
grow_horizontal = 0
grow_vertical = 2
texture = ExtResource( 2 )
stretch_mode = 4
__meta__ = {
"_edit_use_anchors_": false
}
[connection signal="pressed" from="TabContainer/Textures/Files/HeadingBox/AddTextureButton" to="." method="_on_AddTextureButton_pressed"]
[connection signal="file_selected" from="TabContainer/Textures/Files/HeadingBox/AddTextureButton/FileDialog" to="." method="_on_FileDialog_file_selected"]
[connection signal="value_changed" from="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings/Size" to="TabContainer/Textures/FileSettings" method="_on_Size_value_changed"]
[connection signal="value_changed" from="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings/Gap" to="TabContainer/Textures/FileSettings" method="_on_Gap_value_changed"]
[connection signal="value_changed" from="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings/Offset" to="TabContainer/Textures/FileSettings" method="_on_Offset_value_changed"]
[connection signal="value_changed" from="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings/Scaling/HBoxContainer/Scale" to="TabContainer/Textures/FileSettings" method="_on_Scale_value_changed"]
[connection signal="item_selected" from="TabContainer/Textures/FileSettings/VBoxContainer/RectSettings/Scaling/HBoxContainer/Interpolation" to="TabContainer/Textures/FileSettings" method="_on_OptionButton_item_selected"]
[connection signal="text_changed" from="TabContainer/Textures/FileSettings/VBoxContainer/HSplitContainer/HBoxContainer/TextEdit" to="TabContainer/Textures/FileSettings" method="_on_TextEdit_text_changed"]
[connection signal="value_changed" from="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid/Height" to="TabContainer/Font Settings" method="_on_Height_value_changed"]
[connection signal="value_changed" from="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid/Gap" to="TabContainer/Font Settings" method="_on_Gap_value_changed"]
[connection signal="value_changed" from="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid/HorizontalAlign" to="TabContainer/Font Settings" method="_on_HorizontalAlign_value_changed"]
[connection signal="value_changed" from="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid/VerticalAlign" to="TabContainer/Font Settings" method="_on_VerticalAlign_value_changed"]
[connection signal="value_changed" from="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid/Ascent" to="TabContainer/Font Settings" method="_on_Ascent_value_changed"]
[connection signal="toggled" from="TabContainer/Font Settings/HSplitContainer/Settings/MarginContainer/Grid/MonoSpaced" to="TabContainer/Font Settings" method="_on_MonoSpaced_toggled"]
[connection signal="pressed" from="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/Kerning/HeadingBox/AddKerningButton" to="TabContainer/Font Settings" method="_on_AddKerningButton_pressed"]
[connection signal="pressed" from="TabContainer/Font Settings/HSplitContainer/ListSettings/VSplitContainer/CharSettings/HeadingBox/AddCharSettingButton" to="TabContainer/Font Settings" method="_on_AddCharSettingButton_pressed"]
[connection signal="value_changed" from="TabContainer/Font Settings/Preview/HeadingBox/Scale" to="TabContainer/Font Settings" method="_on_Scale_value_changed"]
[connection signal="color_changed" from="TabContainer/Font Settings/Preview/HeadingBox/ColorPickerButton" to="TabContainer/Font Settings" method="_on_ColorPickerButton_color_changed"]
[connection signal="text_changed" from="TabContainer/Font Settings/Preview/MarginContainer/TextEdit" to="TabContainer/Font Settings" method="_on_TextEdit_text_changed"]

@ -0,0 +1,169 @@
tool
extends HSplitContainer
signal change
onready var char_setting_list := $HSplitContainer/ListSettings/VSplitContainer/CharSettings/MarginContainer/ScrollContainer/SettingList
onready var kerning_pair_list := $HSplitContainer/ListSettings/VSplitContainer/Kerning/MarginContainer/ScrollContainer/KerningList
onready var height := $HSplitContainer/Settings/MarginContainer/Grid/Height
onready var gap := $HSplitContainer/Settings/MarginContainer/Grid/Gap
onready var horizontal_align := $HSplitContainer/Settings/MarginContainer/Grid/HorizontalAlign
onready var vertical_align := $HSplitContainer/Settings/MarginContainer/Grid/VerticalAlign
onready var ascent := $HSplitContainer/Settings/MarginContainer/Grid/Ascent
onready var monospace := $HSplitContainer/Settings/MarginContainer/Grid/MonoSpaced
onready var preview := $Preview
onready var preview_textbox := $Preview/MarginContainer/TextEdit
const char_setting_scene := preload("./Components/CharSetting.tscn")
const kerning_pair_scene := preload("./Components/KerningPair.tscn")
var font_settings
var font_ref: WeakRef
func set_font(new_font):
font_ref = weakref(new_font)
height.value = new_font.height
ascent.value = new_font.ascent
# clear char settings list
for child in char_setting_list.get_children():
char_setting_list.remove_child(child)
child.queue_free()
for child in kerning_pair_list.get_children():
kerning_pair_list.remove_child(child)
child.queue_free()
font_settings = new_font.font_settings
# populate char settings list
for for_char in font_settings.char_settings:
_add_char_setting(null, for_char)
for kerning_pair in font_settings.kerning_pairs:
_add_kerning_pair(null, kerning_pair)
gap.value = font_settings.gap
horizontal_align.value = font_settings.horizontal_align
vertical_align.value = font_settings.vertical_align
monospace.pressed = font_settings.monospace
preview.set_preview_text(font_settings.preview_chars)
preview.set_preview_color(font_settings.preview_color)
func _add_char_setting(char_setting_node = null, for_char = null):
if char_setting_node == null:
char_setting_node = char_setting_scene.instance()
if for_char:
char_setting_node.for_char = for_char
char_setting_node.font_settings = font_settings
char_setting_list.add_child(char_setting_node)
char_setting_node.owner = self.owner
char_setting_node.connect("change", self, "_value_changed")
char_setting_node.connect("delete", self, "_on_char_setting_delete")
_value_changed()
func _add_kerning_pair(kerning_pair_node = null, pair = null):
if kerning_pair_node == null:
kerning_pair_node = kerning_pair_scene.instance()
kerning_pair_list.add_child(kerning_pair_node)
kerning_pair_node.owner = self.owner
kerning_pair_node.font_settings = font_settings
if pair == null:
pair = font_settings.add_kerning_pair()
kerning_pair_node.set_kerning_pair(pair)
kerning_pair_node.connect("change", self, "_value_changed")
kerning_pair_node.connect("delete", self, "_on_kerning_pair_delete")
_value_changed()
func _on_kerning_pair_delete(node):
var idx = node.get_index()
node.queue_free()
font_settings.remove_kerning_pair(idx)
_value_changed()
func _on_char_setting_delete(node):
var for_char = node.for_char
node.queue_free()
font_settings.remove_setting(for_char)
_value_changed()
func _value_changed():
emit_signal("change")
func _on_AddCharSettingButton_pressed():
_add_char_setting()
func _on_AddKerningButton_pressed():
_add_kerning_pair()
func _on_Height_value_changed(value):
var font = font_ref.get_ref()
if font:
font.height = value
_value_changed()
func _on_Gap_value_changed(value):
font_settings.gap = value
_value_changed()
func _on_HorizontalAlign_value_changed(value):
font_settings.horizontal_align = value
_value_changed()
func _on_Ascent_value_changed(value):
var font = font_ref.get_ref()
if font:
font.ascent = value
_value_changed()
func _on_MonoSpaced_toggled(button_pressed):
font_settings.monospace = button_pressed
_value_changed()
func _on_VerticalAlign_value_changed(value):
font_settings.vertical_align = value
_value_changed()
func _on_TextEdit_text_changed():
font_settings.preview_chars = preview_textbox.text
_value_changed()
func _on_Scale_value_changed(value):
preview.set_preview_scale(value / 100.0)
func _on_ColorPickerButton_color_changed(color):
preview.set_preview_color(color)
font_settings.preview_color = color
_value_changed()

@ -0,0 +1,6 @@
tool
extends Button
func _pressed():
OS.shell_open("https://github.com/ElectronicBlueberry/Texture-Fonts/wiki")

@ -0,0 +1,30 @@
tool
extends VBoxContainer
onready var text_edit := $MarginContainer/TextEdit
onready var colorpicker := $HeadingBox/ColorPickerButton
func set_font(new_font: BitmapFont):
text_edit.set("custom_fonts/font", new_font)
func set_preview_text(new_text):
if new_text == null: new_text == ""
text_edit.text = new_text
func set_preview_color(color: Color):
colorpicker.color = color
var stylebox: StyleBoxFlat = text_edit.get("custom_styles/normal")
stylebox.bg_color = color.darkened(0.2)
stylebox = text_edit.get("custom_styles/focus")
stylebox.bg_color = color
text_edit.set("custom_colors/caret_color", color.inverted())
func set_preview_scale(scale):
text_edit.rect_scale = Vector2(scale, scale)

@ -0,0 +1,55 @@
tool
extends Reference
var num_regex := RegEx.new()
var unicode_regex := RegEx.new()
var regex_compiled := false
# split multi-line string into 2d array containing char codes
func chars_to_codes(chars: String) -> Array:
var codes = []
if not regex_compiled:
num_regex.compile("[0-9A-Fa-f]+")
unicode_regex.compile("\\\\U\\+[0-9A-Fa-f]+;")
regex_compiled = true
var i = 0
var l = chars.length()
var line = 0
while i < l:
var next_char = chars[i]
var code_int = -1
# dont save new-line smymbol, but switch to new line
if next_char == "\n":
if line + 1 > codes.size():
codes.append([])
line += 1
i += 1
continue
# escape char might indicate unicode block
elif next_char == "\\":
var code = unicode_regex.search(chars, i)
if code and code.get_start() == i:
var num_code = num_regex.search(code.get_string())
code_int = ("0x" + num_code.get_string()).hex_to_int()
i += code.get_string().length() - 1
else:
code_int = ord("\\")
# standard char
else:
code_int = ord(next_char)
# add line, if not present
if line + 1 > codes.size():
codes.append([code_int])
else:
codes[line].append(code_int)
i += 1
return codes

@ -0,0 +1,9 @@
[plugin]
name="TextureFonts"
description="For Godot 3.4+
Adds a new TextureFont resource, which allows easily creating BitmapFonts from Textures."
author="ElectronicBlueberry"
version="1.1.0"
script="texture_fonts.gd"

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

Loading…
Cancel
Save