Premier commit

This commit is contained in:
2026-09-01 22:41:37 +02:00
commit 7cff988739
133 changed files with 6412 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
root = true
[*]
charset = utf-8
+2
View File
@@ -0,0 +1,2 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf
+20
View File
@@ -0,0 +1,20 @@
# Godot 4+ specific ignores
.godot/
/android/
# Godot-specific ignores
.import/
export.cfg
export_credentials.cfg
# Imported translations (automatically generated from CSV files)
*.translation
# Mono-specific ignores
.mono/
data_*/
mono_crash.*.json
.vscode
.export/
@@ -0,0 +1,41 @@
[gd_resource type="AnimatedTexture" format=3 uid="uid://dqasylgir7ka2"]
[ext_resource type="Texture2D" uid="uid://248ks3fx7lm3" path="res://common/assets/alien_2d_anim/alien_running0001.png" id="1_qwfpk"]
[ext_resource type="Texture2D" uid="uid://cmp2y3c446xoj" path="res://common/assets/alien_2d_anim/alien_running0002.png" id="2_q53jl"]
[ext_resource type="Texture2D" uid="uid://cqfucfwsif5q7" path="res://common/assets/alien_2d_anim/alien_running0011.png" id="3_hehve"]
[ext_resource type="Texture2D" uid="uid://bvvuc0cnn6tvl" path="res://common/assets/alien_2d_anim/alien_running0012.png" id="4_te5nh"]
[ext_resource type="Texture2D" uid="uid://dfmihbrigftd2" path="res://common/assets/alien_2d_anim/alien_running0003.png" id="5_lqyd0"]
[ext_resource type="Texture2D" uid="uid://ds47iqvnbvhnv" path="res://common/assets/alien_2d_anim/alien_running0004.png" id="6_0ekdo"]
[ext_resource type="Texture2D" uid="uid://bvgjs386j1tvo" path="res://common/assets/alien_2d_anim/alien_running0005.png" id="7_7rvmj"]
[ext_resource type="Texture2D" uid="uid://d2u7fa7wqvqw8" path="res://common/assets/alien_2d_anim/alien_running0006.png" id="8_jbker"]
[ext_resource type="Texture2D" uid="uid://bmmspo52gh7jf" path="res://common/assets/alien_2d_anim/alien_running0007.png" id="9_2mnul"]
[ext_resource type="Texture2D" uid="uid://cdjotqiqyc33m" path="res://common/assets/alien_2d_anim/alien_running0008.png" id="10_5yosl"]
[ext_resource type="Texture2D" uid="uid://cwmx4vskppoub" path="res://common/assets/alien_2d_anim/alien_running0009.png" id="11_8yks0"]
[ext_resource type="Texture2D" uid="uid://db67eb3grgik8" path="res://common/assets/alien_2d_anim/alien_running0010.png" id="12_phvay"]
[resource]
frames = 12
speed_scale = 30.0
frame_0/texture = ExtResource("1_qwfpk")
frame_1/texture = ExtResource("2_q53jl")
frame_1/duration = 1.0
frame_2/texture = ExtResource("5_lqyd0")
frame_2/duration = 1.0
frame_3/texture = ExtResource("6_0ekdo")
frame_3/duration = 1.0
frame_4/texture = ExtResource("7_7rvmj")
frame_4/duration = 1.0
frame_5/texture = ExtResource("8_jbker")
frame_5/duration = 1.0
frame_6/texture = ExtResource("9_2mnul")
frame_6/duration = 1.0
frame_7/texture = ExtResource("10_5yosl")
frame_7/duration = 1.0
frame_8/texture = ExtResource("11_8yks0")
frame_8/duration = 1.0
frame_9/texture = ExtResource("12_phvay")
frame_9/duration = 1.0
frame_10/texture = ExtResource("3_hehve")
frame_10/duration = 1.0
frame_11/texture = ExtResource("4_te5nh")
frame_11/duration = 1.0
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://248ks3fx7lm3"
path="res://.godot/imported/alien_running0001.png-42f344f725bc6add53eb238906bdc013.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/alien_2d_anim/alien_running0001.png"
dest_files=["res://.godot/imported/alien_running0001.png-42f344f725bc6add53eb238906bdc013.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cmp2y3c446xoj"
path="res://.godot/imported/alien_running0002.png-7d3a056b15d287b1dacd919a6b87fe96.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/alien_2d_anim/alien_running0002.png"
dest_files=["res://.godot/imported/alien_running0002.png-7d3a056b15d287b1dacd919a6b87fe96.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dfmihbrigftd2"
path="res://.godot/imported/alien_running0003.png-c85a3640a9e96a2e00b10afcc3390df7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/alien_2d_anim/alien_running0003.png"
dest_files=["res://.godot/imported/alien_running0003.png-c85a3640a9e96a2e00b10afcc3390df7.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ds47iqvnbvhnv"
path="res://.godot/imported/alien_running0004.png-cb0333a3fba0c95e0c4e7e23e8ab166a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/alien_2d_anim/alien_running0004.png"
dest_files=["res://.godot/imported/alien_running0004.png-cb0333a3fba0c95e0c4e7e23e8ab166a.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bvgjs386j1tvo"
path="res://.godot/imported/alien_running0005.png-636f4637d8526267963463e80556cb6e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/alien_2d_anim/alien_running0005.png"
dest_files=["res://.godot/imported/alien_running0005.png-636f4637d8526267963463e80556cb6e.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d2u7fa7wqvqw8"
path="res://.godot/imported/alien_running0006.png-4d7fb0820714fa7c4d3b86fc7669c6f8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/alien_2d_anim/alien_running0006.png"
dest_files=["res://.godot/imported/alien_running0006.png-4d7fb0820714fa7c4d3b86fc7669c6f8.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bmmspo52gh7jf"
path="res://.godot/imported/alien_running0007.png-c574b372219e5488a5c9f4260277d145.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/alien_2d_anim/alien_running0007.png"
dest_files=["res://.godot/imported/alien_running0007.png-c574b372219e5488a5c9f4260277d145.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cdjotqiqyc33m"
path="res://.godot/imported/alien_running0008.png-d4edc9da9f0aa04bd6b14f12cc5569e6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/alien_2d_anim/alien_running0008.png"
dest_files=["res://.godot/imported/alien_running0008.png-d4edc9da9f0aa04bd6b14f12cc5569e6.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cwmx4vskppoub"
path="res://.godot/imported/alien_running0009.png-873540969bc2269ebd94ab07d08b55ca.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/alien_2d_anim/alien_running0009.png"
dest_files=["res://.godot/imported/alien_running0009.png-873540969bc2269ebd94ab07d08b55ca.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://db67eb3grgik8"
path="res://.godot/imported/alien_running0010.png-d807b6be13956efb9ff9dd3f5949e1ed.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/alien_2d_anim/alien_running0010.png"
dest_files=["res://.godot/imported/alien_running0010.png-d807b6be13956efb9ff9dd3f5949e1ed.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cqfucfwsif5q7"
path="res://.godot/imported/alien_running0011.png-354b6ed57970ffaa1d41a542c28aee17.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/alien_2d_anim/alien_running0011.png"
dest_files=["res://.godot/imported/alien_running0011.png-354b6ed57970ffaa1d41a542c28aee17.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bvvuc0cnn6tvl"
path="res://.godot/imported/alien_running0012.png-a234c22f318b2e09a2237cc7c59f24b6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/alien_2d_anim/alien_running0012.png"
dest_files=["res://.godot/imported/alien_running0012.png-a234c22f318b2e09a2237cc7c59f24b6.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 629 B

+41
View File
@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cdr6ynvpd1rx1"
path.s3tc="res://.godot/imported/palette.png-7e7ed16a17c6b935383aad2fc09bb560.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://common/assets/palette.png"
dest_files=["res://.godot/imported/palette.png-7e7ed16a17c6b935383aad2fc09bb560.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
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c46rt5tydx8ih"
path="res://.godot/imported/wheat_pattern.png-e6c543a447bed8409ac1e7848eb8b8a5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://common/assets/wheat_pattern.png"
dest_files=["res://.godot/imported/wheat_pattern.png-e6c543a447bed8409ac1e7848eb8b8a5.ctex"]
[params]
compress/mode=0
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=false
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=1
Binary file not shown.
+36
View File
@@ -0,0 +1,36 @@
[remap]
importer="font_data_dynamic"
type="FontFile"
uid="uid://ddiuqfq41f18x"
path="res://.godot/imported/BPdotsPlus.otf-7830f8c00ee1e842bd23df9ee4b99d77.fontdata"
[deps]
source_file="res://common/fonts/BPdotsPlus.otf"
dest_files=["res://.godot/imported/BPdotsPlus.otf-7830f8c00ee1e842bd23df9ee4b99d77.fontdata"]
[params]
Rendering=null
antialiasing=1
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
allow_system_fallback=true
force_autohinter=false
modulate_color_glyphs=false
hinting=3
subpixel_positioning=4
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
fallbacks=[]
Compress=null
compress=true
preload=[]
language_support={}
script_support={}
opentype_features={}
Binary file not shown.
+36
View File
@@ -0,0 +1,36 @@
[remap]
importer="font_data_dynamic"
type="FontFile"
uid="uid://iug4bpafhqp"
path="res://.godot/imported/BPdotsPlusBold.otf-a8a1bcf573cfa976574a1ea039956873.fontdata"
[deps]
source_file="res://common/fonts/BPdotsPlusBold.otf"
dest_files=["res://.godot/imported/BPdotsPlusBold.otf-a8a1bcf573cfa976574a1ea039956873.fontdata"]
[params]
Rendering=null
antialiasing=1
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
allow_system_fallback=true
force_autohinter=false
modulate_color_glyphs=false
hinting=3
subpixel_positioning=4
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
fallbacks=[]
Compress=null
compress=true
preload=[]
language_support={}
script_support={}
opentype_features={}
Binary file not shown.
+36
View File
@@ -0,0 +1,36 @@
[remap]
importer="font_data_dynamic"
type="FontFile"
uid="uid://b7ysukag1831b"
path="res://.godot/imported/Squarrez.otf-d1fa764de82361511159e4342aa41270.fontdata"
[deps]
source_file="res://common/fonts/Squarrez.otf"
dest_files=["res://.godot/imported/Squarrez.otf-d1fa764de82361511159e4342aa41270.fontdata"]
[params]
Rendering=null
antialiasing=1
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
allow_system_fallback=true
force_autohinter=false
modulate_color_glyphs=false
hinting=3
subpixel_positioning=4
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
fallbacks=[]
Compress=null
compress=true
preload=[]
language_support={}
script_support={}
opentype_features={}
+10
View File
@@ -0,0 +1,10 @@
[gd_resource type="StandardMaterial3D" format=3 uid="uid://41afldgohk0o"]
[ext_resource type="Texture2D" uid="uid://cdr6ynvpd1rx1" path="res://common/assets/palette.png" id="1_rf3u1"]
[resource]
shading_mode = 2
diffuse_mode = 3
specular_mode = 1
vertex_color_use_as_albedo = true
albedo_texture = ExtResource("1_rf3u1")
+67
View File
@@ -0,0 +1,67 @@
[gd_resource type="Theme" format=3 uid="uid://pemhq200t8km"]
[ext_resource type="FontFile" uid="uid://b7ysukag1831b" path="res://common/fonts/Squarrez.otf" id="1_t2mbe"]
[ext_resource type="FontFile" uid="uid://iug4bpafhqp" path="res://common/fonts/BPdotsPlusBold.otf" id="2_21a82"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_pd64y"]
bg_color = Color(0.9882353, 0.9372549, 0.5529412, 1)
border_width_left = 15
border_width_top = 15
border_width_right = 15
border_width_bottom = 15
border_color = Color(0.9882353, 0.9372549, 0.5529412, 1)
corner_radius_top_left = 100
corner_radius_top_right = 100
corner_detail = 1
expand_margin_left = 40.0
expand_margin_right = 40.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_t2mbe"]
bg_color = Color(0.8, 0.25882354, 0.36862746, 1)
border_width_left = 15
border_width_top = 15
border_width_right = 15
border_width_bottom = 15
border_color = Color(0.8, 0.25882354, 0.36862746, 1)
corner_radius_top_left = 100
corner_radius_top_right = 100
corner_detail = 1
expand_margin_left = 40.0
expand_margin_right = 40.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_21a82"]
bg_color = Color(0.22352941, 0.03529412, 0.2784314, 1)
border_width_left = 15
border_width_top = 15
border_width_right = 15
border_width_bottom = 15
border_color = Color(0.8, 0.25882354, 0.36862746, 1)
corner_radius_top_left = 100
corner_radius_top_right = 100
corner_detail = 1
expand_margin_left = 40.0
expand_margin_right = 40.0
[resource]
Button/colors/font_hover_color = Color(0.23529412, 0.07058824, 0.28235295, 1)
Button/font_sizes/font_size = 40
Button/fonts/font = ExtResource("2_21a82")
Button/styles/hover = SubResource("StyleBoxFlat_pd64y")
Button/styles/normal = SubResource("StyleBoxFlat_t2mbe")
Button/styles/pressed = SubResource("StyleBoxFlat_21a82")
Label/colors/font_color = Color(0.8, 0.2627451, 0.36862746, 1)
Label/colors/font_outline_color = Color(0.9882353, 0.9372549, 0.5529412, 1)
Label/font_sizes/font_size = 30
Label/fonts/font = ExtResource("1_t2mbe")
RichTextLabel/colors/selection_color = Color(0.99, 0.93918, 0.5544, 0.7882353)
RichTextLabel/font_sizes/bold_font_size = 40
RichTextLabel/font_sizes/bold_italics_font_size = 40
RichTextLabel/font_sizes/italics_font_size = 30
RichTextLabel/font_sizes/mono_font_size = 30
RichTextLabel/font_sizes/normal_font_size = 30
RichTextLabel/fonts/bold_font = ExtResource("2_21a82")
RichTextLabel/fonts/bold_italics_font = ExtResource("2_21a82")
RichTextLabel/fonts/italics_font = ExtResource("2_21a82")
RichTextLabel/fonts/mono_font = ExtResource("2_21a82")
RichTextLabel/fonts/normal_font = ExtResource("2_21a82")
VBoxContainer/constants/separation = 15
+142
View File
@@ -0,0 +1,142 @@
extends Area3D
class_name Alien
const DEATH_SCENE : PackedScene = preload("res://entities/alien/alien_death_effect/alien_death_effect.tscn") as PackedScene
const DEATH_SCENE_TIME : float = 10.
const COLLISION_HEIGHT = 5
const COLLISION_RADIUS = 1.5
const NEIGHBOR_DETECTION_MARGIN = 0.5
const ATTACK_DISTANCE = 6.
const NEIGHBOR_ROTATION = 0.5
const NEIGHBOR_BUMP_FORCE = 4. * AlienHordeManager.CALCULATE_SCATTER_FREQUENCY
const NEIGHBOR_BLOCKED_SPEED_FACTOR = 0.5
const DIRECTION_DRIFT_RANGE = PI/8
const DAMAGE_EFFECT_DURATION : float = 0.5
const DEFAULT_HP : float = 20.
const DEFAULT_DAMAGE_RATE : float = 1.
signal died
enum State {RUNNING, ATTACKING, DEAD}
@export var size : float = 1.0
@export var speed : float = 10.
@export var turn_speed : float = 20.
@onready var damage_rate : float = size * DEFAULT_DAMAGE_RATE
@onready var hp : float = size * DEFAULT_HP
var state : State = State.RUNNING
var damage_effect_last : float = 0.
var id : int = 0
var target : Node3D
@onready var collision_shape : CollisionShape3D = generate_collision_shape()
func _ready():
monitoring = false
func generate_collision_shape() -> CollisionShape3D:
var new_collision_shape : CollisionShape3D= CollisionShape3D.new()
var cylinder_shape : CylinderShape3D = CylinderShape3D.new()
cylinder_shape.height = COLLISION_HEIGHT
cylinder_shape.radius = COLLISION_RADIUS
new_collision_shape.shape = cylinder_shape
new_collision_shape.position = Vector3(0,COLLISION_HEIGHT/2.,0)
add_child(new_collision_shape)
return new_collision_shape
func move(
delta: float,
calculate_direction: bool,
calculate_scatter : bool
):
var target_angle = rotation.y
var current_speed = speed
if calculate_direction and target:
target_angle = calculate_target_angle()
if calculate_scatter:
var collision_right = has_neighbor(1)
var collision_left = has_neighbor(-1)
if collision_left and not collision_right:
target_angle += - NEIGHBOR_ROTATION
position += Vector3.RIGHT.rotated(Vector3.UP, rotation.y) * NEIGHBOR_BUMP_FORCE * delta
elif collision_right and not collision_left:
target_angle += NEIGHBOR_ROTATION
position += Vector3.LEFT.rotated(Vector3.UP, rotation.y) * NEIGHBOR_BUMP_FORCE * delta
elif collision_left and collision_right:
current_speed = speed * get_random().randf_range(0., NEIGHBOR_BLOCKED_SPEED_FACTOR)
rotation.y = lerp_angle(
rotation.y,
target_angle,
min(1, delta*turn_speed)
)
position += Vector3.FORWARD.rotated(Vector3.UP, rotation.y) * current_speed * delta
func calculate_target_angle() -> float:
var target_angle : float = (
Vector2(global_position.z,global_position.x)
- Vector2(target.global_position.z,target.global_position.x)
).normalized().angle()
# Random drift in direction
target_angle += get_random().randf_range(-DIRECTION_DRIFT_RANGE, DIRECTION_DRIFT_RANGE)
return target_angle
func has_neighbor(direction = 1) -> bool:
var space_state = get_world_3d().direct_space_state
var query = PhysicsRayQueryParameters3D.create(
global_position,
global_position + Vector3(
direction * (COLLISION_RADIUS + NEIGHBOR_DETECTION_MARGIN), 0,0
).rotated(Vector3.UP, rotation.y)
)
query.collide_with_areas = true
query.exclude.append(get_rid())
var result = space_state.intersect_ray(query)
return result != {}
func attack_target(delta : float):
if target and target.has_method("hit"):
target.hit(delta * damage_rate)
func hit(damage = 1.):
hp = max(0, hp - damage)
damage_effect_last = DAMAGE_EFFECT_DURATION
if hp == 0:
die()
func die():
died.emit()
state = State.DEAD
collision_shape.disabled = true
add_child(DEATH_SCENE.instantiate())
await get_tree().create_timer(DEATH_SCENE_TIME).timeout
queue_free()
func get_random() -> RandomNumberGenerator:
var random : RandomNumberGenerator = RandomNumberGenerator.new()
random.seed = id
return random
+1
View File
@@ -0,0 +1 @@
uid://bkfr1dvvrmota
+43
View File
@@ -0,0 +1,43 @@
[gd_scene format=3 uid="uid://10ogf77klwu"]
[ext_resource type="Script" uid="uid://bkfr1dvvrmota" path="res://entities/alien/alien.gd" id="1_qp64o"]
[ext_resource type="Texture2D" uid="uid://dvgqy34aw6xfc" path="res://entities/mecha/assets/textures/pointer.svg" id="3_ym0y8"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_g4v7s"]
height = 4.0
radius = 1.5
[node name="Alien" type="Area3D" unique_id=537229132]
monitoring = false
monitorable = false
script = ExtResource("1_qp64o")
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=209124875]
unique_name_in_owner = true
shape = SubResource("CylinderShape3D_g4v7s")
[node name="ColliderRayCast3D" type="RayCast3D" parent="." unique_id=303441313]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 2, -0.1)
target_position = Vector3(0, -2, 0)
[node name="NeighborRRayCast3D" type="RayCast3D" parent="." unique_id=91948683]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0.1, 2, 0.5)
target_position = Vector3(2, 0, 0)
collide_with_areas = true
collide_with_bodies = false
[node name="NeighborLRayCast3D" type="RayCast3D" parent="." unique_id=580620392]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, -0.1, 2, 0.5)
target_position = Vector3(-2, 0, 0)
collide_with_areas = true
collide_with_bodies = false
[node name="Indicator" type="Sprite3D" parent="." unique_id=1377230752]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.514289, 0)
visible = false
billboard = 1
texture = ExtResource("3_ym0y8")
@@ -0,0 +1,5 @@
extends Node3D
func _ready():
%ExplosionGPUParticles3D.emitting = true
%CorpseGPUParticles3D.emitting = true
@@ -0,0 +1 @@
uid://lhn14psdj7hr
@@ -0,0 +1,121 @@
[gd_scene format=3 uid="uid://mi0hwb80ud8h"]
[ext_resource type="Script" uid="uid://lhn14psdj7hr" path="res://entities/alien/alien_death_effect/alien_death_effect.gd" id="1_vt2i7"]
[ext_resource type="ArrayMesh" uid="uid://667gyf6p35nw" path="res://entities/alien/assets/3d/alien_part.tres" id="2_on0xa"]
[sub_resource type="Gradient" id="Gradient_t4u1q"]
offsets = PackedFloat32Array(0, 0.8219697, 1)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_p1u0y"]
gradient = SubResource("Gradient_t4u1q")
[sub_resource type="Curve" id="Curve_p83er"]
_data = [Vector2(0, 0), 0.0, 2.7057414, 0, 0, Vector2(0.8, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 3
[sub_resource type="CurveTexture" id="CurveTexture_3gngh"]
curve = SubResource("Curve_p83er")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_g4v7s"]
lifetime_randomness = 0.5
angle_min = 1.0728835e-05
angle_max = 1.0728835e-05
direction = Vector3(0, 1, 0)
spread = 114.231
initial_velocity_min = 2.0
initial_velocity_max = 3.0
radial_velocity_min = -2.2351742e-05
radial_velocity_max = 0.39997762
gravity = Vector3(0, 0, 0)
use_scale_3d = true
scale_3d_min = Vector3(1, 1, 1)
scale_3d_max = Vector3(1, 1, 1)
scale_min = 0.5
scale_max = 0.5
scale_curve = SubResource("CurveTexture_3gngh")
color_ramp = SubResource("GradientTexture1D_p1u0y")
hue_variation_min = -2.2351742e-08
hue_variation_max = 0.09999997
[sub_resource type="Gradient" id="Gradient_d6cdn"]
interpolation_mode = 1
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_fcnqv"]
gradient = SubResource("Gradient_d6cdn")
fill = 1
fill_from = Vector2(0.5, 0.5)
fill_to = Vector2(1, 0.5)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_57qmd"]
transparency = 1
shading_mode = 0
vertex_color_use_as_albedo = true
albedo_color = Color(0.73333335, 0.6156863, 0.69803923, 1)
albedo_texture = SubResource("GradientTexture2D_fcnqv")
billboard_mode = 1
billboard_keep_scale = true
[sub_resource type="QuadMesh" id="QuadMesh_yf5fn"]
material = SubResource("StandardMaterial3D_57qmd")
[sub_resource type="Curve" id="Curve_kxalf"]
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.8793103, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 3
[sub_resource type="CurveTexture" id="CurveTexture_fcnqv"]
curve = SubResource("Curve_kxalf")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_emcji"]
lifetime_randomness = 0.5
angle_min = 1.0728835e-05
angle_max = 1.0728835e-05
use_rotation_3d = true
rotation_3d_min = Vector3(0, 0, 0)
rotation_3d_max = Vector3(360, 360, 360)
inherit_velocity_ratio = 1.0
direction = Vector3(0, 1, 0)
spread = 33.462
initial_velocity_min = 4.0
initial_velocity_max = 6.0
radial_velocity_min = -2.2351742e-05
radial_velocity_max = 0.39997762
gravity = Vector3(0, -9.1, 0)
scale_min = 0.59999996
scale_curve = SubResource("CurveTexture_fcnqv")
collision_mode = 1
collision_friction = 1.0
collision_bounce = 0.5
[node name="AlienDeathEffect" type="Node3D" unique_id=1248383251]
script = ExtResource("1_vt2i7")
[node name="ExplosionGPUParticles3D" type="GPUParticles3D" parent="." unique_id=416874722]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.2686481, -0.70010376)
emitting = false
amount = 20
one_shot = true
speed_scale = 3.0
explosiveness = 1.0
local_coords = true
process_material = SubResource("ParticleProcessMaterial_g4v7s")
draw_pass_1 = SubResource("QuadMesh_yf5fn")
[node name="CorpseGPUParticles3D" type="GPUParticles3D" parent="." unique_id=810474087]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.2686481, -0.70010376)
emitting = false
amount = 5
lifetime = 10.0
one_shot = true
speed_scale = 2.0
explosiveness = 1.0
local_coords = true
process_material = SubResource("ParticleProcessMaterial_emcji")
draw_pass_1 = ExtResource("2_on0xa")
[node name="GPUParticlesCollisionBox3D" type="GPUParticlesCollisionBox3D" parent="." unique_id=813937432]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
size = Vector3(12, 2, 12)
@@ -0,0 +1,143 @@
extends Node
class_name AlienHordeManager
const CALCULATE_TARGET_FREQUENCY = 10
const CALCULATE_DIRECTION_FREQUENCY = 10
const CALCULATE_SCATTER_FREQUENCY = 5
const CALCULATE_STATE_FREQUENCY = 5
const ATTACK_DISTANCE = 10.
const MECHA_ATTACK_DISTANCE = 5.
const MAX_ALIEN_MECHA_AGGRO_DISTANCE = 100
const ALIEN_RANDOM_SCALE = 0.3
const MASTODONT_CHANCE = 0.01
const MASTODONT_SCALE_FACTOR = 4.
@export var hex_map : HexMap
@export var mecha : Mecha
@onready var multimeshes : Array[MultiMeshInstance3D] = [
%RunningAlienMultiMesh,
%AttackingAlienMultiMesh
]
@onready var targets : Array = hex_map.get_all_tiles_with_id("House")
var current_frame : int = 0
var alien_id_acc : int = 0
var aliens : Array[Alien] = []
func _physics_process(delta):
current_frame += 1
for t in targets:
if t is HouseHexTile:
if t.destroyed:
targets.erase(t)
# if current_frame % CALCULATE_CLUSTERS_FREQUENCY == 0:
# calculate_clusters()
calculate_target()
calculate_state()
update_horde(delta)
spawn_models(delta)
func spawn_alien(position : Vector3, rotation: float) -> Alien:
var alien : Alien = Alien.new()
alien.id = alien_id_acc
alien.position = position
alien.rotation.y = rotation
var is_mastodont = randf() < MASTODONT_CHANCE
alien.size = randf_range(1. - ALIEN_RANDOM_SCALE, 1. + ALIEN_RANDOM_SCALE) * (MASTODONT_SCALE_FACTOR if is_mastodont else 1.)
alien.scale = Vector3.ONE * alien.size
add_child(alien)
aliens.append(alien)
alien.died.connect(
func():
aliens.erase(alien)
)
alien_id_acc += 1
return alien
func calculate_target():
for alien in aliens:
if (current_frame + alien.id)%CALCULATE_TARGET_FREQUENCY and alien.state != Alien.State.DEAD :
if (
len(targets) == 0
or mecha.position.distance_to(alien.position) < alien.get_random().randf_range(0., MAX_ALIEN_MECHA_AGGRO_DISTANCE)
):
alien.target = mecha
else :
var old_target = alien.target
alien.target = targets[alien.get_random().randi() % len(targets)]
if old_target != alien.target:
alien.state = Alien.State.RUNNING
func calculate_state():
for alien in aliens:
if (current_frame + alien.id)%CALCULATE_STATE_FREQUENCY and alien.state != Alien.State.DEAD and alien.target:
var target_attack_distance = MECHA_ATTACK_DISTANCE if alien.target is Mecha else ATTACK_DISTANCE
alien.state = (
Alien.State.RUNNING if alien.target.position.distance_to(alien.position) > target_attack_distance
else Alien.State.ATTACKING
)
func update_horde(delta):
for alien in aliens:
match alien.state:
Alien.State.RUNNING:
alien.move(
delta,
(current_frame + alien.id)%CALCULATE_DIRECTION_FREQUENCY,
(current_frame + alien.id)%CALCULATE_SCATTER_FREQUENCY
)
Alien.State.ATTACKING:
alien.attack_target(delta)
func alien_to_multimesh_id(alien : Alien) -> int:
match alien.state:
Alien.State.RUNNING:
return 0
Alien.State.ATTACKING:
return 1
_: return -1
func spawn_models(delta):
for m_id in range(len(multimeshes)):
var multimesh = multimeshes[m_id].multimesh
multimesh.instance_count = len(aliens)
for i in range(len(aliens)):
var alien = aliens[i]
var is_current = m_id == alien_to_multimesh_id(alien)
multimesh.set_instance_transform(
i,
alien.transform.scaled(Vector3.ONE if is_current else Vector3.ZERO)
)
if alien.damage_effect_last > 0:
alien.damage_effect_last -= delta
multimesh.set_instance_custom_data(
i,
Color(
alien.id,
alien.damage_effect_last > 0,
alien.size,
0
))
multimesh.set_instance_color(i ,Color(alien.get_random().randi()%255,alien.get_random().randi()%255,alien.get_random().randi()%255))
func is_alien_alive(alien):
return alien and alien is Alien and alien.hp > 0
@@ -0,0 +1 @@
uid://bsiixctjr7ml4
@@ -0,0 +1,28 @@
[gd_scene format=3 uid="uid://brr2idsr7qmpf"]
[ext_resource type="ArrayMesh" uid="uid://cgv8clg8y80on" path="res://entities/alien/assets/vat/running_alien_vat/alien_mesh.tres" id="1_0bggl"]
[ext_resource type="Script" uid="uid://bsiixctjr7ml4" path="res://entities/alien/alien_horde_manager/alien_horde_manager.gd" id="1_hjbcl"]
[ext_resource type="ArrayMesh" uid="uid://chhggu10sxmuc" path="res://entities/alien/assets/vat/attacking_alien_vat/alien_mesh.tres" id="2_hjbcl"]
[sub_resource type="MultiMesh" id="MultiMesh_33mok"]
transform_format = 1
use_colors = true
use_custom_data = true
mesh = ExtResource("2_hjbcl")
[sub_resource type="MultiMesh" id="MultiMesh_tj3hn"]
transform_format = 1
use_colors = true
use_custom_data = true
mesh = ExtResource("1_0bggl")
[node name="AlienHordeManager" type="Node" unique_id=1604717993]
script = ExtResource("1_hjbcl")
[node name="AttackingAlienMultiMesh" type="MultiMeshInstance3D" parent="." unique_id=1055420147]
unique_name_in_owner = true
multimesh = SubResource("MultiMesh_33mok")
[node name="RunningAlienMultiMesh" type="MultiMeshInstance3D" parent="." unique_id=245629817]
unique_name_in_owner = true
multimesh = SubResource("MultiMesh_tj3hn")
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,75 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cyjynungpt2a6"
path="res://.godot/imported/alien_part.blend-3b5a9ff739e267fe3e3ee37a08e055a3.scn"
[deps]
source_file="res://entities/alien/assets/3d/alien_part.blend"
dest_files=["res://.godot/imported/alien_part.blend-3b5a9ff739e267fe3e3ee37a08e055a3.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
mesh_library/use_node_names_as_mesh_names=false
array_mesh/deduplicate_surfaces=true
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={
"meshes": {
"alien_part_Plane_002": {
"generate/lightmap_uv": 0,
"generate/lods": 0,
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 20.0,
"save_to_file/enabled": true,
"save_to_file/fallback_path": "res://entities/alien/assets/3d/alien_part.tres",
"save_to_file/path": "uid://dbxb76bsurcoy"
}
}
}
blender/nodes/visible=0
blender/nodes/active_collection_only=false
blender/nodes/punctual_lights=true
blender/nodes/cameras=true
blender/nodes/custom_properties=true
blender/nodes/modifiers=1
blender/meshes/vertex_colors=1
blender/meshes/uvs=true
blender/meshes/normals=true
blender/meshes/export_geometry_nodes_instances=false
blender/meshes/gpu_instances=false
blender/meshes/tangents=true
blender/meshes/skins=2
blender/meshes/export_bones_deforming_mesh_only=false
blender/materials/unpack_enabled=true
blender/materials/export_materials=1
blender/animation/limit_playback=true
blender/animation/always_sample=true
blender/animation/group_tracks=true
gltf/naming_version=2
gltf/texture_map_mode=1
Binary file not shown.
+37
View File
@@ -0,0 +1,37 @@
[gd_resource type="ArrayMesh" format=4 uid="uid://667gyf6p35nw"]
[ext_resource type="Material" uid="uid://41afldgohk0o" path="res://common/materials/default3d.tres" id="1_ndtte"]
[sub_resource type="ArrayMesh" id="ArrayMesh_ndtte"]
_surfaces = [{
"aabb": AABB(-0.875597, -0.4483304, -0.68256557, 1.751194, 1.2514424, 1.2417288),
"format": 34359742465,
"index_count": 102,
"index_data": PackedByteArray("CQABAAIAAwABAAkAAAADAAkAAAAEAAMACQAMAAAAAAAFAAQADAAFAAAACgAMAAkAAgAKAAkABQAMAA0ACgANAAwACgAOAA0ABQANAA4AAgAPAAoAEAAOAAoAEAAKAA8ABQAOABAAAgARAA8AEAAPABEABQAQABIAEAARABIAEQATABIAFAASABMAEQAUABMAFAAFABIAAgAGABEAEQAGABQABgACAAcACAAGAAcABgALABQACwAGAAgABQAUAAsACwAIAAQABQALAAQA"),
"lods": [0.7015672, PackedByteArray("CQABAAIAAwABAAkAAAADAAkAAAAEAAMAAgAKAAkACgAAAAkACgACAAYABgACAAcACgAFAAAACgAGAAUAAAAFAAQACAAGAAcABgALAAUACwAGAAgABQALAAQACwAIAAQA"), 1.0523508, PackedByteArray("AAABAAIAAwABAAAAAAAEAAMAAgAFAAAAAAAFAAQAAgAGAAUABQAGAAQABgACAAcABgAIAAQACAAGAAcA")],
"name": "Material",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 21,
"vertex_data": PackedByteArray("ISdgPwiTGr5SJQ8/2gkwu8CYTT/gi28+sCxlsxiS6j7A4Qc9WD6TuiCyRz5Agb0+eNEDMyj6Ir78ywo/8AUBM/xJ5b6uUCq/yAYav7B/QD78Mbg+vgkwO8CYTT/Yi28+fD2TOiCyRz5Agb0+xwYaP8B/QD4AMrg+SncBP4DqSTxQA5a+ICdgvwiTGr5SJQ8/tQk6P8iij7748Gs+tQk6P9TYvr4Au3C+dmqQPoiL5b5mRyq/YCOHsjjmwD44ErK+wPeaMfAN9b2evC6/S3cBv4DqSTxQA5a+dGqQvpCL5b52Ryq/tQk6v9jYvr4gu3C+tQk6v8iij7748Gs+")
}]
blend_shape_mode = 0
[resource]
resource_name = "alien_part_Plane_002"
_surfaces = [{
"aabb": AABB(-0.875597, -0.4483304, -0.68256557, 1.751194, 1.2514424, 1.2417288),
"attribute_data": PackedByteArray("qFa/PjyPYT+oVr8+bMeHPqhWvz6Sn88+qFa/PsO5YD+oVr8+VoVhP6hWvz5MFyM/qFa/PmzHhz5C8Lg+VCp8P0LwuD6uI3w/QvC4PsEEUj9C8Lg+YD4SP0LwuD4MM1I/QvC4PsEEUj9C8Lg+YD4SP6hWvz5MFyM/qFa/PkWOIz+oVr8+PI9hP0LwuD4MM1I/QvC4PlQqfD+oVr8+RY4jP6hWvz4uv9E+qFa/PsuPYT+oVr8+y49hP6hWvz7gzmA/qFa/PhzSLD+oVr8+4M5gP6hWvz7Lj2E/qFa/PsuPYT8="),
"format": 34359742487,
"index_count": 102,
"index_data": PackedByteArray("DgABAAIABQACAAYAAgAPAA4AAgAFABMAAgAUAA8AAgATABQAEwAFABUABQAQABUAEwAVABYAAwAVABAAAwAQAAQAFQAXABYAEwAWABcAFQADABcAGAAUABMAGAATABcAGAAPABQAAwAYABcAGAAZAA8AAwAZABgADwAZABoAAwAaABkAAAADAAQADwAaABsAAwAbABoAGwADAAAADwAbAA4ADgAbAAAABwAJABEACQAKABEABwAIAAkAEgAMAAgAEgALAAwADAALAA0A"),
"lods": [0.7015672, PackedByteArray("DgABAAIAAgAPAA4ADwAAAA4ADwACAAUABQACAAYADwADAAAADwAFAAMAAAADAAQABQAQAAMAAwAQAAQABwAJABEACQAKABEABwAIAAkAEgAMAAgAEgALAAwADAALAA0A"), 1.0523508, PackedByteArray("AAABAAIAAgADAAAAAAADAAQAAwAFAAQAAgAFAAMABQACAAYABwAIAAkACQAKAAcACwAMAAgADAALAA0A")],
"material": ExtResource("1_ndtte"),
"name": "Material",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 28,
"vertex_data": PackedByteArray("ISdgPwiTGr5SJQ8/2gkwu8CYTT/gi28+sCxlsxiS6j7A4Qc98AUBM/xJ5b6uUCq/eNEDMyj6Ir78ywo/yAYav7B/QD78Mbg+vgkwO8CYTT/Yi28+ISdgPwiTGr5SJQ8/eNEDMyj6Ir78ywo/WD6TuiCyRz5Agb0+2gkwu8CYTT/gi28+yAYav7B/QD78Mbg+fD2TOiCyRz5Agb0+vgkwO8CYTT/Yi28+xwYaP8B/QD4AMrg+SncBP4DqSTxQA5a+ICdgvwiTGr5SJQ8/xwYaP8B/QD4AMrg+ICdgvwiTGr5SJQ8/S3cBv4DqSTxQA5a+YCOHsjjmwD44ErK+tQk6v8iij7748Gs+tQk6v9jYvr4gu3C+dGqQvpCL5b52Ryq/wPeaMfAN9b2evC6/dmqQPoiL5b5mRyq/tQk6P9TYvr4Au3C+tQk6P8iij7748Gs+gMYlbv///z8Gvsu9////P4G2//////+/YbYAAP///7//f0FY////PwJSkLb///8/+EHLvf///z+AxiVu////P/9/QVj///8/wIBjov///z8Gvsu9////PwJSkLb///8/Pn9jov///z/4Qcu9////P/ytkLb///8/hth3zP///79+OSVu////P/ytkLb///8/fjklbv///z94J3fM////v6i0//////+/SyvGTf///79lK7xC////v6AuBx3///+/MNv//////79e0Qcd////v5nUvEL///+/s9TGTf///78=")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_ndtte")
@@ -0,0 +1,29 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://b48t0vv053qrt"]
[ext_resource type="Shader" uid="uid://gjx57s1ye44t" path="res://entities/alien/assets/shader/vat.gdshader" id="1_nk817"]
[ext_resource type="Texture2D" uid="uid://cmyt23s5n76ak" path="res://entities/alien/assets/textures/alien_base_color.png" id="2_a2hb3"]
[ext_resource type="Texture2D" uid="uid://4peb6wokfoyu" path="res://entities/alien/assets/textures/alien_normal.png" id="3_7iaoq"]
[ext_resource type="Texture2D" uid="uid://cbjj8cusm385o" path="res://entities/alien/assets/vat/attacking_alien_vat/Alien_vat.exr" id="4_nk817"]
[resource]
render_priority = 0
shader = ExtResource("1_nk817")
shader_parameter/vertex_animation_texture = ExtResource("4_nk817")
shader_parameter/min_bounds = Vector3(-0.2, -0.8, -0.4)
shader_parameter/max_bounds = Vector3(1, 2.2, 4.9)
shader_parameter/autoplay = true
shader_parameter/autoplay_speed = 30.0
shader_parameter/frame = 12.0
shader_parameter/use_uv_1 = false
shader_parameter/cull_mode = 0
shader_parameter/albedo_map = ExtResource("2_a2hb3")
shader_parameter/albedo_tint = Color(1, 1, 1, 1)
shader_parameter/occlusion_channel = Color(1, 0, 0, 1)
shader_parameter/occlusion = 1.0
shader_parameter/roughness_channel = Color(0, 1, 0, 1)
shader_parameter/roughness = 1.0
shader_parameter/metallic_channel = Color(0, 0, 1, 1)
shader_parameter/metallic = 1.0
shader_parameter/specular = 0.5
shader_parameter/normal_map = ExtResource("3_7iaoq")
shader_parameter/normal_map_scale = 1.0
@@ -0,0 +1,29 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://b7o0pgg1fweqq"]
[ext_resource type="Shader" uid="uid://gjx57s1ye44t" path="res://entities/alien/assets/shader/vat.gdshader" id="1_ig0tm"]
[ext_resource type="Texture2D" uid="uid://cmyt23s5n76ak" path="res://entities/alien/assets/textures/alien_base_color.png" id="2_cxjnj"]
[ext_resource type="Texture2D" uid="uid://4peb6wokfoyu" path="res://entities/alien/assets/textures/alien_normal.png" id="3_1leus"]
[ext_resource type="Texture2D" uid="uid://cxy6bh1jymqsk" path="res://entities/alien/assets/vat/running_alien_vat/Alien_vat.exr" id="3_ig0tm"]
[resource]
render_priority = 0
shader = ExtResource("1_ig0tm")
shader_parameter/vertex_animation_texture = ExtResource("3_ig0tm")
shader_parameter/min_bounds = Vector3(-0.2, -2, -0.9)
shader_parameter/max_bounds = Vector3(0.1, 3.4, 1.1)
shader_parameter/autoplay = true
shader_parameter/autoplay_speed = 30.0
shader_parameter/frame = 12.0
shader_parameter/use_uv_1 = false
shader_parameter/cull_mode = 0
shader_parameter/albedo_map = ExtResource("2_cxjnj")
shader_parameter/albedo_tint = Color(1, 1, 1, 1)
shader_parameter/occlusion_channel = Color(1, 0, 0, 1)
shader_parameter/occlusion = 1.0
shader_parameter/roughness_channel = Color(0, 1, 0, 1)
shader_parameter/roughness = 1.0
shader_parameter/metallic_channel = Color(0, 0, 1, 1)
shader_parameter/metallic = 1.0
shader_parameter/specular = 0.5
shader_parameter/normal_map = ExtResource("3_1leus")
shader_parameter/normal_map_scale = 1.0
+169
View File
@@ -0,0 +1,169 @@
// Shader stolen here : https://godotshaders.com/shader/vertex-animation-texture-uses-openvat-output/
shader_type spatial;
render_mode cull_disabled; // Prevents GPU hardware culling so shader can handle it
/*
For use with models exported from Blender using the OpenVAT plugin.
Expects:
Vertex Normals - Packed (Math gets too complex to include a toggle. Making a separate shader recommended if normals are not needed.)
Use Single Row - On
Export Model - On
Model Format - glTF Binary. (Unsure why the otherse do not work)
Ensure .exr file is set to Lossless compression and MipMaps - Off.
*/
// --- Uniforms ---
group_uniforms openVAT_inputs;
/** OpenVAT texture exported from Blender plugin. */
uniform sampler2D vertex_animation_texture : repeat_disable;
/** Min values from the .json file included with OpenVAT exports. */
uniform vec3 min_bounds;
/** Max values from the .json file included with OpenVAT exports. */
uniform vec3 max_bounds;
/** Plays animation automatically. Turn off to control manually via keyframes. */
uniform bool autoplay = true;
/**
Autoplay speed in frames per second. Defaults to 30.
[b]Blender default is 24. May require adjustment either in Blender or Here to match speed.[b]
*/
uniform float autoplay_speed = 30.0;
/** Frame to display if animating manually. */
uniform float frame = 1.0;
/** Enable this if the asset does not have 2 UV sets. */
uniform bool use_uv_1 = false;
/** Cull Mode, editable here for flexibility.
0: Backface Cull
1: Frontface Cull
2: Cull disabled (double sided rendering)*/
uniform int cull_mode : hint_enum("Back:0", "Front:1", "Disabled:2") = 0;
group_uniforms;
group_uniforms Albedo_map;
uniform sampler2D albedo_map : source_color, hint_default_white;
uniform vec4 albedo_tint : source_color = vec4(1.0);
group_uniforms;
group_uniforms ORM_inputs;
/**
[b]ORM texture.[/b] Standardized detail maps for PBR materials. Ignore, remap, or remove as needed.
[b]O[/b]cclusion (Ambient)
[b]R[/b]oughness
[b]M[/b]etallic
*/
uniform sampler2D orm_map : hint_default_white;
/** Select channel used by Occlusion map. R G [b]or[/b] B, combining will have strange results */
uniform vec4 occlusion_channel : source_color = vec4(1.0, 0.0, 0.0, 1.0);
/** Strength of Occlusion*/
uniform float occlusion : hint_range(0.0, 1.0) = 1.0;
/** Select channel used by Roughness map. R G [b]or[/b] B, combining will have strange results */
uniform vec4 roughness_channel : source_color = vec4(0.0, 1.0, 0.0, 1.0);
/** Strength of Roughness*/
uniform float roughness : hint_range(0.0, 1.0) = 1.0;
/** Select channel used by Metallic map. R G [b]or[/b] B, combining will have strange results */
uniform vec4 metallic_channel : source_color = vec4(0.0, 0.0, 1.0, 1.0);
/** Strength of Metallic*/
uniform float metallic : hint_range(0.0, 1.0) = 1.0;
/** Strength of Specular (No Map Included)*/
uniform float specular : hint_range(0.0, 1.0) = 0.5;
group_uniforms;
group_uniforms Normal_map;
uniform sampler2D normal_map : hint_roughness_normal;
uniform float normal_map_scale : hint_range(-10.0, 10.0) = 1.0;
/** Passed data from INSTANCE_CUSTOM_VARIABLE :
x : Unique Id
y : Damage effect
z : Size
**/
varying flat float unique_id;
varying flat float damage_effect;
varying flat float size;
float remapFloat(float value, float input_min, float input_max, float output_min, float output_max){
// Code to replicate the remap feature from Visual Shader.
float _input_range = input_max - input_min;
float _output_range = output_max - output_min;
return output_min + _output_range * ((value - input_min) / _input_range);
}
void vertex() {
unique_id = INSTANCE_CUSTOM.x;
damage_effect = INSTANCE_CUSTOM.y;
size = INSTANCE_CUSTOM.z;
// Animation Timing
// ------
// Divided by 2. since bottom half of texture is the normal data.
// Second argument (0) is MipMap level. These VATs use no mipmaps so always 0.
int total_frames = textureSize(vertex_animation_texture, 0).y / 2;
// Checks if Autoplaying is checked
float play_frame = autoplay ? (TIME * autoplay_speed / size) : frame;
// Loops the current frame counter so it stays between 0 and total_frames - 1
float current_frame = mod(play_frame + unique_id, float(total_frames));
// Compute UV Coordinates
// ------
// samples pixel from the center, not the edge. Avoid unwanted bleeding into normal data pixels at the end of the loop.
float center_pixel = current_frame - 0.5;
float vat_y = center_pixel / float(total_frames);
vat_y = clamp(vat_y * 0.5, 0.0, 0.5);
vec2 vat_uv = vec2((use_uv_1 ? UV.x : UV2.x), vat_y);
// Vertex Position Displacement
// ------
vec4 vat_pos_raw = texture(vertex_animation_texture, vat_uv);
// Must go through some remapping to convert Blender to Godot coordinates
vec3 offset_values = vec3(
remapFloat(vat_pos_raw.r, 0.0, 1.0, min_bounds.x, max_bounds.x),
remapFloat(vat_pos_raw.b, 0.0, 1.0, min_bounds.z, max_bounds.z),
remapFloat(vat_pos_raw.g, 1.0, 0.0, min_bounds.y, max_bounds.y)
);
VERTEX += offset_values;
// Normals. 0.5 added to UV.y to shift it down by 1/2 the map - to the normals section.
vec4 vat_norm_raw = texture(vertex_animation_texture, vat_uv + vec2(0.0, 0.5));
vec3 decoded_normals = vec3(
remapFloat(vat_norm_raw.r, 0.0, 1.0, -1.0, 1.0),
remapFloat(vat_norm_raw.b, 0.0, 1.0, -1.0, 1.0),
remapFloat(vat_norm_raw.g, 1.0, 0.0, -1.0, 1.0)
);
NORMAL = normalize(decoded_normals);
// Calculate Tangent and Binormal from computed Normal
TANGENT = normalize(vec3(abs(NORMAL.y) + abs(NORMAL.z), 0.0, -abs(NORMAL.x)));
BINORMAL = normalize(vec3(0.0, abs(NORMAL.x) + abs(NORMAL.z), -abs(NORMAL.y)));
}
void fragment() {
// Cull Mode
if (cull_mode == 0 && !FRONT_FACING) {
discard; // Cull back faces
}
else if (cull_mode == 1 && FRONT_FACING) {
discard; // Cull front faces
}
// Albedo
ALBEDO = texture(albedo_map, UV).rgb * albedo_tint.rgb;
EMISSION = vec3(1.,1.,1.) * damage_effect;
// ORM maps (Occlusion, Roughness, Metallic) Packing
vec4 orm_tex = texture(orm_map, UV);
AO = occlusion * dot(orm_tex.rgb, occlusion_channel.rgb);
ROUGHNESS = roughness * dot(orm_tex.rgb, roughness_channel.rgb);
METALLIC = metallic * dot(orm_tex.rgb, metallic_channel.rgb);
// Specular
SPECULAR = specular;
// Normal Map
NORMAL_MAP = texture(normal_map, UV).rgb;
NORMAL_MAP_DEPTH = normal_map_scale;
}
@@ -0,0 +1 @@
uid://gjx57s1ye44t
Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cmyt23s5n76ak"
path.s3tc="res://.godot/imported/alien_base_color.png-86b98d00ab0dc2f32c9eec134715ed52.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://entities/alien/assets/textures/alien_base_color.png"
dest_files=["res://.godot/imported/alien_base_color.png-86b98d00ab0dc2f32c9eec134715ed52.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
Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://4peb6wokfoyu"
path.s3tc="res://.godot/imported/alien_normal.png-1cf9a8467a6c91a4f9725d4eaacfcf3f.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://entities/alien/assets/textures/alien_normal.png"
dest_files=["res://.godot/imported/alien_normal.png-1cf9a8467a6c91a4f9725d4eaacfcf3f.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://entities/alien/assets/textures/alien_normal.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
+57
View File
@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="79.375mm"
height="79.375mm"
viewBox="0 0 79.375 79.375"
version="1.1"
id="svg1"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
sodipodi:docname="stain.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
inkscape:document-units="mm"
inkscape:zoom="2.2375049"
inkscape:cx="130.27904"
inkscape:cy="161.78736"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="opacity:1;fill:#ffffff;stroke-width:2.30664;stroke-linecap:round;paint-order:stroke fill markers;fill-opacity:1"
d="M 38.600507,23.826755 C 33.435229,26.617406 23.967905,12.705978 24.302365,13.542127 c 0.334459,0.836148 5.450332,11.19757 3.488055,12.308192 -3.353618,1.898103 -18.037041,-10.71951 -18.037041,-10.71951 0,0 7.412537,9.636789 5.68581,14.548987 -1.130403,3.215773 -8.863175,5.100506 -8.863175,5.100506 0,0 9.071694,-1.522301 10.869932,1.672296 2.071801,3.680585 -4.849662,11.706082 -4.849662,11.706082 0,0 12.541637,-4.879053 15.30152,-0.585304 2.379106,3.701344 -5.936656,11.789697 -5.936656,11.789697 0,0 9.269778,-8.334192 13.766893,-6.103886 5.414476,2.685263 4.180743,17.642735 4.180743,17.642735 0,0 0.304675,-12.335049 4.962837,-14.130912 8.343511,-3.216675 23.579391,12.793076 23.579391,12.793076 0,0 -16.366284,-17.953012 -14.381755,-20.820102 1.468454,-2.121506 11.873309,3.260979 12.709459,3.428209 0.836149,0.16723 -5.713781,-3.30117 -5.184122,-5.853039 0.562559,-2.710379 7.525337,-3.511825 7.525337,-3.511825 0,0 -9.290842,-1.681472 -9.699323,-5.351351 -0.659584,-5.925848 13.378378,-11.873311 13.378378,-11.873311 0,0 -15.447192,6.786266 -17.057432,4.766048 -1.251294,-1.569883 12.040541,-8.612332 12.040541,-8.612332 0,0 -8.720738,4.194812 -12.124156,1.923143 -3.266774,-2.180465 -2.759291,-11.455237 -2.759291,-11.455237 0,0 -2.332874,6.07263 -5.016891,6.354729 -4.251764,0.446876 -9.866554,-8.194256 -9.866554,-8.194256 0,0 4.537013,11.326998 0.585304,13.461993 z"
id="path1"
sodipodi:nodetypes="asscacacacacacssacacscacaca" />
<path
style="opacity:1;fill:#ffffff;stroke-width:2.30664;stroke-linecap:round;paint-order:stroke fill markers;fill-opacity:1"
d="m 19.680232,16.465199 c 0.896728,4.593961 3.477795,7.479963 3.341915,2.902904 -0.05403,-1.819945 -3.341915,-2.902904 -3.341915,-2.902904 z"
id="path2"
sodipodi:nodetypes="czc" />
<path
style="opacity:1;fill:#ffffff;stroke-width:2.30664;stroke-linecap:round;paint-order:stroke fill markers;fill-opacity:1"
d="m 59.353071,52.958861 c -1.811385,2.713194 7.483347,6.307322 7.483347,6.307322 -1.359715,-1.888021 -6.479923,-7.810307 -7.483347,-6.307322 z"
id="path3"
sodipodi:nodetypes="scs" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ci1qyjgjvtpbj"
path.s3tc="res://.godot/imported/stain.svg-f2fdcdf42fafc92b5172e9a1b9c7292d.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://entities/alien/assets/textures/stain.svg"
dest_files=["res://.godot/imported/stain.svg-f2fdcdf42fafc92b5172e9a1b9c7292d.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
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false
@@ -0,0 +1,16 @@
{
"os-remap": {
"Min": [
-0.2,
-0.8,
-0.4
],
"Max": [
1.0,
2.2,
4.9
],
"Frames": 12
},
"animations": {}
}
@@ -0,0 +1,63 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://blpvoauvdf700"
path="res://.godot/imported/Alien.glb-d7449a099f5202e69c28d18dd7bdda8c.scn"
[deps]
source_file="res://entities/alien/assets/vat/attacking_alien_vat/Alien.glb"
dest_files=["res://.godot/imported/Alien.glb-d7449a099f5202e69c28d18dd7bdda8c.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
mesh_library/use_node_names_as_mesh_names=false
array_mesh/deduplicate_surfaces=true
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={
"materials": {
"@MATERIAL:0": {
"use_external/enabled": true,
"use_external/path": "uid://b48t0vv053qrt"
}
},
"meshes": {
"Alien_Alien_mesh": {
"generate/lightmap_uv": 0,
"generate/lods": 0,
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 20.0,
"save_to_file/enabled": true,
"save_to_file/fallback_path": "res://entities/alien/assets/vat/attacking_alien_vat/alien_mesh.tres",
"save_to_file/path": "uid://dmkpueem7h3gg"
}
}
}
gltf/naming_version=2
gltf/embedded_image_handling=1
gltf/texture_map_mode=1
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cbjj8cusm385o"
path="res://.godot/imported/Alien_vat.exr-0e18ace1cc9af2d3f2eab97c0bf74649.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://entities/alien/assets/vat/attacking_alien_vat/Alien_vat.exr"
dest_files=["res://.godot/imported/Alien_vat.exr-0e18ace1cc9af2d3f2eab97c0bf74649.ctex"]
[params]
compress/mode=0
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=false
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
File diff suppressed because one or more lines are too long
@@ -0,0 +1,16 @@
{
"os-remap": {
"Min": [
-0.2,
-2.0,
-0.9
],
"Max": [
0.1,
3.4,
1.1
],
"Frames": 12
},
"animations": {}
}
@@ -0,0 +1,63 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://c8b280nh1i42w"
path="res://.godot/imported/Alien.glb-fad778d224a52bd474cfd3984bcf01f5.scn"
[deps]
source_file="res://entities/alien/assets/vat/running_alien_vat/Alien.glb"
dest_files=["res://.godot/imported/Alien.glb-fad778d224a52bd474cfd3984bcf01f5.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
mesh_library/use_node_names_as_mesh_names=false
array_mesh/deduplicate_surfaces=true
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={
"materials": {
"@MATERIAL:0": {
"use_external/enabled": true,
"use_external/path": "uid://b7o0pgg1fweqq"
}
},
"meshes": {
"Alien_Alien_mesh_001": {
"generate/lightmap_uv": 0,
"generate/lods": 0,
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 20.0,
"save_to_file/enabled": true,
"save_to_file/fallback_path": "res://entities/alien/assets/vat/running_alien_vat/alien_mesh.tres",
"save_to_file/path": "uid://cgv8clg8y80on"
}
}
}
gltf/naming_version=2
gltf/embedded_image_handling=1
gltf/texture_map_mode=1
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cxy6bh1jymqsk"
path="res://.godot/imported/Alien_vat.exr-412e4d42f972d99628cc1bff26b09e66.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://entities/alien/assets/vat/running_alien_vat/Alien_vat.exr"
dest_files=["res://.godot/imported/Alien_vat.exr-412e4d42f972d99628cc1bff26b09e66.ctex"]
[params]
compress/mode=0
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=false
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
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,71 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://hq2acth6vm2d"
path="res://.godot/imported/mecha-body.blend-9265dc8fca82c0eb6c666e9c3b7ef0a5.scn"
[deps]
source_file="res://entities/mecha/assets/3d/mecha-body.blend"
dest_files=["res://.godot/imported/mecha-body.blend-9265dc8fca82c0eb6c666e9c3b7ef0a5.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
mesh_library/use_node_names_as_mesh_names=false
array_mesh/deduplicate_surfaces=true
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={
"materials": {
"Material": {
"use_external/enabled": true,
"use_external/fallback_path": "res://common/materials/default3d.tres",
"use_external/path": "uid://41afldgohk0o"
}
}
}
blender/nodes/visible=0
blender/nodes/active_collection_only=false
blender/nodes/punctual_lights=true
blender/nodes/cameras=true
blender/nodes/custom_properties=true
blender/nodes/modifiers=1
blender/meshes/vertex_colors=1
blender/meshes/uvs=true
blender/meshes/normals=true
blender/meshes/export_geometry_nodes_instances=false
blender/meshes/gpu_instances=false
blender/meshes/tangents=true
blender/meshes/skins=2
blender/meshes/export_bones_deforming_mesh_only=false
blender/materials/unpack_enabled=true
blender/materials/export_materials=1
blender/animation/limit_playback=true
blender/animation/always_sample=true
blender/animation/group_tracks=true
gltf/naming_version=2
gltf/texture_map_mode=1
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,71 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cahdsj2xg25fy"
path="res://.godot/imported/mecha-leg.blend-6470342e2c60263cb402b38e461944d0.scn"
[deps]
source_file="res://entities/mecha/assets/3d/mecha-leg.blend"
dest_files=["res://.godot/imported/mecha-leg.blend-6470342e2c60263cb402b38e461944d0.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
mesh_library/use_node_names_as_mesh_names=false
array_mesh/deduplicate_surfaces=true
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={
"materials": {
"Material": {
"use_external/enabled": true,
"use_external/fallback_path": "res://common/materials/default3d.tres",
"use_external/path": "uid://41afldgohk0o"
}
}
}
blender/nodes/visible=0
blender/nodes/active_collection_only=false
blender/nodes/punctual_lights=true
blender/nodes/cameras=true
blender/nodes/custom_properties=true
blender/nodes/modifiers=1
blender/meshes/vertex_colors=1
blender/meshes/uvs=true
blender/meshes/normals=true
blender/meshes/export_geometry_nodes_instances=false
blender/meshes/gpu_instances=false
blender/meshes/tangents=true
blender/meshes/skins=2
blender/meshes/export_bones_deforming_mesh_only=false
blender/materials/unpack_enabled=true
blender/materials/export_materials=1
blender/animation/limit_playback=true
blender/animation/always_sample=true
blender/animation/group_tracks=true
gltf/naming_version=2
gltf/texture_map_mode=1
Binary file not shown.
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="icon icon-tabler icons-tabler-outline icon-tabler-viewfinder"
version="1.1"
id="svg7"
sodipodi:docname="pointer.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs7">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect2"
is_visible="true"
lpeversion="1"
nodesatellites_param="F,0,1,1,0,3.0840606,0,1 @ F,0,1,1,0,3.0840606,0,1 @ F,0,1,1,0,3.0840606,0,1 @ F,0,0,1,0,3.0840606,0,1"
radius="0"
unit="px"
method="auto"
mode="F"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
</defs>
<sodipodi:namedview
id="namedview7"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
inkscape:zoom="26.162951"
inkscape:cx="7.8546186"
inkscape:cy="10.855045"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg7" />
<path
stroke="none"
d="M0 0h24v24H0z"
fill="none"
id="path1" />
<path
style="opacity:0.99;fill:#ffffff;stroke:none;stroke-width:7.32073;stroke-linecap:round;paint-order:stroke fill markers"
d="M 4.5637528,7.5609963 10.142119,18.132668 a 1.7858436,1.7858436 2.2539244 0 0 3.088495,0.121559 L 20.496517,6.7727607 A 1.1112523,1.1112523 52.142331 0 0 19.21332,5.1219064 L 15.745404,6.2515455 A 10.824164,10.824164 177.861 0 1 9.8175039,6.472952 L 6.1199605,5.5671764 A 1.386555,1.386555 127.9726 0 0 4.5637528,7.5609963 Z"
id="path2"
inkscape:path-effect="#path-effect2"
inkscape:original-d="M 3.1244684,4.8333801 11.581403,20.860284 22.145728,4.1667036 12.812996,7.2067483 Z"
transform="matrix(1.190867,0,0,1.190867,-2.3927323,-2.3049427)" />
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dvgqy34aw6xfc"
path.s3tc="res://.godot/imported/pointer.svg-f098bd9bb13ed2213cbb52b3b3bd4f05.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://entities/mecha/assets/textures/pointer.svg"
dest_files=["res://.godot/imported/pointer.svg-f098bd9bb13ed2213cbb52b3b3bd4f05.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
svg/scale=5.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false
+142
View File
@@ -0,0 +1,142 @@
@tool
extends CharacterBody3D
class_name Mecha
const STEP_MOVE_DISPLACEMENT = 3
const RECOIL_STRENGHT = 0.5
const MOUSE_SENSIVITY = 0.01
const ZOOM_SENSIVITY = 1.
const MAX_ZOOM = 60.
const MIN_ZOOM = 15.
const MAX_HP : float = 50.
signal died
@export var hp : float = MAX_HP
@export var max_speed : float = 15.
@export var turn_speed : float = 5.
var destination := Vector2()
@onready var legs : Array[MechaLeg] = [
%Leg1,
%Leg2,
%Leg3,
%Leg4,
]
var turn_normal : Vector2 = Vector2.UP
var selected_item = 0
var current_recoil = 0.
func _ready():
for l in legs:
l.step.connect(next_leg_can_step)
func next_leg_can_step():
for l in legs:
l.can_step = false
await get_tree().create_timer(MechaLeg.STEP_DURATION / len(legs)).timeout
for l in legs:
l.can_step = true
func _process(delta):
if not Engine.is_editor_hint():
var target = calculate_target_position()
%Target.global_position = target
var target_turn = (Vector2(position.x,position.z) - Vector2(target.x,target.z)).normalized()
turn_normal = lerp(
turn_normal,
target_turn,
min(turn_speed * delta, 1.)
)
var speed = 0.
var item_used = false
for i in range(len(%Inventory.get_children())):
var item = %Inventory.get_children()[i]
if item is Weapon:
var used = item.process_fire(
delta,
self,
selected_item == i and Input.is_action_pressed("fire")
)
if used:
item_used = true
if not item_used and Input.is_action_pressed("move_to"):
speed = max_speed
var front_factor = 1 - (turn_normal - target_turn).length() / 2.
velocity = position.direction_to(target) * speed * front_factor
%Model.rotation.y = - turn_normal.angle()
# Recoil
%Model.position = Vector3(turn_normal.x, 0, turn_normal.y) * current_recoil * RECOIL_STRENGHT
current_recoil = lerp(current_recoil, 0., 0.5)
%StepTargets.position.x = lerp(
0,
-STEP_MOVE_DISPLACEMENT,
speed/max_speed
)
%Camera3D.look_at(self.position)
move_and_slide()
func calculate_target_position() -> Vector3:
var camera : Camera3D = get_viewport().get_camera_3d()
if camera:
var ray_normal := camera.project_ray_normal(get_viewport().get_mouse_position())
var ray_origin := camera.project_ray_origin(get_viewport().get_mouse_position())
var plane = Plane(Vector3.UP, 0)
var intersection = plane.intersects_ray(ray_origin, ray_normal)
if intersection:
return intersection
return global_position
func get_target_angle() -> float:
return - turn_normal.angle() + PI / 2
func get_projectile_spwan_point() -> Vector3:
return global_position + Vector3.UP * 2.
func add_recoil(recoil : = 1.):
current_recoil += recoil
func hit(damage = 1.):
hp = max(0, hp - damage)
if hp == 0:
die()
func die():
died.emit()
func _unhandled_input(event):
if Input.is_action_just_pressed("zoom_in"):
%Camera3D.position.z = max(MIN_ZOOM, %Camera3D.position.z - ZOOM_SENSIVITY)
if Input.is_action_just_pressed("zoom_out"):
%Camera3D.position.z = min(MAX_ZOOM, %Camera3D.position.z + ZOOM_SENSIVITY)
if event is InputEventMouseMotion and Input.is_action_pressed("turn_camera") and Input.mouse_mode == Input.MOUSE_MODE_VISIBLE:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
%CameraPivot.rotation.y -= event.relative.x * MOUSE_SENSIVITY
%CameraPivot.rotation.x -= event.relative.y * MOUSE_SENSIVITY
if %CameraPivot.rotation.x > deg_to_rad(-20):
%CameraPivot.rotation.x = deg_to_rad(-20)
if %CameraPivot.rotation.x < deg_to_rad(-80):
%CameraPivot.rotation.x = deg_to_rad(-80)
+1
View File
@@ -0,0 +1 @@
uid://bbjxgsv6p27ly
+94
View File
@@ -0,0 +1,94 @@
[gd_scene format=3 uid="uid://0t1qprxnrxpw"]
[ext_resource type="Script" uid="uid://bbjxgsv6p27ly" path="res://entities/mecha/mecha.gd" id="1_ariye"]
[ext_resource type="PackedScene" uid="uid://hq2acth6vm2d" path="res://entities/mecha/assets/3d/mecha-body.blend" id="1_wfen8"]
[ext_resource type="PackedScene" uid="uid://dhgclnvdm41nl" path="res://entities/mecha/mecha_leg.tscn" id="2_p6u1l"]
[ext_resource type="Texture2D" uid="uid://dvgqy34aw6xfc" path="res://entities/mecha/assets/textures/pointer.svg" id="4_ua006"]
[ext_resource type="Script" uid="uid://7s4jtqkpp21e" path="res://entities/mecha/weapons/gatling/gatling.gd" id="5_pfbkk"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_g4v7s"]
height = 5.0075684
radius = 2.546875
[node name="Mecha" type="CharacterBody3D" unique_id=608967332]
axis_lock_linear_y = true
axis_lock_angular_x = true
axis_lock_angular_z = true
motion_mode = 1
script = ExtResource("1_ariye")
max_speed = 20.0
[node name="Model" type="Node3D" parent="." unique_id=1153097662]
unique_name_in_owner = true
[node name="mecha-body" parent="Model" unique_id=479724907 instance=ExtResource("1_wfen8")]
transform = Transform3D(1.3113416e-07, 0, -1, 0, 1, 0, 1, 0, 1.3113416e-07, 0, 2, 0)
[node name="Leg1" parent="Model" unique_id=1161871766 instance=ExtResource("2_p6u1l")]
unique_name_in_owner = true
transform = Transform3D(-0.70710665, 0, -0.70710677, 0, 1, 0, 0.70710677, 0, -0.70710665, 0, 2, 0)
step_target_path = NodePath("../StepTargets/Marker3D")
[node name="Leg2" parent="Model" unique_id=1040806054 instance=ExtResource("2_p6u1l")]
unique_name_in_owner = true
transform = Transform3D(0.70710677, 0, -0.70710665, 0, 1, 0, 0.70710665, 0, 0.70710677, 0, 2, 0)
step_target_path = NodePath("../StepTargets/Marker3D2")
[node name="Leg3" parent="Model" unique_id=636817449 instance=ExtResource("2_p6u1l")]
unique_name_in_owner = true
transform = Transform3D(0.70710665, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710665, 0, 2, 0)
step_target_path = NodePath("../StepTargets/Marker3D3")
[node name="Leg4" parent="Model" unique_id=373252400 instance=ExtResource("2_p6u1l")]
unique_name_in_owner = true
transform = Transform3D(-0.70710677, 0, 0.70710665, 0, 1, 0, -0.70710665, 0, -0.70710677, 0, 2, 0)
step_target_path = NodePath("../StepTargets/Marker3D4")
[node name="StepTargets" type="Node3D" parent="Model" unique_id=1107229276]
unique_name_in_owner = true
[node name="Marker3D" type="Marker3D" parent="Model/StepTargets" unique_id=1883887265]
transform = Transform3D(-0.7071066, 0, -0.7071067, 0, 1, 0, 0.7071067, 0, -0.7071066, -2.1213202, 0, 2.1213205)
[node name="Marker3D2" type="Marker3D" parent="Model/StepTargets" unique_id=2083428784]
transform = Transform3D(0.7071067, 0, -0.7071066, 0, 1, 0, 0.7071066, 0, 0.7071067, 2.1213205, 0, 2.1213202)
[node name="Marker3D3" type="Marker3D" parent="Model/StepTargets" unique_id=203630463]
transform = Transform3D(0.7071066, 0, 0.7071067, 0, 1, 0, -0.7071067, 0, 0.7071066, 2.12132, 0, -2.1213207)
[node name="Marker3D4" type="Marker3D" parent="Model/StepTargets" unique_id=1646251219]
transform = Transform3D(-0.7071067, 0, 0.7071066, 0, 1, 0, -0.7071066, 0, -0.7071067, -2.1213207, 0, -2.1213205)
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=781282910]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5037842, 0)
shape = SubResource("CylinderShape3D_g4v7s")
[node name="TargetContainer" type="Node" parent="." unique_id=857862335]
[node name="Target" type="Node3D" parent="TargetContainer" unique_id=871238190]
unique_name_in_owner = true
[node name="Sprite3D" type="Sprite3D" parent="TargetContainer/Target" unique_id=328289766]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9376632, -0.07640457)
modulate = Color(0.79607844, 0.2627451, 0.3647059, 1)
pixel_size = 0.02
billboard = 1
no_depth_test = true
texture = ExtResource("4_ua006")
[node name="CameraPivot" type="Node3D" parent="." unique_id=1668504271]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 0.8660253, 0.49999997, 0, -0.49999997, 0.8660253, 0, 0, 0)
[node name="Camera3D" type="Camera3D" parent="CameraPivot" unique_id=2082056518]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 50)
[node name="Inventory" type="Node3D" parent="." unique_id=1873054596]
unique_name_in_owner = true
[node name="Gatling" type="Node" parent="Inventory" unique_id=2131873567]
script = ExtResource("5_pfbkk")
metadata/_custom_type_script = "uid://7s4jtqkpp21e"
[editable path="Model/mecha-body"]
+32
View File
@@ -0,0 +1,32 @@
@tool
extends Node3D
class_name MechaLeg
const STEP_DURATION = 0.15
signal step
@export_node_path("Node3D") var step_target_path : NodePath
@onready var local_target : Node3D = %LocalTarget
@export var step_distance: float = 5
@export var can_step = true
func _process(_delta):
if step_target_path and can_step:
var step_target : Node3D = get_node(step_target_path) as Node3D
var dist := step_target.global_position.distance_to(local_target.global_position)
if dist > step_distance:
step.emit()
tween_step(get_node(step_target_path).global_position)
func tween_step(target_pos: Vector3):
var tween = create_tween().set_trans(Tween.TRANS_LINEAR).set_ease(Tween.EASE_OUT)
tween.set_parallel(true)
tween.tween_property(local_target, "global_position:x", target_pos.x, STEP_DURATION * 0.7)
tween.tween_property(local_target, "global_position:z", target_pos.z, STEP_DURATION * 0.7)
tween.tween_property(local_target, "global_position:y", target_pos.y + 1.5, STEP_DURATION * 0.5)
tween.set_parallel(false)
tween.tween_property(local_target, "global_position:y", target_pos.y, STEP_DURATION * 0.3)
+1
View File
@@ -0,0 +1 @@
uid://brd008shv85w7
+57
View File
@@ -0,0 +1,57 @@
[gd_scene format=3 uid="uid://dhgclnvdm41nl"]
[ext_resource type="PackedScene" uid="uid://cahdsj2xg25fy" path="res://entities/mecha/assets/3d/mecha-leg.blend" id="1_h7rhd"]
[ext_resource type="Script" uid="uid://brd008shv85w7" path="res://entities/mecha/mecha_leg.gd" id="1_rf6lx"]
[node name="MechaLeg" type="Node3D" unique_id=1161871766]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.673074, 0.8926722, -2.4868906)
script = ExtResource("1_rf6lx")
step_target_path = NodePath("StepTarget")
step_distance = 4.0
[node name="StepTarget" type="Marker3D" parent="." unique_id=1875541333]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, -2, 0)
[node name="mecha-leg" parent="." unique_id=597959552 instance=ExtResource("1_h7rhd")]
transform = Transform3D(0.83249575, -0.55403143, 0, 0.55403143, 0.83249575, 0, 0, 0, 1, -0.018096328, 0, -0.013853073)
[node name="Skeleton3D" parent="mecha-leg/Armature" parent_id_path=PackedInt32Array(597959552, 1015042136) index="0" unique_id=1015525704]
bones/0/rotation = Quaternion(-3.2671387e-08, -1.890937e-08, -0.86549115, 0.5009242)
bones/0/scale = Vector3(0.99999994, 0.99999994, 1)
bones/1/position = Vector3(7.566918e-08, 2, -1.2818292e-14)
bones/1/rotation = Quaternion(-2.992432e-08, 6.2881918e-15, -0.39635947, 0.9180954)
bones/1/scale = Vector3(1.0000002, 1.0000002, 1)
bones/2/position = Vector3(6.1847814e-08, 2.1000001, 3.2634116e-14)
bones/2/rotation = Quaternion(-2.8624317e-08, -1.0078329e-14, -0.3791404, 0.92533916)
[node name="Bone_001" parent="mecha-leg/Armature/Skeleton3D" index="0" unique_id=442116879]
transform = Transform3D(-0.91758627, -0.39747998, 0.006730333, 0.39629143, -0.9132409, 0.094576165, -0.031445723, 0.089448966, 0.9954949, 1.6874223, -1.0735638, 0.008158923)
[node name="Bone" parent="mecha-leg/Armature/Skeleton3D" index="1" unique_id=1147044007]
transform = Transform3D(-0.5367859, 0.84371114, -0.00349133, -0.8437184, -0.53678185, 0.0021121316, -9.205331e-05, 0.0040794616, 0.99999166, 0, 0, 0)
[node name="CCDIK3D" type="CCDIK3D" parent="mecha-leg/Armature/Skeleton3D" index="2" unique_id=720183381]
angular_delta_limit = 0.606676447993229
deterministic = true
setting_count = 1
settings/0/target_node = NodePath("../../../../Node/LocalTarget")
settings/0/root_bone_name = "Bone"
settings/0/root_bone = 0
settings/0/end_bone_name = "Bone.002"
settings/0/end_bone = 2
settings/0/extend_end_bone = false
settings/0/joint_count = 3
settings/0/joints/0/rotation_axis = 3
settings/0/joints/0/limitation = null
settings/0/joints/1/rotation_axis = 3
settings/0/joints/1/limitation = null
settings/0/joints/2/rotation_axis = 3
settings/0/joints/2/limitation = null
[node name="Node" type="Node" parent="." unique_id=196901171]
[node name="LocalTarget" type="Marker3D" parent="Node" unique_id=1076144472]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.3219225, -1.137534, -2.3036175)
[editable path="mecha-leg"]
@@ -0,0 +1,24 @@
extends Node3D
class_name Bullet
const MAX_LIFETIME = 3.
var damage : float = 10.
var speed : float = 150.
var lifetime : float = 0.
@onready var raycast : RayCast3D = %RayCast3D
func _process(delta):
lifetime += delta
position += transform.basis * Vector3(0,0,-speed) * delta
if raycast.is_colliding():
if raycast.get_collider() is Alien:
raycast.get_collider().hit(damage)
queue_free()
if raycast.get_collider() is StaticBody3D:
queue_free()
if lifetime > MAX_LIFETIME:
queue_free()
@@ -0,0 +1 @@
uid://es5nf3pho7t1
@@ -0,0 +1,28 @@
[gd_scene format=3 uid="uid://da2dnjy802y1l"]
[ext_resource type="Script" uid="uid://es5nf3pho7t1" path="res://entities/mecha/weapons/gatling/bullet/bullet.gd" id="1_s22gb"]
[sub_resource type="CapsuleMesh" id="CapsuleMesh_yf5fn"]
radius = 0.328125
height = 2.694336
radial_segments = 4
rings = 1
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_57qmd"]
shading_mode = 0
albedo_color = Color(0.99215686, 0.9372549, 0.56078434, 1)
disable_receive_shadows = true
[node name="Bullet" type="Node3D" unique_id=226363088]
script = ExtResource("1_s22gb")
[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=564603597]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
mesh = SubResource("CapsuleMesh_yf5fn")
surface_material_override/0 = SubResource("StandardMaterial3D_57qmd")
[node name="RayCast3D" type="RayCast3D" parent="." unique_id=888262706]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, -1.3228955)
target_position = Vector3(0, -3, 0)
collide_with_areas = true
+49
View File
@@ -0,0 +1,49 @@
extends Weapon
class_name Gatling
const BULLET_SCENE : PackedScene = preload("res://entities/mecha/weapons/gatling/bullet/bullet.tscn")
var max_bullet_rate : float = 100.
var min_bullet_rate : float = 1.
var bullet_dispersion : float = 0.03
var bullet_rate := min_bullet_rate
var bullet_acc = 0.1
var bullet_decc = 1.
var time_shooting = 0.
func process_fire(delta : float, mecha : Mecha, shoot : bool) -> bool:
if shoot:
bullet_rate = lerp(
bullet_rate,
max_bullet_rate,
min(bullet_acc * delta, 1)
)
else :
bullet_rate = lerp(
bullet_rate,
min_bullet_rate,
min(bullet_decc * delta, 1)
)
time_shooting += delta
if shoot:
for i in range(roundi(bullet_rate * time_shooting)):
time_shooting -= 1/bullet_rate
shoot_bullet(mecha)
else :
time_shooting = 0.
return shoot
func shoot_bullet(mecha : Mecha,):
var new_bullet : Bullet = BULLET_SCENE.instantiate()
new_bullet.rotation.y = mecha.get_target_angle()
new_bullet.position = mecha.get_projectile_spwan_point()
mecha.add_recoil()
add_child(new_bullet)
new_bullet.rotation += Vector3(
randf_range(-bullet_dispersion, bullet_dispersion),
randf_range(-bullet_dispersion, bullet_dispersion),
randf_range(-bullet_dispersion, bullet_dispersion)
)
@@ -0,0 +1 @@
uid://7s4jtqkpp21e
+5
View File
@@ -0,0 +1,5 @@
@abstract
extends Node
class_name Weapon
@abstract func process_fire(delta : float, mecha : Mecha, shoot : bool) -> bool
+1
View File
@@ -0,0 +1 @@
uid://cyonrs821lwwg
+23
View File
@@ -0,0 +1,23 @@
extends Node
class_name GameGui
@export var mecha : Mecha
func _process(_delta):
%FPSCount.text = "%d fps" % Engine.get_frames_per_second()
if mecha:
%HPProgressBar.value = lerp(
%HPProgressBar.value,
(mecha.hp / Mecha.MAX_HP) * 100.,
0.5,
)
else:
printerr("Missing mecha in GameGui")
func show_lose_gui():
%LooseAnimationPlayer.play("Appear")
func _on_retry_button_pressed():
get_tree().paused = false
get_tree().reload_current_scene()

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