New screens, new hud, new intro menu, some UI element changes
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://bu3eevt6f31vy"
|
|
||||||
path="res://.godot/imported/intro_seq_0001.png-d13407f069897f5b8302350ea06caad2.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0001.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0001.png-d13407f069897f5b8302350ea06caad2.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://cv0386ujbone6"
|
|
||||||
path="res://.godot/imported/intro_seq_0002.png-7d720fee04fce498d05e156084b3ef90.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0002.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0002.png-7d720fee04fce498d05e156084b3ef90.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://bpagtmd32idd0"
|
|
||||||
path="res://.godot/imported/intro_seq_0003.png-ae551e25a09b19cb262685550214d751.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0003.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0003.png-ae551e25a09b19cb262685550214d751.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://b6rdw1pvnq4cj"
|
|
||||||
path="res://.godot/imported/intro_seq_0004.png-9977a1ecdd9ddac47ca83665f2c41e57.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0004.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0004.png-9977a1ecdd9ddac47ca83665f2c41e57.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://bwhtngfrq8ao7"
|
|
||||||
path="res://.godot/imported/intro_seq_0005.png-492c659aed88c33763898b51cdecde09.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0005.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0005.png-492c659aed88c33763898b51cdecde09.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://d4c6etc2k8o5b"
|
|
||||||
path="res://.godot/imported/intro_seq_0006.png-754b5919bb8ea2d96bfce5d29bfa03af.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0006.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0006.png-754b5919bb8ea2d96bfce5d29bfa03af.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://buw18qc3wanyf"
|
|
||||||
path="res://.godot/imported/intro_seq_0007.png-5924916944ea882df411d192e1106616.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0007.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0007.png-5924916944ea882df411d192e1106616.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://rqsffoxigmul"
|
|
||||||
path="res://.godot/imported/intro_seq_0008.png-cc0a32cbed495eedfc84f56240d77d70.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0008.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0008.png-cc0a32cbed495eedfc84f56240d77d70.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://dgqqdvsv087dq"
|
|
||||||
path="res://.godot/imported/intro_seq_0009.png-9477102b81fd9f557f19c0091825e489.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0009.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0009.png-9477102b81fd9f557f19c0091825e489.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://dx1eu7pdngt2b"
|
|
||||||
path="res://.godot/imported/intro_seq_0010.png-d159843ba1107baa767e0f568ebe5164.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0010.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0010.png-d159843ba1107baa767e0f568ebe5164.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://hrpawt4pm8vw"
|
|
||||||
path="res://.godot/imported/intro_seq_0011.png-da361e3c03d7c9e37aafa9a94fce40aa.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0011.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0011.png-da361e3c03d7c9e37aafa9a94fce40aa.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://cwxwxuq1qvq1s"
|
|
||||||
path="res://.godot/imported/intro_seq_0012.png-994091f05e3fffd9558b9c023b1e8959.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0012.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0012.png-994091f05e3fffd9558b9c023b1e8959.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://dcatel76pvhaf"
|
|
||||||
path="res://.godot/imported/intro_seq_0013.png-4f4f9ef778d5ed3a8f18e94c837f6258.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0013.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0013.png-4f4f9ef778d5ed3a8f18e94c837f6258.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
|
Before Width: | Height: | Size: 12 MiB |
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://c0pwx26aill3t"
|
|
||||||
path="res://.godot/imported/intro_seq_0016.png-ad89023f08798b251f84156b0d00d183.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0016.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0016.png-ad89023f08798b251f84156b0d00d183.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://b8mbxrarmnu70"
|
|
||||||
path="res://.godot/imported/intro_seq_0017.png-5bba2681811780a47d9cb4b03c476a91.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0017.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0017.png-5bba2681811780a47d9cb4b03c476a91.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://bmgpk0egfy66u"
|
|
||||||
path="res://.godot/imported/intro_seq_0018.png-b04a1bd60a6eb8446f8a91aca3abae15.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0018.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0018.png-b04a1bd60a6eb8446f8a91aca3abae15.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://dt41tdv4ameam"
|
|
||||||
path="res://.godot/imported/intro_seq_0019.png-e64a687201179a236907ea9ab3080cbd.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0019.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0019.png-e64a687201179a236907ea9ab3080cbd.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://dqdytcgsacjxc"
|
|
||||||
path="res://.godot/imported/intro_seq_0020.png-94a72e7452125cc098d4df663548b117.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0020.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0020.png-94a72e7452125cc098d4df663548b117.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://d3u6yoiw4anm0"
|
|
||||||
path="res://.godot/imported/intro_seq_0021.png-e41ed967859539364420056b92742e4b.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0021.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0021.png-e41ed967859539364420056b92742e4b.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://cl2ni7jmhpdj6"
|
|
||||||
path="res://.godot/imported/intro_seq_0022.png-147d9f81538df8bcb3842e1b12917298.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0022.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0022.png-147d9f81538df8bcb3842e1b12917298.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://bx77btneo2n5o"
|
|
||||||
path="res://.godot/imported/intro_seq_0023.png-d79bc8b0b5339953b97138b03091c590.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0023.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0023.png-d79bc8b0b5339953b97138b03091c590.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://b5uwi1h64dqek"
|
|
||||||
path="res://.godot/imported/intro_seq_0024.png-4ae491dbd3e8b33a50bf2e9fc7c44e36.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0024.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0024.png-4ae491dbd3e8b33a50bf2e9fc7c44e36.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://uv6nf2cgqjyy"
|
|
||||||
path="res://.godot/imported/intro_seq_0025.png-99f570fe058fb7903ce72e35a3c938f8.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0025.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0025.png-99f570fe058fb7903ce72e35a3c938f8.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://fh7m5y5j336x"
|
|
||||||
path="res://.godot/imported/intro_seq_0026.png-5bb48d75704d345d874831e5f6a2b446.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0026.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0026.png-5bb48d75704d345d874831e5f6a2b446.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://dfmr5syqlie06"
|
|
||||||
path="res://.godot/imported/intro_seq_0027.png-436ad22542c38673365c1700684b8278.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0027.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0027.png-436ad22542c38673365c1700684b8278.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://bx71y7cf6lsse"
|
|
||||||
path="res://.godot/imported/intro_seq_0028.png-250f5531a5db7406a3d95fa6f5a4b753.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0028.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0028.png-250f5531a5db7406a3d95fa6f5a4b753.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://r8vet7ghanp1"
|
|
||||||
path="res://.godot/imported/intro_seq_0029.png-deaafc16edf139dfe84ed9c86c1fc7ef.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0029.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0029.png-deaafc16edf139dfe84ed9c86c1fc7ef.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://4b8irulowbbv"
|
|
||||||
path="res://.godot/imported/intro_seq_0030.png-5860e05ac89ecb6e2036d6a84ee44e4e.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0030.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0030.png-5860e05ac89ecb6e2036d6a84ee44e4e.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://cvf5isldc65n4"
|
|
||||||
path="res://.godot/imported/intro_seq_0031.png-927f6fff06201f79eaf5ced54934d825.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0031.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0031.png-927f6fff06201f79eaf5ced54934d825.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://d4j88tyqprs2d"
|
|
||||||
path="res://.godot/imported/intro_seq_0032.png-fb16b2b570af97548a9a76fe074d0679.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0032.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0032.png-fb16b2b570af97548a9a76fe074d0679.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://b1k4bojvgeksu"
|
|
||||||
path="res://.godot/imported/intro_seq_0033.png-46cbba009bcd114946dc61b4952e390f.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0033.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0033.png-46cbba009bcd114946dc61b4952e390f.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
|
|
||||||
|
Before Width: | Height: | Size: 12 MiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://7cyyof1476yl"
|
|
||||||
path="res://.godot/imported/intro_seq_0034.png-e9bc2dbf0d75b6ff302c4cc0bfef8e97.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0034.png"
|
|
||||||
dest_files=["res://.godot/imported/intro_seq_0034.png-e9bc2dbf0d75b6ff302c4cc0bfef8e97.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
|
|
||||||
|
After Width: | Height: | Size: 144 KiB |
@@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://ypxkr3vla3fr"
|
uid="uid://cyscxku0nw055"
|
||||||
path="res://.godot/imported/HUD_0000_ability_JALG.png-c430df7817ae1f22045a2a27b06f60a8.ctex"
|
path="res://.godot/imported/DASH.png-02cbc39ec03a0c79526d7dc333659c48.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://HUD/HUD_0000_ability_JALG.png"
|
source_file="res://HUD/DASH.png"
|
||||||
dest_files=["res://.godot/imported/HUD_0000_ability_JALG.png-c430df7817ae1f22045a2a27b06f60a8.ctex"]
|
dest_files=["res://.godot/imported/DASH.png-02cbc39ec03a0c79526d7dc333659c48.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 11 KiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://dnv8w5h32ck7m"
|
|
||||||
path="res://.godot/imported/HUD_0002_ability_DASH.png-011f272dda65c06c407720ec201ad92e.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://HUD/HUD_0002_ability_DASH.png"
|
|
||||||
dest_files=["res://.godot/imported/HUD_0002_ability_DASH.png-011f272dda65c06c407720ec201ad92e.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
|
|
||||||
|
After Width: | Height: | Size: 168 KiB |
@@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://w4yovxyg0104"
|
uid="uid://bdnc3jw1ykydi"
|
||||||
path="res://.godot/imported/HUD_0001_ability_SLAM.png-7c5f88306e1af474db2c2073888feab7.ctex"
|
path="res://.godot/imported/KICK.png-5482be80e8176ed7a0ae69a48ca1f5ed.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://HUD/HUD_0001_ability_SLAM.png"
|
source_file="res://HUD/KICK.png"
|
||||||
dest_files=["res://.godot/imported/HUD_0001_ability_SLAM.png-7c5f88306e1af474db2c2073888feab7.ctex"]
|
dest_files=["res://.godot/imported/KICK.png-5482be80e8176ed7a0ae69a48ca1f5ed.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 204 KiB |
@@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://x8eewdg65qgr"
|
uid="uid://d25i88cixy4pn"
|
||||||
path="res://.godot/imported/intro_seq_0014.png-f8346c8267324ffe151c42113f79700d.ctex"
|
path="res://.godot/imported/ROLL.png-306dafcb4b6c13eded9a925aa6d2f62a.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0014.png"
|
source_file="res://HUD/ROLL.png"
|
||||||
dest_files=["res://.godot/imported/intro_seq_0014.png-f8346c8267324ffe151c42113f79700d.ctex"]
|
dest_files=["res://.godot/imported/ROLL.png-306dafcb4b6c13eded9a925aa6d2f62a.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 80 KiB |
@@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://nw2pvct1kqcd"
|
uid="uid://bxplqrp4mc5yh"
|
||||||
path="res://.godot/imported/intro_seq_0015.png-1a3c8239c9c1c61cd711f23fcc29af50.ctex"
|
path="res://.godot/imported/SLAM.png-b5036a739251be1240a24080e28d7a8e.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://Animations/Intro_sequence/intro_seq_0015.png"
|
source_file="res://HUD/SLAM.png"
|
||||||
dest_files=["res://.godot/imported/intro_seq_0015.png-1a3c8239c9c1c61cd711f23fcc29af50.ctex"]
|
dest_files=["res://.godot/imported/SLAM.png-b5036a739251be1240a24080e28d7a8e.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
@@ -15,6 +15,10 @@ var _aerial_pitch: float = 0.0
|
|||||||
var charge_pitch_target: float = 0.0
|
var charge_pitch_target: float = 0.0
|
||||||
var _charge_pitch_curr: float = 0.0
|
var _charge_pitch_curr: float = 0.0
|
||||||
|
|
||||||
|
# When true, another system (the roll's ball-tumble) owns the bull's full
|
||||||
|
# orientation — skip writing body wobble so we don't fight it.
|
||||||
|
var external_rotation: bool = false
|
||||||
|
|
||||||
# Tail — Verlet chain simulation
|
# Tail — Verlet chain simulation
|
||||||
const TAIL_BONES: Array = [
|
const TAIL_BONES: Array = [
|
||||||
&"tail_1", &"tail_2", &"tail_3", &"tail_4",
|
&"tail_1", &"tail_2", &"tail_3", &"tail_4",
|
||||||
@@ -128,6 +132,8 @@ func _wobble_body(delta: float) -> void:
|
|||||||
_aerial_pitch = lerpf(_aerial_pitch, target_pitch, delta * DP.f("aerial_pitch_speed"))
|
_aerial_pitch = lerpf(_aerial_pitch, target_pitch, delta * DP.f("aerial_pitch_speed"))
|
||||||
|
|
||||||
_charge_pitch_curr = lerpf(_charge_pitch_curr, charge_pitch_target, delta * DP.f("charge_head_speed"))
|
_charge_pitch_curr = lerpf(_charge_pitch_curr, charge_pitch_target, delta * DP.f("charge_head_speed"))
|
||||||
|
if external_rotation:
|
||||||
|
return
|
||||||
_bull.rotation.x = _tilt_x + _aerial_pitch + _charge_pitch_curr
|
_bull.rotation.x = _tilt_x + _aerial_pitch + _charge_pitch_curr
|
||||||
_bull.rotation.z = _tilt_z
|
_bull.rotation.z = _tilt_z
|
||||||
|
|
||||||
|
|||||||
@@ -387,12 +387,15 @@ func _reconcile(delta: float) -> void:
|
|||||||
if scene != null:
|
if scene != null:
|
||||||
_collect(scene, col, hit, bone, anim, wanted)
|
_collect(scene, col, hit, bone, anim, wanted)
|
||||||
|
|
||||||
# Drop overlays whose shape is gone or no longer wanted.
|
# Drop overlays whose shape is gone or no longer wanted. The overlay is a child of
|
||||||
|
# the collision shape, so it's freed with it — hold it as Variant, since assigning a
|
||||||
|
# freed instance to any *typed* var (even Object) throws before is_instance_valid()
|
||||||
|
# can filter it out.
|
||||||
for id: int in _overlays.keys():
|
for id: int in _overlays.keys():
|
||||||
var mi: MeshInstance3D = _overlays[id]
|
var mi: Variant = _overlays[id]
|
||||||
if not wanted.has(id) or not is_instance_valid(mi):
|
if not wanted.has(id) or not is_instance_valid(mi):
|
||||||
if is_instance_valid(mi):
|
if is_instance_valid(mi):
|
||||||
mi.queue_free()
|
(mi as Node).queue_free()
|
||||||
_overlays.erase(id)
|
_overlays.erase(id)
|
||||||
# Add overlays for newly seen shapes.
|
# Add overlays for newly seen shapes.
|
||||||
for id: int in wanted:
|
for id: int in wanted:
|
||||||
@@ -442,9 +445,9 @@ func _attach(cs: CollisionShape3D, is_area: bool) -> MeshInstance3D:
|
|||||||
|
|
||||||
func _clear_overlays() -> void:
|
func _clear_overlays() -> void:
|
||||||
for id: int in _overlays:
|
for id: int in _overlays:
|
||||||
var mi: MeshInstance3D = _overlays[id]
|
var mi: Variant = _overlays[id]
|
||||||
if is_instance_valid(mi):
|
if is_instance_valid(mi):
|
||||||
mi.queue_free()
|
(mi as Node).queue_free()
|
||||||
_overlays.clear()
|
_overlays.clear()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,25 +22,17 @@ func _ready() -> void:
|
|||||||
|
|
||||||
func _register_all() -> void:
|
func _register_all() -> void:
|
||||||
# ── Movement ──────────────────────────────────────────────────────────────
|
# ── Movement ──────────────────────────────────────────────────────────────
|
||||||
_reg_f("Movement", "thrust_impulse", 18.0, 1.0, 200.0)
|
# WASD/arrows drive the bull: move_accel ramps flat velocity toward max_speed in
|
||||||
_reg_f("Movement", "thrust_vertical", 2.0, 0.0, 20.0)
|
# the input direction; move_friction bleeds it off when no direction is held.
|
||||||
_reg_f("Movement", "thrust_min_angle", 15.0, 0.0, 90.0, 1.0)
|
|
||||||
_reg_f("Movement", "thrust_max_angle", 90.0, 0.0, 180.0, 1.0)
|
|
||||||
_reg_f("Movement", "thrust_charge_time", 0.5, 0.05, 2.0, 0.05)
|
|
||||||
_reg_f("Movement", "max_speed", 50.0, 2.0, 1000.0)
|
_reg_f("Movement", "max_speed", 50.0, 2.0, 1000.0)
|
||||||
_reg_f("Movement", "roll_damping", 0.15, 0.01, 0.99, 0.01)
|
_reg_f("Movement", "move_accel", 120.0, 5.0, 600.0)
|
||||||
|
_reg_f("Movement", "move_friction", 90.0, 5.0, 600.0)
|
||||||
_reg_f("Movement", "jump_velocity", 4.5, 1.0, 200.0)
|
_reg_f("Movement", "jump_velocity", 4.5, 1.0, 200.0)
|
||||||
_reg_f("Movement", "visual_turn_speed", 12.0, 1.0, 200.0)
|
_reg_f("Movement", "visual_turn_speed", 12.0, 1.0, 200.0)
|
||||||
_reg_f("Movement", "bounce_restitution", 0.55, 0.0, 2.0, 0.05)
|
_reg_f("Movement", "bounce_restitution", 0.55, 0.0, 2.0, 0.05)
|
||||||
_reg_f("Movement", "bounce_min_impact", 1.0, 0.0, 20.0)
|
_reg_f("Movement", "bounce_min_impact", 1.0, 0.0, 20.0)
|
||||||
_reg_f("Movement", "wall_bounce_restitution", 0.6, 0.0, 1.5, 0.05)
|
_reg_f("Movement", "wall_bounce_restitution", 0.6, 0.0, 1.5, 0.05)
|
||||||
_reg_f("Movement", "wall_min_bounce_speed", 6.0, 0.0, 30.0)
|
_reg_f("Movement", "wall_min_bounce_speed", 6.0, 0.0, 30.0)
|
||||||
_reg_f("Movement", "kick_impulse", 8.0, 1.0, 50.0)
|
|
||||||
_reg_f("Movement", "kick_interval", 0.25, 0.05, 1.0, 0.01)
|
|
||||||
_reg_f("Movement", "kick_vertical", 0.0, 0.0, 15.0)
|
|
||||||
_reg_f("Movement", "kick_force_var", 0.2, 0.0, 1.0, 0.01)
|
|
||||||
_reg_f("Movement", "kick_spread", 10.0, 0.0, 45.0, 1.0)
|
|
||||||
_reg_f("Movement", "charge_kick_mult", 2.0, 1.0, 5.0)
|
|
||||||
# ── Dust speed thresholds ─────────────────────────────────────────────────
|
# ── Dust speed thresholds ─────────────────────────────────────────────────
|
||||||
_reg_f("Dust", "dust_walk_spd", 1.5, 0.1, 10.0)
|
_reg_f("Dust", "dust_walk_spd", 1.5, 0.1, 10.0)
|
||||||
_reg_f("Dust", "dust_charge_spd", 7.0, 1.0, 20.0)
|
_reg_f("Dust", "dust_charge_spd", 7.0, 1.0, 20.0)
|
||||||
@@ -63,10 +55,7 @@ func _register_all() -> void:
|
|||||||
_reg_f("Tail", "tail_body_radius", 0.35, 0.05, 2.0, 0.05)
|
_reg_f("Tail", "tail_body_radius", 0.35, 0.05, 2.0, 0.05)
|
||||||
_reg_f("Tail", "tail_wag_freq", 4.0, 0.5, 15.0)
|
_reg_f("Tail", "tail_wag_freq", 4.0, 0.5, 15.0)
|
||||||
_reg_f("Tail", "tail_wag_idle", 0.3, 0.0, 2.0, 0.05)
|
_reg_f("Tail", "tail_wag_idle", 0.3, 0.0, 2.0, 0.05)
|
||||||
# ── Charge (both mouse buttons) ──────────────────────────────────────────
|
# ── Charge pose (horns-down lean during dash / roll) ─────────────────────
|
||||||
_reg_f("Charge", "bull_charge_accel", 80.0, 1.0, 400.0)
|
|
||||||
_reg_f("Charge", "bull_charge_max_speed", 76.0, 5.0, 200.0)
|
|
||||||
_reg_f("Charge", "charge_ramp_time", 0.75, 0.1, 5.0, 0.05)
|
|
||||||
_reg_f("Charge", "charge_head_pitch", 0.3, 0.0, 1.2, 0.01)
|
_reg_f("Charge", "charge_head_pitch", 0.3, 0.0, 1.2, 0.01)
|
||||||
_reg_f("Charge", "charge_head_speed", 5.0, 0.5, 20.0)
|
_reg_f("Charge", "charge_head_speed", 5.0, 0.5, 20.0)
|
||||||
# ── Body ──────────────────────────────────────────────────────────────────
|
# ── Body ──────────────────────────────────────────────────────────────────
|
||||||
@@ -108,6 +97,9 @@ func _register_all() -> void:
|
|||||||
_reg_f("Matador", "mat_spawn_count", 1.0, 1.0, 30.0, 1.0)
|
_reg_f("Matador", "mat_spawn_count", 1.0, 1.0, 30.0, 1.0)
|
||||||
_reg_f("Matador", "mat_walk_speed", 5.5, 0.5, 10.0)
|
_reg_f("Matador", "mat_walk_speed", 5.5, 0.5, 10.0)
|
||||||
_reg_f("Matador", "mat_wander_radius", 22.0, 5.0, 50.0)
|
_reg_f("Matador", "mat_wander_radius", 22.0, 5.0, 50.0)
|
||||||
|
# Radius of the inner fighting floor: bull + matadors spawn on this ring (so
|
||||||
|
# they stay off the benches). Tune in the console to hug the bench edge.
|
||||||
|
_reg_f("Matador", "arena_spawn_radius", 10.0, 2.0, 22.0, 0.5)
|
||||||
_reg_f("Matador", "mat_idle_min", 0.5, 0.0, 5.0, 0.1)
|
_reg_f("Matador", "mat_idle_min", 0.5, 0.0, 5.0, 0.1)
|
||||||
_reg_f("Matador", "mat_idle_max", 2.5, 0.5, 10.0, 0.1)
|
_reg_f("Matador", "mat_idle_max", 2.5, 0.5, 10.0, 0.1)
|
||||||
_reg_f("Matador", "mat_hit_threshold", 4.0, 1.0, 30.0)
|
_reg_f("Matador", "mat_hit_threshold", 4.0, 1.0, 30.0)
|
||||||
@@ -229,7 +221,8 @@ func _register_all() -> void:
|
|||||||
_reg_f("Roll", "roll_base_speed", 28.0, 5.0, 120.0) # speed at the start of the roll
|
_reg_f("Roll", "roll_base_speed", 28.0, 5.0, 120.0) # speed at the start of the roll
|
||||||
_reg_f("Roll", "roll_max_speed", 95.0, 10.0, 200.0) # top speed once fully ramped
|
_reg_f("Roll", "roll_max_speed", 95.0, 10.0, 200.0) # top speed once fully ramped
|
||||||
_reg_f("Roll", "roll_rampup_time", 2.0, 0.2, 6.0, 0.1) # time to reach top speed
|
_reg_f("Roll", "roll_rampup_time", 2.0, 0.2, 6.0, 0.1) # time to reach top speed
|
||||||
_reg_f("Roll", "roll_turn", 3.5, 0.2, 20.0) # steer rate (low = wide momentum turns)
|
_reg_f("Roll", "roll_turn", 7.0, 0.2, 20.0) # steer rate (WASD/arrows; higher = tighter)
|
||||||
|
_reg_f("Roll", "roll_spin_radius", 1.4, 0.3, 4.0, 0.1) # ball radius for tumble spin (smaller = faster)
|
||||||
_reg_f("Roll", "roll_hit_radius", 2.4, 0.5, 6.0, 0.1) # contact radius that pops the ball
|
_reg_f("Roll", "roll_hit_radius", 2.4, 0.5, 6.0, 0.1) # contact radius that pops the ball
|
||||||
_reg_f("Roll", "roll_hit_strength", 22.0, 1.0, 40.0) # horizontal launch on the pop
|
_reg_f("Roll", "roll_hit_strength", 22.0, 1.0, 40.0) # horizontal launch on the pop
|
||||||
_reg_f("Roll", "roll_knockup", 11.0, 0.0, 25.0) # vertical knock-up on the pop
|
_reg_f("Roll", "roll_knockup", 11.0, 0.0, 25.0) # vertical knock-up on the pop
|
||||||
|
|||||||
@@ -1,22 +1,28 @@
|
|||||||
extends CanvasLayer
|
extends CanvasLayer
|
||||||
|
|
||||||
const _GOLD := Color(1.00, 0.78, 0.22)
|
const _GOLD := Color(1.00, 0.78, 0.22)
|
||||||
const _CREAM := Color(0.88, 0.83, 0.72)
|
const _CREAM := Color(0.93, 0.88, 0.72)
|
||||||
const _MUTED := Color(0.65, 0.60, 0.48)
|
const _MUTED := Color(0.66, 0.60, 0.46)
|
||||||
const _BG := Color(0.06, 0.04, 0.02, 0.78)
|
|
||||||
const _BADGE := Color(0.16, 0.10, 0.03, 0.90)
|
# Per-ability trim colour, tying each tile (and its key cap) to that ability's FX.
|
||||||
const _BORDER := Color(0.65, 0.48, 0.15, 0.55)
|
# Order matches _ABILITY_ICONS: kick, slam, dash, roll.
|
||||||
|
const _ABILITY_ACCENT: Array[Color] = [
|
||||||
|
Color(1.00, 0.62, 0.16), # Kick — ember orange
|
||||||
|
Color(0.98, 0.34, 0.20), # Slam — crimson
|
||||||
|
Color(0.45, 0.75, 1.00), # Dash — sky blue
|
||||||
|
Color(1.00, 0.82, 0.32), # Roll — gold
|
||||||
|
]
|
||||||
|
|
||||||
const _ABILITY_ICONS: Array[String] = [
|
const _ABILITY_ICONS: Array[String] = [
|
||||||
"res://HUD/HUD_0000_ability_JALG.png",
|
"res://HUD/KICK.png",
|
||||||
"res://HUD/HUD_0001_ability_SLAM.png",
|
"res://HUD/SLAM.png",
|
||||||
"res://HUD/HUD_0002_ability_DASH.png",
|
"res://HUD/DASH.png",
|
||||||
"res://HUD/HUD_0003_ability_ROLL.png",
|
"res://HUD/ROLL.png",
|
||||||
]
|
]
|
||||||
const _ABILITY_ACTIONS: Array[StringName] = [
|
const _ABILITY_ACTIONS: Array[StringName] = [
|
||||||
&"ability_kick", &"ability_slam", &"ability_dash", &"ability_roll",
|
&"ability_kick", &"ability_slam", &"ability_dash", &"ability_roll",
|
||||||
]
|
]
|
||||||
# Fallback label shown in a slot whose icon file doesn't exist yet (e.g. ROLL).
|
# Fallback label shown in a slot whose icon file fails to load.
|
||||||
const _ABILITY_NAMES: Array[String] = ["Kick", "Slam", "Dash", "Roll"]
|
const _ABILITY_NAMES: Array[String] = ["Kick", "Slam", "Dash", "Roll"]
|
||||||
|
|
||||||
var _controls_visible: bool = false
|
var _controls_visible: bool = false
|
||||||
@@ -28,6 +34,8 @@ var _player: Node = null
|
|||||||
var _died_connected: bool = false
|
var _died_connected: bool = false
|
||||||
var _cd_overlays: Array[ColorRect] = []
|
var _cd_overlays: Array[ColorRect] = []
|
||||||
var _cd_labels: Array[Label] = []
|
var _cd_labels: Array[Label] = []
|
||||||
|
var _ability_bar: HBoxContainer
|
||||||
|
var _ability_panels: Array[PanelContainer] = []
|
||||||
|
|
||||||
# Win/lose screen. _game_over latches so the result is shown once; _result_win
|
# Win/lose screen. _game_over latches so the result is shown once; _result_win
|
||||||
# records which way it went (read by the gameplay test).
|
# records which way it went (read by the gameplay test).
|
||||||
@@ -201,37 +209,36 @@ func _build_game_over() -> void:
|
|||||||
row.add_child(menu)
|
row.add_child(menu)
|
||||||
|
|
||||||
|
|
||||||
# A bordered, rounded, gold-trimmed panel background — the HUD's one repeated look.
|
const _SLOT_SEPARATION: int = 10
|
||||||
# Margins are symmetric (L=R, T=B); pass a transparent border to draw none.
|
|
||||||
func _panel_style(bg: Color, corner: int, h_margin: float, v_margin: float,
|
|
||||||
border: Color = _BORDER) -> StyleBoxFlat:
|
|
||||||
var s := StyleBoxFlat.new()
|
|
||||||
s.bg_color = bg
|
|
||||||
s.set_corner_radius_all(corner)
|
|
||||||
if border.a > 0.0:
|
|
||||||
s.set_border_width_all(1)
|
|
||||||
s.border_color = border
|
|
||||||
s.content_margin_left = h_margin
|
|
||||||
s.content_margin_right = h_margin
|
|
||||||
s.content_margin_top = v_margin
|
|
||||||
s.content_margin_bottom = v_margin
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
func _build_ability_bar() -> void:
|
func _build_ability_bar() -> void:
|
||||||
var bar := HBoxContainer.new()
|
_ability_bar = HBoxContainer.new()
|
||||||
bar.add_theme_constant_override("separation", 10)
|
_ability_bar.add_theme_constant_override("separation", _SLOT_SEPARATION)
|
||||||
bar.anchor_left = 0.5
|
_ability_bar.anchor_left = 0.5
|
||||||
bar.anchor_right = 0.5
|
_ability_bar.anchor_right = 0.5
|
||||||
bar.anchor_top = 1.0
|
_ability_bar.anchor_top = 1.0
|
||||||
bar.anchor_bottom = 1.0
|
_ability_bar.anchor_bottom = 1.0
|
||||||
bar.grow_horizontal = Control.GROW_DIRECTION_BOTH
|
_ability_bar.grow_horizontal = Control.GROW_DIRECTION_BOTH
|
||||||
bar.grow_vertical = Control.GROW_DIRECTION_BEGIN
|
_ability_bar.grow_vertical = Control.GROW_DIRECTION_BEGIN
|
||||||
bar.offset_left = -160.0
|
_ability_bar.offset_bottom = -20.0
|
||||||
bar.offset_bottom = -20.0
|
add_child(_ability_bar)
|
||||||
add_child(bar)
|
|
||||||
for i: int in 4:
|
for i: int in 4:
|
||||||
bar.add_child(_build_ability_slot(i))
|
_ability_bar.add_child(_build_ability_slot(i))
|
||||||
|
_layout_ability_bar()
|
||||||
|
get_viewport().size_changed.connect(_layout_ability_bar)
|
||||||
|
|
||||||
|
|
||||||
|
# Size the ability slots as a fraction of the viewport (clamped) so the bar scales
|
||||||
|
# with the window, and keep it horizontally centred by matching the HBox offsets.
|
||||||
|
func _layout_ability_bar() -> void:
|
||||||
|
var vp := get_viewport().get_visible_rect().size
|
||||||
|
var slot := clampf(minf(vp.x * 0.055, vp.y * 0.11), 56.0, 104.0)
|
||||||
|
for panel: PanelContainer in _ability_panels:
|
||||||
|
panel.custom_minimum_size = Vector2(slot, slot)
|
||||||
|
var total := slot * 4.0 + float(_SLOT_SEPARATION) * 3.0
|
||||||
|
_ability_bar.offset_left = -total * 0.5
|
||||||
|
_ability_bar.offset_right = total * 0.5
|
||||||
|
|
||||||
|
|
||||||
func _build_ability_slot(idx: int) -> Control:
|
func _build_ability_slot(idx: int) -> Control:
|
||||||
@@ -240,8 +247,10 @@ func _build_ability_slot(idx: int) -> Control:
|
|||||||
|
|
||||||
var panel := PanelContainer.new()
|
var panel := PanelContainer.new()
|
||||||
panel.custom_minimum_size = Vector2(72.0, 72.0)
|
panel.custom_minimum_size = Vector2(72.0, 72.0)
|
||||||
panel.add_theme_stylebox_override("panel", _panel_style(_BG, 6, 4.0, 4.0))
|
panel.add_theme_stylebox_override(
|
||||||
|
"panel", UiTheme.plaque(UiTheme.LEATHER, _ABILITY_ACCENT[idx], 4, 5.0, 5.0))
|
||||||
vbox.add_child(panel)
|
vbox.add_child(panel)
|
||||||
|
_ability_panels.append(panel)
|
||||||
|
|
||||||
var stack := Control.new()
|
var stack := Control.new()
|
||||||
stack.set_anchors_preset(Control.PRESET_FULL_RECT)
|
stack.set_anchors_preset(Control.PRESET_FULL_RECT)
|
||||||
@@ -250,8 +259,12 @@ func _build_ability_slot(idx: int) -> Control:
|
|||||||
if ResourceLoader.exists(_ABILITY_ICONS[idx]):
|
if ResourceLoader.exists(_ABILITY_ICONS[idx]):
|
||||||
var icon := TextureRect.new()
|
var icon := TextureRect.new()
|
||||||
icon.texture = load(_ABILITY_ICONS[idx])
|
icon.texture = load(_ABILITY_ICONS[idx])
|
||||||
|
# Ignore the texture's native size so a large source PNG doesn't blow the
|
||||||
|
# slot's minimum size out; scale-to-fit the box while keeping aspect.
|
||||||
|
icon.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
|
||||||
icon.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
icon.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
||||||
icon.set_anchors_preset(Control.PRESET_FULL_RECT)
|
icon.set_anchors_preset(Control.PRESET_FULL_RECT)
|
||||||
|
icon.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||||
stack.add_child(icon)
|
stack.add_child(icon)
|
||||||
else:
|
else:
|
||||||
var name_lbl := Label.new()
|
var name_lbl := Label.new()
|
||||||
@@ -288,8 +301,11 @@ func _build_ability_slot(idx: int) -> Control:
|
|||||||
var key_lbl := Label.new()
|
var key_lbl := Label.new()
|
||||||
key_lbl.text = Controls.get_key_label(_ABILITY_ACTIONS[idx])
|
key_lbl.text = Controls.get_key_label(_ABILITY_ACTIONS[idx])
|
||||||
key_lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
key_lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||||
key_lbl.add_theme_color_override("font_color", _GOLD)
|
key_lbl.add_theme_font_override("font", UiFonts.body())
|
||||||
key_lbl.add_theme_font_size_override("font_size", 12)
|
key_lbl.add_theme_color_override("font_color", _ABILITY_ACCENT[idx].lerp(_CREAM, 0.35))
|
||||||
|
key_lbl.add_theme_color_override("font_outline_color", Color(0, 0, 0, 0.85))
|
||||||
|
key_lbl.add_theme_constant_override("outline_size", 3)
|
||||||
|
key_lbl.add_theme_font_size_override("font_size", 13)
|
||||||
vbox.add_child(key_lbl)
|
vbox.add_child(key_lbl)
|
||||||
|
|
||||||
return vbox
|
return vbox
|
||||||
@@ -312,7 +328,8 @@ func _build_tab_hint() -> void:
|
|||||||
|
|
||||||
func _build_controls_panel() -> void:
|
func _build_controls_panel() -> void:
|
||||||
_controls_panel = PanelContainer.new()
|
_controls_panel = PanelContainer.new()
|
||||||
_controls_panel.add_theme_stylebox_override("panel", _panel_style(_BG, 7, 14.0, 10.0))
|
_controls_panel.add_theme_stylebox_override(
|
||||||
|
"panel", UiTheme.plaque(UiTheme.LEATHER, UiTheme.BORDER, 4, 16.0, 12.0))
|
||||||
|
|
||||||
_controls_panel.anchor_left = 0.0
|
_controls_panel.anchor_left = 0.0
|
||||||
_controls_panel.anchor_top = 1.0
|
_controls_panel.anchor_top = 1.0
|
||||||
@@ -334,9 +351,7 @@ func _build_controls_panel() -> void:
|
|||||||
Controls.get_key_label(&"move_back"),
|
Controls.get_key_label(&"move_back"),
|
||||||
Controls.get_key_label(&"move_right"),
|
Controls.get_key_label(&"move_right"),
|
||||||
]
|
]
|
||||||
_row(vbox, move_keys, "Move (not intended)", _MUTED)
|
_row(vbox, move_keys, "Move", _CREAM)
|
||||||
_row(vbox, "LMB (hold)", "Right horn", _CREAM)
|
|
||||||
_row(vbox, "RMB (hold)", "Left horn", _CREAM)
|
|
||||||
_row(vbox, Controls.get_key_label(&"ability_kick"), "Kick", _CREAM)
|
_row(vbox, Controls.get_key_label(&"ability_kick"), "Kick", _CREAM)
|
||||||
_row(vbox, Controls.get_key_label(&"ability_slam"), "Slam", _CREAM)
|
_row(vbox, Controls.get_key_label(&"ability_slam"), "Slam", _CREAM)
|
||||||
_row(vbox, Controls.get_key_label(&"ability_dash"), "Dash", _CREAM)
|
_row(vbox, Controls.get_key_label(&"ability_dash"), "Dash", _CREAM)
|
||||||
@@ -346,11 +361,7 @@ func _build_controls_panel() -> void:
|
|||||||
_row(vbox, "Esc", "Back to menu", _MUTED)
|
_row(vbox, "Esc", "Back to menu", _MUTED)
|
||||||
|
|
||||||
var sep := HSeparator.new()
|
var sep := HSeparator.new()
|
||||||
var sep_style := StyleBoxFlat.new()
|
sep.add_theme_stylebox_override("separator", UiTheme.rule())
|
||||||
sep_style.bg_color = Color(0.65, 0.48, 0.15, 0.30)
|
|
||||||
sep_style.content_margin_top = 4.0
|
|
||||||
sep_style.content_margin_bottom = 4.0
|
|
||||||
sep.add_theme_stylebox_override("separator", sep_style)
|
|
||||||
vbox.add_child(sep)
|
vbox.add_child(sep)
|
||||||
|
|
||||||
_toggle_btn = _make_button("Show controls")
|
_toggle_btn = _make_button("Show controls")
|
||||||
@@ -363,8 +374,8 @@ func _make_button(label_text: String) -> Button:
|
|||||||
btn.text = label_text
|
btn.text = label_text
|
||||||
btn.process_mode = Node.PROCESS_MODE_ALWAYS
|
btn.process_mode = Node.PROCESS_MODE_ALWAYS
|
||||||
|
|
||||||
var normal := _panel_style(Color(0.18, 0.12, 0.04, 0.90), 5, 16.0, 8.0)
|
var normal := UiTheme.plaque(Color(0.10, 0.07, 0.03, 0.90), _GOLD, 3, 18.0, 9.0)
|
||||||
var hover := _panel_style(Color(0.30, 0.20, 0.06, 0.95), 5, 16.0, 8.0, _GOLD)
|
var hover := UiTheme.plaque(Color(0.16, 0.10, 0.04, 0.96), _CREAM, 3, 18.0, 9.0)
|
||||||
|
|
||||||
btn.add_theme_stylebox_override("normal", normal)
|
btn.add_theme_stylebox_override("normal", normal)
|
||||||
btn.add_theme_stylebox_override("hover", hover)
|
btn.add_theme_stylebox_override("hover", hover)
|
||||||
@@ -384,7 +395,7 @@ func _row(parent: VBoxContainer, key: String, desc: String, desc_color: Color) -
|
|||||||
parent.add_child(row)
|
parent.add_child(row)
|
||||||
|
|
||||||
var badge := PanelContainer.new()
|
var badge := PanelContainer.new()
|
||||||
badge.add_theme_stylebox_override("panel", _panel_style(_BADGE, 3, 6.0, 2.0, Color(0, 0, 0, 0)))
|
badge.add_theme_stylebox_override("panel", UiTheme.badge())
|
||||||
badge.custom_minimum_size = Vector2(100.0, 0.0)
|
badge.custom_minimum_size = Vector2(100.0, 0.0)
|
||||||
row.add_child(badge)
|
row.add_child(badge)
|
||||||
|
|
||||||
|
|||||||
@@ -152,19 +152,9 @@ func _style_button(btn: Button, big: bool) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _plaque(hot: bool) -> StyleBoxFlat:
|
func _plaque(hot: bool) -> StyleBoxFlat:
|
||||||
var s := StyleBoxFlat.new()
|
var bg := Color(0.14, 0.09, 0.04, 0.94) if hot else Color(0.07, 0.05, 0.03, 0.82)
|
||||||
s.bg_color = Color(0.14, 0.09, 0.04, 0.94) if hot else Color(0.07, 0.05, 0.03, 0.82)
|
var trim := MENU_CREAM if hot else MENU_GOLD
|
||||||
s.set_border_width_all(2)
|
return UiTheme.plaque(bg, trim, 2, 24.0, 9.0)
|
||||||
s.border_width_bottom = 5
|
|
||||||
s.border_color = MENU_CREAM if hot else MENU_GOLD
|
|
||||||
s.set_corner_radius_all(2)
|
|
||||||
s.content_margin_left = 24.0
|
|
||||||
s.content_margin_right = 24.0
|
|
||||||
s.content_margin_top = 8.0
|
|
||||||
s.content_margin_bottom = 10.0
|
|
||||||
s.shadow_color = Color(0.0, 0.0, 0.0, 0.5)
|
|
||||||
s.shadow_size = 6
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
|
|||||||
@@ -18,18 +18,36 @@ func _ready() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _spawn() -> void:
|
func _spawn() -> void:
|
||||||
for pos: Vector3 in _spread_positions(_spawn_count):
|
# Bull and matadors start at opposite ends of a random diameter, so they always
|
||||||
|
# begin as far apart as the arena allows (edge-to-edge across the centre).
|
||||||
|
var arena_r := DP.f("arena_spawn_radius")
|
||||||
|
var bull_angle := randf() * TAU
|
||||||
|
_place_bull(bull_angle, arena_r)
|
||||||
|
for pos: Vector3 in _spread_positions(_spawn_count, bull_angle + PI, arena_r):
|
||||||
_spawn_at(pos)
|
_spawn_at(pos)
|
||||||
|
|
||||||
|
|
||||||
func _spread_positions(count: int) -> Array[Vector3]:
|
func _place_bull(angle: float, arena_r: float) -> void:
|
||||||
|
var bull := get_tree().get_first_node_in_group(&"player") as Node3D
|
||||||
|
if not bull:
|
||||||
|
return
|
||||||
|
bull.global_position = Vector3(
|
||||||
|
cos(angle) * arena_r, bull.global_position.y, sin(angle) * arena_r
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Positions for the matadors, clustered on the far side (centred on `center_angle`)
|
||||||
|
# so every matador stays near the point diametrically opposite the bull.
|
||||||
|
func _spread_positions(count: int, center_angle: float, arena_r: float) -> Array[Vector3]:
|
||||||
var positions: Array[Vector3] = []
|
var positions: Array[Vector3] = []
|
||||||
var arena_r := DP.f("mat_wander_radius") * 0.72
|
if count <= 1:
|
||||||
var min_r := 5.0
|
positions.append(Vector3(cos(center_angle) * arena_r, 1.0, sin(center_angle) * arena_r))
|
||||||
|
return positions
|
||||||
|
var arc := TAU * 0.33
|
||||||
for i: int in count:
|
for i: int in count:
|
||||||
var sector := TAU / count
|
var t := float(i) / float(count - 1) - 0.5 # -0.5 .. 0.5 across the arc
|
||||||
var angle := sector * i + randf_range(-sector * 0.35, sector * 0.35)
|
var angle := center_angle + t * arc
|
||||||
var radius := randf_range(min_r, arena_r)
|
var radius := randf_range(arena_r * 0.7, arena_r)
|
||||||
positions.append(Vector3(cos(angle) * radius, 1.0, sin(angle) * radius))
|
positions.append(Vector3(cos(angle) * radius, 1.0, sin(angle) * radius))
|
||||||
return positions
|
return positions
|
||||||
|
|
||||||
|
|||||||
@@ -22,12 +22,8 @@ const _ANIM_ROLL: StringName = &"Armature|ROLL"
|
|||||||
var _hoof_emitters: Array[CPUParticles3D] = []
|
var _hoof_emitters: Array[CPUParticles3D] = []
|
||||||
var _legs: Node
|
var _legs: Node
|
||||||
|
|
||||||
var _kick_timer: float = 0.0
|
|
||||||
var _was_on_floor: bool = false
|
var _was_on_floor: bool = false
|
||||||
var _pre_slide_vel_y: float = 0.0
|
var _pre_slide_vel_y: float = 0.0
|
||||||
var _thrust_left_charge: float = 0.0
|
|
||||||
var _thrust_right_charge: float = 0.0
|
|
||||||
var _charge_was_full: bool = false
|
|
||||||
|
|
||||||
var _slam_ring_mesh: ArrayMesh = null
|
var _slam_ring_mesh: ArrayMesh = null
|
||||||
|
|
||||||
@@ -39,21 +35,13 @@ var _active_ability: int = -1
|
|||||||
var _dash_dir: Vector3 = Vector3.ZERO
|
var _dash_dir: Vector3 = Vector3.ZERO
|
||||||
var _roll_dir: Vector3 = Vector3.ZERO
|
var _roll_dir: Vector3 = Vector3.ZERO
|
||||||
var _roll_ramp: float = 0.0
|
var _roll_ramp: float = 0.0
|
||||||
|
var _roll_spin: float = 0.0
|
||||||
var _bull_anim: AnimationPlayer = null
|
var _bull_anim: AnimationPlayer = null
|
||||||
|
|
||||||
var _charge_ready_emitter: CPUParticles3D = null
|
|
||||||
var _slam_pending: bool = false
|
var _slam_pending: bool = false
|
||||||
var _charge_trail_emitter: CPUParticles3D = null
|
var _charge_trail_emitter: CPUParticles3D = null
|
||||||
|
var _roll_spark_emitter: CPUParticles3D = null
|
||||||
# Floating 3D charge bar (mouse-button thrust charge indicator)
|
var _cube_scale: Vector3 = Vector3.ONE
|
||||||
const _CHARGE_BAR_WIDTH: float = 1.1
|
|
||||||
const _CHARGE_BAR_HEIGHT: float = 1.45
|
|
||||||
var _charge_bar: Node3D = null
|
|
||||||
var _charge_bar_fill: MeshInstance3D = null
|
|
||||||
var _charge_bar_fill_mat: StandardMaterial3D = null
|
|
||||||
var _charge_bar_ramp: Gradient = null
|
|
||||||
var _charge_bar_time: float = 0.0
|
|
||||||
var _charge_bar_shown: float = 0.0
|
|
||||||
|
|
||||||
# One clean hit ends the run — see take_sword_hit(). The HUD listens for `died`
|
# One clean hit ends the run — see take_sword_hit(). The HUD listens for `died`
|
||||||
# to raise the lose screen (the `cause` tags how it happened, for the death notice);
|
# to raise the lose screen (the `cause` tags how it happened, for the death notice);
|
||||||
@@ -64,7 +52,6 @@ var _dead: bool = false
|
|||||||
var _huff_player: AudioStreamPlayer = null
|
var _huff_player: AudioStreamPlayer = null
|
||||||
var _crowd_player: AudioStreamPlayer = null
|
var _crowd_player: AudioStreamPlayer = null
|
||||||
var _huff_timer: float = 0.0
|
var _huff_timer: float = 0.0
|
||||||
var _roll_damping: float = 0.15
|
|
||||||
|
|
||||||
enum DustState { NONE, WALK, CHARGE }
|
enum DustState { NONE, WALK, CHARGE }
|
||||||
var _dust_state: DustState = DustState.NONE
|
var _dust_state: DustState = DustState.NONE
|
||||||
@@ -74,15 +61,15 @@ var _charge_dust_ramp: Gradient = null
|
|||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
add_to_group(&"player")
|
add_to_group(&"player")
|
||||||
|
_cube_scale = cube_guy.scale
|
||||||
_setup_hoof_dust()
|
_setup_hoof_dust()
|
||||||
_setup_legs()
|
_setup_legs()
|
||||||
_setup_charge_indicators()
|
_setup_charge_trail()
|
||||||
_setup_charge_bar()
|
_setup_roll_sparks()
|
||||||
_setup_audio()
|
_setup_audio()
|
||||||
_bull_anim = _find_anim_player(cube_guy)
|
_bull_anim = _find_anim_player(cube_guy)
|
||||||
_setup_bull_idle()
|
_setup_bull_idle()
|
||||||
DP.any_changed.connect(_on_dp_changed)
|
DP.any_changed.connect(_on_dp_changed)
|
||||||
_roll_damping = DP.f("roll_damping")
|
|
||||||
|
|
||||||
|
|
||||||
func _setup_legs() -> void:
|
func _setup_legs() -> void:
|
||||||
@@ -132,39 +119,8 @@ func _setup_hoof_dust() -> void:
|
|||||||
_hoof_emitters.append(p)
|
_hoof_emitters.append(p)
|
||||||
|
|
||||||
|
|
||||||
func _setup_charge_indicators() -> void:
|
func _setup_charge_trail() -> void:
|
||||||
var sphere := _particle_sphere(0.07, 4, 2, _unshaded_material())
|
# Blue energy trail — streams backward during a fast run / roll
|
||||||
|
|
||||||
# Orange spark burst when single-button charge hits max
|
|
||||||
var burst_ramp := Gradient.new()
|
|
||||||
burst_ramp.set_color(0, Color(1.0, 0.55, 0.0, 1.0))
|
|
||||||
burst_ramp.set_color(1, Color(1.0, 0.15, 0.0, 0.0))
|
|
||||||
|
|
||||||
var burst_scale := Curve.new()
|
|
||||||
burst_scale.add_point(Vector2(0.0, 1.0))
|
|
||||||
burst_scale.add_point(Vector2(1.0, 0.0))
|
|
||||||
|
|
||||||
_charge_ready_emitter = CPUParticles3D.new()
|
|
||||||
_charge_ready_emitter.position = Vector3(0.0, 0.3, 0.0)
|
|
||||||
_charge_ready_emitter.emitting = false
|
|
||||||
_charge_ready_emitter.one_shot = true
|
|
||||||
_charge_ready_emitter.amount = 16
|
|
||||||
_charge_ready_emitter.lifetime = 0.5
|
|
||||||
_charge_ready_emitter.explosiveness = 1.0
|
|
||||||
_charge_ready_emitter.randomness = 0.4
|
|
||||||
_charge_ready_emitter.local_coords = false
|
|
||||||
_charge_ready_emitter.direction = Vector3.UP
|
|
||||||
_charge_ready_emitter.spread = 120.0
|
|
||||||
_charge_ready_emitter.initial_velocity_min = 2.5
|
|
||||||
_charge_ready_emitter.initial_velocity_max = 5.0
|
|
||||||
_charge_ready_emitter.scale_amount_min = 0.2
|
|
||||||
_charge_ready_emitter.scale_amount_max = 0.5
|
|
||||||
_charge_ready_emitter.mesh = sphere
|
|
||||||
_charge_ready_emitter.color_ramp = burst_ramp
|
|
||||||
_charge_ready_emitter.scale_amount_curve = burst_scale
|
|
||||||
cube_guy.add_child(_charge_ready_emitter)
|
|
||||||
|
|
||||||
# Blue energy trail — streams backward during charge
|
|
||||||
var trail_sphere := _particle_sphere(0.065, 4, 2, _unshaded_material())
|
var trail_sphere := _particle_sphere(0.065, 4, 2, _unshaded_material())
|
||||||
|
|
||||||
var trail_ramp := Gradient.new()
|
var trail_ramp := Gradient.new()
|
||||||
@@ -197,93 +153,39 @@ func _setup_charge_indicators() -> void:
|
|||||||
cube_guy.add_child(_charge_trail_emitter)
|
cube_guy.add_child(_charge_trail_emitter)
|
||||||
|
|
||||||
|
|
||||||
func _setup_charge_bar() -> void:
|
func _setup_roll_sparks() -> void:
|
||||||
_charge_bar = Node3D.new()
|
# Rammus Powerball ground spray — dirt/sparks flung outward from the spinning
|
||||||
_charge_bar.visible = false
|
# ball. World-space (local_coords off) so they peel off into a trail behind it.
|
||||||
add_child(_charge_bar)
|
var spark := _particle_sphere(0.05, 4, 2, _unshaded_material())
|
||||||
|
|
||||||
var w := _CHARGE_BAR_WIDTH
|
var ramp := Gradient.new()
|
||||||
var thickness := 0.16
|
ramp.set_color(0, Color(1.00, 0.78, 0.32, 1.0))
|
||||||
|
ramp.set_color(1, Color(0.70, 0.42, 0.14, 0.0))
|
||||||
|
|
||||||
# Dark translucent track behind the fill, slightly larger for a border look.
|
var sc := Curve.new()
|
||||||
var track_mat := StandardMaterial3D.new()
|
sc.add_point(Vector2(0.0, 0.30))
|
||||||
track_mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
sc.add_point(Vector2(0.3, 1.00))
|
||||||
track_mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
|
sc.add_point(Vector2(1.0, 0.00))
|
||||||
track_mat.albedo_color = Color(0.02, 0.02, 0.04, 0.55)
|
|
||||||
var track_box := BoxMesh.new()
|
|
||||||
track_box.size = Vector3(w + 0.07, thickness + 0.07, thickness + 0.07)
|
|
||||||
track_box.material = track_mat
|
|
||||||
var track := MeshInstance3D.new()
|
|
||||||
track.mesh = track_box
|
|
||||||
track.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
|
||||||
_charge_bar.add_child(track)
|
|
||||||
|
|
||||||
# Glowing fill bar; scaled along X each frame to show progress.
|
_roll_spark_emitter = CPUParticles3D.new()
|
||||||
_charge_bar_fill_mat = StandardMaterial3D.new()
|
_roll_spark_emitter.position = Vector3(0.0, 0.10, 0.0)
|
||||||
_charge_bar_fill_mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
_roll_spark_emitter.emitting = false
|
||||||
_charge_bar_fill_mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
|
_roll_spark_emitter.one_shot = false
|
||||||
_charge_bar_fill_mat.emission_enabled = true
|
_roll_spark_emitter.amount = 46
|
||||||
var fill_box := BoxMesh.new()
|
_roll_spark_emitter.lifetime = 0.45
|
||||||
fill_box.size = Vector3(w, thickness, thickness)
|
_roll_spark_emitter.randomness = 0.7
|
||||||
fill_box.material = _charge_bar_fill_mat
|
_roll_spark_emitter.local_coords = false
|
||||||
_charge_bar_fill = MeshInstance3D.new()
|
_roll_spark_emitter.direction = Vector3(0.0, 1.0, 0.0)
|
||||||
_charge_bar_fill.mesh = fill_box
|
_roll_spark_emitter.spread = 180.0
|
||||||
_charge_bar_fill.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
_roll_spark_emitter.gravity = Vector3(0.0, -6.0, 0.0)
|
||||||
_charge_bar.add_child(_charge_bar_fill)
|
_roll_spark_emitter.initial_velocity_min = 3.0
|
||||||
|
_roll_spark_emitter.initial_velocity_max = 8.0
|
||||||
# Cool → hot colour ramp as the charge fills (matches the spark FX palette).
|
_roll_spark_emitter.scale_amount_min = 0.5
|
||||||
_charge_bar_ramp = Gradient.new()
|
_roll_spark_emitter.scale_amount_max = 1.3
|
||||||
_charge_bar_ramp.offsets = PackedFloat32Array([0.0, 0.6, 1.0])
|
_roll_spark_emitter.mesh = spark
|
||||||
_charge_bar_ramp.colors = PackedColorArray([
|
_roll_spark_emitter.color_ramp = ramp
|
||||||
Color(0.25, 0.65, 1.0),
|
_roll_spark_emitter.scale_amount_curve = sc
|
||||||
Color(1.0, 0.85, 0.2),
|
cube_guy.add_child(_roll_spark_emitter)
|
||||||
Color(1.0, 0.28, 0.05),
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
|
||||||
_update_charge_bar(delta)
|
|
||||||
|
|
||||||
|
|
||||||
func _update_charge_bar(delta: float) -> void:
|
|
||||||
if _charge_bar == null:
|
|
||||||
return
|
|
||||||
_charge_bar_time += delta
|
|
||||||
|
|
||||||
var max_charge := DP.f("thrust_charge_time")
|
|
||||||
var charge := maxf(_thrust_left_charge, _thrust_right_charge)
|
|
||||||
var frac := clampf(charge / max_charge, 0.0, 1.0) if max_charge > 0.0 else 0.0
|
|
||||||
|
|
||||||
# Ease the whole bar in/out so it pops up when charging and fades when done.
|
|
||||||
var target := 1.0 if frac > 0.001 else 0.0
|
|
||||||
_charge_bar_shown = move_toward(_charge_bar_shown, target, delta * 6.0)
|
|
||||||
if _charge_bar_shown <= 0.001:
|
|
||||||
_charge_bar.visible = false
|
|
||||||
return
|
|
||||||
_charge_bar.visible = true
|
|
||||||
|
|
||||||
# Billboard toward the camera on the Y axis, staying upright.
|
|
||||||
var to_cam := camera_pivot.global_position - _charge_bar.global_position
|
|
||||||
_charge_bar.rotation.y = atan2(to_cam.x, to_cam.z)
|
|
||||||
|
|
||||||
# Grow the fill from the left edge.
|
|
||||||
var w := _CHARGE_BAR_WIDTH
|
|
||||||
_charge_bar_fill.scale.x = maxf(frac, 0.0001)
|
|
||||||
_charge_bar_fill.position.x = -0.5 * w + 0.5 * w * frac
|
|
||||||
|
|
||||||
# Colour + glow, with a fast pulse once fully charged.
|
|
||||||
var col := _charge_bar_ramp.sample(frac)
|
|
||||||
var pulse := 1.0 + (0.4 * sin(_charge_bar_time * 16.0) if frac >= 1.0 else 0.0)
|
|
||||||
_charge_bar_fill_mat.albedo_color = Color(col.r, col.g, col.b, 0.95)
|
|
||||||
_charge_bar_fill_mat.emission = col
|
|
||||||
_charge_bar_fill_mat.emission_energy_multiplier = 1.7 * pulse
|
|
||||||
|
|
||||||
# Float above the bull with a gentle bob; a small bounce + rise on the pop-in.
|
|
||||||
var bob := 0.03 * sin(_charge_bar_time * 4.0)
|
|
||||||
_charge_bar.position.y = _CHARGE_BAR_HEIGHT + bob - (1.0 - _charge_bar_shown) * 0.3
|
|
||||||
var appear := _charge_bar_shown * (1.06 - 0.06 * cos(_charge_bar_shown * PI))
|
|
||||||
var full_pop := 1.0 + (0.08 * sin(_charge_bar_time * 16.0) if frac >= 1.0 else 0.0)
|
|
||||||
_charge_bar.scale = Vector3.ONE * appear * full_pop
|
|
||||||
|
|
||||||
|
|
||||||
func _setup_audio() -> void:
|
func _setup_audio() -> void:
|
||||||
@@ -334,7 +236,6 @@ func _set_dust_state(new_state: DustState) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _on_dp_changed(_key: String, _val: Variant) -> void:
|
func _on_dp_changed(_key: String, _val: Variant) -> void:
|
||||||
_roll_damping = DP.f("roll_damping")
|
|
||||||
if _hoof_emitters.is_empty() or _dust_state == DustState.NONE:
|
if _hoof_emitters.is_empty() or _dust_state == DustState.NONE:
|
||||||
return
|
return
|
||||||
var prev := _dust_state
|
var prev := _dust_state
|
||||||
@@ -464,6 +365,7 @@ func _activate_roll() -> void:
|
|||||||
_active_ability = 3
|
_active_ability = 3
|
||||||
_ability_timer = DP.f("roll_duration")
|
_ability_timer = DP.f("roll_duration")
|
||||||
_roll_ramp = 0.0
|
_roll_ramp = 0.0
|
||||||
|
_roll_spin = 0.0
|
||||||
# Curl into the ball along the current heading (or facing when standing still)
|
# Curl into the ball along the current heading (or facing when standing still)
|
||||||
# and launch at the base speed — it ramps up from here the longer you roll.
|
# and launch at the base speed — it ramps up from here the longer you roll.
|
||||||
var flat := Vector3(velocity.x, 0.0, velocity.z)
|
var flat := Vector3(velocity.x, 0.0, velocity.z)
|
||||||
@@ -480,6 +382,9 @@ func _activate_roll() -> void:
|
|||||||
_bull_anim.play(_ANIM_ROLL)
|
_bull_anim.play(_ANIM_ROLL)
|
||||||
_legs.set(&"tail_ragdoll", true) # tail streams out behind
|
_legs.set(&"tail_ragdoll", true) # tail streams out behind
|
||||||
_legs.set(&"charge_pitch_target", DP.f("charge_head_pitch")) # horns down, plowing
|
_legs.set(&"charge_pitch_target", DP.f("charge_head_pitch")) # horns down, plowing
|
||||||
|
_legs.set(&"external_rotation", true) # roll owns the model's full orientation (tumble)
|
||||||
|
if _roll_spark_emitter:
|
||||||
|
_roll_spark_emitter.emitting = true
|
||||||
_spawn_dash_burst()
|
_spawn_dash_burst()
|
||||||
camera_pivot.call(&"trigger_hit", 0.35)
|
camera_pivot.call(&"trigger_hit", 0.35)
|
||||||
if _huff_player:
|
if _huff_player:
|
||||||
@@ -505,7 +410,14 @@ func _tick_roll(delta: float, steer: Vector3) -> void:
|
|||||||
velocity.x = _roll_dir.x * speed
|
velocity.x = _roll_dir.x * speed
|
||||||
velocity.z = _roll_dir.z * speed
|
velocity.z = _roll_dir.z * speed
|
||||||
|
|
||||||
cube_guy.rotation.y = lerp_angle(cube_guy.rotation.y, atan2(_roll_dir.x, _roll_dir.z), delta * 12.0)
|
# Tumble the whole model like a Powerball: face the travel direction (yaw) then
|
||||||
|
# spin forward about the horizontal axis perpendicular to it, angular speed = v/r
|
||||||
|
# so it "rolls" without slipping. Legs yield rotation control while active.
|
||||||
|
var radius := maxf(DP.f("roll_spin_radius"), 0.1)
|
||||||
|
_roll_spin = wrapf(_roll_spin + (speed / radius) * delta, 0.0, TAU)
|
||||||
|
var facing := Basis(Vector3.UP, atan2(_roll_dir.x, _roll_dir.z))
|
||||||
|
var tumble_axis := Vector3.UP.cross(_roll_dir).normalized()
|
||||||
|
cube_guy.basis = (Basis(tumble_axis, _roll_spin) * facing).scaled(_cube_scale)
|
||||||
if _bull_anim and _bull_anim.has_animation(_ANIM_ROLL):
|
if _bull_anim and _bull_anim.has_animation(_ANIM_ROLL):
|
||||||
_bull_anim.speed_scale = clampf(speed / maxf(top, 1.0), 0.6, 2.4)
|
_bull_anim.speed_scale = clampf(speed / maxf(top, 1.0), 0.6, 2.4)
|
||||||
|
|
||||||
@@ -547,6 +459,9 @@ func _end_roll() -> void:
|
|||||||
_roll_ramp = 0.0
|
_roll_ramp = 0.0
|
||||||
_legs.set(&"charge_pitch_target", 0.0)
|
_legs.set(&"charge_pitch_target", 0.0)
|
||||||
_legs.set(&"tail_ragdoll", false)
|
_legs.set(&"tail_ragdoll", false)
|
||||||
|
_legs.set(&"external_rotation", false)
|
||||||
|
if _roll_spark_emitter:
|
||||||
|
_roll_spark_emitter.emitting = false
|
||||||
velocity.x *= 0.15
|
velocity.x *= 0.15
|
||||||
velocity.z *= 0.15
|
velocity.z *= 0.15
|
||||||
_play_idle()
|
_play_idle()
|
||||||
@@ -889,36 +804,6 @@ func _make_slam_ring_mesh() -> ArrayMesh:
|
|||||||
return mesh
|
return mesh
|
||||||
|
|
||||||
|
|
||||||
func _apply_thrust(dir: Vector3) -> void:
|
|
||||||
var impulse := DP.f("thrust_impulse")
|
|
||||||
velocity.x += dir.x * impulse
|
|
||||||
velocity.z += dir.z * impulse
|
|
||||||
if is_on_floor():
|
|
||||||
velocity.y += DP.f("thrust_vertical")
|
|
||||||
var flat := Vector2(velocity.x, velocity.z)
|
|
||||||
var spd := flat.length()
|
|
||||||
if spd > DP.f("max_speed"):
|
|
||||||
var s := DP.f("max_speed") / spd
|
|
||||||
velocity.x *= s
|
|
||||||
velocity.z *= s
|
|
||||||
|
|
||||||
|
|
||||||
func _apply_kick(direction: Vector3) -> void:
|
|
||||||
var force := DP.f("kick_impulse") * randf_range(1.0 - DP.f("kick_force_var"), 1.0 + DP.f("kick_force_var"))
|
|
||||||
var spread := deg_to_rad(randf_range(-DP.f("kick_spread"), DP.f("kick_spread")))
|
|
||||||
var kick_dir := direction.rotated(Vector3.UP, spread)
|
|
||||||
velocity.x += kick_dir.x * force
|
|
||||||
velocity.z += kick_dir.z * force
|
|
||||||
if is_on_floor():
|
|
||||||
velocity.y += DP.f("kick_vertical") * randf_range(0.75, 1.25)
|
|
||||||
var flat := Vector2(velocity.x, velocity.z)
|
|
||||||
var spd := flat.length()
|
|
||||||
if spd > DP.f("max_speed"):
|
|
||||||
var s := DP.f("max_speed") / spd
|
|
||||||
velocity.x *= s
|
|
||||||
velocity.z *= s
|
|
||||||
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
# ── Gravity ───────────────────────────────────────────────────────────────
|
# ── Gravity ───────────────────────────────────────────────────────────────
|
||||||
if not is_on_floor():
|
if not is_on_floor():
|
||||||
@@ -944,6 +829,9 @@ func _physics_process(delta: float) -> void:
|
|||||||
if _ability_active:
|
if _ability_active:
|
||||||
_ability_timer -= delta
|
_ability_timer -= delta
|
||||||
if _ability_timer <= 0.0:
|
if _ability_timer <= 0.0:
|
||||||
|
if _active_ability == 3:
|
||||||
|
_end_roll() # tears down roll-specific state (sparks, tumble control)
|
||||||
|
else:
|
||||||
_ability_active = false
|
_ability_active = false
|
||||||
_active_ability = -1
|
_active_ability = -1
|
||||||
_legs.set(&"charge_pitch_target", 0.0)
|
_legs.set(&"charge_pitch_target", 0.0)
|
||||||
@@ -958,56 +846,23 @@ func _physics_process(delta: float) -> void:
|
|||||||
_tick_roll(delta, direction)
|
_tick_roll(delta, direction)
|
||||||
return
|
return
|
||||||
|
|
||||||
# ── Mouse button single-thrust actions ───────────────────────────────────────
|
|
||||||
# Left only → thrust NE (forward-right diagonal)
|
|
||||||
# Right only → thrust NW (forward-left diagonal)
|
|
||||||
var left_held := Input.is_action_pressed(&"thrust_left")
|
|
||||||
var right_held := Input.is_action_pressed(&"thrust_right")
|
|
||||||
|
|
||||||
if left_held and right_held:
|
|
||||||
_thrust_left_charge = 0.0
|
|
||||||
_thrust_right_charge = 0.0
|
|
||||||
else:
|
|
||||||
if left_held:
|
|
||||||
_thrust_left_charge = minf(_thrust_left_charge + delta, DP.f("thrust_charge_time"))
|
|
||||||
elif Input.is_action_just_released(&"thrust_left") and _thrust_left_charge > 0.0:
|
|
||||||
var t := _thrust_left_charge / DP.f("thrust_charge_time")
|
|
||||||
var angle := lerpf(deg_to_rad(DP.f("thrust_min_angle")), deg_to_rad(DP.f("thrust_max_angle")), t)
|
|
||||||
var raw := cube_guy.global_transform.basis.z
|
|
||||||
_apply_thrust(Vector3(raw.x, 0.0, raw.z).normalized().rotated(Vector3.UP, -angle))
|
|
||||||
_thrust_left_charge = 0.0
|
|
||||||
|
|
||||||
if right_held:
|
|
||||||
_thrust_right_charge = minf(_thrust_right_charge + delta, DP.f("thrust_charge_time"))
|
|
||||||
elif Input.is_action_just_released(&"thrust_right") and _thrust_right_charge > 0.0:
|
|
||||||
var t := _thrust_right_charge / DP.f("thrust_charge_time")
|
|
||||||
var angle := lerpf(deg_to_rad(DP.f("thrust_min_angle")), deg_to_rad(DP.f("thrust_max_angle")), t)
|
|
||||||
var raw := cube_guy.global_transform.basis.z
|
|
||||||
_apply_thrust(Vector3(raw.x, 0.0, raw.z).normalized().rotated(Vector3.UP, angle))
|
|
||||||
_thrust_right_charge = 0.0
|
|
||||||
|
|
||||||
# Fire spark burst the frame either single-button charge first hits max
|
|
||||||
var max_charge := DP.f("thrust_charge_time")
|
|
||||||
var either_full := _thrust_left_charge >= max_charge or _thrust_right_charge >= max_charge
|
|
||||||
if either_full and not _charge_was_full:
|
|
||||||
_charge_ready_emitter.restart()
|
|
||||||
_charge_was_full = either_full
|
|
||||||
|
|
||||||
# Reset kick timer on landing so the first kick after a bounce is immediate
|
|
||||||
if on_floor and not _was_on_floor and direction:
|
|
||||||
_kick_timer = 0.0
|
|
||||||
_was_on_floor = on_floor
|
_was_on_floor = on_floor
|
||||||
|
|
||||||
# ── Periodic kick ─────────────────────────────────────────────────────────
|
# ── Ground locomotion — smooth accelerate / friction ──────────────────────
|
||||||
_kick_timer = maxf(0.0, _kick_timer - delta)
|
# WASD/arrows drive the bull directly: hold a direction to ramp up to max_speed
|
||||||
if direction and _kick_timer <= 0.0:
|
# and steer, release to coast to a stop. Ability bursts (dash) and wall bounces
|
||||||
_apply_kick(direction)
|
# can exceed max_speed — while a direction is held we steer that momentum without
|
||||||
_kick_timer = DP.f("kick_interval")
|
# braking it (cap tracks the current speed); friction only bleeds the excess once
|
||||||
|
# input is released.
|
||||||
# ── Rolling friction (exponential, frame-rate independent) ────────────────
|
var flat_vel := Vector3(velocity.x, 0.0, velocity.z)
|
||||||
var retain := pow(_roll_damping, delta)
|
var max_speed := DP.f("max_speed")
|
||||||
velocity.x *= retain
|
if direction.length_squared() > 0.01:
|
||||||
velocity.z *= retain
|
var cap := maxf(max_speed, flat_vel.length())
|
||||||
|
flat_vel = flat_vel.move_toward(direction * cap, DP.f("move_accel") * delta)
|
||||||
|
else:
|
||||||
|
flat_vel = flat_vel.move_toward(Vector3.ZERO, DP.f("move_friction") * delta)
|
||||||
|
velocity.x = flat_vel.x
|
||||||
|
velocity.z = flat_vel.z
|
||||||
|
|
||||||
# ── Visual rotation follows velocity direction ─────────────────────────────
|
# ── Visual rotation follows velocity direction ─────────────────────────────
|
||||||
var flat_speed := Vector2(velocity.x, velocity.z).length()
|
var flat_speed := Vector2(velocity.x, velocity.z).length()
|
||||||
|
|||||||
@@ -77,18 +77,6 @@ toggle_mouse_capture={
|
|||||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":4,"position":Vector2(461, 22),"global_position":Vector2(470, 70),"factor":1.0,"button_index":3,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":4,"position":Vector2(461, 22),"global_position":Vector2(470, 70),"factor":1.0,"button_index":3,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
thrust_left={
|
|
||||||
"deadzone": 0.2,
|
|
||||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
|
||||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null)
|
|
||||||
]
|
|
||||||
}
|
|
||||||
thrust_right={
|
|
||||||
"deadzone": 0.2,
|
|
||||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
|
||||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null)
|
|
||||||
]
|
|
||||||
}
|
|
||||||
ability_kick={
|
ability_kick={
|
||||||
"deadzone": 0.2,
|
"deadzone": 0.2,
|
||||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"location":0,"echo":false,"script":null)
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"location":0,"echo":false,"script":null)
|
||||||
|
|||||||