Compare commits
24 Commits
a835ae5755
..
exp
| Author | SHA1 | Date | |
|---|---|---|---|
| 221727289d | |||
| 1baf3e047b | |||
| 849b0b7315 | |||
| 1c70488ea5 | |||
| 480d355926 | |||
| 229a2cca60 | |||
| b0ef832c64 | |||
| f28f21d5b4 | |||
| 69babae913 | |||
| e3261f8e78 | |||
| 794261e0d0 | |||
| 187fe7a9ce | |||
| c201a67bb8 | |||
| 7475339ddb | |||
| dd60de0a66 | |||
| 912bffd59a | |||
| a2e710575e | |||
| 31cab204ad | |||
| 3a3edc54a4 | |||
| 05f46021b8 | |||
| 5f589c8c89 | |||
| c8aba822bf | |||
| 23177b9079 | |||
| 86b837dded |
Binary file not shown.
|
After Width: | Height: | Size: 484 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://un6qkfobvo2o"
|
||||
path="res://.godot/imported/Pause_Controls.jpeg-7b152fd8be8bb847576ebbef7cd65320.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Pause_Controls.jpeg"
|
||||
dest_files=["res://.godot/imported/Pause_Controls.jpeg-7b152fd8be8bb847576ebbef7cd65320.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 372 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cavydxru3563h"
|
||||
path="res://.godot/imported/Pause_Craft.jpeg-62e6f52659e81a185c138647d52f9aef.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Pause_Craft.jpeg"
|
||||
dest_files=["res://.godot/imported/Pause_Craft.jpeg-62e6f52659e81a185c138647d52f9aef.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
|
||||
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://baeea1yfs0cnn"
|
||||
path="res://.godot/imported/Tutorial_shield.jpeg-d9b563c9ca34dc1a19e82a0ec964c1b9.ctex"
|
||||
path="res://.godot/imported/Tutorial_Shield.jpeg-6b96e6b9716aced42153397e827ce868.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Tutorial_shield.jpeg"
|
||||
dest_files=["res://.godot/imported/Tutorial_shield.jpeg-d9b563c9ca34dc1a19e82a0ec964c1b9.ctex"]
|
||||
source_file="res://assets/Tutorial_Shield.jpeg"
|
||||
dest_files=["res://.godot/imported/Tutorial_Shield.jpeg-6b96e6b9716aced42153397e827ce868.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://boyy2vpjoxb6l"
|
||||
path="res://.godot/imported/ambient.ogg-35a37efc4b30706a227e17f0453e3a99.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/ambient.ogg"
|
||||
dest_files=["res://.godot/imported/ambient.ogg-35a37efc4b30706a227e17f0453e3a99.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
+20857
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,25 @@
|
||||
[remap]
|
||||
|
||||
importer="wavefront_obj"
|
||||
importer_version=1
|
||||
type="Mesh"
|
||||
uid="uid://caurrbclp30ly"
|
||||
path="res://.godot/imported/armor.obj-af01c4b492188328bde6fd5b9ed2eed0.mesh"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://.godot/imported/armor.obj-af01c4b492188328bde6fd5b9ed2eed0.mesh"]
|
||||
|
||||
source_file="res://assets/armor.obj"
|
||||
dest_files=["res://.godot/imported/armor.obj-af01c4b492188328bde6fd5b9ed2eed0.mesh", "res://.godot/imported/armor.obj-af01c4b492188328bde6fd5b9ed2eed0.mesh"]
|
||||
|
||||
[params]
|
||||
|
||||
generate_tangents=true
|
||||
generate_lods=true
|
||||
generate_shadow_mesh=true
|
||||
generate_lightmap_uv2=false
|
||||
generate_lightmap_uv2_texel_size=0.2
|
||||
scale_mesh=Vector3(1, 1, 1)
|
||||
offset_mesh=Vector3(0, 0, 0)
|
||||
force_disable_mesh_compression=false
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://w5fnj0g3j6ms"
|
||||
path="res://.godot/imported/armor.png-7969b140c50e154aedeaeb60a071ac9b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/armor.png"
|
||||
dest_files=["res://.godot/imported/armor.png-7969b140c50e154aedeaeb60a071ac9b.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
|
||||
+18661
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,25 @@
|
||||
[remap]
|
||||
|
||||
importer="wavefront_obj"
|
||||
importer_version=1
|
||||
type="Mesh"
|
||||
uid="uid://jls6i8ov73ld"
|
||||
path="res://.godot/imported/boot.obj-e334fc0955e7dcb45c6e02ac806a59e8.mesh"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://.godot/imported/boot.obj-e334fc0955e7dcb45c6e02ac806a59e8.mesh"]
|
||||
|
||||
source_file="res://assets/boot.obj"
|
||||
dest_files=["res://.godot/imported/boot.obj-e334fc0955e7dcb45c6e02ac806a59e8.mesh", "res://.godot/imported/boot.obj-e334fc0955e7dcb45c6e02ac806a59e8.mesh"]
|
||||
|
||||
[params]
|
||||
|
||||
generate_tangents=true
|
||||
generate_lods=true
|
||||
generate_shadow_mesh=true
|
||||
generate_lightmap_uv2=false
|
||||
generate_lightmap_uv2_texel_size=0.2
|
||||
scale_mesh=Vector3(1, 1, 1)
|
||||
offset_mesh=Vector3(0, 0, 0)
|
||||
force_disable_mesh_compression=false
|
||||
@@ -3,19 +3,20 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ce4g8nblils0e"
|
||||
path="res://.godot/imported/boot2.png-a3406216bcaf3ad03e199064a129c36e.ctex"
|
||||
path.s3tc="res://.godot/imported/boot2.png-a3406216bcaf3ad03e199064a129c36e.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/boot2.png"
|
||||
dest_files=["res://.godot/imported/boot2.png-a3406216bcaf3ad03e199064a129c36e.ctex"]
|
||||
dest_files=["res://.godot/imported/boot2.png-a3406216bcaf3ad03e199064a129c36e.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
@@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
@@ -37,4 +38,4 @@ 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
|
||||
detect_3d/compress_to=0
|
||||
|
||||
@@ -3,19 +3,20 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bqpntq4rf2q7s"
|
||||
path="res://.godot/imported/boot3.png-d7aa5373b9b2c6ad231646d4daea89b4.ctex"
|
||||
path.s3tc="res://.godot/imported/boot3.png-d7aa5373b9b2c6ad231646d4daea89b4.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/boot3.png"
|
||||
dest_files=["res://.godot/imported/boot3.png-d7aa5373b9b2c6ad231646d4daea89b4.ctex"]
|
||||
dest_files=["res://.godot/imported/boot3.png-d7aa5373b9b2c6ad231646d4daea89b4.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
@@ -23,7 +24,7 @@ compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
@@ -37,4 +38,4 @@ 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
|
||||
detect_3d/compress_to=0
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,42 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://82lpmyibj8tp"
|
||||
path="res://.godot/imported/boot_walk.glb-d86cd37ca982d86b2ebd647af9a26482.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/boot_walk.glb"
|
||||
dest_files=["res://.godot/imported/boot_walk.glb-d86cd37ca982d86b2ebd647af9a26482.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://c743vb62pekwt"
|
||||
path="res://.godot/imported/damage.ogg-137ecbb71d5ea483a0892197341e95d9.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/damage.ogg"
|
||||
dest_files=["res://.godot/imported/damage.ogg-137ecbb71d5ea483a0892197341e95d9.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
Binary file not shown.
@@ -0,0 +1,42 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cqtr8862yg1pw"
|
||||
path="res://.godot/imported/gnome2.glb-ed506cf1ac0ccb2d264457e28d22df82.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gnome2.glb"
|
||||
dest_files=["res://.godot/imported/gnome2.glb-ed506cf1ac0ccb2d264457e28d22df82.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
Binary file not shown.
@@ -0,0 +1,42 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://d38xq7m2ov1ig"
|
||||
path="res://.godot/imported/gnome3.glb-60a565f65ec090ccf38c4f1b4928e113.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gnome3.glb"
|
||||
dest_files=["res://.godot/imported/gnome3.glb-60a565f65ec090ccf38c4f1b4928e113.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://d0ygls7mtp1q1"
|
||||
path="res://.godot/imported/growling-cartoon-animal-in-the-game.ogg-f3dde05a2449a5cb1bbbeaf8a5c195ca.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/growling-cartoon-animal-in-the-game.ogg"
|
||||
dest_files=["res://.godot/imported/growling-cartoon-animal-in-the-game.ogg-f3dde05a2449a5cb1bbbeaf8a5c195ca.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://bqj5f858tqy5w"
|
||||
path="res://.godot/imported/kick_enemy.ogg-47fb08fccd1ea50bf15fb26d6abda71e.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/kick_enemy.ogg"
|
||||
dest_files=["res://.godot/imported/kick_enemy.ogg-47fb08fccd1ea50bf15fb26d6abda71e.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://cq4hup0lwti13"
|
||||
path="res://.godot/imported/kick_player.ogg-ed43ff774ec5730f331b64274b81fa27.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/kick_player.ogg"
|
||||
dest_files=["res://.godot/imported/kick_player.ogg-ed43ff774ec5730f331b64274b81fa27.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=true
|
||||
loop_offset=12.0
|
||||
bpm=0.0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://djmceowwiaxh"
|
||||
path="res://.godot/imported/merge.ogg-23e958ec7fe7428616d58e4721608c5d.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/merge.ogg"
|
||||
dest_files=["res://.godot/imported/merge.ogg-23e958ec7fe7428616d58e4721608c5d.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
@@ -0,0 +1,206 @@
|
||||
# Blender 4.2.9 LTS
|
||||
# www.blender.org
|
||||
o metal_item
|
||||
v -0.000455 0.025430 0.375746
|
||||
v -0.019059 0.025407 0.394395
|
||||
v -0.011318 0.009290 0.383589
|
||||
v -0.075059 0.208979 0.300395
|
||||
v -0.099042 0.225119 0.294986
|
||||
v -0.093682 0.209002 0.319026
|
||||
v -0.361011 0.009290 0.383589
|
||||
v -0.353269 0.025407 0.394395
|
||||
v -0.371873 0.025430 0.375746
|
||||
v -0.297269 0.208979 0.300395
|
||||
v -0.278646 0.209002 0.319026
|
||||
v -0.273286 0.225119 0.294986
|
||||
v -0.000455 0.025430 -0.378701
|
||||
v -0.011318 0.009290 -0.386544
|
||||
v -0.019059 0.025407 -0.397351
|
||||
v -0.075059 0.208979 -0.303350
|
||||
v -0.093682 0.209002 -0.321981
|
||||
v -0.099042 0.225119 -0.297942
|
||||
v -0.361011 0.009290 -0.386544
|
||||
v -0.371873 0.025430 -0.378701
|
||||
v -0.353269 0.025407 -0.397350
|
||||
v -0.297269 0.208979 -0.303350
|
||||
v -0.273286 0.225119 -0.297942
|
||||
v -0.278646 0.209002 -0.321981
|
||||
v 0.374544 0.025430 0.375746
|
||||
v 0.355940 0.025407 0.394395
|
||||
v 0.363682 0.009290 0.383589
|
||||
v 0.299940 0.208979 0.300395
|
||||
v 0.275957 0.225119 0.294986
|
||||
v 0.281317 0.209002 0.319026
|
||||
v 0.013989 0.009290 0.383589
|
||||
v 0.021730 0.025407 0.394395
|
||||
v 0.003126 0.025430 0.375746
|
||||
v 0.077730 0.208979 0.300395
|
||||
v 0.096353 0.209002 0.319026
|
||||
v 0.101713 0.225119 0.294986
|
||||
v 0.374544 0.025430 -0.378701
|
||||
v 0.363682 0.009290 -0.386544
|
||||
v 0.355940 0.025407 -0.397351
|
||||
v 0.299940 0.208979 -0.303350
|
||||
v 0.281317 0.209002 -0.321981
|
||||
v 0.275957 0.225119 -0.297942
|
||||
v 0.013989 0.009290 -0.386544
|
||||
v 0.003126 0.025430 -0.378701
|
||||
v 0.021730 0.025407 -0.397350
|
||||
v 0.077730 0.208979 -0.303350
|
||||
v 0.101713 0.225119 -0.297942
|
||||
v 0.096353 0.209002 -0.321981
|
||||
v 0.182543 0.234038 0.301050
|
||||
v 0.163938 0.234015 0.316007
|
||||
v 0.171680 0.217897 0.307340
|
||||
v 0.107939 0.417586 0.240620
|
||||
v 0.083956 0.433727 0.236282
|
||||
v 0.089316 0.417609 0.255561
|
||||
v -0.178013 0.217897 0.307340
|
||||
v -0.170271 0.234015 0.316007
|
||||
v -0.188875 0.234038 0.301050
|
||||
v -0.114271 0.417586 0.240620
|
||||
v -0.095648 0.417609 0.255561
|
||||
v -0.090288 0.433727 0.236282
|
||||
v 0.182543 0.234038 -0.304005
|
||||
v 0.171680 0.217897 -0.310296
|
||||
v 0.163938 0.234015 -0.318962
|
||||
v 0.107939 0.417586 -0.243575
|
||||
v 0.089316 0.417609 -0.258517
|
||||
v 0.083956 0.433727 -0.239238
|
||||
v -0.178013 0.217897 -0.310296
|
||||
v -0.188875 0.234038 -0.304005
|
||||
v -0.170271 0.234015 -0.318962
|
||||
v -0.114271 0.417586 -0.243575
|
||||
v -0.090288 0.433727 -0.239238
|
||||
v -0.095648 0.417609 -0.258517
|
||||
vn -0.0000 -1.0000 -0.0001
|
||||
vn 0.0001 -1.0000 -0.0000
|
||||
vn -0.0000 -1.0000 0.0001
|
||||
vn -0.0001 -1.0000 -0.0000
|
||||
vn -0.0000 1.0000 -0.0000
|
||||
vn -0.0000 1.0000 0.0001
|
||||
vn -0.0000 1.0000 -0.0001
|
||||
vn -0.0000 0.3798 -0.9251
|
||||
vn -0.0000 0.3797 -0.9251
|
||||
vn -0.0000 0.3798 0.9251
|
||||
vn -0.0000 0.3797 0.9251
|
||||
vn -0.9264 0.3766 -0.0000
|
||||
vn -0.9264 0.3765 -0.0000
|
||||
vn 0.9390 0.0074 0.3439
|
||||
vn 0.7239 0.6390 0.2600
|
||||
vn 0.9390 0.0074 -0.3439
|
||||
vn 0.7239 0.6390 -0.2600
|
||||
vn -0.9390 0.0074 0.3439
|
||||
vn -0.7239 0.6390 0.2600
|
||||
vn -0.7239 0.6390 -0.2600
|
||||
vn -0.9390 0.0074 -0.3439
|
||||
vn 0.9264 0.3766 -0.0000
|
||||
vn -0.0000 -1.0000 -0.0000
|
||||
vn -0.0000 0.3127 -0.9499
|
||||
vn -0.0000 0.3128 -0.9498
|
||||
vn -0.0000 0.3127 0.9499
|
||||
vn -0.0000 0.3128 0.9498
|
||||
vn -0.9264 0.3765 0.0001
|
||||
vn -0.9264 0.3766 -0.0001
|
||||
vn 0.9264 0.3765 -0.0000
|
||||
vt 0.734770 0.428017
|
||||
vt 0.734335 0.435070
|
||||
vt 0.734335 0.435070
|
||||
vt 0.726011 0.434850
|
||||
vt 0.726420 0.428380
|
||||
vt 0.726420 0.428380
|
||||
vt 0.726011 0.434850
|
||||
vt 0.733716 0.435018
|
||||
vt 0.726630 0.434915
|
||||
vt 0.727047 0.428304
|
||||
vt 0.734145 0.428079
|
||||
vt 0.733716 0.435018
|
||||
vt 0.734144 0.428079
|
||||
vt 0.726630 0.434915
|
||||
vt 0.733690 0.435427
|
||||
vt 0.726594 0.435491
|
||||
vt 0.726594 0.435491
|
||||
vt 0.733690 0.435427
|
||||
vt 0.734169 0.427670
|
||||
vt 0.727084 0.427728
|
||||
vt 0.734169 0.427670
|
||||
vt 0.727084 0.427728
|
||||
s 1
|
||||
f 3/1/1 7/2/2 19/3/3 14/1/4
|
||||
f 12/4/5 5/5/6 18/6/5 23/7/7
|
||||
f 21/8/8 24/9/8 17/10/9 15/11/8
|
||||
f 8/12/10 2/13/10 6/10/10 11/14/11
|
||||
f 9/15/12 10/16/13 22/17/13 20/18/12
|
||||
f 1/19/14 2/13/10 3/1/1
|
||||
f 4/20/15 5/5/6 6/10/10
|
||||
f 7/2/2 8/12/10 9/15/12
|
||||
f 10/16/13 11/14/11 12/4/5
|
||||
f 13/21/16 14/1/4 15/11/8
|
||||
f 16/22/17 17/10/9 18/6/5
|
||||
f 19/3/3 20/18/12 21/8/8
|
||||
f 22/17/13 23/7/7 24/9/8
|
||||
f 1/19/14 4/20/15 6/10/10 2/13/10
|
||||
f 7/2/2 3/1/1 2/13/10 8/12/10
|
||||
f 10/16/13 9/15/12 8/12/10 11/14/11
|
||||
f 11/14/11 6/10/10 5/5/6 12/4/5
|
||||
f 15/11/8 17/10/9 16/22/17 13/21/16
|
||||
f 21/8/8 15/11/8 14/1/4 19/3/3
|
||||
f 24/9/8 21/8/8 20/18/12 22/17/13
|
||||
f 23/7/7 18/6/5 17/10/9 24/9/8
|
||||
f 9/15/12 20/18/12 19/3/3 7/2/2
|
||||
f 13/21/16 1/19/14 3/1/1 14/1/4
|
||||
f 12/4/5 23/7/7 22/17/13 10/16/13
|
||||
f 18/6/5 5/5/6 4/20/15 16/22/17
|
||||
f 4/20/15 1/19/14 13/21/16 16/22/17
|
||||
f 27/1/1 31/2/2 43/3/3 38/1/4
|
||||
f 36/4/5 29/5/6 42/6/5 47/7/7
|
||||
f 45/8/8 48/9/8 41/10/9 39/11/8
|
||||
f 32/12/10 26/13/10 30/10/10 35/14/11
|
||||
f 33/15/18 34/16/19 46/17/20 44/18/21
|
||||
f 25/19/22 26/13/10 27/1/1
|
||||
f 28/20/22 29/5/6 30/10/10
|
||||
f 31/2/2 32/12/10 33/15/18
|
||||
f 34/16/19 35/14/11 36/4/5
|
||||
f 37/21/22 38/1/4 39/11/8
|
||||
f 40/22/22 41/10/9 42/6/5
|
||||
f 43/3/3 44/18/21 45/8/8
|
||||
f 46/17/20 47/7/7 48/9/8
|
||||
f 25/19/22 28/20/22 30/10/10 26/13/10
|
||||
f 31/2/2 27/1/1 26/13/10 32/12/10
|
||||
f 34/16/19 33/15/18 32/12/10 35/14/11
|
||||
f 35/14/11 30/10/10 29/5/6 36/4/5
|
||||
f 39/11/8 41/10/9 40/22/22 37/21/22
|
||||
f 45/8/8 39/11/8 38/1/4 43/3/3
|
||||
f 48/9/8 45/8/8 44/18/21 46/17/20
|
||||
f 47/7/7 42/6/5 41/10/9 48/9/8
|
||||
f 33/15/18 44/18/21 43/3/3 31/2/2
|
||||
f 37/21/22 25/19/22 27/1/1 38/1/4
|
||||
f 36/4/5 47/7/7 46/17/20 34/16/19
|
||||
f 42/6/5 29/5/6 28/20/22 40/22/22
|
||||
f 28/20/22 25/19/22 37/21/22 40/22/22
|
||||
f 51/1/23 55/2/2 67/3/23 62/1/4
|
||||
f 60/4/5 53/5/6 66/6/5 71/7/7
|
||||
f 69/8/24 72/9/25 65/10/25 63/11/24
|
||||
f 56/12/26 50/13/26 54/10/27 59/14/27
|
||||
f 57/15/13 58/16/28 70/17/12 68/18/29
|
||||
f 49/19/30 50/13/26 51/1/23
|
||||
f 52/20/22 53/5/6 54/10/27
|
||||
f 55/2/2 56/12/26 57/15/13
|
||||
f 58/16/28 59/14/27 60/4/5
|
||||
f 61/21/22 62/1/4 63/11/24
|
||||
f 64/22/22 65/10/25 66/6/5
|
||||
f 67/3/23 68/18/29 69/8/24
|
||||
f 70/17/12 71/7/7 72/9/25
|
||||
f 49/19/30 52/20/22 54/10/27 50/13/26
|
||||
f 55/2/2 51/1/23 50/13/26 56/12/26
|
||||
f 58/16/28 57/15/13 56/12/26 59/14/27
|
||||
f 59/14/27 54/10/27 53/5/6 60/4/5
|
||||
f 63/11/24 65/10/25 64/22/22 61/21/22
|
||||
f 69/8/24 63/11/24 62/1/4 67/3/23
|
||||
f 72/9/25 69/8/24 68/18/29 70/17/12
|
||||
f 71/7/7 66/6/5 65/10/25 72/9/25
|
||||
f 57/15/13 68/18/29 67/3/23 55/2/2
|
||||
f 61/21/22 49/19/30 51/1/23 62/1/4
|
||||
f 60/4/5 71/7/7 70/17/12 58/16/28
|
||||
f 66/6/5 53/5/6 52/20/22 64/22/22
|
||||
f 52/20/22 49/19/30 61/21/22 64/22/22
|
||||
@@ -0,0 +1,25 @@
|
||||
[remap]
|
||||
|
||||
importer="wavefront_obj"
|
||||
importer_version=1
|
||||
type="Mesh"
|
||||
uid="uid://2r4vjjli71xm"
|
||||
path="res://.godot/imported/metal_item.obj-a4cb4f3f6e92689b191537ec00614f65.mesh"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://.godot/imported/metal_item.obj-a4cb4f3f6e92689b191537ec00614f65.mesh"]
|
||||
|
||||
source_file="res://assets/metal_item.obj"
|
||||
dest_files=["res://.godot/imported/metal_item.obj-a4cb4f3f6e92689b191537ec00614f65.mesh", "res://.godot/imported/metal_item.obj-a4cb4f3f6e92689b191537ec00614f65.mesh"]
|
||||
|
||||
[params]
|
||||
|
||||
generate_tangents=true
|
||||
generate_lods=true
|
||||
generate_shadow_mesh=true
|
||||
generate_lightmap_uv2=false
|
||||
generate_lightmap_uv2_texel_size=0.2
|
||||
scale_mesh=Vector3(1, 1, 1)
|
||||
offset_mesh=Vector3(0, 0, 0)
|
||||
force_disable_mesh_compression=false
|
||||
Binary file not shown.
@@ -0,0 +1,42 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cx7dvk0afwj6h"
|
||||
path="res://.godot/imported/player_man_walk.glb-3657f9b02230b13d6d797514cd5d2eb0.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/player_man_walk.glb"
|
||||
dest_files=["res://.godot/imported/player_man_walk.glb-3657f9b02230b13d6d797514cd5d2eb0.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.9 MiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://baavv8uqo25la"
|
||||
path="res://.godot/imported/studio_logo.png-f3d319855b8a77cbfc974454f8f0d5d5.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/studio_logo.png"
|
||||
dest_files=["res://.godot/imported/studio_logo.png-f3d319855b8a77cbfc974454f8f0d5d5.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
|
||||
+1
-1
@@ -8,7 +8,7 @@ custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter="*jpeg"
|
||||
exclude_filter=""
|
||||
export_path="../Kick/KickSurvivors.exe"
|
||||
export_path="../Kick/CraftKick.exe"
|
||||
patches=PackedStringArray()
|
||||
patch_delta_encoding=false
|
||||
patch_delta_compression_level_zstd=19
|
||||
|
||||
+12
-15
@@ -1,29 +1,26 @@
|
||||
[gd_scene format=3 uid="uid://cayybawvw26cm"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/EnchantedSphere.gd" id="1_sphere"]
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_1"]
|
||||
radius = 0.28
|
||||
height = 0.56
|
||||
[ext_resource type="Script" uid="uid://c4d11cs4fcqib" path="res://scripts/EnchantedSphere.gd" id="1_sphere"]
|
||||
[ext_resource type="Texture2D" uid="uid://bqpntq4rf2q7s" path="res://assets/boot3.png" id="2_gp14g"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://jls6i8ov73ld" path="res://assets/boot.obj" id="3_d6vog"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1"]
|
||||
albedo_color = Color(0.8, 0.3, 1.0, 1)
|
||||
albedo_texture = ExtResource("2_gp14g")
|
||||
emission_enabled = true
|
||||
emission = Color(0.6, 0.1, 1.0, 1)
|
||||
emission = Color(0.6, 0.1, 1, 1)
|
||||
emission_energy_multiplier = 3.0
|
||||
|
||||
[node name="EnchantedSphere" type="Node3D"]
|
||||
[node name="EnchantedSphere" type="Node3D" unique_id=879211768]
|
||||
script = ExtResource("1_sphere")
|
||||
|
||||
[node name="SphereMesh" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("SphereMesh_1")
|
||||
[node name="SphereMesh" type="MeshInstance3D" parent="." unique_id=905498826]
|
||||
material_override = SubResource("StandardMaterial3D_1")
|
||||
mesh = ExtResource("3_d6vog")
|
||||
|
||||
[node name="Tooltip" type="Label3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1, 0)
|
||||
[node name="Tooltip" type="Label3D" parent="." unique_id=947504755]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.3280884, 0)
|
||||
billboard = 1
|
||||
double_sided = true
|
||||
text = "[E] Enchanted Sphere
|
||||
text = "[E] Enchanted Boots
|
||||
+1 Tier"
|
||||
font_size = 32
|
||||
font_size = 56
|
||||
outline_size = 6
|
||||
|
||||
+183
-21
File diff suppressed because one or more lines are too long
+3
-5
@@ -1,6 +1,7 @@
|
||||
[gd_scene format=3 uid="uid://g7iron5etp8u"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://0wdmbocpe2ir" path="res://scripts/Iron.gd" id="1_iron"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://2r4vjjli71xm" path="res://assets/metal_item.obj" id="2_53umh"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1"]
|
||||
albedo_color = Color(0.55, 0.58, 0.62, 1)
|
||||
@@ -8,9 +9,6 @@ metallic = 0.7
|
||||
metallic_specular = 0.8
|
||||
roughness = 0.4
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_1"]
|
||||
size = Vector3(0.38, 0.22, 0.5)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_1"]
|
||||
size = Vector3(1.3992603, 0.58835024, 0.49035645)
|
||||
|
||||
@@ -18,9 +16,9 @@ size = Vector3(1.3992603, 0.58835024, 0.49035645)
|
||||
script = ExtResource("1_iron")
|
||||
|
||||
[node name="IronMesh" type="MeshInstance3D" parent="." unique_id=1832879739]
|
||||
transform = Transform3D(3.5611715, 0, 0, 0, 2.7614622, 0, 0, 0, 1, 0, 0.2, 0)
|
||||
transform = Transform3D(1.8825685, 0, 0, 0, 1.0460571, 0, 0, 0, 0.64741147, 0, -0.0042432398, 0)
|
||||
material_override = SubResource("StandardMaterial3D_1")
|
||||
mesh = SubResource("BoxMesh_1")
|
||||
mesh = ExtResource("2_53umh")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=665808333]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00068727136, 0.22091705, -0.0048217773)
|
||||
|
||||
@@ -1,26 +1,24 @@
|
||||
[gd_scene format=3 uid="uid://bidrinpjiyb2x"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/LeatherArmor.gd" id="1_leatha"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_1"]
|
||||
size = Vector3(0.5, 0.6, 0.22)
|
||||
[ext_resource type="Script" uid="uid://b80k2b1icwlbm" path="res://scripts/LeatherArmor.gd" id="1_leatha"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://caurrbclp30ly" path="res://assets/armor.obj" id="2_dji1h"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1"]
|
||||
albedo_color = Color(0.55, 0.32, 0.14, 1)
|
||||
roughness = 0.8
|
||||
|
||||
[node name="LeatherArmor" type="Node3D"]
|
||||
[node name="LeatherArmor" type="Node3D" unique_id=1218398814]
|
||||
script = ExtResource("1_leatha")
|
||||
|
||||
[node name="ArmorMesh" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("BoxMesh_1")
|
||||
[node name="ArmorMesh" type="MeshInstance3D" parent="." unique_id=1757935253]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.3858314, 0)
|
||||
material_override = SubResource("StandardMaterial3D_1")
|
||||
mesh = ExtResource("2_dji1h")
|
||||
|
||||
[node name="Tooltip" type="Label3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0, 0)
|
||||
[node name="Tooltip" type="Label3D" parent="." unique_id=1322485403]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.7649657, 0)
|
||||
billboard = 1
|
||||
double_sided = true
|
||||
text = "[E] Leather Armor
|
||||
+1 Toughness"
|
||||
font_size = 32
|
||||
font_size = 56
|
||||
outline_size = 6
|
||||
|
||||
+10
-12
@@ -1,27 +1,25 @@
|
||||
[gd_scene format=3 uid="uid://cbvs3rvwslsd2"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/LeatherBoots.gd" id="1_boots"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_1"]
|
||||
size = Vector3(0.4, 0.2, 0.55)
|
||||
[ext_resource type="Script" uid="uid://d0j8nw7eynmk8" path="res://scripts/LeatherBoots.gd" id="1_boots"]
|
||||
[ext_resource type="Texture2D" uid="uid://b85nk7r6dkenp" path="res://assets/boot1.png" id="2_ky34n"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://jls6i8ov73ld" path="res://assets/boot.obj" id="3_7iwdw"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1"]
|
||||
albedo_color = Color(0.45, 0.25, 0.10, 1)
|
||||
roughness = 0.8
|
||||
albedo_color = Color(0.45, 0.25, 0.1, 1)
|
||||
albedo_texture = ExtResource("2_ky34n")
|
||||
metallic = 0.1
|
||||
roughness = 0.8
|
||||
|
||||
[node name="LeatherBoots" type="Node3D"]
|
||||
[node name="LeatherBoots" type="Node3D" unique_id=2009442467]
|
||||
script = ExtResource("1_boots")
|
||||
|
||||
[node name="BootsMesh" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("BoxMesh_1")
|
||||
[node name="BootsMesh" type="MeshInstance3D" parent="." unique_id=1801555312]
|
||||
material_override = SubResource("StandardMaterial3D_1")
|
||||
mesh = ExtResource("3_7iwdw")
|
||||
|
||||
[node name="Tooltip" type="Label3D" parent="."]
|
||||
[node name="Tooltip" type="Label3D" parent="." unique_id=1833908896]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.8, 0)
|
||||
billboard = 1
|
||||
double_sided = true
|
||||
text = "[E] Leather Boots
|
||||
+10 Move Speed"
|
||||
font_size = 32
|
||||
outline_size = 6
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
[gd_scene format=3 uid="uid://mainmenu2024"]
|
||||
[gd_scene format=3 uid="uid://jgfauchpwiii"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/MainMenu.gd" id="1_menu"]
|
||||
[ext_resource type="Script" uid="uid://on1o20vpycgm" path="res://scripts/MainMenu.gd" id="1_menu"]
|
||||
|
||||
[node name="MainMenu" type="Control"]
|
||||
[node name="MainMenu" type="Control" unique_id=495626975]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
script = ExtResource("1_menu")
|
||||
|
||||
+13
-13
@@ -1,28 +1,28 @@
|
||||
[gd_scene format=3 uid="uid://h8armor4fura"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/MetalArmor.gd" id="1_armor"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_1"]
|
||||
size = Vector3(0.55, 0.7, 0.25)
|
||||
[ext_resource type="Script" uid="uid://cqp1ucyvnno7i" path="res://scripts/MetalArmor.gd" id="1_armor"]
|
||||
[ext_resource type="Texture2D" uid="uid://ce4g8nblils0e" path="res://assets/boot2.png" id="2_ocond"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://caurrbclp30ly" path="res://assets/armor.obj" id="3_ocond"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1"]
|
||||
albedo_color = Color(0.55, 0.60, 0.68, 1)
|
||||
roughness = 0.3
|
||||
albedo_color = Color(0.55, 0.6, 0.68, 1)
|
||||
albedo_texture = ExtResource("2_ocond")
|
||||
metallic = 0.85
|
||||
metallic_specular = 1.0
|
||||
roughness = 0.3
|
||||
|
||||
[node name="MetalArmor" type="Node3D"]
|
||||
[node name="MetalArmor" type="Node3D" unique_id=1379243712]
|
||||
script = ExtResource("1_armor")
|
||||
|
||||
[node name="ArmorMesh" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("BoxMesh_1")
|
||||
[node name="ArmorMesh" type="MeshInstance3D" parent="." unique_id=1340618559]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.3499111, 0)
|
||||
material_override = SubResource("StandardMaterial3D_1")
|
||||
mesh = ExtResource("3_ocond")
|
||||
|
||||
[node name="Tooltip" type="Label3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0, 0)
|
||||
[node name="Tooltip" type="Label3D" parent="." unique_id=748491675]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.9431921, 0)
|
||||
billboard = 1
|
||||
double_sided = true
|
||||
text = "[E] Metal Armor
|
||||
+1 Tier"
|
||||
font_size = 32
|
||||
font_size = 56
|
||||
outline_size = 6
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
[gd_scene format=3 uid="uid://dbvt3pkrej5nq"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://sfq4iq0btm0g" path="res://scripts/MetalPlate.gd" id="1_plate"]
|
||||
[ext_resource type="Texture2D" uid="uid://ce4g8nblils0e" path="res://assets/boot2.png" id="2_quvug"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://jls6i8ov73ld" path="res://assets/boot.obj" id="3_2i44a"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1"]
|
||||
albedo_color = Color(0.6, 0.65, 0.72, 1)
|
||||
albedo_texture = ExtResource("2_quvug")
|
||||
metallic = 0.8
|
||||
metallic_specular = 0.9
|
||||
roughness = 0.35
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_1"]
|
||||
size = Vector3(0.55, 0.08, 0.7)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_1"]
|
||||
size = Vector3(1.0203736, 0.124472655, 1.4775146)
|
||||
|
||||
@@ -20,15 +20,16 @@ script = ExtResource("1_plate")
|
||||
[node name="PlateMesh" type="MeshInstance3D" parent="." unique_id=436086498]
|
||||
transform = Transform3D(1.8395851, 0, 0, 0, 1.5228686, 0, 0, 0, 2.050398, 0, 0.16620824, 0)
|
||||
material_override = SubResource("StandardMaterial3D_1")
|
||||
mesh = SubResource("BoxMesh_1")
|
||||
mesh = ExtResource("3_2i44a")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1642999883]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005560264, 0.16739155, 0.003918484)
|
||||
shape = SubResource("BoxShape3D_1")
|
||||
|
||||
[node name="Tooltip" type="Label3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1, 0)
|
||||
[node name="Tooltip" type="Label3D" parent="." unique_id=59052869]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.425037, 0)
|
||||
billboard = 1
|
||||
text = "[E] Metal Plate
|
||||
text = "[E] Armored Boots
|
||||
+1 Kick Tier"
|
||||
font_size = 56
|
||||
outline_size = 6
|
||||
|
||||
+150
-50
File diff suppressed because one or more lines are too long
+45
-13
@@ -45,10 +45,13 @@ var merge_partner: Node = null
|
||||
var is_upgrading: bool = false
|
||||
|
||||
@onready var mesh_node: MeshInstance3D = $BodyMesh
|
||||
#@onready var mesh_node1: MeshInstance3D = $BodyMesh1
|
||||
#@onready var mesh_node2: MeshInstance3D = $BodyMesh2
|
||||
@onready var mesh_node1: MeshInstance3D = $BodyMesh1
|
||||
@onready var mesh_node2: MeshInstance3D = $BodyMesh2
|
||||
@onready var anim_player: AnimationPlayer = $AnimationPlayer
|
||||
|
||||
var mat: StandardMaterial3D
|
||||
var type_label: Label3D
|
||||
var active_mesh: MeshInstance3D
|
||||
|
||||
|
||||
var COLOR_CHASE = Color(1.0, 0.28, 0.18)
|
||||
@@ -61,7 +64,9 @@ const AIR_FRICTION = 0.86
|
||||
func _ready() -> void:
|
||||
process_mode = Node.PROCESS_MODE_PAUSABLE
|
||||
add_to_group("enemies")
|
||||
mat = mesh_node.material_override.duplicate() as StandardMaterial3D
|
||||
active_mesh = mesh_node
|
||||
var orig := mesh_node.material_override
|
||||
mat = (orig.duplicate() if orig != null else StandardMaterial3D.new()) as StandardMaterial3D
|
||||
mesh_node.material_override = mat
|
||||
#mesh_node1.set_visible(false)
|
||||
#mesh_node2.set_visible(false)
|
||||
@@ -123,19 +128,35 @@ func setup(type: String, wave: int) -> void:
|
||||
_apply_mesh(enemy_level)
|
||||
|
||||
func _apply_mesh(level: int) -> void:
|
||||
var idx := clampi(level, 1, 3)
|
||||
var mesh_res := load("res://assets/gnome%d.obj" % idx) as Mesh
|
||||
if mesh_res == null:
|
||||
var idx := clampi(level, 1, 3)
|
||||
var scene := load("res://assets/gnome%d.glb" % idx) as PackedScene
|
||||
if scene == null:
|
||||
return
|
||||
var new_mat := StandardMaterial3D.new()
|
||||
var tex := load("res://assets/gnome%d.png" % idx) as Texture2D
|
||||
if tex != null:
|
||||
new_mat.albedo_texture = tex
|
||||
var root := scene.instantiate()
|
||||
var src: MeshInstance3D = null
|
||||
for child in root.get_children():
|
||||
var mi := child as MeshInstance3D
|
||||
if mi != null:
|
||||
src = mi
|
||||
break
|
||||
if src == null:
|
||||
root.queue_free()
|
||||
return
|
||||
mesh_node.mesh = src.mesh
|
||||
var new_mat: StandardMaterial3D
|
||||
if src.get_surface_override_material(0) != null:
|
||||
new_mat = src.get_surface_override_material(0).duplicate() as StandardMaterial3D
|
||||
else:
|
||||
new_mat = StandardMaterial3D.new()
|
||||
var tex := load("res://assets/gnome%d.png" % idx) as Texture2D
|
||||
if tex != null:
|
||||
new_mat.albedo_texture = tex
|
||||
new_mat.albedo_color = Color.WHITE
|
||||
mesh_node.mesh = mesh_res
|
||||
mesh_node.material_override = new_mat
|
||||
root.queue_free()
|
||||
mat = new_mat
|
||||
COLOR_CHASE = Color.WHITE
|
||||
active_mesh = mesh_node
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
match state:
|
||||
@@ -155,6 +176,7 @@ func _chase(delta: float) -> void:
|
||||
var dist := diff.length()
|
||||
if dist < 1.0 and contact_timer <= 0.0:
|
||||
contact_timer = CONTACT_CD
|
||||
_play_kick_blend()
|
||||
if target.has_method("take_damage"):
|
||||
target.take_damage(damage_to_player)
|
||||
FX.hit_spark(target.global_position + Vector3(0, 0.5, 0), get_parent(), Color(0.95, 0.18, 0.08))
|
||||
@@ -212,6 +234,7 @@ func _try_enemy_kick() -> void:
|
||||
nearest_dist = d.length()
|
||||
nearest_kickable = k
|
||||
if nearest_kickable != null:
|
||||
_play_kick_blend()
|
||||
nearest_kickable.call("receive_kick", kick_dir, 35.0 + kick_tier * 8.0)
|
||||
FX.hit_spark(nearest_kickable.global_position + Vector3(0, 0.4, 0), get_parent(), Color(1.0, 0.72, 0.1))
|
||||
kickable_kick_timer = KICKABLE_KICK_COOLDOWN
|
||||
@@ -233,6 +256,7 @@ func _try_enemy_kick() -> void:
|
||||
nearest_enemy_dist = d.length()
|
||||
nearest_enemy = en
|
||||
if nearest_enemy != null:
|
||||
_play_kick_blend()
|
||||
nearest_enemy.call("receive_kick", kick_dir, 40.0 + kick_tier * 10.0)
|
||||
enemy_kick_timer = ENEMY_KICK_COOLDOWN
|
||||
return
|
||||
@@ -242,8 +266,7 @@ func _try_enemy_kick() -> void:
|
||||
if to_player.length() < ENEMY_KICK_RANGE:
|
||||
var player_toughness: int = target.get("toughness_tier") if target.get("toughness_tier") != null else 0
|
||||
if player_toughness < kick_tier:
|
||||
# light kick
|
||||
# target.call("receive_kick", kick_dir, 12.0 + kick_tier * 10.0)
|
||||
_play_kick_blend()
|
||||
target.call("receive_kick", kick_dir, 35.0 + kick_tier * 8.0)
|
||||
FX.hit_spark(target.global_position + Vector3(0, 0.5, 0), get_parent(), Color(0.95, 0.18, 0.08))
|
||||
enemy_kick_timer = ENEMY_KICK_COOLDOWN
|
||||
@@ -373,6 +396,9 @@ func _enter_stun() -> void:
|
||||
func _enter_chase() -> void:
|
||||
state = State.CHASING
|
||||
mat.albedo_color = COLOR_CHASE
|
||||
mesh_node.rotation.y = 0.0
|
||||
mesh_node1.rotation.y = 0.0
|
||||
mesh_node2.rotation.y = 0.0
|
||||
|
||||
func _take_hit(dmg: int) -> void:
|
||||
if state == State.DEAD:
|
||||
@@ -381,6 +407,12 @@ func _take_hit(dmg: int) -> void:
|
||||
if health <= 0:
|
||||
_die()
|
||||
|
||||
func _play_kick_blend() -> void:
|
||||
SFX.kick_enemy(get_parent())
|
||||
if anim_player != null and anim_player.has_animation("kick"):
|
||||
anim_player.stop()
|
||||
anim_player.play("kick")
|
||||
|
||||
func _wall_impact_effect() -> void:
|
||||
var tw := create_tween()
|
||||
tw.tween_property(mat, "albedo_color", Color.WHITE, 0.04)
|
||||
|
||||
@@ -66,3 +66,5 @@ static func _execute_recipe(a: Node3D, b: Node3D, recipe: Dictionary) -> void:
|
||||
parent.add_child(result)
|
||||
result.global_position = pos
|
||||
FX.merge_smoke(pos + Vector3(0, 0.3, 0), parent)
|
||||
SFX.merge(parent)
|
||||
parent.get_tree().create_timer(30.0).connect("timeout", result.queue_free)
|
||||
|
||||
@@ -23,6 +23,3 @@ func _process(delta: float) -> void:
|
||||
func interact(player: Node) -> void:
|
||||
player.call("apply_upgrade_boots", 2.0, tier)
|
||||
queue_free()
|
||||
var mains := get_tree().get_nodes_in_group("main")
|
||||
if not mains.is_empty():
|
||||
mains[0].call("show_tutorial", "Tutorial_LeatherBoots")
|
||||
|
||||
+239
-33
@@ -47,6 +47,10 @@ var progress_bar: ColorRect
|
||||
var progress_bg: ColorRect
|
||||
var upgrade_panel: Panel
|
||||
var gameover_panel: Panel
|
||||
var pause_panel: Panel
|
||||
var pause_image: TextureRect
|
||||
var pause_toggle_btn: Button
|
||||
var _pause_showing_craft: bool = true
|
||||
|
||||
# Equipment slots
|
||||
var equip_fills: Array[ColorRect] = []
|
||||
@@ -56,6 +60,7 @@ var _equip_prev_tiers: Array[int] = [-1, -1, -1]
|
||||
# Boss phase
|
||||
var boss_active: bool = false
|
||||
var first_boss_spawned: bool = false
|
||||
var first_bat_spawned: bool = false
|
||||
var boss_timer: float = 90.0
|
||||
var portal_node: Node3D = null
|
||||
var boss_timer_label: Label
|
||||
@@ -84,10 +89,22 @@ func _input(event: InputEvent) -> void:
|
||||
cam_pitch = clampf(cam_pitch, PITCH_MIN, PITCH_MAX)
|
||||
|
||||
if event.is_action_pressed("ui_cancel"):
|
||||
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
if game_active and not upgrading:
|
||||
_toggle_pause_menu()
|
||||
else:
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
else:
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
|
||||
if OS.is_debug_build():
|
||||
var key := event as InputEventKey
|
||||
if key != null and key.pressed and not key.echo:
|
||||
if key.keycode == KEY_F5:
|
||||
boss_active = true
|
||||
_trigger_win()
|
||||
elif key.keycode == KEY_F6:
|
||||
_on_player_died()
|
||||
|
||||
# ─── Level ────────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -117,8 +134,7 @@ func _process(delta: float) -> void:
|
||||
var look_at_pos := player.global_position + Vector3(0, 0.8, 0)
|
||||
camera.global_position = camera.global_position.lerp(look_at_pos + offset, 14.0 * delta)
|
||||
camera.look_at(look_at_pos, Vector3.UP)
|
||||
if Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT):
|
||||
player.set_aim_direction(deg_to_rad(cam_yaw))
|
||||
player.set_aim_direction(deg_to_rad(cam_yaw))
|
||||
_update_tier_label()
|
||||
|
||||
if boss_active:
|
||||
@@ -236,6 +252,7 @@ func _spawn_player() -> void:
|
||||
# ─── Game flow ────────────────────────────────────────────────────────────────
|
||||
|
||||
func _start_game() -> void:
|
||||
SFX.start_ambient(self)
|
||||
game_active = true
|
||||
wave = 1
|
||||
score = 0
|
||||
@@ -268,6 +285,9 @@ func _spawn_enemy() -> void:
|
||||
enemy.target = player
|
||||
enemy.connect("died", _on_enemy_died)
|
||||
enemy.connect("merged", _on_enemy_merged)
|
||||
if type == "bat" and not first_bat_spawned:
|
||||
first_bat_spawned = true
|
||||
show_tutorial("Tutorial_LeatherBoots")
|
||||
if type == "ogre" and not first_boss_spawned:
|
||||
first_boss_spawned = true
|
||||
_start_boss_phase()
|
||||
@@ -384,9 +404,12 @@ func _pick_upgrade(id: String) -> void:
|
||||
_update_labels()
|
||||
|
||||
func _show_gameover() -> void:
|
||||
gameover_panel.visible = true
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
var lbl := gameover_panel.get_node("VBox/ScoreLabel") as Label
|
||||
lbl.text = "Score: %d\nWave: %d" % [score, wave]
|
||||
show_tutorial("LoseGame", func() -> void:
|
||||
gameover_panel.visible = true
|
||||
)
|
||||
|
||||
func _restart() -> void:
|
||||
get_tree().paused = false
|
||||
@@ -399,9 +422,11 @@ func _start_boss_phase() -> void:
|
||||
return
|
||||
boss_active = true
|
||||
boss_timer = 120.0
|
||||
boss_timer_label.visible = true
|
||||
boss_hint_label.visible = true
|
||||
_spawn_portal()
|
||||
show_tutorial("ThirdLevelEnemy", func() -> void:
|
||||
boss_timer_label.visible = true
|
||||
boss_hint_label.visible = true
|
||||
)
|
||||
|
||||
func _spawn_portal() -> void:
|
||||
portal_node = Node3D.new()
|
||||
@@ -495,9 +520,12 @@ func _trigger_win() -> void:
|
||||
boss_hint_label.visible = false
|
||||
if is_instance_valid(portal_node):
|
||||
portal_node.queue_free()
|
||||
get_tree().paused = true
|
||||
win_panel.visible = true
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
(win_panel.get_node("VBox/ScoreLabel") as Label).text = "Score: %d\nWave: %d" % [score, wave]
|
||||
show_tutorial("VictoryScreen", func() -> void:
|
||||
get_tree().paused = true
|
||||
win_panel.visible = true
|
||||
)
|
||||
|
||||
func _trigger_time_up() -> void:
|
||||
if not boss_active:
|
||||
@@ -574,8 +602,10 @@ func _set_player_paused(paused: bool) -> void:
|
||||
for e in get_tree().get_nodes_in_group("player"):
|
||||
(e as Node).process_mode = mode
|
||||
|
||||
const _REPEATABLE_TUTORIALS := ["VictoryScreen", "LoseGame"]
|
||||
|
||||
func show_tutorial(key: String, on_dismiss: Callable = Callable()) -> void:
|
||||
if shown_tutorials.get(key, false):
|
||||
if shown_tutorials.get(key, false) and not key in _REPEATABLE_TUTORIALS:
|
||||
if on_dismiss.is_valid():
|
||||
on_dismiss.call()
|
||||
return
|
||||
@@ -613,25 +643,110 @@ func _create_ui() -> void:
|
||||
_make_gameover_panel()
|
||||
_make_boss_ui()
|
||||
_make_win_panel()
|
||||
_make_pause_panel()
|
||||
|
||||
func _make_hud() -> void:
|
||||
# Score
|
||||
score_label = _label(Vector2(12, 10), "Score: 0", 22)
|
||||
# Wave
|
||||
wave_label = _label(Vector2(12, 38), "Wave: 1", 22)
|
||||
score_label = _label(Vector2(16, 12), "Score: 0", 30)
|
||||
wave_label = _label(Vector2(16, 50), "Wave: 1", 30)
|
||||
_make_recipe_panel()
|
||||
|
||||
# HP bar
|
||||
_label(Vector2(12, 68), "HP", 16)
|
||||
hp_bar_bg = _crect(Vector2(12, 88), Vector2(200, 16), Color(0.25, 0.04, 0.04))
|
||||
hp_bar = _crect(Vector2(12, 88), Vector2(200, 16), Color(0.9, 0.15, 0.15))
|
||||
func _make_recipe_panel() -> void:
|
||||
const INGREDIENT_NAMES := {
|
||||
"rock": "Rock",
|
||||
"stick": "Stick",
|
||||
"leather": "Leather",
|
||||
"iron": "Iron",
|
||||
"metal_plate":"Iron Plate",
|
||||
#"MetalPlate":"Armor boots"
|
||||
"essence":"Essence",
|
||||
"Enchanted_Table": "Ench Table",
|
||||
"EnchantedSphere": "Enchanted Boots"
|
||||
}
|
||||
const RESULT_NAMES := {
|
||||
"LeatherBoots": "Leather Boots",
|
||||
"Boulder": "Boulder",
|
||||
"StickArmor": "Stick Armor",
|
||||
"LeatherArmor": "Leather Armor",
|
||||
"PlateArmor": "Plate Armor",
|
||||
"WoodenShield": "Wooden Shield",
|
||||
"IronShield": "Iron Shield",
|
||||
"MetalArmor": "Metal Armor",
|
||||
"MetalPlate": "Armor boots"
|
||||
}
|
||||
|
||||
# Kill progress toward next upgrade
|
||||
_label(Vector2(12, 110), "Next upgrade", 16)
|
||||
progress_bg = _crect(Vector2(12, 130), Vector2(200, 10), Color(0.1, 0.1, 0.25))
|
||||
progress_bar = _crect(Vector2(12, 130), Vector2(0, 10), Color(0.4, 0.8, 1.0))
|
||||
const PAD_H := 10
|
||||
const PAD_V := 8
|
||||
const SEP := 4
|
||||
const TITLE_H := 22
|
||||
const ROW_H := 20
|
||||
var n := MergeRecipes._list.size()
|
||||
var content_h := TITLE_H + SEP + n * ROW_H + (n - 1) * SEP
|
||||
var panel_h := content_h + PAD_V * 2 + 10
|
||||
const PANEL_W := 260
|
||||
|
||||
# Tier display
|
||||
tier_label = _label(Vector2(12, 148), "", 17)
|
||||
var panel := Panel.new()
|
||||
var sb := StyleBoxFlat.new()
|
||||
sb.bg_color = Color(0.0, 0.0, 0.0, 0.55)
|
||||
sb.corner_radius_top_left = 6
|
||||
sb.corner_radius_top_right = 6
|
||||
sb.corner_radius_bottom_left = 6
|
||||
sb.corner_radius_bottom_right = 6
|
||||
panel.add_theme_stylebox_override("panel", sb)
|
||||
panel.anchor_left = 1.0
|
||||
panel.anchor_right = 1.0
|
||||
panel.anchor_top = 0.0
|
||||
panel.anchor_bottom = 0.0
|
||||
panel.offset_left = -(PANEL_W + 10)
|
||||
panel.offset_right = -10
|
||||
panel.offset_top = 10
|
||||
panel.offset_bottom = 10 + panel_h
|
||||
canvas.add_child(panel)
|
||||
|
||||
var margin := MarginContainer.new()
|
||||
margin.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||
margin.add_theme_constant_override("margin_left", PAD_H)
|
||||
margin.add_theme_constant_override("margin_right", PAD_H)
|
||||
margin.add_theme_constant_override("margin_top", PAD_V)
|
||||
margin.add_theme_constant_override("margin_bottom", PAD_V)
|
||||
panel.add_child(margin)
|
||||
|
||||
var vbox := VBoxContainer.new()
|
||||
vbox.add_theme_constant_override("separation", SEP)
|
||||
margin.add_child(vbox)
|
||||
|
||||
var title := Label.new()
|
||||
title.text = "Рецепты"
|
||||
title.add_theme_font_size_override("font_size", 17)
|
||||
title.add_theme_color_override("font_color", Color(1.0, 0.9, 0.5))
|
||||
title.add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.8))
|
||||
title.add_theme_constant_override("shadow_offset_x", 1)
|
||||
title.add_theme_constant_override("shadow_offset_y", 1)
|
||||
title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
vbox.add_child(title)
|
||||
|
||||
for recipe in MergeRecipes._list:
|
||||
var a: String = INGREDIENT_NAMES.get(recipe["ingredients"][0], recipe["ingredients"][0])
|
||||
var b: String = INGREDIENT_NAMES.get(recipe["ingredients"][1], recipe["ingredients"][1])
|
||||
var scene_name: String = (recipe["result_scene"] as String).get_file().get_basename()
|
||||
var result: String = RESULT_NAMES.get(scene_name, scene_name)
|
||||
var row := Label.new()
|
||||
row.text = "%s + %s → %s" % [a, b, result]
|
||||
row.add_theme_font_size_override("font_size", 15)
|
||||
row.add_theme_color_override("font_color", Color.WHITE)
|
||||
row.add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.8))
|
||||
row.add_theme_constant_override("shadow_offset_x", 1)
|
||||
row.add_theme_constant_override("shadow_offset_y", 1)
|
||||
vbox.add_child(row)
|
||||
|
||||
_label(Vector2(16, 92), "HP", 20)
|
||||
hp_bar_bg = _crect(Vector2(16, 118), Vector2(260, 20), Color(0.25, 0.04, 0.04))
|
||||
hp_bar = _crect(Vector2(16, 118), Vector2(260, 20), Color(0.9, 0.15, 0.15))
|
||||
|
||||
_label(Vector2(16, 146), "Next upgrade", 20)
|
||||
progress_bg = _crect(Vector2(16, 172), Vector2(260, 14), Color(0.1, 0.1, 0.25))
|
||||
progress_bar = _crect(Vector2(16, 172), Vector2(0, 14), Color(0.4, 0.8, 1.0))
|
||||
|
||||
tier_label = _label(Vector2(16, 194), "", 20)
|
||||
|
||||
_make_equipment_slots()
|
||||
|
||||
@@ -795,11 +910,11 @@ func _make_win_panel() -> void:
|
||||
|
||||
# ─── Equipment slots ──────────────────────────────────────────────────────────
|
||||
|
||||
const _EQUIP_SLOT_SIZE := 54
|
||||
const _EQUIP_SLOT_GAP := 8
|
||||
const _EQUIP_SLOT_SIZE := 64
|
||||
const _EQUIP_SLOT_GAP := 10
|
||||
const _EQUIP_SLOT_PAD := 3
|
||||
const _EQUIP_START_X := 12
|
||||
const _EQUIP_START_Y := 170
|
||||
const _EQUIP_START_X := 16
|
||||
const _EQUIP_START_Y := 228
|
||||
const _EQUIP_EMPTY_COL := Color(0.10, 0.10, 0.16)
|
||||
const _EQUIP_BORDER_COL := Color(0.30, 0.30, 0.42)
|
||||
|
||||
@@ -829,18 +944,18 @@ func _make_equipment_slots() -> void:
|
||||
var x := _EQUIP_START_X + i * (_EQUIP_SLOT_SIZE + _EQUIP_SLOT_GAP)
|
||||
var y := _EQUIP_START_Y
|
||||
|
||||
var title := _label(Vector2(x, y), titles[i], 12)
|
||||
var title := _label(Vector2(x, y), titles[i], 16)
|
||||
title.size.x = _EQUIP_SLOT_SIZE
|
||||
title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
|
||||
var border := ColorRect.new()
|
||||
border.position = Vector2(x, y + 16)
|
||||
border.position = Vector2(x, y + 22)
|
||||
border.size = Vector2(_EQUIP_SLOT_SIZE, _EQUIP_SLOT_SIZE)
|
||||
border.color = _EQUIP_BORDER_COL
|
||||
canvas.add_child(border)
|
||||
|
||||
var fill := ColorRect.new()
|
||||
fill.position = Vector2(x + _EQUIP_SLOT_PAD, y + 16 + _EQUIP_SLOT_PAD)
|
||||
fill.position = Vector2(x + _EQUIP_SLOT_PAD, y + 22 + _EQUIP_SLOT_PAD)
|
||||
fill.size = Vector2(_EQUIP_SLOT_SIZE - _EQUIP_SLOT_PAD * 2, _EQUIP_SLOT_SIZE - _EQUIP_SLOT_PAD * 2)
|
||||
fill.color = _EQUIP_EMPTY_COL
|
||||
canvas.add_child(fill)
|
||||
@@ -850,7 +965,7 @@ func _make_equipment_slots() -> void:
|
||||
lbl.position = fill.position
|
||||
lbl.size = fill.size
|
||||
lbl.text = ""
|
||||
lbl.add_theme_font_size_override("font_size", 11)
|
||||
lbl.add_theme_font_size_override("font_size", 14)
|
||||
lbl.add_theme_color_override("font_color", Color.WHITE)
|
||||
lbl.add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.85))
|
||||
lbl.add_theme_constant_override("shadow_offset_x", 1)
|
||||
@@ -922,3 +1037,94 @@ func _update_tier_label() -> void:
|
||||
var shield_str := "-" if st == 0 else str(st)
|
||||
tier_label.text = "Kick: %d Tough: %d Shield: %s" % [kt, tt, shield_str]
|
||||
_update_equipment_slots()
|
||||
|
||||
# ─── Pause menu ───────────────────────────────────────────────────────────────
|
||||
|
||||
const _PAUSE_CRAFT_IMG := "res://assets/Pause_Craft.jpeg"
|
||||
const _PAUSE_CONTROLS_IMG := "res://assets/Pause_Controls.jpeg"
|
||||
|
||||
func _make_pause_panel() -> void:
|
||||
pause_panel = Panel.new()
|
||||
pause_panel.process_mode = Node.PROCESS_MODE_ALWAYS
|
||||
pause_panel.visible = false
|
||||
var sb := StyleBoxFlat.new()
|
||||
sb.bg_color = Color(0.05, 0.04, 0.10, 0.96)
|
||||
sb.border_width_left = 2; sb.border_width_right = 2
|
||||
sb.border_width_top = 2; sb.border_width_bottom = 2
|
||||
sb.border_color = Color(0.35, 0.28, 0.55)
|
||||
sb.corner_radius_top_left = 10; sb.corner_radius_top_right = 10
|
||||
sb.corner_radius_bottom_left = 10; sb.corner_radius_bottom_right = 10
|
||||
pause_panel.add_theme_stylebox_override("panel", sb)
|
||||
pause_panel.anchor_left = 0.5; pause_panel.anchor_right = 0.5
|
||||
pause_panel.anchor_top = 0.5; pause_panel.anchor_bottom = 0.5
|
||||
pause_panel.offset_left = -380; pause_panel.offset_right = 380
|
||||
pause_panel.offset_top = -300; pause_panel.offset_bottom = 300
|
||||
canvas.add_child(pause_panel)
|
||||
|
||||
var vbox := VBoxContainer.new()
|
||||
vbox.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||
vbox.add_theme_constant_override("separation", 12)
|
||||
var margin := MarginContainer.new()
|
||||
margin.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||
margin.add_theme_constant_override("margin_left", 20)
|
||||
margin.add_theme_constant_override("margin_right", 20)
|
||||
margin.add_theme_constant_override("margin_top", 16)
|
||||
margin.add_theme_constant_override("margin_bottom", 16)
|
||||
pause_panel.add_child(margin)
|
||||
margin.add_child(vbox)
|
||||
|
||||
var title := Label.new()
|
||||
title.text = "ПАУЗА"
|
||||
title.add_theme_font_size_override("font_size", 28)
|
||||
title.add_theme_color_override("font_color", Color(1.0, 0.9, 0.5))
|
||||
title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
vbox.add_child(title)
|
||||
|
||||
pause_image = TextureRect.new()
|
||||
pause_image.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
||||
pause_image.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
|
||||
pause_image.custom_minimum_size = Vector2(0, 380)
|
||||
pause_image.size_flags_vertical = Control.SIZE_EXPAND_FILL
|
||||
vbox.add_child(pause_image)
|
||||
_pause_load_image()
|
||||
|
||||
var hbox := HBoxContainer.new()
|
||||
hbox.alignment = BoxContainer.ALIGNMENT_CENTER
|
||||
hbox.add_theme_constant_override("separation", 16)
|
||||
vbox.add_child(hbox)
|
||||
|
||||
pause_toggle_btn = _pause_btn("Управление", _on_pause_toggle)
|
||||
hbox.add_child(pause_toggle_btn)
|
||||
hbox.add_child(_pause_btn("Продолжить", _toggle_pause_menu))
|
||||
hbox.add_child(_pause_btn("Главное меню", func() -> void:
|
||||
get_tree().paused = false
|
||||
get_tree().change_scene_to_file("res://scenes/MainMenu.tscn")
|
||||
))
|
||||
|
||||
func _pause_btn(text: String, cb: Callable) -> Button:
|
||||
var b := Button.new()
|
||||
b.text = text
|
||||
b.process_mode = Node.PROCESS_MODE_ALWAYS
|
||||
b.custom_minimum_size = Vector2(160, 48)
|
||||
b.add_theme_font_size_override("font_size", 17)
|
||||
b.connect("pressed", cb)
|
||||
return b
|
||||
|
||||
func _pause_load_image() -> void:
|
||||
var path := _PAUSE_CRAFT_IMG if _pause_showing_craft else _PAUSE_CONTROLS_IMG
|
||||
pause_image.texture = load(path) as Texture2D if ResourceLoader.exists(path) else null
|
||||
|
||||
func _on_pause_toggle() -> void:
|
||||
_pause_showing_craft = not _pause_showing_craft
|
||||
pause_toggle_btn.text = "Управление" if _pause_showing_craft else "Рецепты Крафта"
|
||||
_pause_load_image()
|
||||
|
||||
func _toggle_pause_menu() -> void:
|
||||
var opening := not pause_panel.visible
|
||||
pause_panel.visible = opening
|
||||
get_tree().paused = opening
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE if opening else Input.MOUSE_MODE_CAPTURED
|
||||
if opening:
|
||||
_pause_showing_craft = true
|
||||
pause_toggle_btn.text = "Управление"
|
||||
_pause_load_image()
|
||||
|
||||
+20
-1
@@ -18,7 +18,7 @@ func _build_ui() -> void:
|
||||
add_child(bg)
|
||||
|
||||
var title := Label.new()
|
||||
title.text = "KickSurvivors"
|
||||
title.text = "CraftKick"
|
||||
title.add_theme_font_size_override("font_size", 52)
|
||||
title.add_theme_color_override("font_color", Color.WHITE)
|
||||
title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
@@ -48,6 +48,25 @@ func _build_ui() -> void:
|
||||
|
||||
_build_settings_panel()
|
||||
_build_difficulty_panel()
|
||||
_add_studio_logo()
|
||||
|
||||
func _add_studio_logo() -> void:
|
||||
const PATH := "res://assets/studio_logo.png"
|
||||
var logo := TextureRect.new()
|
||||
if ResourceLoader.exists(PATH):
|
||||
logo.texture = load(PATH) as Texture2D
|
||||
logo.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
||||
logo.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
|
||||
logo.anchor_left = 1.0
|
||||
logo.anchor_right = 1.0
|
||||
logo.anchor_top = 1.0
|
||||
logo.anchor_bottom = 1.0
|
||||
logo.offset_left = -200
|
||||
logo.offset_right = -16
|
||||
logo.offset_top = -208
|
||||
logo.offset_bottom = -16
|
||||
logo.modulate.a = 0.85
|
||||
add_child(logo)
|
||||
|
||||
func _big_btn(text: String, width: float, cb: Callable) -> Button:
|
||||
var b := _btn(text, cb)
|
||||
|
||||
+12
-2
@@ -24,7 +24,7 @@ static var _list: Array[Dictionary] = [
|
||||
"speed_threshold": 18.0,
|
||||
},
|
||||
{
|
||||
"ingredients": ["leather", "metal_plate"],
|
||||
"ingredients": ["leather", "iron"],
|
||||
"result_scene": "res://scenes/PlateArmor.tscn",
|
||||
"speed_threshold": 18.0,
|
||||
},
|
||||
@@ -34,10 +34,20 @@ static var _list: Array[Dictionary] = [
|
||||
"speed_threshold": 18.0,
|
||||
},
|
||||
{
|
||||
"ingredients": ["iron", "leather"],
|
||||
"ingredients": ["iron", "rock"],
|
||||
"result_scene": "res://scenes/IronShield.tscn",
|
||||
"speed_threshold": 18.0,
|
||||
},
|
||||
{
|
||||
"ingredients": ["iron", "Smith"],
|
||||
"result_scene": "res://scenes/MetalPlate.tscn",
|
||||
"speed_threshold": 0.1,
|
||||
},
|
||||
{
|
||||
"ingredients": ["essence", "Enchanted_Table"],
|
||||
"result_scene": "res://scenes/EnchantedSphere.tscn",
|
||||
"speed_threshold": 0.1,
|
||||
}
|
||||
]
|
||||
|
||||
static func find(type_a: String, type_b: String, speed: float) -> Dictionary:
|
||||
|
||||
+17
-33
@@ -21,6 +21,7 @@ var has_iron_shield: bool = false
|
||||
var shield_tier: int = 0
|
||||
var is_shielding: bool = false
|
||||
var kick_timer: float = 0.0
|
||||
var interact_timer: float = 0.0
|
||||
var invincible_timer: float = 0.0
|
||||
var is_alive: bool = true
|
||||
var last_move_dir: Vector3 = Vector3.FORWARD
|
||||
@@ -93,11 +94,6 @@ func _make_kick_arc_mesh() -> ArrayMesh:
|
||||
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
|
||||
return mesh
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event is InputEventKey and event.pressed and not event.echo:
|
||||
if event.keycode == KEY_E:
|
||||
_try_interact()
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if not is_alive:
|
||||
return
|
||||
@@ -105,6 +101,9 @@ func _physics_process(delta: float) -> void:
|
||||
_handle_movement(delta)
|
||||
_handle_kick(delta)
|
||||
_handle_iframes(delta)
|
||||
interact_timer = max(0.0, interact_timer - delta)
|
||||
if interact_timer <= 0.0:
|
||||
_try_interact()
|
||||
if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT) and kick_timer <= 0.0:
|
||||
_do_kick()
|
||||
|
||||
@@ -118,8 +117,16 @@ func _handle_movement(delta: float) -> void:
|
||||
float(Input.is_key_pressed(KEY_S) or Input.is_key_pressed(KEY_DOWN)) -
|
||||
float(Input.is_key_pressed(KEY_W) or Input.is_key_pressed(KEY_UP))
|
||||
)
|
||||
var is_moving: bool = abs(input_x) > 0.0 or abs(input_z) > 0.0
|
||||
if is_moving:
|
||||
if not anim_player.is_playing() or anim_player.current_animation != "walk":
|
||||
anim_player.play("walk")
|
||||
else:
|
||||
if anim_player.current_animation == "walk":
|
||||
anim_player.stop()
|
||||
|
||||
var cam := get_viewport().get_camera_3d()
|
||||
if (abs(input_x) > 0.0 or abs(input_z) > 0.0) and cam != null:
|
||||
if is_moving and cam != null:
|
||||
var cam_fwd := -cam.global_transform.basis.z
|
||||
cam_fwd.y = 0.0
|
||||
cam_fwd = cam_fwd.normalized() if cam_fwd.length() > 0.01 else Vector3(0.0, 0.0, -1.0)
|
||||
@@ -207,6 +214,7 @@ func _do_kick() -> void:
|
||||
else:
|
||||
force = 80.0
|
||||
best.call("receive_kick", best_dir, force)
|
||||
SFX.kick_player(get_parent())
|
||||
FX.hit_spark(best.global_position + Vector3(0, 0.4, 0), get_parent())
|
||||
_squish_effect()
|
||||
|
||||
@@ -262,16 +270,16 @@ func take_damage(amount: int, attacker_toughness: int = 0) -> void:
|
||||
|
||||
health = min(health - amount, max_health)
|
||||
emit_signal("health_changed", health, max_health)
|
||||
SFX.damage(get_parent())
|
||||
_squish_effect()
|
||||
if health <= 0:
|
||||
_die()
|
||||
|
||||
func heal(amount: int) -> void:
|
||||
if not is_alive:
|
||||
return
|
||||
health = min(health + amount, max_health)
|
||||
emit_signal("health_changed", health, max_health)
|
||||
var tw := create_tween()
|
||||
tw.tween_property(player_mat, "albedo_color", Color(0.1, 1.0, 0.35), 0.08)
|
||||
tw.tween_property(player_mat, "albedo_color", BASE_COLOR, 0.3)
|
||||
|
||||
func _die() -> void:
|
||||
is_alive = false
|
||||
@@ -296,30 +304,18 @@ func apply_upgrade_boots(speed_bonus: float, _tier: int) -> void:
|
||||
kick_tier += 1
|
||||
move_speed += speed_bonus
|
||||
_apply_boot_mesh(kick_tier)
|
||||
var tw := create_tween()
|
||||
tw.tween_property(player_mat, "albedo_color", Color(1.0, 0.85, 0.2), 0.1)
|
||||
tw.tween_property(player_mat, "albedo_color", BASE_COLOR, 0.4)
|
||||
|
||||
func apply_upgrade_armor() -> void:
|
||||
kick_tier += 1
|
||||
var tw := create_tween()
|
||||
tw.tween_property(player_mat, "albedo_color", Color(0.7, 0.8, 1.0), 0.1)
|
||||
tw.tween_property(player_mat, "albedo_color", BASE_COLOR, 0.5)
|
||||
|
||||
func apply_upgrade_enchant() -> void:
|
||||
kick_tier += 1
|
||||
var tw := create_tween()
|
||||
tw.tween_property(player_mat, "albedo_color", Color(0.8, 0.2, 1.0), 0.1)
|
||||
tw.tween_property(player_mat, "albedo_color", BASE_COLOR, 0.6)
|
||||
|
||||
func apply_stick_armor() -> bool:
|
||||
if has_stick_armor:
|
||||
return false
|
||||
has_stick_armor = true
|
||||
toughness_tier += 1
|
||||
var tw := create_tween()
|
||||
tw.tween_property(player_mat, "albedo_color", Color(0.7, 0.5, 0.2), 0.1)
|
||||
tw.tween_property(player_mat, "albedo_color", BASE_COLOR, 0.4)
|
||||
return true
|
||||
|
||||
func apply_leather_armor() -> bool:
|
||||
@@ -327,9 +323,6 @@ func apply_leather_armor() -> bool:
|
||||
return false
|
||||
has_leather_armor = true
|
||||
toughness_tier += 1
|
||||
var tw := create_tween()
|
||||
tw.tween_property(player_mat, "albedo_color", Color(0.8, 0.5, 0.2), 0.1)
|
||||
tw.tween_property(player_mat, "albedo_color", BASE_COLOR, 0.4)
|
||||
return true
|
||||
|
||||
func apply_plate_armor() -> bool:
|
||||
@@ -337,9 +330,6 @@ func apply_plate_armor() -> bool:
|
||||
return false
|
||||
has_plate_armor = true
|
||||
toughness_tier += 1
|
||||
var tw := create_tween()
|
||||
tw.tween_property(player_mat, "albedo_color", Color(0.6, 0.7, 1.0), 0.1)
|
||||
tw.tween_property(player_mat, "albedo_color", BASE_COLOR, 0.5)
|
||||
return true
|
||||
|
||||
func apply_wooden_shield() -> bool:
|
||||
@@ -347,9 +337,6 @@ func apply_wooden_shield() -> bool:
|
||||
return false
|
||||
has_wooden_shield = true
|
||||
shield_tier = max(shield_tier, 1)
|
||||
var tw := create_tween()
|
||||
tw.tween_property(player_mat, "albedo_color", Color(0.55, 0.38, 0.18), 0.1)
|
||||
tw.tween_property(player_mat, "albedo_color", BASE_COLOR, 0.4)
|
||||
return true
|
||||
|
||||
func apply_iron_shield() -> bool:
|
||||
@@ -357,7 +344,4 @@ func apply_iron_shield() -> bool:
|
||||
return false
|
||||
has_iron_shield = true
|
||||
shield_tier = max(shield_tier, 2)
|
||||
var tw := create_tween()
|
||||
tw.tween_property(player_mat, "albedo_color", Color(0.55, 0.58, 0.62), 0.1)
|
||||
tw.tween_property(player_mat, "albedo_color", BASE_COLOR, 0.5)
|
||||
return true
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
class_name SFX
|
||||
|
||||
# Expected files in res://assets/sfx/:
|
||||
# kick_player.ogg — player kicks something
|
||||
# kick_enemy.ogg — enemy attacks
|
||||
# merge.ogg — two objects merge
|
||||
# damage.ogg — player takes damage
|
||||
# ambient.ogg — looping background ambience
|
||||
|
||||
const _BASE := "res://assets/"
|
||||
|
||||
static func _play(name: String, parent: Node, volume_db: float = 0.0, pitch: float = 1.0) -> void:
|
||||
var path := _BASE + name
|
||||
if not ResourceLoader.exists(path):
|
||||
return
|
||||
var stream := load(path) as AudioStream
|
||||
if stream == null:
|
||||
return
|
||||
var ogg = stream as AudioStreamOggVorbis
|
||||
if ogg != null:
|
||||
ogg.loop = false
|
||||
var p := AudioStreamPlayer.new()
|
||||
p.stream = stream
|
||||
p.volume_db = volume_db
|
||||
p.pitch_scale = pitch + randf_range(-0.06, 0.06)
|
||||
p.bus = "Master"
|
||||
parent.add_child(p)
|
||||
p.play()
|
||||
p.connect("finished", p.queue_free)
|
||||
|
||||
static func kick_player(parent: Node) -> void:
|
||||
_play("kick_player.ogg", parent, -4.0)
|
||||
|
||||
static func kick_enemy(parent: Node) -> void:
|
||||
_play("kick_enemy.ogg", parent, -6.0)
|
||||
|
||||
static func merge(parent: Node) -> void:
|
||||
_play("merge.ogg", parent, -3.0)
|
||||
|
||||
static func damage(parent: Node) -> void:
|
||||
_play("damage.ogg", parent, -2.0)
|
||||
|
||||
static func start_ambient(parent: Node) -> AudioStreamPlayer:
|
||||
var path := _BASE + "ambient.ogg"
|
||||
if not ResourceLoader.exists(path):
|
||||
return null
|
||||
var stream := load(path) as AudioStream
|
||||
if stream == null:
|
||||
return null
|
||||
var p := AudioStreamPlayer.new()
|
||||
p.stream = stream
|
||||
p.volume_db = -14.0
|
||||
p.bus = "Master"
|
||||
p.autoplay = true
|
||||
(stream as AudioStreamOggVorbis).loop = true
|
||||
parent.add_child(p)
|
||||
return p
|
||||
@@ -0,0 +1 @@
|
||||
uid://d2vxdhi2fmqhd
|
||||
Reference in New Issue
Block a user