Compare commits
69 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 34dc5b026e | |||
| 5c1e881a53 | |||
| 4efc6763f0 | |||
| 76d4fee33c | |||
| 271be0b26b | |||
| 98c6f1285a | |||
| 4d66df8c7e | |||
| 41f18cb5d6 | |||
| 6b6a926715 | |||
| dae7ec06da | |||
| 1eb06876e9 | |||
| 1021a07b04 | |||
| c365f76d80 | |||
| 32ac46f840 | |||
| bd10d1789b | |||
| 170d8ff3f1 | |||
| 550bf2c5ad | |||
| 02f3e283de | |||
| 9123574947 | |||
| aadf59d2d0 | |||
| d57c3dc2a2 | |||
| 09ae6bfbf4 | |||
| 40c1b8e680 | |||
| a1c77fed5e | |||
| 1a8af92d88 | |||
| 8166a6c18e | |||
| 46d6dda325 | |||
| fc9348551d | |||
| c4a19c7443 | |||
| 95c4c0ddf9 | |||
| 6a4f104655 | |||
| d4b67888d7 | |||
| b177e0aee3 | |||
| 2a6f4c0f7b | |||
| 32d0c58f5c | |||
| 251002ea7c | |||
| 986496097f | |||
| d976deeb6a | |||
| d632670092 | |||
| e1899e49f4 | |||
| 6f5f9e6bba | |||
| 91cd027a98 | |||
| ef2fb24969 | |||
| 4c75776c70 | |||
| 7688084b7e | |||
| ccc92f201f | |||
| 008650a87e | |||
| b9e3147519 | |||
| cdba320cbc | |||
| ee7b1617c1 | |||
| d749485126 | |||
| 45427b7070 | |||
| d514435dd8 | |||
| 3eb9fa50f3 | |||
| aee900c009 | |||
| 4cf714f516 | |||
| b78736a1f4 | |||
| 212263c858 | |||
| 8c4eeb0861 | |||
| 95def2d527 | |||
| 9a43a9ff8b | |||
| 7238cbf49e | |||
| 44c667f097 | |||
| 3cd347d420 | |||
| 6414b2e7cc | |||
| 56593c58cf | |||
| ce6f3d7075 | |||
| a74182255b | |||
| ebf5046461 |
@@ -2,4 +2,4 @@ disable:
|
||||
- class-definitions-order
|
||||
- no-else-return
|
||||
max-line-length: 120
|
||||
max-file-lines: 1200
|
||||
max-file-lines: 3000
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
[gd_resource type="Animation" format=3 uid="uid://bq71flatfddll"]
|
||||
|
||||
[resource]
|
||||
resource_name = "Bear_fx_smash_hit"
|
||||
length = 0.23333333
|
||||
tracks/0/type = "position_3d"
|
||||
tracks/0/imported = true
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Bear_fx_smash_hit")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = PackedFloat32Array(0, 1, 0, -0.51246816, 7.1560388, 0.033333335, 1, 0, -0.51246816, 7.1560388, 0.06666667, 1, 1.2735307, -1.4730668, 5.139501, 0.1, 1, 1.3610363, 0.27301335, 5.141279, 0.13333334, 1, 1.3735371, 2.1639488, 5.153728, 0.16666667, 1, 1.3573295, -0.04170864, 5.1945124, 0.2, 1, 1.3061407, -0.3338372, 5.1877995, 0.23333333, 1, 1.2735307, -0.37556988, 5.1810856)
|
||||
tracks/1/type = "rotation_3d"
|
||||
tracks/1/imported = true
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Bear_fx_smash_hit")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1, 0.033333335, 1, 0, 0, 0, 1, 0.06666667, 1, 0.045591418, -0.036703378, -0.0016762356, 0.9982843, 0.1, 1, 0.06741002, -0.02538766, 0.014408795, 0.99729824, 0.13333334, 1, 0.05603578, -0.017236687, 0.029419938, 0.99784636, 0.16666667, 1, -0.071329094, -0.014488678, 0.036211126, 0.9966901, 0.23333333, 1, -0.039237745, -0.015645763, 0.035726424, 0.99846846)
|
||||
tracks/2/type = "scale_3d"
|
||||
tracks/2/imported = true
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Bear_fx_smash_hit")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = PackedFloat32Array(0, 1, 0, 0, 0, 0.033333335, 1, 0, 0, 0, 0.06666667, 1, 0.55657715, 0.55657715, 0.5565772, 0.23333333, 1, 0.55657715, 0.55657715, 0.55657715)
|
||||
tracks/3/type = "position_3d"
|
||||
tracks/3/imported = true
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Bear_fx_jump_smash")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = PackedFloat32Array(0, 1, 0, -0.51246816, 0)
|
||||
tracks/4/type = "scale_3d"
|
||||
tracks/4/imported = true
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Bear_fx_jump_smash")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = PackedFloat32Array(0, 1, 0, 0, 0)
|
||||
tracks/5/type = "position_3d"
|
||||
tracks/5/imported = true
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("Bear_fx_claw_attack_R")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = PackedFloat32Array(0, 1, -3.188013, 1.0970955, 1.7545929)
|
||||
tracks/6/type = "rotation_3d"
|
||||
tracks/6/imported = true
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("Bear_fx_claw_attack_R")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/7/type = "scale_3d"
|
||||
tracks/7/imported = true
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("Bear_fx_claw_attack_R")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = PackedFloat32Array(0, 1, 0, 0, 0)
|
||||
tracks/8/type = "position_3d"
|
||||
tracks/8/imported = true
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("Bear_fx_claw_attack_L")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = PackedFloat32Array(0, 1, -3.188013, 1.0970955, 1.7545929)
|
||||
tracks/9/type = "rotation_3d"
|
||||
tracks/9/imported = true
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("Bear_fx_claw_attack_L")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/10/type = "scale_3d"
|
||||
tracks/10/imported = true
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("Bear_fx_claw_attack_L")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = PackedFloat32Array(0, 1, 0, 0, 0)
|
||||
tracks/11/type = "method"
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("..")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = {
|
||||
"times": PackedFloat32Array(),
|
||||
"transitions": PackedFloat32Array(),
|
||||
"values": []
|
||||
}
|
||||
@@ -4,8 +4,9 @@ importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dk6xuwwa0mfpe"
|
||||
path.s3tc="res://.godot/imported/Arena_sand.png-416de2afe03241df088061e1a5f831af.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/Arena_sand.png-416de2afe03241df088061e1a5f831af.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
@@ -15,7 +16,7 @@ generator_parameters={
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Arena_sand.png"
|
||||
dest_files=["res://.godot/imported/Arena_sand.png-416de2afe03241df088061e1a5f831af.s3tc.ctex"]
|
||||
dest_files=["res://.godot/imported/Arena_sand.png-416de2afe03241df088061e1a5f831af.s3tc.ctex", "res://.godot/imported/Arena_sand.png-416de2afe03241df088061e1a5f831af.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
||||
@@ -4,8 +4,9 @@ importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b4gkpa7jypcsm"
|
||||
path.s3tc="res://.godot/imported/Arena_wall.png-e67bd4bbd2f60583bfc14dd8b7687eef.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/Arena_wall.png-e67bd4bbd2f60583bfc14dd8b7687eef.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
@@ -15,7 +16,7 @@ generator_parameters={
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Arena_wall.png"
|
||||
dest_files=["res://.godot/imported/Arena_wall.png-e67bd4bbd2f60583bfc14dd8b7687eef.s3tc.ctex"]
|
||||
dest_files=["res://.godot/imported/Arena_wall.png-e67bd4bbd2f60583bfc14dd8b7687eef.s3tc.ctex", "res://.godot/imported/Arena_wall.png-e67bd4bbd2f60583bfc14dd8b7687eef.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
||||
@@ -4,8 +4,9 @@ importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://yercpq3y2o0x"
|
||||
path.s3tc="res://.godot/imported/Arena_wood.png-b4ed20d66b4d375396b0be2f2f863d80.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/Arena_wood.png-b4ed20d66b4d375396b0be2f2f863d80.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
@@ -15,7 +16,7 @@ generator_parameters={
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Arena_wood.png"
|
||||
dest_files=["res://.godot/imported/Arena_wood.png-b4ed20d66b4d375396b0be2f2f863d80.s3tc.ctex"]
|
||||
dest_files=["res://.godot/imported/Arena_wood.png-b4ed20d66b4d375396b0be2f2f863d80.s3tc.ctex", "res://.godot/imported/Arena_wood.png-b4ed20d66b4d375396b0be2f2f863d80.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 1.3 MiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ch1wqha62vhtb"
|
||||
path="res://.godot/imported/IG_square.png-c38dd1a0a4601b6ff4ffec2910ed2ce0.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/IG_square.png"
|
||||
dest_files=["res://.godot/imported/IG_square.png-c38dd1a0a4601b6ff4ffec2910ed2ce0.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,13 +3,13 @@
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dxe72ig8gfbcg"
|
||||
path="res://.godot/imported/arena model2026.glb-299db01cae891e5005f8ac1e6c83d0a6.scn"
|
||||
uid="uid://cwmo5vh738x6w"
|
||||
path="res://.godot/imported/Lobby_level.glb-a7e896ecf7377d9530a80d5e63140cc3.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/arena model2026.glb"
|
||||
dest_files=["res://.godot/imported/arena model2026.glb-299db01cae891e5005f8ac1e6c83d0a6.scn"]
|
||||
source_file="res://Assets/Lobby_level.glb"
|
||||
dest_files=["res://.godot/imported/Lobby_level.glb-a7e896ecf7377d9530a80d5e63140cc3.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
|
After Width: | Height: | Size: 598 KiB |
@@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://xtv6u00w4nmy"
|
||||
path.s3tc="res://.godot/imported/Lobby_level_sand.png-bb70b0169c6b5159e020ce143afe9786.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/Lobby_level_sand.png-bb70b0169c6b5159e020ce143afe9786.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "c8b9b7d6205ce80dfcfaa38152b996fe"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Lobby_level_sand.png"
|
||||
dest_files=["res://.godot/imported/Lobby_level_sand.png-bb70b0169c6b5159e020ce143afe9786.s3tc.ctex", "res://.godot/imported/Lobby_level_sand.png-bb70b0169c6b5159e020ce143afe9786.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
|
After Width: | Height: | Size: 412 KiB |
@@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://csy5f3l5lufp5"
|
||||
path.s3tc="res://.godot/imported/Lobby_level_wall.png-39243638bfc6ea5742b6e2fdc927ae2c.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/Lobby_level_wall.png-39243638bfc6ea5742b6e2fdc927ae2c.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "0e7ed34c3c812d96732bd32f9dca0c93"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Lobby_level_wall.png"
|
||||
dest_files=["res://.godot/imported/Lobby_level_wall.png-39243638bfc6ea5742b6e2fdc927ae2c.s3tc.ctex", "res://.godot/imported/Lobby_level_wall.png-39243638bfc6ea5742b6e2fdc927ae2c.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
|
After Width: | Height: | Size: 180 KiB |
@@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ym5273astq46"
|
||||
path.s3tc="res://.godot/imported/Lobby_level_wood.png-4817792c09af3fd5e04ad29e0f9bd0ce.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/Lobby_level_wood.png-4817792c09af3fd5e04ad29e0f9bd0ce.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "23a7a951553ffe271c47693fd71314ca"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Lobby_level_wood.png"
|
||||
dest_files=["res://.godot/imported/Lobby_level_wood.png-4817792c09af3fd5e04ad29e0f9bd0ce.s3tc.ctex", "res://.godot/imported/Lobby_level_wood.png-4817792c09af3fd5e04ad29e0f9bd0ce.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
@@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dctmlh4hnuux1"
|
||||
path="res://.godot/imported/Lobby_underground.glb-55ed49331d7074ef560bfa0a498b89a7.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Lobby_underground.glb"
|
||||
dest_files=["res://.godot/imported/Lobby_underground.glb-55ed49331d7074ef560bfa0a498b89a7.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
|
After Width: | Height: | Size: 166 KiB |
@@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dc4gf36fgsabp"
|
||||
path.s3tc="res://.godot/imported/Lobby_underground_rock.png-76733dc5212e6c79a91e71ce008ebf6f.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/Lobby_underground_rock.png-76733dc5212e6c79a91e71ce008ebf6f.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "de3796fe2c1123ae5ba27a0532fda6bd"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Lobby_underground_rock.png"
|
||||
dest_files=["res://.godot/imported/Lobby_underground_rock.png-76733dc5212e6c79a91e71ce008ebf6f.s3tc.ctex", "res://.godot/imported/Lobby_underground_rock.png-76733dc5212e6c79a91e71ce008ebf6f.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
|
After Width: | Height: | Size: 47 KiB |
@@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://v0hdo12xule3"
|
||||
path.s3tc="res://.godot/imported/Lobby_underground_rock_B.jpg-c5e86461201f99688c8146fff239a62b.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/Lobby_underground_rock_B.jpg-c5e86461201f99688c8146fff239a62b.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "335b739e743244a64c47e2564a9a3652"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Lobby_underground_rock_B.jpg"
|
||||
dest_files=["res://.godot/imported/Lobby_underground_rock_B.jpg-c5e86461201f99688c8146fff239a62b.s3tc.ctex", "res://.godot/imported/Lobby_underground_rock_B.jpg-c5e86461201f99688c8146fff239a62b.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
|
After Width: | Height: | Size: 183 KiB |
@@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dcy7fdio5k84j"
|
||||
path.s3tc="res://.godot/imported/Lobby_underground_rock_B.png-3133a2540f4e1417fb5588bad79e38c8.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/Lobby_underground_rock_B.png-3133a2540f4e1417fb5588bad79e38c8.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "16ea5e4b01e9b3952b950ff65535e5d5"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Lobby_underground_rock_B.png"
|
||||
dest_files=["res://.godot/imported/Lobby_underground_rock_B.png-3133a2540f4e1417fb5588bad79e38c8.s3tc.ctex", "res://.godot/imported/Lobby_underground_rock_B.png-3133a2540f4e1417fb5588bad79e38c8.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
@@ -28,7 +28,7 @@ meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
meshes/force_disable_compression=true
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
[gd_scene format=3 uid="uid://by4ifsgxlv0gj"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bm6rmt3xprhjs" path="res://Assets/bear_level_arena.glb" id="1_beararena"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_floor"]
|
||||
|
||||
[node name="bear_level" type="Node3D" unique_id=2020009824]
|
||||
|
||||
[node name="Node3D" type="Node3D" parent="." unique_id=1366355859]
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Node3D" unique_id=721553462]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Node3D/StaticBody3D" unique_id=474515358]
|
||||
transform = Transform3D(30, 0, 0, 0, 1, 0, 0, 0, 30, 0, -0.5, 0)
|
||||
shape = SubResource("BoxShape3D_floor")
|
||||
|
||||
[node name="bear_level_arena" parent="." unique_id=948414670 instance=ExtResource("1_beararena")]
|
||||
transform = Transform3D(2.875, 0, 0, 0, 2.875, 0, 0, 0, 2.875, 0, 0, 0)
|
||||
|
||||
[node name="MatadorSpawner" type="Node3D" parent="." unique_id=1869467620]
|
||||
|
||||
[node name="Lights" type="Node3D" parent="." unique_id=1435665429]
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="Lights" unique_id=1814200565]
|
||||
transform = Transform3D(0.01535992, 0.56825536, -0.82270896, 0.16280846, 0.8104039, 0.56279576, 0.9865382, -0.14258848, -0.08006904, -4.08134, 9.197985, 0.97087634)
|
||||
light_energy = 0.4
|
||||
light_indirect_energy = 0.767
|
||||
shadow_blur = 0.47
|
||||
|
||||
[node name="SpotLight3D2" type="SpotLight3D" parent="Lights" unique_id=2071037822]
|
||||
transform = Transform3D(0.904133, 0.30962402, -0.2944087, 0.3084627, 0.0037425472, 0.9512291, 0.2956252, -0.95085174, -0.0921237, -3.629381, 10.86347, -2.0124264)
|
||||
light_energy = 16.0
|
||||
light_indirect_energy = 26.095
|
||||
distance_fade_enabled = true
|
||||
spot_range = 32.90586
|
||||
spot_angle = 73.93
|
||||
|
||||
[node name="SUN_DirectionalLight3D2" type="DirectionalLight3D" parent="Lights" unique_id=1003843933]
|
||||
transform = Transform3D(0.45811793, 0.34843865, -0.81775206, 0.5316611, 0.62986195, 0.56622505, 0.7123655, -0.69416475, 0.10329977, 0, 8.980043, 0)
|
||||
light_energy = 0.106
|
||||
shadow_enabled = true
|
||||
shadow_blur = 10.0
|
||||
@@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bm6rmt3xprhjs"
|
||||
path="res://.godot/imported/bear_level_arena.glb-b6a9df3b338c8b0345fe2642d8b715eb.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/bear_level_arena.glb"
|
||||
dest_files=["res://.godot/imported/bear_level_arena.glb-b6a9df3b338c8b0345fe2642d8b715eb.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
@@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dnltsqmuqcxh1"
|
||||
path="res://.godot/imported/Barrel.glb-8809615fbcbd5dc5b64a229316967555.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/breakables/Barrel.glb"
|
||||
dest_files=["res://.godot/imported/Barrel.glb-8809615fbcbd5dc5b64a229316967555.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
@@ -28,7 +28,7 @@ meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
meshes/force_disable_compression=true
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
|
||||
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ml0ntjv5injp"
|
||||
path="res://.godot/imported/bull_hud_bg.png-4645abe7114935a3d4a8e0f88ccce15c.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/bull_hud_bg.png"
|
||||
dest_files=["res://.godot/imported/bull_hud_bg.png-4645abe7114935a3d4a8e0f88ccce15c.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: 552 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dct1d88g015el"
|
||||
path="res://.godot/imported/kleeps_v2.png-55aa0dd25620611263a8b3000c5e2a49.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/kleeps_v2.png"
|
||||
dest_files=["res://.godot/imported/kleeps_v2.png-55aa0dd25620611263a8b3000c5e2a49.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: 3.5 MiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bh5nuyudh7x44"
|
||||
path="res://.godot/imported/loading_screen.png-253743b71eb7ab3f4f9e2b29cbabf407.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/loading_screen.png"
|
||||
dest_files=["res://.godot/imported/loading_screen.png-253743b71eb7ab3f4f9e2b29cbabf407.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
|
||||
@@ -0,0 +1,13 @@
|
||||
extends Node3D
|
||||
## Lobby geometry — watches the run state and raises the bear-gate grid once the arena has
|
||||
## been cleared. The DP flag stays as a designer override for testing the animation.
|
||||
|
||||
var bear_gate_open := false
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if bear_gate_open:
|
||||
return
|
||||
if Run.bear_gate_open() or DP.b("gate_unlocked_bear"):
|
||||
bear_gate_open = true
|
||||
$AnimationPlayer.play("Gate_opening")
|
||||
@@ -0,0 +1 @@
|
||||
uid://cwbf7jfkr8j10
|
||||
@@ -1,5 +0,0 @@
|
||||
extends Node3D
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
$AnimationPlayer.play("Taunt")
|
||||
@@ -1 +0,0 @@
|
||||
uid://bn3xwnlktwdlf
|
||||
@@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://jepc74w8opbu"
|
||||
path="res://.godot/imported/spear.glb-0139879d219c93f9dd35db2304db7d5d.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/spear.glb"
|
||||
dest_files=["res://.godot/imported/spear.glb-0139879d219c93f9dd35db2304db7d5d.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
@@ -0,0 +1,44 @@
|
||||
[gd_scene format=3 uid="uid://o8ocjfprxa7u"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cn7fhjkro7637" path="res://bear.gd" id="1_beargd"]
|
||||
[ext_resource type="PackedScene" uid="uid://cofv5dbavesis" path="res://Assets/Bear.glb" id="2_bearglb"]
|
||||
[ext_resource type="PackedScene" uid="uid://bdbx0wwa73rhp" path="res://Assets/fx/Bear_FX.glb" id="3_bearfx"]
|
||||
[ext_resource type="Material" uid="uid://blpkmyikjnhbo" path="res://Materials/M_bear_claw_fx.tres" id="4_clawfx"]
|
||||
[ext_resource type="PackedScene" path="res://BearAttackHitboxes.tscn" id="5_hitboxes"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_body"]
|
||||
radius = 1.0
|
||||
height = 2.4
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_hit"]
|
||||
radius = 1.3
|
||||
height = 2.7
|
||||
|
||||
[node name="Bear" type="CharacterBody3D" unique_id=1573237287]
|
||||
script = ExtResource("1_beargd")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=830443382]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2, 0)
|
||||
shape = SubResource("CapsuleShape3D_body")
|
||||
|
||||
[node name="HitArea" type="Area3D" parent="." unique_id=365327397]
|
||||
monitorable = false
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="HitArea" unique_id=2111867348]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.35, 0)
|
||||
shape = SubResource("CapsuleShape3D_hit")
|
||||
|
||||
[node name="bear_model" parent="." unique_id=359217823 instance=ExtResource("2_bearglb")]
|
||||
|
||||
[node name="Bear_FX" parent="bear_model" unique_id=2070553519 instance=ExtResource("3_bearfx")]
|
||||
|
||||
[node name="Bear_fx_claw_attack_R" parent="bear_model/Bear_FX" index="2" unique_id=1939248432]
|
||||
surface_material_override/0 = ExtResource("4_clawfx")
|
||||
|
||||
[node name="Bear_fx_claw_attack_L" parent="bear_model/Bear_FX" index="3" unique_id=834640978]
|
||||
surface_material_override/0 = ExtResource("4_clawfx")
|
||||
|
||||
[node name="AttackHitboxes" parent="bear_model" instance=ExtResource("5_hitboxes")]
|
||||
|
||||
[editable path="bear_model"]
|
||||
[editable path="bear_model/Bear_FX"]
|
||||
@@ -0,0 +1,319 @@
|
||||
[gd_scene format=3 uid="uid://o8ocjfprxa7u"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cn7fhjkro7637" path="res://bear.gd" id="1_beargd"]
|
||||
[ext_resource type="PackedScene" uid="uid://cofv5dbavesis" path="res://Assets/Bear.glb" id="2_bearglb"]
|
||||
[ext_resource type="Script" uid="uid://bsbed05ifr18s" path="res://bear_test_cube.gd" id="3_rog1v"]
|
||||
[ext_resource type="PackedScene" uid="uid://bdbx0wwa73rhp" path="res://Assets/fx/Bear_FX.glb" id="4_rog1v"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_body"]
|
||||
radius = 1.0
|
||||
height = 2.4
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_hit"]
|
||||
radius = 1.3
|
||||
height = 2.7
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_bfebr"]
|
||||
size = Vector3(6.2019043, 8.561401, 7.0739746)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_rog1v"]
|
||||
size = Vector3(14.399288, 51.902206, 5.741211)
|
||||
|
||||
[node name="Bear" type="CharacterBody3D" unique_id=1573237287]
|
||||
script = ExtResource("1_beargd")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=830443382]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2, 0)
|
||||
shape = SubResource("CapsuleShape3D_body")
|
||||
|
||||
[node name="HitArea" type="Area3D" parent="." unique_id=365327397]
|
||||
monitorable = false
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="HitArea" unique_id=2111867348]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.35, 0)
|
||||
shape = SubResource("CapsuleShape3D_hit")
|
||||
|
||||
[node name="bear_model" parent="." unique_id=359217823 instance=ExtResource("2_bearglb")]
|
||||
|
||||
[node name="test_cube" type="Node3D" parent="bear_model" unique_id=646988893]
|
||||
script = ExtResource("3_rog1v")
|
||||
|
||||
[node name="Bear_FX" parent="bear_model/test_cube" unique_id=1183391245 instance=ExtResource("4_rog1v")]
|
||||
|
||||
[node name="Bear_fx_jump_smash" parent="bear_model/test_cube/Bear_FX" index="0" unique_id=750478984]
|
||||
visible = false
|
||||
|
||||
[node name="Bear_fx_claw_attack_R" parent="bear_model/test_cube/Bear_FX" index="1" unique_id=88064381]
|
||||
visible = false
|
||||
|
||||
[node name="Bear_fx_claw_attack_L" parent="bear_model/test_cube/Bear_FX" index="2" unique_id=1378755061]
|
||||
visible = false
|
||||
|
||||
[node name="Bear_fx_smash_hit" parent="bear_model/test_cube/Bear_FX" index="3" unique_id=1711579105]
|
||||
transform = Transform3D(0.55488384, -0.039024748, -0.018949924, 0.041069064, 0.55086076, 0.06814586, 0.013977209, -0.06933683, 0.5520644, 1.327292, -0.21312934, 5.190573)
|
||||
|
||||
[node name="RigidBody3D" type="AnimatableBody3D" parent="bear_model/test_cube/Bear_FX/Bear_fx_smash_hit" index="0" unique_id=1764208051]
|
||||
transform = Transform3D(1.0000001, -1.21071935e-08, -1.8626451e-08, -9.313226e-10, 0.99999994, 7.450581e-09, 3.7252903e-09, -1.4901161e-08, 0.99999994, 0, 0, 0)
|
||||
collision_layer = 8
|
||||
collision_mask = 2
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="bear_model/test_cube/Bear_FX/Bear_fx_smash_hit/RigidBody3D" unique_id=1779197150]
|
||||
transform = Transform3D(0.99993557, -0.00749125, -0.010078691, 0.0077760145, 0.999569, 0.028562747, 0.009858355, -0.028639637, 0.9995405, -1.5136471, 0.9093375, 35.591957)
|
||||
shape = SubResource("BoxShape3D_bfebr")
|
||||
disabled = true
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="bear_model/test_cube/Bear_FX/Bear_fx_smash_hit/RigidBody3D" unique_id=1276552823]
|
||||
transform = Transform3D(0.9935104, -0.040698394, -0.10621016, -0.108634494, -0.06290151, -0.9920882, 0.03369555, 0.99719334, -0.06691426, -1.6357545, -0.5093044, 12.68803)
|
||||
shape = SubResource("BoxShape3D_rog1v")
|
||||
|
||||
[node name="Skeleton3D" parent="bear_model/bear-rig" parent_id_path=PackedInt32Array(359217823, 1017999212) index="0" unique_id=1624609914]
|
||||
bones/1/position = Vector3(0.00851878, 0.24701798, 1.2888045)
|
||||
bones/1/rotation = Quaternion(0.29791054, -0.060797628, -0.056875575, 0.9509564)
|
||||
bones/2/rotation = Quaternion(0.084239505, -0.026013458, 0.009274505, 0.9960628)
|
||||
bones/2/scale = Vector3(0.9999999, 1.0000008, 0.99999934)
|
||||
bones/3/rotation = Quaternion(-0.14812404, -0.039577905, 0.049865585, 0.98691756)
|
||||
bones/4/rotation = Quaternion(-0.40577498, -0.03082885, 0.05040324, 0.9120612)
|
||||
bones/5/rotation = Quaternion(0.27801633, 0.0014148077, 0.015671793, 0.96044755)
|
||||
bones/6/rotation = Quaternion(0.50370073, 0.13519946, -0.093789615, 0.8480627)
|
||||
bones/7/rotation = Quaternion(0.75079185, 0.54212743, -0.37154716, 0.06604591)
|
||||
bones/8/rotation = Quaternion(0.22344273, -0.32689556, 0.65874565, -0.63973963)
|
||||
bones/9/rotation = Quaternion(0.026405705, -0.27415153, -0.3226086, 0.9055757)
|
||||
bones/10/rotation = Quaternion(0.030285481, -0.31167626, -0.037417818, 0.94896823)
|
||||
bones/11/rotation = Quaternion(0.751943, -0.5788067, 0.30500817, 0.080837056)
|
||||
bones/12/rotation = Quaternion(0.28422552, 0.2936944, -0.68526876, -0.6027987)
|
||||
bones/13/rotation = Quaternion(0.020711409, 0.24585825, 0.3386082, 0.9080029)
|
||||
bones/14/rotation = Quaternion(0.098969, 0.19860524, -0.007872087, 0.97503805)
|
||||
bones/15/rotation = Quaternion(0.6979166, 0.16086513, -0.15598965, 0.680222)
|
||||
bones/16/rotation = Quaternion(0.89734674, 0.09874082, -0.25790086, 0.34424722)
|
||||
bones/17/rotation = Quaternion(-0.13802421, 0.26758972, 0.081159085, 0.9501359)
|
||||
bones/17/scale = Vector3(0.9999998, 1.0000002, 1)
|
||||
bones/19/rotation = Quaternion(-4.514978e-15, 1, 7.4505806e-08, -5.523351e-07)
|
||||
bones/20/rotation = Quaternion(-0.49266306, -0.27058616, 0.262383, 0.7843606)
|
||||
bones/21/rotation = Quaternion(0.0016915401, 0.70246154, -0.001669446, 0.7117178)
|
||||
bones/22/rotation = Quaternion(-0.5496364, -0.3220462, -0.22350304, 0.73772115)
|
||||
bones/22/scale = Vector3(0.9999997, 0.9999998, 0.9999999)
|
||||
bones/23/rotation = Quaternion(-0.00015351747, 0.902104, -0.4315187, 0.00032039074)
|
||||
bones/24/rotation = Quaternion(6.628114e-12, 0.99999994, 5.2154085e-08, -0.00035543842)
|
||||
bones/25/position = Vector3(1.0191536, 3.5353048, 3.5049686)
|
||||
bones/25/rotation = Quaternion(-0.087474234, 0.16733547, 0.98056763, 0.053239316)
|
||||
bones/25/scale = Vector3(1, 17.518272, 1.0000001)
|
||||
bones/26/position = Vector3(-1.0831825, 3.749937, 2.5891113)
|
||||
bones/26/rotation = Quaternion(0.016340872, 0.19671263, 0.9801456, 0.01875816)
|
||||
bones/26/scale = Vector3(1.0000001, 18.765795, 1)
|
||||
bones/27/position = Vector3(1.0193456, -0.43209565, 2.5343885)
|
||||
bones/27/rotation = Quaternion(0.61800283, -0.11976056, 0.11976072, 0.7677157)
|
||||
bones/27/scale = Vector3(0.99999994, 16.85072, 1)
|
||||
bones/28/position = Vector3(-0.8340287, 1.0348616, 1.282705)
|
||||
bones/28/rotation = Quaternion(0.82860446, -0.029359974, 0.02935981, 0.5582926)
|
||||
bones/28/scale = Vector3(0.99999994, 32.068844, 1)
|
||||
bones/30/position = Vector3(0.032563455, -0.8335703, -0.9236449)
|
||||
bones/30/rotation = Quaternion(-0.8670657, 0.042821795, -0.07139772, 0.4911883)
|
||||
bones/31/position = Vector3(2.3450447e-08, -1.4631646, 0.23291242)
|
||||
bones/31/rotation = Quaternion(-6.0737464e-09, 4.8699293e-09, -1.4618977e-09, 1)
|
||||
bones/31/scale = Vector3(0.99999994, 0.9999999, 0.99999994)
|
||||
bones/32/position = Vector3(-0.04394375, -1.087056, 0.096768975)
|
||||
bones/32/rotation = Quaternion(-0.8343034, 0.119118, -0.061490715, 0.5347595)
|
||||
bones/32/scale = Vector3(0.9999999, 0.99999976, 0.99999964)
|
||||
bones/33/position = Vector3(3.977649e-08, -1.4631644, 0.23291251)
|
||||
bones/33/rotation = Quaternion(-8.833673e-08, -2.419923e-08, -6.733043e-09, 1)
|
||||
bones/33/scale = Vector3(0.9999998, 0.9999998, 0.99999994)
|
||||
bones/35/position = Vector3(1.0184407e-08, -1.0594703, -5.9146995e-08)
|
||||
bones/35/rotation = Quaternion(0.99971783, 1.3593646e-07, 5.3695976e-06, -0.023754615)
|
||||
bones/35/scale = Vector3(0.99999976, 0.9999998, 1.0000012)
|
||||
bones/39/position = Vector3(0.8199172, 0.25251278, 0.47214246)
|
||||
bones/39/rotation = Quaternion(0.71402234, 0.34199142, 0.043267474, 0.60937834)
|
||||
bones/39/scale = Vector3(1.0000004, 0.9999996, 0.9999991)
|
||||
bones/40/rotation = Quaternion(0.9336719, 1.2799235e-07, 3.7337827e-08, 0.3581296)
|
||||
bones/40/scale = Vector3(1.0000004, 1.0000001, 1.0000001)
|
||||
bones/41/rotation = Quaternion(-0.13802455, 0.26758966, 0.08115916, 0.9501359)
|
||||
bones/41/scale = Vector3(0.99999946, 0.99999976, 0.9999996)
|
||||
bones/42/position = Vector3(-1.9729964e-07, 0.56145483, 7.283501e-08)
|
||||
bones/46/scale = Vector3(0.99999946, 0.99999964, 0.9999999)
|
||||
bones/48/rotation = Quaternion(-2.9741386e-07, 0.13593404, 1.01778824e-07, 0.9907179)
|
||||
bones/48/scale = Vector3(0.9999993, 0.9999996, 0.9999999)
|
||||
bones/50/scale = Vector3(0.99999994, 0.99999994, 0.9999998)
|
||||
bones/51/rotation = Quaternion(-2.5567479e-08, -0.20499781, -2.3086146e-08, 0.9787625)
|
||||
bones/51/scale = Vector3(0.9999999, 0.99999964, 0.99999964)
|
||||
bones/53/position = Vector3(-0.8199191, 0.25251284, 0.47213903)
|
||||
bones/53/rotation = Quaternion(-0.5351706, 0.35860845, -0.15898216, 0.74814254)
|
||||
bones/53/scale = Vector3(1, 0.99999875, 0.99999946)
|
||||
bones/54/rotation = Quaternion(0.0023762286, -4.7362324e-08, -6.475868e-08, 0.9999972)
|
||||
bones/55/rotation = Quaternion(-0.54963607, -0.322046, -0.22350314, 0.73772144)
|
||||
bones/55/scale = Vector3(1.0000002, 1, 1.0000002)
|
||||
bones/56/position = Vector3(0.0013532753, 0.57868266, 0.05537574)
|
||||
bones/56/rotation = Quaternion(-0.00015348212, 0.90210384, -0.43151882, 0.0003204293)
|
||||
bones/57/rotation = Quaternion(0.70073944, -0.70073956, -0.094679825, -0.09467953)
|
||||
bones/60/scale = Vector3(1.0000004, 1.0000004, 1.0000002)
|
||||
bones/62/rotation = Quaternion(-1.7092354e-08, -0.18223058, 2.6700846e-08, 0.98325586)
|
||||
bones/62/scale = Vector3(1.0000002, 1.0000002, 1.0000001)
|
||||
bones/64/scale = Vector3(1.0000004, 1.0000004, 1)
|
||||
bones/65/rotation = Quaternion(-1.0345744e-08, -0.3796584, -4.0675246e-08, 0.9251268)
|
||||
bones/65/scale = Vector3(1.0000002, 1.0000004, 1.0000004)
|
||||
bones/67/rotation = Quaternion(0.7179022, -7.671307e-07, 7.885642e-07, 0.696144)
|
||||
bones/67/scale = Vector3(1.0000004, 0.9999986, 0.99999994)
|
||||
bones/68/rotation = Quaternion(0.9776482, 2.0029378e-07, 1.0460874e-06, -0.2102479)
|
||||
bones/68/scale = Vector3(1.0000004, 1.0000004, 0.9999982)
|
||||
bones/69/position = Vector3(-2.4645832e-08, -6.861796e-09, 7.455772e-08)
|
||||
bones/69/rotation = Quaternion(-0.8315212, 2.5276703e-08, -9.3330055e-09, 0.5554931)
|
||||
bones/69/scale = Vector3(1, 1.0000001, 1.0000002)
|
||||
bones/70/rotation = Quaternion(0.67750055, 8.820757e-08, 7.575834e-08, 0.7355223)
|
||||
bones/70/scale = Vector3(1, 1, 1)
|
||||
bones/71/scale = Vector3(0.9999999, 1, 0.9999999)
|
||||
bones/72/rotation = Quaternion(-2.1641608e-07, -4.6565607e-10, -4.6576065e-10, 1)
|
||||
bones/75/rotation = Quaternion(-0.34314692, -0.20321459, -0.2785586, 0.8737043)
|
||||
bones/76/position = Vector3(1.01587794e-07, -1.5306958e-07, -4.3554866e-07)
|
||||
bones/76/rotation = Quaternion(-0.51764834, -7.167482e-08, 1.7163823e-07, 0.85559356)
|
||||
bones/77/rotation = Quaternion(0.93367195, 1.2110854e-07, 3.8556042e-08, 0.35812962)
|
||||
bones/78/position = Vector3(0.8199172, 0.25251257, 0.47214243)
|
||||
bones/78/rotation = Quaternion(0.6979164, 0.16086517, -0.15598962, 0.6802223)
|
||||
bones/78/scale = Vector3(1.0000004, 0.9999997, 0.99999905)
|
||||
bones/80/rotation = Quaternion(0.7179022, -7.6713064e-07, 7.885641e-07, 0.696144)
|
||||
bones/80/scale = Vector3(1.0000004, 0.9999986, 0.99999994)
|
||||
bones/81/rotation = Quaternion(0.97764814, 1.9846473e-07, 1.0426893e-06, -0.21024783)
|
||||
bones/81/scale = Vector3(1.0000004, 1.0000002, 0.9999982)
|
||||
bones/82/position = Vector3(6.103571e-08, 8.8816435e-08, -3.6955274e-09)
|
||||
bones/82/rotation = Quaternion(-0.8315211, 2.3407136e-08, -1.2821512e-08, 0.5554932)
|
||||
bones/82/scale = Vector3(0.99999994, 0.99999994, 1)
|
||||
bones/83/rotation = Quaternion(0.6775009, -8.600083e-08, -8.977273e-08, 0.735522)
|
||||
bones/83/scale = Vector3(1, 1.0000001, 1)
|
||||
bones/84/scale = Vector3(0.99999994, 1.0000001, 0.9999999)
|
||||
bones/85/rotation = Quaternion(2.6833732e-07, -9.313788e-10, -2.5612494e-09, 1)
|
||||
bones/85/scale = Vector3(1.0000001, 1, 1.0000001)
|
||||
bones/87/rotation = Quaternion(-0.5230753, 0.20132942, 0.026226493, 0.8277505)
|
||||
bones/88/rotation = Quaternion(0.61967987, 0.23118778, 0.3169036, 0.679795)
|
||||
bones/89/position = Vector3(2.953037e-07, 4.9207458e-08, -4.3015167e-08)
|
||||
bones/89/rotation = Quaternion(-0.001144886, -2.973514e-08, 2.817069e-08, 0.9999994)
|
||||
bones/90/rotation = Quaternion(0.0023764072, -4.0769752e-08, -7.0690255e-08, 0.99999726)
|
||||
bones/91/position = Vector3(-0.8199192, 0.2525128, 0.47213912)
|
||||
bones/91/rotation = Quaternion(-0.49266297, -0.27058598, 0.2623832, 0.78436047)
|
||||
bones/91/scale = Vector3(1.0000002, 0.999999, 0.99999964)
|
||||
bones/96/position = Vector3(-0.021971898, -1.2751104, 0.16484088)
|
||||
bones/96/rotation = Quaternion(-0.47603267, 0.067788206, -0.035077166, 0.8761091)
|
||||
bones/96/scale = Vector3(0.9999999, 0.9999999, 0.99999976)
|
||||
bones/97/rotation = Quaternion(0.997074, -1.2813135e-07, 1.666339e-06, -0.07644201)
|
||||
bones/98/position = Vector3(0.01993539, 0.08757691, 0.045667563)
|
||||
bones/98/rotation = Quaternion(0.1475291, 0.03397043, -0.019923227, 0.9882734)
|
||||
bones/98/scale = Vector3(1, 1.0000011, 1.0000023)
|
||||
bones/101/position = Vector3(-0.021972047, 0.8282039, 0.0959422)
|
||||
bones/101/rotation = Quaternion(0.8371564, 0.04015539, 0.06490996, 0.5416119)
|
||||
bones/101/scale = Vector3(1, 1.0000066, 0.99998474)
|
||||
bones/102/rotation = Quaternion(0.95545256, -6.924111e-08, 2.2887033e-07, -0.29514462)
|
||||
bones/103/position = Vector3(0.17285576, 0.72785676, 1.0822707)
|
||||
bones/103/rotation = Quaternion(0.27801546, 0.0014157619, 0.015671493, 0.9604477)
|
||||
bones/103/scale = Vector3(1.0000002, 1.000013, 1.0000246)
|
||||
bones/104/rotation = Quaternion(0.5037003, 0.13519715, -0.093790196, 0.84806323)
|
||||
bones/104/scale = Vector3(1.0000721, 1.0000457, 0.99993384)
|
||||
bones/105/rotation = Quaternion(0.97757924, -0.053521663, -0.054415643, -0.19624804)
|
||||
bones/105/scale = Vector3(1.0000001, 1.0000083, 1.0000036)
|
||||
bones/106/position = Vector3(0.023142539, -0.54231995, -0.9607401)
|
||||
bones/106/rotation = Quaternion(0.99272084, -0.08158898, -0.03307842, -0.08218607)
|
||||
bones/107/rotation = Quaternion(0.903578, -0.12777254, -0.05477002, -0.4052421)
|
||||
bones/107/scale = Vector3(0.9999992, 0.9999624, 1.0000123)
|
||||
bones/108/position = Vector3(-1.1340098e-08, 7.923448e-07, 9.0939814e-08)
|
||||
bones/108/rotation = Quaternion(0.98967296, 0.0031370325, 0.10343237, -0.09919364)
|
||||
bones/110/rotation = Quaternion(9.815354e-07, 7.072085e-10, -9.586452e-08, 1)
|
||||
bones/110/scale = Vector3(0.99999994, 0.99999976, 1.0000001)
|
||||
bones/113/position = Vector3(0.07716276, 0.6410925, 0.71644557)
|
||||
bones/113/rotation = Quaternion(0.75079244, 0.54212654, -0.3715475, 0.0660462)
|
||||
bones/114/position = Vector3(-0.031743176, 0.60466695, -0.39704067)
|
||||
bones/114/rotation = Quaternion(0.4176498, -0.11118397, 0.55639553, -0.70966953)
|
||||
bones/114/scale = Vector3(1.0000015, 1.0000038, 1.0000079)
|
||||
bones/115/rotation = Quaternion(-0.07547326, 0.02173067, -0.31477332, 0.945912)
|
||||
bones/115/scale = Vector3(0.9999974, 1.0000036, 0.99999976)
|
||||
bones/116/rotation = Quaternion(0.03028559, -0.3116764, -0.037417784, 0.9489682)
|
||||
bones/116/scale = Vector3(1.0000005, 0.9999972, 1.0000013)
|
||||
bones/119/scale = Vector3(1.0000043, 0.9999975, 0.99999744)
|
||||
bones/121/rotation = Quaternion(-4.820391e-08, -0.1579088, -2.0880496e-08, 0.98745376)
|
||||
bones/121/scale = Vector3(1.0000037, 0.99999774, 0.9999977)
|
||||
bones/123/scale = Vector3(1.000003, 0.9999977, 0.99999917)
|
||||
bones/124/rotation = Quaternion(-3.1036683e-07, 0.17317644, 6.989145e-08, 0.9848908)
|
||||
bones/124/scale = Vector3(1.0000037, 0.9999978, 0.99999875)
|
||||
bones/126/rotation = Quaternion(-0.5163543, -0.16816929, 0.6340875, 0.550482)
|
||||
bones/126/scale = Vector3(1.0000015, 1.000007, 1.000004)
|
||||
bones/127/rotation = Quaternion(-0.24332331, 0.12663932, 0.6612194, 0.6982444)
|
||||
bones/127/scale = Vector3(1.0000017, 1.0000014, 1.0000097)
|
||||
bones/128/position = Vector3(-0.008928956, 0.128764, -0.06877987)
|
||||
bones/128/rotation = Quaternion(0.025037244, 0.39930493, -0.88358396, 0.24332726)
|
||||
bones/129/rotation = Quaternion(-0.07547334, 0.021730714, -0.31477335, 0.94591194)
|
||||
bones/131/rotation = Quaternion(-0.41802245, -0.28161782, 0.08442414, 0.85954714)
|
||||
bones/132/rotation = Quaternion(-0.5281791, -0.34319904, -0.62196887, -0.46518382)
|
||||
bones/133/rotation = Quaternion(-0.012777329, 0.011854946, 0.00015161165, 0.9998482)
|
||||
bones/133/scale = Vector3(1.0423008, 1.0423008, 1.0423006)
|
||||
bones/134/rotation = Quaternion(0.02152103, -3.688601e-08, -1.5255387e-07, 0.99976844)
|
||||
bones/134/scale = Vector3(0.9882629, 0.9882634, 0.98826265)
|
||||
bones/135/position = Vector3(-0.0317431, 0.60466677, -0.39704087)
|
||||
bones/135/rotation = Quaternion(0.22344373, -0.32689255, 0.658746, -0.6397405)
|
||||
bones/135/scale = Vector3(1.0000048, 1.0000036, 1.0000046)
|
||||
bones/137/position = Vector3(-0.33244255, 0.70370555, 0.67530614)
|
||||
bones/137/rotation = Quaternion(0.7519437, -0.5788053, 0.30500948, 0.08083551)
|
||||
bones/138/position = Vector3(-0.19594865, 0.65740275, -0.22511396)
|
||||
bones/138/rotation = Quaternion(0.36201134, 0.22157827, -0.6475769, -0.63284683)
|
||||
bones/138/scale = Vector3(1.0000019, 1.0000045, 1.0000057)
|
||||
bones/139/rotation = Quaternion(-0.018797327, 0.13857716, 0.33871746, 0.9304373)
|
||||
bones/139/scale = Vector3(0.9999983, 1.0000024, 0.9999992)
|
||||
bones/140/rotation = Quaternion(0.09896898, 0.1986053, -0.00787212, 0.975038)
|
||||
bones/140/scale = Vector3(1.0000031, 0.9999977, 0.9999988)
|
||||
bones/143/scale = Vector3(1.000005, 0.99999815, 0.9999967)
|
||||
bones/145/rotation = Quaternion(-1.7910523e-07, 0.10005118, -9.714451e-08, 0.9949823)
|
||||
bones/145/scale = Vector3(1.0000045, 0.99999803, 0.9999968)
|
||||
bones/147/scale = Vector3(1.0000035, 0.99999845, 0.9999981)
|
||||
bones/148/rotation = Quaternion(2.0844507e-07, 0.011625211, 4.5709146e-07, 0.9999325)
|
||||
bones/148/scale = Vector3(1.000004, 0.9999991, 0.999998)
|
||||
bones/150/rotation = Quaternion(-0.51635444, 0.16816957, -0.63408744, 0.55048186)
|
||||
bones/150/scale = Vector3(1.000001, 1.0000067, 1.000004)
|
||||
bones/151/rotation = Quaternion(-0.24332346, -0.12663896, -0.6612195, 0.6982443)
|
||||
bones/151/scale = Vector3(1.0000011, 1.0000017, 1.0000095)
|
||||
bones/152/position = Vector3(0.027921734, -0.124764316, 0.07102555)
|
||||
bones/152/rotation = Quaternion(-0.12973516, 0.47151387, -0.86254627, -0.12983702)
|
||||
bones/153/rotation = Quaternion(-0.018797398, 0.13857722, 0.33871746, 0.9304373)
|
||||
bones/155/rotation = Quaternion(-0.36541468, 0.16190512, -0.07102372, 0.91390073)
|
||||
bones/155/scale = Vector3(0.99999994, 1, 0.9999998)
|
||||
bones/156/rotation = Quaternion(0.68045896, -0.19169958, -0.3896983, 0.59022206)
|
||||
bones/157/rotation = Quaternion(-0.01277751, -0.011854968, -0.0001513001, 0.9998481)
|
||||
bones/157/scale = Vector3(1.0423003, 1.0422994, 1.0423005)
|
||||
bones/158/rotation = Quaternion(0.021521209, -2.5687226e-07, -2.570953e-07, 0.9997684)
|
||||
bones/158/scale = Vector3(0.9882631, 0.98826426, 0.9882618)
|
||||
bones/159/position = Vector3(-0.19594839, 0.65740275, -0.2251139)
|
||||
bones/159/rotation = Quaternion(0.28422734, 0.29369113, -0.68527013, -0.60279787)
|
||||
bones/159/scale = Vector3(1.0000027, 1.0000043, 1.0000049)
|
||||
bones/161/position = Vector3(0.07716276, 0.6410925, 0.71644557)
|
||||
bones/161/rotation = Quaternion(0.75079244, 0.54212654, -0.3715475, 0.0660462)
|
||||
bones/162/position = Vector3(-0.33244255, 0.70370555, 0.67530614)
|
||||
bones/162/rotation = Quaternion(0.7519437, -0.5788053, 0.30500948, 0.08083551)
|
||||
bones/165/position = Vector3(-1.5017577e-08, 0.26895812, -1.6243575e-08)
|
||||
bones/165/rotation = Quaternion(-0.019247467, -0.20323175, 0.97894067, -0.0012537595)
|
||||
bones/166/position = Vector3(0.0034187725, -3.131728, 0.9674823)
|
||||
bones/167/position = Vector3(0.209171, 5.0901713, -2.6670303)
|
||||
bones/167/rotation = Quaternion(0.16656846, 0.015223213, 0.18356222, 0.9686734)
|
||||
bones/167/scale = Vector3(0.9999988, 0.9999987, 1.0000023)
|
||||
bones/168/position = Vector3(0.18381567, -0.9622623, 0.9894084)
|
||||
bones/168/rotation = Quaternion(0.9362244, -6.2652596e-08, -0.34127164, -0.083770975)
|
||||
bones/168/scale = Vector3(1.0000011, 1.0000015, 1.0000101)
|
||||
bones/170/position = Vector3(0.748137, 0.69556385, 3.7252903e-09)
|
||||
bones/170/rotation = Quaternion(0.019250846, -0.20323181, 0.9789406, 0.001253055)
|
||||
bones/171/position = Vector3(0.6322718, -2.6572587, 0.6064028)
|
||||
bones/172/position = Vector3(-1.5122895, 4.4686184, -2.7014794)
|
||||
bones/172/rotation = Quaternion(0.21553025, -0.03620148, 0.11066054, 0.9695311)
|
||||
bones/172/scale = Vector3(0.99999887, 0.9999985, 1.0000024)
|
||||
bones/173/position = Vector3(0.18381546, -0.96226203, 0.9894083)
|
||||
bones/173/rotation = Quaternion(0.93622434, -2.9748788e-08, 0.34127158, -0.083771475)
|
||||
bones/173/scale = Vector3(0.999999, 1.0000014, 0.99999464)
|
||||
bones/175/position = Vector3(0.2542465, -2.2077389, 0.9589075)
|
||||
bones/175/rotation = Quaternion(-0.008919476, -0.00021326332, -0.000697989, 0.99996)
|
||||
bones/183/position = Vector3(-1.982537e-07, 5.9604563e-08, -1.517833e-08)
|
||||
bones/185/rotation = Quaternion(5.4077844e-07, -0.20349081, 0.97907686, -1.12395135e-07)
|
||||
bones/186/position = Vector3(0.57634556, 3.7607954, 0.15364014)
|
||||
bones/186/rotation = Quaternion(-0.9604305, -0.020206233, -0.08076539, -0.26578543)
|
||||
bones/186/scale = Vector3(0.9999997, 0.99999994, 1)
|
||||
bones/187/rotation = Quaternion(0.15451065, -2.0305349e-09, -2.0850066e-09, 0.9879911)
|
||||
bones/187/scale = Vector3(1.0000002, 0.99999994, 0.9999999)
|
||||
bones/197/position = Vector3(-0.0011225368, -0.015787723, -0.051779967)
|
||||
bones/199/rotation = Quaternion(0.00034800146, -0.20349097, 0.9790768, -7.2328476e-05)
|
||||
bones/200/position = Vector3(-1.0407574, 3.6267605, -0.083099455)
|
||||
bones/200/rotation = Quaternion(-0.9604305, -0.020206233, -0.08076539, -0.26578543)
|
||||
bones/200/scale = Vector3(0.9999997, 0.99999994, 1)
|
||||
bones/201/rotation = Quaternion(0.15451066, -1.9585848e-09, -2.5450761e-09, 0.9879911)
|
||||
bones/201/scale = Vector3(1.0000002, 0.99999994, 0.99999994)
|
||||
|
||||
[editable path="bear_model"]
|
||||
[editable path="bear_model/test_cube/Bear_FX"]
|
||||
@@ -0,0 +1,319 @@
|
||||
[gd_scene format=3 uid="uid://o8ocjfprxa7u"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cn7fhjkro7637" path="res://bear.gd" id="1_beargd"]
|
||||
[ext_resource type="PackedScene" uid="uid://cofv5dbavesis" path="res://Assets/Bear.glb" id="2_bearglb"]
|
||||
[ext_resource type="Script" uid="uid://bsbed05ifr18s" path="res://bear_test_cube.gd" id="3_rog1v"]
|
||||
[ext_resource type="PackedScene" uid="uid://bdbx0wwa73rhp" path="res://Assets/fx/Bear_FX.glb" id="4_rog1v"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_body"]
|
||||
radius = 1.0
|
||||
height = 2.4
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_hit"]
|
||||
radius = 1.3
|
||||
height = 2.7
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_bfebr"]
|
||||
size = Vector3(6.2019043, 8.561401, 7.0739746)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_rog1v"]
|
||||
size = Vector3(14.399288, 51.902206, 5.741211)
|
||||
|
||||
[node name="Bear" type="CharacterBody3D" unique_id=1573237287]
|
||||
script = ExtResource("1_beargd")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=830443382]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2, 0)
|
||||
shape = SubResource("CapsuleShape3D_body")
|
||||
|
||||
[node name="HitArea" type="Area3D" parent="." unique_id=365327397]
|
||||
monitorable = false
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="HitArea" unique_id=2111867348]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.35, 0)
|
||||
shape = SubResource("CapsuleShape3D_hit")
|
||||
|
||||
[node name="bear_model" parent="." unique_id=359217823 instance=ExtResource("2_bearglb")]
|
||||
|
||||
[node name="test_cube" type="Node3D" parent="bear_model" unique_id=646988893]
|
||||
script = ExtResource("3_rog1v")
|
||||
|
||||
[node name="Bear_FX" parent="bear_model/test_cube" unique_id=1183391245 instance=ExtResource("4_rog1v")]
|
||||
|
||||
[node name="Bear_fx_jump_smash" parent="bear_model/test_cube/Bear_FX" index="0" unique_id=750478984]
|
||||
visible = false
|
||||
|
||||
[node name="Bear_fx_claw_attack_R" parent="bear_model/test_cube/Bear_FX" index="1" unique_id=88064381]
|
||||
visible = false
|
||||
|
||||
[node name="Bear_fx_claw_attack_L" parent="bear_model/test_cube/Bear_FX" index="2" unique_id=1378755061]
|
||||
visible = false
|
||||
|
||||
[node name="Bear_fx_smash_hit" parent="bear_model/test_cube/Bear_FX" index="3" unique_id=1711579105]
|
||||
transform = Transform3D(0.55488384, -0.039024748, -0.018949924, 0.041069064, 0.55086076, 0.06814586, 0.013977209, -0.06933683, 0.5520644, 1.327292, -0.21312934, 5.190573)
|
||||
|
||||
[node name="RigidBody3D" type="AnimatableBody3D" parent="bear_model/test_cube/Bear_FX/Bear_fx_smash_hit" index="0" unique_id=1764208051]
|
||||
transform = Transform3D(1.0000001, -1.21071935e-08, -1.8626451e-08, -9.313226e-10, 0.99999994, 7.450581e-09, 3.7252903e-09, -1.4901161e-08, 0.99999994, 0, 0, 0)
|
||||
collision_layer = 8
|
||||
collision_mask = 2
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="bear_model/test_cube/Bear_FX/Bear_fx_smash_hit/RigidBody3D" unique_id=1779197150]
|
||||
transform = Transform3D(0.99993557, -0.00749125, -0.010078691, 0.0077760145, 0.999569, 0.028562747, 0.009858355, -0.028639637, 0.9995405, -1.5136471, 0.9093375, 35.591957)
|
||||
shape = SubResource("BoxShape3D_bfebr")
|
||||
disabled = true
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="bear_model/test_cube/Bear_FX/Bear_fx_smash_hit/RigidBody3D" unique_id=1276552823]
|
||||
transform = Transform3D(0.9935104, -0.040698394, -0.10621016, -0.108634494, -0.06290151, -0.9920882, 0.03369555, 0.99719334, -0.06691426, -1.6357545, -0.5093044, 12.68803)
|
||||
shape = SubResource("BoxShape3D_rog1v")
|
||||
|
||||
[node name="Skeleton3D" parent="bear_model/bear-rig" parent_id_path=PackedInt32Array(359217823, 1017999212) index="0" unique_id=1624609914]
|
||||
bones/1/position = Vector3(0.00851878, 0.24701798, 1.2888045)
|
||||
bones/1/rotation = Quaternion(0.29791054, -0.060797628, -0.056875575, 0.9509564)
|
||||
bones/2/rotation = Quaternion(0.084239505, -0.026013458, 0.009274505, 0.9960628)
|
||||
bones/2/scale = Vector3(0.9999999, 1.0000008, 0.99999934)
|
||||
bones/3/rotation = Quaternion(-0.14812404, -0.039577905, 0.049865585, 0.98691756)
|
||||
bones/4/rotation = Quaternion(-0.40577498, -0.03082885, 0.05040324, 0.9120612)
|
||||
bones/5/rotation = Quaternion(0.27801633, 0.0014148077, 0.015671793, 0.96044755)
|
||||
bones/6/rotation = Quaternion(0.50370073, 0.13519946, -0.093789615, 0.8480627)
|
||||
bones/7/rotation = Quaternion(0.75079185, 0.54212743, -0.37154716, 0.06604591)
|
||||
bones/8/rotation = Quaternion(0.22344273, -0.32689556, 0.65874565, -0.63973963)
|
||||
bones/9/rotation = Quaternion(0.026405705, -0.27415153, -0.3226086, 0.9055757)
|
||||
bones/10/rotation = Quaternion(0.030285481, -0.31167626, -0.037417818, 0.94896823)
|
||||
bones/11/rotation = Quaternion(0.751943, -0.5788067, 0.30500817, 0.080837056)
|
||||
bones/12/rotation = Quaternion(0.28422552, 0.2936944, -0.68526876, -0.6027987)
|
||||
bones/13/rotation = Quaternion(0.020711409, 0.24585825, 0.3386082, 0.9080029)
|
||||
bones/14/rotation = Quaternion(0.098969, 0.19860524, -0.007872087, 0.97503805)
|
||||
bones/15/rotation = Quaternion(0.6979166, 0.16086513, -0.15598965, 0.680222)
|
||||
bones/16/rotation = Quaternion(0.89734674, 0.09874082, -0.25790086, 0.34424722)
|
||||
bones/17/rotation = Quaternion(-0.13802421, 0.26758972, 0.081159085, 0.9501359)
|
||||
bones/17/scale = Vector3(0.9999998, 1.0000002, 1)
|
||||
bones/19/rotation = Quaternion(-4.514978e-15, 1, 7.4505806e-08, -5.523351e-07)
|
||||
bones/20/rotation = Quaternion(-0.49266306, -0.27058616, 0.262383, 0.7843606)
|
||||
bones/21/rotation = Quaternion(0.0016915401, 0.70246154, -0.001669446, 0.7117178)
|
||||
bones/22/rotation = Quaternion(-0.5496364, -0.3220462, -0.22350304, 0.73772115)
|
||||
bones/22/scale = Vector3(0.9999997, 0.9999998, 0.9999999)
|
||||
bones/23/rotation = Quaternion(-0.00015351747, 0.902104, -0.4315187, 0.00032039074)
|
||||
bones/24/rotation = Quaternion(6.628114e-12, 0.99999994, 5.2154085e-08, -0.00035543842)
|
||||
bones/25/position = Vector3(1.0191536, 3.5353048, 3.5049686)
|
||||
bones/25/rotation = Quaternion(-0.087474234, 0.16733547, 0.98056763, 0.053239316)
|
||||
bones/25/scale = Vector3(1, 17.518272, 1.0000001)
|
||||
bones/26/position = Vector3(-1.0831825, 3.749937, 2.5891113)
|
||||
bones/26/rotation = Quaternion(0.016340872, 0.19671263, 0.9801456, 0.01875816)
|
||||
bones/26/scale = Vector3(1.0000001, 18.765795, 1)
|
||||
bones/27/position = Vector3(1.0193456, -0.43209565, 2.5343885)
|
||||
bones/27/rotation = Quaternion(0.61800283, -0.11976056, 0.11976072, 0.7677157)
|
||||
bones/27/scale = Vector3(0.99999994, 16.85072, 1)
|
||||
bones/28/position = Vector3(-0.8340287, 1.0348616, 1.282705)
|
||||
bones/28/rotation = Quaternion(0.82860446, -0.029359974, 0.02935981, 0.5582926)
|
||||
bones/28/scale = Vector3(0.99999994, 32.068844, 1)
|
||||
bones/30/position = Vector3(0.032563455, -0.8335703, -0.9236449)
|
||||
bones/30/rotation = Quaternion(-0.8670657, 0.042821795, -0.07139772, 0.4911883)
|
||||
bones/31/position = Vector3(2.3450447e-08, -1.4631646, 0.23291242)
|
||||
bones/31/rotation = Quaternion(-6.0737464e-09, 4.8699293e-09, -1.4618977e-09, 1)
|
||||
bones/31/scale = Vector3(0.99999994, 0.9999999, 0.99999994)
|
||||
bones/32/position = Vector3(-0.04394375, -1.087056, 0.096768975)
|
||||
bones/32/rotation = Quaternion(-0.8343034, 0.119118, -0.061490715, 0.5347595)
|
||||
bones/32/scale = Vector3(0.9999999, 0.99999976, 0.99999964)
|
||||
bones/33/position = Vector3(3.977649e-08, -1.4631644, 0.23291251)
|
||||
bones/33/rotation = Quaternion(-8.833673e-08, -2.419923e-08, -6.733043e-09, 1)
|
||||
bones/33/scale = Vector3(0.9999998, 0.9999998, 0.99999994)
|
||||
bones/35/position = Vector3(1.0184407e-08, -1.0594703, -5.9146995e-08)
|
||||
bones/35/rotation = Quaternion(0.99971783, 1.3593646e-07, 5.3695976e-06, -0.023754615)
|
||||
bones/35/scale = Vector3(0.99999976, 0.9999998, 1.0000012)
|
||||
bones/39/position = Vector3(0.8199172, 0.25251278, 0.47214246)
|
||||
bones/39/rotation = Quaternion(0.71402234, 0.34199142, 0.043267474, 0.60937834)
|
||||
bones/39/scale = Vector3(1.0000004, 0.9999996, 0.9999991)
|
||||
bones/40/rotation = Quaternion(0.9336719, 1.2799235e-07, 3.7337827e-08, 0.3581296)
|
||||
bones/40/scale = Vector3(1.0000004, 1.0000001, 1.0000001)
|
||||
bones/41/rotation = Quaternion(-0.13802455, 0.26758966, 0.08115916, 0.9501359)
|
||||
bones/41/scale = Vector3(0.99999946, 0.99999976, 0.9999996)
|
||||
bones/42/position = Vector3(-1.9729964e-07, 0.56145483, 7.283501e-08)
|
||||
bones/46/scale = Vector3(0.99999946, 0.99999964, 0.9999999)
|
||||
bones/48/rotation = Quaternion(-2.9741386e-07, 0.13593404, 1.01778824e-07, 0.9907179)
|
||||
bones/48/scale = Vector3(0.9999993, 0.9999996, 0.9999999)
|
||||
bones/50/scale = Vector3(0.99999994, 0.99999994, 0.9999998)
|
||||
bones/51/rotation = Quaternion(-2.5567479e-08, -0.20499781, -2.3086146e-08, 0.9787625)
|
||||
bones/51/scale = Vector3(0.9999999, 0.99999964, 0.99999964)
|
||||
bones/53/position = Vector3(-0.8199191, 0.25251284, 0.47213903)
|
||||
bones/53/rotation = Quaternion(-0.5351706, 0.35860845, -0.15898216, 0.74814254)
|
||||
bones/53/scale = Vector3(1, 0.99999875, 0.99999946)
|
||||
bones/54/rotation = Quaternion(0.0023762286, -4.7362324e-08, -6.475868e-08, 0.9999972)
|
||||
bones/55/rotation = Quaternion(-0.54963607, -0.322046, -0.22350314, 0.73772144)
|
||||
bones/55/scale = Vector3(1.0000002, 1, 1.0000002)
|
||||
bones/56/position = Vector3(0.0013532753, 0.57868266, 0.05537574)
|
||||
bones/56/rotation = Quaternion(-0.00015348212, 0.90210384, -0.43151882, 0.0003204293)
|
||||
bones/57/rotation = Quaternion(0.70073944, -0.70073956, -0.094679825, -0.09467953)
|
||||
bones/60/scale = Vector3(1.0000004, 1.0000004, 1.0000002)
|
||||
bones/62/rotation = Quaternion(-1.7092354e-08, -0.18223058, 2.6700846e-08, 0.98325586)
|
||||
bones/62/scale = Vector3(1.0000002, 1.0000002, 1.0000001)
|
||||
bones/64/scale = Vector3(1.0000004, 1.0000004, 1)
|
||||
bones/65/rotation = Quaternion(-1.0345744e-08, -0.3796584, -4.0675246e-08, 0.9251268)
|
||||
bones/65/scale = Vector3(1.0000002, 1.0000004, 1.0000004)
|
||||
bones/67/rotation = Quaternion(0.7179022, -7.671307e-07, 7.885642e-07, 0.696144)
|
||||
bones/67/scale = Vector3(1.0000004, 0.9999986, 0.99999994)
|
||||
bones/68/rotation = Quaternion(0.9776482, 2.0029378e-07, 1.0460874e-06, -0.2102479)
|
||||
bones/68/scale = Vector3(1.0000004, 1.0000004, 0.9999982)
|
||||
bones/69/position = Vector3(-2.4645832e-08, -6.861796e-09, 7.455772e-08)
|
||||
bones/69/rotation = Quaternion(-0.8315212, 2.5276703e-08, -9.3330055e-09, 0.5554931)
|
||||
bones/69/scale = Vector3(1, 1.0000001, 1.0000002)
|
||||
bones/70/rotation = Quaternion(0.67750055, 8.820757e-08, 7.575834e-08, 0.7355223)
|
||||
bones/70/scale = Vector3(1, 1, 1)
|
||||
bones/71/scale = Vector3(0.9999999, 1, 0.9999999)
|
||||
bones/72/rotation = Quaternion(-2.1641608e-07, -4.6565607e-10, -4.6576065e-10, 1)
|
||||
bones/75/rotation = Quaternion(-0.34314692, -0.20321459, -0.2785586, 0.8737043)
|
||||
bones/76/position = Vector3(1.01587794e-07, -1.5306958e-07, -4.3554866e-07)
|
||||
bones/76/rotation = Quaternion(-0.51764834, -7.167482e-08, 1.7163823e-07, 0.85559356)
|
||||
bones/77/rotation = Quaternion(0.93367195, 1.2110854e-07, 3.8556042e-08, 0.35812962)
|
||||
bones/78/position = Vector3(0.8199172, 0.25251257, 0.47214243)
|
||||
bones/78/rotation = Quaternion(0.6979164, 0.16086517, -0.15598962, 0.6802223)
|
||||
bones/78/scale = Vector3(1.0000004, 0.9999997, 0.99999905)
|
||||
bones/80/rotation = Quaternion(0.7179022, -7.6713064e-07, 7.885641e-07, 0.696144)
|
||||
bones/80/scale = Vector3(1.0000004, 0.9999986, 0.99999994)
|
||||
bones/81/rotation = Quaternion(0.97764814, 1.9846473e-07, 1.0426893e-06, -0.21024783)
|
||||
bones/81/scale = Vector3(1.0000004, 1.0000002, 0.9999982)
|
||||
bones/82/position = Vector3(6.103571e-08, 8.8816435e-08, -3.6955274e-09)
|
||||
bones/82/rotation = Quaternion(-0.8315211, 2.3407136e-08, -1.2821512e-08, 0.5554932)
|
||||
bones/82/scale = Vector3(0.99999994, 0.99999994, 1)
|
||||
bones/83/rotation = Quaternion(0.6775009, -8.600083e-08, -8.977273e-08, 0.735522)
|
||||
bones/83/scale = Vector3(1, 1.0000001, 1)
|
||||
bones/84/scale = Vector3(0.99999994, 1.0000001, 0.9999999)
|
||||
bones/85/rotation = Quaternion(2.6833732e-07, -9.313788e-10, -2.5612494e-09, 1)
|
||||
bones/85/scale = Vector3(1.0000001, 1, 1.0000001)
|
||||
bones/87/rotation = Quaternion(-0.5230753, 0.20132942, 0.026226493, 0.8277505)
|
||||
bones/88/rotation = Quaternion(0.61967987, 0.23118778, 0.3169036, 0.679795)
|
||||
bones/89/position = Vector3(2.953037e-07, 4.9207458e-08, -4.3015167e-08)
|
||||
bones/89/rotation = Quaternion(-0.001144886, -2.973514e-08, 2.817069e-08, 0.9999994)
|
||||
bones/90/rotation = Quaternion(0.0023764072, -4.0769752e-08, -7.0690255e-08, 0.99999726)
|
||||
bones/91/position = Vector3(-0.8199192, 0.2525128, 0.47213912)
|
||||
bones/91/rotation = Quaternion(-0.49266297, -0.27058598, 0.2623832, 0.78436047)
|
||||
bones/91/scale = Vector3(1.0000002, 0.999999, 0.99999964)
|
||||
bones/96/position = Vector3(-0.021971898, -1.2751104, 0.16484088)
|
||||
bones/96/rotation = Quaternion(-0.47603267, 0.067788206, -0.035077166, 0.8761091)
|
||||
bones/96/scale = Vector3(0.9999999, 0.9999999, 0.99999976)
|
||||
bones/97/rotation = Quaternion(0.997074, -1.2813135e-07, 1.666339e-06, -0.07644201)
|
||||
bones/98/position = Vector3(0.01993539, 0.08757691, 0.045667563)
|
||||
bones/98/rotation = Quaternion(0.1475291, 0.03397043, -0.019923227, 0.9882734)
|
||||
bones/98/scale = Vector3(1, 1.0000011, 1.0000023)
|
||||
bones/101/position = Vector3(-0.021972047, 0.8282039, 0.0959422)
|
||||
bones/101/rotation = Quaternion(0.8371564, 0.04015539, 0.06490996, 0.5416119)
|
||||
bones/101/scale = Vector3(1, 1.0000066, 0.99998474)
|
||||
bones/102/rotation = Quaternion(0.95545256, -6.924111e-08, 2.2887033e-07, -0.29514462)
|
||||
bones/103/position = Vector3(0.17285576, 0.72785676, 1.0822707)
|
||||
bones/103/rotation = Quaternion(0.27801546, 0.0014157619, 0.015671493, 0.9604477)
|
||||
bones/103/scale = Vector3(1.0000002, 1.000013, 1.0000246)
|
||||
bones/104/rotation = Quaternion(0.5037003, 0.13519715, -0.093790196, 0.84806323)
|
||||
bones/104/scale = Vector3(1.0000721, 1.0000457, 0.99993384)
|
||||
bones/105/rotation = Quaternion(0.97757924, -0.053521663, -0.054415643, -0.19624804)
|
||||
bones/105/scale = Vector3(1.0000001, 1.0000083, 1.0000036)
|
||||
bones/106/position = Vector3(0.023142539, -0.54231995, -0.9607401)
|
||||
bones/106/rotation = Quaternion(0.99272084, -0.08158898, -0.03307842, -0.08218607)
|
||||
bones/107/rotation = Quaternion(0.903578, -0.12777254, -0.05477002, -0.4052421)
|
||||
bones/107/scale = Vector3(0.9999992, 0.9999624, 1.0000123)
|
||||
bones/108/position = Vector3(-1.1340098e-08, 7.923448e-07, 9.0939814e-08)
|
||||
bones/108/rotation = Quaternion(0.98967296, 0.0031370325, 0.10343237, -0.09919364)
|
||||
bones/110/rotation = Quaternion(9.815354e-07, 7.072085e-10, -9.586452e-08, 1)
|
||||
bones/110/scale = Vector3(0.99999994, 0.99999976, 1.0000001)
|
||||
bones/113/position = Vector3(0.07716276, 0.6410925, 0.71644557)
|
||||
bones/113/rotation = Quaternion(0.75079244, 0.54212654, -0.3715475, 0.0660462)
|
||||
bones/114/position = Vector3(-0.031743176, 0.60466695, -0.39704067)
|
||||
bones/114/rotation = Quaternion(0.4176498, -0.11118397, 0.55639553, -0.70966953)
|
||||
bones/114/scale = Vector3(1.0000015, 1.0000038, 1.0000079)
|
||||
bones/115/rotation = Quaternion(-0.07547326, 0.02173067, -0.31477332, 0.945912)
|
||||
bones/115/scale = Vector3(0.9999974, 1.0000036, 0.99999976)
|
||||
bones/116/rotation = Quaternion(0.03028559, -0.3116764, -0.037417784, 0.9489682)
|
||||
bones/116/scale = Vector3(1.0000005, 0.9999972, 1.0000013)
|
||||
bones/119/scale = Vector3(1.0000043, 0.9999975, 0.99999744)
|
||||
bones/121/rotation = Quaternion(-4.820391e-08, -0.1579088, -2.0880496e-08, 0.98745376)
|
||||
bones/121/scale = Vector3(1.0000037, 0.99999774, 0.9999977)
|
||||
bones/123/scale = Vector3(1.000003, 0.9999977, 0.99999917)
|
||||
bones/124/rotation = Quaternion(-3.1036683e-07, 0.17317644, 6.989145e-08, 0.9848908)
|
||||
bones/124/scale = Vector3(1.0000037, 0.9999978, 0.99999875)
|
||||
bones/126/rotation = Quaternion(-0.5163543, -0.16816929, 0.6340875, 0.550482)
|
||||
bones/126/scale = Vector3(1.0000015, 1.000007, 1.000004)
|
||||
bones/127/rotation = Quaternion(-0.24332331, 0.12663932, 0.6612194, 0.6982444)
|
||||
bones/127/scale = Vector3(1.0000017, 1.0000014, 1.0000097)
|
||||
bones/128/position = Vector3(-0.008928956, 0.128764, -0.06877987)
|
||||
bones/128/rotation = Quaternion(0.025037244, 0.39930493, -0.88358396, 0.24332726)
|
||||
bones/129/rotation = Quaternion(-0.07547334, 0.021730714, -0.31477335, 0.94591194)
|
||||
bones/131/rotation = Quaternion(-0.41802245, -0.28161782, 0.08442414, 0.85954714)
|
||||
bones/132/rotation = Quaternion(-0.5281791, -0.34319904, -0.62196887, -0.46518382)
|
||||
bones/133/rotation = Quaternion(-0.012777329, 0.011854946, 0.00015161165, 0.9998482)
|
||||
bones/133/scale = Vector3(1.0423008, 1.0423008, 1.0423006)
|
||||
bones/134/rotation = Quaternion(0.02152103, -3.688601e-08, -1.5255387e-07, 0.99976844)
|
||||
bones/134/scale = Vector3(0.9882629, 0.9882634, 0.98826265)
|
||||
bones/135/position = Vector3(-0.0317431, 0.60466677, -0.39704087)
|
||||
bones/135/rotation = Quaternion(0.22344373, -0.32689255, 0.658746, -0.6397405)
|
||||
bones/135/scale = Vector3(1.0000048, 1.0000036, 1.0000046)
|
||||
bones/137/position = Vector3(-0.33244255, 0.70370555, 0.67530614)
|
||||
bones/137/rotation = Quaternion(0.7519437, -0.5788053, 0.30500948, 0.08083551)
|
||||
bones/138/position = Vector3(-0.19594865, 0.65740275, -0.22511396)
|
||||
bones/138/rotation = Quaternion(0.36201134, 0.22157827, -0.6475769, -0.63284683)
|
||||
bones/138/scale = Vector3(1.0000019, 1.0000045, 1.0000057)
|
||||
bones/139/rotation = Quaternion(-0.018797327, 0.13857716, 0.33871746, 0.9304373)
|
||||
bones/139/scale = Vector3(0.9999983, 1.0000024, 0.9999992)
|
||||
bones/140/rotation = Quaternion(0.09896898, 0.1986053, -0.00787212, 0.975038)
|
||||
bones/140/scale = Vector3(1.0000031, 0.9999977, 0.9999988)
|
||||
bones/143/scale = Vector3(1.000005, 0.99999815, 0.9999967)
|
||||
bones/145/rotation = Quaternion(-1.7910523e-07, 0.10005118, -9.714451e-08, 0.9949823)
|
||||
bones/145/scale = Vector3(1.0000045, 0.99999803, 0.9999968)
|
||||
bones/147/scale = Vector3(1.0000035, 0.99999845, 0.9999981)
|
||||
bones/148/rotation = Quaternion(2.0844507e-07, 0.011625211, 4.5709146e-07, 0.9999325)
|
||||
bones/148/scale = Vector3(1.000004, 0.9999991, 0.999998)
|
||||
bones/150/rotation = Quaternion(-0.51635444, 0.16816957, -0.63408744, 0.55048186)
|
||||
bones/150/scale = Vector3(1.000001, 1.0000067, 1.000004)
|
||||
bones/151/rotation = Quaternion(-0.24332346, -0.12663896, -0.6612195, 0.6982443)
|
||||
bones/151/scale = Vector3(1.0000011, 1.0000017, 1.0000095)
|
||||
bones/152/position = Vector3(0.027921734, -0.124764316, 0.07102555)
|
||||
bones/152/rotation = Quaternion(-0.12973516, 0.47151387, -0.86254627, -0.12983702)
|
||||
bones/153/rotation = Quaternion(-0.018797398, 0.13857722, 0.33871746, 0.9304373)
|
||||
bones/155/rotation = Quaternion(-0.36541468, 0.16190512, -0.07102372, 0.91390073)
|
||||
bones/155/scale = Vector3(0.99999994, 1, 0.9999998)
|
||||
bones/156/rotation = Quaternion(0.68045896, -0.19169958, -0.3896983, 0.59022206)
|
||||
bones/157/rotation = Quaternion(-0.01277751, -0.011854968, -0.0001513001, 0.9998481)
|
||||
bones/157/scale = Vector3(1.0423003, 1.0422994, 1.0423005)
|
||||
bones/158/rotation = Quaternion(0.021521209, -2.5687226e-07, -2.570953e-07, 0.9997684)
|
||||
bones/158/scale = Vector3(0.9882631, 0.98826426, 0.9882618)
|
||||
bones/159/position = Vector3(-0.19594839, 0.65740275, -0.2251139)
|
||||
bones/159/rotation = Quaternion(0.28422734, 0.29369113, -0.68527013, -0.60279787)
|
||||
bones/159/scale = Vector3(1.0000027, 1.0000043, 1.0000049)
|
||||
bones/161/position = Vector3(0.07716276, 0.6410925, 0.71644557)
|
||||
bones/161/rotation = Quaternion(0.75079244, 0.54212654, -0.3715475, 0.0660462)
|
||||
bones/162/position = Vector3(-0.33244255, 0.70370555, 0.67530614)
|
||||
bones/162/rotation = Quaternion(0.7519437, -0.5788053, 0.30500948, 0.08083551)
|
||||
bones/165/position = Vector3(-1.5017577e-08, 0.26895812, -1.6243575e-08)
|
||||
bones/165/rotation = Quaternion(-0.019247467, -0.20323175, 0.97894067, -0.0012537595)
|
||||
bones/166/position = Vector3(0.0034187725, -3.131728, 0.9674823)
|
||||
bones/167/position = Vector3(0.209171, 5.0901713, -2.6670303)
|
||||
bones/167/rotation = Quaternion(0.16656846, 0.015223213, 0.18356222, 0.9686734)
|
||||
bones/167/scale = Vector3(0.9999988, 0.9999987, 1.0000023)
|
||||
bones/168/position = Vector3(0.18381567, -0.9622623, 0.9894084)
|
||||
bones/168/rotation = Quaternion(0.9362244, -6.2652596e-08, -0.34127164, -0.083770975)
|
||||
bones/168/scale = Vector3(1.0000011, 1.0000015, 1.0000101)
|
||||
bones/170/position = Vector3(0.748137, 0.69556385, 3.7252903e-09)
|
||||
bones/170/rotation = Quaternion(0.019250846, -0.20323181, 0.9789406, 0.001253055)
|
||||
bones/171/position = Vector3(0.6322718, -2.6572587, 0.6064028)
|
||||
bones/172/position = Vector3(-1.5122895, 4.4686184, -2.7014794)
|
||||
bones/172/rotation = Quaternion(0.21553025, -0.03620148, 0.11066054, 0.9695311)
|
||||
bones/172/scale = Vector3(0.99999887, 0.9999985, 1.0000024)
|
||||
bones/173/position = Vector3(0.18381546, -0.96226203, 0.9894083)
|
||||
bones/173/rotation = Quaternion(0.93622434, -2.9748788e-08, 0.34127158, -0.083771475)
|
||||
bones/173/scale = Vector3(0.999999, 1.0000014, 0.99999464)
|
||||
bones/175/position = Vector3(0.2542465, -2.2077389, 0.9589075)
|
||||
bones/175/rotation = Quaternion(-0.008919476, -0.00021326332, -0.000697989, 0.99996)
|
||||
bones/183/position = Vector3(-1.982537e-07, 5.9604563e-08, -1.517833e-08)
|
||||
bones/185/rotation = Quaternion(5.4077844e-07, -0.20349081, 0.97907686, -1.12395135e-07)
|
||||
bones/186/position = Vector3(0.57634556, 3.7607954, 0.15364014)
|
||||
bones/186/rotation = Quaternion(-0.9604305, -0.020206233, -0.08076539, -0.26578543)
|
||||
bones/186/scale = Vector3(0.9999997, 0.99999994, 1)
|
||||
bones/187/rotation = Quaternion(0.15451065, -2.0305349e-09, -2.0850066e-09, 0.9879911)
|
||||
bones/187/scale = Vector3(1.0000002, 0.99999994, 0.9999999)
|
||||
bones/197/position = Vector3(-0.0011225368, -0.015787723, -0.051779967)
|
||||
bones/199/rotation = Quaternion(0.00034800146, -0.20349097, 0.9790768, -7.2328476e-05)
|
||||
bones/200/position = Vector3(-1.0407574, 3.6267605, -0.083099455)
|
||||
bones/200/rotation = Quaternion(-0.9604305, -0.020206233, -0.08076539, -0.26578543)
|
||||
bones/200/scale = Vector3(0.9999997, 0.99999994, 1)
|
||||
bones/201/rotation = Quaternion(0.15451066, -1.9585848e-09, -2.5450761e-09, 0.9879911)
|
||||
bones/201/scale = Vector3(1.0000002, 0.99999994, 0.99999994)
|
||||
|
||||
[editable path="bear_model"]
|
||||
[editable path="bear_model/test_cube/Bear_FX"]
|
||||
@@ -0,0 +1,319 @@
|
||||
[gd_scene format=3 uid="uid://o8ocjfprxa7u"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cn7fhjkro7637" path="res://bear.gd" id="1_beargd"]
|
||||
[ext_resource type="PackedScene" uid="uid://cofv5dbavesis" path="res://Assets/Bear.glb" id="2_bearglb"]
|
||||
[ext_resource type="Script" uid="uid://bsbed05ifr18s" path="res://bear_test_cube.gd" id="3_rog1v"]
|
||||
[ext_resource type="PackedScene" uid="uid://bdbx0wwa73rhp" path="res://Assets/fx/Bear_FX.glb" id="4_rog1v"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_body"]
|
||||
radius = 1.0
|
||||
height = 2.4
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_hit"]
|
||||
radius = 1.3
|
||||
height = 2.7
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_bfebr"]
|
||||
size = Vector3(6.2019043, 8.561401, 7.0739746)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_rog1v"]
|
||||
size = Vector3(14.399288, 51.902206, 5.741211)
|
||||
|
||||
[node name="Bear" type="CharacterBody3D" unique_id=1573237287]
|
||||
script = ExtResource("1_beargd")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=830443382]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2, 0)
|
||||
shape = SubResource("CapsuleShape3D_body")
|
||||
|
||||
[node name="HitArea" type="Area3D" parent="." unique_id=365327397]
|
||||
monitorable = false
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="HitArea" unique_id=2111867348]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.35, 0)
|
||||
shape = SubResource("CapsuleShape3D_hit")
|
||||
|
||||
[node name="bear_model" parent="." unique_id=359217823 instance=ExtResource("2_bearglb")]
|
||||
|
||||
[node name="test_cube" type="Node3D" parent="bear_model" unique_id=646988893]
|
||||
script = ExtResource("3_rog1v")
|
||||
|
||||
[node name="Bear_FX" parent="bear_model/test_cube" unique_id=1183391245 instance=ExtResource("4_rog1v")]
|
||||
|
||||
[node name="Bear_fx_jump_smash" parent="bear_model/test_cube/Bear_FX" index="0" unique_id=750478984]
|
||||
visible = false
|
||||
|
||||
[node name="Bear_fx_claw_attack_R" parent="bear_model/test_cube/Bear_FX" index="1" unique_id=88064381]
|
||||
visible = false
|
||||
|
||||
[node name="Bear_fx_claw_attack_L" parent="bear_model/test_cube/Bear_FX" index="2" unique_id=1378755061]
|
||||
visible = false
|
||||
|
||||
[node name="Bear_fx_smash_hit" parent="bear_model/test_cube/Bear_FX" index="3" unique_id=1711579105]
|
||||
transform = Transform3D(0.55488384, -0.039024748, -0.018949924, 0.041069064, 0.55086076, 0.06814586, 0.013977209, -0.06933683, 0.5520644, 1.327292, -0.21312934, 5.190573)
|
||||
|
||||
[node name="RigidBody3D" type="AnimatableBody3D" parent="bear_model/test_cube/Bear_FX/Bear_fx_smash_hit" index="0" unique_id=1764208051]
|
||||
transform = Transform3D(1.0000001, -1.21071935e-08, -1.8626451e-08, -9.313226e-10, 0.99999994, 7.450581e-09, 3.7252903e-09, -1.4901161e-08, 0.99999994, 0, 0, 0)
|
||||
collision_layer = 8
|
||||
collision_mask = 2
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="bear_model/test_cube/Bear_FX/Bear_fx_smash_hit/RigidBody3D" unique_id=1779197150]
|
||||
transform = Transform3D(0.99993557, -0.00749125, -0.010078691, 0.0077760145, 0.999569, 0.028562747, 0.009858355, -0.028639637, 0.9995405, -1.5136471, 0.9093375, 35.591957)
|
||||
shape = SubResource("BoxShape3D_bfebr")
|
||||
disabled = true
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="bear_model/test_cube/Bear_FX/Bear_fx_smash_hit/RigidBody3D" unique_id=1276552823]
|
||||
transform = Transform3D(0.9935104, -0.040698394, -0.10621016, -0.108634494, -0.06290151, -0.9920882, 0.03369555, 0.99719334, -0.06691426, -1.6357545, -0.5093044, 12.68803)
|
||||
shape = SubResource("BoxShape3D_rog1v")
|
||||
|
||||
[node name="Skeleton3D" parent="bear_model/bear-rig" parent_id_path=PackedInt32Array(359217823, 1017999212) index="0" unique_id=1624609914]
|
||||
bones/1/position = Vector3(0.00851878, 0.24701798, 1.2888045)
|
||||
bones/1/rotation = Quaternion(0.29791054, -0.060797628, -0.056875575, 0.9509564)
|
||||
bones/2/rotation = Quaternion(0.084239505, -0.026013458, 0.009274505, 0.9960628)
|
||||
bones/2/scale = Vector3(0.9999999, 1.0000008, 0.99999934)
|
||||
bones/3/rotation = Quaternion(-0.14812404, -0.039577905, 0.049865585, 0.98691756)
|
||||
bones/4/rotation = Quaternion(-0.40577498, -0.03082885, 0.05040324, 0.9120612)
|
||||
bones/5/rotation = Quaternion(0.27801633, 0.0014148077, 0.015671793, 0.96044755)
|
||||
bones/6/rotation = Quaternion(0.50370073, 0.13519946, -0.093789615, 0.8480627)
|
||||
bones/7/rotation = Quaternion(0.75079185, 0.54212743, -0.37154716, 0.06604591)
|
||||
bones/8/rotation = Quaternion(0.22344273, -0.32689556, 0.65874565, -0.63973963)
|
||||
bones/9/rotation = Quaternion(0.026405705, -0.27415153, -0.3226086, 0.9055757)
|
||||
bones/10/rotation = Quaternion(0.030285481, -0.31167626, -0.037417818, 0.94896823)
|
||||
bones/11/rotation = Quaternion(0.751943, -0.5788067, 0.30500817, 0.080837056)
|
||||
bones/12/rotation = Quaternion(0.28422552, 0.2936944, -0.68526876, -0.6027987)
|
||||
bones/13/rotation = Quaternion(0.020711409, 0.24585825, 0.3386082, 0.9080029)
|
||||
bones/14/rotation = Quaternion(0.098969, 0.19860524, -0.007872087, 0.97503805)
|
||||
bones/15/rotation = Quaternion(0.6979166, 0.16086513, -0.15598965, 0.680222)
|
||||
bones/16/rotation = Quaternion(0.89734674, 0.09874082, -0.25790086, 0.34424722)
|
||||
bones/17/rotation = Quaternion(-0.13802421, 0.26758972, 0.081159085, 0.9501359)
|
||||
bones/17/scale = Vector3(0.9999998, 1.0000002, 1)
|
||||
bones/19/rotation = Quaternion(-4.514978e-15, 1, 7.4505806e-08, -5.523351e-07)
|
||||
bones/20/rotation = Quaternion(-0.49266306, -0.27058616, 0.262383, 0.7843606)
|
||||
bones/21/rotation = Quaternion(0.0016915401, 0.70246154, -0.001669446, 0.7117178)
|
||||
bones/22/rotation = Quaternion(-0.5496364, -0.3220462, -0.22350304, 0.73772115)
|
||||
bones/22/scale = Vector3(0.9999997, 0.9999998, 0.9999999)
|
||||
bones/23/rotation = Quaternion(-0.00015351747, 0.902104, -0.4315187, 0.00032039074)
|
||||
bones/24/rotation = Quaternion(6.628114e-12, 0.99999994, 5.2154085e-08, -0.00035543842)
|
||||
bones/25/position = Vector3(1.0191536, 3.5353048, 3.5049686)
|
||||
bones/25/rotation = Quaternion(-0.087474234, 0.16733547, 0.98056763, 0.053239316)
|
||||
bones/25/scale = Vector3(1, 17.518272, 1.0000001)
|
||||
bones/26/position = Vector3(-1.0831825, 3.749937, 2.5891113)
|
||||
bones/26/rotation = Quaternion(0.016340872, 0.19671263, 0.9801456, 0.01875816)
|
||||
bones/26/scale = Vector3(1.0000001, 18.765795, 1)
|
||||
bones/27/position = Vector3(1.0193456, -0.43209565, 2.5343885)
|
||||
bones/27/rotation = Quaternion(0.61800283, -0.11976056, 0.11976072, 0.7677157)
|
||||
bones/27/scale = Vector3(0.99999994, 16.85072, 1)
|
||||
bones/28/position = Vector3(-0.8340287, 1.0348616, 1.282705)
|
||||
bones/28/rotation = Quaternion(0.82860446, -0.029359974, 0.02935981, 0.5582926)
|
||||
bones/28/scale = Vector3(0.99999994, 32.068844, 1)
|
||||
bones/30/position = Vector3(0.032563455, -0.8335703, -0.9236449)
|
||||
bones/30/rotation = Quaternion(-0.8670657, 0.042821795, -0.07139772, 0.4911883)
|
||||
bones/31/position = Vector3(2.3450447e-08, -1.4631646, 0.23291242)
|
||||
bones/31/rotation = Quaternion(-6.0737464e-09, 4.8699293e-09, -1.4618977e-09, 1)
|
||||
bones/31/scale = Vector3(0.99999994, 0.9999999, 0.99999994)
|
||||
bones/32/position = Vector3(-0.04394375, -1.087056, 0.096768975)
|
||||
bones/32/rotation = Quaternion(-0.8343034, 0.119118, -0.061490715, 0.5347595)
|
||||
bones/32/scale = Vector3(0.9999999, 0.99999976, 0.99999964)
|
||||
bones/33/position = Vector3(3.977649e-08, -1.4631644, 0.23291251)
|
||||
bones/33/rotation = Quaternion(-8.833673e-08, -2.419923e-08, -6.733043e-09, 1)
|
||||
bones/33/scale = Vector3(0.9999998, 0.9999998, 0.99999994)
|
||||
bones/35/position = Vector3(1.0184407e-08, -1.0594703, -5.9146995e-08)
|
||||
bones/35/rotation = Quaternion(0.99971783, 1.3593646e-07, 5.3695976e-06, -0.023754615)
|
||||
bones/35/scale = Vector3(0.99999976, 0.9999998, 1.0000012)
|
||||
bones/39/position = Vector3(0.8199172, 0.25251278, 0.47214246)
|
||||
bones/39/rotation = Quaternion(0.71402234, 0.34199142, 0.043267474, 0.60937834)
|
||||
bones/39/scale = Vector3(1.0000004, 0.9999996, 0.9999991)
|
||||
bones/40/rotation = Quaternion(0.9336719, 1.2799235e-07, 3.7337827e-08, 0.3581296)
|
||||
bones/40/scale = Vector3(1.0000004, 1.0000001, 1.0000001)
|
||||
bones/41/rotation = Quaternion(-0.13802455, 0.26758966, 0.08115916, 0.9501359)
|
||||
bones/41/scale = Vector3(0.99999946, 0.99999976, 0.9999996)
|
||||
bones/42/position = Vector3(-1.9729964e-07, 0.56145483, 7.283501e-08)
|
||||
bones/46/scale = Vector3(0.99999946, 0.99999964, 0.9999999)
|
||||
bones/48/rotation = Quaternion(-2.9741386e-07, 0.13593404, 1.01778824e-07, 0.9907179)
|
||||
bones/48/scale = Vector3(0.9999993, 0.9999996, 0.9999999)
|
||||
bones/50/scale = Vector3(0.99999994, 0.99999994, 0.9999998)
|
||||
bones/51/rotation = Quaternion(-2.5567479e-08, -0.20499781, -2.3086146e-08, 0.9787625)
|
||||
bones/51/scale = Vector3(0.9999999, 0.99999964, 0.99999964)
|
||||
bones/53/position = Vector3(-0.8199191, 0.25251284, 0.47213903)
|
||||
bones/53/rotation = Quaternion(-0.5351706, 0.35860845, -0.15898216, 0.74814254)
|
||||
bones/53/scale = Vector3(1, 0.99999875, 0.99999946)
|
||||
bones/54/rotation = Quaternion(0.0023762286, -4.7362324e-08, -6.475868e-08, 0.9999972)
|
||||
bones/55/rotation = Quaternion(-0.54963607, -0.322046, -0.22350314, 0.73772144)
|
||||
bones/55/scale = Vector3(1.0000002, 1, 1.0000002)
|
||||
bones/56/position = Vector3(0.0013532753, 0.57868266, 0.05537574)
|
||||
bones/56/rotation = Quaternion(-0.00015348212, 0.90210384, -0.43151882, 0.0003204293)
|
||||
bones/57/rotation = Quaternion(0.70073944, -0.70073956, -0.094679825, -0.09467953)
|
||||
bones/60/scale = Vector3(1.0000004, 1.0000004, 1.0000002)
|
||||
bones/62/rotation = Quaternion(-1.7092354e-08, -0.18223058, 2.6700846e-08, 0.98325586)
|
||||
bones/62/scale = Vector3(1.0000002, 1.0000002, 1.0000001)
|
||||
bones/64/scale = Vector3(1.0000004, 1.0000004, 1)
|
||||
bones/65/rotation = Quaternion(-1.0345744e-08, -0.3796584, -4.0675246e-08, 0.9251268)
|
||||
bones/65/scale = Vector3(1.0000002, 1.0000004, 1.0000004)
|
||||
bones/67/rotation = Quaternion(0.7179022, -7.671307e-07, 7.885642e-07, 0.696144)
|
||||
bones/67/scale = Vector3(1.0000004, 0.9999986, 0.99999994)
|
||||
bones/68/rotation = Quaternion(0.9776482, 2.0029378e-07, 1.0460874e-06, -0.2102479)
|
||||
bones/68/scale = Vector3(1.0000004, 1.0000004, 0.9999982)
|
||||
bones/69/position = Vector3(-2.4645832e-08, -6.861796e-09, 7.455772e-08)
|
||||
bones/69/rotation = Quaternion(-0.8315212, 2.5276703e-08, -9.3330055e-09, 0.5554931)
|
||||
bones/69/scale = Vector3(1, 1.0000001, 1.0000002)
|
||||
bones/70/rotation = Quaternion(0.67750055, 8.820757e-08, 7.575834e-08, 0.7355223)
|
||||
bones/70/scale = Vector3(1, 1, 1)
|
||||
bones/71/scale = Vector3(0.9999999, 1, 0.9999999)
|
||||
bones/72/rotation = Quaternion(-2.1641608e-07, -4.6565607e-10, -4.6576065e-10, 1)
|
||||
bones/75/rotation = Quaternion(-0.34314692, -0.20321459, -0.2785586, 0.8737043)
|
||||
bones/76/position = Vector3(1.01587794e-07, -1.5306958e-07, -4.3554866e-07)
|
||||
bones/76/rotation = Quaternion(-0.51764834, -7.167482e-08, 1.7163823e-07, 0.85559356)
|
||||
bones/77/rotation = Quaternion(0.93367195, 1.2110854e-07, 3.8556042e-08, 0.35812962)
|
||||
bones/78/position = Vector3(0.8199172, 0.25251257, 0.47214243)
|
||||
bones/78/rotation = Quaternion(0.6979164, 0.16086517, -0.15598962, 0.6802223)
|
||||
bones/78/scale = Vector3(1.0000004, 0.9999997, 0.99999905)
|
||||
bones/80/rotation = Quaternion(0.7179022, -7.6713064e-07, 7.885641e-07, 0.696144)
|
||||
bones/80/scale = Vector3(1.0000004, 0.9999986, 0.99999994)
|
||||
bones/81/rotation = Quaternion(0.97764814, 1.9846473e-07, 1.0426893e-06, -0.21024783)
|
||||
bones/81/scale = Vector3(1.0000004, 1.0000002, 0.9999982)
|
||||
bones/82/position = Vector3(6.103571e-08, 8.8816435e-08, -3.6955274e-09)
|
||||
bones/82/rotation = Quaternion(-0.8315211, 2.3407136e-08, -1.2821512e-08, 0.5554932)
|
||||
bones/82/scale = Vector3(0.99999994, 0.99999994, 1)
|
||||
bones/83/rotation = Quaternion(0.6775009, -8.600083e-08, -8.977273e-08, 0.735522)
|
||||
bones/83/scale = Vector3(1, 1.0000001, 1)
|
||||
bones/84/scale = Vector3(0.99999994, 1.0000001, 0.9999999)
|
||||
bones/85/rotation = Quaternion(2.6833732e-07, -9.313788e-10, -2.5612494e-09, 1)
|
||||
bones/85/scale = Vector3(1.0000001, 1, 1.0000001)
|
||||
bones/87/rotation = Quaternion(-0.5230753, 0.20132942, 0.026226493, 0.8277505)
|
||||
bones/88/rotation = Quaternion(0.61967987, 0.23118778, 0.3169036, 0.679795)
|
||||
bones/89/position = Vector3(2.953037e-07, 4.9207458e-08, -4.3015167e-08)
|
||||
bones/89/rotation = Quaternion(-0.001144886, -2.973514e-08, 2.817069e-08, 0.9999994)
|
||||
bones/90/rotation = Quaternion(0.0023764072, -4.0769752e-08, -7.0690255e-08, 0.99999726)
|
||||
bones/91/position = Vector3(-0.8199192, 0.2525128, 0.47213912)
|
||||
bones/91/rotation = Quaternion(-0.49266297, -0.27058598, 0.2623832, 0.78436047)
|
||||
bones/91/scale = Vector3(1.0000002, 0.999999, 0.99999964)
|
||||
bones/96/position = Vector3(-0.021971898, -1.2751104, 0.16484088)
|
||||
bones/96/rotation = Quaternion(-0.47603267, 0.067788206, -0.035077166, 0.8761091)
|
||||
bones/96/scale = Vector3(0.9999999, 0.9999999, 0.99999976)
|
||||
bones/97/rotation = Quaternion(0.997074, -1.2813135e-07, 1.666339e-06, -0.07644201)
|
||||
bones/98/position = Vector3(0.01993539, 0.08757691, 0.045667563)
|
||||
bones/98/rotation = Quaternion(0.1475291, 0.03397043, -0.019923227, 0.9882734)
|
||||
bones/98/scale = Vector3(1, 1.0000011, 1.0000023)
|
||||
bones/101/position = Vector3(-0.021972047, 0.8282039, 0.0959422)
|
||||
bones/101/rotation = Quaternion(0.8371564, 0.04015539, 0.06490996, 0.5416119)
|
||||
bones/101/scale = Vector3(1, 1.0000066, 0.99998474)
|
||||
bones/102/rotation = Quaternion(0.95545256, -6.924111e-08, 2.2887033e-07, -0.29514462)
|
||||
bones/103/position = Vector3(0.17285576, 0.72785676, 1.0822707)
|
||||
bones/103/rotation = Quaternion(0.27801546, 0.0014157619, 0.015671493, 0.9604477)
|
||||
bones/103/scale = Vector3(1.0000002, 1.000013, 1.0000246)
|
||||
bones/104/rotation = Quaternion(0.5037003, 0.13519715, -0.093790196, 0.84806323)
|
||||
bones/104/scale = Vector3(1.0000721, 1.0000457, 0.99993384)
|
||||
bones/105/rotation = Quaternion(0.97757924, -0.053521663, -0.054415643, -0.19624804)
|
||||
bones/105/scale = Vector3(1.0000001, 1.0000083, 1.0000036)
|
||||
bones/106/position = Vector3(0.023142539, -0.54231995, -0.9607401)
|
||||
bones/106/rotation = Quaternion(0.99272084, -0.08158898, -0.03307842, -0.08218607)
|
||||
bones/107/rotation = Quaternion(0.903578, -0.12777254, -0.05477002, -0.4052421)
|
||||
bones/107/scale = Vector3(0.9999992, 0.9999624, 1.0000123)
|
||||
bones/108/position = Vector3(-1.1340098e-08, 7.923448e-07, 9.0939814e-08)
|
||||
bones/108/rotation = Quaternion(0.98967296, 0.0031370325, 0.10343237, -0.09919364)
|
||||
bones/110/rotation = Quaternion(9.815354e-07, 7.072085e-10, -9.586452e-08, 1)
|
||||
bones/110/scale = Vector3(0.99999994, 0.99999976, 1.0000001)
|
||||
bones/113/position = Vector3(0.07716276, 0.6410925, 0.71644557)
|
||||
bones/113/rotation = Quaternion(0.75079244, 0.54212654, -0.3715475, 0.0660462)
|
||||
bones/114/position = Vector3(-0.031743176, 0.60466695, -0.39704067)
|
||||
bones/114/rotation = Quaternion(0.4176498, -0.11118397, 0.55639553, -0.70966953)
|
||||
bones/114/scale = Vector3(1.0000015, 1.0000038, 1.0000079)
|
||||
bones/115/rotation = Quaternion(-0.07547326, 0.02173067, -0.31477332, 0.945912)
|
||||
bones/115/scale = Vector3(0.9999974, 1.0000036, 0.99999976)
|
||||
bones/116/rotation = Quaternion(0.03028559, -0.3116764, -0.037417784, 0.9489682)
|
||||
bones/116/scale = Vector3(1.0000005, 0.9999972, 1.0000013)
|
||||
bones/119/scale = Vector3(1.0000043, 0.9999975, 0.99999744)
|
||||
bones/121/rotation = Quaternion(-4.820391e-08, -0.1579088, -2.0880496e-08, 0.98745376)
|
||||
bones/121/scale = Vector3(1.0000037, 0.99999774, 0.9999977)
|
||||
bones/123/scale = Vector3(1.000003, 0.9999977, 0.99999917)
|
||||
bones/124/rotation = Quaternion(-3.1036683e-07, 0.17317644, 6.989145e-08, 0.9848908)
|
||||
bones/124/scale = Vector3(1.0000037, 0.9999978, 0.99999875)
|
||||
bones/126/rotation = Quaternion(-0.5163543, -0.16816929, 0.6340875, 0.550482)
|
||||
bones/126/scale = Vector3(1.0000015, 1.000007, 1.000004)
|
||||
bones/127/rotation = Quaternion(-0.24332331, 0.12663932, 0.6612194, 0.6982444)
|
||||
bones/127/scale = Vector3(1.0000017, 1.0000014, 1.0000097)
|
||||
bones/128/position = Vector3(-0.008928956, 0.128764, -0.06877987)
|
||||
bones/128/rotation = Quaternion(0.025037244, 0.39930493, -0.88358396, 0.24332726)
|
||||
bones/129/rotation = Quaternion(-0.07547334, 0.021730714, -0.31477335, 0.94591194)
|
||||
bones/131/rotation = Quaternion(-0.41802245, -0.28161782, 0.08442414, 0.85954714)
|
||||
bones/132/rotation = Quaternion(-0.5281791, -0.34319904, -0.62196887, -0.46518382)
|
||||
bones/133/rotation = Quaternion(-0.012777329, 0.011854946, 0.00015161165, 0.9998482)
|
||||
bones/133/scale = Vector3(1.0423008, 1.0423008, 1.0423006)
|
||||
bones/134/rotation = Quaternion(0.02152103, -3.688601e-08, -1.5255387e-07, 0.99976844)
|
||||
bones/134/scale = Vector3(0.9882629, 0.9882634, 0.98826265)
|
||||
bones/135/position = Vector3(-0.0317431, 0.60466677, -0.39704087)
|
||||
bones/135/rotation = Quaternion(0.22344373, -0.32689255, 0.658746, -0.6397405)
|
||||
bones/135/scale = Vector3(1.0000048, 1.0000036, 1.0000046)
|
||||
bones/137/position = Vector3(-0.33244255, 0.70370555, 0.67530614)
|
||||
bones/137/rotation = Quaternion(0.7519437, -0.5788053, 0.30500948, 0.08083551)
|
||||
bones/138/position = Vector3(-0.19594865, 0.65740275, -0.22511396)
|
||||
bones/138/rotation = Quaternion(0.36201134, 0.22157827, -0.6475769, -0.63284683)
|
||||
bones/138/scale = Vector3(1.0000019, 1.0000045, 1.0000057)
|
||||
bones/139/rotation = Quaternion(-0.018797327, 0.13857716, 0.33871746, 0.9304373)
|
||||
bones/139/scale = Vector3(0.9999983, 1.0000024, 0.9999992)
|
||||
bones/140/rotation = Quaternion(0.09896898, 0.1986053, -0.00787212, 0.975038)
|
||||
bones/140/scale = Vector3(1.0000031, 0.9999977, 0.9999988)
|
||||
bones/143/scale = Vector3(1.000005, 0.99999815, 0.9999967)
|
||||
bones/145/rotation = Quaternion(-1.7910523e-07, 0.10005118, -9.714451e-08, 0.9949823)
|
||||
bones/145/scale = Vector3(1.0000045, 0.99999803, 0.9999968)
|
||||
bones/147/scale = Vector3(1.0000035, 0.99999845, 0.9999981)
|
||||
bones/148/rotation = Quaternion(2.0844507e-07, 0.011625211, 4.5709146e-07, 0.9999325)
|
||||
bones/148/scale = Vector3(1.000004, 0.9999991, 0.999998)
|
||||
bones/150/rotation = Quaternion(-0.51635444, 0.16816957, -0.63408744, 0.55048186)
|
||||
bones/150/scale = Vector3(1.000001, 1.0000067, 1.000004)
|
||||
bones/151/rotation = Quaternion(-0.24332346, -0.12663896, -0.6612195, 0.6982443)
|
||||
bones/151/scale = Vector3(1.0000011, 1.0000017, 1.0000095)
|
||||
bones/152/position = Vector3(0.027921734, -0.124764316, 0.07102555)
|
||||
bones/152/rotation = Quaternion(-0.12973516, 0.47151387, -0.86254627, -0.12983702)
|
||||
bones/153/rotation = Quaternion(-0.018797398, 0.13857722, 0.33871746, 0.9304373)
|
||||
bones/155/rotation = Quaternion(-0.36541468, 0.16190512, -0.07102372, 0.91390073)
|
||||
bones/155/scale = Vector3(0.99999994, 1, 0.9999998)
|
||||
bones/156/rotation = Quaternion(0.68045896, -0.19169958, -0.3896983, 0.59022206)
|
||||
bones/157/rotation = Quaternion(-0.01277751, -0.011854968, -0.0001513001, 0.9998481)
|
||||
bones/157/scale = Vector3(1.0423003, 1.0422994, 1.0423005)
|
||||
bones/158/rotation = Quaternion(0.021521209, -2.5687226e-07, -2.570953e-07, 0.9997684)
|
||||
bones/158/scale = Vector3(0.9882631, 0.98826426, 0.9882618)
|
||||
bones/159/position = Vector3(-0.19594839, 0.65740275, -0.2251139)
|
||||
bones/159/rotation = Quaternion(0.28422734, 0.29369113, -0.68527013, -0.60279787)
|
||||
bones/159/scale = Vector3(1.0000027, 1.0000043, 1.0000049)
|
||||
bones/161/position = Vector3(0.07716276, 0.6410925, 0.71644557)
|
||||
bones/161/rotation = Quaternion(0.75079244, 0.54212654, -0.3715475, 0.0660462)
|
||||
bones/162/position = Vector3(-0.33244255, 0.70370555, 0.67530614)
|
||||
bones/162/rotation = Quaternion(0.7519437, -0.5788053, 0.30500948, 0.08083551)
|
||||
bones/165/position = Vector3(-1.5017577e-08, 0.26895812, -1.6243575e-08)
|
||||
bones/165/rotation = Quaternion(-0.019247467, -0.20323175, 0.97894067, -0.0012537595)
|
||||
bones/166/position = Vector3(0.0034187725, -3.131728, 0.9674823)
|
||||
bones/167/position = Vector3(0.209171, 5.0901713, -2.6670303)
|
||||
bones/167/rotation = Quaternion(0.16656846, 0.015223213, 0.18356222, 0.9686734)
|
||||
bones/167/scale = Vector3(0.9999988, 0.9999987, 1.0000023)
|
||||
bones/168/position = Vector3(0.18381567, -0.9622623, 0.9894084)
|
||||
bones/168/rotation = Quaternion(0.9362244, -6.2652596e-08, -0.34127164, -0.083770975)
|
||||
bones/168/scale = Vector3(1.0000011, 1.0000015, 1.0000101)
|
||||
bones/170/position = Vector3(0.748137, 0.69556385, 3.7252903e-09)
|
||||
bones/170/rotation = Quaternion(0.019250846, -0.20323181, 0.9789406, 0.001253055)
|
||||
bones/171/position = Vector3(0.6322718, -2.6572587, 0.6064028)
|
||||
bones/172/position = Vector3(-1.5122895, 4.4686184, -2.7014794)
|
||||
bones/172/rotation = Quaternion(0.21553025, -0.03620148, 0.11066054, 0.9695311)
|
||||
bones/172/scale = Vector3(0.99999887, 0.9999985, 1.0000024)
|
||||
bones/173/position = Vector3(0.18381546, -0.96226203, 0.9894083)
|
||||
bones/173/rotation = Quaternion(0.93622434, -2.9748788e-08, 0.34127158, -0.083771475)
|
||||
bones/173/scale = Vector3(0.999999, 1.0000014, 0.99999464)
|
||||
bones/175/position = Vector3(0.2542465, -2.2077389, 0.9589075)
|
||||
bones/175/rotation = Quaternion(-0.008919476, -0.00021326332, -0.000697989, 0.99996)
|
||||
bones/183/position = Vector3(-1.982537e-07, 5.9604563e-08, -1.517833e-08)
|
||||
bones/185/rotation = Quaternion(5.4077844e-07, -0.20349081, 0.97907686, -1.12395135e-07)
|
||||
bones/186/position = Vector3(0.57634556, 3.7607954, 0.15364014)
|
||||
bones/186/rotation = Quaternion(-0.9604305, -0.020206233, -0.08076539, -0.26578543)
|
||||
bones/186/scale = Vector3(0.9999997, 0.99999994, 1)
|
||||
bones/187/rotation = Quaternion(0.15451065, -2.0305349e-09, -2.0850066e-09, 0.9879911)
|
||||
bones/187/scale = Vector3(1.0000002, 0.99999994, 0.9999999)
|
||||
bones/197/position = Vector3(-0.0011225368, -0.015787723, -0.051779967)
|
||||
bones/199/rotation = Quaternion(0.00034800146, -0.20349097, 0.9790768, -7.2328476e-05)
|
||||
bones/200/position = Vector3(-1.0407574, 3.6267605, -0.083099455)
|
||||
bones/200/rotation = Quaternion(-0.9604305, -0.020206233, -0.08076539, -0.26578543)
|
||||
bones/200/scale = Vector3(0.9999997, 0.99999994, 1)
|
||||
bones/201/rotation = Quaternion(0.15451066, -1.9585848e-09, -2.5450761e-09, 0.9879911)
|
||||
bones/201/scale = Vector3(1.0000002, 0.99999994, 0.99999994)
|
||||
|
||||
[editable path="bear_model"]
|
||||
[editable path="bear_model/test_cube/Bear_FX"]
|
||||
@@ -0,0 +1,319 @@
|
||||
[gd_scene format=3 uid="uid://o8ocjfprxa7u"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cn7fhjkro7637" path="res://bear.gd" id="1_beargd"]
|
||||
[ext_resource type="PackedScene" uid="uid://cofv5dbavesis" path="res://Assets/Bear.glb" id="2_bearglb"]
|
||||
[ext_resource type="Script" uid="uid://bsbed05ifr18s" path="res://bear_test_cube.gd" id="3_rog1v"]
|
||||
[ext_resource type="PackedScene" uid="uid://bdbx0wwa73rhp" path="res://Assets/fx/Bear_FX.glb" id="4_rog1v"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_body"]
|
||||
radius = 1.0
|
||||
height = 2.4
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_hit"]
|
||||
radius = 1.3
|
||||
height = 2.7
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_bfebr"]
|
||||
size = Vector3(6.2019043, 8.561401, 7.0739746)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_rog1v"]
|
||||
size = Vector3(14.399288, 51.902206, 5.741211)
|
||||
|
||||
[node name="Bear" type="CharacterBody3D" unique_id=1573237287]
|
||||
script = ExtResource("1_beargd")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=830443382]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2, 0)
|
||||
shape = SubResource("CapsuleShape3D_body")
|
||||
|
||||
[node name="HitArea" type="Area3D" parent="." unique_id=365327397]
|
||||
monitorable = false
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="HitArea" unique_id=2111867348]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.35, 0)
|
||||
shape = SubResource("CapsuleShape3D_hit")
|
||||
|
||||
[node name="bear_model" parent="." unique_id=359217823 instance=ExtResource("2_bearglb")]
|
||||
|
||||
[node name="test_cube" type="Node3D" parent="bear_model" unique_id=646988893]
|
||||
script = ExtResource("3_rog1v")
|
||||
|
||||
[node name="Bear_FX" parent="bear_model/test_cube" unique_id=1183391245 instance=ExtResource("4_rog1v")]
|
||||
|
||||
[node name="Bear_fx_jump_smash" parent="bear_model/test_cube/Bear_FX" index="0" unique_id=750478984]
|
||||
visible = false
|
||||
|
||||
[node name="Bear_fx_claw_attack_R" parent="bear_model/test_cube/Bear_FX" index="1" unique_id=88064381]
|
||||
visible = false
|
||||
|
||||
[node name="Bear_fx_claw_attack_L" parent="bear_model/test_cube/Bear_FX" index="2" unique_id=1378755061]
|
||||
visible = false
|
||||
|
||||
[node name="Bear_fx_smash_hit" parent="bear_model/test_cube/Bear_FX" index="3" unique_id=1711579105]
|
||||
transform = Transform3D(0.55488384, -0.039024748, -0.018949924, 0.041069064, 0.55086076, 0.06814586, 0.013977209, -0.06933683, 0.5520644, 1.327292, -0.21312934, 5.190573)
|
||||
|
||||
[node name="RigidBody3D" type="AnimatableBody3D" parent="bear_model/test_cube/Bear_FX/Bear_fx_smash_hit" index="0" unique_id=1764208051]
|
||||
transform = Transform3D(1.0000001, -1.21071935e-08, -1.8626451e-08, -9.313226e-10, 0.99999994, 7.450581e-09, 3.7252903e-09, -1.4901161e-08, 0.99999994, 0, 0, 0)
|
||||
collision_layer = 8
|
||||
collision_mask = 2
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="bear_model/test_cube/Bear_FX/Bear_fx_smash_hit/RigidBody3D" unique_id=1779197150]
|
||||
transform = Transform3D(0.99993557, -0.00749125, -0.010078691, 0.0077760145, 0.999569, 0.028562747, 0.009858355, -0.028639637, 0.9995405, -1.5136471, 0.9093375, 35.591957)
|
||||
shape = SubResource("BoxShape3D_bfebr")
|
||||
disabled = true
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="bear_model/test_cube/Bear_FX/Bear_fx_smash_hit/RigidBody3D" unique_id=1276552823]
|
||||
transform = Transform3D(0.9935104, -0.040698394, -0.10621016, -0.108634494, -0.06290151, -0.9920882, 0.03369555, 0.99719334, -0.06691426, -1.6357545, -0.5093044, 12.68803)
|
||||
shape = SubResource("BoxShape3D_rog1v")
|
||||
|
||||
[node name="Skeleton3D" parent="bear_model/bear-rig" parent_id_path=PackedInt32Array(359217823, 1017999212) index="0" unique_id=1624609914]
|
||||
bones/1/position = Vector3(0.00851878, 0.24701798, 1.2888045)
|
||||
bones/1/rotation = Quaternion(0.29791054, -0.060797628, -0.056875575, 0.9509564)
|
||||
bones/2/rotation = Quaternion(0.084239505, -0.026013458, 0.009274505, 0.9960628)
|
||||
bones/2/scale = Vector3(0.9999999, 1.0000008, 0.99999934)
|
||||
bones/3/rotation = Quaternion(-0.14812404, -0.039577905, 0.049865585, 0.98691756)
|
||||
bones/4/rotation = Quaternion(-0.40577498, -0.03082885, 0.05040324, 0.9120612)
|
||||
bones/5/rotation = Quaternion(0.27801633, 0.0014148077, 0.015671793, 0.96044755)
|
||||
bones/6/rotation = Quaternion(0.50370073, 0.13519946, -0.093789615, 0.8480627)
|
||||
bones/7/rotation = Quaternion(0.75079185, 0.54212743, -0.37154716, 0.06604591)
|
||||
bones/8/rotation = Quaternion(0.22344273, -0.32689556, 0.65874565, -0.63973963)
|
||||
bones/9/rotation = Quaternion(0.026405705, -0.27415153, -0.3226086, 0.9055757)
|
||||
bones/10/rotation = Quaternion(0.030285481, -0.31167626, -0.037417818, 0.94896823)
|
||||
bones/11/rotation = Quaternion(0.751943, -0.5788067, 0.30500817, 0.080837056)
|
||||
bones/12/rotation = Quaternion(0.28422552, 0.2936944, -0.68526876, -0.6027987)
|
||||
bones/13/rotation = Quaternion(0.020711409, 0.24585825, 0.3386082, 0.9080029)
|
||||
bones/14/rotation = Quaternion(0.098969, 0.19860524, -0.007872087, 0.97503805)
|
||||
bones/15/rotation = Quaternion(0.6979166, 0.16086513, -0.15598965, 0.680222)
|
||||
bones/16/rotation = Quaternion(0.89734674, 0.09874082, -0.25790086, 0.34424722)
|
||||
bones/17/rotation = Quaternion(-0.13802421, 0.26758972, 0.081159085, 0.9501359)
|
||||
bones/17/scale = Vector3(0.9999998, 1.0000002, 1)
|
||||
bones/19/rotation = Quaternion(-4.514978e-15, 1, 7.4505806e-08, -5.523351e-07)
|
||||
bones/20/rotation = Quaternion(-0.49266306, -0.27058616, 0.262383, 0.7843606)
|
||||
bones/21/rotation = Quaternion(0.0016915401, 0.70246154, -0.001669446, 0.7117178)
|
||||
bones/22/rotation = Quaternion(-0.5496364, -0.3220462, -0.22350304, 0.73772115)
|
||||
bones/22/scale = Vector3(0.9999997, 0.9999998, 0.9999999)
|
||||
bones/23/rotation = Quaternion(-0.00015351747, 0.902104, -0.4315187, 0.00032039074)
|
||||
bones/24/rotation = Quaternion(6.628114e-12, 0.99999994, 5.2154085e-08, -0.00035543842)
|
||||
bones/25/position = Vector3(1.0191536, 3.5353048, 3.5049686)
|
||||
bones/25/rotation = Quaternion(-0.087474234, 0.16733547, 0.98056763, 0.053239316)
|
||||
bones/25/scale = Vector3(1, 17.518272, 1.0000001)
|
||||
bones/26/position = Vector3(-1.0831825, 3.749937, 2.5891113)
|
||||
bones/26/rotation = Quaternion(0.016340872, 0.19671263, 0.9801456, 0.01875816)
|
||||
bones/26/scale = Vector3(1.0000001, 18.765795, 1)
|
||||
bones/27/position = Vector3(1.0193456, -0.43209565, 2.5343885)
|
||||
bones/27/rotation = Quaternion(0.61800283, -0.11976056, 0.11976072, 0.7677157)
|
||||
bones/27/scale = Vector3(0.99999994, 16.85072, 1)
|
||||
bones/28/position = Vector3(-0.8340287, 1.0348616, 1.282705)
|
||||
bones/28/rotation = Quaternion(0.82860446, -0.029359974, 0.02935981, 0.5582926)
|
||||
bones/28/scale = Vector3(0.99999994, 32.068844, 1)
|
||||
bones/30/position = Vector3(0.032563455, -0.8335703, -0.9236449)
|
||||
bones/30/rotation = Quaternion(-0.8670657, 0.042821795, -0.07139772, 0.4911883)
|
||||
bones/31/position = Vector3(2.3450447e-08, -1.4631646, 0.23291242)
|
||||
bones/31/rotation = Quaternion(-6.0737464e-09, 4.8699293e-09, -1.4618977e-09, 1)
|
||||
bones/31/scale = Vector3(0.99999994, 0.9999999, 0.99999994)
|
||||
bones/32/position = Vector3(-0.04394375, -1.087056, 0.096768975)
|
||||
bones/32/rotation = Quaternion(-0.8343034, 0.119118, -0.061490715, 0.5347595)
|
||||
bones/32/scale = Vector3(0.9999999, 0.99999976, 0.99999964)
|
||||
bones/33/position = Vector3(3.977649e-08, -1.4631644, 0.23291251)
|
||||
bones/33/rotation = Quaternion(-8.833673e-08, -2.419923e-08, -6.733043e-09, 1)
|
||||
bones/33/scale = Vector3(0.9999998, 0.9999998, 0.99999994)
|
||||
bones/35/position = Vector3(1.0184407e-08, -1.0594703, -5.9146995e-08)
|
||||
bones/35/rotation = Quaternion(0.99971783, 1.3593646e-07, 5.3695976e-06, -0.023754615)
|
||||
bones/35/scale = Vector3(0.99999976, 0.9999998, 1.0000012)
|
||||
bones/39/position = Vector3(0.8199172, 0.25251278, 0.47214246)
|
||||
bones/39/rotation = Quaternion(0.71402234, 0.34199142, 0.043267474, 0.60937834)
|
||||
bones/39/scale = Vector3(1.0000004, 0.9999996, 0.9999991)
|
||||
bones/40/rotation = Quaternion(0.9336719, 1.2799235e-07, 3.7337827e-08, 0.3581296)
|
||||
bones/40/scale = Vector3(1.0000004, 1.0000001, 1.0000001)
|
||||
bones/41/rotation = Quaternion(-0.13802455, 0.26758966, 0.08115916, 0.9501359)
|
||||
bones/41/scale = Vector3(0.99999946, 0.99999976, 0.9999996)
|
||||
bones/42/position = Vector3(-1.9729964e-07, 0.56145483, 7.283501e-08)
|
||||
bones/46/scale = Vector3(0.99999946, 0.99999964, 0.9999999)
|
||||
bones/48/rotation = Quaternion(-2.9741386e-07, 0.13593404, 1.01778824e-07, 0.9907179)
|
||||
bones/48/scale = Vector3(0.9999993, 0.9999996, 0.9999999)
|
||||
bones/50/scale = Vector3(0.99999994, 0.99999994, 0.9999998)
|
||||
bones/51/rotation = Quaternion(-2.5567479e-08, -0.20499781, -2.3086146e-08, 0.9787625)
|
||||
bones/51/scale = Vector3(0.9999999, 0.99999964, 0.99999964)
|
||||
bones/53/position = Vector3(-0.8199191, 0.25251284, 0.47213903)
|
||||
bones/53/rotation = Quaternion(-0.5351706, 0.35860845, -0.15898216, 0.74814254)
|
||||
bones/53/scale = Vector3(1, 0.99999875, 0.99999946)
|
||||
bones/54/rotation = Quaternion(0.0023762286, -4.7362324e-08, -6.475868e-08, 0.9999972)
|
||||
bones/55/rotation = Quaternion(-0.54963607, -0.322046, -0.22350314, 0.73772144)
|
||||
bones/55/scale = Vector3(1.0000002, 1, 1.0000002)
|
||||
bones/56/position = Vector3(0.0013532753, 0.57868266, 0.05537574)
|
||||
bones/56/rotation = Quaternion(-0.00015348212, 0.90210384, -0.43151882, 0.0003204293)
|
||||
bones/57/rotation = Quaternion(0.70073944, -0.70073956, -0.094679825, -0.09467953)
|
||||
bones/60/scale = Vector3(1.0000004, 1.0000004, 1.0000002)
|
||||
bones/62/rotation = Quaternion(-1.7092354e-08, -0.18223058, 2.6700846e-08, 0.98325586)
|
||||
bones/62/scale = Vector3(1.0000002, 1.0000002, 1.0000001)
|
||||
bones/64/scale = Vector3(1.0000004, 1.0000004, 1)
|
||||
bones/65/rotation = Quaternion(-1.0345744e-08, -0.3796584, -4.0675246e-08, 0.9251268)
|
||||
bones/65/scale = Vector3(1.0000002, 1.0000004, 1.0000004)
|
||||
bones/67/rotation = Quaternion(0.7179022, -7.671307e-07, 7.885642e-07, 0.696144)
|
||||
bones/67/scale = Vector3(1.0000004, 0.9999986, 0.99999994)
|
||||
bones/68/rotation = Quaternion(0.9776482, 2.0029378e-07, 1.0460874e-06, -0.2102479)
|
||||
bones/68/scale = Vector3(1.0000004, 1.0000004, 0.9999982)
|
||||
bones/69/position = Vector3(-2.4645832e-08, -6.861796e-09, 7.455772e-08)
|
||||
bones/69/rotation = Quaternion(-0.8315212, 2.5276703e-08, -9.3330055e-09, 0.5554931)
|
||||
bones/69/scale = Vector3(1, 1.0000001, 1.0000002)
|
||||
bones/70/rotation = Quaternion(0.67750055, 8.820757e-08, 7.575834e-08, 0.7355223)
|
||||
bones/70/scale = Vector3(1, 1, 1)
|
||||
bones/71/scale = Vector3(0.9999999, 1, 0.9999999)
|
||||
bones/72/rotation = Quaternion(-2.1641608e-07, -4.6565607e-10, -4.6576065e-10, 1)
|
||||
bones/75/rotation = Quaternion(-0.34314692, -0.20321459, -0.2785586, 0.8737043)
|
||||
bones/76/position = Vector3(1.01587794e-07, -1.5306958e-07, -4.3554866e-07)
|
||||
bones/76/rotation = Quaternion(-0.51764834, -7.167482e-08, 1.7163823e-07, 0.85559356)
|
||||
bones/77/rotation = Quaternion(0.93367195, 1.2110854e-07, 3.8556042e-08, 0.35812962)
|
||||
bones/78/position = Vector3(0.8199172, 0.25251257, 0.47214243)
|
||||
bones/78/rotation = Quaternion(0.6979164, 0.16086517, -0.15598962, 0.6802223)
|
||||
bones/78/scale = Vector3(1.0000004, 0.9999997, 0.99999905)
|
||||
bones/80/rotation = Quaternion(0.7179022, -7.6713064e-07, 7.885641e-07, 0.696144)
|
||||
bones/80/scale = Vector3(1.0000004, 0.9999986, 0.99999994)
|
||||
bones/81/rotation = Quaternion(0.97764814, 1.9846473e-07, 1.0426893e-06, -0.21024783)
|
||||
bones/81/scale = Vector3(1.0000004, 1.0000002, 0.9999982)
|
||||
bones/82/position = Vector3(6.103571e-08, 8.8816435e-08, -3.6955274e-09)
|
||||
bones/82/rotation = Quaternion(-0.8315211, 2.3407136e-08, -1.2821512e-08, 0.5554932)
|
||||
bones/82/scale = Vector3(0.99999994, 0.99999994, 1)
|
||||
bones/83/rotation = Quaternion(0.6775009, -8.600083e-08, -8.977273e-08, 0.735522)
|
||||
bones/83/scale = Vector3(1, 1.0000001, 1)
|
||||
bones/84/scale = Vector3(0.99999994, 1.0000001, 0.9999999)
|
||||
bones/85/rotation = Quaternion(2.6833732e-07, -9.313788e-10, -2.5612494e-09, 1)
|
||||
bones/85/scale = Vector3(1.0000001, 1, 1.0000001)
|
||||
bones/87/rotation = Quaternion(-0.5230753, 0.20132942, 0.026226493, 0.8277505)
|
||||
bones/88/rotation = Quaternion(0.61967987, 0.23118778, 0.3169036, 0.679795)
|
||||
bones/89/position = Vector3(2.953037e-07, 4.9207458e-08, -4.3015167e-08)
|
||||
bones/89/rotation = Quaternion(-0.001144886, -2.973514e-08, 2.817069e-08, 0.9999994)
|
||||
bones/90/rotation = Quaternion(0.0023764072, -4.0769752e-08, -7.0690255e-08, 0.99999726)
|
||||
bones/91/position = Vector3(-0.8199192, 0.2525128, 0.47213912)
|
||||
bones/91/rotation = Quaternion(-0.49266297, -0.27058598, 0.2623832, 0.78436047)
|
||||
bones/91/scale = Vector3(1.0000002, 0.999999, 0.99999964)
|
||||
bones/96/position = Vector3(-0.021971898, -1.2751104, 0.16484088)
|
||||
bones/96/rotation = Quaternion(-0.47603267, 0.067788206, -0.035077166, 0.8761091)
|
||||
bones/96/scale = Vector3(0.9999999, 0.9999999, 0.99999976)
|
||||
bones/97/rotation = Quaternion(0.997074, -1.2813135e-07, 1.666339e-06, -0.07644201)
|
||||
bones/98/position = Vector3(0.01993539, 0.08757691, 0.045667563)
|
||||
bones/98/rotation = Quaternion(0.1475291, 0.03397043, -0.019923227, 0.9882734)
|
||||
bones/98/scale = Vector3(1, 1.0000011, 1.0000023)
|
||||
bones/101/position = Vector3(-0.021972047, 0.8282039, 0.0959422)
|
||||
bones/101/rotation = Quaternion(0.8371564, 0.04015539, 0.06490996, 0.5416119)
|
||||
bones/101/scale = Vector3(1, 1.0000066, 0.99998474)
|
||||
bones/102/rotation = Quaternion(0.95545256, -6.924111e-08, 2.2887033e-07, -0.29514462)
|
||||
bones/103/position = Vector3(0.17285576, 0.72785676, 1.0822707)
|
||||
bones/103/rotation = Quaternion(0.27801546, 0.0014157619, 0.015671493, 0.9604477)
|
||||
bones/103/scale = Vector3(1.0000002, 1.000013, 1.0000246)
|
||||
bones/104/rotation = Quaternion(0.5037003, 0.13519715, -0.093790196, 0.84806323)
|
||||
bones/104/scale = Vector3(1.0000721, 1.0000457, 0.99993384)
|
||||
bones/105/rotation = Quaternion(0.97757924, -0.053521663, -0.054415643, -0.19624804)
|
||||
bones/105/scale = Vector3(1.0000001, 1.0000083, 1.0000036)
|
||||
bones/106/position = Vector3(0.023142539, -0.54231995, -0.9607401)
|
||||
bones/106/rotation = Quaternion(0.99272084, -0.08158898, -0.03307842, -0.08218607)
|
||||
bones/107/rotation = Quaternion(0.903578, -0.12777254, -0.05477002, -0.4052421)
|
||||
bones/107/scale = Vector3(0.9999992, 0.9999624, 1.0000123)
|
||||
bones/108/position = Vector3(-1.1340098e-08, 7.923448e-07, 9.0939814e-08)
|
||||
bones/108/rotation = Quaternion(0.98967296, 0.0031370325, 0.10343237, -0.09919364)
|
||||
bones/110/rotation = Quaternion(9.815354e-07, 7.072085e-10, -9.586452e-08, 1)
|
||||
bones/110/scale = Vector3(0.99999994, 0.99999976, 1.0000001)
|
||||
bones/113/position = Vector3(0.07716276, 0.6410925, 0.71644557)
|
||||
bones/113/rotation = Quaternion(0.75079244, 0.54212654, -0.3715475, 0.0660462)
|
||||
bones/114/position = Vector3(-0.031743176, 0.60466695, -0.39704067)
|
||||
bones/114/rotation = Quaternion(0.4176498, -0.11118397, 0.55639553, -0.70966953)
|
||||
bones/114/scale = Vector3(1.0000015, 1.0000038, 1.0000079)
|
||||
bones/115/rotation = Quaternion(-0.07547326, 0.02173067, -0.31477332, 0.945912)
|
||||
bones/115/scale = Vector3(0.9999974, 1.0000036, 0.99999976)
|
||||
bones/116/rotation = Quaternion(0.03028559, -0.3116764, -0.037417784, 0.9489682)
|
||||
bones/116/scale = Vector3(1.0000005, 0.9999972, 1.0000013)
|
||||
bones/119/scale = Vector3(1.0000043, 0.9999975, 0.99999744)
|
||||
bones/121/rotation = Quaternion(-4.820391e-08, -0.1579088, -2.0880496e-08, 0.98745376)
|
||||
bones/121/scale = Vector3(1.0000037, 0.99999774, 0.9999977)
|
||||
bones/123/scale = Vector3(1.000003, 0.9999977, 0.99999917)
|
||||
bones/124/rotation = Quaternion(-3.1036683e-07, 0.17317644, 6.989145e-08, 0.9848908)
|
||||
bones/124/scale = Vector3(1.0000037, 0.9999978, 0.99999875)
|
||||
bones/126/rotation = Quaternion(-0.5163543, -0.16816929, 0.6340875, 0.550482)
|
||||
bones/126/scale = Vector3(1.0000015, 1.000007, 1.000004)
|
||||
bones/127/rotation = Quaternion(-0.24332331, 0.12663932, 0.6612194, 0.6982444)
|
||||
bones/127/scale = Vector3(1.0000017, 1.0000014, 1.0000097)
|
||||
bones/128/position = Vector3(-0.008928956, 0.128764, -0.06877987)
|
||||
bones/128/rotation = Quaternion(0.025037244, 0.39930493, -0.88358396, 0.24332726)
|
||||
bones/129/rotation = Quaternion(-0.07547334, 0.021730714, -0.31477335, 0.94591194)
|
||||
bones/131/rotation = Quaternion(-0.41802245, -0.28161782, 0.08442414, 0.85954714)
|
||||
bones/132/rotation = Quaternion(-0.5281791, -0.34319904, -0.62196887, -0.46518382)
|
||||
bones/133/rotation = Quaternion(-0.012777329, 0.011854946, 0.00015161165, 0.9998482)
|
||||
bones/133/scale = Vector3(1.0423008, 1.0423008, 1.0423006)
|
||||
bones/134/rotation = Quaternion(0.02152103, -3.688601e-08, -1.5255387e-07, 0.99976844)
|
||||
bones/134/scale = Vector3(0.9882629, 0.9882634, 0.98826265)
|
||||
bones/135/position = Vector3(-0.0317431, 0.60466677, -0.39704087)
|
||||
bones/135/rotation = Quaternion(0.22344373, -0.32689255, 0.658746, -0.6397405)
|
||||
bones/135/scale = Vector3(1.0000048, 1.0000036, 1.0000046)
|
||||
bones/137/position = Vector3(-0.33244255, 0.70370555, 0.67530614)
|
||||
bones/137/rotation = Quaternion(0.7519437, -0.5788053, 0.30500948, 0.08083551)
|
||||
bones/138/position = Vector3(-0.19594865, 0.65740275, -0.22511396)
|
||||
bones/138/rotation = Quaternion(0.36201134, 0.22157827, -0.6475769, -0.63284683)
|
||||
bones/138/scale = Vector3(1.0000019, 1.0000045, 1.0000057)
|
||||
bones/139/rotation = Quaternion(-0.018797327, 0.13857716, 0.33871746, 0.9304373)
|
||||
bones/139/scale = Vector3(0.9999983, 1.0000024, 0.9999992)
|
||||
bones/140/rotation = Quaternion(0.09896898, 0.1986053, -0.00787212, 0.975038)
|
||||
bones/140/scale = Vector3(1.0000031, 0.9999977, 0.9999988)
|
||||
bones/143/scale = Vector3(1.000005, 0.99999815, 0.9999967)
|
||||
bones/145/rotation = Quaternion(-1.7910523e-07, 0.10005118, -9.714451e-08, 0.9949823)
|
||||
bones/145/scale = Vector3(1.0000045, 0.99999803, 0.9999968)
|
||||
bones/147/scale = Vector3(1.0000035, 0.99999845, 0.9999981)
|
||||
bones/148/rotation = Quaternion(2.0844507e-07, 0.011625211, 4.5709146e-07, 0.9999325)
|
||||
bones/148/scale = Vector3(1.000004, 0.9999991, 0.999998)
|
||||
bones/150/rotation = Quaternion(-0.51635444, 0.16816957, -0.63408744, 0.55048186)
|
||||
bones/150/scale = Vector3(1.000001, 1.0000067, 1.000004)
|
||||
bones/151/rotation = Quaternion(-0.24332346, -0.12663896, -0.6612195, 0.6982443)
|
||||
bones/151/scale = Vector3(1.0000011, 1.0000017, 1.0000095)
|
||||
bones/152/position = Vector3(0.027921734, -0.124764316, 0.07102555)
|
||||
bones/152/rotation = Quaternion(-0.12973516, 0.47151387, -0.86254627, -0.12983702)
|
||||
bones/153/rotation = Quaternion(-0.018797398, 0.13857722, 0.33871746, 0.9304373)
|
||||
bones/155/rotation = Quaternion(-0.36541468, 0.16190512, -0.07102372, 0.91390073)
|
||||
bones/155/scale = Vector3(0.99999994, 1, 0.9999998)
|
||||
bones/156/rotation = Quaternion(0.68045896, -0.19169958, -0.3896983, 0.59022206)
|
||||
bones/157/rotation = Quaternion(-0.01277751, -0.011854968, -0.0001513001, 0.9998481)
|
||||
bones/157/scale = Vector3(1.0423003, 1.0422994, 1.0423005)
|
||||
bones/158/rotation = Quaternion(0.021521209, -2.5687226e-07, -2.570953e-07, 0.9997684)
|
||||
bones/158/scale = Vector3(0.9882631, 0.98826426, 0.9882618)
|
||||
bones/159/position = Vector3(-0.19594839, 0.65740275, -0.2251139)
|
||||
bones/159/rotation = Quaternion(0.28422734, 0.29369113, -0.68527013, -0.60279787)
|
||||
bones/159/scale = Vector3(1.0000027, 1.0000043, 1.0000049)
|
||||
bones/161/position = Vector3(0.07716276, 0.6410925, 0.71644557)
|
||||
bones/161/rotation = Quaternion(0.75079244, 0.54212654, -0.3715475, 0.0660462)
|
||||
bones/162/position = Vector3(-0.33244255, 0.70370555, 0.67530614)
|
||||
bones/162/rotation = Quaternion(0.7519437, -0.5788053, 0.30500948, 0.08083551)
|
||||
bones/165/position = Vector3(-1.5017577e-08, 0.26895812, -1.6243575e-08)
|
||||
bones/165/rotation = Quaternion(-0.019247467, -0.20323175, 0.97894067, -0.0012537595)
|
||||
bones/166/position = Vector3(0.0034187725, -3.131728, 0.9674823)
|
||||
bones/167/position = Vector3(0.209171, 5.0901713, -2.6670303)
|
||||
bones/167/rotation = Quaternion(0.16656846, 0.015223213, 0.18356222, 0.9686734)
|
||||
bones/167/scale = Vector3(0.9999988, 0.9999987, 1.0000023)
|
||||
bones/168/position = Vector3(0.18381567, -0.9622623, 0.9894084)
|
||||
bones/168/rotation = Quaternion(0.9362244, -6.2652596e-08, -0.34127164, -0.083770975)
|
||||
bones/168/scale = Vector3(1.0000011, 1.0000015, 1.0000101)
|
||||
bones/170/position = Vector3(0.748137, 0.69556385, 3.7252903e-09)
|
||||
bones/170/rotation = Quaternion(0.019250846, -0.20323181, 0.9789406, 0.001253055)
|
||||
bones/171/position = Vector3(0.6322718, -2.6572587, 0.6064028)
|
||||
bones/172/position = Vector3(-1.5122895, 4.4686184, -2.7014794)
|
||||
bones/172/rotation = Quaternion(0.21553025, -0.03620148, 0.11066054, 0.9695311)
|
||||
bones/172/scale = Vector3(0.99999887, 0.9999985, 1.0000024)
|
||||
bones/173/position = Vector3(0.18381546, -0.96226203, 0.9894083)
|
||||
bones/173/rotation = Quaternion(0.93622434, -2.9748788e-08, 0.34127158, -0.083771475)
|
||||
bones/173/scale = Vector3(0.999999, 1.0000014, 0.99999464)
|
||||
bones/175/position = Vector3(0.2542465, -2.2077389, 0.9589075)
|
||||
bones/175/rotation = Quaternion(-0.008919476, -0.00021326332, -0.000697989, 0.99996)
|
||||
bones/183/position = Vector3(-1.982537e-07, 5.9604563e-08, -1.517833e-08)
|
||||
bones/185/rotation = Quaternion(5.4077844e-07, -0.20349081, 0.97907686, -1.12395135e-07)
|
||||
bones/186/position = Vector3(0.57634556, 3.7607954, 0.15364014)
|
||||
bones/186/rotation = Quaternion(-0.9604305, -0.020206233, -0.08076539, -0.26578543)
|
||||
bones/186/scale = Vector3(0.9999997, 0.99999994, 1)
|
||||
bones/187/rotation = Quaternion(0.15451065, -2.0305349e-09, -2.0850066e-09, 0.9879911)
|
||||
bones/187/scale = Vector3(1.0000002, 0.99999994, 0.9999999)
|
||||
bones/197/position = Vector3(-0.0011225368, -0.015787723, -0.051779967)
|
||||
bones/199/rotation = Quaternion(0.00034800146, -0.20349097, 0.9790768, -7.2328476e-05)
|
||||
bones/200/position = Vector3(-1.0407574, 3.6267605, -0.083099455)
|
||||
bones/200/rotation = Quaternion(-0.9604305, -0.020206233, -0.08076539, -0.26578543)
|
||||
bones/200/scale = Vector3(0.9999997, 0.99999994, 1)
|
||||
bones/201/rotation = Quaternion(0.15451066, -1.9585848e-09, -2.5450761e-09, 0.9879911)
|
||||
bones/201/scale = Vector3(1.0000002, 0.99999994, 0.99999994)
|
||||
|
||||
[editable path="bear_model"]
|
||||
[editable path="bear_model/test_cube/Bear_FX"]
|
||||
@@ -0,0 +1,70 @@
|
||||
[gd_scene format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://hitbox.gd" id="1_qxn4a"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_6dow8"]
|
||||
height = 3.0
|
||||
radius = 4.0
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_tmmfg"]
|
||||
size = Vector3(2.6, 2.5, 20)
|
||||
|
||||
[sub_resource type="Animation" id="Animation_wcwtv"]
|
||||
length = 0.25
|
||||
tracks/0/type = "scale_3d"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("LeapSlamHitbox/CollisionShape3D")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = PackedFloat32Array(0, 1, 0.12, 1, 0.12, 0.06, 1, 1, 1, 1, 0.25, 1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="Animation" id="Animation_bg5u7"]
|
||||
length = 0.3
|
||||
tracks/0/type = "scale_3d"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SmashHitbox/CollisionShape3D")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = PackedFloat32Array(0, 1, 1, 1, 0.02, 0.1, 1, 1, 1, 1, 0.3, 1, 1, 1, 1)
|
||||
tracks/1/type = "position_3d"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SmashHitbox/CollisionShape3D")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = PackedFloat32Array(0, 1, 0, 0.9, 0.2, 0.1, 1, 0, 0.9, 10, 0.3, 1, 0, 0.9, 10)
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_u1id2"]
|
||||
_data = {
|
||||
&"leap_slam": SubResource("Animation_wcwtv"),
|
||||
&"smash_travel": SubResource("Animation_bg5u7")
|
||||
}
|
||||
|
||||
[node name="AttackHitboxes" type="Node3D" unique_id=2010404706]
|
||||
|
||||
[node name="LeapSlamHitbox" type="Area3D" parent="." unique_id=1751893032]
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
monitoring = false
|
||||
monitorable = false
|
||||
script = ExtResource("1_qxn4a")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="LeapSlamHitbox" unique_id=1320172052]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
|
||||
shape = SubResource("CylinderShape3D_6dow8")
|
||||
|
||||
[node name="SmashHitbox" type="Area3D" parent="." unique_id=1579648726]
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
monitoring = false
|
||||
monitorable = false
|
||||
script = ExtResource("1_qxn4a")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="SmashHitbox" unique_id=528637962]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9, 10)
|
||||
shape = SubResource("BoxShape3D_tmmfg")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=2139876757]
|
||||
libraries/ = SubResource("AnimationLibrary_u1id2")
|
||||
@@ -12,13 +12,27 @@ I am a **Godot 4.6+ expert**. I follow current best practices for GDScript, scen
|
||||
|
||||
| Path | Purpose |
|
||||
|---|---|
|
||||
| `scene.tscn` | Main scene (arena + player) |
|
||||
| `scene.tscn` | The reusable **shell** loaded for every level: player, camera, HUD, PS1 filter, and an empty `LevelRoot`. Its `game_shell.gd` instances the active level's module into `LevelRoot` at runtime |
|
||||
| `levels/` | The level system: per-level module scenes plus the code that defines, loads and sequences them (see rows below) |
|
||||
| `levels/game_shell.gd` | Shell controller — on load, frees any current level module and instances `Run.active_level().level_scene` into `LevelRoot`. Swapping the whole subtree (never hiding it) is what keeps one level's meshes/colliders/spawners from leaking into the next |
|
||||
| `levels/arena_level.tscn` | The arena **level module**: floor + wall colliders, arena meshes, `MatadorSpawner` (with child `Node3D` spawn points placed by the designer), lighting, audience (`PublikNode`). Instanced into the shell's `LevelRoot` |
|
||||
| `levels/bear_level.tscn` | The Bear's Den **level module**: bear-arena mesh, its own floor collider, lighting, and a `BearSpawner` (`bear_spawn.gd`) that places the bear at center. Instanced into the shell's `LevelRoot` |
|
||||
| `Player.tscn` | Player scene root (`CharacterBody3D`) |
|
||||
| `player.gd` | Movement, charge, turning logic |
|
||||
| `camera_spring_arm.gd` | Mouse-look pivot (`Node3D` + `SpringArm3D`) |
|
||||
| `camera_follow.gd` | Smooth camera follow (`Camera3D`) |
|
||||
| `matador.gd` | Matador AI (wander / ragdoll state machine) |
|
||||
| `matador_spawn.gd` | Spawns N matadors at random arena positions |
|
||||
| `levels/matador_spawn.gd` | Arena spawner — one matador per designer-placed child `Node3D` spawn point (each enters with a jump-roll toward center); falls back to a programmatic spread if no spawn points are present. Also handles the split-on-death hydra logic |
|
||||
| `levels/bear_spawn.gd` | Bear-level spawner — instantiates `enemy_scene` at the arena center; emits the same `all_defeated` / `matador_killed` signals as `matador_spawn.gd` |
|
||||
| `Bear.tscn` / `bear.gd` | Dark-Souls-style bear boss (`CharacterBody3D`). Routine state machine (wind-up → active → recovery) picking telegraphed moves by range band: Double Swipe / Overhead Smash (close), Leap Slam (mid-far), plus Stalk (2-leg walk-in) / Prowl (4-leg lope) positioning. Melee steps in during the swing (`bear_lunge_speed`) + tracks the bull; the leap is frame-synced to JUMP_SMASH so the paws hit ground on the impact frame (`bear_leap_impact_frame`); slams kick up dust + shake. Combos chain, hyper-armour mid-swing + poise (`bear_stagger_cd`), phase 2 enrage under `bear_enrage_frac` HP. Never damages the bull by colliding — only swings/slams. A horns-first bull charge wounds it (`_sweep_bull_ram`: swept prev→now so a tunnelling/point-blank charge still lands, gated by `bear_ram_reach` + `bull_gore_arc`, edge-triggered = one charge per wound). Joins `&"matador"` so bull abilities already hit it. Tuning under the `Bear` DP section |
|
||||
| `BearAttackHitboxes.tscn` | The bear's attack colliders as a self-contained sub-scene (instanced under `bear_model`): a `LeapSlamHitbox` (Hitbox + cylinder = ground circle) and `SmashHitbox` (Hitbox + box = forward shockwave lane), plus an `AnimationPlayer` whose `leap_slam` / `smash_travel` clips author each collider's size + travel — scrub to tweak, like `Bear_FX`. `bear.gd` only fires the clip, arms the knock-up shaping, and sweeps for overlaps while it runs (see `_setup_attack_hitboxes` / `_start_attack_hitbox`) |
|
||||
| `Sword.tscn` / `hitbox.gd` | The matador's sword wrapper (glb + editor-tweakable `BladeHitbox`). `hitbox.gd` (`class_name Hitbox`, Area3D) is the shared attack collider: `activate()`/`deactivate()` gate an active window, `sweep()` catches bodies already inside (AoE), and knock-up can ramp by distance (`knock_up_min_dist`/`_max_dist`) for the bear's outer-ring launch / further-hit-flies-higher |
|
||||
| `levels/run_state.gd` | Run progression autoload (`Run`) — Slay-the-Spire map + player position across fights |
|
||||
| `levels/level_def.gd` | `LevelDef` resource — a level's name / map colour / `scene_path` (always the shell) / `level_scene` (the level module instanced into the shell) / optional `enemy_scene` (arena wave vs. a boss like the bear) |
|
||||
| `levels/map_node.gd` | `MapNode` — one runtime node on the run map (position, level, links) |
|
||||
| `levels/MapScreen.tscn` / `levels/map_screen.gd` | Between-fights map screen; win → pick a node → next level |
|
||||
| `crowd_marker.gd` | `CrowdMarker` (`@tool Node3D`, `class_name`) — designer drops one per billboard spectator via the editor's Add-Node dialog; picks one of six 60°-spaced facings from the `orientation` dropdown. Draws an editor-only preview (slab + forward arrow, never serialised) and joins the `&"crowd_marker"` group |
|
||||
| `crowd_billboards.gd` / `crowd_billboard.gdshader` | `MultiMeshInstance3D` that harvests every `CrowdMarker` (group `&"crowd_marker"`) into one draw call, using each marker's world position + chosen facing. Front/back sprite sheet baked by `tools/bake_crowd_sheet.gd`; falls back to a generated inward-facing ring when no markers are placed |
|
||||
| `debug_params.gd` | Runtime-tunable parameter registry (autoload `DP`) |
|
||||
| `Assets/` | Raw 3D assets (`.glb`, `.fbx`) |
|
||||
| `Blender/` | Blender source files, animation scripts, FBX exports |
|
||||
@@ -88,10 +102,19 @@ After FBX import, animations appear as `Armature|walk` and `Armature|idle` in An
|
||||
bash run_tests.sh
|
||||
|
||||
# Individual tests:
|
||||
gdlint *.gd tests/*.gd # GDScript lint (gdtoolkit, installed via uv)
|
||||
gdlint *.gd levels/*.gd tests/*.gd # GDScript lint (gdtoolkit, installed via uv)
|
||||
godot --headless --script tests/logic_test.gd # pure logic, ~2 s
|
||||
godot --headless --script tests/performance_test.gd # frame-budget regression guard, ~4 s
|
||||
godot --headless --script tests/gameplay_test.gd # full scene, bone sanity, ~4 s
|
||||
godot --headless --script tests/level_switch_test.gd # no arena geometry leaks into the bear level, ~2 s
|
||||
godot --headless --script tests/bear_boss_test.gd # bear boss moveset: routines, leap landing, hyper-armour, ~10 s
|
||||
godot --headless --script tests/bear_fx_test.gd # bear attack-FX: each Bear_FX clip pops its mesh + self-hides, ~2 s
|
||||
godot --headless --script tests/bear_hitbox_test.gd # bear attack colliders: leap launches everywhere (ring_frac slider) + smash lane travel, ~3 s
|
||||
godot --headless --script tests/bear_ram_test.gd # a horns-first bull charge wounds the bear once; away/wide/slow spared, ~3 s
|
||||
godot --headless --script tests/matador_stab_test.gd # matador's BladeHitbox thrust gores a stationary bull, and a landed stab breaks it off to taunt (anti-spam), ~2 s
|
||||
godot --headless --script tests/matador_taunt_react_test.gd # a taunting matador answers a charge: spear from range, sword up close, ignores non-charges, ~2 s
|
||||
godot --headless --script tests/matador_charge_test.gd # bull's charge is swept (tunnel-proof) so a fast dash still gores; a committed charge pierces the survival roll, ~2 s
|
||||
godot --headless --script tests/matador_spear_test.gd # thrown spear masks the BULL layer and hits a stationary bull, ~2 s
|
||||
|
||||
# Gameplay test with real rendering (inspect frame strip visually):
|
||||
godot --script tests/gameplay_test.gd # opens a window, saves real screenshots
|
||||
|
||||
@@ -4,15 +4,16 @@ importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bxm7c6ldrdiq5"
|
||||
path.bptc="res://.godot/imported/citrus_orchard_road_puresky_4k.hdr-262868e8787abf05f7044da72beefce7.bptc.ctex"
|
||||
path.astc="res://.godot/imported/citrus_orchard_road_puresky_4k.hdr-262868e8787abf05f7044da72beefce7.astc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://HDRI/citrus_orchard_road_puresky_4k.hdr"
|
||||
dest_files=["res://.godot/imported/citrus_orchard_road_puresky_4k.hdr-262868e8787abf05f7044da72beefce7.bptc.ctex"]
|
||||
dest_files=["res://.godot/imported/citrus_orchard_road_puresky_4k.hdr-262868e8787abf05f7044da72beefce7.bptc.ctex", "res://.godot/imported/citrus_orchard_road_puresky_4k.hdr-262868e8787abf05f7044da72beefce7.astc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
||||
@@ -4,15 +4,16 @@ importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://3syhacswepyj"
|
||||
path.bptc="res://.godot/imported/kloppenheim_06_puresky_4k.hdr-026f0eabdfce50035e2f8417ce3e0060.bptc.ctex"
|
||||
path.astc="res://.godot/imported/kloppenheim_06_puresky_4k.hdr-026f0eabdfce50035e2f8417ce3e0060.astc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://HDRI/kloppenheim_06_puresky_4k.hdr"
|
||||
dest_files=["res://.godot/imported/kloppenheim_06_puresky_4k.hdr-026f0eabdfce50035e2f8417ce3e0060.bptc.ctex"]
|
||||
dest_files=["res://.godot/imported/kloppenheim_06_puresky_4k.hdr-026f0eabdfce50035e2f8417ce3e0060.bptc.ctex", "res://.godot/imported/kloppenheim_06_puresky_4k.hdr-026f0eabdfce50035e2f8417ce3e0060.astc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
||||
@@ -1,137 +0,0 @@
|
||||
[gd_scene format=3 uid="uid://c4df4qgpc3d5g"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://eu2lqjhowj4t" path="res://Assets/Matador.glb" id="1_eicjn"]
|
||||
[ext_resource type="Script" uid="uid://dycnoiadljbb1" path="res://Assets/matador_intro_menu.gd" id="2_5jr0i"]
|
||||
[ext_resource type="PackedScene" uid="uid://dio67r8ambe7h" path="res://Assets/arena_placeholder_v01.glb" id="3_1v6n4"]
|
||||
[ext_resource type="PackedScene" uid="uid://dxe72ig8gfbcg" path="res://Assets/arena model2026.glb" id="3_5jr0i"]
|
||||
[ext_resource type="PackedScene" uid="uid://crtm0xtiql3r8" path="res://Player.tscn" id="4_eicjn"]
|
||||
[ext_resource type="Texture2D" uid="uid://3syhacswepyj" path="res://HDRI/kloppenheim_06_puresky_4k.hdr" id="6_1v6n4"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_eicjn"]
|
||||
|
||||
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_w7j4y"]
|
||||
panorama = ExtResource("6_1v6n4")
|
||||
energy_multiplier = 5.6
|
||||
|
||||
[sub_resource type="Sky" id="Sky_3el7n"]
|
||||
sky_material = SubResource("PanoramaSkyMaterial_w7j4y")
|
||||
|
||||
[sub_resource type="Environment" id="Environment_5jr0i"]
|
||||
background_mode = 2
|
||||
background_energy_multiplier = 0.18
|
||||
sky = SubResource("Sky_3el7n")
|
||||
ambient_light_color = Color(0.31061712, 0.31061712, 0.3106171, 1)
|
||||
ambient_light_energy = 16.0
|
||||
ssao_enabled = true
|
||||
ssao_radius = 1.17
|
||||
ssao_intensity = 0.0
|
||||
glow_intensity = 0.34
|
||||
glow_strength = 0.29
|
||||
glow_bloom = 0.1
|
||||
fog_light_color = Color(2.211, 2.211, 2.211, 1)
|
||||
fog_light_energy = 0.01
|
||||
fog_density = 0.0399
|
||||
volumetric_fog_enabled = true
|
||||
volumetric_fog_density = 0.0005
|
||||
volumetric_fog_emission = Color(1, 1, 1, 1)
|
||||
volumetric_fog_emission_energy = 7.85
|
||||
volumetric_fog_anisotropy = 0.9
|
||||
volumetric_fog_length = 69.07
|
||||
|
||||
[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_5jr0i"]
|
||||
dof_blur_far_enabled = true
|
||||
dof_blur_far_distance = 26.01
|
||||
dof_blur_near_enabled = true
|
||||
dof_blur_near_distance = 2.6
|
||||
dof_blur_near_transition = 5.0
|
||||
|
||||
[node name="IntroMenu" type="Node3D" unique_id=2130618263]
|
||||
|
||||
[node name="Matador" parent="." unique_id=166852612 instance=ExtResource("1_eicjn")]
|
||||
transform = Transform3D(-0.56715536, 0, -0.8236109, 0, 1, 0, 0.8236109, 0, -0.56715536, 5.2114463, -0.08998108, 1.8927763)
|
||||
script = ExtResource("2_5jr0i")
|
||||
|
||||
[node name="Skeleton3D" parent="Matador/Armature" parent_id_path=PackedInt32Array(166852612, 1269629432) index="0" unique_id=978366810]
|
||||
bones/0/position = Vector3(0.056660548, 0.6424767, -0.0167365)
|
||||
bones/0/rotation = Quaternion(0.013179442, -0.2660563, 0.073319815, 0.9610747)
|
||||
bones/1/rotation = Quaternion(0.06234612, 0.049236443, 0.08183311, 0.99347484)
|
||||
bones/2/rotation = Quaternion(-0.073883414, -0.049860783, -0.17668208, 0.9802238)
|
||||
bones/3/rotation = Quaternion(0.1986702, -0.17794952, -0.71790075, 0.6430262)
|
||||
bones/4/rotation = Quaternion(0.34491858, -0.4473084, -0.25076818, 0.7861691)
|
||||
bones/5/rotation = Quaternion(0.2577085, 0.103201896, -0.6748433, 0.68375605)
|
||||
bones/6/rotation = Quaternion(1.7417646e-08, -1.0305205e-07, -0.05870078, 0.99827564)
|
||||
bones/7/rotation = Quaternion(0.24033272, 0.3103031, 0.5222128, 0.7571301)
|
||||
bones/8/rotation = Quaternion(5.5530215e-08, 1.2911333e-07, 0.055464897, 0.99846065)
|
||||
bones/9/rotation = Quaternion(-6.3051346e-09, -3.6333955e-07, 0.005667881, 0.999984)
|
||||
bones/10/rotation = Quaternion(2.5839595e-08, 9.468444e-08, 0.058700778, 0.99827564)
|
||||
bones/11/rotation = Quaternion(0.39202607, 0.47060946, 0.57993996, 0.53713304)
|
||||
bones/12/rotation = Quaternion(0.8712108, 0.008231261, 0.48523128, 0.073990606)
|
||||
bones/13/rotation = Quaternion(-0.056263044, 0.0027001738, 0.3080972, 0.9496859)
|
||||
bones/14/rotation = Quaternion(0.016082464, 0.024660494, -0.86586916, 0.4994036)
|
||||
bones/15/rotation = Quaternion(0.6067664, -0.3062479, -0.7163194, 0.15790276)
|
||||
bones/16/rotation = Quaternion(-0.0731876, -0.0023153822, -0.47496143, 0.87695485)
|
||||
bones/17/rotation = Quaternion(-0.11824294, -0.17776872, 0.80557114, 0.55269533)
|
||||
bones/18/rotation = Quaternion(0.5305965, -0.28927496, 0.76720744, -0.21489605)
|
||||
bones/20/position = Vector3(0.22012731, 0.38421977, 0.36399037)
|
||||
bones/21/position = Vector3(-0.23671798, 0.052281797, -0.027087089)
|
||||
bones/21/rotation = Quaternion(0.5078295, -0.4920459, -0.4920459, 0.50782955)
|
||||
bones/22/position = Vector3(-0.39721552, 0.31719273, 0.3595722)
|
||||
bones/23/position = Vector3(-0.9167187, 1.3206767, 0.42621902)
|
||||
bones/23/rotation = Quaternion(0.9993525, -0.0021175682, 0.03502641, -0.00795782)
|
||||
bones/24/rotation = Quaternion(0.08874816, -0.018719967, -0.04671622, 0.99478185)
|
||||
bones/25/rotation = Quaternion(0.09634846, -0.0268489, -0.04050248, 0.9941608)
|
||||
|
||||
[node name="matador" parent="Matador/Armature/Skeleton3D" index="0" unique_id=256196413]
|
||||
transform = Transform3D(0.8642424, 0, 0.50307554, 0, 1, 0, -0.50307554, 0, 0.8642424, 0, 0, 0)
|
||||
|
||||
[node name="Muleta" parent="Matador/Armature/Skeleton3D" index="1" unique_id=988244930]
|
||||
cast_shadow = 0
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="." unique_id=1531255459]
|
||||
transform = Transform3D(0.42176014, 0.2362673, 0.8753835, -0.10687317, 0.97167695, -0.21076548, -0.900387, -0.0046625203, 0.4350652, 8.41945, 0.17132203, 2.0652685)
|
||||
fov = 41.6
|
||||
near = 0.001
|
||||
|
||||
[node name="arena model2026" parent="." unique_id=179544183 instance=ExtResource("3_5jr0i")]
|
||||
transform = Transform3D(-0.83746713, 0, 0.54648757, 0, 0.99999994, 0, -0.54648757, 0, -0.83746713, 3.8733478, -0.6, -1.1080065)
|
||||
|
||||
[node name="arena_placeholder_v01" parent="." unique_id=1343590504 instance=ExtResource("3_1v6n4")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.3344436, 0, -1.5401263)
|
||||
visible = false
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="arena_placeholder_v01" unique_id=340133176]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="arena_placeholder_v01/StaticBody3D" unique_id=201484167]
|
||||
transform = Transform3D(-33.265, 4.9526625e-07, -2.9081186e-06, 5.0228755e-06, 3.28, 0, -2.9081186e-06, 4.329755e-14, 33.265, 0, -3.3065948, 0)
|
||||
shape = SubResource("CylinderShape3D_eicjn")
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=660229295]
|
||||
transform = Transform3D(0.9491592, 0.31479403, -0.0014368258, -0.28033537, 0.84731936, 0.45106864, 0.14321098, -0.4277331, 0.89248836, 1.1162033, 7.3956842, -4.480528)
|
||||
light_energy = 1.32
|
||||
shadow_enabled = true
|
||||
shadow_blur = 8.689
|
||||
|
||||
[node name="DirectionalLight3D2" type="DirectionalLight3D" parent="." unique_id=498871251]
|
||||
transform = Transform3D(0.835524, -0.5376153, 0.11344351, -0.48260456, -0.6193575, 0.6192651, -0.26266432, -0.572159, -0.7769435, 1.1162033, 7.3956842, -4.480528)
|
||||
visible = false
|
||||
light_energy = 0.415
|
||||
light_indirect_energy = 16.0
|
||||
light_volumetric_fog_energy = 1.11
|
||||
shadow_blur = 10.0
|
||||
|
||||
[node name="Player" parent="." unique_id=165510044 instance=ExtResource("4_eicjn")]
|
||||
transform = Transform3D(0.9563367, 0, 0.29226705, 0, 1, 0, -0.29226705, 0, 0.9563367, 3.0920272, 0.39692497, -4.302477)
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=114793752]
|
||||
environment = SubResource("Environment_5jr0i")
|
||||
camera_attributes = SubResource("CameraAttributesPractical_5jr0i")
|
||||
|
||||
[node name="SpotLight3D" type="SpotLight3D" parent="." unique_id=1428020323]
|
||||
transform = Transform3D(0.94930077, -0.05846006, -0.30888584, 0.21308771, 0.8420559, 0.4955155, 0.23113126, -0.53621286, 0.81182146, -20.807917, 10.690277, 20.135067)
|
||||
visible = false
|
||||
light_energy = 16.0
|
||||
light_volumetric_fog_energy = 16.0
|
||||
shadow_enabled = true
|
||||
spot_range = 84.316696
|
||||
|
||||
[editable path="Matador"]
|
||||
@@ -1,7 +1,13 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://bmnmenu0intr1"]
|
||||
[gd_scene format=3 uid="uid://bmnmenu0intr1"]
|
||||
|
||||
[ext_resource type="Script" path="res://main_menu.gd" id="1_menu"]
|
||||
[ext_resource type="VideoStream" path="res://Assets/intro_bg.ogv" id="2_video"]
|
||||
[ext_resource type="Script" uid="uid://46y10alai56q" path="res://main_menu.gd" id="1_menu"]
|
||||
[ext_resource type="VideoStream" uid="uid://csxxlnq74fej4" path="res://Assets/intro_bg.ogv" id="2_video"]
|
||||
[ext_resource type="Shader" uid="uid://bmdtg6qlh7wri" path="res://menu_blur.gdshader" id="3_blur"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="mat_blur"]
|
||||
shader = ExtResource("3_blur")
|
||||
shader_parameter/blur_radius = 3.0
|
||||
shader_parameter/darken = 0.35
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="sb_normal"]
|
||||
content_margin_left = 16.0
|
||||
@@ -30,7 +36,7 @@ corner_radius_top_right = 8
|
||||
corner_radius_bottom_right = 8
|
||||
corner_radius_bottom_left = 8
|
||||
|
||||
[node name="MainMenu" type="Control"]
|
||||
[node name="MainMenu" type="Control" unique_id=371457725]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
@@ -39,29 +45,54 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_menu")
|
||||
|
||||
[node name="VideoStreamPlayer" type="VideoStreamPlayer" parent="."]
|
||||
[node name="VideoBlur" type="AspectRatioContainer" parent="." unique_id=374854263]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
ratio = 1.7778
|
||||
stretch_mode = 3
|
||||
|
||||
[node name="BlurVideo" type="VideoStreamPlayer" parent="VideoBlur" unique_id=374854262]
|
||||
material = SubResource("mat_blur")
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
mouse_filter = 2
|
||||
stream = ExtResource("2_video")
|
||||
expand = true
|
||||
|
||||
[node name="MainPanel" type="Control" parent="."]
|
||||
[node name="VideoAspect" type="AspectRatioContainer" parent="." unique_id=374854264]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
ratio = 1.7778
|
||||
|
||||
[node name="PlayButton" type="Button" parent="MainPanel"]
|
||||
[node name="VideoStreamPlayer" type="VideoStreamPlayer" parent="VideoAspect" unique_id=374854265]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
mouse_filter = 2
|
||||
stream = ExtResource("2_video")
|
||||
expand = true
|
||||
|
||||
[node name="CapeLayer" type="Control" parent="VideoAspect" unique_id=374854266]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="PlayButton" type="Button" parent="VideoAspect/CapeLayer" unique_id=743089847]
|
||||
layout_mode = 1
|
||||
anchor_left = 0.4530
|
||||
anchors_preset = -1
|
||||
anchor_left = 0.453
|
||||
anchor_top = 0.6513
|
||||
anchor_right = 0.4530
|
||||
anchor_right = 0.453
|
||||
anchor_bottom = 0.6513
|
||||
offset_left = -120.0
|
||||
offset_top = -55.0
|
||||
@@ -74,13 +105,23 @@ theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 8
|
||||
theme_override_font_sizes/font_size = 56
|
||||
theme_override_styles/normal = SubResource("sb_normal")
|
||||
theme_override_styles/hover = SubResource("sb_hover")
|
||||
theme_override_styles/pressed = SubResource("sb_hover")
|
||||
theme_override_styles/hover = SubResource("sb_hover")
|
||||
theme_override_styles/focus = SubResource("sb_hover")
|
||||
text = "PLAY"
|
||||
|
||||
[node name="OptionsButton" type="Button" parent="MainPanel"]
|
||||
[node name="MainPanel" type="Control" parent="." unique_id=1263320918]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="OptionsButton" type="Button" parent="MainPanel" unique_id=673211179]
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_left = 0.11
|
||||
anchor_top = 0.94
|
||||
anchor_right = 0.11
|
||||
@@ -96,13 +137,14 @@ theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 6
|
||||
theme_override_font_sizes/font_size = 30
|
||||
theme_override_styles/normal = SubResource("sb_normal")
|
||||
theme_override_styles/hover = SubResource("sb_hover")
|
||||
theme_override_styles/pressed = SubResource("sb_hover")
|
||||
theme_override_styles/hover = SubResource("sb_hover")
|
||||
theme_override_styles/focus = SubResource("sb_hover")
|
||||
text = "OPTIONS"
|
||||
|
||||
[node name="CreditsButton" type="Button" parent="MainPanel"]
|
||||
[node name="CreditsButton" type="Button" parent="MainPanel" unique_id=882339461]
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_left = 0.489
|
||||
anchor_top = 0.951
|
||||
anchor_right = 0.489
|
||||
@@ -118,13 +160,14 @@ theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 6
|
||||
theme_override_font_sizes/font_size = 30
|
||||
theme_override_styles/normal = SubResource("sb_normal")
|
||||
theme_override_styles/hover = SubResource("sb_hover")
|
||||
theme_override_styles/pressed = SubResource("sb_hover")
|
||||
theme_override_styles/hover = SubResource("sb_hover")
|
||||
theme_override_styles/focus = SubResource("sb_hover")
|
||||
text = "CREDITS"
|
||||
|
||||
[node name="ExitButton" type="Button" parent="MainPanel"]
|
||||
[node name="ExitButton" type="Button" parent="MainPanel" unique_id=1064586744]
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_left = 0.92
|
||||
anchor_top = 0.951
|
||||
anchor_right = 0.92
|
||||
@@ -140,12 +183,12 @@ theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 6
|
||||
theme_override_font_sizes/font_size = 30
|
||||
theme_override_styles/normal = SubResource("sb_normal")
|
||||
theme_override_styles/hover = SubResource("sb_hover")
|
||||
theme_override_styles/pressed = SubResource("sb_hover")
|
||||
theme_override_styles/hover = SubResource("sb_hover")
|
||||
theme_override_styles/focus = SubResource("sb_hover")
|
||||
text = "EXIT"
|
||||
|
||||
[node name="OptionsPanel" type="CenterContainer" parent="."]
|
||||
[node name="OptionsPanel" type="CenterContainer" parent="." unique_id=593823446]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
@@ -154,17 +197,17 @@ anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Backdrop" type="ColorRect" parent="OptionsPanel"]
|
||||
[node name="Backdrop" type="ColorRect" parent="OptionsPanel" unique_id=1811982549]
|
||||
layout_mode = 2
|
||||
color = Color(0, 0, 0, 0.55)
|
||||
mouse_filter = 2
|
||||
color = Color(0, 0, 0, 0.55)
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="OptionsPanel"]
|
||||
[node name="VBox" type="VBoxContainer" parent="OptionsPanel" unique_id=2125052135]
|
||||
custom_minimum_size = Vector2(560, 480)
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="OptionsPanel/VBox"]
|
||||
[node name="TitleLabel" type="Label" parent="OptionsPanel/VBox" unique_id=853979265]
|
||||
layout_mode = 2
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 8
|
||||
@@ -172,7 +215,7 @@ theme_override_font_sizes/font_size = 44
|
||||
text = "Controls"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="Hint" type="Label" parent="OptionsPanel/VBox"]
|
||||
[node name="Hint" type="Label" parent="OptionsPanel/VBox" unique_id=1809504670]
|
||||
layout_mode = 2
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 5
|
||||
@@ -180,24 +223,24 @@ theme_override_font_sizes/font_size = 20
|
||||
text = "Click a key, then press a new key. Esc cancels."
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="Scroll" type="ScrollContainer" parent="OptionsPanel/VBox"]
|
||||
[node name="Scroll" type="ScrollContainer" parent="OptionsPanel/VBox" unique_id=683738956]
|
||||
custom_minimum_size = Vector2(0, 340)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
horizontal_scroll_mode = 0
|
||||
|
||||
[node name="RebindList" type="VBoxContainer" parent="OptionsPanel/VBox/Scroll"]
|
||||
[node name="RebindList" type="VBoxContainer" parent="OptionsPanel/VBox/Scroll" unique_id=1261520279]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
theme_override_constants/separation = 8
|
||||
|
||||
[node name="BackButton" type="Button" parent="OptionsPanel/VBox"]
|
||||
[node name="BackButton" type="Button" parent="OptionsPanel/VBox" unique_id=1587524951]
|
||||
custom_minimum_size = Vector2(0, 48)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 24
|
||||
text = "Back"
|
||||
|
||||
[node name="CreditsPanel" type="CenterContainer" parent="."]
|
||||
[node name="CreditsPanel" type="CenterContainer" parent="." unique_id=175743902]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
@@ -206,17 +249,17 @@ anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Backdrop" type="ColorRect" parent="CreditsPanel"]
|
||||
[node name="Backdrop" type="ColorRect" parent="CreditsPanel" unique_id=1950253735]
|
||||
layout_mode = 2
|
||||
color = Color(0, 0, 0, 0.55)
|
||||
mouse_filter = 2
|
||||
color = Color(0, 0, 0, 0.55)
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="CreditsPanel"]
|
||||
[node name="VBox" type="VBoxContainer" parent="CreditsPanel" unique_id=901836808]
|
||||
custom_minimum_size = Vector2(520, 360)
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 20
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="CreditsPanel/VBox"]
|
||||
[node name="TitleLabel" type="Label" parent="CreditsPanel/VBox" unique_id=825593160]
|
||||
layout_mode = 2
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 8
|
||||
@@ -224,36 +267,36 @@ theme_override_font_sizes/font_size = 44
|
||||
text = "Credits"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="Names" type="RichTextLabel" parent="CreditsPanel/VBox"]
|
||||
[node name="Names" type="RichTextLabel" parent="CreditsPanel/VBox" unique_id=1355198629]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/default_color = Color(0.93, 0.88, 0.72, 1)
|
||||
theme_override_constants/outline_size = 5
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/line_separation = 6
|
||||
theme_override_constants/outline_size = 5
|
||||
theme_override_font_sizes/normal_font_size = 26
|
||||
theme_override_font_sizes/bold_font_size = 30
|
||||
bbcode_enabled = true
|
||||
fit_content = true
|
||||
scroll_active = false
|
||||
text = "[center][font_size=32][color=#d9a833]Bullosseum[/color][/font_size]
|
||||
|
||||
[b][color=#d9a833]Siim Raud[/color][/b] [url=https://instagram.com/siimpressionist]@siimpressionist[/url]
|
||||
[font_size=20]Creative, art, idea guy[/font_size]
|
||||
[font_size=20]Artist / Animator[/font_size]
|
||||
|
||||
[b][color=#d9a833]Richard Aasa[/color][/b] [url=https://instagram.com/aasarichard]@aasarichard[/url]
|
||||
[font_size=20]Programmer[/font_size]
|
||||
|
||||
[b][color=#d9a833]Kadi Rebane[/color][/b] [url=https://instagram.com/kadirebane]@kadirebane[/url]
|
||||
[b][color=#d9a833]Kadi Rebane[/color][/b] [url=https://x.com/_barkseven]@_barkseven[/url]
|
||||
[font_size=20]Arena asset[/font_size][/center]"
|
||||
fit_content = true
|
||||
scroll_active = false
|
||||
|
||||
[node name="BackButton" type="Button" parent="CreditsPanel/VBox"]
|
||||
[node name="BackButton" type="Button" parent="CreditsPanel/VBox" unique_id=1194791074]
|
||||
custom_minimum_size = Vector2(0, 48)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 24
|
||||
text = "Back"
|
||||
|
||||
[node name="FadeRect" type="ColorRect" parent="."]
|
||||
[node name="FadeRect" type="ColorRect" parent="." unique_id=15381366]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene format=3 uid="uid://matador_scene_v1"]
|
||||
[gd_scene format=3 uid="uid://d0te4mwbh33ag"]
|
||||
|
||||
[ext_resource type="Script" path="res://matador.gd" id="1_matgd"]
|
||||
[ext_resource type="Script" uid="uid://bvfa7xi0luysk" path="res://matador.gd" id="1_matgd"]
|
||||
[ext_resource type="PackedScene" uid="uid://eu2lqjhowj4t" path="res://Assets/Matador.glb" id="2_matfbx"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_body"]
|
||||
@@ -11,19 +11,18 @@ height = 1.2
|
||||
radius = 0.45
|
||||
height = 1.4
|
||||
|
||||
[node name="Matador" type="CharacterBody3D"]
|
||||
[node name="Matador" type="CharacterBody3D" unique_id=1781857630]
|
||||
script = ExtResource("1_matgd")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=2101651042]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.85, 0)
|
||||
shape = SubResource("CapsuleShape3D_body")
|
||||
|
||||
[node name="HitArea" type="Area3D" parent="."]
|
||||
monitoring = true
|
||||
[node name="HitArea" type="Area3D" parent="." unique_id=745037545]
|
||||
monitorable = false
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="HitArea"]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="HitArea" unique_id=1497356275]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.85, 0)
|
||||
shape = SubResource("CapsuleShape3D_hit")
|
||||
|
||||
[node name="matador2" parent="." instance=ExtResource("2_matfbx")]
|
||||
[node name="matador2" parent="." unique_id=1487256381 instance=ExtResource("2_matfbx")]
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://b73nb47y8ppt"]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color(0.26098922, 0.27367952, 0.27059656, 1)
|
||||
metallic = 1.0
|
||||
@@ -0,0 +1,14 @@
|
||||
shader_type spatial;
|
||||
|
||||
void vertex() {
|
||||
// Called for every vertex the material is visible on.
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
// Called for every pixel the material is visible on.
|
||||
}
|
||||
|
||||
//void light() {
|
||||
// // Called for every pixel for every light affecting the material.
|
||||
// // Uncomment to replace the default light processing function with this one.
|
||||
//}
|
||||
@@ -0,0 +1 @@
|
||||
uid://bme1rkldtyrhu
|
||||
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://isrp2y47xs5x"]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color(0.49425018, 0.31969637, 0.21259204, 1)
|
||||
@@ -0,0 +1,5 @@
|
||||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://blpkmyikjnhbo"]
|
||||
|
||||
[resource]
|
||||
emission_enabled = true
|
||||
emission = Color(0.4627451, 0.8117647, 0.9490196, 1)
|
||||
@@ -0,0 +1,5 @@
|
||||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://dgmk764033feq"]
|
||||
|
||||
[resource]
|
||||
emission_enabled = true
|
||||
emission = Color(0.7096375, 0.3347874, 0.09943161, 1)
|
||||
@@ -4,30 +4,18 @@
|
||||
[ext_resource type="Script" uid="uid://cpyq2r5cq653g" path="res://camera_iso.gd" id="2_camera_iso"]
|
||||
[ext_resource type="PackedScene" uid="uid://bun14xmk20pcj" path="res://Assets/bull.fbx" id="4_e80uo"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_chest"]
|
||||
radius = 0.35
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_belly"]
|
||||
radius = 0.4
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_hips"]
|
||||
radius = 0.3
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_kne1u"]
|
||||
radius = 0.7495117
|
||||
height = 1.845398
|
||||
|
||||
[node name="Player" type="CharacterBody3D" unique_id=165510044]
|
||||
collision_layer = 3
|
||||
collision_layer = 2
|
||||
collision_mask = 9
|
||||
script = ExtResource("1_xhfnw")
|
||||
|
||||
[node name="CollisionChest" type="CollisionShape3D" parent="." unique_id=447032296]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.505, -0.2)
|
||||
shape = SubResource("SphereShape3D_chest")
|
||||
|
||||
[node name="CollisionBelly" type="CollisionShape3D" parent="." unique_id=571780801]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.505, 0.1)
|
||||
shape = SubResource("SphereShape3D_belly")
|
||||
|
||||
[node name="CollisionHips" type="CollisionShape3D" parent="." unique_id=717874116]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.505, 0.4)
|
||||
shape = SubResource("SphereShape3D_hips")
|
||||
[node name="CollisionBull" type="CollisionShape3D" parent="." unique_id=571780801]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.29183745, 0.3197594)
|
||||
shape = SubResource("CapsuleShape3D_kne1u")
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="." unique_id=1120161087]
|
||||
script = ExtResource("2_camera_iso")
|
||||
@@ -35,4 +23,30 @@ script = ExtResource("2_camera_iso")
|
||||
[node name="bull" parent="." unique_id=1386495166 instance=ExtResource("4_e80uo")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.655, 0.23)
|
||||
|
||||
[node name="Skeleton3D" parent="bull/Armature" parent_id_path=PackedInt32Array(1386495166, 1942410469) index="0" unique_id=550138996]
|
||||
bones/0/position = Vector3(0, 0, 0.009963839)
|
||||
bones/0/rotation = Quaternion(0.7071068, 0, 0, 0.7071067)
|
||||
bones/0/scale = Vector3(1, 1, 1)
|
||||
bones/1/position = Vector3(0.003526625, -0.0043296535, 0.0040827994)
|
||||
bones/1/rotation = Quaternion(-0.00038647873, 0.06909673, 0.9868542, -0.14609687)
|
||||
bones/2/rotation = Quaternion(-0.06929122, 3.2175163e-07, -0.112670615, 0.99121344)
|
||||
bones/4/position = Vector3(0.0045358227, -0.002137695, -0.004238624)
|
||||
bones/4/rotation = Quaternion(-0.24948503, 0.19590352, 0.9416978, -0.11217985)
|
||||
bones/4/scale = Vector3(1.0000001, 0.9999999, 1.0000001)
|
||||
bones/5/rotation = Quaternion(-0.58943665, -0.3660725, -0.22564478, 0.683842)
|
||||
bones/5/scale = Vector3(1, 1.0000001, 0.99999994)
|
||||
bones/6/rotation = Quaternion(0.52910197, 0.15997827, 0.120245, 0.8246207)
|
||||
bones/6/scale = Vector3(1, 1, 1.0000001)
|
||||
bones/17/position = Vector3(0, 0.0009373814, 0.007552617)
|
||||
bones/17/rotation = Quaternion(-9.4156974e-08, 0.7071068, 0.7071067, -9.4156974e-08)
|
||||
bones/19/position = Vector3(-0.003526625, -0.0043296535, 0.0040827994)
|
||||
bones/19/rotation = Quaternion(0.00038647873, 0.06909673, 0.9868542, 0.14609687)
|
||||
bones/20/rotation = Quaternion(-0.06929122, -3.2227587e-07, 0.11267061, 0.99121344)
|
||||
bones/22/position = Vector3(-0.0045358227, -0.002137695, -0.004238624)
|
||||
bones/22/rotation = Quaternion(0.24948503, 0.19590352, 0.9416978, 0.11217985)
|
||||
bones/23/rotation = Quaternion(-0.58943665, 0.3660725, 0.22564478, 0.683842)
|
||||
bones/23/scale = Vector3(1, 1.0000001, 1)
|
||||
bones/24/rotation = Quaternion(0.529102, -0.15997836, -0.120245025, 0.82462066)
|
||||
bones/24/scale = Vector3(1, 1.0000001, 1)
|
||||
|
||||
[editable path="bull"]
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
[gd_scene format=3 uid="uid://c8spearwrap01"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://jepc74w8opbu" path="res://Assets/spear.glb" id="1_spearglb"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_shaft"]
|
||||
radius = 0.13
|
||||
height = 2.2
|
||||
|
||||
[node name="Spear" type="Node3D"]
|
||||
|
||||
[node name="spear" parent="." instance=ExtResource("1_spearglb")]
|
||||
|
||||
[node name="HitShape" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0.79)
|
||||
shape = SubResource("CapsuleShape3D_shaft")
|
||||
@@ -0,0 +1,20 @@
|
||||
[gd_scene format=3 uid="uid://c8swordwrap01"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://xyvank512l5n" path="res://Assets/sword.glb" id="1_swordglb"]
|
||||
[ext_resource type="Script" path="res://hitbox.gd" id="2_hitbox"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_blade"]
|
||||
radius = 0.18
|
||||
height = 1.3
|
||||
|
||||
[node name="Sword" type="Node3D"]
|
||||
|
||||
[node name="sword" parent="." instance=ExtResource("1_swordglb")]
|
||||
|
||||
[node name="BladeHitbox" type="Area3D" parent="."]
|
||||
script = ExtResource("2_hitbox")
|
||||
damage_cause = "gored"
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="BladeHitbox"]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0.8)
|
||||
shape = SubResource("CapsuleShape3D_blade")
|
||||
@@ -8,5 +8,5 @@ script="rider-plugin.gd"
|
||||
|
||||
[presets]
|
||||
|
||||
active="off"
|
||||
active="on"
|
||||
presets="presets.json"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://cn7fhjkro7637
|
||||
@@ -1,9 +0,0 @@
|
||||
extends Camera3D
|
||||
|
||||
|
||||
@export var spring_arm: Node3D
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
var lerp_power: float = DP.f("cam_lerp_power")
|
||||
position = position.lerp(spring_arm.position, delta * lerp_power)
|
||||
@@ -1 +0,0 @@
|
||||
uid://b720l6m0ehrj3
|
||||
@@ -1,3 +1,4 @@
|
||||
class_name IsoCamera
|
||||
extends Camera3D
|
||||
|
||||
@export var height: float = 25.0
|
||||
@@ -16,6 +17,11 @@ var _shake_amount: float = 0.0
|
||||
var _shake_decay: float = 0.0
|
||||
var _user_fov: float = 0.0
|
||||
|
||||
# Per-level framing multiplier: 1.0 = the designer's base shot, >1 dollies the camera
|
||||
# back for a wider view (the lobby uses this). Set by game_shell when a level loads;
|
||||
# kept separate from the scroll-wheel FOV zoom so the two don't fight.
|
||||
var _framing_scale: float = 1.0
|
||||
|
||||
# Trailing-camera state: _focus is the smoothed point the camera frames (it lags
|
||||
# the bull), _drag_offset is the velocity-driven trail that slides it behind.
|
||||
var _focus: Vector3 = Vector3.ZERO
|
||||
@@ -42,15 +48,30 @@ func _unhandled_input(event: InputEvent) -> void:
|
||||
_user_fov = clamp(_user_fov * 1.1, fov_min, fov_max)
|
||||
|
||||
|
||||
# Pinch-to-zoom hook for the touch UI. `ratio` is the two-finger spread this frame over
|
||||
# last frame: >1 (fingers parting) narrows the FOV to zoom in, <1 widens it to pull back,
|
||||
# mirroring the scroll-wheel zoom_in/zoom_out feel.
|
||||
func adjust_zoom(ratio: float) -> void:
|
||||
if ratio <= 0.0:
|
||||
return
|
||||
_user_fov = clampf(_user_fov / ratio, fov_min, fov_max)
|
||||
|
||||
|
||||
## Dolly the camera in/out for the level being loaded. 1.0 is the base framing; >1 pulls
|
||||
## back for a wider shot (the lobby hub uses this). Independent of the scroll-wheel zoom.
|
||||
func set_framing_scale(scale: float) -> void:
|
||||
_framing_scale = maxf(scale, 0.1)
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
fov = lerpf(fov, _user_fov, delta * 8.0)
|
||||
|
||||
var angle_rad := deg_to_rad(horizontal_angle_deg)
|
||||
|
||||
var offset := Vector3(
|
||||
sin(angle_rad) * horizontal_distance,
|
||||
height,
|
||||
cos(angle_rad) * horizontal_distance
|
||||
sin(angle_rad) * horizontal_distance * _framing_scale,
|
||||
height * _framing_scale,
|
||||
cos(angle_rad) * horizontal_distance * _framing_scale
|
||||
)
|
||||
|
||||
var target := get_parent() as Node3D
|
||||
@@ -92,6 +113,8 @@ func _drag_focus(target: Node3D, delta: float) -> Vector3:
|
||||
|
||||
|
||||
func trigger_hit(strength: float) -> void:
|
||||
if not Settings.screen_shake:
|
||||
return
|
||||
_shake_amount = strength * 0.5
|
||||
_shake_decay = _shake_amount / 0.4
|
||||
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
extends Node3D
|
||||
|
||||
@onready var spring_arm: SpringArm3D = $SpringArm3D
|
||||
var _desired_length: float = 7.0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
_desired_length = DP.f("cam_spring_length")
|
||||
spring_arm.spring_length = _desired_length
|
||||
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
var sensitivity: float = DP.f("cam_sensitivity")
|
||||
var min_vert: float = deg_to_rad(DP.f("cam_min_vert_angle"))
|
||||
var max_vert: float = deg_to_rad(DP.f("cam_max_vert_angle"))
|
||||
var min_zoom: float = DP.f("cam_min_zoom")
|
||||
var max_zoom: float = DP.f("cam_max_zoom")
|
||||
|
||||
if event is InputEventMouseMotion:
|
||||
rotation.y -= event.relative.x * sensitivity
|
||||
rotation.y = wrapf(rotation.y, 0.0, TAU)
|
||||
rotation.x -= event.relative.y * sensitivity
|
||||
rotation.x = clamp(rotation.x, min_vert, max_vert)
|
||||
|
||||
if event.is_action_pressed("zoom_in"):
|
||||
_desired_length = clamp(_desired_length / 1.2, min_zoom, max_zoom)
|
||||
if event.is_action_pressed("zoom_out"):
|
||||
_desired_length = clamp(_desired_length * 1.2, min_zoom, max_zoom)
|
||||
|
||||
if event.is_action_pressed("toggle_mouse_capture"):
|
||||
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
else:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
spring_arm.spring_length = _desired_length
|
||||
@@ -1 +0,0 @@
|
||||
uid://b4td4k8yo5y78
|
||||
@@ -18,6 +18,8 @@ const _COMMANDS := {
|
||||
"diff": "list params changed from default",
|
||||
"toggle": "flip a bool param",
|
||||
"list": "print params (optional section)",
|
||||
"level": "select level and reload (level <id> — arena / arena_boss / bear)",
|
||||
"restart": "reload the current level scene",
|
||||
"clear": "clear the log",
|
||||
"help": "show this help",
|
||||
}
|
||||
@@ -472,6 +474,12 @@ func _run_command(parts: PackedStringArray) -> bool:
|
||||
_cmd_diff()
|
||||
"list":
|
||||
_cmd_list(parts)
|
||||
"level":
|
||||
_cmd_level(parts)
|
||||
"restart":
|
||||
_log_ok("Restarting…")
|
||||
get_tree().paused = false
|
||||
get_tree().reload_current_scene()
|
||||
"clear":
|
||||
_log.clear()
|
||||
"help":
|
||||
@@ -581,9 +589,9 @@ func _set_param(key: String, meta: Dictionary, raw: String) -> void:
|
||||
var lo := meta["min"] as float
|
||||
var hi := meta["max"] as float
|
||||
if not raw.is_valid_float() or not is_finite(raw.to_float()):
|
||||
_log_warn("%s wants a number %s … %s" % [key, _fmt_num(lo), _fmt_num(hi)])
|
||||
_log_warn("%s wants a number" % key)
|
||||
return
|
||||
var v := snappedf(clampf(raw.to_float(), lo, hi), meta["step"] as float)
|
||||
var v := raw.to_float()
|
||||
DP.set_value(key, v)
|
||||
_log_ok("[b]%s[/b] ← [color=#ffe080]%s[/color]" % [key, _fmt_num(v)])
|
||||
elif meta["type"] == TYPE_BOOL:
|
||||
@@ -600,6 +608,25 @@ func _set_param(key: String, meta: Dictionary, raw: String) -> void:
|
||||
_log_warn("Cannot set param of type %d" % meta["type"])
|
||||
|
||||
|
||||
func _cmd_level(parts: PackedStringArray) -> void:
|
||||
if parts.size() == 1:
|
||||
var cur := Run.active_level()
|
||||
var cur_name := (cur.id as String) if cur != null else "none"
|
||||
_log_ok("Current level: [b]%s[/b]" % cur_name)
|
||||
var ids: Array[StringName] = Run.level_ids()
|
||||
_log_raw("Available: " + " ".join(ids.map(func(id: StringName) -> String: return str(id))))
|
||||
return
|
||||
var id := StringName(parts[1].to_lower())
|
||||
var level := Run.get_level(id)
|
||||
if level == null:
|
||||
_log_warn("Unknown level '%s'. Try: %s" % [parts[1], " ".join(Run.level_ids().map(func(i: StringName) -> String: return str(i)))])
|
||||
return
|
||||
Run.debug_level_override = level
|
||||
_log_ok("Level set to [b]%s[/b] — reloading…" % str(id))
|
||||
get_tree().paused = false
|
||||
get_tree().change_scene_to_file(level.scene_path)
|
||||
|
||||
|
||||
func _cmd_list(parts: PackedStringArray) -> void:
|
||||
var filter := parts[1].to_lower() if parts.size() > 1 else ""
|
||||
var all := DP.get_all()
|
||||
|
||||
@@ -15,8 +15,8 @@ const REBINDABLE_ACTIONS: PackedStringArray = [
|
||||
&"move_left",
|
||||
&"move_right",
|
||||
&"ability_kick",
|
||||
&"ability_slam",
|
||||
&"ability_dash",
|
||||
&"ability_slam",
|
||||
&"ability_roll",
|
||||
]
|
||||
|
||||
@@ -25,6 +25,98 @@ func _ready() -> void:
|
||||
load_saved()
|
||||
|
||||
|
||||
# ── Web fullscreen + landscape lock ─────────────────────────────────────────────
|
||||
# Browsers only allow requestFullscreen / screen.orientation.lock from inside a user
|
||||
# gesture, so we piggyback on the first tap/click of the web build to go fullscreen and
|
||||
# lock to landscape. One-shot; input still flows to the menu/game normally (never consumed).
|
||||
var _fs_triggered: bool = false
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if _fs_triggered or not OS.has_feature("web"):
|
||||
return
|
||||
var gesture := (event is InputEventScreenTouch and (event as InputEventScreenTouch).pressed) \
|
||||
or (event is InputEventMouseButton and (event as InputEventMouseButton).pressed)
|
||||
if gesture:
|
||||
_fs_triggered = true
|
||||
request_fullscreen_landscape()
|
||||
|
||||
|
||||
## Enter browser fullscreen and lock to landscape. Must be called from a user-gesture
|
||||
## context (first tap, or a button press). No-op off web. Android Chrome/Brave honour the
|
||||
## orientation lock; iOS Safari ignores it (unsupported), so the .catch() swallows the reject.
|
||||
func request_fullscreen_landscape() -> void:
|
||||
if not OS.has_feature("web"):
|
||||
return
|
||||
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
|
||||
JavaScriptBridge.eval(
|
||||
"(function(){function l(){try{if(screen.orientation&&screen.orientation.lock)"
|
||||
+ "screen.orientation.lock('landscape').catch(function(){});}catch(e){}}"
|
||||
+ "l();document.addEventListener('fullscreenchange',l,{once:true});})()", true)
|
||||
|
||||
|
||||
## Whether to drive the game with the on-screen touch UI (joystick + buttons)
|
||||
## instead of keyboard hints. Platform detection is cached (it can't change mid-run)
|
||||
## so the per-frame/per-input callers don't repay the cost — but the DP force flag is
|
||||
## re-read every call so the console can toggle the layout live on a desktop build.
|
||||
var _touch_ui_cached: int = -1 # -1 = not yet detected, 0 = false, 1 = true
|
||||
|
||||
|
||||
func use_touch_ui() -> bool:
|
||||
if DP.b("force_touch_controls"):
|
||||
return true
|
||||
if _touch_ui_cached == -1:
|
||||
_touch_ui_cached = 1 if _detect_touch_ui() else 0
|
||||
return _touch_ui_cached == 1
|
||||
|
||||
|
||||
## True only on touch-primary devices (phones, tablets). Detection is deliberately
|
||||
## conservative so a desktop never gets the on-screen thumb UI.
|
||||
##
|
||||
## DisplayServer.is_touchscreen_available() is unusable here on two fronts: on native
|
||||
## desktop `emulate_touch_from_mouse` (on for testing) forces it true, and on the web build
|
||||
## it maps to `'ontouchstart' in window`, which desktop Chromium reports true even with no
|
||||
## touchscreen. So on web we ask the browser two questions instead: does it report touch
|
||||
## points, AND is the *primary* pointer coarse? A desktop-with-mouse (even a touch laptop)
|
||||
## answers no to the second and keeps the desktop HUD; a phone/tablet answers yes to both.
|
||||
## maxTouchPoints also catches iPadOS, which masquerades as desktop Safari.
|
||||
func _detect_touch_ui() -> bool:
|
||||
if (
|
||||
OS.has_feature("mobile")
|
||||
or OS.has_feature("web_android")
|
||||
or OS.has_feature("web_ios")
|
||||
):
|
||||
return true
|
||||
if not OS.has_feature("web"):
|
||||
return false
|
||||
var js := "(navigator.maxTouchPoints > 0) && window.matchMedia('(pointer: coarse)').matches"
|
||||
var touch_primary: Variant = JavaScriptBridge.eval(js, true)
|
||||
if touch_primary is bool:
|
||||
return touch_primary
|
||||
if touch_primary is int or touch_primary is float:
|
||||
return int(touch_primary) != 0
|
||||
return false
|
||||
|
||||
|
||||
## Whether on-screen debug overlays (touch state + render diagnostics) should show. True on
|
||||
## the DP "touch_debug" flag, or — so it can be switched on from a phone where no console is
|
||||
## reachable — when the page URL carries a `debug` query param (append `?debug=1`).
|
||||
var _url_debug: int = -1
|
||||
|
||||
|
||||
func debug_overlay() -> bool:
|
||||
if DP.b("touch_debug"):
|
||||
return true
|
||||
if _url_debug == -1:
|
||||
_url_debug = 0
|
||||
if OS.has_feature("web"):
|
||||
var has: Variant = JavaScriptBridge.eval(
|
||||
"String(window.location.search).indexOf('debug') >= 0", true)
|
||||
if (has is bool and has) or ((has is int or has is float) and int(has) != 0):
|
||||
_url_debug = 1
|
||||
return _url_debug == 1
|
||||
|
||||
|
||||
## Returns the first keyboard event bound to an action, or null.
|
||||
func get_key_event(action: StringName) -> InputEventKey:
|
||||
for event: InputEvent in InputMap.action_get_events(action):
|
||||
|
||||
@@ -1,19 +1,16 @@
|
||||
extends MultiMeshInstance3D
|
||||
## A whole stand of cheering spectators rendered as camera-facing billboards in a
|
||||
## single draw call — the performant replacement for dozens of skinned crowd skeletons.
|
||||
## The sprite sheet is baked from the existing crowd figure by tools/bake_crowd_sheet.gd.
|
||||
## A whole stand of cheering spectators rendered as flat billboards in a single draw
|
||||
## call — the performant replacement for dozens of skinned crowd skeletons. The sprite
|
||||
## sheet is baked from the existing crowd figure by tools/bake_crowd_sheet.gd.
|
||||
##
|
||||
## Placement mirrors an existing crowd node (default: the sibling PublikNode) so the
|
||||
## billboards land exactly where the crowd was authored; if that node is missing it
|
||||
## falls back to a generated tribune so the scene still populates.
|
||||
## Placement comes from CrowdMarker nodes the designer drops into the level (collected
|
||||
## via the &"crowd_marker" group): each marker gives one spectator its world position and
|
||||
## a chosen facing (one of six 60°-spaced headings). If no markers are present the scene
|
||||
## falls back to a generated tribune so it still populates.
|
||||
|
||||
const SHEET_PATH := "res://Assets/crowd_clap_sheet.png"
|
||||
const SHADER_PATH := "res://crowd_billboard.gdshader"
|
||||
|
||||
## Node whose descendant figures (names starting with `figure_prefix`) donate their
|
||||
## world positions. Empty = use the generated fallback stand.
|
||||
@export var source_path: NodePath = ^"../PublikNode"
|
||||
@export var figure_prefix: String = "mees"
|
||||
## World height of a spectator billboard, in metres. Sheet aspect sets the width.
|
||||
@export var figure_height: float = 2.0
|
||||
@export var frames: int = 8
|
||||
@@ -36,7 +33,8 @@ var _rng := RandomNumberGenerator.new()
|
||||
|
||||
func _ready() -> void:
|
||||
_rng.seed = hash("bullosseum-crowd") # deterministic layout/phases across runs
|
||||
_build()
|
||||
# Deferred so every CrowdMarker has run _ready and joined the group before we harvest.
|
||||
_build.call_deferred()
|
||||
|
||||
|
||||
func _build() -> void:
|
||||
@@ -58,71 +56,53 @@ func _build() -> void:
|
||||
mat.set_shader_parameter("fps", clap_fps)
|
||||
material_override = mat
|
||||
|
||||
var seats := _seat_positions()
|
||||
var center := _arena_center(seats)
|
||||
# Each seat is a (global feet-position, unit forward) pair.
|
||||
var positions := PackedVector3Array()
|
||||
var facings: Array[Vector3] = []
|
||||
_collect_seats(positions, facings)
|
||||
|
||||
var mm := MultiMesh.new()
|
||||
mm.transform_format = MultiMesh.TRANSFORM_3D
|
||||
mm.use_custom_data = true
|
||||
mm.mesh = quad
|
||||
mm.instance_count = seats.size()
|
||||
mm.instance_count = positions.size()
|
||||
|
||||
for i in seats.size():
|
||||
for i in positions.size():
|
||||
var s := 1.0 + _rng.randf_range(-0.06, 0.06) # slight height variety
|
||||
mm.set_instance_transform(i, Transform3D(_facing_basis(seats[i], center, s), seats[i]))
|
||||
mm.set_instance_transform(i, Transform3D(_upright_basis(facings[i], s), positions[i]))
|
||||
var b := 1.0 + _rng.randf_range(-tint_variation, tint_variation)
|
||||
mm.set_instance_custom_data(i, Color(_rng.randf(), b, b * 0.99, b * 0.98))
|
||||
multimesh = mm
|
||||
|
||||
|
||||
# Orientation for a seat: the sprite's forward (+Z, the quad's face) points horizontally
|
||||
# inward at the arena centre, so each ring segment faces the action instead of the
|
||||
# camera. Upright (world +Y), uniformly scaled by `s`.
|
||||
func _facing_basis(seat: Vector3, center: Vector3, s: float) -> Basis:
|
||||
var look := center - seat
|
||||
# Upright basis whose forward (+Z, the quad's face) points along `look`, uniformly
|
||||
# scaled by `s`. World +Y stays up so spectators never tilt.
|
||||
func _upright_basis(look: Vector3, s: float) -> Basis:
|
||||
look.y = 0.0
|
||||
look = look.normalized() if look.length() > 0.001 else Vector3(0.0, 0.0, -1.0)
|
||||
look = look.normalized() if look.length() > 0.001 else Vector3(0.0, 0.0, 1.0)
|
||||
var up := Vector3.UP
|
||||
var right := up.cross(look).normalized()
|
||||
var basis := Basis()
|
||||
basis.x = right
|
||||
basis.x = up.cross(look).normalized()
|
||||
basis.y = up
|
||||
basis.z = look
|
||||
return basis.scaled(Vector3.ONE * s)
|
||||
|
||||
|
||||
# Horizontal centre the crowd faces — the mean of the seat positions (the ring/stand
|
||||
# centroid), which for an arena crowd is the middle of the pitch.
|
||||
func _arena_center(seats: PackedVector3Array) -> Vector3:
|
||||
if seats.is_empty():
|
||||
return global_position
|
||||
var sum := Vector3.ZERO
|
||||
for p in seats:
|
||||
sum += p
|
||||
return sum / float(seats.size())
|
||||
# Seats from designer-placed CrowdMarker nodes: each contributes its world position and
|
||||
# its chosen 60°-spaced facing. With no markers present, fall back to a generated ring
|
||||
# that faces inward so the scene still shows a crowd.
|
||||
func _collect_seats(positions: PackedVector3Array, facings: Array[Vector3]) -> void:
|
||||
for node in get_tree().get_nodes_in_group(&"crowd_marker"):
|
||||
var marker := node as Node3D
|
||||
if marker == null or not marker.has_method(&"facing_dir"):
|
||||
continue
|
||||
positions.append(marker.global_position)
|
||||
facings.append(marker.facing_dir())
|
||||
if positions.is_empty():
|
||||
_fallback_stand(positions, facings)
|
||||
|
||||
|
||||
# Global feet-positions for every spectator: harvested from the source crowd if present,
|
||||
# otherwise the generated fallback tribune.
|
||||
func _seat_positions() -> PackedVector3Array:
|
||||
var out := PackedVector3Array()
|
||||
var src := get_node_or_null(source_path)
|
||||
if src != null:
|
||||
_collect_figures(src, out)
|
||||
if out.is_empty():
|
||||
_fallback_stand(out)
|
||||
return out
|
||||
|
||||
|
||||
func _collect_figures(node: Node, out: PackedVector3Array) -> void:
|
||||
if node is Node3D and node != self and (node as Node3D).name.begins_with(figure_prefix):
|
||||
out.append((node as Node3D).global_position)
|
||||
return # don't descend into a figure's own rig
|
||||
for c in node.get_children():
|
||||
_collect_figures(c, out)
|
||||
|
||||
|
||||
func _fallback_stand(out: PackedVector3Array) -> void:
|
||||
func _fallback_stand(positions: PackedVector3Array, facings: Array[Vector3]) -> void:
|
||||
var placed := 0
|
||||
for row in fallback_rows:
|
||||
var radius := fallback_inner_radius + float(row) * fallback_row_step
|
||||
@@ -133,5 +113,7 @@ func _fallback_stand(out: PackedVector3Array) -> void:
|
||||
if placed >= fallback_count:
|
||||
return
|
||||
var ang := TAU * float(s) / float(seats_in_row)
|
||||
out.append(Vector3(cos(ang) * radius, y, sin(ang) * radius))
|
||||
var pos := Vector3(cos(ang) * radius, y, sin(ang) * radius)
|
||||
positions.append(pos)
|
||||
facings.append(-pos) # face the ring centre (origin)
|
||||
placed += 1
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
@tool
|
||||
extends Node3D
|
||||
class_name CrowdMarker
|
||||
## A designer-placed spot for one billboard spectator. Drop these into a level in the
|
||||
## editor; crowd_billboards.gd harvests every marker (via the &"crowd_marker" group) into
|
||||
## its MultiMesh at runtime, using each marker's global position and chosen facing.
|
||||
##
|
||||
## The marker draws a lightweight preview (a slab standing in for the sprite + a forward
|
||||
## arrow) so its position and orientation are visible in the viewport. That preview is
|
||||
## editor-only and never serialised into the scene, so it costs nothing at runtime.
|
||||
|
||||
## The six selectable facings, one every 60° about the Y axis. DEG_0 faces the quad's
|
||||
## front (+Z) along world +Z; increasing values rotate clockwise looking down.
|
||||
enum Orientation {
|
||||
DEG_0,
|
||||
DEG_60,
|
||||
DEG_120,
|
||||
DEG_180,
|
||||
DEG_240,
|
||||
DEG_300,
|
||||
}
|
||||
|
||||
const ORIENTATION_STEPS := 6
|
||||
## Metres — matches crowd_billboards.figure_height so the editor preview reads true to scale.
|
||||
const PREVIEW_HEIGHT := 2.0
|
||||
|
||||
@export var orientation := Orientation.DEG_0:
|
||||
set(value):
|
||||
orientation = value
|
||||
_apply_orientation()
|
||||
|
||||
var _preview: Node3D
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
add_to_group(&"crowd_marker")
|
||||
if Engine.is_editor_hint():
|
||||
_build_preview()
|
||||
_apply_orientation()
|
||||
|
||||
|
||||
# Facing about Y for the current orientation: 0, 60, 120 … degrees as radians.
|
||||
func facing_yaw() -> float:
|
||||
return float(orientation) * (TAU / float(ORIENTATION_STEPS))
|
||||
|
||||
|
||||
# Unit forward the spectator's front (+Z) points along, on the horizontal plane.
|
||||
func facing_dir() -> Vector3:
|
||||
var a := facing_yaw()
|
||||
return Vector3(sin(a), 0.0, cos(a))
|
||||
|
||||
|
||||
func _apply_orientation() -> void:
|
||||
if _preview != null:
|
||||
_preview.rotation = Vector3(0.0, facing_yaw(), 0.0)
|
||||
|
||||
|
||||
# Editor-only preview. Children are added without an owner so they are excluded from the
|
||||
# saved .tscn (Godot only serialises nodes owned by the scene root).
|
||||
func _build_preview() -> void:
|
||||
_preview = Node3D.new()
|
||||
add_child(_preview)
|
||||
|
||||
var aspect := 0.5
|
||||
var slab := MeshInstance3D.new()
|
||||
var quad := QuadMesh.new()
|
||||
quad.size = Vector2(PREVIEW_HEIGHT * aspect, PREVIEW_HEIGHT)
|
||||
quad.center_offset = Vector3(0.0, PREVIEW_HEIGHT * 0.5, 0.0) # stand on the marker
|
||||
slab.mesh = quad
|
||||
slab.material_override = _preview_material(Color(0.3, 0.7, 1.0, 0.35))
|
||||
_preview.add_child(slab)
|
||||
|
||||
var arrow := MeshInstance3D.new()
|
||||
var shaft := BoxMesh.new()
|
||||
shaft.size = Vector3(0.08, 0.08, PREVIEW_HEIGHT * 0.5)
|
||||
arrow.mesh = shaft
|
||||
# Push the shaft out along +Z (the facing) and up to chest height.
|
||||
arrow.position = Vector3(0.0, PREVIEW_HEIGHT * 0.5, PREVIEW_HEIGHT * 0.25)
|
||||
arrow.material_override = _preview_material(Color(1.0, 0.85, 0.2, 0.9))
|
||||
_preview.add_child(arrow)
|
||||
|
||||
|
||||
func _preview_material(col: Color) -> StandardMaterial3D:
|
||||
var mat := StandardMaterial3D.new()
|
||||
mat.albedo_color = col
|
||||
mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
||||
mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
|
||||
mat.cull_mode = BaseMaterial3D.CULL_DISABLED
|
||||
return mat
|
||||
@@ -0,0 +1 @@
|
||||
uid://70j3ks1emhkd
|
||||
@@ -0,0 +1,16 @@
|
||||
shader_type canvas_item;
|
||||
|
||||
// Faint red gradient hugging the screen edges, flashed on a hit. `flash` is tweened
|
||||
// 0.9 → 0 by the HUD; the vignette is transparent in the centre and reddens toward
|
||||
// the corners so the middle of the screen stays clear.
|
||||
uniform float flash : hint_range(0.0, 1.0) = 0.0;
|
||||
uniform vec3 tint : source_color = vec3(0.75, 0.0, 0.0);
|
||||
uniform float inner : hint_range(0.0, 1.0) = 0.45;
|
||||
uniform float outer : hint_range(0.0, 1.0) = 1.0;
|
||||
|
||||
void fragment() {
|
||||
// Distance from centre normalised so the corners land at ~1.0.
|
||||
float dist = length(UV - vec2(0.5)) / 0.70710678;
|
||||
float v = smoothstep(inner, outer, dist);
|
||||
COLOR = vec4(tint, v * flash);
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://dys23pu1kw5fl
|
||||
@@ -9,7 +9,11 @@ extends Node
|
||||
## bodies get picked up within one interval.
|
||||
##
|
||||
## Toggle from the console:
|
||||
## show_collisions · show_hitboxes · show_bones · show_raycasts (true / false)
|
||||
## show_hitboxes · show_attacks · show_bones · show_raycasts (true / false)
|
||||
## show_hitboxes — the combatants' hurt volumes: each HitArea + the player/enemy body
|
||||
## capsules, drawn as calm translucent-blue volumes (what abilities/blades hit)
|
||||
## show_attacks — the attack hitboxes (bear claw/smash/leap, matador blade, thrown
|
||||
## spear), filled translucent red and shown ONLY while the swing is actually live
|
||||
## show_states — floating AI-state tags + velocity vectors over each matador
|
||||
## show_animation_name — floating current-clip tag over every AnimationPlayer host
|
||||
## show_stats — 2D corner readout: fps / frame ms / draw calls / matador tally
|
||||
@@ -20,13 +24,14 @@ extends Node
|
||||
const REBUILD_INTERVAL := 0.5
|
||||
const STATS_INTERVAL := 0.2 # stats text is re-composed 5×/sec, not every frame
|
||||
|
||||
const COLOR_BODY := Color(0.30, 1.0, 0.45) # collision wireframes (green)
|
||||
const COLOR_AREA := Color(0.0, 0.9, 1.0) # hit-area volumes (cyan, translucent)
|
||||
const COLOR_AREA := Color(0.0, 0.9, 1.0) # combatant hurt volumes (cyan, translucent)
|
||||
const COLOR_ATTACK := Color(1.0, 0.30, 0.15) # attack hitboxes (red, translucent, overlaid)
|
||||
const COLOR_BONE := Color(1.0, 0.35, 0.9) # skeleton bones (magenta)
|
||||
const COLOR_VEL := Color(1.0, 0.85, 0.2) # matador velocity vectors (amber)
|
||||
const COLOR_ANIM := Color(0.55, 0.85, 1.0) # animation-name tags (sky blue)
|
||||
const COLOR_GRID := Color(0.45, 0.45, 0.45, 0.5)
|
||||
const AREA_ALPHA := 0.25
|
||||
const AREA_ALPHA := 0.25
|
||||
const ATTACK_ALPHA := 0.32
|
||||
|
||||
const GRID_HALF := 20 # grid extends ±GRID_HALF cells from the origin
|
||||
const GRID_STEP := 1.0 # metres between grid lines
|
||||
@@ -80,6 +85,7 @@ func ray(from: Vector3, to: Vector3, color: Color = Color.YELLOW) -> void:
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
_reconcile(delta)
|
||||
_pulse_attacks()
|
||||
if DP.b("show_bones"):
|
||||
_draw_bones()
|
||||
if DP.b("show_states"):
|
||||
@@ -359,11 +365,11 @@ func _si(n: int) -> String:
|
||||
# ── Collision / hit-area overlays (incremental) ────────────────────────────────
|
||||
|
||||
func _reconcile(delta: float) -> void:
|
||||
var col := DP.b("show_collisions")
|
||||
var hit := DP.b("show_hitboxes")
|
||||
var atk := DP.b("show_attacks")
|
||||
var bone := DP.b("show_bones")
|
||||
var anim := DP.b("show_animation_name")
|
||||
if not (col or hit or bone or anim):
|
||||
if not (hit or atk or bone or anim):
|
||||
if not _overlays.is_empty():
|
||||
_clear_overlays()
|
||||
_skeletons.clear()
|
||||
@@ -371,7 +377,7 @@ func _reconcile(delta: float) -> void:
|
||||
_prev_flags = ""
|
||||
return
|
||||
|
||||
var flags := "%d%d%d%d" % [int(col), int(hit), int(bone), int(anim)]
|
||||
var flags := "%d%d%d%d" % [int(hit), int(atk), int(bone), int(anim)]
|
||||
_reconcile_t -= delta
|
||||
if flags != _prev_flags: # a toggle just changed — refresh immediately
|
||||
_prev_flags = flags
|
||||
@@ -385,7 +391,7 @@ func _reconcile(delta: float) -> void:
|
||||
var wanted: Dictionary = {}
|
||||
var scene := get_tree().current_scene
|
||||
if scene != null:
|
||||
_collect(scene, col, hit, bone, anim, wanted)
|
||||
_collect(scene, hit, atk, bone, anim, 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
|
||||
@@ -401,10 +407,11 @@ func _reconcile(delta: float) -> void:
|
||||
for id: int in wanted:
|
||||
if not _overlays.has(id):
|
||||
var entry: Array = wanted[id]
|
||||
_overlays[id] = _attach(entry[0] as CollisionShape3D, entry[1] as bool)
|
||||
_overlays[id] = _attach(entry[0] as CollisionShape3D, entry[1] as String)
|
||||
|
||||
|
||||
func _collect(node: Node, col: bool, hit: bool, bone: bool, anim: bool, wanted: Dictionary) -> void:
|
||||
func _collect(node: Node, hit: bool, atk: bool, bone: bool, anim: bool,
|
||||
wanted: Dictionary) -> void:
|
||||
# The audience ("public") is ambient decoration, not a debug target — skip the whole
|
||||
# crowd subtree so its clapping AnimationPlayers/skeletons don't flood the overlays.
|
||||
if node.is_in_group(&"public"):
|
||||
@@ -416,15 +423,28 @@ func _collect(node: Node, col: bool, hit: bool, bone: bool, anim: bool, wanted:
|
||||
if node is CollisionShape3D:
|
||||
var cs := node as CollisionShape3D
|
||||
if cs.shape != null and not cs.disabled and _drawable(cs.shape):
|
||||
var parent := cs.get_parent()
|
||||
var is_area := parent is Area3D
|
||||
# Ragdoll bone colliders (PhysicalBone3D) are excluded — use show_bones for
|
||||
# the skeleton; otherwise every corpse floods the view with capsules.
|
||||
var is_body := parent is PhysicsBody3D and not (parent is PhysicalBone3D)
|
||||
if (is_area and hit) or (is_body and col):
|
||||
wanted[cs.get_instance_id()] = [cs, is_area]
|
||||
var kind := _classify(cs.get_parent())
|
||||
var show := (kind == "attack" and atk) or (kind == "hitbox" and hit)
|
||||
if show:
|
||||
wanted[cs.get_instance_id()] = [cs, kind]
|
||||
for child in node.get_children():
|
||||
_collect(child, col, hit, bone, anim, wanted)
|
||||
_collect(child, hit, atk, bone, anim, wanted)
|
||||
|
||||
|
||||
# Sort a shape's owning body/area into an overlay bucket, or "" to skip.
|
||||
# attack — a swing volume (a Hitbox area, or a thrown-spear projectile body)
|
||||
# hitbox — a combatant's hurt volume: its HitArea, or its own body capsule
|
||||
func _classify(parent: Node) -> String:
|
||||
if parent is Hitbox or parent is SpearProjectile:
|
||||
return "attack"
|
||||
if parent is Area3D:
|
||||
return "hitbox"
|
||||
# Ragdoll bone colliders (PhysicalBone3D) are excluded — use show_bones for the
|
||||
# skeleton; otherwise every corpse floods the view with capsules.
|
||||
if parent is PhysicsBody3D and not (parent is PhysicalBone3D):
|
||||
if parent.is_in_group(&"player") or parent.is_in_group(&"matador"):
|
||||
return "hitbox"
|
||||
return ""
|
||||
|
||||
|
||||
# Skip only the unbounded shapes whose debug mesh is meaningless/huge; concave arena
|
||||
@@ -433,20 +453,35 @@ func _drawable(shape: Shape3D) -> bool:
|
||||
return not (shape is WorldBoundaryShape3D or shape is HeightMapShape3D)
|
||||
|
||||
|
||||
func _attach(cs: CollisionShape3D, is_area: bool) -> MeshInstance3D:
|
||||
func _attach(cs: CollisionShape3D, kind: String) -> MeshInstance3D:
|
||||
var mi := MeshInstance3D.new()
|
||||
if is_area:
|
||||
var solid := _solid_mesh(cs.shape)
|
||||
mi.mesh = solid if solid != null else cs.shape.get_debug_mesh()
|
||||
mi.material_override = _translucent_material(COLOR_AREA)
|
||||
var solid := _solid_mesh(cs.shape)
|
||||
mi.mesh = solid if solid != null else cs.shape.get_debug_mesh()
|
||||
if kind == "attack":
|
||||
# Overlaid so a brief swing volume reads clearly on top of the action; its
|
||||
# visibility is pulsed per-frame in _pulse_attacks so it only shows while live.
|
||||
mi.material_override = _translucent_material(COLOR_ATTACK, ATTACK_ALPHA, true)
|
||||
else:
|
||||
mi.mesh = cs.shape.get_debug_mesh()
|
||||
mi.material_override = _wire_material(COLOR_BODY)
|
||||
# The calm translucent-blue volume — depth-tested so it sits in the world.
|
||||
mi.material_override = _translucent_material(COLOR_AREA, AREA_ALPHA, false)
|
||||
mi.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
||||
cs.add_child(mi)
|
||||
return mi
|
||||
|
||||
|
||||
# Attack overlays exist for as long as show_attacks is on, but a swing hitbox is only a
|
||||
# hazard while its Hitbox is monitoring — so show each attack volume only when it's live.
|
||||
# (A thrown spear has no monitoring gate; it stays visible for its whole flight.)
|
||||
func _pulse_attacks() -> void:
|
||||
for id: int in _overlays:
|
||||
var mi: Variant = _overlays[id]
|
||||
if not is_instance_valid(mi):
|
||||
continue
|
||||
var owner := (mi as Node).get_parent().get_parent()
|
||||
if owner is Hitbox:
|
||||
(mi as MeshInstance3D).visible = (owner as Area3D).monitoring
|
||||
|
||||
|
||||
func _clear_overlays() -> void:
|
||||
for id: int in _overlays:
|
||||
var mi: Variant = _overlays[id]
|
||||
@@ -491,19 +526,12 @@ func _line_material() -> StandardMaterial3D:
|
||||
return mat
|
||||
|
||||
|
||||
func _wire_material(color: Color) -> StandardMaterial3D:
|
||||
var mat := StandardMaterial3D.new()
|
||||
mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
||||
mat.albedo_color = color
|
||||
mat.no_depth_test = true
|
||||
return mat
|
||||
|
||||
|
||||
func _translucent_material(color: Color) -> StandardMaterial3D:
|
||||
func _translucent_material(color: Color, alpha: float, overlay: bool) -> StandardMaterial3D:
|
||||
var mat := StandardMaterial3D.new()
|
||||
mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
||||
mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
|
||||
mat.albedo_color = Color(color.r, color.g, color.b, AREA_ALPHA)
|
||||
mat.albedo_color = Color(color.r, color.g, color.b, alpha)
|
||||
mat.cull_mode = BaseMaterial3D.CULL_DISABLED
|
||||
mat.depth_draw_mode = BaseMaterial3D.DEPTH_DRAW_DISABLED
|
||||
mat.no_depth_test = overlay
|
||||
return mat
|
||||
|
||||
@@ -17,14 +17,15 @@ var _values: Dictionary = {}
|
||||
|
||||
func _ready() -> void:
|
||||
_register_all()
|
||||
load_saved()
|
||||
|
||||
|
||||
func _register_all() -> void:
|
||||
#Level Unlocking
|
||||
_reg_b("Gate", "gate_unlocked_bear", false)
|
||||
# ── Movement ──────────────────────────────────────────────────────────────
|
||||
# WASD/arrows drive the bull: move_accel ramps flat velocity toward max_speed in
|
||||
# the input direction; move_friction bleeds it off when no direction is held.
|
||||
_reg_f("Movement", "max_speed", 50.0, 2.0, 1000.0)
|
||||
_reg_f("Movement", "max_speed", 10.0, 2.0, 1000.0)
|
||||
_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)
|
||||
@@ -33,6 +34,15 @@ func _register_all() -> void:
|
||||
_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_min_bounce_speed", 6.0, 0.0, 30.0)
|
||||
# ── Bull health ───────────────────────────────────────────────────────────
|
||||
# The bull soaks bull_max_hp clean hits before it dies; each hit grants
|
||||
# bull_hit_iframes seconds of invulnerability so a single pass can't drain it.
|
||||
_reg_f("Bull", "bull_max_hp", 10.0, 1.0, 100.0, 1.0)
|
||||
_reg_f("Bull", "bull_hit_iframes", 0.8, 0.0, 3.0, 0.1)
|
||||
# Half-angle (deg) of the bull's horns-first cone: running into an enemy only wounds it when the
|
||||
# bull's velocity points within this of the enemy (not a sideways brush). 90 = any contact at speed.
|
||||
# (The dash ability bypasses this.)
|
||||
_reg_f("Bull", "bull_gore_arc", 75.0, 10.0, 180.0, 5.0)
|
||||
# ── Dust speed thresholds ─────────────────────────────────────────────────
|
||||
_reg_f("Dust", "dust_walk_spd", 1.5, 0.1, 10.0)
|
||||
_reg_f("Dust", "dust_charge_spd", 7.0, 1.0, 20.0)
|
||||
@@ -41,12 +51,12 @@ func _register_all() -> void:
|
||||
_reg_f("Dust", "dust_explosiveness", 0.35, 0.0, 1.0)
|
||||
_reg_f("Dust", "dust_spread", 45.0, 5.0, 90.0)
|
||||
_reg_f("Dust", "dust_gravity_y", -1.5,-15.0, 0.0)
|
||||
_reg_f("Dust", "walk_scale_min", 0.35, 0.05, 3.0)
|
||||
_reg_f("Dust", "walk_scale_max", 0.65, 0.05, 3.0)
|
||||
_reg_f("Dust", "walk_scale_min", 0.20, 0.05, 3.0)
|
||||
_reg_f("Dust", "walk_scale_max", 0.40, 0.05, 3.0)
|
||||
_reg_f("Dust", "walk_vel_min", 0.8, 0.1, 12.0)
|
||||
_reg_f("Dust", "walk_vel_max", 1.8, 0.1, 12.0)
|
||||
_reg_f("Dust", "charge_scale_min", 1.0, 0.05, 6.0)
|
||||
_reg_f("Dust", "charge_scale_max", 2.2, 0.05, 6.0)
|
||||
_reg_f("Dust", "charge_scale_min", 0.35, 0.05, 6.0)
|
||||
_reg_f("Dust", "charge_scale_max", 0.70, 0.05, 6.0)
|
||||
_reg_f("Dust", "charge_vel_min", 2.8, 0.1, 20.0)
|
||||
_reg_f("Dust", "charge_vel_max", 5.5, 0.1, 20.0)
|
||||
# ── Tail ──────────────────────────────────────────────────────────────────
|
||||
@@ -94,15 +104,23 @@ func _register_all() -> void:
|
||||
_reg_f("Camera", "cam_drag_speed", 3.5, 0.5, 20.0)
|
||||
_reg_f("Camera", "cam_follow_lerp", 10.0, 1.0, 40.0)
|
||||
# ── Matador ───────────────────────────────────────────────────────────────
|
||||
_reg_f("Matador", "mat_spawn_count", 1.0, 1.0, 30.0, 1.0)
|
||||
# Wave system: matadors enter the arena in escalating waves (1 → 2 → … → N where N
|
||||
# is the number of placed spawn points). mat_spawn_stagger is the delay between each
|
||||
# matador leaping in within a wave; mat_wave_pause is the breather after a wave clears.
|
||||
_reg_f("Matador", "mat_wave_size", 8.0, 1, 50)
|
||||
_reg_f("Matador", "mat_spawn_stagger", 0.4, 0.0, 3.0, 0.05)
|
||||
_reg_f("Matador", "mat_wave_pause", 2.0, 0.0, 8.0, 0.25)
|
||||
_reg_f("Matador", "mat_walk_speed", 5.5, 0.5, 10.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_max", 2.5, 0.5, 10.0, 0.1)
|
||||
_reg_f("Matador", "mat_idle_min", 1.2, 0.0, 5.0, 0.1)
|
||||
_reg_f("Matador", "mat_idle_max", 4.0, 0.5, 10.0, 0.1)
|
||||
_reg_f("Matador", "mat_hit_threshold", 4.0, 1.0, 30.0)
|
||||
# Planar reach at which the bull's swept charge path gores a matador (~bull + HitArea radii).
|
||||
# Raise for a more forgiving charge, lower for a more precise one.
|
||||
_reg_f("Matador", "mat_charge_gore_radius", 1.2, 0.5, 3.0, 0.05)
|
||||
_reg_f("Matador", "mat_ragdoll_impulse", 6.0, 0.5, 20.0)
|
||||
# Ragdoll joint limits — lower swing/twist = stiffer corpse that keeps its
|
||||
# shape; higher angular damp settles the flail instead of flopping flat.
|
||||
@@ -125,21 +143,42 @@ func _register_all() -> void:
|
||||
_reg_f("Matador", "mat_attack_range", 8.0, 2.0, 20.0)
|
||||
_reg_f("Matador", "mat_attack_speed", 7.5, 1.0, 12.0)
|
||||
_reg_f("Matador", "mat_attack_duration", 1.8, 0.5, 5.0, 0.1)
|
||||
_reg_f("Matador", "mat_attack_min_dist", 3.2, 0.5, 6.0, 0.1)
|
||||
# Forward drive during the opening of a melee swing — turns the stationary stab
|
||||
# into an estocada lunge so the blade covers ground toward the bull.
|
||||
_reg_f("Matador", "mat_lunge_speed", 13.0, 0.0, 20.0)
|
||||
_reg_f("Matador", "mat_lunge_time", 0.22, 0.0, 0.6, 0.01)
|
||||
# Reach of the reach-based stab (the reliable melee hit) and its re-strike gap.
|
||||
# The bull dies if it comes inside mat_stab_reach of a matador that's attacking,
|
||||
# bracing, or passing with a drawn blade — closing in is genuinely deadly.
|
||||
_reg_f("Matador", "mat_stab_reach", 1.7, 0.5, 4.0, 0.1)
|
||||
# Reach of the reach-based melee hit and its re-strike gap. This now governs ONLY the sidestep
|
||||
# PASS (mat charges the bull past with the blade out): a fast lateral sweep where the thin blade
|
||||
# Area would tunnel, so a center-to-center distance check is the reliable gore. The stationary
|
||||
# ATTACK stab no longer uses this — it drives off the sword's BladeHitbox collider (see below).
|
||||
_reg_f("Matador", "mat_stab_reach", 2.0, 0.5, 4.0, 0.1)
|
||||
# Distance the matador plants at to swing. The ATTACK stab damages off the animated BladeHitbox,
|
||||
# whose thrust reaches ~3.75 m at full extension — so this MUST stay under that or the blade never
|
||||
# touches the bull and the stab whiffs. 3.5 m keeps the matador clear of the bull's ~1.8 m-long
|
||||
# body while the thrust still lands. Raise toward 3.75 for more gap, lower to stab from closer.
|
||||
_reg_f("Matador", "mat_stab_standoff", 3.5, 0.5, 4.0, 0.1)
|
||||
# Fraction through the Attack clip at which the blade's collider is armed. The clip is guard →
|
||||
# wind-up (blade pulled back, phase ~0.3-0.5) → thrust (blade drives out to ~3.5 m, phase ~0.55+).
|
||||
# Arming at the thrust keeps the bull from being gored during the wind-up (blade not yet extended)
|
||||
# or the guard pose. The BladeHitbox overlap still decides the exact hit; this just gates timing.
|
||||
_reg_f("Matador", "mat_stab_strike_at", 0.5, 0.0, 1.0, 0.05)
|
||||
# Chance, each time a stab finishes, that the matador breaks off into something else (give ground,
|
||||
# circle, or throw) instead of immediately stabbing again — keeps it from drilling the same thrust
|
||||
# on repeat. 0 = always re-stab if in range, 1 = always break off after every stab.
|
||||
_reg_f("Matador", "mat_stab_followup_chance", 0.6, 0.0, 1.0, 0.05)
|
||||
# Beat after every stab where the brain won't re-commit to ATTACK, so it can't machine-gun the
|
||||
# bull — it circles/gives ground instead. 0 = stab as fast as range allows.
|
||||
_reg_f("Matador", "mat_stab_recovery", 0.9, 0.0, 3.0, 0.1)
|
||||
# Chance, when a stab actually CONNECTS, that the matador breaks into a crowd-pleasing taunt and
|
||||
# gives ground instead of pressing — milking the hit rather than spamming. High by design.
|
||||
_reg_f("Matador", "mat_taunt_after_hit", 0.85, 0.0, 1.0, 0.05)
|
||||
_reg_f("Matador", "mat_stab_cooldown", 0.6, 0.1, 3.0, 0.1)
|
||||
# Half-angle (deg) the matador must be facing the bull within for a stab to land.
|
||||
# Stops "sword's off to the side but I still died" — you're only gored when the
|
||||
# blade is actually presented at you.
|
||||
_reg_f("Matador", "mat_stab_arc", 55.0, 5.0, 180.0, 5.0)
|
||||
_reg_f("Matador", "mat_roll_chance", 0.35, 0.0, 1.0, 0.05)
|
||||
# Chance a matador rolls clear (survives) instead of ragdolling when the bull's charge connects.
|
||||
_reg_f("Matador", "mat_roll_chance", 0.8, 0.0, 1.0, 0.05)
|
||||
# How much a committed charge pierces the survival roll: roll chance fades toward
|
||||
# mat_roll_chance*(1-this) as bull speed climbs to mat_charge_speed. 1 = full-speed charge always
|
||||
# gores. (A dash connect ignores the roll entirely.)
|
||||
_reg_f("Matador", "mat_charge_pierce", 0.8, 0.0, 1.0, 0.05)
|
||||
_reg_f("Matador", "mat_roll_duration", 0.45, 0.1, 1.5, 0.05)
|
||||
# Playback rate of the Draw_weapon clip used for both drawing and sheathing —
|
||||
# higher = snappier unholster/holster.
|
||||
@@ -153,43 +192,163 @@ func _register_all() -> void:
|
||||
# bullfighter, caution for a slippery one. mat_w_commit is a stickiness bonus for
|
||||
# the current choice so it doesn't dither between two near-tied options.
|
||||
_reg_f("Matador", "mat_decide_interval", 0.2, 0.05, 1.0, 0.05)
|
||||
_reg_f("Matador", "mat_w_aggression", 1.4, 0.0, 3.0, 0.05)
|
||||
_reg_f("Matador", "mat_w_aggression", 1.1, 0.0, 3.0, 0.05)
|
||||
_reg_f("Matador", "mat_w_caution", 1.0, 0.0, 3.0, 0.05)
|
||||
_reg_f("Matador", "mat_w_flee", 0.8, 0.0, 3.0, 0.05)
|
||||
_reg_f("Matador", "mat_w_showmanship", 1.0, 0.0, 3.0, 0.05)
|
||||
# Showmanship (strut, circle the bull, taunt) — the supporting matadors lean on
|
||||
# this to spread out and give the lead room, so a whole crowd reads as a bullring,
|
||||
# not a swarm. Crank it for more posturing, drop it for a relentless mob.
|
||||
_reg_f("Matador", "mat_w_showmanship", 1.6, 0.0, 3.0, 0.05)
|
||||
# Weight on hurling the blade. Kept low — a thrown sword is an occasional flourish,
|
||||
# not a barrage; raising this brings back the pelting.
|
||||
_reg_f("Matador", "mat_w_throw", 0.35, 0.0, 3.0, 0.05)
|
||||
# How many matadors press the bull at once. The nearest this-many engage (close,
|
||||
# throw); everyone else keeps their distance and taunts, taking turns as the bull
|
||||
# moves. 1 = strict one-on-one, higher = a bolder pack.
|
||||
_reg_f("Matador", "mat_engage_slots", 2.0, 1.0, 8.0, 1.0)
|
||||
# Preferred distance (m) a taunting matador circles the bull at while waiting its
|
||||
# turn — the showmanship ring the crowd spreads out onto.
|
||||
_reg_f("Matador", "mat_taunt_ring", 7.0, 3.0, 15.0, 0.5)
|
||||
# How long (s) a matador safely out of the action holds a taunt before drifting to
|
||||
# a new spot — much longer than the between-passes idle, so bystanders mostly pose
|
||||
# for the crowd instead of milling about. Actual hold is randomised ±30%.
|
||||
_reg_f("Matador", "mat_taunt_hold", 8.0, 1.0, 20.0, 0.5)
|
||||
# Small so it smooths dithering without locking the matador into idling.
|
||||
_reg_f("Matador", "mat_w_commit", 0.15, 0.0, 2.0, 0.05)
|
||||
# ── Bear (boss) ─────────────────────────────────────────────────────────────
|
||||
# A Dark-Souls-style boss with a learnable moveset. It soaks bear_max_hp clean hits
|
||||
# (ram or ability), staggering on each, and only topples when worn down. From NEUTRAL
|
||||
# it weighs its options by the range band to the bull and commits to one telegraphed
|
||||
# routine (wind-up → active → recovery); each routine plays to the end (the recovery
|
||||
# is the player's punish window). Below bear_enrage_frac HP it enters phase 2: faster
|
||||
# tells and recovery (× bear_enrage_scale) and longer combo chains.
|
||||
_reg_f("Bear", "bear_max_hp", 30.0, 1.0, 100.0, 1.0)
|
||||
# HP fraction at which phase 2 ("Fury") triggers, and how much it multiplies every
|
||||
# wind-up / recovery timer (lower = snappier, more dangerous).
|
||||
_reg_f("Bear", "bear_enrage_frac", 0.4, 0.0, 1.0, 0.05)
|
||||
_reg_f("Bear", "bear_enrage_scale", 0.7, 0.3, 1.0, 0.05)
|
||||
# Range bands (m) that pick the moveset: ≤close it strikes (swipe / smash), ≤mid it
|
||||
# walks in to close the gap (stalk) or leaps, beyond it lopes in (prowl) or leaps.
|
||||
# close is deliberately generous — the bear commits to melee "from a bit further" and
|
||||
# steps in during the swing (see bear_lunge_speed) rather than needing to be on top.
|
||||
_reg_f("Bear", "bear_close_range", 5.0, 1.0, 12.0, 0.1)
|
||||
_reg_f("Bear", "bear_mid_range", 10.0, 3.0, 20.0, 0.5)
|
||||
_reg_f("Bear", "bear_long_range", 15.0, 3.0, 100.0, 0.5)
|
||||
# Beat spent in NEUTRAL sizing up the bull between routines — kept short so the bear
|
||||
# flows straight from one action into the next instead of pausing (raise for a more
|
||||
# hesitant, readable boss; near-0 for relentless pressure). Shrinks again in phase 2.
|
||||
_reg_f("Bear", "bear_think_time", 0.06, 0.0, 1.0, 0.01)
|
||||
# Locomotion: the all-fours prowl (close a big gap), the menacing 2-leg walk-in
|
||||
# (stalk), the facing rate while positioning/winding up, and the softer tracking rate
|
||||
# a swing keeps on the bull mid-attack so it's harder to just walk out of.
|
||||
_reg_f("Bear", "bear_run_speed", 11.0, 1.0, 20.0, 0.1)
|
||||
_reg_f("Bear", "bear_stalk_speed", 5.5, 0.5, 12.0, 0.1)
|
||||
_reg_f("Bear", "bear_turn_rate", 7.0, 1.0, 20.0, 0.5)
|
||||
_reg_f("Bear", "bear_track_active", 3.5, 0.0, 12.0, 0.1)
|
||||
# Forward step-in during a swing so a strike lands even when the bull is a touch out of
|
||||
# reach (also carries the tracking); 0 = a purely stationary swing.
|
||||
_reg_f("Bear", "bear_lunge_speed", 7.0, 0.0, 16.0, 0.5)
|
||||
# Playback multiplier for the swipe/smash clips — >1 makes the punches snappier.
|
||||
_reg_f("Bear", "bear_attack_anim_speed", 1.35, 0.5, 3.0, 0.05)
|
||||
# Half-arc (deg) the bear must be facing the bull within for a directional swing to
|
||||
# connect; slams use their own radius instead of an arc.
|
||||
_reg_f("Bear", "bear_hit_arc", 70.0, 5.0, 180.0, 5.0)
|
||||
# Double Swipe (ONE_TWO_HIT) — bread-and-butter close combo, two quick hits.
|
||||
_reg_f("Bear", "bear_swipe_windup", 0.3, 0.05, 2.0, 0.05)
|
||||
_reg_f("Bear", "bear_swipe_recover", 0.35, 0.05, 3.0, 0.05)
|
||||
_reg_f("Bear", "bear_swipe_reach", 4.2, 1.0, 8.0, 0.1)
|
||||
# Which claw-slash FX plays on the first vs second swipe hit — the L/R clips are easy to
|
||||
# mix up, so 0 = first hit L then R, 1 = swap them. Purely cosmetic (no gameplay effect).
|
||||
_reg_f("Bear", "bear_fx_claw_swap", 0.0, 0.0, 1.0, 1.0)
|
||||
# Live yaw (deg) applied to the whole Bear_FX node before each effect fires, so the claw
|
||||
# rake / debris can be spun to line up with the bear's facing by eye. Bake the good value.
|
||||
_reg_f("Bear", "bear_fx_yaw", 0.0, -180.0, 180.0, 5.0)
|
||||
# The baked crater clip only pops up (no shrink), so hold it on the ground this long after a
|
||||
# leap slam before hiding it — otherwise it flashes for a single frame and reads as invisible.
|
||||
_reg_f("Bear", "bear_fx_crater_linger", 0.8, 0.0, 3.0, 0.1)
|
||||
# Overhead Smash (SMASH_HIT) — slower tell, biggest punish window, AoE on impact.
|
||||
_reg_f("Bear", "bear_smash_windup", 0.6, 0.1, 3.0, 0.05)
|
||||
_reg_f("Bear", "bear_smash_recover", 0.75, 0.1, 4.0, 0.05)
|
||||
# The overhead smash's hitbox is a forward box lane whose size + travel are authored in
|
||||
# BearAttackHitboxes.tscn's AnimationPlayer ("smash_travel"). Here we only set the upward
|
||||
# pop the bull takes off its feet at the far end (it ramps 0→this with hit distance).
|
||||
_reg_f("Bear", "bear_smash_knockup", 6.0, 0.0, 16.0, 0.5)
|
||||
# Leap Slam (JUMP_SMASH, 47 frames @30fps) — timed to the clip by FRAME: it plays the
|
||||
# crouch grounded, springs at the takeoff frame, and the arc is solved so the paws hit
|
||||
# ground exactly on the impact frame (25), leaving the tail frames to settle on the
|
||||
# ground — no finishing the anim in mid-air. The arc uses its own gravity so peak height
|
||||
# and airtime are independent: bear_leap_height is the peak reached in that fixed airtime.
|
||||
_reg_f("Bear", "bear_leap_takeoff_frame", 6.0, 0.0, 46.0, 1.0)
|
||||
_reg_f("Bear", "bear_leap_impact_frame", 25.0, 1.0, 47.0, 1.0)
|
||||
_reg_f("Bear", "bear_leap_height", 2.6, 0.5, 8.0, 0.1)
|
||||
_reg_f("Bear", "bear_leap_recover", 0.35, 0.0, 4.0, 0.05)
|
||||
_reg_f("Bear", "bear_leap_speed", 14.0, 4.0, 30.0, 0.5)
|
||||
# Where the leap-slam launch zone starts, as a fraction of the circle radius. 0 = launch anywhere
|
||||
# inside; raise to carve a grounded inner zone that only mauls (0.75 = only the outer quarter ring).
|
||||
_reg_f("Bear", "bear_leap_ring_frac", 0.0, 0.0, 1.0, 0.05)
|
||||
_reg_f("Bear", "bear_leap_knockup", 7.0, 0.0, 16.0, 0.5)
|
||||
# Stalk (WALK_ON2LEGS) — how long it will keep walking the bull down before re-deciding.
|
||||
_reg_f("Bear", "bear_stalk_time", 2.5, 0.0, 6.0, 0.1)
|
||||
# Odds a close combo chains a follow-up smash after the swipe (phase 2 always chains).
|
||||
_reg_f("Bear", "bear_combo_chance", 0.7, 0.0, 1.0, 0.05)
|
||||
# Minimum bull speed (ram) that counts as a hit on the bear — a gentle nudge is
|
||||
# shrugged off, only a real charge or an ability wounds it. (The bear itself never
|
||||
# damages the bull by colliding — only its swings and slams hurt.)
|
||||
_reg_f("Bear", "bear_hit_threshold", 6.0, 1.0, 30.0, 0.5)
|
||||
# Planar reach at which a horns-first bull charge wounds the bear (~bear body radius + bull reach).
|
||||
# The bull's swept path is tested against this, so a tunnelling or point-blank charge still lands.
|
||||
_reg_f("Bear", "bear_ram_reach", 2.1, 0.5, 5.0, 0.1)
|
||||
# How long (s) the bear is rocked back and can't act after taking a hit.
|
||||
_reg_f("Bear", "bear_stagger_time", 0.5, 0.0, 2.0, 0.05)
|
||||
# Poise: after a stagger the bear shrugs off staggers for this long (hits still wound
|
||||
# it), so it can't be perma-stunlocked — it gets a window to commit an attack that then
|
||||
# rides its hyper-armour. 0 = no poise (stun-locks under sustained fire).
|
||||
_reg_f("Bear", "bear_stagger_cd", 1.0, 0.0, 4.0, 0.05)
|
||||
# ── Sword ─────────────────────────────────────────────────────────────────
|
||||
# Local seating of the sword in the right hand (drawn / fighting).
|
||||
# Defaults are identity — the bone is oriented in Blender to seat the sword
|
||||
# directly; these exist to fine-tune in-game without re-exporting.
|
||||
# The blade model runs along its local +Z, but weapon_bone (like every rig bone)
|
||||
# points down its local +Y — so identity leaves the blade jutting out sideways.
|
||||
# rot_x = -90 maps the blade's +Z onto the bone's +Y so it thrusts straight along
|
||||
# the bone; rot_y is then the free roll (crossguard tilt) about the blade axis.
|
||||
_reg_f("Sword", "sword_pos_x", 0.0, -1.0, 1.0, 0.01)
|
||||
_reg_f("Sword", "sword_pos_y", 0.0, -1.0, 1.0, 0.01)
|
||||
_reg_f("Sword", "sword_pos_z", 0.0, -1.0, 1.0, 0.01)
|
||||
_reg_f("Sword", "sword_rot_x", 0.0, -180.0, 180.0, 1.0)
|
||||
_reg_f("Sword", "sword_rot_x", -90.0, -180.0, 180.0, 1.0)
|
||||
_reg_f("Sword", "sword_rot_y", 0.0, -180.0, 180.0, 1.0)
|
||||
_reg_f("Sword", "sword_rot_z", 0.0, -180.0, 180.0, 1.0)
|
||||
# Local seating of the sword in the hip holster (sheathed / wandering).
|
||||
# Independent of the hand grip so each pose can be tuned without affecting the
|
||||
# other. Defaults angle the blade down along the matador's side.
|
||||
# other. weapon_rest_bone sits on the left hip; these angle the blade down and
|
||||
# out along the OUTSIDE of the left thigh (rot_x/rot_y aim the blade, rot_z rolls
|
||||
# it about its own axis) so it trails back beside the leg instead of clipping it.
|
||||
_reg_f("Sword", "sword_rest_pos_x", 0.0, -1.0, 1.0, 0.01)
|
||||
_reg_f("Sword", "sword_rest_pos_y", 0.0, -1.0, 1.0, 0.01)
|
||||
_reg_f("Sword", "sword_rest_pos_z", 0.0, -1.0, 1.0, 0.01)
|
||||
_reg_f("Sword", "sword_rest_rot_x", -120.0, -180.0, 180.0, 1.0)
|
||||
_reg_f("Sword", "sword_rest_rot_y", 0.0, -180.0, 180.0, 1.0)
|
||||
_reg_f("Sword", "sword_rest_rot_x", -110.0, -180.0, 180.0, 1.0)
|
||||
_reg_f("Sword", "sword_rest_rot_y", -133.0, -180.0, 180.0, 1.0)
|
||||
_reg_f("Sword", "sword_rest_rot_z", 0.0, -180.0, 180.0, 1.0)
|
||||
# ── Sword throw (matador ranged attack) ──────────────────────────────────
|
||||
# Delay before a fresh sword appears in the holster after one is thrown.
|
||||
# ── Spear throw (matador ranged attack) ──────────────────────────────────
|
||||
# Local seating of the spear in the throwing hand during the wind-up. Tune to
|
||||
# seat the shaft in the grip without re-exporting; flight orientation is derived
|
||||
# from the aim direction at release, not from this pose.
|
||||
_reg_f("Sword", "spear_pos_x", 0.0, -1.0, 1.0, 0.01)
|
||||
_reg_f("Sword", "spear_pos_y", 0.0, -1.0, 1.0, 0.01)
|
||||
_reg_f("Sword", "spear_pos_z", 0.0, -1.0, 1.0, 0.01)
|
||||
_reg_f("Sword", "spear_rot_x", 0.0, -180.0, 180.0, 1.0)
|
||||
_reg_f("Sword", "spear_rot_y", 0.0, -180.0, 180.0, 1.0)
|
||||
_reg_f("Sword", "spear_rot_z", 0.0, -180.0, 180.0, 1.0)
|
||||
# Delay before a fresh sword reappears in the holster if one is ever lost.
|
||||
_reg_f("Sword", "mat_resword_delay", 2.0, 0.0, 10.0, 0.5)
|
||||
_reg_f("Sword", "mat_throw_range", 18.0, 5.0, 40.0)
|
||||
_reg_f("Sword", "mat_throw_min_dist", 5.0, 2.0, 15.0, 0.1)
|
||||
_reg_f("Sword", "mat_throw_windup", 0.5, 0.2, 2.0, 0.05)
|
||||
_reg_f("Sword", "mat_throw_release", 0.55, 0.1, 0.95, 0.01)
|
||||
_reg_f("Sword", "mat_throw_speed", 24.0, 5.0, 60.0)
|
||||
_reg_f("Sword", "mat_throw_spin", 14.0, 0.0, 40.0)
|
||||
# Gravity scale on the thrown blade (low = flies straight to the aim point) and
|
||||
# the vertical aim offset from the bull origin down onto its low collision body.
|
||||
_reg_f("Sword", "mat_throw_gravity", 0.25, 0.0, 1.0, 0.05)
|
||||
# Horizontal speed of the thrown spear; the vertical launch is solved from this
|
||||
# and the gravity below so the arc lands on the bull. Lower = a higher, slower lob.
|
||||
_reg_f("Sword", "mat_throw_speed", 11.0, 5.0, 60.0)
|
||||
# Gravity scale on the spear (higher = a more pronounced arc) and the vertical aim
|
||||
# offset from the bull origin down onto its low collision body.
|
||||
_reg_f("Sword", "mat_throw_gravity", 1.0, 0.1, 3.0, 0.05)
|
||||
_reg_f("Sword", "mat_throw_aim_y", -0.45,-1.5, 0.5, 0.05)
|
||||
# Aim scatter (± degrees) so thrown blades can be read and dodged on the move.
|
||||
_reg_f("Sword", "mat_throw_spread", 11.0, 0.0, 30.0, 0.5)
|
||||
@@ -197,10 +356,10 @@ func _register_all() -> void:
|
||||
_reg_f("Sword", "mat_throw_arm_release", -90.0,-180.0, 180.0, 1.0)
|
||||
_reg_f("Sword", "mat_throw_elbow", 80.0,-180.0, 180.0, 1.0)
|
||||
# ── Abilities ─────────────────────────────────────────────────────────────
|
||||
_reg_f("Abilities", "kick_cooldown", 1.5, 0.2, 10.0, 0.1)
|
||||
_reg_f("Abilities", "kick_range", 3.5, 0.5, 8.0, 0.1)
|
||||
_reg_f("Abilities", "kick_cooldown", 2, 0.2, 600, 0.1)
|
||||
_reg_f("Abilities", "kick_range", 6.0, 0.5, 8.0, 0.1)
|
||||
_reg_f("Abilities", "kick_strength", 12.0, 1.0, 30.0)
|
||||
_reg_f("Abilities", "slam_cooldown", 4.0, 0.5, 15.0, 0.1)
|
||||
_reg_f("Abilities", "slam_cooldown", 12, 0.5, 600, 0.1)
|
||||
_reg_f("Abilities", "slam_jump_velocity", 7.0, 2.0, 20.0)
|
||||
# Descent gravity multiplier — higher = faster crash, less airtime.
|
||||
_reg_f("Abilities", "slam_fall_mult", 3.0, 1.0, 8.0, 0.5)
|
||||
@@ -209,25 +368,29 @@ func _register_all() -> void:
|
||||
_reg_f("Abilities", "slam_launch_up", 7.0, 0.0, 15.0, 0.5)
|
||||
_reg_f("Abilities", "slam_range", 4.0, 1.0, 10.0, 0.1)
|
||||
_reg_f("Abilities", "slam_strength", 14.0, 1.0, 30.0)
|
||||
_reg_f("Abilities", "dash_cooldown", 2.0, 0.5, 10.0, 0.1)
|
||||
_reg_f("Abilities", "dash_cooldown", 3, 0.1, 600.0, 0.1)
|
||||
_reg_f("Abilities", "dash_speed", 66.0, 5.0, 200.0)
|
||||
# ── Roll (Rammus Powerball) ───────────────────────────────────────────────
|
||||
# Exponential rate the dash bleeds from dash_speed back to cruise (max_speed).
|
||||
# Higher = a snappier bullet that dies off quicker; lower = a longer glide.
|
||||
_reg_f("Abilities", "dash_decel", 7.0, 0.5, 30.0, 0.5)
|
||||
# ── Roll (homing chain ball) ──────────────────────────────────────────────
|
||||
# The bull curls into a ball and ACCELERATES the longer it rolls, from
|
||||
# roll_base_speed up to roll_max_speed over roll_rampup_time. Turning is wide
|
||||
# (momentum steering via roll_turn). On slamming into a matador the ball POPS:
|
||||
# the target is launched skyward (roll_knockup) and the roll ends.
|
||||
_reg_f("Roll", "roll_cooldown", 3.0, 0.5, 15.0, 0.1)
|
||||
# roll_base_speed up to roll_max_speed over roll_rampup_time. It HOMES on the
|
||||
# closest matador; on slamming one the ball POPS it (launched skyward via
|
||||
# roll_knockup) then CHAINS to the next closest, up to roll_chain_count times.
|
||||
# roll_turn is the homing turn rate. When no chain targets remain, the roll ends.
|
||||
_reg_f("Roll", "roll_cooldown", 20, 0.5, 600, 0.1)
|
||||
_reg_f("Roll", "roll_duration", 2.5, 0.5, 6.0, 0.1) # max roll time
|
||||
_reg_f("Roll", "roll_chain_count", 2.0, 0.0, 8.0, 1.0) # extra matadors chained after the first
|
||||
_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_rampup_time", 2.0, 0.2, 6.0, 0.1) # time to reach top speed
|
||||
_reg_f("Roll", "roll_turn", 7.0, 0.2, 20.0) # steer rate (WASD/arrows; higher = tighter)
|
||||
_reg_f("Roll", "roll_turn", 7.0, 0.2, 20.0) # homing turn rate (higher = tighter tracking)
|
||||
_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_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
|
||||
# ── Debug overlays (see debug_draw.gd) ───────────────────────────────────
|
||||
_reg_b("Debug", "show_collisions", false)
|
||||
# PS1 post-process filter (see ps1_filter.gd on the fullscreen ColorRect):
|
||||
# screen-covering CRT/PS1 shader — pixelation, colour-banding + dither, and a
|
||||
# rolling scanline. Keys map 1:1 onto the shader uniforms; show_ps1 toggles the
|
||||
@@ -235,12 +398,13 @@ func _register_all() -> void:
|
||||
# a uniform out of bounds.
|
||||
_reg_b("PS1", "show_ps1", true)
|
||||
_reg_f("PS1", "ps1_pixel_scale", 4.0, 1.0, 8.0, 1.0)
|
||||
_reg_f("PS1", "ps1_color_depth", 5.0, 2.0, 8.0, 1.0)
|
||||
_reg_f("PS1", "ps1_dither_strength", 0.8, 0.0, 2.0, 0.05)
|
||||
_reg_f("PS1", "ps1_color_depth", 4.5, 2.0, 8.0, 1.0)
|
||||
_reg_f("PS1", "ps1_dither_strength", 1, 0.0, 2.0, 0.05)
|
||||
_reg_f("PS1", "ps1_scanline_strength", 0.2, 0.0, 1.0, 0.05)
|
||||
_reg_f("PS1", "ps1_roll_speed", 3.0, 0.0, 10.0, 0.1)
|
||||
_reg_f("PS1", "ps1_roll_strength", 1.0, 0.0, 1.0, 0.05)
|
||||
_reg_b("Debug", "show_hitboxes", false)
|
||||
_reg_b("Debug", "show_attacks", false)
|
||||
_reg_b("Debug", "show_bones", false)
|
||||
_reg_b("Debug", "show_raycasts", false)
|
||||
_reg_b("Debug", "show_tail", false)
|
||||
@@ -250,6 +414,12 @@ func _register_all() -> void:
|
||||
_reg_b("Debug", "show_wireframe", false)
|
||||
_reg_b("Debug", "show_grid", false)
|
||||
_reg_b("Debug", "show_axes", false)
|
||||
# Force the on-screen touch controls (joystick + ability buttons) on even on a
|
||||
# desktop build — otherwise they appear only when a touchscreen is detected.
|
||||
_reg_b("Touch", "force_touch_controls", false)
|
||||
# On-screen readout of live touch state (event count, last position, active zone) so
|
||||
# touch problems can be diagnosed on the actual device, where no console is reachable.
|
||||
_reg_b("Touch", "touch_debug", false)
|
||||
|
||||
|
||||
func _reg_f(section: String, key: String, default: float,
|
||||
@@ -300,11 +470,54 @@ func get_all() -> Dictionary:
|
||||
|
||||
|
||||
func save() -> void:
|
||||
var cfg := ConfigFile.new()
|
||||
var path := "res://debug_params.gd"
|
||||
var file := FileAccess.open(path, FileAccess.READ)
|
||||
if file == null:
|
||||
push_error("DP.save: cannot open " + path)
|
||||
return
|
||||
var src := file.get_as_text()
|
||||
file.close()
|
||||
|
||||
for key: String in _params:
|
||||
var p: Dictionary = _params[key]
|
||||
cfg.set_value(p["section"], key, p["value"])
|
||||
cfg.save(SAVE_PATH)
|
||||
if p["value"] == p["default"]:
|
||||
continue
|
||||
var re := RegEx.new()
|
||||
var literal := ""
|
||||
if p["type"] == TYPE_FLOAT:
|
||||
re.compile('(_reg_f\\("[^"]+",\\s*"%s",\\s*)([-\\d.e]+)' % key)
|
||||
literal = _fmt_float(p["value"] as float)
|
||||
else:
|
||||
re.compile('(_reg_b\\("[^"]+",\\s*"%s",\\s*)(true|false)' % key)
|
||||
literal = "true" if bool(p["value"]) else "false"
|
||||
var m := re.search(src)
|
||||
if m == null:
|
||||
push_warning("DP.save: no _reg_ line found for '%s' — skipped" % key)
|
||||
continue
|
||||
# Splice the value in by index rather than RegEx.sub(): sub()'s replacement
|
||||
# string parses "$n" as a backreference, so "$1"+"12.5" becomes "$112.5"
|
||||
# (group 112 → PCRE2 error → mangled output). Indexed splice inserts the
|
||||
# literal verbatim, exactly the value the user entered.
|
||||
src = src.substr(0, m.get_start(2)) + literal + src.substr(m.get_end(2))
|
||||
p["default"] = p["value"]
|
||||
|
||||
var wfile := FileAccess.open(path, FileAccess.WRITE)
|
||||
if wfile == null:
|
||||
push_error("DP.save: cannot write " + path)
|
||||
return
|
||||
wfile.store_string(src)
|
||||
wfile.close()
|
||||
|
||||
|
||||
# Godot's String % operator has no "g" conversion — "%.6g" % v slips past the
|
||||
# compiler (v is not const) but emits the literal "%.6g" at runtime, which would be
|
||||
# written straight into the source. "%s" gives the shortest round-tripping form,
|
||||
# matching the value the user entered; the guard keeps it a float literal.
|
||||
func _fmt_float(v: float) -> String:
|
||||
var s := "%s" % v
|
||||
if not ("." in s or "e" in s):
|
||||
s += ".0"
|
||||
return s
|
||||
|
||||
|
||||
func load_saved() -> void:
|
||||
|
||||
@@ -1,26 +1,67 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Run from the project root regardless of where the script is invoked.
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
SERVER_USER="richard"
|
||||
SERVER_HOST="192.168.1.168"
|
||||
SERVER_PATH="/opt/bulloseum/data"
|
||||
|
||||
BUILD_DIR="build/web"
|
||||
|
||||
# Derive the version the same way GameVersion does (single source of truth):
|
||||
# numeric version from project.godot, pre-release channel from game_version.gd.
|
||||
VERSION_NUMBER="$(grep -oP 'config/version="\K[^"]+' project.godot)"
|
||||
CHANNEL="$(grep -oP 'const CHANNEL: String = "\K[^"]*' game_version.gd || true)"
|
||||
VERSION="v${VERSION_NUMBER}"
|
||||
[ -n "$CHANNEL" ] && VERSION="${VERSION}-${CHANNEL}"
|
||||
|
||||
GIT_COMMIT="$(git rev-parse --short HEAD 2>/dev/null || echo unknown)"
|
||||
BUILD_DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
||||
|
||||
echo "building Bullosseum ${VERSION} (${GIT_COMMIT})"
|
||||
|
||||
mkdir -p "$BUILD_DIR"
|
||||
godot --headless --export-release "Web" "$BUILD_DIR/index.html"
|
||||
|
||||
gzip -kf "$BUILD_DIR/index.wasm"
|
||||
|
||||
# Version stamp shipped alongside the flat build so the server records what's live.
|
||||
cat > "$BUILD_DIR/version.txt" <<EOF
|
||||
version=${VERSION}
|
||||
commit=${GIT_COMMIT}
|
||||
built=${BUILD_DATE}
|
||||
EOF
|
||||
|
||||
# Cache-bust: give wasm/pck unique names so browsers never serve a stale build.
|
||||
# index.js gets a ?v= query string; wasm/pck get renamed because the engine
|
||||
# fetches them internally using GODOT_CONFIG.executable as the base name.
|
||||
STAMP="$GIT_COMMIT"
|
||||
cp "$BUILD_DIR/index.wasm" "$BUILD_DIR/index.${STAMP}.wasm"
|
||||
cp "$BUILD_DIR/index.wasm.gz" "$BUILD_DIR/index.${STAMP}.wasm.gz"
|
||||
cp "$BUILD_DIR/index.pck" "$BUILD_DIR/index.${STAMP}.pck"
|
||||
|
||||
sed -i \
|
||||
-e "s|src=\"index\.js\"|src=\"index.js?v=${STAMP}\"|" \
|
||||
-e "s|\"executable\":\"index\"|\"executable\":\"index.${STAMP}\"|" \
|
||||
-e "s|\"index\.pck\"|\"index.${STAMP}.pck\"|g" \
|
||||
-e "s|\"index\.wasm\"|\"index.${STAMP}.wasm\"|g" \
|
||||
"$BUILD_DIR/index.html"
|
||||
|
||||
# Remove previous build's versioned assets from the server before uploading.
|
||||
ssh "$SERVER_USER@$SERVER_HOST" "find $SERVER_PATH -maxdepth 1 -name 'index.*.wasm' -o -name 'index.*.wasm.gz' -o -name 'index.*.pck' | xargs -r rm -f"
|
||||
|
||||
scp "$BUILD_DIR/index.html" \
|
||||
"$BUILD_DIR/index.js" \
|
||||
"$BUILD_DIR/index.wasm.gz" \
|
||||
"$BUILD_DIR/index.pck" \
|
||||
"$BUILD_DIR/index.${STAMP}.wasm.gz" \
|
||||
"$BUILD_DIR/index.${STAMP}.pck" \
|
||||
"$BUILD_DIR/index.audio.worklet.js" \
|
||||
"$BUILD_DIR/index.audio.position.worklet.js" \
|
||||
"$BUILD_DIR/index.icon.png" \
|
||||
"$BUILD_DIR/index.apple-touch-icon.png" \
|
||||
"$BUILD_DIR/index.png" \
|
||||
"$BUILD_DIR/version.txt" \
|
||||
"$SERVER_USER@$SERVER_HOST:$SERVER_PATH/"
|
||||
|
||||
echo "deployed to $SERVER_HOST:$SERVER_PATH"
|
||||
echo "deployed ${VERSION} (${STAMP}) to $SERVER_HOST:$SERVER_PATH"
|
||||
|
||||
@@ -1,18 +1,30 @@
|
||||
[runnable_presets]
|
||||
|
||||
Web="Web"
|
||||
"Windows Desktop"="Windows Desktop"
|
||||
|
||||
[preset.0]
|
||||
|
||||
name="Web"
|
||||
platform="Web"
|
||||
runnable=true
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="build/web/index.html"
|
||||
patches=PackedStringArray()
|
||||
patch_delta_encoding=false
|
||||
patch_delta_compression_level_zstd=19
|
||||
patch_delta_min_reduction=0.1
|
||||
patch_delta_include_filters="*"
|
||||
patch_delta_exclude_filters=""
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
seed=0
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
script_export_mode=2
|
||||
|
||||
[preset.0.options]
|
||||
|
||||
@@ -21,7 +33,7 @@ custom_template/release=""
|
||||
variant/extensions_support=false
|
||||
variant/thread_support=true
|
||||
vram_texture_compression/for_desktop=true
|
||||
vram_texture_compression/for_mobile=false
|
||||
vram_texture_compression/for_mobile=true
|
||||
html/export_icon=true
|
||||
html/custom_html_shell=""
|
||||
html/head_include=""
|
||||
@@ -29,6 +41,7 @@ html/canvas_resize_policy=2
|
||||
html/focus_canvas_on_start=true
|
||||
html/experimental_virtual_keyboard=false
|
||||
progressive_web_app/enabled=false
|
||||
progressive_web_app/ensure_cross_origin_isolation_headers=true
|
||||
progressive_web_app/offline_page=""
|
||||
progressive_web_app/display=1
|
||||
progressive_web_app/orientation=0
|
||||
@@ -36,3 +49,76 @@ progressive_web_app/icon_144x144=""
|
||||
progressive_web_app/icon_180x180=""
|
||||
progressive_web_app/icon_512x512=""
|
||||
progressive_web_app/background_color=Color(0, 0, 0, 1)
|
||||
threads/emscripten_pool_size=8
|
||||
threads/godot_pool_size=4
|
||||
|
||||
[preset.1]
|
||||
|
||||
name="Windows Desktop"
|
||||
platform="Windows Desktop"
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="../Export/Bullosseum_020.exe"
|
||||
patches=PackedStringArray()
|
||||
patch_delta_encoding=false
|
||||
patch_delta_compression_level_zstd=19
|
||||
patch_delta_min_reduction=0.1
|
||||
patch_delta_include_filters="*"
|
||||
patch_delta_exclude_filters=""
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
seed=0
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
script_export_mode=2
|
||||
|
||||
[preset.1.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_wrapper=1
|
||||
binary_format/embed_pck=false
|
||||
texture_format/s3tc_bptc=true
|
||||
texture_format/etc2_astc=false
|
||||
shader_baker/enabled=false
|
||||
binary_format/architecture="x86_64"
|
||||
codesign/enable=false
|
||||
codesign/timestamp=true
|
||||
codesign/timestamp_server_url=""
|
||||
codesign/digest_algorithm=1
|
||||
codesign/description=""
|
||||
codesign/custom_options=PackedStringArray()
|
||||
application/modify_resources=true
|
||||
application/icon=""
|
||||
application/console_wrapper_icon=""
|
||||
application/icon_interpolation=4
|
||||
application/file_version=""
|
||||
application/product_version=""
|
||||
application/company_name=""
|
||||
application/product_name=""
|
||||
application/file_description=""
|
||||
application/copyright=""
|
||||
application/trademarks=""
|
||||
application/export_angle=0
|
||||
application/export_d3d12=0
|
||||
application/d3d12_agility_sdk_multiarch=true
|
||||
ssh_remote_deploy/enabled=false
|
||||
ssh_remote_deploy/host="user@host_ip"
|
||||
ssh_remote_deploy/port="22"
|
||||
ssh_remote_deploy/extra_args_ssh=""
|
||||
ssh_remote_deploy/extra_args_scp=""
|
||||
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
|
||||
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
|
||||
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
|
||||
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
|
||||
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
|
||||
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
|
||||
Start-ScheduledTask -TaskName godot_remote_debug
|
||||
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
|
||||
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
|
||||
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
|
||||
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
|
||||
Remove-Item -Recurse -Force '{temp_dir}'"
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
@tool
|
||||
extends Area3D
|
||||
class_name Hitbox
|
||||
## A designer-placeable attack hitbox: drop this into a scene, give it a CollisionShape3D
|
||||
## child, and drag the shape to size/position the attack's reach in the editor. The shape
|
||||
## itself decides what got hit — no distance/facing math in code.
|
||||
##
|
||||
## Inactive by default; the owning script calls activate() for the swing's active window and
|
||||
## deactivate() when it ends. Each activation only hits a given body once (the bull's own
|
||||
## i-frames also collapse a flurry, but this keeps a single swing from re-triggering).
|
||||
|
||||
const PhysicsLayers = preload("res://physics_layers.gd")
|
||||
|
||||
## How the hit is tagged on the bull's take_sword_hit ("mauled" / "gored" / …).
|
||||
@export var damage_cause: String = "mauled"
|
||||
## Upward launch (m/s) applied to the bull on hit — e.g. an overhead smash that pops it up.
|
||||
@export var knock_up: float = 0.0
|
||||
## Knock-up distance shaping, measured planar (XZ) from this hitbox's own origin to the body:
|
||||
## below `knock_up_min_dist` no pop is applied (leap slam: only the outer ring launches). If
|
||||
## `knock_up_max_dist` > min, the pop ramps 0→`knock_up` from min to max (overhead smash: the
|
||||
## further out the hit lands, the higher the bull flies); at/again 0 it's full past the min.
|
||||
@export var knock_up_min_dist: float = 0.0
|
||||
@export var knock_up_max_dist: float = 0.0
|
||||
|
||||
var _active: bool = false
|
||||
var _hit_this_swing: Dictionary = {}
|
||||
# Whether the most recent active window connected. Cleared on activate(), NOT deactivate(), so the
|
||||
# owner can read it after the window closes (e.g. a landed stab breaks off to taunt).
|
||||
var _did_hit: bool = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
# Detect the bull's body (layer BULL) only; never collide or push physics.
|
||||
collision_layer = 0
|
||||
collision_mask = PhysicsLayers.BULL
|
||||
monitorable = false
|
||||
monitoring = false
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
body_entered.connect(_on_body_entered)
|
||||
|
||||
|
||||
func activate() -> void:
|
||||
if _active:
|
||||
return
|
||||
_active = true
|
||||
_hit_this_swing.clear()
|
||||
_did_hit = false
|
||||
monitoring = true
|
||||
|
||||
|
||||
func deactivate() -> void:
|
||||
_active = false
|
||||
monitoring = false
|
||||
|
||||
|
||||
# Did the window that just closed connect? Valid until the next activate() clears it.
|
||||
func did_hit() -> bool:
|
||||
return _did_hit
|
||||
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
_apply_hit(body)
|
||||
|
||||
|
||||
# For AoE slams the bull is usually already standing inside the shape when it activates, so
|
||||
# body_entered never fires. The owner calls sweep() each active frame to catch current overlaps
|
||||
# (still deduped per activation, so the bull is only hit once per slam).
|
||||
func sweep() -> void:
|
||||
if not _active:
|
||||
return
|
||||
for body in get_overlapping_bodies():
|
||||
_apply_hit(body)
|
||||
|
||||
|
||||
func _apply_hit(body: Node3D) -> void:
|
||||
if not _active or not body.is_in_group(&"player"):
|
||||
return
|
||||
if _hit_this_swing.has(body):
|
||||
return
|
||||
_hit_this_swing[body] = true
|
||||
_did_hit = true
|
||||
body.call(&"take_sword_hit", damage_cause)
|
||||
if knock_up > 0.0:
|
||||
var v := _knock_up_for(body)
|
||||
if v > 0.0:
|
||||
body.call(&"apply_knock_up", v)
|
||||
|
||||
|
||||
# Scale the pop by how far the body is from this hitbox's origin (planar). See the export docs.
|
||||
func _knock_up_for(body: Node3D) -> float:
|
||||
if knock_up_min_dist <= 0.0 and knock_up_max_dist <= 0.0:
|
||||
return knock_up
|
||||
var to := body.global_position - global_position
|
||||
var d := Vector2(to.x, to.z).length()
|
||||
if d < knock_up_min_dist:
|
||||
return 0.0
|
||||
if knock_up_max_dist > knock_up_min_dist:
|
||||
var t := clampf((d - knock_up_min_dist) / (knock_up_max_dist - knock_up_min_dist), 0.0, 1.0)
|
||||
return knock_up * t
|
||||
return knock_up
|
||||