Compare commits
151 Commits
uurin
...
bd10d1789b
| Author | SHA1 | Date | |
|---|---|---|---|
| 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 | |||
| 271de1b045 | |||
| 3defc9da95 | |||
| ff75dacfb6 | |||
| bf7a454ad0 | |||
| ebb6ec6335 | |||
| a0b248748c | |||
| 5ef5889979 | |||
| 2e9d62b964 | |||
| 622830a6ee | |||
| 603a674e08 | |||
| 631df017d1 | |||
| 2c0142d208 | |||
| c283eb0927 | |||
| d379b215e2 | |||
| cd73a21ab7 | |||
| 6a67bfea36 | |||
| b929ed2a7a | |||
| 708a35d51f | |||
| 115872b98f | |||
| 64124990a6 | |||
| 037bfad700 | |||
| 661b4e470b | |||
| b564cd5a71 | |||
| 7b5fcb1d1e | |||
| 45e69101b6 | |||
| a9810c8c9f | |||
| ba20cd8580 | |||
| aac0099faa | |||
| 4fc64dedae | |||
| 7423665c06 | |||
| 09c39e068b | |||
| c1852e8736 | |||
| dda9862589 | |||
| d538679697 | |||
| e668895c12 | |||
| 064f07ace7 | |||
| 9d0799083c | |||
| 2bea615307 | |||
| a61f4c4689 | |||
| f6355605cd | |||
| 033d26ee18 | |||
| d3315836c3 | |||
| 3279645ac4 | |||
| 371a2fded0 | |||
| 49a9bced4b | |||
| f0d932eac3 | |||
| ca1a0ce581 | |||
| 5ad4f64474 | |||
| 48cac53fc6 | |||
| 5c489318a9 | |||
| 1f24a750fb | |||
| 33ec51625c | |||
| 2e2b70e030 | |||
| 04597cdc01 | |||
| c407513cbd | |||
| ea065e4d81 | |||
| 0e654ec0b6 | |||
| df27e9d807 | |||
| 866cc12c2c | |||
| d98a5ba0ac | |||
| 6abf5355c2 | |||
| bfb026c7ae | |||
| 245ce31eab | |||
| b30fb6e0a6 | |||
| 950d93ed0e | |||
| 85b9c86164 | |||
| 174b14fa61 | |||
| 30136a9b90 | |||
| 80a35a4553 | |||
| 98d579f733 | |||
| f19e6980cd | |||
| ab270ac04f | |||
| 22ed4f7722 | |||
| af0790a1ce | |||
| a8b9f166a6 | |||
| de5b5f3b7c | |||
| 13b027d91c | |||
| d6fe527906 | |||
| 6549240337 | |||
| fe5d143047 | |||
| dc40057fe1 | |||
| cb3a54c1cc | |||
| 34b3866a5e | |||
| 4f1126563c | |||
| c587b9877f | |||
| a809ed6cc4 | |||
| 9675ae884d | |||
| a318e65e70 | |||
| 8b3a816203 | |||
| 4e7bc29507 | |||
| b7c50eaae2 | |||
| 4fa965725d | |||
| f4d61b7f0a | |||
| adbd3859de | |||
| fb6ac05890 | |||
| 22d8e5df8c |
@@ -0,0 +1,4 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
disable:
|
||||||
|
- class-definitions-order
|
||||||
|
- no-else-return
|
||||||
|
max-line-length: 120
|
||||||
|
max-file-lines: 1200
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# Normalize EOL for all files that Git considers text files.
|
||||||
|
* text=auto eol=lf
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
# Godot 4+ specific ignores
|
||||||
|
.godot/
|
||||||
|
/android/
|
||||||
|
|
||||||
|
# JetBrains IDE — contains absolute paths (Godot binary, SDK dirs), varies per user
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# Blender render previews (generated by render_anim_preview.py)
|
||||||
|
Blender/preview/
|
||||||
|
|
||||||
|
Blender/*.blend1
|
||||||
|
|
||||||
|
# Test output (generated screenshots, frame strips)
|
||||||
|
tests/output/
|
||||||
|
|
||||||
|
# Web export output
|
||||||
|
build/
|
||||||
|
|
||||||
|
#PRISM
|
||||||
|
BullPrism/
|
||||||
|
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Rider ignored files
|
||||||
|
/.idea.Bullosseum.iml
|
||||||
|
/projectSettingsUpdater.xml
|
||||||
|
/contentModel.xml
|
||||||
|
/modules.xml
|
||||||
|
# Ignored default folder with query files
|
||||||
|
/queries/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="UserContentModel">
|
||||||
|
<attachedFolders />
|
||||||
|
<explicitIncludes />
|
||||||
|
<explicitExcludes />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
extends Node3D
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
add_to_group(&"public") # excluded from debug overlays — see publikum_controller.gd
|
||||||
|
var anim := get_node_or_null(^"AnimationPlayer") as AnimationPlayer
|
||||||
|
if anim:
|
||||||
|
anim.play(&"Juubeldab")
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://wj6tgh8nb0ka
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
extends Node3D
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
$AnimationPlayer.play("ArmatureAction")
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://gt3kfchac3m3
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://cl54dt38yj2x"
|
||||||
|
path="res://.godot/imported/Arena.glb-bf6b057edaab2fa44513d7f705517361.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Arena.glb"
|
||||||
|
dest_files=["res://.godot/imported/Arena.glb-bf6b057edaab2fa44513d7f705517361.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: 598 KiB |
@@ -0,0 +1,45 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
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", "etc2_astc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "c8b9b7d6205ce80dfcfaa38152b996fe"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Arena_sand.png"
|
||||||
|
dest_files=["res://.godot/imported/Arena_sand.png-416de2afe03241df088061e1a5f831af.s3tc.ctex", "res://.godot/imported/Arena_sand.png-416de2afe03241df088061e1a5f831af.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://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", "etc2_astc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "0e7ed34c3c812d96732bd32f9dca0c93"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Arena_wall.png"
|
||||||
|
dest_files=["res://.godot/imported/Arena_wall.png-e67bd4bbd2f60583bfc14dd8b7687eef.s3tc.ctex", "res://.godot/imported/Arena_wall.png-e67bd4bbd2f60583bfc14dd8b7687eef.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://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", "etc2_astc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "23a7a951553ffe271c47693fd71314ca"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Arena_wood.png"
|
||||||
|
dest_files=["res://.godot/imported/Arena_wood.png-b4ed20d66b4d375396b0be2f2f863d80.s3tc.ctex", "res://.godot/imported/Arena_wood.png-b4ed20d66b4d375396b0be2f2f863d80.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: 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
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://cwmo5vh738x6w"
|
||||||
|
path="res://.godot/imported/Lobby_level.glb-a7e896ecf7377d9530a80d5e63140cc3.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Lobby_level.glb"
|
||||||
|
dest_files=["res://.godot/imported/Lobby_level.glb-a7e896ecf7377d9530a80d5e63140cc3.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: 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://eu2lqjhowj4t"
|
||||||
|
path="res://.godot/imported/Matador.glb-84387af784b13addc4467fc8edace9ff.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Matador.glb"
|
||||||
|
dest_files=["res://.godot/imported/Matador.glb-84387af784b13addc4467fc8edace9ff.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=true
|
||||||
|
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://dio67r8ambe7h"
|
||||||
|
path="res://.godot/imported/arena_placeholder_v01.glb-fc11365d8ec7ae6778e90b13ba508b8a.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/arena_placeholder_v01.glb"
|
||||||
|
dest_files=["res://.godot/imported/arena_placeholder_v01.glb-fc11365d8ec7ae6778e90b13ba508b8a.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=0
|
||||||
|
gltf/embedded_image_handling=1
|
||||||
|
gltf/texture_map_mode=1
|
||||||
@@ -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,46 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://bun14xmk20pcj"
|
||||||
|
path="res://.godot/imported/bull.fbx-50f6d03a92c862695bbeaeba563be0db.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/bull.fbx"
|
||||||
|
dest_files=["res://.godot/imported/bull.fbx-50f6d03a92c862695bbeaeba563be0db.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=true
|
||||||
|
skins/use_named_skins=true
|
||||||
|
animation/import=true
|
||||||
|
animation/fps=30
|
||||||
|
animation/trimming=true
|
||||||
|
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={}
|
||||||
|
fbx/importer=0
|
||||||
|
fbx/allow_geometry_helper_nodes=false
|
||||||
|
fbx/embedded_image_handling=1
|
||||||
|
fbx/naming_version=2
|
||||||
|
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: 115 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://d166u18p3wqiy"
|
||||||
|
path="res://.godot/imported/crowd_clap_sheet.png-a110e7d663af8fcbe9ebf5de44188c85.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/crowd_clap_sheet.png"
|
||||||
|
dest_files=["res://.godot/imported/crowd_clap_sheet.png-a110e7d663af8fcbe9ebf5de44188c85.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,45 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://bdbx0wwa73rhp"
|
||||||
|
path="res://.godot/imported/Bear_FX.glb-5bac655e61b5e140f6cd145298d00ca8.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/fx/Bear_FX.glb"
|
||||||
|
dest_files=["res://.godot/imported/Bear_FX.glb-5bac655e61b5e140f6cd145298d00ca8.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://2e6fbder27w1"
|
||||||
|
path="res://.godot/imported/cubes_fx_test.glb-29490ce7011d666c1c4917a1a92679e4.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/fx/cubes_fx_test.glb"
|
||||||
|
dest_files=["res://.godot/imported/cubes_fx_test.glb-29490ce7011d666c1c4917a1a92679e4.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 @@
|
|||||||
|
uid://csxxlnq74fej4
|
||||||
|
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,38 @@
|
|||||||
|
[gd_scene format=3 uid="uid://bl6jlbq1dpkc"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://eu2lqjhowj4t" path="res://Assets/Matador.glb" id="1_m7x6l"]
|
||||||
|
[ext_resource type="Script" uid="uid://dpoq87w5pvqa" path="res://matador_2.gd" id="2_mftd2"]
|
||||||
|
|
||||||
|
[node name="matador2" unique_id=1179710042 instance=ExtResource("1_m7x6l")]
|
||||||
|
script = ExtResource("2_mftd2")
|
||||||
|
|
||||||
|
[node name="Skeleton3D" parent="Armature" parent_id_path=PackedInt32Array(1269629432) index="0" unique_id=978366810]
|
||||||
|
bones/0/position = Vector3(0.056660548, 0.6424767, -0.0167365)
|
||||||
|
bones/0/rotation = Quaternion(0.080643006, 0, 0, 0.996743)
|
||||||
|
bones/1/rotation = Quaternion(0.083861314, 0, 0, 0.9964774)
|
||||||
|
bones/3/rotation = Quaternion(0.04833339, 0.5302496, -0.71466804, 0.4535955)
|
||||||
|
bones/4/rotation = Quaternion(0.031473875, -0.17018215, -0.15981929, 0.97185665)
|
||||||
|
bones/5/rotation = Quaternion(0.6747468, -0.021427644, -0.06245957, 0.7350895)
|
||||||
|
bones/6/rotation = Quaternion(3.1828083e-08, -9.5969504e-08, -0.0587008, 0.99827564)
|
||||||
|
bones/7/rotation = Quaternion(0.1907551, 0.20328633, 0.7258648, 0.6288143)
|
||||||
|
bones/8/rotation = Quaternion(0.16639966, -0.05474137, 0.010937729, 0.984477)
|
||||||
|
bones/9/rotation = Quaternion(0.5914298, 0.005839911, -0.041949864, 0.8052435)
|
||||||
|
bones/10/rotation = Quaternion(2.3105285e-08, 1.0152064e-07, 0.05870079, 0.99827564)
|
||||||
|
bones/11/rotation = Quaternion(0.39202613, 0.47060952, 0.5799399, 0.53713316)
|
||||||
|
bones/12/rotation = Quaternion(0.62021786, 0.40894383, 0.44191495, 0.5027981)
|
||||||
|
bones/13/rotation = Quaternion(-0.11584477, 0.0021730124, 0.6343679, 0.7642989)
|
||||||
|
bones/14/rotation = Quaternion(0.1454883, 0.14013468, -0.7254941, 0.65791625)
|
||||||
|
bones/15/rotation = Quaternion(0.71668345, 0.065085255, -0.6923973, -0.05210323)
|
||||||
|
bones/16/rotation = Quaternion(-0.10161893, -0.0019664483, -0.65947086, 0.7448275)
|
||||||
|
bones/17/rotation = Quaternion(0.06964938, -0.042099692, 0.74388325, 0.6633358)
|
||||||
|
bones/18/rotation = Quaternion(0.5305965, -0.28927496, 0.76720744, -0.21489602)
|
||||||
|
bones/19/position = Vector3(0.16341288, 0.31487355, 0.3966543)
|
||||||
|
bones/20/position = Vector3(0.22012731, 0.38421977, 0.95168185)
|
||||||
|
bones/21/position = Vector3(-0.09492579, 0.40446192, -0.46390092)
|
||||||
|
bones/21/rotation = Quaternion(0.7216726, 0.064735115, -0.6891729, 0.0062273443)
|
||||||
|
bones/22/position = Vector3(-0.22012731, 0.38421977, 0.95168185)
|
||||||
|
bones/23/position = Vector3(-0.0382514, 1.7423625, 0.0026792884)
|
||||||
|
bones/23/rotation = Quaternion(0.8626007, 0.0068245474, -0.099159576, -0.49602506)
|
||||||
|
bones/23/scale = Vector3(0.6647317, 1.001677, 1.0066445)
|
||||||
|
bones/24/rotation = Quaternion(-0.007878712, 8.3020435e-09, -0.0023950166, 0.9999661)
|
||||||
|
bones/25/rotation = Quaternion(5.5870206e-09, 5.5879354e-09, -2.0518176e-09, 1)
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
extends Node3D
|
||||||
|
|
||||||
|
|
||||||
|
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
animation_player.play("Taunt")
|
||||||
|
animation_player.animation_finished.connect(_on_animation_finished)
|
||||||
|
|
||||||
|
func _on_animation_finished(anim_name):
|
||||||
|
if anim_name == "Taunt":
|
||||||
|
animation_player.play("Taunt")
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://dycnoiadljbb1
|
||||||
|
After Width: | Height: | Size: 296 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bxv1uuymonrp6"
|
||||||
|
path="res://.godot/imported/menu_bg.png-3906063022fa3c81090e3c663f8866b0.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/menu_bg.png"
|
||||||
|
dest_files=["res://.godot/imported/menu_bg.png-3906063022fa3c81090e3c663f8866b0.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,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,45 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://xyvank512l5n"
|
||||||
|
path="res://.godot/imported/sword.glb-a20d99f4c597d7fdae7f36c74685e1ff.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/sword.glb"
|
||||||
|
dest_files=["res://.godot/imported/sword.glb-a20d99f4c597d7fdae7f36c74685e1ff.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,287 @@
|
|||||||
|
[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
|
||||||
|
|
||||||
|
[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="Skeleton3D" parent="bear_model/bear-rig" parent_id_path=PackedInt32Array(359217823, 1619621659) index="0" unique_id=1324818366]
|
||||||
|
bones/1/position = Vector3(0.04601016, 1.9209582, 0.9051311)
|
||||||
|
bones/1/rotation = Quaternion(0.5270001, -0.011489415, -0.05297156, 0.848135)
|
||||||
|
bones/2/rotation = Quaternion(0.29015693, 0.002787927, 0.00639222, 0.9569537)
|
||||||
|
bones/2/scale = Vector3(0.9999999, 1.0000008, 0.99999934)
|
||||||
|
bones/3/rotation = Quaternion(0.06707396, 0.012082217, 0.011868715, 0.9976043)
|
||||||
|
bones/4/rotation = Quaternion(0.3487565, 0.010761848, 0.013076123, 0.93706036)
|
||||||
|
bones/5/rotation = Quaternion(0.15472108, -0.21109715, -0.09227382, 0.96072114)
|
||||||
|
bones/6/rotation = Quaternion(0.4204113, 0.23492317, -0.11518617, 0.86879086)
|
||||||
|
bones/7/rotation = Quaternion(0.76830006, 0.36476925, -0.4668917, -0.24222025)
|
||||||
|
bones/8/rotation = Quaternion(0.5460264, -0.71257937, 0.40870878, -0.16444752)
|
||||||
|
bones/9/rotation = Quaternion(-0.02719195, -0.14156067, -0.26938534, 0.9521832)
|
||||||
|
bones/10/rotation = Quaternion(-0.12630412, -0.39785445, -0.057911687, 0.90686566)
|
||||||
|
bones/11/rotation = Quaternion(0.70209646, -0.35357565, 0.59454584, -0.16899753)
|
||||||
|
bones/12/rotation = Quaternion(0.5294657, 0.7712517, -0.33475664, -0.1130258)
|
||||||
|
bones/13/rotation = Quaternion(-0.04075809, 0.17025389, 0.28913936, 0.94114333)
|
||||||
|
bones/14/rotation = Quaternion(-0.03496992, 0.2568669, -0.0008229511, 0.9658136)
|
||||||
|
bones/15/rotation = Quaternion(0.9957146, -0.032195006, 0.031220285, 0.08087847)
|
||||||
|
bones/16/rotation = Quaternion(0.9367782, -0.012506716, 0.033659726, 0.3480767)
|
||||||
|
bones/17/rotation = Quaternion(-0.860235, -0.08192984, 0.009118035, 0.50319016)
|
||||||
|
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.9729887, -0.014750167, 0.014303936, 0.22993676)
|
||||||
|
bones/21/rotation = Quaternion(0.9366144, -0.00601367, 0.016095275, 0.34994036)
|
||||||
|
bones/22/rotation = Quaternion(-0.7732739, -0.06955802, 0.0075612683, 0.6302)
|
||||||
|
bones/22/scale = Vector3(0.9999997, 0.9999998, 0.9999999)
|
||||||
|
bones/24/rotation = Quaternion(6.628114e-12, 0.99999994, 5.2154085e-08, -0.00035543842)
|
||||||
|
bones/25/position = Vector3(1.0117401, 1.3159828, 3.9725027)
|
||||||
|
bones/25/rotation = Quaternion(-0.27285534, 0.9274522, 0.08017836, 0.2428039)
|
||||||
|
bones/25/scale = Vector3(1.0000001, 12.140265, 1.0000001)
|
||||||
|
bones/26/position = Vector3(-0.9025072, 1.4953425, 4.006362)
|
||||||
|
bones/26/rotation = Quaternion(0.5100001, 0.6936306, 0.15438241, -0.48470873)
|
||||||
|
bones/26/scale = Vector3(0.99999994, 11.348344, 1)
|
||||||
|
bones/27/position = Vector3(0.70899034, 1.0356265, 0.611243)
|
||||||
|
bones/27/rotation = Quaternion(0.7965308, 0.01196337, -0.0119632045, 0.6043613)
|
||||||
|
bones/27/scale = Vector3(0.99999994, 29.328602, 1)
|
||||||
|
bones/28/position = Vector3(-0.9047001, 1.0118608, 0.8510791)
|
||||||
|
bones/28/rotation = Quaternion(0.776662, 0.010376095, -0.010376263, 0.6297467)
|
||||||
|
bones/28/scale = Vector3(1, 26.535925, 1)
|
||||||
|
bones/30/position = Vector3(0.07262612, 0.67294323, -1.1644177)
|
||||||
|
bones/30/rotation = Quaternion(-0.7183768, 0.04937226, -0.02237074, 0.69353926)
|
||||||
|
bones/31/position = Vector3(5.9604645e-08, -1.4631644, 0.23291233)
|
||||||
|
bones/31/rotation = Quaternion(1.1641533e-09, 1.8335415e-09, 2.328307e-10, 1)
|
||||||
|
bones/31/scale = Vector3(0.99999994, 0.9999999, 0.99999994)
|
||||||
|
bones/32/position = Vector3(-0.0331195, -2.362161, -0.036310136)
|
||||||
|
bones/32/rotation = Quaternion(0.20497073, -0.020519394, -0.033738203, 0.9779712)
|
||||||
|
bones/32/scale = Vector3(0.9999999, 0.9999999, 0.99999994)
|
||||||
|
bones/33/position = Vector3(8.195639e-08, -1.4631642, 0.23291235)
|
||||||
|
bones/33/rotation = Quaternion(-8.288772e-08, 3.4342527e-09, -4.1909525e-09, 1)
|
||||||
|
bones/33/scale = Vector3(0.9999998, 0.9999998, 0.99999994)
|
||||||
|
bones/35/position = Vector3(-7.893884e-09, -1.0594703, 5.2079617e-08)
|
||||||
|
bones/35/rotation = Quaternion(0.99971783, 1.2737803e-07, 5.365157e-06, -0.023754692)
|
||||||
|
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.9961935, -0.035078514, -0.0045541152, 0.07967066)
|
||||||
|
bones/39/scale = Vector3(1.0000004, 0.9999996, 0.9999991)
|
||||||
|
bones/40/rotation = Quaternion(0.93738276, 1.2575202e-07, 3.4991626e-08, 0.3483009)
|
||||||
|
bones/40/scale = Vector3(1.0000004, 1.0000001, 1.0000001)
|
||||||
|
bones/41/rotation = Quaternion(-0.860235, -0.081929855, 0.009117997, 0.5031899)
|
||||||
|
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(9.8842406e-08, -0.054423165, -1.786034e-08, 0.998518)
|
||||||
|
bones/48/scale = Vector3(0.9999993, 0.9999996, 0.9999999)
|
||||||
|
bones/50/scale = Vector3(0.99999994, 0.99999994, 0.9999998)
|
||||||
|
bones/51/rotation = Quaternion(-6.30798e-08, 0.026635498, 6.253992e-09, 0.99964523)
|
||||||
|
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.9730908, -0.0186988, -0.0024160824, 0.22964936)
|
||||||
|
bones/53/scale = Vector3(1, 0.99999875, 0.99999946)
|
||||||
|
bones/54/rotation = Quaternion(0.9367526, -1.1281111e-07, -3.6940495e-08, 0.34999225)
|
||||||
|
bones/55/rotation = Quaternion(-0.77327377, -0.06955799, 0.007561261, 0.6302002)
|
||||||
|
bones/55/scale = Vector3(1.0000002, 1, 1.0000002)
|
||||||
|
bones/56/position = Vector3(-5.9126133e-08, 0.5614537, 7.70865e-07)
|
||||||
|
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(5.8764627e-08, -0.042629674, 2.4442278e-08, 0.99909097)
|
||||||
|
bones/62/scale = Vector3(1.0000002, 1.0000002, 1.0000001)
|
||||||
|
bones/64/scale = Vector3(1.0000004, 1.0000004, 1)
|
||||||
|
bones/65/rotation = Quaternion(8.029546e-08, 0.01272784, 4.3857337e-08, 0.999919)
|
||||||
|
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.25299338, 0.020847347, 0.028576687, 0.9668212)
|
||||||
|
bones/76/position = Vector3(1.01587794e-07, -1.5306958e-07, -4.3554866e-07)
|
||||||
|
bones/76/rotation = Quaternion(-0.5206146, -3.634943e-08, 7.6474e-08, 0.8537919)
|
||||||
|
bones/77/rotation = Quaternion(0.9373828, 1.2785249e-07, 3.3241214e-08, 0.3483008)
|
||||||
|
bones/78/position = Vector3(0.8199172, 0.25251257, 0.47214243)
|
||||||
|
bones/78/rotation = Quaternion(0.99571455, -0.032195, 0.031220287, 0.08087897)
|
||||||
|
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.10320552, 0.011111915, 0.015231778, 0.99448144)
|
||||||
|
bones/89/position = Vector3(2.953037e-07, 4.9207458e-08, -4.3015167e-08)
|
||||||
|
bones/89/rotation = Quaternion(-0.5201237, 5.177172e-08, -1.16139375e-07, 0.8540909)
|
||||||
|
bones/90/rotation = Quaternion(0.9367527, -1.0975643e-07, -3.3382268e-08, 0.34999216)
|
||||||
|
bones/91/position = Vector3(-0.8199192, 0.2525128, 0.47213912)
|
||||||
|
bones/91/rotation = Quaternion(0.9729887, -0.0147501845, 0.014303951, 0.22993667)
|
||||||
|
bones/91/scale = Vector3(1.0000002, 0.999999, 0.99999964)
|
||||||
|
bones/96/position = Vector3(-0.016559705, -1.9126627, 0.09830098)
|
||||||
|
bones/96/rotation = Quaternion(0.10305436, -0.010316663, -0.016962789, 0.99447757)
|
||||||
|
bones/96/scale = Vector3(0.9999998, 1, 1)
|
||||||
|
bones/97/rotation = Quaternion(0.997074, -1.2813135e-07, 1.666339e-06, -0.07644201)
|
||||||
|
bones/98/position = Vector3(0.0013585633, -0.23419222, 0.016214281)
|
||||||
|
bones/98/rotation = Quaternion(-0.15130657, -0.005602528, -0.008209973, 0.98843694)
|
||||||
|
bones/98/scale = Vector3(1.0000001, 1.0000006, 1.0000029)
|
||||||
|
bones/101/position = Vector3(-0.016559973, 1.4684486, 0.06451648)
|
||||||
|
bones/101/rotation = Quaternion(0.99944556, 0.016124567, -0.011581497, -0.02673253)
|
||||||
|
bones/101/scale = Vector3(1.0000001, 0.9999993, 0.99999183)
|
||||||
|
bones/102/rotation = Quaternion(0.95545256, -6.924111e-08, 2.2887033e-07, -0.29514462)
|
||||||
|
bones/103/position = Vector3(-0.00705543, 0.6694702, -0.06780842)
|
||||||
|
bones/103/rotation = Quaternion(0.15471841, -0.21109664, -0.09227309, 0.9607217)
|
||||||
|
bones/103/scale = Vector3(1.0000005, 1.0000286, 1.0000087)
|
||||||
|
bones/104/rotation = Quaternion(0.420411, 0.23492327, -0.115186565, 0.86879104)
|
||||||
|
bones/104/scale = Vector3(0.9999993, 0.9999884, 0.9999856)
|
||||||
|
bones/105/rotation = Quaternion(0.91976035, -0.013162326, 0.0148637965, 0.39197809)
|
||||||
|
bones/105/scale = Vector3(1, 1.0000005, 1.0000114)
|
||||||
|
bones/106/position = Vector3(-0.010389687, -0.091948025, 0.0016658108)
|
||||||
|
bones/106/rotation = Quaternion(0.82734275, 0.15726796, -0.14167279, -0.52028793)
|
||||||
|
bones/107/rotation = Quaternion(0.77328545, 0.16233337, -0.107321426, 0.6034564)
|
||||||
|
bones/107/scale = Vector3(0.9999966, 0.99997723, 0.9999995)
|
||||||
|
bones/108/position = Vector3(-1.1340098e-08, 7.923448e-07, 9.0939814e-08)
|
||||||
|
bones/108/rotation = Quaternion(0.42463258, 0.043219328, 0.08968367, -0.89987564)
|
||||||
|
bones/110/rotation = Quaternion(5.443812e-06, 3.6259098e-09, -1.2069942e-06, 1)
|
||||||
|
bones/110/scale = Vector3(0.99999994, 0.99999976, 1.0000001)
|
||||||
|
bones/113/position = Vector3(0.08179821, 0.64012206, 0.7106584)
|
||||||
|
bones/113/rotation = Quaternion(0.7683008, 0.36476624, -0.46689337, -0.24221936)
|
||||||
|
bones/114/position = Vector3(0.08595797, 0.6463289, -0.32087424)
|
||||||
|
bones/114/rotation = Quaternion(0.5615046, -0.7056476, 0.3871702, -0.19202453)
|
||||||
|
bones/114/scale = Vector3(1.0000049, 1.0000027, 1.0000052)
|
||||||
|
bones/115/rotation = Quaternion(-0.037640397, -0.10443457, -0.2681242, 0.9569672)
|
||||||
|
bones/115/scale = Vector3(0.9999974, 1.0000036, 0.99999976)
|
||||||
|
bones/116/rotation = Quaternion(-0.12630361, -0.39785278, -0.057911348, 0.90686655)
|
||||||
|
bones/116/scale = Vector3(1.0000005, 0.9999972, 1.0000013)
|
||||||
|
bones/119/scale = Vector3(1.0000043, 0.9999975, 0.99999744)
|
||||||
|
bones/121/rotation = Quaternion(-2.7027176e-07, -0.20424414, 2.9341666e-07, 0.97892)
|
||||||
|
bones/121/scale = Vector3(1.0000037, 0.99999774, 0.9999977)
|
||||||
|
bones/123/scale = Vector3(1.000003, 0.9999977, 0.99999917)
|
||||||
|
bones/124/rotation = Quaternion(1.2542905e-06, -0.033494003, 5.941339e-07, 0.999439)
|
||||||
|
bones/124/scale = Vector3(1.0000037, 0.9999978, 0.99999875)
|
||||||
|
bones/126/rotation = Quaternion(-0.51635414, -0.1681693, 0.6340872, 0.5504825)
|
||||||
|
bones/126/scale = Vector3(1.0000056, 1.0000031, 1.0000038)
|
||||||
|
bones/127/rotation = Quaternion(-0.24332374, 0.12663902, 0.6612198, 0.6982439)
|
||||||
|
bones/127/scale = Vector3(1.0000057, 1.0000007, 1.0000064)
|
||||||
|
bones/128/position = Vector3(3.0230987e-07, -5.5011895e-07, -6.94335e-08)
|
||||||
|
bones/128/rotation = Quaternion(0.17027588, 0.93388194, -0.2967173, 0.104064964)
|
||||||
|
bones/129/rotation = Quaternion(-0.037640374, -0.10443452, -0.26812422, 0.9569671)
|
||||||
|
bones/131/rotation = Quaternion(-0.54023695, -0.3639527, 0.10910668, 0.7508517)
|
||||||
|
bones/132/rotation = Quaternion(-0.13163939, 0.9186296, -0.34996635, -0.12772812)
|
||||||
|
bones/133/rotation = Quaternion(-0.012778445, 0.011854936, 0.00015161023, 0.99984807)
|
||||||
|
bones/133/scale = Vector3(1.0422997, 1.0422999, 1.0422992)
|
||||||
|
bones/134/rotation = Quaternion(0.02152282, -2.7759576e-08, -1.5735115e-07, 0.99976844)
|
||||||
|
bones/134/scale = Vector3(0.98826313, 0.9882641, 0.9882627)
|
||||||
|
bones/135/position = Vector3(0.08595812, 0.646329, -0.3208742)
|
||||||
|
bones/135/rotation = Quaternion(0.5460276, -0.7125794, 0.40870702, -0.16444758)
|
||||||
|
bones/135/scale = Vector3(1.000007, 1.0000004, 1.0000051)
|
||||||
|
bones/137/position = Vector3(-0.09762837, 0.6401221, 0.7106583)
|
||||||
|
bones/137/rotation = Quaternion(0.7020965, -0.35357338, 0.5945473, -0.16899663)
|
||||||
|
bones/138/position = Vector3(-0.08595776, 0.646329, -0.3208746)
|
||||||
|
bones/138/rotation = Quaternion(0.5492876, 0.7627154, -0.30113, -0.16083841)
|
||||||
|
bones/138/scale = Vector3(1.0000051, 1.0000018, 1.0000046)
|
||||||
|
bones/139/rotation = Quaternion(-0.058682628, 0.11130926, 0.28603986, 0.94991994)
|
||||||
|
bones/139/scale = Vector3(0.9999983, 1.0000024, 0.9999992)
|
||||||
|
bones/140/rotation = Quaternion(-0.034969915, 0.25686622, -0.0008231461, 0.96581376)
|
||||||
|
bones/140/scale = Vector3(1.0000031, 0.9999977, 0.9999988)
|
||||||
|
bones/143/scale = Vector3(1.000005, 0.99999815, 0.9999967)
|
||||||
|
bones/145/rotation = Quaternion(-4.0431777e-07, 0.1295653, -5.1404834e-07, 0.99157095)
|
||||||
|
bones/145/scale = Vector3(1.0000045, 0.99999803, 0.9999968)
|
||||||
|
bones/147/scale = Vector3(1.0000035, 0.99999845, 0.9999981)
|
||||||
|
bones/148/rotation = Quaternion(1.9343124e-06, 0.025161995, -3.222267e-07, 0.9996834)
|
||||||
|
bones/148/scale = Vector3(1.000004, 0.9999991, 0.999998)
|
||||||
|
bones/150/rotation = Quaternion(-0.5163542, 0.16816999, -0.6340877, 0.5504816)
|
||||||
|
bones/150/scale = Vector3(1.0000052, 1.0000039, 1.0000025)
|
||||||
|
bones/151/rotation = Quaternion(-0.24332343, -0.1266389, -0.6612192, 0.6982446)
|
||||||
|
bones/151/scale = Vector3(1.0000049, 1.0000005, 1.0000063)
|
||||||
|
bones/152/position = Vector3(-2.0525843e-07, -4.4378166e-07, 2.2242949e-07)
|
||||||
|
bones/152/rotation = Quaternion(-0.1980554, 0.9486651, -0.20058647, -0.14343536)
|
||||||
|
bones/153/rotation = Quaternion(-0.058682676, 0.11130926, 0.2860399, 0.94991994)
|
||||||
|
bones/155/rotation = Quaternion(-0.48170745, 0.21343125, -0.09362694, 0.84477156)
|
||||||
|
bones/155/scale = Vector3(0.99999994, 1, 0.9999998)
|
||||||
|
bones/156/rotation = Quaternion(0.2123156, 0.9450362, -0.15822437, 0.19181721)
|
||||||
|
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.085957706, 0.6463291, -0.32087478)
|
||||||
|
bones/159/rotation = Quaternion(0.5294669, 0.7712517, -0.33475488, -0.1130262)
|
||||||
|
bones/159/scale = Vector3(1.0000075, 1.0000001, 1.0000042)
|
||||||
|
bones/161/position = Vector3(0.08179821, 0.64012206, 0.7106584)
|
||||||
|
bones/161/rotation = Quaternion(0.7683008, 0.36476624, -0.46689337, -0.24221936)
|
||||||
|
bones/162/position = Vector3(-0.09762837, 0.6401221, 0.7106583)
|
||||||
|
bones/162/rotation = Quaternion(0.7020965, -0.35357338, 0.5945473, -0.16899663)
|
||||||
|
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.016703974, -2.2814677, 2.0323193)
|
||||||
|
bones/167/position = Vector3(0.7698192, 2.760036, -1.7026894)
|
||||||
|
bones/167/rotation = Quaternion(-0.93479383, -0.013274327, 0.31412983, 0.16524744)
|
||||||
|
bones/167/scale = Vector3(0.9999947, 0.9999997, 1.0000055)
|
||||||
|
bones/168/position = Vector3(0.18381567, -0.9622623, 0.9894084)
|
||||||
|
bones/168/rotation = Quaternion(0.93622446, 1.3019375e-07, -0.34127164, -0.08377019)
|
||||||
|
bones/168/scale = Vector3(1.0000024, 1.0000011, 1.0000095)
|
||||||
|
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.381392, -2.057497, 2.0762825)
|
||||||
|
bones/172/position = Vector3(-0.9278099, 2.7545004, -1.5181485)
|
||||||
|
bones/172/rotation = Quaternion(-0.91823035, 0.06278634, -0.38804358, 0.04830265)
|
||||||
|
bones/172/scale = Vector3(0.99999493, 0.9999995, 1.0000055)
|
||||||
|
bones/173/position = Vector3(0.18381546, -0.96226203, 0.9894083)
|
||||||
|
bones/173/rotation = Quaternion(0.9362244, 3.755922e-07, 0.3412715, -0.0837717)
|
||||||
|
bones/173/scale = Vector3(1.0000001, 1.0000001, 0.9999949)
|
||||||
|
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.78680634, 2.8457582, -0.41063747)
|
||||||
|
bones/186/rotation = Quaternion(-0.9983755, 0.019092962, -0.050729975, -0.017562928)
|
||||||
|
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(7.903883e-08, 1.4901151e-07, 8.8932055e-08)
|
||||||
|
bones/199/rotation = Quaternion(0.00034800146, -0.20349097, 0.9790768, -7.2328476e-05)
|
||||||
|
bones/200/position = Vector3(-0.84339374, 2.905353, -0.57784474)
|
||||||
|
bones/200/rotation = Quaternion(-0.9983755, 0.019092962, -0.050729975, -0.017562928)
|
||||||
|
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)
|
||||||
|
|
||||||
|
[node name="test_cube" type="Node3D" parent="." unique_id=646988893]
|
||||||
|
script = ExtResource("3_rog1v")
|
||||||
|
|
||||||
|
[node name="Bear_FX" parent="test_cube" unique_id=1183391245 instance=ExtResource("4_rog1v")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.1459732, 0, -1.528423)
|
||||||
|
|
||||||
|
[node name="Bear_fx_claw_attack_R" parent="test_cube/Bear_FX" index="1" unique_id=941189652]
|
||||||
|
transform = Transform3D(0.26165774, 0.06970292, -0.23443498, -0.046572562, 0.18028688, 0.0016228362, 0.22878301, 0.056650188, 0.2721929, -0.40204993, 0.29855162, 0.917461)
|
||||||
|
|
||||||
|
[editable path="bear_model"]
|
||||||
|
[editable path="test_cube/Bear_FX"]
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
"""
|
||||||
|
Blender 5.1 script: create walk + idle animations for matador_v02.
|
||||||
|
Run: blender --background matador_v02.blend --python create_matador_anims.py
|
||||||
|
"""
|
||||||
|
import bpy, math, os
|
||||||
|
|
||||||
|
|
||||||
|
# ── setup ──────────────────────────────────────────────────────────────────────
|
||||||
|
arm_obj = next(o for o in bpy.data.objects if o.type == 'ARMATURE')
|
||||||
|
bpy.context.view_layer.objects.active = arm_obj
|
||||||
|
bpy.ops.object.mode_set(mode='POSE')
|
||||||
|
|
||||||
|
if arm_obj.animation_data is None:
|
||||||
|
arm_obj.animation_data_create()
|
||||||
|
|
||||||
|
pb = arm_obj.pose.bones
|
||||||
|
|
||||||
|
# Ensure all animated bones use XYZ Euler
|
||||||
|
for bname in ['leg_L', 'leg_R', 'shin_L', 'shin_R',
|
||||||
|
'arm_L', 'arm_R', 'forearm_L', 'forearm_R',
|
||||||
|
'collarbone_L', 'collarbone_R']:
|
||||||
|
pb[bname].rotation_mode = 'XYZ'
|
||||||
|
|
||||||
|
CYCLE = 30 # frames (1 s at 30 fps)
|
||||||
|
LEG_SWING = 25 # degrees
|
||||||
|
KNEE_BEND = 30
|
||||||
|
ARM_SWING = 15
|
||||||
|
ARM_DOWN = 55 # lower arms from T-pose around bone-local Y
|
||||||
|
ELBOW_BEND = 25
|
||||||
|
|
||||||
|
|
||||||
|
# ── WALK action ────────────────────────────────────────────────────────────────
|
||||||
|
# Remove old actions if they exist
|
||||||
|
for old_name in ['walk', 'idle']:
|
||||||
|
if old_name in bpy.data.actions:
|
||||||
|
bpy.data.actions.remove(bpy.data.actions[old_name])
|
||||||
|
|
||||||
|
walk = bpy.data.actions.new(name='walk')
|
||||||
|
walk.use_fake_user = True
|
||||||
|
walk.use_cyclic = True
|
||||||
|
arm_obj.animation_data.action = walk
|
||||||
|
|
||||||
|
# Clear all pose bone transforms first
|
||||||
|
bpy.ops.pose.select_all(action='SELECT')
|
||||||
|
bpy.ops.pose.rot_clear()
|
||||||
|
|
||||||
|
arm_down_l = math.radians(ARM_DOWN)
|
||||||
|
arm_down_r = math.radians(-ARM_DOWN)
|
||||||
|
|
||||||
|
for f in range(0, CYCLE + 1, 2):
|
||||||
|
t = (f / CYCLE) * math.tau
|
||||||
|
|
||||||
|
# Legs – swing forward/back on bone-local X
|
||||||
|
pb['leg_L'].rotation_euler = (math.sin(t) * math.radians(LEG_SWING), 0, 0)
|
||||||
|
pb['leg_L'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
|
||||||
|
pb['leg_R'].rotation_euler = (math.sin(t + math.pi) * math.radians(LEG_SWING), 0, 0)
|
||||||
|
pb['leg_R'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
|
||||||
|
# Shins – only bend backward when leg is back
|
||||||
|
val_l = max(0.0, -math.sin(t)) * math.radians(KNEE_BEND)
|
||||||
|
val_r = max(0.0, -math.sin(t + math.pi)) * math.radians(KNEE_BEND)
|
||||||
|
pb['shin_L'].rotation_euler = (val_l, 0, 0)
|
||||||
|
pb['shin_L'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
pb['shin_R'].rotation_euler = (val_r, 0, 0)
|
||||||
|
pb['shin_R'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
|
||||||
|
# Arms – lower from T-pose (Y) + swing (X, opposite phase to legs)
|
||||||
|
swing_l = math.sin(t + math.pi) * math.radians(ARM_SWING)
|
||||||
|
swing_r = math.sin(t) * math.radians(ARM_SWING)
|
||||||
|
pb['arm_L'].rotation_euler = (swing_l, arm_down_l, 0)
|
||||||
|
pb['arm_L'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
pb['arm_R'].rotation_euler = (swing_r, arm_down_r, 0)
|
||||||
|
pb['arm_R'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
|
||||||
|
# Forearms – constant slight bend
|
||||||
|
pb['forearm_L'].rotation_euler = (math.radians(ELBOW_BEND), 0, 0)
|
||||||
|
pb['forearm_L'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
pb['forearm_R'].rotation_euler = (math.radians(ELBOW_BEND), 0, 0)
|
||||||
|
pb['forearm_R'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
|
||||||
|
# Collarbones – identity
|
||||||
|
pb['collarbone_L'].rotation_euler = (0, 0, 0)
|
||||||
|
pb['collarbone_L'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
pb['collarbone_R'].rotation_euler = (0, 0, 0)
|
||||||
|
pb['collarbone_R'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
|
||||||
|
print("Created 'walk' action")
|
||||||
|
|
||||||
|
|
||||||
|
# ── IDLE action ────────────────────────────────────────────────────────────────
|
||||||
|
idle = bpy.data.actions.new(name='idle')
|
||||||
|
idle.use_fake_user = True
|
||||||
|
arm_obj.animation_data.action = idle
|
||||||
|
|
||||||
|
bpy.ops.pose.select_all(action='SELECT')
|
||||||
|
bpy.ops.pose.rot_clear()
|
||||||
|
|
||||||
|
# Arms lowered, everything else at rest – 2 frames for a valid action
|
||||||
|
for f in [0, 1]:
|
||||||
|
pb['arm_L'].rotation_euler = (0, arm_down_l, 0)
|
||||||
|
pb['arm_L'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
pb['arm_R'].rotation_euler = (0, arm_down_r, 0)
|
||||||
|
pb['arm_R'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
pb['forearm_L'].rotation_euler = (math.radians(ELBOW_BEND), 0, 0)
|
||||||
|
pb['forearm_L'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
pb['forearm_R'].rotation_euler = (math.radians(ELBOW_BEND), 0, 0)
|
||||||
|
pb['forearm_R'].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
for bname in ['collarbone_L', 'collarbone_R', 'leg_L', 'leg_R', 'shin_L', 'shin_R']:
|
||||||
|
pb[bname].rotation_euler = (0, 0, 0)
|
||||||
|
pb[bname].keyframe_insert(data_path='rotation_euler', frame=f)
|
||||||
|
|
||||||
|
print("Created 'idle' action")
|
||||||
|
|
||||||
|
|
||||||
|
# ── NLA tracks for export ─────────────────────────────────────────────────────
|
||||||
|
bpy.ops.object.mode_set(mode='OBJECT')
|
||||||
|
|
||||||
|
# Clear existing NLA tracks
|
||||||
|
if arm_obj.animation_data.nla_tracks:
|
||||||
|
for t in list(arm_obj.animation_data.nla_tracks):
|
||||||
|
arm_obj.animation_data.nla_tracks.remove(t)
|
||||||
|
|
||||||
|
tw = arm_obj.animation_data.nla_tracks.new()
|
||||||
|
tw.name = 'walk'
|
||||||
|
sw = tw.strips.new('walk', 0, walk)
|
||||||
|
|
||||||
|
ti = arm_obj.animation_data.nla_tracks.new()
|
||||||
|
ti.name = 'idle'
|
||||||
|
si = ti.strips.new('idle', 0, idle)
|
||||||
|
|
||||||
|
# ── export FBX ─────────────────────────────────────────────────────────────────
|
||||||
|
fbx_path = os.path.join(os.path.dirname(bpy.data.filepath), 'matador_v02.fbx')
|
||||||
|
bpy.ops.export_scene.fbx(
|
||||||
|
filepath=fbx_path,
|
||||||
|
use_selection=False,
|
||||||
|
bake_anim=True,
|
||||||
|
bake_anim_use_all_actions=True,
|
||||||
|
bake_anim_use_nla_strips=False,
|
||||||
|
bake_anim_force_startend_keying=True,
|
||||||
|
bake_anim_step=1.0,
|
||||||
|
bake_anim_simplify_factor=0.0,
|
||||||
|
add_leaf_bones=False,
|
||||||
|
primary_bone_axis='Y',
|
||||||
|
secondary_bone_axis='X',
|
||||||
|
apply_scale_options='FBX_SCALE_ALL',
|
||||||
|
)
|
||||||
|
print('Exported FBX to:', fbx_path)
|
||||||
|
|
||||||
|
bpy.ops.wm.save_as_mainfile(filepath=bpy.data.filepath)
|
||||||
|
print('Saved .blend')
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://ymaeifakqovf
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
"""
|
||||||
|
Blender 5.1 script: render preview frames of matador animations to PNG.
|
||||||
|
Run: blender --background matador_v02.blend --python render_anim_preview.py
|
||||||
|
|
||||||
|
Outputs to Blender/preview/ directory:
|
||||||
|
walk_frame_00.png .. walk_frame_09.png
|
||||||
|
idle_frame_00.png
|
||||||
|
|
||||||
|
Use this to visually verify bone orientations BEFORE exporting to Godot.
|
||||||
|
"""
|
||||||
|
import bpy
|
||||||
|
import os
|
||||||
|
import math
|
||||||
|
|
||||||
|
# ── Configuration ─────────────────────────────────────────────────────────────
|
||||||
|
PREVIEW_DIR = os.path.join(os.path.dirname(bpy.data.filepath), "preview")
|
||||||
|
RENDER_RES_X = 512
|
||||||
|
RENDER_RES_Y = 512
|
||||||
|
WALK_FRAMES = 10 # number of evenly-spaced frames to render from walk cycle
|
||||||
|
CAMERA_DISTANCE = 5.0
|
||||||
|
CAMERA_HEIGHT = 1.0
|
||||||
|
CAMERA_ANGLES = [0, 90] # degrees — front and side views
|
||||||
|
|
||||||
|
os.makedirs(PREVIEW_DIR, exist_ok=True)
|
||||||
|
|
||||||
|
# ── Find armature ─────────────────────────────────────────────────────────────
|
||||||
|
arm_obj = next((o for o in bpy.data.objects if o.type == 'ARMATURE'), None)
|
||||||
|
if arm_obj is None:
|
||||||
|
raise RuntimeError("No armature found in scene")
|
||||||
|
|
||||||
|
# ── Setup render settings ─────────────────────────────────────────────────────
|
||||||
|
scene = bpy.context.scene
|
||||||
|
scene.render.resolution_x = RENDER_RES_X
|
||||||
|
scene.render.resolution_y = RENDER_RES_Y
|
||||||
|
scene.render.resolution_percentage = 100
|
||||||
|
scene.render.film_transparent = True
|
||||||
|
scene.render.image_settings.file_format = 'PNG'
|
||||||
|
scene.render.image_settings.color_mode = 'RGBA'
|
||||||
|
scene.render.engine = 'BLENDER_EEVEE'
|
||||||
|
|
||||||
|
# ── Create or reuse camera ────────────────────────────────────────────────────
|
||||||
|
cam_data = bpy.data.cameras.get("PreviewCam") or bpy.data.cameras.new("PreviewCam")
|
||||||
|
cam_data.lens = 50
|
||||||
|
cam_obj = bpy.data.objects.get("PreviewCamObj")
|
||||||
|
if cam_obj is None:
|
||||||
|
cam_obj = bpy.data.objects.new("PreviewCamObj", cam_data)
|
||||||
|
scene.collection.objects.link(cam_obj)
|
||||||
|
scene.camera = cam_obj
|
||||||
|
|
||||||
|
# ── Create or reuse key light ─────────────────────────────────────────────────
|
||||||
|
light_data = bpy.data.lights.get("PreviewLight") or bpy.data.lights.new("PreviewLight", type='SUN')
|
||||||
|
light_data.energy = 3.0
|
||||||
|
light_obj = bpy.data.objects.get("PreviewLightObj")
|
||||||
|
if light_obj is None:
|
||||||
|
light_obj = bpy.data.objects.new("PreviewLightObj", light_data)
|
||||||
|
scene.collection.objects.link(light_obj)
|
||||||
|
light_obj.rotation_euler = (math.radians(45), math.radians(30), 0)
|
||||||
|
|
||||||
|
# ── Create or reuse fill light ────────────────────────────────────────────────
|
||||||
|
fill_data = bpy.data.lights.get("PreviewFill") or bpy.data.lights.new("PreviewFill", type='SUN')
|
||||||
|
fill_data.energy = 1.0
|
||||||
|
fill_obj = bpy.data.objects.get("PreviewFillObj")
|
||||||
|
if fill_obj is None:
|
||||||
|
fill_obj = bpy.data.objects.new("PreviewFillObj", fill_data)
|
||||||
|
scene.collection.objects.link(fill_obj)
|
||||||
|
fill_obj.rotation_euler = (math.radians(60), math.radians(-45), 0)
|
||||||
|
|
||||||
|
# ── Ensure armature is visible ────────────────────────────────────────────────
|
||||||
|
arm_obj.hide_render = False
|
||||||
|
arm_obj.hide_viewport = False
|
||||||
|
for child in arm_obj.children:
|
||||||
|
child.hide_render = False
|
||||||
|
child.hide_viewport = False
|
||||||
|
|
||||||
|
|
||||||
|
def position_camera(angle_deg: float) -> None:
|
||||||
|
"""Place camera at given horizontal angle around the armature center."""
|
||||||
|
rad = math.radians(angle_deg)
|
||||||
|
cam_obj.location = (
|
||||||
|
math.sin(rad) * CAMERA_DISTANCE,
|
||||||
|
CAMERA_HEIGHT,
|
||||||
|
math.cos(rad) * CAMERA_DISTANCE,
|
||||||
|
)
|
||||||
|
# Point camera at armature center (roughly hip height)
|
||||||
|
target = arm_obj.location.copy()
|
||||||
|
target.y = 0.9
|
||||||
|
direction = target - cam_obj.location
|
||||||
|
rot_quat = direction.to_track_quat('-Z', 'Y')
|
||||||
|
cam_obj.rotation_euler = rot_quat.to_euler()
|
||||||
|
|
||||||
|
|
||||||
|
def render_action(action_name: str, frame_count: int) -> None:
|
||||||
|
"""Render frame_count evenly-spaced frames of the named action."""
|
||||||
|
action = bpy.data.actions.get(action_name)
|
||||||
|
if action is None:
|
||||||
|
print(f"WARNING: Action '{action_name}' not found, skipping")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Assign action
|
||||||
|
if arm_obj.animation_data is None:
|
||||||
|
arm_obj.animation_data_create()
|
||||||
|
arm_obj.animation_data.action = action
|
||||||
|
|
||||||
|
frame_start = int(action.frame_range[0])
|
||||||
|
frame_end = int(action.frame_range[1])
|
||||||
|
total_frames = max(frame_end - frame_start, 1)
|
||||||
|
|
||||||
|
for angle_deg in CAMERA_ANGLES:
|
||||||
|
position_camera(angle_deg)
|
||||||
|
angle_label = f"{angle_deg:03d}deg"
|
||||||
|
|
||||||
|
for i in range(frame_count):
|
||||||
|
t = i / max(frame_count - 1, 1) if frame_count > 1 else 0
|
||||||
|
frame = frame_start + int(t * total_frames)
|
||||||
|
scene.frame_set(frame)
|
||||||
|
|
||||||
|
filename = f"{action_name}_{angle_label}_frame_{i:02d}.png"
|
||||||
|
filepath = os.path.join(PREVIEW_DIR, filename)
|
||||||
|
scene.render.filepath = filepath
|
||||||
|
bpy.ops.render.render(write_still=True)
|
||||||
|
print(f" Rendered: {filename}")
|
||||||
|
|
||||||
|
|
||||||
|
# ── Render all animations ─────────────────────────────────────────────────────
|
||||||
|
print("=" * 60)
|
||||||
|
print("RENDERING ANIMATION PREVIEWS")
|
||||||
|
print("=" * 60)
|
||||||
|
|
||||||
|
render_action("walk", WALK_FRAMES)
|
||||||
|
render_action("idle", 1)
|
||||||
|
|
||||||
|
# ── Cleanup preview objects (optional — keep them for re-runs) ────────────────
|
||||||
|
print("=" * 60)
|
||||||
|
print(f"Preview images saved to: {PREVIEW_DIR}")
|
||||||
|
print(f"Total actions rendered: {len([a for a in ['walk', 'idle'] if bpy.data.actions.get(a)])}")
|
||||||
|
print("=" * 60)
|
||||||
@@ -0,0 +1,154 @@
|
|||||||
|
# Bullosseum — CLAUDE.md
|
||||||
|
|
||||||
|
## About this project
|
||||||
|
|
||||||
|
A 3D arena game built in Godot 4.7 (Forward Plus renderer, Jolt Physics) where the player controls a bull. Currently features third-person camera, bull movement with charge mechanics, and a placeholder arena.
|
||||||
|
|
||||||
|
## AI role
|
||||||
|
|
||||||
|
I am a **Godot 4.6+ expert**. I follow current best practices for GDScript, scene architecture, physics, and performance. If a question suggests a suboptimal approach — wrong node type, unnecessary complexity, a pattern that fights the engine — I will say so and explain the better alternative before implementing anything.
|
||||||
|
|
||||||
|
## Project structure
|
||||||
|
|
||||||
|
| Path | Purpose |
|
||||||
|
|---|---|
|
||||||
|
| `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) |
|
||||||
|
| `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. Joins `&"matador"` so bull abilities already hit it. Tuning under the `Bear` DP section |
|
||||||
|
| `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 |
|
||||||
|
| `Blender/create_matador_anims.py` | Creates walk + idle animations and exports FBX |
|
||||||
|
| `Blender/render_anim_preview.py` | Renders animation preview PNGs for visual verification |
|
||||||
|
| `Blender/preview/` | Output directory for animation preview images |
|
||||||
|
| `tests/` | Headless test scripts (screenshot capture, logic validation) |
|
||||||
|
| `addons/rider-plugin/` | JetBrains Rider IDE integration |
|
||||||
|
|
||||||
|
## Tech choices
|
||||||
|
|
||||||
|
- **Physics:** Jolt Physics (not the default Godot Physics)
|
||||||
|
- **Renderer:** Forward Plus
|
||||||
|
- **Input map:** WASD + arrow keys, Shift = charge, Space = jump, scroll = zoom, middle-click = toggle mouse capture
|
||||||
|
- **IDE:** JetBrains Rider via the rider-plugin addon
|
||||||
|
|
||||||
|
## GDScript conventions
|
||||||
|
|
||||||
|
- Typed GDScript everywhere (`var x: float`, return types on functions)
|
||||||
|
- `@onready` for node references; never `get_node()` strings when avoidable
|
||||||
|
- Constants in `SCREAMING_SNAKE_CASE`, variables in `snake_case`
|
||||||
|
- One script per scene root — keep scripts focused
|
||||||
|
- Signal names in `snake_case`; connect via `signal.connect()` not the legacy string form
|
||||||
|
- Prefer `_physics_process` for physics/movement, `_process` for visuals/camera, `_unhandled_input` for input that shouldn't bubble
|
||||||
|
- No comments that restate what the code already says; only comment non-obvious constraints or workarounds
|
||||||
|
|
||||||
|
## Best practices to enforce
|
||||||
|
|
||||||
|
- Use `CharacterBody3D` for player-controlled characters, not `RigidBody3D` (unless the design specifically needs physics simulation)
|
||||||
|
- Use `SpringArm3D` for third-person cameras to get free collision avoidance
|
||||||
|
- Prefer `move_and_slide()` with `velocity` over manual collision queries
|
||||||
|
- Export variables (`@export`) for any value a designer might tune; keep magic numbers out of logic
|
||||||
|
- Scene composition over inheritance — build behaviour from small focused scenes
|
||||||
|
- Use `autoload` (singletons) sparingly: only for truly global state (e.g. GameManager, AudioBus); not as a shortcut for passing data
|
||||||
|
- Keep `_physics_process` deterministic and frame-rate independent (always multiply by `delta`)
|
||||||
|
- Prefer signals over direct node references for decoupling
|
||||||
|
|
||||||
|
## Animation & bone conventions
|
||||||
|
|
||||||
|
### Blender rig (matador_v02)
|
||||||
|
- **Armature bones:** `matador` (root) → `COG` → `chest` → `head`, `collarbone_L/R` → `arm_L/R` → `forearm_L/R` → `hand_L/R`, `leg_L/R` → `shin_L/R` → `foot_L/R`
|
||||||
|
- **Rotation mode:** All animated bones use **XYZ Euler** (set in `create_matador_anims.py`)
|
||||||
|
- **Bone-local axes:** Swing (forward/back) is on **local X**. Arm lowering from T-pose is on **local Y** (positive = left arm down, negative = right arm down). Knee bend is **positive X** (shins only bend backward).
|
||||||
|
- **Walk cycle:** 30 frames at 30 fps = 1 second loop. Legs swing ±25° X, knees bend 0–30° X (only when leg is back), arms swing ±15° X opposite phase to legs, arms lowered 55° Y from T-pose, elbows constant 25° X bend.
|
||||||
|
- **Idle pose:** Arms lowered 55° Y, elbows 25° X, everything else at rest.
|
||||||
|
|
||||||
|
### FBX export settings
|
||||||
|
- `primary_bone_axis = 'Y'`, `secondary_bone_axis = 'X'`
|
||||||
|
- `apply_scale_options = 'FBX_SCALE_ALL'`
|
||||||
|
- `add_leaf_bones = False`
|
||||||
|
- `bake_anim_use_all_actions = True`, `bake_anim_use_nla_strips = False`
|
||||||
|
|
||||||
|
### Godot animation names
|
||||||
|
After FBX import, animations appear as `Armature|walk` and `Armature|idle` in AnimationPlayer.
|
||||||
|
|
||||||
|
### Verification workflow
|
||||||
|
1. Edit bones/animations in Blender (`create_matador_anims.py`)
|
||||||
|
2. Run render preview: `blender --background Blender/matador_v02.blend --python Blender/render_anim_preview.py`
|
||||||
|
3. Inspect PNGs in `Blender/preview/` — check bone orientations **before** exporting to Godot
|
||||||
|
4. Export FBX (done automatically by `create_matador_anims.py`)
|
||||||
|
5. Re-import in Godot and test in-game
|
||||||
|
|
||||||
|
## Running tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# All tests (lint + logic + gameplay assertions):
|
||||||
|
bash run_tests.sh
|
||||||
|
|
||||||
|
# Individual tests:
|
||||||
|
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
|
||||||
|
|
||||||
|
# Gameplay test with real rendering (inspect frame strip visually):
|
||||||
|
godot --script tests/gameplay_test.gd # opens a window, saves real screenshots
|
||||||
|
# Output: tests/output/gameplay/motion_00..04.png, ragdoll_trigger.png, ragdoll_result.png
|
||||||
|
|
||||||
|
# Difficulty simulation (balance tool, ~2 min):
|
||||||
|
godot --headless --script tests/difficulty_sim.gd # drives a bot bull vs one matador
|
||||||
|
```
|
||||||
|
|
||||||
|
### Difficulty simulation (`tests/difficulty_sim.gd`)
|
||||||
|
A balance tool, not a pass/fail test. It drives a kinematic "bot bull" against one
|
||||||
|
real matador across behaviour profiles (CHARGER / KITER / PASSIVE) and reports the
|
||||||
|
matador's win rate (how often it gores the bull). Use it to tune matador difficulty
|
||||||
|
from data. The bot bull has NO abilities (it only kills by ramming), so it can't use
|
||||||
|
roll/slam/kick — real skilled play beats the matador more than these numbers imply;
|
||||||
|
read the rates as "how well the matador threatens each movement pattern." A rough
|
||||||
|
target is CHARGER high (blind charging is punished), KITER moderate (throws are a
|
||||||
|
dodgeable threat), PASSIVE high (standing still dies). Note: as a `--script` entry it
|
||||||
|
reads the `DP` autoload via `/root/DP`, not the global identifier.
|
||||||
|
|
||||||
|
### What the gameplay test catches
|
||||||
|
| Check | What it detects |
|
||||||
|
|---|---|
|
||||||
|
| Tail Verlet chain spread | Tail bunching — consecutive nodes collapsed to same position |
|
||||||
|
| Ragdoll bone positions finite + within 15 m | Matador limbs exploding after ragdoll impulse |
|
||||||
|
| Ragdoll Y position > −10 | Bones falling through the floor |
|
||||||
|
| Frame strip (visual, manual) | Leg IK quality, animation glitches, anything that looks wrong in motion |
|
||||||
|
|
||||||
|
Headless screenshots will be blank (Forward Plus has no display). Run without `--headless` to get real frame strips.
|
||||||
|
|
||||||
|
### What the performance test catches
|
||||||
|
Loads the full scene with `STRESS_MATADORS` (20) matadors, samples per-frame time
|
||||||
|
during normal play and during a mass-ragdoll spike, and fails if the average
|
||||||
|
exceeds 16 ms or any single frame exceeds 100 ms. Budgets are generous regression
|
||||||
|
guards (not a target frame rate); the measured avg/peak/fps print every run so a
|
||||||
|
gradual creep shows up before it trips the ceiling.
|
||||||
|
|
||||||
|
## Godot 4.x specifics
|
||||||
|
|
||||||
|
- `wrapf` / `wrap` instead of manual modulo for angles
|
||||||
|
- `lerp_angle` for smooth rotation interpolation (handles wrap-around correctly)
|
||||||
|
- `move_toward` for speed ramps without overshooting
|
||||||
|
- `PackedStringArray`, `PackedVector3Array`, etc. for performance-sensitive arrays
|
||||||
|
- `@tool` scripts for editor helpers only — don't use in gameplay scripts
|
||||||
|
- Resource (`extends Resource`) for shared data/config; no plain `Dictionary` for structured data
|
||||||
|
- `StringName` (`&"action_name"`) for input action lookups in hot paths
|
||||||
@@ -0,0 +1,205 @@
|
|||||||
|
# Bullosseum — Game Design Document
|
||||||
|
|
||||||
|
> Living document. `?` marks open questions.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Elevator Pitch
|
||||||
|
|
||||||
|
You are the bull. Waves of cowboys, matadors, and gladiators pour into your arena — each with their own tricks to dodge or counter your charge. Survive, wreck things, pick upgrades. Every run is different. Goofy low-poly mayhem.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Art Direction
|
||||||
|
|
||||||
|
- **Style:** Low-poly, chunky geometry, flat or minimal shading
|
||||||
|
- **Tone:** Goofy and physical — think *Gang Beasts* meets *Vampire Survivors* energy
|
||||||
|
- **Camera:** Third-person, spring-arm collision avoidance
|
||||||
|
- **Palette:** Warm sand/terracotta arena, vivid faction colours (red/gold for matadors, brown/blue for cowboys, iron/purple for gladiators)
|
||||||
|
- **Particles:** Stylised cartoon puffs — dust, impact sparks, ragdoll stars
|
||||||
|
- **Audio direction:** ?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Confirmed Mechanics
|
||||||
|
|
||||||
|
- Third-person bull locomotion with momentum (walk, charge)
|
||||||
|
- Wide committed turning arc during charge — charges feel like commitments
|
||||||
|
- Visual turn lag (body leans)
|
||||||
|
- Spring-arm camera with zoom
|
||||||
|
- Sand dust particles at hooves (walk = small, charge = big)
|
||||||
|
- Jolt Physics backend
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Run Structure (Vampire Survivors-inspired)
|
||||||
|
|
||||||
|
```
|
||||||
|
Start run → Wave spawns → Kill enemies → Wave cleared → Pick upgrade → Next wave → ... → Die or achieve target
|
||||||
|
```
|
||||||
|
|
||||||
|
- **No hard time limit per wave** — pressure comes from enemy density escalating
|
||||||
|
- **Upgrade picks between waves** — choose 1 of 3 options (stat, ability, passive synergy)
|
||||||
|
- **Fail state is soft** — getting overwhelmed is a death spiral, not a timeout. You stop being able to charge effectively and get cornered
|
||||||
|
- **Run length:** ? (15–25 minutes for a full run feels right for web)
|
||||||
|
- **Meta progression:** ? Unlock new starting abilities or bull cosmetics across runs
|
||||||
|
|
||||||
|
### Wave Escalation — Faction Ramp
|
||||||
|
|
||||||
|
Factions are introduced one at a time so each mechanic gets space to teach itself before mixing begins.
|
||||||
|
|
||||||
|
| Waves | Faction makeup | Boss |
|
||||||
|
|---|---|---|
|
||||||
|
| 1–3 | Matadors only | — |
|
||||||
|
| 4 | Matadors only | El Presidente |
|
||||||
|
| 5–7 | Matadors + Cowboys introduced | — |
|
||||||
|
| 8 | Mixed (matadors + cowboys) | Sheriff |
|
||||||
|
| 9–11 | All three factions introduced | — |
|
||||||
|
| 12 | Mixed (all three) | Centurion |
|
||||||
|
| 13+ | Full chaos — all factions, escalating density | Repeat bosses + ? final boss |
|
||||||
|
|
||||||
|
- Each new faction's first wave is a "pure" wave so the player can learn the pattern before it mixes
|
||||||
|
- Bosses appear solo — the arena clears before a boss spawns, making it feel like a duel
|
||||||
|
- ? After wave 12, does a loop begin (harder repeat) or does a final boss end the run?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Enemy Factions
|
||||||
|
|
||||||
|
### Matadors (the classics)
|
||||||
|
The trickiest faction — they're designed around baiting your charge.
|
||||||
|
|
||||||
|
| Enemy | Behaviour |
|
||||||
|
|---|---|
|
||||||
|
| Matador | Waves red cape to draw your charge, sidesteps at last moment. Must catch them off-guard or predict the dodge |
|
||||||
|
| Banderillero | Plants slow-flags in the ground — charges into one stuns the bull briefly |
|
||||||
|
| Picador | Mounted on horse, tanky, slow. Horse must be hit first before the rider is vulnerable |
|
||||||
|
| ? El Presidente (boss) | Summons matadors and teleports around the arena in bursts |
|
||||||
|
|
||||||
|
### Cowboys
|
||||||
|
The herd faction — individually easy, dangerous in groups.
|
||||||
|
|
||||||
|
| Enemy | Behaviour |
|
||||||
|
|---|---|
|
||||||
|
| Cowboy | Throws lasso to root you for 1–2s, then runs. Easy to hit, just annoying |
|
||||||
|
| Wrangler | Herds other enemies toward you — a force multiplier |
|
||||||
|
| Mounted Cowboy | Circles you on horseback, throwing dynamite. Must cut off the riding arc |
|
||||||
|
| ? Sheriff (boss) | Shotgun blast that staggers the bull; spawns deputies on death |
|
||||||
|
|
||||||
|
### Gladiators
|
||||||
|
The armour faction — charge angles matter.
|
||||||
|
|
||||||
|
| Enemy | Behaviour |
|
||||||
|
|---|---|
|
||||||
|
| Legionary | Front shield absorbs charges completely. Must hit from the side or behind |
|
||||||
|
| Net-thrower | Long-range root that holds you in place for 3s |
|
||||||
|
| Archer | Stationary on elevated platform (arena wall edge), fires slowing arrows |
|
||||||
|
| ? Centurion (boss) | Buffs nearby gladiators, has a charge-reflect shield that bounces you back |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ability System
|
||||||
|
|
||||||
|
Three slots total — always the same structure, filled differently every run.
|
||||||
|
|
||||||
|
```
|
||||||
|
[Charge ──────────] [Medium □] [Ultimate □]
|
||||||
|
always on 1 slot 1 slot
|
||||||
|
```
|
||||||
|
|
||||||
|
### Slot 1 — Charge (always on)
|
||||||
|
| | Description |
|
||||||
|
|---|---|
|
||||||
|
| **Charge** | Hold to build, release to sprint. Committed arc, hard to steer. The foundation everything else is built around |
|
||||||
|
|
||||||
|
### Slot 2 — Medium Ability
|
||||||
|
Cooldown ~8–15s. Tactical, reactive, fills gaps that charge can't. One equipped at a time.
|
||||||
|
|
||||||
|
| Ability | Description | Good against |
|
||||||
|
|---|---|---|
|
||||||
|
| **Stomp** | Slam front hooves — short-range AoE stun | Matador clusters, anything close |
|
||||||
|
| **Gore** | Upward headbutt — launches a single target | Shielded gladiators (bypasses front shield) |
|
||||||
|
| **Tail Whip** | 360° sweep behind and to the sides | Cowboys lassooing from behind |
|
||||||
|
| **Bull Roar** | Knockback shockwave — no damage, pure space creation | Net-throwers, tight groups |
|
||||||
|
| **Ground Pound** | From a jump, landing creates a shockwave crater | Mounted enemies (dismounts them) |
|
||||||
|
| **Counter** | Narrow window — if you charge as an attack lands, explosive ricochet | Picadors, centurion reflect |
|
||||||
|
|
||||||
|
### Slot 3 — Ultimate Ability
|
||||||
|
Cooldown ~35–50s, or requires a full charge meter. High impact. One equipped at a time.
|
||||||
|
|
||||||
|
| Ability | Description | Good against |
|
||||||
|
|---|---|---|
|
||||||
|
| **Stampede** | ~5s of zero deceleration — can't stop or steer well, flattens everything in the path | Boss phases, dense waves |
|
||||||
|
| **Enrage** | ~8s berserk: charge speed +60%, hitbox wider, ignores all slows and roots | Lasso/net-heavy waves |
|
||||||
|
| **Red Mist** | Every enemy on screen gets a red target marker and is pulled slightly toward you — brief guaranteed hits | Matador dodge phase |
|
||||||
|
| **Thunder Horn** | Next charge is electrified — chains damage to up to 4 nearby enemies on contact | Gladiator formations |
|
||||||
|
| **Call of the Herd** | Summon 3 ghost bulls that charge in parallel alongside you for 6s | Any — pure chaos |
|
||||||
|
|
||||||
|
### Card Pick Screen (between every wave)
|
||||||
|
Game pauses. Three cards shown — pick one.
|
||||||
|
|
||||||
|
| Card type | Examples |
|
||||||
|
|---|---|
|
||||||
|
| **New medium** | Swap current medium for a different one |
|
||||||
|
| **New ultimate** | Swap current ultimate for a different one |
|
||||||
|
| **Stat boost** | +charge speed, +turn rate, −medium cooldown, −ultimate cooldown |
|
||||||
|
| **Passive modifier** | Changes how your *current* ability behaves (see below) |
|
||||||
|
| **Synergy** | Unlocks a cross-ability combo effect |
|
||||||
|
|
||||||
|
**Passive modifier examples:**
|
||||||
|
- Stomp → "Dust Blind" — stun cloud also blocks enemy vision for 2s
|
||||||
|
- Gore → "Pinball" — launched enemy bounces off walls and damages others on landing
|
||||||
|
- Stampede → "Aftershock" — leaves a trembling ground trail that slows enemies for 5s
|
||||||
|
- Enrage → "Bloodlust" — kills during enrage reduce remaining cooldown
|
||||||
|
|
||||||
|
**Synergy examples:**
|
||||||
|
- Charge + Stomp = "Seismic Run" — charging for 2s+ turns your next stomp into a ground wave
|
||||||
|
- Gore + Thunder Horn = "Lightning Rod" — electrified gore sends a chain to the whole group
|
||||||
|
- ? Others to discover during design
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Arena Design
|
||||||
|
|
||||||
|
Each faction maps to an arena environment. Mixed-faction waves could transition the arena or blend themes.
|
||||||
|
|
||||||
|
| Faction | Arena | Hazards |
|
||||||
|
|---|---|---|
|
||||||
|
| Matadors | Sand bullring, wooden barrier ring | Flags slow movement, open centre is the danger zone |
|
||||||
|
| Cowboys | Frontier rodeo grounds, hay bales, fences | Lasso posts (rope traps), horse stampede lanes |
|
||||||
|
| Gladiators | Roman colosseum, stone floor, iron gates | Archer towers on walls, spike traps, wet stone (slide) |
|
||||||
|
|
||||||
|
- ? Does the arena change mid-run or is one arena selected at run start?
|
||||||
|
- ? Destructible fence/barrier sections throughout?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Core Loop Revisited
|
||||||
|
|
||||||
|
```
|
||||||
|
Move → Spot threat pattern → Position approach angle → Charge/Ability → Chain hits → Wave clear
|
||||||
|
↑ ↓
|
||||||
|
Dodge/react to debuffs (lasso, net, slow-flag) Pick upgrade (1 of 3)
|
||||||
|
```
|
||||||
|
|
||||||
|
The **positioning** step is where skill expression lives: which enemy to hit first, what angle to approach a shielded gladiator, whether to charge the matador or fake him out.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Open Questions
|
||||||
|
|
||||||
|
1. **Meta progression** — cosmetic unlocks only, or do you unlock new starting medium/ultimate options across runs?
|
||||||
|
2. **Arena change** — single arena per run, or does the arena theme shift when a new faction is introduced mid-run?
|
||||||
|
3. **After wave 12** — infinite loop with scaling difficulty, or a final boss that ends the run cleanly?
|
||||||
|
4. **Ability replacement** — when you pick a new medium/ultimate card, does it always replace the slot, or can you upgrade an existing ability through repeated picks (level 1→2→3)?
|
||||||
|
5. **Web scope** — vertical slice (matadors only, 4 waves, one ability tree) or full 12-wave game?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- *Vampire Survivors* — wave escalation, upgrade pick loop, run length
|
||||||
|
- *Gang Beasts* — ragdoll slapstick commitment
|
||||||
|
- *Katamari* / *Donut County* — simple core verb scaled through variety
|
||||||
|
- *Superhot* — charge-as-commitment, every move mattering
|
||||||
|
- *Cult of the Lamb* — faction variety with distinct visual languages
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
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", "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", "res://.godot/imported/citrus_orchard_road_puresky_4k.hdr-262868e8787abf05f7044da72beefce7.astc.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
|
||||||