Reskin player

This commit is contained in:
2024-10-23 14:56:11 +08:00
parent 09df1be654
commit 52636a2a7e
40 changed files with 647 additions and 66 deletions
Binary file not shown.
+48
View File
@@ -0,0 +1,48 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://ejeamn0pyey4"
path="res://.godot/imported/Bob.glb-b36d843833d2bf8fe73ce6b24284a2e6.scn"
[deps]
source_file="res://assets/characters/Bob.glb"
dest_files=["res://.godot/imported/Bob.glb-b36d843833d2bf8fe73ce6b24284a2e6.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
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=""
_subresources={
"nodes": {
"PATH:AnimationPlayer": {
"import/skip_import": true
},
"PATH:bob-rig/Skeleton3D": {
"rest_pose/external_animation_library": null,
"retarget/bone_map": Object(BoneMap,"resource_local_to_scene":false,"resource_name":"","profile":Object(SkeletonProfileHumanoid,"resource_local_to_scene":false,"resource_name":"","root_bone":&"Root","scale_base_bone":&"Hips","group_size":4,"bone_size":56,"script":null)
,"bonemap":null,"bone_map/Root":&"","bone_map/Hips":&"spine","bone_map/Spine":&"spine.001","bone_map/Chest":&"","bone_map/UpperChest":&"","bone_map/Neck":&"head","bone_map/Head":&"head_end","bone_map/LeftEye":&"","bone_map/RightEye":&"","bone_map/Jaw":&"","bone_map/LeftShoulder":&"shoulder.L","bone_map/LeftUpperArm":&"upper_arm.L","bone_map/LeftLowerArm":&"forearm.L","bone_map/LeftHand":&"hand.L","bone_map/LeftThumbMetacarpal":&"","bone_map/LeftThumbProximal":&"","bone_map/LeftThumbDistal":&"","bone_map/LeftIndexProximal":&"","bone_map/LeftIndexIntermediate":&"","bone_map/LeftIndexDistal":&"","bone_map/LeftMiddleProximal":&"","bone_map/LeftMiddleIntermediate":&"","bone_map/LeftMiddleDistal":&"","bone_map/LeftRingProximal":&"","bone_map/LeftRingIntermediate":&"","bone_map/LeftRingDistal":&"","bone_map/LeftLittleProximal":&"","bone_map/LeftLittleIntermediate":&"","bone_map/LeftLittleDistal":&"","bone_map/RightShoulder":&"shoulder.R","bone_map/RightUpperArm":&"upper_arm.R","bone_map/RightLowerArm":&"forearm.R","bone_map/RightHand":&"hand.R","bone_map/RightThumbMetacarpal":&"","bone_map/RightThumbProximal":&"","bone_map/RightThumbDistal":&"","bone_map/RightIndexProximal":&"","bone_map/RightIndexIntermediate":&"","bone_map/RightIndexDistal":&"","bone_map/RightMiddleProximal":&"","bone_map/RightMiddleIntermediate":&"","bone_map/RightMiddleDistal":&"","bone_map/RightRingProximal":&"","bone_map/RightRingIntermediate":&"","bone_map/RightRingDistal":&"","bone_map/RightLittleProximal":&"","bone_map/RightLittleIntermediate":&"","bone_map/RightLittleDistal":&"","bone_map/LeftUpperLeg":&"thigh.L","bone_map/LeftLowerLeg":&"leg.L","bone_map/LeftFoot":&"leg.L_end","bone_map/LeftToes":&"","bone_map/RightUpperLeg":&"thigh.R","bone_map/RightLowerLeg":&"leg.R","bone_map/RightFoot":&"leg.R_end","bone_map/RightToes":&"","script":null)
}
}
}
gltf/naming_version=1
gltf/embedded_image_handling=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

@@ -0,0 +1,38 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bv1sc1qhcq1a"
path.s3tc="res://.godot/imported/Bob_bob-expression.png-dd85f9c85e0b1fce41f739ac5e2738dc.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "da9ef29073196da9462ebb8cdb927864"
}
[deps]
source_file="res://assets/characters/Bob_bob-expression.png"
dest_files=["res://.godot/imported/Bob_bob-expression.png-dd85f9c85e0b1fce41f739ac5e2738dc.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
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/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

+38
View File
@@ -0,0 +1,38 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://i7s5u4xti1tl"
path.s3tc="res://.godot/imported/Bob_bob-tex.png-4f071a2d7bfb667073cbad51938ae2fc.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "82029193c1406f641d6277f8a8be7571"
}
[deps]
source_file="res://assets/characters/Bob_bob-tex.png"
dest_files=["res://.godot/imported/Bob_bob-tex.png-4f071a2d7bfb667073cbad51938ae2fc.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
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/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.
+48
View File
@@ -0,0 +1,48 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://d4cul3w3wem5w"
path="res://.godot/imported/Gatot.glb-7ed2e6cfe1354f044d634ce57f159a9a.scn"
[deps]
source_file="res://assets/characters/Gatot.glb"
dest_files=["res://.godot/imported/Gatot.glb-7ed2e6cfe1354f044d634ce57f159a9a.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
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=""
_subresources={
"nodes": {
"PATH:AnimationPlayer": {
"import/skip_import": true
},
"PATH:gatot-tpose/Skeleton3D": {
"rest_pose/external_animation_library": null,
"retarget/bone_map": Object(BoneMap,"resource_local_to_scene":false,"resource_name":"","profile":Object(SkeletonProfileHumanoid,"resource_local_to_scene":false,"resource_name":"","root_bone":&"Root","scale_base_bone":&"Hips","group_size":4,"bone_size":56,"script":null)
,"bonemap":null,"bone_map/Root":&"","bone_map/Hips":&"spine","bone_map/Spine":&"spine.001","bone_map/Chest":&"","bone_map/UpperChest":&"","bone_map/Neck":&"head","bone_map/Head":&"head_end","bone_map/LeftEye":&"","bone_map/RightEye":&"","bone_map/Jaw":&"","bone_map/LeftShoulder":&"shoulder.L","bone_map/LeftUpperArm":&"upper_arm.L","bone_map/LeftLowerArm":&"forearm.L","bone_map/LeftHand":&"hand.L","bone_map/LeftThumbMetacarpal":&"","bone_map/LeftThumbProximal":&"","bone_map/LeftThumbDistal":&"","bone_map/LeftIndexProximal":&"","bone_map/LeftIndexIntermediate":&"","bone_map/LeftIndexDistal":&"","bone_map/LeftMiddleProximal":&"","bone_map/LeftMiddleIntermediate":&"","bone_map/LeftMiddleDistal":&"","bone_map/LeftRingProximal":&"","bone_map/LeftRingIntermediate":&"","bone_map/LeftRingDistal":&"","bone_map/LeftLittleProximal":&"","bone_map/LeftLittleIntermediate":&"","bone_map/LeftLittleDistal":&"","bone_map/RightShoulder":&"shoulder.R","bone_map/RightUpperArm":&"upper_arm.R","bone_map/RightLowerArm":&"forearm.R","bone_map/RightHand":&"hand.R","bone_map/RightThumbMetacarpal":&"","bone_map/RightThumbProximal":&"","bone_map/RightThumbDistal":&"","bone_map/RightIndexProximal":&"","bone_map/RightIndexIntermediate":&"","bone_map/RightIndexDistal":&"","bone_map/RightMiddleProximal":&"","bone_map/RightMiddleIntermediate":&"","bone_map/RightMiddleDistal":&"","bone_map/RightRingProximal":&"","bone_map/RightRingIntermediate":&"","bone_map/RightRingDistal":&"","bone_map/RightLittleProximal":&"","bone_map/RightLittleIntermediate":&"","bone_map/RightLittleDistal":&"","bone_map/LeftUpperLeg":&"thigh.L","bone_map/LeftLowerLeg":&"leg.L","bone_map/LeftFoot":&"leg.L_end","bone_map/LeftToes":&"","bone_map/RightUpperLeg":&"thigh.R","bone_map/RightLowerLeg":&"leg.R","bone_map/RightFoot":&"leg.R_end","bone_map/RightToes":&"","script":null)
}
}
}
gltf/naming_version=1
gltf/embedded_image_handling=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@@ -0,0 +1,38 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://8tuv5jhxtomr"
path.s3tc="res://.godot/imported/Gatot_gatot-expression.png-76e1272bbc91c29d3fd46476b194aa32.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "b06b30c2b569aaa35de4a0a5632c4071"
}
[deps]
source_file="res://assets/characters/Gatot_gatot-expression.png"
dest_files=["res://.godot/imported/Gatot_gatot-expression.png-76e1272bbc91c29d3fd46476b194aa32.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
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/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,38 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dffwmdedi0wfb"
path.s3tc="res://.godot/imported/Gatot_gatot-tex.png-0ec17b48fcf71fcb7c1146079952224a.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "c969a1cda70ac36a4af7ef9fba2b4525"
}
[deps]
source_file="res://assets/characters/Gatot_gatot-tex.png"
dest_files=["res://.godot/imported/Gatot_gatot-tex.png-0ec17b48fcf71fcb7c1146079952224a.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
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/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.
+48
View File
@@ -0,0 +1,48 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://1vk0mjnwkngi"
path="res://.godot/imported/Masbro.glb-c019c78827ce632933ba37f4b2937305.scn"
[deps]
source_file="res://assets/characters/Masbro.glb"
dest_files=["res://.godot/imported/Masbro.glb-c019c78827ce632933ba37f4b2937305.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
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=""
_subresources={
"nodes": {
"PATH:AnimationPlayer": {
"import/skip_import": true
},
"PATH:masbro-tpose/Skeleton3D": {
"rest_pose/external_animation_library": null,
"retarget/bone_map": Object(BoneMap,"resource_local_to_scene":false,"resource_name":"","profile":Object(SkeletonProfileHumanoid,"resource_local_to_scene":false,"resource_name":"","root_bone":&"Root","scale_base_bone":&"Hips","group_size":4,"bone_size":56,"script":null)
,"bonemap":null,"bone_map/Root":&"","bone_map/Hips":&"spine","bone_map/Spine":&"spine.001","bone_map/Chest":&"","bone_map/UpperChest":&"","bone_map/Neck":&"","bone_map/Head":&"head","bone_map/LeftEye":&"","bone_map/RightEye":&"","bone_map/Jaw":&"","bone_map/LeftShoulder":&"shoulder.L","bone_map/LeftUpperArm":&"upper_arm.L","bone_map/LeftLowerArm":&"forearm.L","bone_map/LeftHand":&"hand.L","bone_map/LeftThumbMetacarpal":&"","bone_map/LeftThumbProximal":&"","bone_map/LeftThumbDistal":&"","bone_map/LeftIndexProximal":&"","bone_map/LeftIndexIntermediate":&"","bone_map/LeftIndexDistal":&"","bone_map/LeftMiddleProximal":&"","bone_map/LeftMiddleIntermediate":&"","bone_map/LeftMiddleDistal":&"","bone_map/LeftRingProximal":&"","bone_map/LeftRingIntermediate":&"","bone_map/LeftRingDistal":&"","bone_map/LeftLittleProximal":&"","bone_map/LeftLittleIntermediate":&"","bone_map/LeftLittleDistal":&"","bone_map/RightShoulder":&"shoulder.R","bone_map/RightUpperArm":&"upper_arm.R","bone_map/RightLowerArm":&"forearm.R","bone_map/RightHand":&"hand.R","bone_map/RightThumbMetacarpal":&"","bone_map/RightThumbProximal":&"","bone_map/RightThumbDistal":&"","bone_map/RightIndexProximal":&"","bone_map/RightIndexIntermediate":&"","bone_map/RightIndexDistal":&"","bone_map/RightMiddleProximal":&"","bone_map/RightMiddleIntermediate":&"","bone_map/RightMiddleDistal":&"","bone_map/RightRingProximal":&"","bone_map/RightRingIntermediate":&"","bone_map/RightRingDistal":&"","bone_map/RightLittleProximal":&"","bone_map/RightLittleIntermediate":&"","bone_map/RightLittleDistal":&"","bone_map/LeftUpperLeg":&"thigh.L","bone_map/LeftLowerLeg":&"leg.L","bone_map/LeftFoot":&"leg.L_end","bone_map/LeftToes":&"","bone_map/RightUpperLeg":&"thigh.R","bone_map/RightLowerLeg":&"leg.R","bone_map/RightFoot":&"leg.R_end","bone_map/RightToes":&"","script":null)
}
}
}
gltf/naming_version=1
gltf/embedded_image_handling=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

@@ -0,0 +1,38 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ckmpgwjcbnea"
path.s3tc="res://.godot/imported/Masbro_masbro-expression.png-d6672181c953656cdfcc1524ce6b7c6e.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "42c78622d347d6ea6f30c5404dd153f6"
}
[deps]
source_file="res://assets/characters/Masbro_masbro-expression.png"
dest_files=["res://.godot/imported/Masbro_masbro-expression.png-d6672181c953656cdfcc1524ce6b7c6e.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
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/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

@@ -0,0 +1,38 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b6uhiltx80i4o"
path.s3tc="res://.godot/imported/Masbro_masbro-tex.png-7e985454b7edc93fd47db30929e335c0.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "26957528a2b1b5a522ac69d193409675"
}
[deps]
source_file="res://assets/characters/Masbro_masbro-tex.png"
dest_files=["res://.godot/imported/Masbro_masbro-tex.png-7e985454b7edc93fd47db30929e335c0.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
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/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.
+48
View File
@@ -0,0 +1,48 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bmln7v6v5kvxg"
path="res://.godot/imported/Oldpop.glb-c0496f43d11bd79e0865e1e20da606da.scn"
[deps]
source_file="res://assets/characters/Oldpop.glb"
dest_files=["res://.godot/imported/Oldpop.glb-c0496f43d11bd79e0865e1e20da606da.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
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=""
_subresources={
"nodes": {
"PATH:AnimationPlayer": {
"import/skip_import": true
},
"PATH:oldpop-rig/Skeleton3D": {
"rest_pose/external_animation_library": null,
"retarget/bone_map": Object(BoneMap,"resource_local_to_scene":false,"resource_name":"","profile":Object(SkeletonProfileHumanoid,"resource_local_to_scene":false,"resource_name":"","root_bone":&"Root","scale_base_bone":&"Hips","group_size":4,"bone_size":56,"script":null)
,"bonemap":null,"bone_map/Root":&"","bone_map/Hips":&"spine","bone_map/Spine":&"spine.001","bone_map/Chest":&"","bone_map/UpperChest":&"","bone_map/Neck":&"head","bone_map/Head":&"head_end","bone_map/LeftEye":&"","bone_map/RightEye":&"","bone_map/Jaw":&"","bone_map/LeftShoulder":&"shoulder.L","bone_map/LeftUpperArm":&"upper_arm.L","bone_map/LeftLowerArm":&"forearm.L","bone_map/LeftHand":&"hand.L","bone_map/LeftThumbMetacarpal":&"","bone_map/LeftThumbProximal":&"","bone_map/LeftThumbDistal":&"","bone_map/LeftIndexProximal":&"","bone_map/LeftIndexIntermediate":&"","bone_map/LeftIndexDistal":&"","bone_map/LeftMiddleProximal":&"","bone_map/LeftMiddleIntermediate":&"","bone_map/LeftMiddleDistal":&"","bone_map/LeftRingProximal":&"","bone_map/LeftRingIntermediate":&"","bone_map/LeftRingDistal":&"","bone_map/LeftLittleProximal":&"","bone_map/LeftLittleIntermediate":&"","bone_map/LeftLittleDistal":&"","bone_map/RightShoulder":&"shoulder.R","bone_map/RightUpperArm":&"upper_arm.R","bone_map/RightLowerArm":&"forearm.R","bone_map/RightHand":&"hand.R","bone_map/RightThumbMetacarpal":&"","bone_map/RightThumbProximal":&"","bone_map/RightThumbDistal":&"","bone_map/RightIndexProximal":&"","bone_map/RightIndexIntermediate":&"","bone_map/RightIndexDistal":&"","bone_map/RightMiddleProximal":&"","bone_map/RightMiddleIntermediate":&"","bone_map/RightMiddleDistal":&"","bone_map/RightRingProximal":&"","bone_map/RightRingIntermediate":&"","bone_map/RightRingDistal":&"","bone_map/RightLittleProximal":&"","bone_map/RightLittleIntermediate":&"","bone_map/RightLittleDistal":&"","bone_map/LeftUpperLeg":&"thigh.L","bone_map/LeftLowerLeg":&"leg.L","bone_map/LeftFoot":&"leg.L_end","bone_map/LeftToes":&"","bone_map/RightUpperLeg":&"thigh.R","bone_map/RightLowerLeg":&"leg.R","bone_map/RightFoot":&"leg.R_end","bone_map/RightToes":&"","script":null)
}
}
}
gltf/naming_version=1
gltf/embedded_image_handling=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,38 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bhoo56kuqtgha"
path.s3tc="res://.godot/imported/Oldpop_oldpop-expression.png-89e3d83847c840114e2d0543c96f5ca9.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "9cb145857c614f966bbdc24301f18efb"
}
[deps]
source_file="res://assets/characters/Oldpop_oldpop-expression.png"
dest_files=["res://.godot/imported/Oldpop_oldpop-expression.png-89e3d83847c840114e2d0543c96f5ca9.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
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/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

@@ -0,0 +1,38 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c1i00chwkmxtw"
path.s3tc="res://.godot/imported/Oldpop_oldpop-tex.png-2caa5a81b501017c039cb840f5674229.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "eb0e872385a972db6481b58e977a86f3"
}
[deps]
source_file="res://assets/characters/Oldpop_oldpop-tex.png"
dest_files=["res://.godot/imported/Oldpop_oldpop-tex.png-2caa5a81b501017c039cb840f5674229.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
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/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.
+36
View File
@@ -0,0 +1,36 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://burcyxruv73pu"
path="res://.godot/imported/animation.glb-d28e509f062b0ed9227a1d97e8075ed8.scn"
[deps]
source_file="res://assets/characters/animation.glb"
dest_files=["res://.godot/imported/animation.glb-d28e509f062b0ed9227a1d97e8075ed8.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
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=""
_subresources={}
gltf/naming_version=0
gltf/embedded_image_handling=1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,3 @@
[gd_resource type="SkeletonProfileHumanoid" format=3 uid="uid://bvhvhvx2c2303"]
[resource]
+33 -9
View File
@@ -46,6 +46,7 @@ func _on_peer_connected(new_peer_id):
await get_tree().create_timer(1).timeout await get_tree().create_timer(1).timeout
rpc("add_newly_connected_player_character", new_peer_id) rpc("add_newly_connected_player_character", new_peer_id)
rpc_id(new_peer_id, "add_previously_connected_player_characters", connected_peer_ids) rpc_id(new_peer_id, "add_previously_connected_player_characters", connected_peer_ids)
rpc_id(new_peer_id, "sync_game_state", players, bots, game_started)
add_player_character(new_peer_id) add_player_character(new_peer_id)
replace_bot_with_player(new_peer_id) replace_bot_with_player(new_peer_id)
@@ -65,25 +66,35 @@ func add_player_character(peer_id):
local_player_character = player_character local_player_character = player_character
func add_bot(bot_id): func add_bot(bot_id):
if multiplayer.is_server():
rpc("create_bot", bot_id)
@rpc("call_local")
func create_bot(bot_id):
var bot_character = player_scene.instantiate() var bot_character = player_scene.instantiate()
bot_character.set_multiplayer_authority(1) # Set server as authority for bots bot_character.set_multiplayer_authority(1) # Set server as authority for bots
bot_character.name = str(bot_id) bot_character.name = str(bot_id)
add_child(bot_character) add_child(bot_character)
bot_character.add_to_group("Players", true) bot_character.add_to_group("Players", true)
bot_character.add_to_group("Bots", true) bot_character.add_to_group("Bots", true)
bots.append(bot_id) if multiplayer.is_server():
players.append(bot_id) bots.append(bot_id)
players.append(bot_id)
func replace_bot_with_player(player_id): func replace_bot_with_player(player_id):
if bots.size() > 0: if multiplayer.is_server() and bots.size() > 0:
var bot_id = bots.pop_front() var bot_id = bots.pop_front()
players.erase(bot_id) players.erase(bot_id)
players.append(player_id) players.append(player_id)
var bot_node = get_node(str(bot_id)) rpc("remove_bot", bot_id)
if bot_node:
bot_node.queue_free()
rpc("sync_players", players) rpc("sync_players", players)
@rpc("call_local")
func remove_bot(bot_id):
var bot_node = get_node(str(bot_id))
if bot_node:
bot_node.queue_free()
func get_next_available_bot_id(): func get_next_available_bot_id():
for i in range(2, max_players + 1): for i in range(2, max_players + 1):
if not i in players: if not i in players:
@@ -99,6 +110,17 @@ func add_previously_connected_player_characters(peer_ids):
for peer_id in peer_ids: for peer_id in peer_ids:
add_player_character(peer_id) add_player_character(peer_id)
@rpc("call_local")
func sync_game_state(current_players, current_bots, is_game_started):
players = current_players
bots = current_bots
game_started = is_game_started
# Create bot characters for existing bots
for bot_id in bots:
if not has_node(str(bot_id)):
create_bot(bot_id)
func _process(_delta): func _process(_delta):
if multiplayer.is_server() and game_started: if multiplayer.is_server() and game_started:
rpc("sync_turn_index", current_turn_index) rpc("sync_turn_index", current_turn_index)
@@ -107,13 +129,15 @@ func start_game():
if multiplayer.is_server(): if multiplayer.is_server():
game_started = true game_started = true
connected_peer_ids.sort() connected_peer_ids.sort()
rpc("sync_game_start", connected_peer_ids) rpc("sync_game_start", connected_peer_ids, players, bots)
current_turn_index = -1 current_turn_index = -1
next_turn() next_turn()
@rpc @rpc("call_local")
func sync_game_start(peer_ids): func sync_game_start(peer_ids, current_players, current_bots):
connected_peer_ids = peer_ids connected_peer_ids = peer_ids
players = current_players
bots = current_bots
game_started = true game_started = true
@rpc("reliable") @rpc("reliable")
+4 -4
View File
@@ -12,19 +12,19 @@ script = ExtResource("1_xcpe3")
mesh_library = ExtResource("1_110wo") mesh_library = ExtResource("1_110wo")
cell_size = Vector3(1, 1, 1) cell_size = Vector3(1, 1, 1)
data = { data = {
"cells": PackedInt32Array(0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 1, 0, 0, 1, 1, 0, 1, 2, 0, 1, 3, 0, 1, 4, 0, 1, 5, 0, 1, 6, 0, 1, 7, 4, 1, 8, 0, 1, 9, 4, 2, 0, 4, 2, 1, 0, 2, 2, 0, 2, 3, 0, 2, 4, 0, 2, 5, 0, 2, 6, 0, 2, 7, 0, 2, 8, 0, 2, 9, 0, 3, 0, 0, 3, 1, 0, 3, 2, 0, 3, 3, 0, 3, 4, 0, 3, 5, 0, 3, 6, 0, 3, 7, 4, 3, 8, 0, 3, 9, 0, 4, 0, 0, 4, 1, 0, 4, 2, 0, 4, 3, 0, 4, 4, 0, 4, 5, 0, 4, 6, 0, 4, 7, 0, 4, 8, 0, 4, 9, 4, 5, 0, 0, 5, 1, 0, 5, 2, 0, 5, 3, 0, 5, 4, 0, 5, 5, 0, 5, 6, 0, 5, 7, 0, 5, 8, 0, 5, 9, 0, 6, 0, 4, 6, 1, 0, 6, 2, 0, 6, 3, 0, 6, 4, 0, 6, 5, 0, 6, 6, 0, 6, 7, 0, 6, 8, 0, 6, 9, 4, 7, 0, 0, 7, 1, 0, 7, 2, 0, 7, 3, 0, 7, 4, 0, 7, 5, 0, 7, 6, 0, 7, 7, 0, 7, 8, 0, 7, 9, 0, 8, 0, 0, 8, 1, 0, 8, 2, 0, 8, 3, 0, 8, 4, 4, 8, 5, 0, 8, 6, 0, 8, 7, 0, 8, 8, 0, 8, 9, 0, 9, 0, 0, 9, 1, 0, 9, 2, 0, 9, 3, 0, 9, 4, 0, 9, 5, 0, 9, 6, 0, 9, 7, 0, 9, 8, 0, 9, 9, 0) "cells": PackedInt32Array(0, 0, 4, 0, 1, 0, 0, 2, 4, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 4, 0, 7, 0, 0, 8, 0, 0, 9, 0, 1, 0, 0, 1, 1, 0, 1, 2, 0, 1, 3, 0, 1, 4, 0, 1, 5, 4, 1, 6, 4, 1, 7, 4, 1, 8, 0, 1, 9, 4, 2, 0, 0, 2, 1, 0, 2, 2, 0, 2, 3, 0, 2, 4, 0, 2, 5, 0, 2, 6, 4, 2, 7, 4, 2, 8, 0, 2, 9, 4, 3, 0, 4, 3, 1, 0, 3, 2, 0, 3, 3, 0, 3, 4, 4, 3, 5, 0, 3, 6, 4, 3, 7, 0, 3, 8, 0, 3, 9, 0, 4, 0, 4, 4, 1, 0, 4, 2, 0, 4, 3, 0, 4, 4, 4, 4, 5, 0, 4, 6, 0, 4, 7, 0, 4, 8, 0, 4, 9, 0, 5, 0, 0, 5, 1, 4, 5, 2, 0, 5, 3, 0, 5, 4, 4, 5, 5, 0, 5, 6, 0, 5, 7, 4, 5, 8, 4, 5, 9, 0, 6, 0, 4, 6, 1, 0, 6, 2, 4, 6, 3, 4, 6, 4, 4, 6, 5, 0, 6, 6, 4, 6, 7, 4, 6, 8, 0, 6, 9, 0, 7, 0, 4, 7, 1, 0, 7, 2, 4, 7, 3, 0, 7, 4, 0, 7, 5, 0, 7, 6, 0, 7, 7, 4, 7, 8, 4, 7, 9, 4, 8, 0, 4, 8, 1, 0, 8, 2, 0, 8, 3, 0, 8, 4, 4, 8, 5, 4, 8, 6, 0, 8, 7, 0, 8, 8, 0, 8, 9, 0, 9, 0, 0, 9, 1, 4, 9, 2, 4, 9, 3, 0, 9, 4, 0, 9, 5, 0, 9, 6, 0, 9, 7, 0, 9, 8, 0, 9, 9, 0)
} }
script = ExtResource("2_hbe1v") script = ExtResource("2_hbe1v")
non_walkable_items = Array[int]([4, 5]) non_walkable_items = Array[int]([4, 5])
[node name="Camera3D" type="Camera3D" parent="."] [node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 5, 30, 5) transform = Transform3D(-1, 0, -8.74228e-08, -6.2963e-08, 0.693754, 0.720212, 6.06499e-08, 0.720212, -0.693754, 5, 15, -10)
visible = false
environment = ExtResource("4_ky38j") environment = ExtResource("4_ky38j")
fov = 35.5 fov = 35.5
[node name="Camera3D2" type="Camera3D" parent="."] [node name="Camera3D200" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 5, 30, 5) transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 5, 30, 5)
visible = false
environment = ExtResource("4_ky38j") environment = ExtResource("4_ky38j")
fov = 35.5 fov = 35.5
+47 -52
View File
@@ -1,60 +1,55 @@
extends Node3D # This script is attached to a Node3D extends Node3D
# Export variables for inspector configuration @export var enhanced_gridmap_path: NodePath = "/root/Main/EnhancedGridMap"
@export var enhanced_gridmap_path: NodePath = "/root/Main/EnhancedGridMap" # Path to the EnhancedGridMap node var enhanced_gridmap: EnhancedGridMap
var enhanced_gridmap: EnhancedGridMap # References to the EnhancedGridMap node @export var current_position: Vector2i
@export var current_position: Vector2i # Current grid position of the player var is_player_moving: bool = false
var is_player_moving: bool = false # Flag to prevent movement while already moving
# Customizable cell size and offset @export var cell_size: Vector3 = Vector3(2, 2, 2)
@export var cell_size: Vector3 = Vector3(2, 2, 2) # Size of each grid cell @export var cell_offset: Vector3 = Vector3(0, 0, 0)
@export var cell_offset: Vector3 = Vector3(0, 0, 0) # Offset for the grid
# Center offset flags @export var center_x: bool = false
@export var center_x: bool = false # Center the player on X axis @export var center_y: bool = false
@export var center_y: bool = false # Center the player on Y axis @export var center_z: bool = false
@export var center_z: bool = false # Center the player on Z axis
# Diagonal movement flag @export var use_diagonal_movement: bool = false:
@export var use_diagonal_movement: bool = false: # Allow diagonal movement
set(value): set(value):
use_diagonal_movement = value use_diagonal_movement = value
if enhanced_gridmap: if enhanced_gridmap:
enhanced_gridmap.set_diagonal_movement(value) enhanced_gridmap.set_diagonal_movement(value)
# Turn management variables @export var is_my_turn: bool = false:
@export var is_my_turn: bool = false: # Flag to indicate if it's this player's turn
set(value): set(value):
is_my_turn = value is_my_turn = value
if is_my_turn and is_multiplayer_authority(): if is_my_turn and is_multiplayer_authority():
rpc("display_message", "It's your turn!") # RPC call to display turn message rpc("display_message", "It's your turn!")
@export var has_moved_this_turn = false # Flag to track if player has moved this turn @export var has_moved_this_turn = false
@onready var main_scene = get_tree().current_scene # Reference to the main scene @onready var main_scene = get_tree().current_scene
func _ready(): # Called when the node enters the scene tree func _ready():
name = str(get_multiplayer_authority()) # Set the node name to the multiplayer authority ID name = str(get_multiplayer_authority())
$Name.text = str(name) # Set the displayed name $Name.text = str(name)
enhanced_gridmap = get_node(enhanced_gridmap_path) # Get the EnhancedGridMap node enhanced_gridmap = get_node(enhanced_gridmap_path)
if main_scene: if main_scene:
enhanced_gridmap = main_scene.get_node("EnhancedGridMap") # Get EnhancedGridMap from main scene enhanced_gridmap = main_scene.get_node("EnhancedGridMap")
else: else:
push_error("Main scene not found") # Error if main scene not found push_error("Main scene not found")
if not enhanced_gridmap: if not enhanced_gridmap:
push_error("EnhancedGridMap node not found. Please set the correct path in the inspector.") push_error("EnhancedGridMap node not found. Please set the correct path in the inspector.")
return return
enhanced_gridmap.initialize_astar() # Initialize A* pathfinding enhanced_gridmap.initialize_astar()
enhanced_gridmap.set_diagonal_movement(use_diagonal_movement) # Set diagonal movement option enhanced_gridmap.set_diagonal_movement(use_diagonal_movement)
current_position = find_valid_starting_position() # Find a valid starting position current_position = find_valid_starting_position()
update_player_position(current_position) # Update player's position update_player_position(current_position)
set_process_unhandled_input(is_multiplayer_authority()) # Only process input for the authority set_process_unhandled_input(is_multiplayer_authority())
func find_valid_starting_position() -> Vector2i: # Find a valid starting position func find_valid_starting_position() -> Vector2i:
var rng = RandomNumberGenerator.new() var rng = RandomNumberGenerator.new()
rng.randomize() rng.randomize()
@@ -62,15 +57,15 @@ func find_valid_starting_position() -> Vector2i: # Find a valid starting positi
var attempts = 0 var attempts = 0
while attempts < max_attempts: while attempts < max_attempts:
current_position = Vector2i(0, rng.randi_range(0, 9)) # Generate random position current_position = Vector2i(0, rng.randi_range(0, 9))
var cell_item = enhanced_gridmap.get_cell_item(Vector3i(current_position.x, 0, current_position.y)) var cell_item = enhanced_gridmap.get_cell_item(Vector3i(current_position.x, 0, current_position.y))
if cell_item not in enhanced_gridmap.non_walkable_items: if cell_item not in enhanced_gridmap.non_walkable_items:
return current_position # Return valid position return current_position
attempts += 1 attempts += 1
return Vector2i(0, 0) # Default position if no valid position found return Vector2i(0, 0)
func find_random_valid_position() -> Vector2i: func find_random_valid_position() -> Vector2i:
var rng = RandomNumberGenerator.new() var rng = RandomNumberGenerator.new()
@@ -85,17 +80,17 @@ func find_random_valid_position() -> Vector2i:
var cell_item = enhanced_gridmap.get_cell_item(Vector3i(random_position.x, 0, random_position.y)) var cell_item = enhanced_gridmap.get_cell_item(Vector3i(random_position.x, 0, random_position.y))
if cell_item not in enhanced_gridmap.non_walkable_items and random_position != current_position: if cell_item not in enhanced_gridmap.non_walkable_items and random_position != current_position:
return random_position # Return valid position return random_position
attempts += 1 attempts += 1
return current_position # Return current position if no new valid position found return current_position
func _physics_process(_delta): # Called every physics frame func _physics_process(_delta):
if is_multiplayer_authority(): if is_multiplayer_authority():
rpc("remote_set_position", global_position) # RPC call to sync position rpc("remote_set_position", global_position)
func _unhandled_input(event): # Handle input events func _unhandled_input(event):
if not is_multiplayer_authority() or not is_my_turn or is_player_moving: if not is_multiplayer_authority() or not is_my_turn or is_player_moving:
return return
@@ -108,7 +103,7 @@ func _unhandled_input(event): # Handle input events
if click_position != Vector2i(-1, -1): if click_position != Vector2i(-1, -1):
move_player_to_clicked_position(click_position) move_player_to_clicked_position(click_position)
func raycast_to_grid(from: Vector3, to: Vector3) -> Vector2i: # Convert 3D raycast to grid position func raycast_to_grid(from: Vector3, to: Vector3) -> Vector2i:
var plane = Plane(Vector3.UP, cell_offset.y) var plane = Plane(Vector3.UP, cell_offset.y)
var intersection = plane.intersects_ray(from, to - from) var intersection = plane.intersects_ray(from, to - from)
@@ -123,9 +118,9 @@ func raycast_to_grid(from: Vector3, to: Vector3) -> Vector2i: # Convert 3D rayc
grid_position.y >= 0 and grid_position.y < enhanced_gridmap.rows: grid_position.y >= 0 and grid_position.y < enhanced_gridmap.rows:
return grid_position return grid_position
return Vector2i(-1, -1) # Invalid position return Vector2i(-1, -1)
func move_player_to_clicked_position(grid_position: Vector2i): # Move player to clicked position func move_player_to_clicked_position(grid_position: Vector2i):
var cell_item = enhanced_gridmap.get_cell_item(Vector3i(grid_position.x, 0, grid_position.y)) var cell_item = enhanced_gridmap.get_cell_item(Vector3i(grid_position.x, 0, grid_position.y))
if cell_item in enhanced_gridmap.non_walkable_items: if cell_item in enhanced_gridmap.non_walkable_items:
@@ -140,7 +135,7 @@ func move_player_to_clicked_position(grid_position: Vector2i): # Move player to
else: else:
print("No valid path found") print("No valid path found")
func move_player_along_path(path: Array): # Move player along calculated path func move_player_along_path(path: Array):
is_player_moving = true is_player_moving = true
var tween = create_tween() var tween = create_tween()
tween.set_trans(Tween.TRANS_CUBIC) tween.set_trans(Tween.TRANS_CUBIC)
@@ -176,10 +171,10 @@ func move_bot_along_path(path: Array):
end_turn() end_turn()
) )
func update_player_position(grid_position: Vector2i): # Update player's position func update_player_position(grid_position: Vector2i):
position = grid_to_world(grid_position) position = grid_to_world(grid_position)
func grid_to_world(grid_position: Vector2i) -> Vector3: # Convert grid position to world position func grid_to_world(grid_position: Vector2i) -> Vector3:
var world_position = Vector3( var world_position = Vector3(
grid_position.x * cell_size.x, grid_position.x * cell_size.x,
cell_size.y, cell_size.y,
@@ -198,24 +193,24 @@ func grid_to_world(grid_position: Vector2i) -> Vector3: # Convert grid position
return world_position + cell_offset return world_position + cell_offset
func start_turn(): # Start player's turn func start_turn():
has_moved_this_turn = false has_moved_this_turn = false
is_my_turn = true is_my_turn = true
if is_multiplayer_authority(): if is_multiplayer_authority():
rpc("display_message", "It's your turn!") # RPC call to display turn message rpc("display_message", "It's your turn!")
func end_turn(): # End player's turn func end_turn():
is_my_turn = false is_my_turn = false
has_moved_this_turn = false has_moved_this_turn = false
if is_multiplayer_authority(): if is_multiplayer_authority():
get_node("/root/Main").request_next_turn() # Request next turn from main scene get_node("/root/Main").request_next_turn()
@rpc("any_peer", "call_local", "unreliable") @rpc("any_peer", "call_local", "unreliable")
func remote_set_position(authority_position): # RPC function to sync position func remote_set_position(authority_position):
global_position = authority_position global_position = authority_position
@rpc("any_peer", "call_local") @rpc("any_peer", "call_local")
func display_message(message): # RPC function to display messages func display_message(message):
$Bubble.show() $Bubble.show()
$Bubble/Message.show() $Bubble/Message.show()
$Bubble/Message.text = str(message) $Bubble/Message.text = str(message)
+28 -1
View File
@@ -1,7 +1,12 @@
[gd_scene load_steps=7 format=3 uid="uid://1dbdbg3q5778"] [gd_scene load_steps=12 format=3 uid="uid://1dbdbg3q5778"]
[ext_resource type="Script" path="res://scenes/player.gd" id="1_qecr4"] [ext_resource type="Script" path="res://scenes/player.gd" id="1_qecr4"]
[ext_resource type="PackedScene" uid="uid://ejeamn0pyey4" path="res://assets/characters/Bob.glb" id="2_3e0d5"]
[ext_resource type="Texture2D" uid="uid://b4y41h16q6m34" path="res://assets/textures/bub.png" id="2_5w327"] [ext_resource type="Texture2D" uid="uid://b4y41h16q6m34" path="res://assets/textures/bub.png" id="2_5w327"]
[ext_resource type="PackedScene" uid="uid://1vk0mjnwkngi" path="res://assets/characters/Masbro.glb" id="2_mjsl8"]
[ext_resource type="PackedScene" uid="uid://d4cul3w3wem5w" path="res://assets/characters/Gatot.glb" id="4_3tlf6"]
[ext_resource type="PackedScene" uid="uid://bmln7v6v5kvxg" path="res://assets/characters/Oldpop.glb" id="5_alfd1"]
[ext_resource type="AnimationLibrary" uid="uid://c3pyopnwibckj" path="res://assets/characters/animations/animation-pack.res" id="6_5oq5w"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xqgey"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xqgey"]
albedo_color = Color(0.85, 0.085, 0.238, 1) albedo_color = Color(0.85, 0.085, 0.238, 1)
@@ -19,7 +24,29 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, 0)
script = ExtResource("1_qecr4") script = ExtResource("1_qecr4")
cell_size = Vector3(1, 1, 1) cell_size = Vector3(1, 1, 1)
[node name="Masbro" parent="." instance=ExtResource("2_mjsl8")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.485, 0)
[node name="Bob" parent="." instance=ExtResource("2_3e0d5")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.484627, 0)
visible = false
[node name="Gatot" parent="." instance=ExtResource("4_3tlf6")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.485, 0)
visible = false
[node name="Oldpop" parent="." instance=ExtResource("5_alfd1")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.485, 0)
visible = false
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
root_node = NodePath("../Masbro")
libraries = {
"animation-pack": ExtResource("6_5oq5w")
}
[node name="MeshInstance3D" type="MeshInstance3D" parent="."] [node name="MeshInstance3D" type="MeshInstance3D" parent="."]
visible = false
mesh = SubResource("CapsuleMesh_l8ldl") mesh = SubResource("CapsuleMesh_l8ldl")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]