Compare commits
10 commits
b5af85a890
...
4182eea3ac
| Author | SHA1 | Date | |
|---|---|---|---|
| 4182eea3ac | |||
| 08c506a3a8 | |||
| d77dc6d3da | |||
| f7c4922784 | |||
| 8743133c43 | |||
| b90b816063 | |||
| 8768edc16c | |||
| 5481a1e92f | |||
| 5766fdb757 | |||
| 5b326e2de6 |
25
.claude/settings.json
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Bash(where python3:*)",
|
||||
"Bash(where py:*)",
|
||||
"Bash(ls /c/Python*/python.exe)",
|
||||
"Read(//c/Users/sandr/AppData/Local/Programs/**)",
|
||||
"Bash(where node:*)",
|
||||
"Bash(where npm:*)",
|
||||
"Read(//c/Program Files/nodejs/**)",
|
||||
"Read(//c/Users/sandr/AppData/Roaming/**)",
|
||||
"Bash(\"/c/Program Files/nodejs/node.exe\" -v)",
|
||||
"Bash(cmd.exe /c \"where node\")",
|
||||
"Bash(powershell.exe -Command \"Get-Command node -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Source\")",
|
||||
"Bash(powershell.exe -Command \"Get-Command python -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Source\")",
|
||||
"Bash(powershell.exe -Command \"Get-ChildItem -Path ''C:\\\\Program Files'',''C:\\\\Program Files \\(x86\\)'',''C:\\\\Users\\\\sandr\\\\AppData\\\\Local\\\\Programs'' -Filter ''python.exe'' -Recurse -ErrorAction SilentlyContinue | Select-Object -First 5 -ExpandProperty FullName\")",
|
||||
"Bash(command -v uvx)",
|
||||
"Bash(command -v uv)",
|
||||
"Bash(where uvx:*)",
|
||||
"Bash(where uv:*)",
|
||||
"Bash(cmd.exe /c \"where uvx\")",
|
||||
"Read(//c/Users/sandr/.claude/**)"
|
||||
]
|
||||
}
|
||||
}
|
||||
9
.mcp.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"mcpServers": {
|
||||
"blender-mcp": {
|
||||
"type": "stdio",
|
||||
"command": "uvx",
|
||||
"args": ["blender-mcp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
assets/DungeonGate.png
Normal file
|
After Width: | Height: | Size: 3.8 MiB |
BIN
assets/environment/fantasy_door_model.glb
Normal file
42
assets/environment/fantasy_door_model.glb.import
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://b426p2ebu8ob1"
|
||||
path="res://.godot/imported/fantasy_door_model.glb-6e9f76bbd64a39e4fb1fd7612ebc085e.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model.glb"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model.glb-6e9f76bbd64a39e4fb1fd7612ebc085e.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
BIN
assets/environment/fantasy_door_model_0.png
Normal file
|
After Width: | Height: | Size: 203 KiB |
44
assets/environment/fantasy_door_model_0.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cok5b7b8m1noa"
|
||||
path.s3tc="res://.godot/imported/fantasy_door_model_0.png-cef538c44ba18837ba7eed8fbdd3f02c.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "bdecde9ffec112bcbc9dcfaf30854281"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model_0.png"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model_0.png-cef538c44ba18837ba7eed8fbdd3f02c.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/fantasy_door_model_1.png
Normal file
|
After Width: | Height: | Size: 226 KiB |
44
assets/environment/fantasy_door_model_1.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://gb8fpallr0c7"
|
||||
path.s3tc="res://.godot/imported/fantasy_door_model_1.png-ad975a9caa75a201144bdb5d0d4a2c15.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "e73569426b731840227df92e20fd21f9"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model_1.png"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model_1.png-ad975a9caa75a201144bdb5d0d4a2c15.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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://assets/environment/fantasy_door_model_1.png"
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/fantasy_door_model_10.png
Normal file
|
After Width: | Height: | Size: 221 KiB |
44
assets/environment/fantasy_door_model_10.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dwgtky6bqlwlp"
|
||||
path.s3tc="res://.godot/imported/fantasy_door_model_10.png-140135e471df0cd6eeaaa1d8e1a5fae9.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "fe811ce55c3fa0ee6a0de43b5907826d"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model_10.png"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model_10.png-140135e471df0cd6eeaaa1d8e1a5fae9.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/fantasy_door_model_11.png
Normal file
|
After Width: | Height: | Size: 178 KiB |
44
assets/environment/fantasy_door_model_11.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bmpvmm6y8qvae"
|
||||
path.s3tc="res://.godot/imported/fantasy_door_model_11.png-d7ebdc8b0c79e9ca7ccad48f21c53024.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "5f1bf4e41bd5be017da585383fba31af"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model_11.png"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model_11.png-d7ebdc8b0c79e9ca7ccad48f21c53024.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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://assets/environment/fantasy_door_model_11.png"
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/fantasy_door_model_2.png
Normal file
|
After Width: | Height: | Size: 173 KiB |
44
assets/environment/fantasy_door_model_2.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://vuk267guct4h"
|
||||
path.s3tc="res://.godot/imported/fantasy_door_model_2.png-9629efc552b580bc0571e0cf1bc363d4.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "bcd0358549bc66c883d55bd4d1c52f00"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model_2.png"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model_2.png-9629efc552b580bc0571e0cf1bc363d4.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/fantasy_door_model_3.png
Normal file
|
After Width: | Height: | Size: 200 KiB |
44
assets/environment/fantasy_door_model_3.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c3rsfo3xwentp"
|
||||
path.s3tc="res://.godot/imported/fantasy_door_model_3.png-6584fb7a2475576700d102422a503bf9.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "f282f5dcd09b28e10078ebf9d5557c2d"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model_3.png"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model_3.png-6584fb7a2475576700d102422a503bf9.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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://assets/environment/fantasy_door_model_3.png"
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/fantasy_door_model_4.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
44
assets/environment/fantasy_door_model_4.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dkj4akbhv103u"
|
||||
path.s3tc="res://.godot/imported/fantasy_door_model_4.png-3ec4359eaee1a91078a5aa8c97d53b73.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "d21ff5eeae0097a85537b2ff8e5e5d80"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model_4.png"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model_4.png-3ec4359eaee1a91078a5aa8c97d53b73.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/fantasy_door_model_5.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
44
assets/environment/fantasy_door_model_5.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bl1assxu60pru"
|
||||
path.s3tc="res://.godot/imported/fantasy_door_model_5.png-b3b471161dff554f0845b10a1d1bc40b.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "63cd1c2a9266944bcfac9e405f5e115d"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model_5.png"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model_5.png-b3b471161dff554f0845b10a1d1bc40b.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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://assets/environment/fantasy_door_model_5.png"
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/fantasy_door_model_6.png
Normal file
|
After Width: | Height: | Size: 204 KiB |
44
assets/environment/fantasy_door_model_6.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c2cq453f1bjtr"
|
||||
path.s3tc="res://.godot/imported/fantasy_door_model_6.png-d0a7e6f5bd4cb0aadb10aa66bff88f78.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "03d98ca85389b7c1eb3801d98dee7d32"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model_6.png"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model_6.png-d0a7e6f5bd4cb0aadb10aa66bff88f78.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/fantasy_door_model_7.png
Normal file
|
After Width: | Height: | Size: 196 KiB |
44
assets/environment/fantasy_door_model_7.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cm3reln1f3eyn"
|
||||
path.s3tc="res://.godot/imported/fantasy_door_model_7.png-302b0f18508c47876a52774bc8b62539.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "83d799cbcb585594f5c2cb0370b42774"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model_7.png"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model_7.png-302b0f18508c47876a52774bc8b62539.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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://assets/environment/fantasy_door_model_7.png"
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/fantasy_door_model_8.png
Normal file
|
After Width: | Height: | Size: 157 KiB |
44
assets/environment/fantasy_door_model_8.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bd6lp41v0hlq3"
|
||||
path.s3tc="res://.godot/imported/fantasy_door_model_8.png-4958758ac22f3c64f4d78ae8cb3f6aee.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "6d1c2d42b370249e2e276a1e6f729343"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model_8.png"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model_8.png-4958758ac22f3c64f4d78ae8cb3f6aee.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/fantasy_door_model_9.png
Normal file
|
After Width: | Height: | Size: 164 KiB |
44
assets/environment/fantasy_door_model_9.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ndr13p67gq51"
|
||||
path.s3tc="res://.godot/imported/fantasy_door_model_9.png-977eb7209c4b501fdd40e6eb5c6defdb.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "82246b7c0e3d2d8efb428c024f0fd82c"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/fantasy_door_model_9.png"
|
||||
dest_files=["res://.godot/imported/fantasy_door_model_9.png-977eb7209c4b501fdd40e6eb5c6defdb.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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://assets/environment/fantasy_door_model_9.png"
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
42
assets/environment/medieval_town.glb.import
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dawbdtnyiha0m"
|
||||
path="res://.godot/imported/medieval_town.glb-d3c74ef868325655c5dbd5fa52c233be.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town.glb"
|
||||
dest_files=["res://.godot/imported/medieval_town.glb-d3c74ef868325655c5dbd5fa52c233be.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
BIN
assets/environment/medieval_town_0.jpg
Normal file
|
After Width: | Height: | Size: 24 KiB |
44
assets/environment/medieval_town_0.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://chp1anuoioygy"
|
||||
path.s3tc="res://.godot/imported/medieval_town_0.jpg-795400c6555dd8e1984679def748e2fd.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "dffc9f8f45a8bb0f52800a8bcb0da1da"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_0.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_0.jpg-795400c6555dd8e1984679def748e2fd.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_1.jpg
Normal file
|
After Width: | Height: | Size: 44 KiB |
44
assets/environment/medieval_town_1.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://chhi53re2i6pe"
|
||||
path.s3tc="res://.godot/imported/medieval_town_1.jpg-01e7610777bcac0ecd34e9e3c0a15ca6.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "e67a38cd94d22088fbee0da62dd1b03f"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_1.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_1.jpg-01e7610777bcac0ecd34e9e3c0a15ca6.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_10.jpg
Normal file
|
After Width: | Height: | Size: 41 KiB |
44
assets/environment/medieval_town_10.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cwov4o7co6m05"
|
||||
path.s3tc="res://.godot/imported/medieval_town_10.jpg-8033940c2011052d780b53def34d11bb.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "a8e5eb4e7298f2c09b15023d30ce394a"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_10.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_10.jpg-8033940c2011052d780b53def34d11bb.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_11.jpg
Normal file
|
After Width: | Height: | Size: 29 KiB |
44
assets/environment/medieval_town_11.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dloouolk6sa87"
|
||||
path.s3tc="res://.godot/imported/medieval_town_11.jpg-4f0b4d7169e3b1a3c27c5b1bb1d7e56e.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "83b18a710fea843fffbfa8bf4fcb6bf2"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_11.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_11.jpg-4f0b4d7169e3b1a3c27c5b1bb1d7e56e.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_12.jpg
Normal file
|
After Width: | Height: | Size: 29 KiB |
44
assets/environment/medieval_town_12.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cs1dppk2kdjjb"
|
||||
path.s3tc="res://.godot/imported/medieval_town_12.jpg-a260d4fa7762d283afb93f7a4f45aa88.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "cf395b056542753e4a73b49ed61583dc"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_12.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_12.jpg-a260d4fa7762d283afb93f7a4f45aa88.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_13.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
44
assets/environment/medieval_town_13.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cuglyr8ug8g3v"
|
||||
path.s3tc="res://.godot/imported/medieval_town_13.png-56977327eae0a35eb90b53d61d727e5e.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "6bbf0349f160418571a3926369585bc1"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_13.png"
|
||||
dest_files=["res://.godot/imported/medieval_town_13.png-56977327eae0a35eb90b53d61d727e5e.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_14.jpg
Normal file
|
After Width: | Height: | Size: 55 KiB |
44
assets/environment/medieval_town_14.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ddg7av2alxqbr"
|
||||
path.s3tc="res://.godot/imported/medieval_town_14.jpg-22995a216164135b69cd566f5a8196a1.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "91dc26628925eef209fa915819dae934"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_14.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_14.jpg-22995a216164135b69cd566f5a8196a1.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_15.jpg
Normal file
|
After Width: | Height: | Size: 25 KiB |
44
assets/environment/medieval_town_15.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b871b0hqkmqvm"
|
||||
path.s3tc="res://.godot/imported/medieval_town_15.jpg-d68f0e1296aa68022de7cd2d1d623d99.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "549944b6881184ab299981eee02a819b"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_15.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_15.jpg-d68f0e1296aa68022de7cd2d1d623d99.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_16.jpg
Normal file
|
After Width: | Height: | Size: 36 KiB |
44
assets/environment/medieval_town_16.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://drkby4stgjyes"
|
||||
path.s3tc="res://.godot/imported/medieval_town_16.jpg-4917b597f49865c5f20410cd96922dc5.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "9eddb07e6e0d0aa879fa9d6bdf532744"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_16.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_16.jpg-4917b597f49865c5f20410cd96922dc5.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_2.jpg
Normal file
|
After Width: | Height: | Size: 44 KiB |
44
assets/environment/medieval_town_2.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bab3g6clcf071"
|
||||
path.s3tc="res://.godot/imported/medieval_town_2.jpg-533fa51b684c9a31f7543cbc0ff4c27f.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "e67a38cd94d22088fbee0da62dd1b03f"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_2.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_2.jpg-533fa51b684c9a31f7543cbc0ff4c27f.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_3.jpg
Normal file
|
After Width: | Height: | Size: 12 KiB |
44
assets/environment/medieval_town_3.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c0gdoefu362q6"
|
||||
path.s3tc="res://.godot/imported/medieval_town_3.jpg-a80b5bf183c45bf0565abd1f9c176f53.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "df27e921252215c91a5fea6eb92157ed"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_3.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_3.jpg-a80b5bf183c45bf0565abd1f9c176f53.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_4.jpg
Normal file
|
After Width: | Height: | Size: 33 KiB |
44
assets/environment/medieval_town_4.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bnmy0r5h8h6c0"
|
||||
path.s3tc="res://.godot/imported/medieval_town_4.jpg-6634ca8e2a1b14b3c6d791e8ab76cc22.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "cd180ff03a059bda507276946133b2cb"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_4.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_4.jpg-6634ca8e2a1b14b3c6d791e8ab76cc22.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_5.jpg
Normal file
|
After Width: | Height: | Size: 53 KiB |
44
assets/environment/medieval_town_5.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://drrg0bi2ann05"
|
||||
path.s3tc="res://.godot/imported/medieval_town_5.jpg-84119507ada1339a98a7f72bf53c4fd5.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "c5d00703de61f5ed6821bb582da5ef8c"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_5.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_5.jpg-84119507ada1339a98a7f72bf53c4fd5.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_6.jpg
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
44
assets/environment/medieval_town_6.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://s777oib7nwbd"
|
||||
path.s3tc="res://.godot/imported/medieval_town_6.jpg-747e57e080740cd299ca7be5c1de681e.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "b6dfcb1d08ca5b50d0ffb38f3b28c947"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_6.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_6.jpg-747e57e080740cd299ca7be5c1de681e.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_7.jpg
Normal file
|
After Width: | Height: | Size: 15 KiB |
44
assets/environment/medieval_town_7.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dkbyemxdwvv1o"
|
||||
path.s3tc="res://.godot/imported/medieval_town_7.jpg-d5ecaa3b78d78ae669c4d4eea44e783a.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "977753c4a37f673350bc99898dffa635"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_7.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_7.jpg-d5ecaa3b78d78ae669c4d4eea44e783a.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_8.jpg
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
44
assets/environment/medieval_town_8.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://clcdtfy8hagnn"
|
||||
path.s3tc="res://.godot/imported/medieval_town_8.jpg-dab5542dadb03a63dce742cba77c66da.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "6f679f9c7e316f2c3c24d10a9129f805"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_8.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_8.jpg-dab5542dadb03a63dce742cba77c66da.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/environment/medieval_town_9.jpg
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
44
assets/environment/medieval_town_9.jpg.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d0uh0odep1wde"
|
||||
path.s3tc="res://.godot/imported/medieval_town_9.jpg-76b513737f93e9d4137bfd410ede6645.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "6f679f9c7e316f2c3c24d10a9129f805"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/environment/medieval_town_9.jpg"
|
||||
dest_files=["res://.godot/imported/medieval_town_9.jpg-76b513737f93e9d4137bfd410ede6645.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
assets/sounds/auto_attack_002_48000hz.wav
Normal file
24
assets/sounds/auto_attack_002_48000hz.wav.import
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://dvre4c83afg5w"
|
||||
path="res://.godot/imported/auto_attack_002_48000hz.wav-ec4500651841ce207533ed5225efbbbe.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/sounds/auto_attack_002_48000hz.wav"
|
||||
dest_files=["res://.godot/imported/auto_attack_002_48000hz.wav-ec4500651841ce207533ed5225efbbbe.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
assets/sounds/heavy_strike_003_48000hz.wav
Normal file
24
assets/sounds/heavy_strike_003_48000hz.wav.import
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://c4mnesvupqhhe"
|
||||
path="res://.godot/imported/heavy_strike_003_48000hz.wav-33b848f7c4eab400b2691d3ba63aaa83.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/sounds/heavy_strike_003_48000hz.wav"
|
||||
dest_files=["res://.godot/imported/heavy_strike_003_48000hz.wav-33b848f7c4eab400b2691d3ba63aaa83.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://bsexsl3nv1kxr"
|
||||
path="res://.godot/imported/musicgen_1774098786.wav-bfb26ce071082853446c7d95b3369f0a.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/sounds/musicgen_1774098786.wav"
|
||||
dest_files=["res://.godot/imported/musicgen_1774098786.wav-bfb26ce071082853446c7d95b3369f0a.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://cqke0ox8h83l5"
|
||||
path="res://.godot/imported/musicgen_1774099814_48000hz.wav-7c1b1b2d197eb35a731b7c5b9e96c952.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/sounds/musicgen_1774099814_48000hz.wav"
|
||||
dest_files=["res://.godot/imported/musicgen_1774099814_48000hz.wav-7c1b1b2d197eb35a731b7c5b9e96c952.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://d3c172wut4k4o"
|
||||
path="res://.godot/imported/musicgen_1774101118_48000hz.wav-af0e145277d62a99afaaf71342a8d895.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/sounds/musicgen_1774101118_48000hz.wav"
|
||||
dest_files=["res://.godot/imported/musicgen_1774101118_48000hz.wav-af0e145277d62a99afaaf71342a8d895.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
2650
blender-mcp.py
Normal file
|
|
@ -1,5 +1,51 @@
|
|||
from .nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS
|
||||
import os
|
||||
from aiohttp import web
|
||||
import server
|
||||
|
||||
WEB_DIRECTORY = "./web"
|
||||
|
||||
# API-Endpoint zum Löschen einzelner Audio-Dateien
|
||||
@server.PromptServer.instance.routes.post("/audiocraft/delete")
|
||||
async def delete_audio_file(request):
|
||||
data = await request.json()
|
||||
filename = data.get("filename", "")
|
||||
if not filename or ".." in filename or "/" in filename or "\\" in filename:
|
||||
return web.json_response({"error": "Ungueltiger Dateiname"}, status=400)
|
||||
|
||||
audio_dir = "/app/ComfyUI/output/audio"
|
||||
filepath = os.path.join(audio_dir, filename)
|
||||
if not os.path.exists(filepath):
|
||||
return web.json_response({"error": "Datei nicht gefunden"}, status=404)
|
||||
|
||||
os.remove(filepath)
|
||||
# Auch die zugehörige upsampled Version löschen falls vorhanden
|
||||
base = filename.replace(".wav", "")
|
||||
for f in os.listdir(audio_dir):
|
||||
if f.startswith(base) and f != filename and f.endswith(".wav"):
|
||||
os.remove(os.path.join(audio_dir, f))
|
||||
|
||||
return web.json_response({"ok": True, "deleted": filename})
|
||||
|
||||
|
||||
# API-Endpoint zum Auflisten aller Audio-Dateien
|
||||
@server.PromptServer.instance.routes.get("/audiocraft/list")
|
||||
async def list_audio_files(request):
|
||||
audio_dir = "/app/ComfyUI/output/audio"
|
||||
if not os.path.exists(audio_dir):
|
||||
return web.json_response({"files": [], "summary": "Kein Audio-Ordner"})
|
||||
|
||||
files = []
|
||||
total_size = 0
|
||||
for f in sorted(os.listdir(audio_dir)):
|
||||
if f.endswith(".wav"):
|
||||
fpath = os.path.join(audio_dir, f)
|
||||
size = os.path.getsize(fpath)
|
||||
total_size += size
|
||||
files.append({"name": f, "size_mb": round(size / 1024 / 1024, 2)})
|
||||
|
||||
summary = f"{len(files)} Dateien | {total_size / 1024 / 1024:.1f} MB"
|
||||
return web.json_response({"files": files, "summary": summary})
|
||||
|
||||
|
||||
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "WEB_DIRECTORY"]
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ import torch
|
|||
import torchaudio
|
||||
import os
|
||||
import time
|
||||
import glob as globmod
|
||||
import re
|
||||
|
||||
|
||||
class MusicGenNode:
|
||||
|
|
@ -10,6 +12,7 @@ class MusicGenNode:
|
|||
return {
|
||||
"required": {
|
||||
"prompt": ("STRING", {"multiline": True, "default": "dark dungeon ambience, slow, mysterious"}),
|
||||
"name": ("STRING", {"default": "music"}),
|
||||
"duration": ("FLOAT", {"default": 10.0, "min": 1.0, "max": 120.0, "step": 1.0}),
|
||||
"model": (["facebook/musicgen-stereo-medium", "facebook/musicgen-stereo-large", "facebook/musicgen-medium", "facebook/musicgen-large", "facebook/musicgen-small"],),
|
||||
"seed": ("INT", {"default": 0, "min": 0, "max": 2**32 - 1}),
|
||||
|
|
@ -26,7 +29,7 @@ class MusicGenNode:
|
|||
CATEGORY = "AudioCraft"
|
||||
OUTPUT_NODE = True
|
||||
|
||||
def generate(self, prompt, duration, model, seed, temperature, cfg_coef, top_k, extend_stride):
|
||||
def generate(self, prompt, name, duration, model, seed, temperature, cfg_coef, top_k, extend_stride):
|
||||
from audiocraft.models import MusicGen
|
||||
from audiocraft.data.audio import audio_write
|
||||
|
||||
|
|
@ -49,9 +52,12 @@ class MusicGenNode:
|
|||
|
||||
output_dir = "/app/ComfyUI/output/audio"
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
filename = f"musicgen_{int(time.time())}"
|
||||
base_name = re.sub(r'[^\w\-]', '_', name.strip().lower())
|
||||
num = _next_number(output_dir, base_name)
|
||||
filename = f"{base_name}_{num:03d}"
|
||||
out_path = os.path.join(output_dir, filename)
|
||||
audio_write(out_path, wav[0].cpu(), mg.sample_rate, strategy="loudness")
|
||||
print(f"[MusicGen] Saved: {filename}.wav")
|
||||
|
||||
return (out_path + ".wav",)
|
||||
|
||||
|
|
@ -63,6 +69,7 @@ class MusicGenLongNode:
|
|||
return {
|
||||
"required": {
|
||||
"prompt": ("STRING", {"multiline": True, "default": "dark fantasy orchestral music, deep cello, french horn, slow war drums, mysterious ambient"}),
|
||||
"name": ("STRING", {"default": "music_long"}),
|
||||
"total_duration": ("FLOAT", {"default": 90.0, "min": 10.0, "max": 300.0, "step": 5.0}),
|
||||
"segment_duration": ("FLOAT", {"default": 30.0, "min": 10.0, "max": 30.0, "step": 5.0}),
|
||||
"context_seconds": ("FLOAT", {"default": 5.0, "min": 1.0, "max": 10.0, "step": 0.5}),
|
||||
|
|
@ -80,7 +87,7 @@ class MusicGenLongNode:
|
|||
CATEGORY = "AudioCraft"
|
||||
OUTPUT_NODE = True
|
||||
|
||||
def generate_long(self, prompt, total_duration, segment_duration, context_seconds, model, seed, temperature, cfg_coef, top_k):
|
||||
def generate_long(self, prompt, name, total_duration, segment_duration, context_seconds, model, seed, temperature, cfg_coef, top_k):
|
||||
from audiocraft.models import MusicGen
|
||||
from audiocraft.data.audio import audio_write
|
||||
|
||||
|
|
@ -128,24 +135,56 @@ class MusicGenLongNode:
|
|||
|
||||
output_dir = "/app/ComfyUI/output/audio"
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
filename = f"musicgen_long_{int(time.time())}"
|
||||
base_name = re.sub(r'[^\w\-]', '_', name.strip().lower())
|
||||
num = _next_number(output_dir, base_name)
|
||||
filename = f"{base_name}_{num:03d}"
|
||||
out_path = os.path.join(output_dir, filename)
|
||||
audio_write(out_path, result, sample_rate, strategy="loudness")
|
||||
print(f"[MusicGenLong] Fertig: {out_path}.wav ({result.shape[1]/sample_rate:.1f}s)")
|
||||
print(f"[MusicGenLong] Fertig: {filename}.wav ({result.shape[1]/sample_rate:.1f}s)")
|
||||
return (out_path + ".wav",)
|
||||
|
||||
|
||||
def _trim_silence(wav, sample_rate, threshold_db=-40.0, pad_ms=10):
|
||||
"""Schneidet Stille am Anfang und Ende ab"""
|
||||
threshold = 10 ** (threshold_db / 20.0)
|
||||
# Mono oder Stereo: max über alle Kanäle
|
||||
amplitude = wav.abs().max(dim=0).values
|
||||
above = (amplitude > threshold).nonzero(as_tuple=True)[0]
|
||||
if len(above) == 0:
|
||||
return wav
|
||||
start = max(0, above[0].item() - int(pad_ms * sample_rate / 1000))
|
||||
end = min(wav.shape[1], above[-1].item() + int(pad_ms * sample_rate / 1000))
|
||||
trimmed = wav[:, start:end]
|
||||
if trimmed.shape[1] != wav.shape[1]:
|
||||
print(f"[Trim] {wav.shape[1]/sample_rate:.2f}s → {trimmed.shape[1]/sample_rate:.2f}s (Stille entfernt)")
|
||||
return trimmed
|
||||
|
||||
|
||||
def _next_number(output_dir, base_name):
|
||||
"""Findet die nächste fortlaufende Nummer für einen Dateinamen"""
|
||||
pattern = os.path.join(output_dir, f"{base_name}_*.wav")
|
||||
existing = globmod.glob(pattern)
|
||||
max_num = 0
|
||||
for f in existing:
|
||||
match = re.search(rf"{re.escape(base_name)}_(\d+)", os.path.basename(f))
|
||||
if match:
|
||||
max_num = max(max_num, int(match.group(1)))
|
||||
return max_num + 1
|
||||
|
||||
|
||||
class AudioGenNode:
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
return {
|
||||
"required": {
|
||||
"prompt": ("STRING", {"multiline": True, "default": "sword clash metal sound effect"}),
|
||||
"name": ("STRING", {"default": "sfx"}),
|
||||
"duration": ("FLOAT", {"default": 3.0, "min": 0.5, "max": 30.0, "step": 0.5}),
|
||||
"seed": ("INT", {"default": 0, "min": 0, "max": 2**32 - 1}),
|
||||
"temperature": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 2.0, "step": 0.05}),
|
||||
"cfg_coef": ("FLOAT", {"default": 3.0, "min": 0.5, "max": 10.0, "step": 0.5}),
|
||||
"top_k": ("INT", {"default": 250, "min": 1, "max": 1000}),
|
||||
"trim_silence": (["Ja", "Nein"], {"default": "Ja"}),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -155,7 +194,7 @@ class AudioGenNode:
|
|||
CATEGORY = "AudioCraft"
|
||||
OUTPUT_NODE = True
|
||||
|
||||
def generate(self, prompt, duration, seed, temperature, cfg_coef, top_k):
|
||||
def generate(self, prompt, name, duration, seed, temperature, cfg_coef, top_k, trim_silence):
|
||||
from audiocraft.models import AudioGen
|
||||
from audiocraft.data.audio import audio_write
|
||||
|
||||
|
|
@ -173,12 +212,19 @@ class AudioGenNode:
|
|||
|
||||
print(f"[AudioGen] Generating: {prompt}")
|
||||
wav = ag.generate([prompt])
|
||||
result = wav[0].cpu()
|
||||
|
||||
if trim_silence == "Ja":
|
||||
result = _trim_silence(result, ag.sample_rate)
|
||||
|
||||
output_dir = "/app/ComfyUI/output/audio"
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
filename = f"audiogen_{int(time.time())}"
|
||||
base_name = re.sub(r'[^\w\-]', '_', name.strip().lower())
|
||||
num = _next_number(output_dir, base_name)
|
||||
filename = f"{base_name}_{num:03d}"
|
||||
out_path = os.path.join(output_dir, filename)
|
||||
audio_write(out_path, wav[0].cpu(), ag.sample_rate, strategy="loudness")
|
||||
audio_write(out_path, result, ag.sample_rate, strategy="loudness")
|
||||
print(f"[AudioGen] Saved: {filename}.wav ({result.shape[1]/ag.sample_rate:.2f}s)")
|
||||
|
||||
return (out_path + ".wav",)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,95 +1,208 @@
|
|||
import { app } from "../../../scripts/app.js";
|
||||
import { api } from "../../../scripts/api.js";
|
||||
|
||||
let loopEnabled = false;
|
||||
let activeAudio = null;
|
||||
let activeBtn = null;
|
||||
|
||||
function stopActive() {
|
||||
if (activeAudio) {
|
||||
activeAudio.pause();
|
||||
activeAudio = null;
|
||||
}
|
||||
if (activeBtn) {
|
||||
activeBtn.textContent = "\u25B6";
|
||||
activeBtn.style.color = "#8f8";
|
||||
activeBtn = null;
|
||||
}
|
||||
}
|
||||
|
||||
async function refreshFileList(node) {
|
||||
try {
|
||||
const resp = await api.fetchApi("/audiocraft/list");
|
||||
const data = await resp.json();
|
||||
const container = node._managerContainer;
|
||||
container.innerHTML = "";
|
||||
buildContent(container, data.summary, data.files);
|
||||
|
||||
const listHeight = Math.min(40 + data.files.length * 26, 800);
|
||||
node._managerWidget.computeSize = () => [node.size[0], listHeight];
|
||||
node.setSize([Math.max(node.size[0], 500), listHeight + 80]);
|
||||
app.graph.setDirtyCanvas(true);
|
||||
} catch (e) {
|
||||
console.error("Refresh failed:", e);
|
||||
}
|
||||
}
|
||||
|
||||
app.registerExtension({
|
||||
name: "AudioCraft.AudioManager",
|
||||
async beforeRegisterNodeDef(nodeType, nodeData, app) {
|
||||
if (nodeData.name === "AudioManager") {
|
||||
const origOnNodeCreated = nodeType.prototype.onNodeCreated;
|
||||
nodeType.prototype.onNodeCreated = function () {
|
||||
origOnNodeCreated?.apply(this, arguments);
|
||||
|
||||
const container = document.createElement("div");
|
||||
container.style.cssText = "padding:4px;overflow-y:auto;";
|
||||
|
||||
const loadingMsg = document.createElement("div");
|
||||
loadingMsg.textContent = "Klicke \u21BB Refresh um Dateien zu laden";
|
||||
loadingMsg.style.cssText = "color:#888;font-size:12px;padding:8px;";
|
||||
container.appendChild(loadingMsg);
|
||||
|
||||
this._managerContainer = container;
|
||||
this._managerWidget = this.addDOMWidget("audio_manager", "dom", container, {
|
||||
serialize: false,
|
||||
hideOnZoom: false,
|
||||
});
|
||||
this._managerWidget.computeSize = () => [this.size[0], 60];
|
||||
|
||||
// Auto-refresh on creation
|
||||
setTimeout(() => refreshFileList(this), 500);
|
||||
};
|
||||
|
||||
// Also refresh when node is executed via Queue
|
||||
const onExecuted = nodeType.prototype.onExecuted;
|
||||
nodeType.prototype.onExecuted = function (message) {
|
||||
onExecuted?.apply(this, arguments);
|
||||
|
||||
if (!message?.text) return;
|
||||
|
||||
const summary = message.text[0]?.content || "";
|
||||
const files = message.files || [];
|
||||
|
||||
if (this._managerWidget) {
|
||||
// Update existing widget content
|
||||
this._managerContainer.innerHTML = "";
|
||||
buildContent(this._managerContainer, summary, files);
|
||||
const h = Math.min(60 + files.length * 22, 500);
|
||||
this._managerWidget.computeSize = () => [this.size[0], h];
|
||||
this.setSize([this.size[0], h + 80]);
|
||||
} else {
|
||||
const container = document.createElement("div");
|
||||
container.style.cssText = "padding:4px;overflow-y:auto;max-height:450px;";
|
||||
buildContent(container, summary, files);
|
||||
|
||||
this._managerContainer = container;
|
||||
this._managerWidget = this.addDOMWidget("audio_manager", "dom", container, {
|
||||
serialize: false,
|
||||
hideOnZoom: false,
|
||||
});
|
||||
const h = Math.min(60 + files.length * 22, 500);
|
||||
this._managerWidget.computeSize = () => [this.size[0], h];
|
||||
this.setSize([this.size[0], h + 80]);
|
||||
}
|
||||
|
||||
app.graph.setDirtyCanvas(true);
|
||||
refreshFileList(this);
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
// Listen for any prompt execution to auto-refresh AudioManager nodes
|
||||
api.addEventListener("executed", (event) => {
|
||||
// After any node executes, refresh all AudioManager nodes
|
||||
if (event?.detail?.node) {
|
||||
const nodes = app.graph._nodes.filter(n => n.type === "AudioManager");
|
||||
for (const node of nodes) {
|
||||
if (node._managerContainer) {
|
||||
refreshFileList(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function buildContent(container, summary, files) {
|
||||
const header = document.createElement("div");
|
||||
header.textContent = summary;
|
||||
header.style.cssText = "font-weight:bold;margin-bottom:6px;color:#fff;font-size:12px;";
|
||||
container.appendChild(header);
|
||||
const headerRow = document.createElement("div");
|
||||
headerRow.style.cssText = "display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;padding:4px;background:#333;border-radius:4px;gap:4px;";
|
||||
|
||||
const headerText = document.createElement("span");
|
||||
headerText.textContent = summary;
|
||||
headerText.style.cssText = "font-weight:bold;color:#fff;font-size:12px;white-space:nowrap;";
|
||||
|
||||
const btnGroup = document.createElement("div");
|
||||
btnGroup.style.cssText = "display:flex;gap:4px;";
|
||||
|
||||
const refreshBtn = document.createElement("button");
|
||||
refreshBtn.textContent = "\u21BB Refresh";
|
||||
refreshBtn.style.cssText = "background:#2a3a5a;border:none;color:#8cf;cursor:pointer;padding:3px 8px;border-radius:3px;font-size:11px;white-space:nowrap;";
|
||||
refreshBtn.onclick = () => {
|
||||
const node = app.graph._nodes.find(n => n._managerContainer === container.parentElement || n._managerContainer === container);
|
||||
if (node) refreshFileList(node);
|
||||
};
|
||||
|
||||
const loopBtn = document.createElement("button");
|
||||
loopBtn.textContent = loopEnabled ? "\uD83D\uDD01 Loop AN" : "\uD83D\uDD01 Loop";
|
||||
loopBtn.style.cssText = `background:${loopEnabled ? "#2a5a2a" : "#444"};border:none;color:${loopEnabled ? "#8f8" : "#888"};cursor:pointer;padding:3px 8px;border-radius:3px;font-size:11px;white-space:nowrap;`;
|
||||
loopBtn.onclick = () => {
|
||||
loopEnabled = !loopEnabled;
|
||||
loopBtn.textContent = loopEnabled ? "\uD83D\uDD01 Loop AN" : "\uD83D\uDD01 Loop";
|
||||
loopBtn.style.background = loopEnabled ? "#2a5a2a" : "#444";
|
||||
loopBtn.style.color = loopEnabled ? "#8f8" : "#888";
|
||||
if (activeAudio) activeAudio.loop = loopEnabled;
|
||||
};
|
||||
|
||||
btnGroup.appendChild(refreshBtn);
|
||||
btnGroup.appendChild(loopBtn);
|
||||
headerRow.appendChild(headerText);
|
||||
headerRow.appendChild(btnGroup);
|
||||
container.appendChild(headerRow);
|
||||
|
||||
if (files.length === 0) return;
|
||||
|
||||
for (const f of files) {
|
||||
const row = document.createElement("div");
|
||||
row.style.cssText = "display:flex;justify-content:space-between;padding:2px 0;font-size:11px;color:#ccc;border-bottom:1px solid #333;align-items:center;";
|
||||
row.style.cssText = "display:flex;align-items:center;padding:3px 2px;font-size:11px;color:#ccc;border-bottom:1px solid #333;min-height:22px;";
|
||||
|
||||
const name = document.createElement("span");
|
||||
name.textContent = f.name;
|
||||
name.style.cssText = "overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;margin-right:8px;";
|
||||
name.style.cssText = "overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;margin-right:6px;";
|
||||
|
||||
const size = document.createElement("span");
|
||||
size.textContent = f.size_mb + " MB";
|
||||
size.style.cssText = "color:#8cf;min-width:60px;text-align:right;margin-right:8px;";
|
||||
size.style.cssText = "color:#8cf;min-width:55px;text-align:right;margin-right:6px;font-size:10px;";
|
||||
|
||||
const playBtn = document.createElement("button");
|
||||
playBtn.textContent = "\u25B6";
|
||||
playBtn.style.cssText = "background:#444;border:none;color:#8f8;cursor:pointer;padding:1px 6px;border-radius:3px;font-size:10px;";
|
||||
playBtn.title = "Abspielen";
|
||||
playBtn.style.cssText = "background:#444;border:none;color:#8f8;cursor:pointer;padding:2px 8px;border-radius:3px;font-size:11px;margin-right:4px;";
|
||||
|
||||
const audioSrc = api.apiURL(
|
||||
`/view?filename=${encodeURIComponent(f.name)}&subfolder=audio&type=output`
|
||||
);
|
||||
|
||||
let currentAudio = null;
|
||||
const dlBtn = document.createElement("a");
|
||||
dlBtn.href = audioSrc;
|
||||
dlBtn.download = f.name;
|
||||
dlBtn.textContent = "\u2B07";
|
||||
dlBtn.title = "Download";
|
||||
dlBtn.style.cssText = "color:#8cf;text-decoration:none;font-size:13px;padding:0 4px;";
|
||||
|
||||
const delBtn = document.createElement("button");
|
||||
delBtn.textContent = "\u2716";
|
||||
delBtn.title = "Loeschen";
|
||||
delBtn.style.cssText = "background:#533;border:none;color:#f66;cursor:pointer;padding:2px 6px;border-radius:3px;font-size:11px;margin-left:4px;";
|
||||
delBtn.onclick = async () => {
|
||||
if (activeBtn === playBtn) stopActive();
|
||||
try {
|
||||
const resp = await api.fetchApi("/audiocraft/delete", {
|
||||
method: "POST",
|
||||
headers: {"Content-Type": "application/json"},
|
||||
body: JSON.stringify({filename: f.name}),
|
||||
});
|
||||
if (resp.ok) {
|
||||
row.style.opacity = "0.3";
|
||||
row.style.pointerEvents = "none";
|
||||
delBtn.textContent = "\u2714";
|
||||
delBtn.style.color = "#888";
|
||||
}
|
||||
} catch (e) {
|
||||
console.error("Delete failed:", e);
|
||||
}
|
||||
};
|
||||
|
||||
playBtn.onclick = () => {
|
||||
if (currentAudio) {
|
||||
currentAudio.pause();
|
||||
currentAudio = null;
|
||||
playBtn.textContent = "\u25B6";
|
||||
if (activeBtn === playBtn) {
|
||||
stopActive();
|
||||
return;
|
||||
}
|
||||
currentAudio = new Audio(audioSrc);
|
||||
currentAudio.play();
|
||||
stopActive();
|
||||
|
||||
const audio = new Audio(audioSrc);
|
||||
audio.loop = loopEnabled;
|
||||
audio.play();
|
||||
activeAudio = audio;
|
||||
activeBtn = playBtn;
|
||||
playBtn.textContent = "\u25A0";
|
||||
currentAudio.onended = () => {
|
||||
playBtn.textContent = "\u25B6";
|
||||
currentAudio = null;
|
||||
playBtn.style.color = "#f88";
|
||||
|
||||
audio.onended = () => {
|
||||
if (!audio.loop) {
|
||||
playBtn.textContent = "\u25B6";
|
||||
playBtn.style.color = "#8f8";
|
||||
activeAudio = null;
|
||||
activeBtn = null;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
row.appendChild(name);
|
||||
row.appendChild(size);
|
||||
row.appendChild(playBtn);
|
||||
row.appendChild(dlBtn);
|
||||
row.appendChild(delBtn);
|
||||
container.appendChild(row);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,12 +17,14 @@
|
|||
"properties": {"Node name for S&R": "AudioGen"},
|
||||
"widgets_values": [
|
||||
"fast metal sword swing whoosh close range",
|
||||
"heavy_strike",
|
||||
1.5,
|
||||
0,
|
||||
"fixed",
|
||||
0.8,
|
||||
4.5,
|
||||
200
|
||||
200,
|
||||
"Ja"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -72,12 +74,14 @@
|
|||
"properties": {"Node name for S&R": "AudioGen"},
|
||||
"widgets_values": [
|
||||
"magical energy charging electric crackling buildup impact",
|
||||
"spell_effect",
|
||||
2.5,
|
||||
0,
|
||||
"fixed",
|
||||
1.0,
|
||||
3.5,
|
||||
250
|
||||
250,
|
||||
"Ja"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -127,12 +131,14 @@
|
|||
"properties": {"Node name for S&R": "AudioGen"},
|
||||
"widgets_values": [
|
||||
"wind blowing through dark stone dungeon corridor echoing",
|
||||
"dungeon_ambient",
|
||||
8.0,
|
||||
0,
|
||||
"fixed",
|
||||
1.0,
|
||||
3.0,
|
||||
250
|
||||
250,
|
||||
"Ja"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -169,8 +169,10 @@ func _on_music_finished():
|
|||
_music_player.play()
|
||||
|
||||
func _on_play():
|
||||
# Musik-Player an Parent übergeben damit er weiterspielt
|
||||
if _music_player:
|
||||
_music_player.stop()
|
||||
remove_child(_music_player)
|
||||
get_parent().add_child(_music_player)
|
||||
start_game.emit()
|
||||
get_tree().paused = false
|
||||
queue_free()
|
||||
|
|
|
|||
76
world.gd
|
|
@ -37,7 +37,7 @@ const MIN_ROOM_SIZE = 4
|
|||
const MAX_ROOM_SIZE = 9
|
||||
|
||||
@onready var player = $Player
|
||||
@onready var floor_mesh = $Boden/MeshInstance3D
|
||||
@onready var world_env = $WorldEnvironment
|
||||
@onready var gate_area = $DungeonGate/GateArea
|
||||
@onready var gate_label = $DungeonGate/GateLabel
|
||||
|
||||
|
|
@ -63,7 +63,6 @@ var dungeon_rooms: Array = []
|
|||
var saved_dungeons: Dictionary = {}
|
||||
|
||||
func _ready():
|
||||
_setup_floor_material()
|
||||
_setup_sky()
|
||||
# Hauptmenü anzeigen
|
||||
var main_menu = MAIN_MENU.instantiate()
|
||||
|
|
@ -71,72 +70,9 @@ func _ready():
|
|||
main_menu.start_game.connect(_on_start_game)
|
||||
|
||||
func _setup_sky():
|
||||
var sky_mat = ProceduralSkyMaterial.new()
|
||||
sky_mat.sky_top_color = Color(0.15, 0.35, 0.75)
|
||||
sky_mat.sky_horizon_color = Color(0.55, 0.75, 1.0)
|
||||
sky_mat.ground_horizon_color = Color(0.35, 0.30, 0.25)
|
||||
sky_mat.ground_bottom_color = Color(0.1, 0.1, 0.1)
|
||||
sky_mat.sun_angle_max = 30.0
|
||||
sky_mat.sun_curve = 0.15
|
||||
overworld_env = world_env
|
||||
overworld_env_resource = world_env.environment
|
||||
|
||||
var sky = Sky.new()
|
||||
sky.sky_material = sky_mat
|
||||
|
||||
var env = Environment.new()
|
||||
env.background_mode = Environment.BG_SKY
|
||||
env.sky = sky
|
||||
env.ambient_light_source = Environment.AMBIENT_SOURCE_SKY
|
||||
env.ambient_light_energy = 0.6
|
||||
env.tonemap_mode = Environment.TONE_MAPPER_FILMIC
|
||||
|
||||
overworld_env = WorldEnvironment.new()
|
||||
overworld_env.name = "OverworldEnv"
|
||||
overworld_env.environment = env
|
||||
add_child(overworld_env)
|
||||
|
||||
func _setup_floor_material():
|
||||
var shader = Shader.new()
|
||||
shader.code = """
|
||||
shader_type spatial;
|
||||
uniform vec4 grass_color_a : source_color = vec4(0.18, 0.42, 0.12, 1.0);
|
||||
uniform vec4 grass_color_b : source_color = vec4(0.22, 0.50, 0.15, 1.0);
|
||||
uniform vec4 dirt_color : source_color = vec4(0.35, 0.25, 0.15, 1.0);
|
||||
uniform float noise_scale : hint_range(0.01, 0.5) = 0.08;
|
||||
uniform float dirt_threshold : hint_range(0.0, 1.0) = 0.72;
|
||||
|
||||
float hash(vec2 p) {
|
||||
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
|
||||
}
|
||||
|
||||
float noise(vec2 p) {
|
||||
vec2 i = floor(p);
|
||||
vec2 f = fract(p);
|
||||
f = f * f * (3.0 - 2.0 * f);
|
||||
float a = hash(i);
|
||||
float b = hash(i + vec2(1.0, 0.0));
|
||||
float c = hash(i + vec2(0.0, 1.0));
|
||||
float d = hash(i + vec2(1.0, 1.0));
|
||||
return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec3 world_pos = (INV_VIEW_MATRIX * vec4(VERTEX, 1.0)).xyz;
|
||||
vec2 uv = world_pos.xz * noise_scale;
|
||||
float n1 = noise(uv * 3.0);
|
||||
float n2 = noise(uv * 7.0 + vec2(50.0));
|
||||
float n3 = noise(uv * 15.0 + vec2(100.0));
|
||||
float combined = n1 * 0.5 + n2 * 0.35 + n3 * 0.15;
|
||||
vec3 grass = mix(grass_color_a.rgb, grass_color_b.rgb, n2);
|
||||
vec3 col = mix(grass, dirt_color.rgb, step(dirt_threshold, combined));
|
||||
ALBEDO = col;
|
||||
ROUGHNESS = 0.92;
|
||||
METALLIC = 0.0;
|
||||
NORMAL_MAP = vec3(n2 * 0.3, n3 * 0.3, 1.0);
|
||||
}
|
||||
"""
|
||||
var mat = ShaderMaterial.new()
|
||||
mat.shader = shader
|
||||
floor_mesh.material_override = mat
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# PROCESS
|
||||
|
|
@ -754,6 +690,12 @@ func _on_start_game():
|
|||
|
||||
# Klasse ausgewählt: Spieler initialisieren
|
||||
func _on_class_selected(character_class: CharacterClass):
|
||||
# Menü-Musik stoppen und entfernen
|
||||
for child in get_children():
|
||||
if child is AudioStreamPlayer:
|
||||
child.stop()
|
||||
child.queue_free()
|
||||
|
||||
player.character_class = character_class
|
||||
|
||||
# Skills klassenabhängig aufbauen
|
||||
|
|
|
|||
339
world.tscn
|
|
@ -2,55 +2,67 @@
|
|||
|
||||
[ext_resource type="PackedScene" uid="uid://dniyuebl8yhtv" path="res://player.tscn" id="1_f3sb7"]
|
||||
[ext_resource type="Script" uid="uid://cx56h588mfsk0" path="res://world.gd" id="1_tlwt5"]
|
||||
[ext_resource type="PackedScene" uid="uid://cvojaeanxugfj" path="res://enemy.tscn" id="3_enemy"]
|
||||
[ext_resource type="PackedScene" uid="uid://dawbdtnyiha0m" path="res://assets/environment/medieval_town.glb" id="4_town"]
|
||||
[ext_resource type="PackedScene" uid="uid://b426p2ebu8ob1" path="res://assets/environment/fantasy_door_model.glb" id="5_door"]
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="sky_mat"]
|
||||
sky_top_color = Color(0.35, 0.5, 0.75, 1)
|
||||
sky_horizon_color = Color(0.65, 0.7, 0.78, 1)
|
||||
ground_bottom_color = Color(0.2, 0.18, 0.15, 1)
|
||||
ground_horizon_color = Color(0.55, 0.52, 0.48, 1)
|
||||
|
||||
[sub_resource type="Sky" id="sky"]
|
||||
sky_material = SubResource("sky_mat")
|
||||
|
||||
[sub_resource type="Environment" id="env"]
|
||||
background_mode = 2
|
||||
sky = SubResource("sky")
|
||||
ambient_light_source = 2
|
||||
ambient_light_color = Color(0.6, 0.58, 0.55, 1)
|
||||
ambient_light_energy = 0.3
|
||||
tonemap_mode = 2
|
||||
ssao_enabled = true
|
||||
glow_enabled = true
|
||||
fog_enabled = true
|
||||
fog_light_color = Color(0.7, 0.68, 0.62, 1)
|
||||
fog_density = 0.002
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_floor"]
|
||||
size = Vector3(200, 0.5, 200)
|
||||
size = Vector3(2500, 0.5, 2500)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_floor"]
|
||||
size = Vector3(200, 0.5, 200)
|
||||
|
||||
[sub_resource type="NavigationMesh" id="NavigationMesh_fj7yv"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="mat_rock"]
|
||||
albedo_color = Color(0.4, 0.38, 0.35, 1)
|
||||
[sub_resource type="StandardMaterial3D" id="mat_floor"]
|
||||
albedo_color = Color(0.28, 0.35, 0.18, 1)
|
||||
roughness = 0.95
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="mat_stone"]
|
||||
albedo_color = Color(0.3, 0.28, 0.25, 1)
|
||||
roughness = 0.9
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_floor"]
|
||||
size = Vector3(2500, 0.5, 2500)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="mat_entrance"]
|
||||
albedo_color = Color(0.02, 0.02, 0.02, 1)
|
||||
[sub_resource type="NavigationMesh" id="NavigationMesh_fj7yv"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_gate"]
|
||||
size = Vector3(5, 4, 4)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="mat_rock_small"]
|
||||
albedo_color = Color(0.45, 0.42, 0.38, 1)
|
||||
roughness = 0.95
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="mat_trunk"]
|
||||
albedo_color = Color(0.35, 0.22, 0.1, 1)
|
||||
roughness = 0.9
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="mat_leaf"]
|
||||
albedo_color = Color(0.15, 0.45, 0.12, 1)
|
||||
roughness = 0.85
|
||||
|
||||
[node name="World" type="Node3D" unique_id=1518976304]
|
||||
script = ExtResource("1_tlwt5")
|
||||
|
||||
[node name="Boden" type="StaticBody3D" parent="." unique_id=1937472568]
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=801100654]
|
||||
environment = SubResource("env")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Boden" unique_id=1499976920]
|
||||
[node name="Boden" type="StaticBody3D" parent="." unique_id=839662005]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.28, 0)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Boden" unique_id=334777163]
|
||||
shape = SubResource("BoxShape3D_floor")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Boden" unique_id=1316024844]
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Boden" unique_id=1590278465]
|
||||
material_override = SubResource("mat_floor")
|
||||
mesh = SubResource("BoxMesh_floor")
|
||||
|
||||
[node name="MedievalTown" parent="." unique_id=1511860358 instance=ExtResource("4_town")]
|
||||
transform = Transform3D(0.04, 0, 0, 0, 0.04, 0, 0, 0, 0.04, 0, 0, 0)
|
||||
|
||||
[node name="Player" parent="." unique_id=841198255 instance=ExtResource("1_f3sb7")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.435, 0)
|
||||
transform = Transform3D(-0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, -0.70710677, -299, 0.43499756, 332)
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=1642167272]
|
||||
transform = Transform3D(-45, 0, 0, 0, -45, 0, 0, 0, -45, 0, 0, 0)
|
||||
|
|
@ -58,66 +70,11 @@ transform = Transform3D(-45, 0, 0, 0, -45, 0, 0, 0, -45, 0, 0, 0)
|
|||
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="." unique_id=1093030835]
|
||||
navigation_mesh = SubResource("NavigationMesh_fj7yv")
|
||||
|
||||
[node name="enemy" parent="." unique_id=1435537835 instance=ExtResource("3_enemy")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.388, -36)
|
||||
|
||||
[node name="Mountain" type="CSGCombiner3D" parent="." unique_id=677409308]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -80)
|
||||
use_collision = true
|
||||
|
||||
[node name="MainBody" type="CSGSphere3D" parent="Mountain" unique_id=578990011]
|
||||
transform = Transform3D(1.5, 0, 0, 0, 0.6, 0, 0, 0, 1, 0, -5, 0)
|
||||
radius = 30.0
|
||||
radial_segments = 24
|
||||
rings = 16
|
||||
material = SubResource("mat_rock")
|
||||
|
||||
[node name="Peak" type="CSGSphere3D" parent="Mountain" unique_id=1930092098]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0)
|
||||
radius = 15.0
|
||||
radial_segments = 16
|
||||
rings = 12
|
||||
material = SubResource("mat_rock")
|
||||
|
||||
[node name="LeftHill" type="CSGSphere3D" parent="Mountain" unique_id=1517453171]
|
||||
transform = Transform3D(1.2, 0, 0, 0, 0.5, 0, 0, 0, 0.8, -25, -8, 5)
|
||||
radius = 20.0
|
||||
radial_segments = 16
|
||||
rings = 12
|
||||
material = SubResource("mat_rock")
|
||||
|
||||
[node name="RightHill" type="CSGSphere3D" parent="Mountain" unique_id=334184404]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.45, 0, 0, 0, 0.9, 22, -8, 8)
|
||||
radius = 18.0
|
||||
radial_segments = 16
|
||||
rings = 12
|
||||
material = SubResource("mat_rock")
|
||||
|
||||
[node name="DungeonGate" type="Node3D" parent="." unique_id=1787139888]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -45)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -296, 0, 370)
|
||||
|
||||
[node name="LeftPillar" type="CSGBox3D" parent="DungeonGate" unique_id=975630240]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, 3, 0)
|
||||
use_collision = true
|
||||
size = Vector3(1.5, 6, 1.5)
|
||||
material = SubResource("mat_stone")
|
||||
|
||||
[node name="RightPillar" type="CSGBox3D" parent="DungeonGate" unique_id=682177996]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 3, 0)
|
||||
use_collision = true
|
||||
size = Vector3(1.5, 6, 1.5)
|
||||
material = SubResource("mat_stone")
|
||||
|
||||
[node name="TopBar" type="CSGBox3D" parent="DungeonGate" unique_id=1917431148]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6.6, 0)
|
||||
use_collision = true
|
||||
size = Vector3(6.5, 1.2, 1.5)
|
||||
material = SubResource("mat_stone")
|
||||
|
||||
[node name="Entrance" type="CSGBox3D" parent="DungeonGate" unique_id=782262731]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.75, -0.5)
|
||||
size = Vector3(3.5, 5.5, 2)
|
||||
material = SubResource("mat_entrance")
|
||||
[node name="DoorModel" parent="DungeonGate" unique_id=1071858485 instance=ExtResource("5_door")]
|
||||
transform = Transform3D(-100, 0, 8.742278e-06, 0, 100, 0, -8.742278e-06, 0, -100, 0, 4, 0)
|
||||
|
||||
[node name="GateArea" type="Area3D" parent="DungeonGate" unique_id=1947692918]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 2)
|
||||
|
|
@ -132,209 +89,3 @@ billboard = 1
|
|||
modulate = Color(1, 0.85, 0.3, 1)
|
||||
text = "Dungeon betreten [E]"
|
||||
font_size = 48
|
||||
|
||||
[node name="Rock1" type="CSGSphere3D" parent="." unique_id=427636709]
|
||||
transform = Transform3D(1.1, 0, 0, 0, 0.5, 0, 0, 0, 0.9, 15, 0.5, -20)
|
||||
radius = 1.8
|
||||
radial_segments = 8
|
||||
material = SubResource("mat_rock_small")
|
||||
|
||||
[node name="Rock2" type="CSGSphere3D" parent="." unique_id=176525307]
|
||||
transform = Transform3D(0.9, 0, 0, 0, 0.6, 0, 0, 0, 1.1, -18, 0.4, -15)
|
||||
radius = 1.4
|
||||
radial_segments = 8
|
||||
material = SubResource("mat_rock_small")
|
||||
|
||||
[node name="Rock3" type="CSGSphere3D" parent="." unique_id=1182279621]
|
||||
transform = Transform3D(1.2, 0, 0, 0, 0.45, 0, 0, 0, 0.8, 25, 0.7, 10)
|
||||
radius = 2.2
|
||||
radial_segments = 8
|
||||
material = SubResource("mat_rock_small")
|
||||
|
||||
[node name="Rock4" type="CSGSphere3D" parent="." unique_id=1966368230]
|
||||
transform = Transform3D(0.8, 0, 0, 0, 0.55, 0, 0, 0, 1, -22, 0.3, 25)
|
||||
radius = 1.0
|
||||
radial_segments = 8
|
||||
material = SubResource("mat_rock_small")
|
||||
|
||||
[node name="Rock5" type="CSGSphere3D" parent="." unique_id=48323199]
|
||||
transform = Transform3D(1.3, 0, 0, 0, 0.5, 0, 0, 0, 0.9, 30, 0.6, -40)
|
||||
radius = 2.0
|
||||
radial_segments = 8
|
||||
material = SubResource("mat_rock_small")
|
||||
|
||||
[node name="Rock6" type="CSGSphere3D" parent="." unique_id=604365640]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.7, 0, 0, 0, 1.2, -28, 0.5, -45)
|
||||
radius = 1.6
|
||||
radial_segments = 8
|
||||
material = SubResource("mat_rock_small")
|
||||
|
||||
[node name="Rock7" type="CSGSphere3D" parent="." unique_id=1821485412]
|
||||
transform = Transform3D(0.9, 0, 0, 0, 0.4, 0, 0, 0, 1, 12, 0.3, 30)
|
||||
radius = 1.2
|
||||
radial_segments = 8
|
||||
material = SubResource("mat_rock_small")
|
||||
|
||||
[node name="Rock8" type="CSGSphere3D" parent="." unique_id=1387702407]
|
||||
transform = Transform3D(1.1, 0, 0, 0, 0.6, 0, 0, 0, 0.85, -10, 0.6, -50)
|
||||
radius = 2.4
|
||||
radial_segments = 8
|
||||
material = SubResource("mat_rock_small")
|
||||
|
||||
[node name="Rock9" type="CSGSphere3D" parent="." unique_id=1450102956]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.5, 0, 0, 0, 1.1, 35, 0.4, -25)
|
||||
radius = 1.5
|
||||
radial_segments = 8
|
||||
material = SubResource("mat_rock_small")
|
||||
|
||||
[node name="Tree1" type="Node3D" parent="." unique_id=618772270]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, -10)
|
||||
|
||||
[node name="Trunk" type="CSGCylinder3D" parent="Tree1" unique_id=1186519127]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.75, 0)
|
||||
radius = 0.3
|
||||
height = 5.5
|
||||
material = SubResource("mat_trunk")
|
||||
|
||||
[node name="Crown1" type="CSGSphere3D" parent="Tree1" unique_id=2089075716]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.3, 4.2, -0.2)
|
||||
radius = 2.2
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Crown2" type="CSGSphere3D" parent="Tree1" unique_id=2070989054]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, 5.4, 0.3)
|
||||
radius = 2.0
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Tree2" type="Node3D" parent="." unique_id=1889546293]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0, -30)
|
||||
|
||||
[node name="Trunk" type="CSGCylinder3D" parent="Tree2" unique_id=997380154]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.25, 0)
|
||||
radius = 0.3
|
||||
height = 6.5
|
||||
material = SubResource("mat_trunk")
|
||||
|
||||
[node name="Crown1" type="CSGSphere3D" parent="Tree2" unique_id=809808235]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 5, 0.2)
|
||||
radius = 2.5
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Crown2" type="CSGSphere3D" parent="Tree2" unique_id=481648384]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 6.2, -0.4)
|
||||
radius = 2.2
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Crown3" type="CSGSphere3D" parent="Tree2" unique_id=184574046]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.1, 7.4, 0.1)
|
||||
radius = 1.8
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Tree3" type="Node3D" parent="." unique_id=1385340799]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 28, 0, 20)
|
||||
|
||||
[node name="Trunk" type="CSGCylinder3D" parent="Tree3" unique_id=387398909]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.25, 0)
|
||||
radius = 0.3
|
||||
height = 4.5
|
||||
material = SubResource("mat_trunk")
|
||||
|
||||
[node name="Crown1" type="CSGSphere3D" parent="Tree3" unique_id=1139907459]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.2, 3.5, 0.5)
|
||||
radius = 2.0
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Crown2" type="CSGSphere3D" parent="Tree3" unique_id=391069386]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, 4.7, -0.3)
|
||||
radius = 2.3
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Tree4" type="Node3D" parent="." unique_id=613675839]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -25, 0, 15)
|
||||
|
||||
[node name="Trunk" type="CSGCylinder3D" parent="Tree4" unique_id=220117087]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0)
|
||||
radius = 0.3
|
||||
height = 6.0
|
||||
material = SubResource("mat_trunk")
|
||||
|
||||
[node name="Crown1" type="CSGSphere3D" parent="Tree4" unique_id=129254377]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.6, 4.5, -0.1)
|
||||
radius = 2.4
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Crown2" type="CSGSphere3D" parent="Tree4" unique_id=929192645]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 5.7, 0.4)
|
||||
radius = 2.1
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Tree5" type="Node3D" parent="." unique_id=94347379]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 35)
|
||||
|
||||
[node name="Trunk" type="CSGCylinder3D" parent="Tree5" unique_id=199856993]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.5, 0)
|
||||
radius = 0.3
|
||||
height = 7.0
|
||||
material = SubResource("mat_trunk")
|
||||
|
||||
[node name="Crown1" type="CSGSphere3D" parent="Tree5" unique_id=1965121271]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 5.3, 0.6)
|
||||
radius = 2.6
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Crown2" type="CSGSphere3D" parent="Tree5" unique_id=1961694117]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 6.5, -0.2)
|
||||
radius = 2.3
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Crown3" type="CSGSphere3D" parent="Tree5" unique_id=1346853660]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7.7, 0.3)
|
||||
radius = 1.9
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Tree6" type="Node3D" parent="." unique_id=1309473387]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, -10)
|
||||
|
||||
[node name="Trunk" type="CSGCylinder3D" parent="Tree6" unique_id=1889196546]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, 0)
|
||||
radius = 0.3
|
||||
height = 5.0
|
||||
material = SubResource("mat_trunk")
|
||||
|
||||
[node name="Crown1" type="CSGSphere3D" parent="Tree6" unique_id=1159575861]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.2, 3.8, -0.4)
|
||||
radius = 2.1
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
||||
[node name="Crown2" type="CSGSphere3D" parent="Tree6" unique_id=2073540260]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.6, 5, 0.2)
|
||||
radius = 2.4
|
||||
radial_segments = 10
|
||||
rings = 8
|
||||
material = SubResource("mat_leaf")
|
||||
|
|
|
|||