actual initial commit lmao

This commit is contained in:
2025-08-12 04:49:06 -04:00
parent b130b7eb7b
commit 0b69c0ae6f
1150 changed files with 124659 additions and 0 deletions

69
entities/grabject.gd Normal file
View File

@@ -0,0 +1,69 @@
extends RigidBody3D
var grabject : bool = true
var low_height : bool = false
@export var model : String = "mug"
@export var impact_loud : bool = false
@export var impact_lethal : bool = false
@export var impact_annoyonly : bool = false
@export var impact_sound : String = "genericimpact"
@export var prompt : String = "Grab mug"
@export var icon : String = "hand"
var icon_offset : float = 0.0
var collided_this_frame : bool = false
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
if model == "mug" or "mug_full":
$mesh_mugge.visible = true
$shape_mugge.disabled = false
$shape_mugge_secondary.disabled = false
icon_offset = $shape_mugge.shape.height / 2
if model == "mug_full":
$mesh_mugge/coffee.visible = true
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
pass
func _physics_process(_delta: float) -> void:
if linear_velocity.length() < 0.025:
$SleepTimer.start(2)
func sleep():
freeze = true
func hold(delay):
freeze = true
$DelayTimer.start(delay)
func hold2():
set_collision_layer_value(1, false)
if model == "mug" or model == "mug_full":
$mesh_mugge.visible = false
if model == "mug_full":
mug_spill(global_transform.origin)
global_transform.origin.y += 500
func unhold(spawnlocation):
global_transform.origin = spawnlocation
freeze = false
if model == "mug" or model == "mug_full":
$mesh_mugge.visible = true
func throw(spawnlocation, direction, force):
unhold(spawnlocation)
apply_central_impulse(direction * force)
func handle_collision(_hush):
var colliders = get_colliding_bodies()
for body in colliders:
print(body.get_name())
if !collided_this_frame and body.get("npc"):
body.impact()
func mug_spill(_location):
$mesh_mugge/coffee.visible = false
model = "mug"
prompt = "Grab mug"

1
entities/grabject.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://bx4wyybpwqwu0

53
entities/grabject.tscn Normal file
View File

@@ -0,0 +1,53 @@
[gd_scene load_steps=6 format=3 uid="uid://cpjkxxf2nlpd1"]
[ext_resource type="Script" uid="uid://bx4wyybpwqwu0" path="res://entities/grabject.gd" id="1_xvy3x"]
[ext_resource type="ArrayMesh" uid="uid://w0jl7jy3oufh" path="res://models/props/mug.res" id="2_myur1"]
[ext_resource type="ArrayMesh" uid="uid://cnumt37jaqavc" path="res://models/props/mug_full_line.res" id="3_jg5js"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_wyf5s"]
height = 0.14
radius = 0.08
[sub_resource type="BoxShape3D" id="BoxShape3D_fvtfi"]
size = Vector3(0.06, 0.1, 0.038)
[node name="Grabject" type="RigidBody3D"]
collision_layer = 11
collision_mask = 3
freeze = true
contact_monitor = true
max_contacts_reported = 3
script = ExtResource("1_xvy3x")
[node name="mesh_mugge" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.08, 0)
mesh = ExtResource("2_myur1")
skeleton = NodePath("")
[node name="coffee" type="MeshInstance3D" parent="mesh_mugge"]
visible = false
mesh = ExtResource("3_jg5js")
skeleton = NodePath("../..")
[node name="shape_mugge" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.07, 0)
shape = SubResource("CylinderShape3D_wyf5s")
disabled = true
debug_fill = false
[node name="shape_mugge_secondary" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.11, 0.072, 0)
shape = SubResource("BoxShape3D_fvtfi")
disabled = true
debug_fill = false
[node name="DelayTimer" type="Timer" parent="."]
process_callback = 0
one_shot = true
[node name="SleepTimer" type="Timer" parent="."]
one_shot = true
[connection signal="body_entered" from="." to="." method="handle_collision"]
[connection signal="timeout" from="DelayTimer" to="." method="hold2"]
[connection signal="timeout" from="SleepTimer" to="." method="sleep"]

View File

@@ -0,0 +1,48 @@
[gd_scene load_steps=6 format=3 uid="uid://cpjkxxf2nlpd1"]
[ext_resource type="Script" uid="uid://bx4wyybpwqwu0" path="res://entities/grabject.gd" id="1_xvy3x"]
[ext_resource type="ArrayMesh" uid="uid://w0jl7jy3oufh" path="res://models/props/mug.res" id="2_myur1"]
[ext_resource type="ArrayMesh" uid="uid://cnumt37jaqavc" path="res://models/props/mug_full_line.res" id="3_jg5js"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_wyf5s"]
height = 0.14
radius = 0.08
[sub_resource type="BoxShape3D" id="BoxShape3D_fvtfi"]
size = Vector3(0.06, 0.1, 0.038)
[node name="Grabject" type="RigidBody3D"]
collision_layer = 11
collision_mask = 3
contact_monitor = true
max_contacts_reported = 3
script = ExtResource("1_xvy3x")
[node name="mesh_mugge" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.08, 0)
visible = false
mesh = ExtResource("2_myur1")
skeleton = NodePath("")
[node name="coffee" type="MeshInstance3D" parent="mesh_mugge"]
visible = false
mesh = ExtResource("3_jg5js")
skeleton = NodePath("../..")
[node name="shape_mugge" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.07, 0)
shape = SubResource("CylinderShape3D_wyf5s")
disabled = true
debug_fill = false
[node name="shape_mugge_secondary" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.11, 0.072, 0)
shape = SubResource("BoxShape3D_fvtfi")
disabled = true
debug_fill = false
[node name="DelayTimer" type="Timer" parent="."]
process_callback = 0
one_shot = true
[connection signal="timeout" from="DelayTimer" to="." method="hold2"]

11091
entities/guaC1BD.tmp Normal file

File diff suppressed because it is too large Load Diff

11091
entities/guaF181.tmp Normal file

File diff suppressed because it is too large Load Diff

219
entities/guard.gd Normal file
View File

@@ -0,0 +1,219 @@
extends CharacterBody3D
@export var walk_speed : float = 2.0
@export var run_speed : float = 5.0
@export var route : Node3D
var state_change_cooldown : float = 0.1
@export var alert_escalation_time : float = 3.0
@export var suspicion_decay_time : float = 1.0
var state : String = "patrol"
var current_waypoint : int = 0
var paused : bool = false
var turntoward : float = 0.0
var lastseenpos : Vector3
var pathupdateinterval : float = 0.75
var current_path: PackedVector3Array
@onready var default_3d_map_rid: RID = get_world_3d().get_navigation_map()
var current_path_index: int = 0
var current_path_point: Vector3
@onready var overheadstatus : Control = $StatusSprite/SubViewport/OverheadStatus
func _ready() -> void:
overheadstatus.set_3dots()
overheadstatus.set_timer(-1)
func _physics_process(delta: float) -> void:
process_alerts()
if state == "patrol" and !paused and route and route.get_child_count() > 0 and current_path.is_empty() and NavigationServer3D.map_is_active(default_3d_map_rid):
nextwaypoint()
if not is_on_floor():
velocity += get_gravity() * delta
if !current_path.is_empty() and (state == "patrol" or state == "pursue_walkto"):
current_path_point = current_path[current_path_index]
walk_toward(current_path_point)
if global_transform.origin.distance_to(current_path_point) <= 0.6:
current_path_index += 1
if current_path_index >= current_path.size():
clearpath()
if state == "patrol":
var wayedpoint = route.get_children()[current_waypoint]
if wayedpoint.pausetime > 0:
paused = true
$WaypointPauseTimer.start(wayedpoint.pausetime)
$AnimationPlayer.play(wayedpoint.animation)
if wayedpoint.turntoward == true:
turntoward = wayedpoint.global_rotation.y
else:
turntoward = $CharacterArmature.global_rotation.y
current_waypoint += 1
if current_waypoint > route.get_child_count()-1:
current_waypoint = 0
if state == "pursue_walkto":
print("done!")
state = "suspicion_start"
$StateChangeTimer.start(state_change_cooldown)
print("player sighted! state changed to suspicion_start")
overheadstatus.set_3dots()
overheadstatus.set_timer(-1)
else:
stand_still()
if paused and state == "patrol":
# overheadstatus.set_timer(100-(($WaypointPauseTimer.time_left / $WaypointPauseTimer.wait_time)*100))
if $CharacterArmature.global_rotation.y != turntoward:
lerp_toward(turntoward)
move_and_slide()
animate()
func animate():
if velocity.length() > 0:
$AnimationPlayer.play("Walk")
elif !paused:
$AnimationPlayer.play("Idle_Neutral")
func walk_toward(point: Vector3):
var direction = global_transform.origin.direction_to(point)
velocity.x = direction.x * walk_speed
velocity.z = direction.z * walk_speed
lerp_toward(atan2(velocity.x, velocity.z))
func stand_still():
velocity.x = 0
velocity.z = 0
func process_alerts():
var seeingplayer : bool
if state == "patrol":
seeingplayer = checksight()
if seeingplayer:
state = "suspicion_start"
$StateChangeTimer.start(state_change_cooldown)
print("player sighted! state changed to suspicion_start")
return
if state == "suspicion":
seeingplayer = checksight()
if !seeingplayer and $StateChangeTimer.is_stopped():
$StateChangeTimer.start(suspicion_decay_time)
elif seeingplayer:
if !$StateChangeTimer.is_stopped(): $StateChangeTimer.stop()
overheadstatus.set_questionmark()
var percent : float = 100 - (($AlertEscalationTimer.time_left / alert_escalation_time) * 100)
overheadstatus.set_timer(percent)
if velocity.length() == 0: lerp_toward(turntoward)
if state == "pursue_walkto":
seeingplayer = checksight()
if seeingplayer:
print("update path?")
if !current_path.is_empty() and (current_path[current_path.size()-1].distance_to(lastseenpos) > 1):
setpath(lastseenpos)
print("updated path!")
func nextwaypoint():
var waypoint = route.get_children()[current_waypoint]
var target_position: Vector3 = waypoint.global_transform.origin
setpath(target_position)
func setpath(target_position):
clearpath()
var start_position: Vector3 = global_transform.origin
current_path = NavigationServer3D.map_get_path(
default_3d_map_rid,
start_position,
target_position,
true
)
func clearpath():
current_path = []
current_path_index = 0
current_path_point = global_transform.origin
velocity.x = 0
velocity.z = 0
func checksight():
var seenthings = $CharacterArmature/SightCollider.get_overlapping_bodies()
if !seenthings.is_empty():
for item in seenthings:
if item.get_name() == "PlayerVisibilityShape":
if sightraycheck(item) == true:
return true
return false
func sightraycheck(target):
var radius = target.shape_owner_get_shape(0,0).radius
var height : float
var tramsorm : Transform3D
if target.get_parent().get_parent().crouched:
height = target.shape_owner_get_shape(1,0).height
tramsorm = target.shape_owner_get_transform(1).rotated(Vector3(0,1,0),target.global_rotation.y)
else:
height = target.shape_owner_get_shape(0,0).height
tramsorm = target.shape_owner_get_transform(0).rotated(Vector3(0,1,0),target.global_rotation.y)
var top = to_local(target.global_transform.origin - $CharacterArmature/SightCollider/SightRay.transform.origin + tramsorm.origin + Vector3(0, height/2, 0))
$CharacterArmature/SightCollider/SightRay.target_position = top
$CharacterArmature/SightCollider/SightRay.global_rotation = Vector3(0,0,0)
$CharacterArmature/SightCollider/SightRay.force_raycast_update()
if $CharacterArmature/SightCollider/SightRay.is_colliding():
if $CharacterArmature/SightCollider/SightRay.get_collider().get_name() == "PlayerVisibilityShape":
turntoward = (Vector2(target.global_transform.origin.z, target.global_transform.origin.x) - Vector2($CharacterArmature.global_transform.origin.z, $CharacterArmature.global_transform.origin.x)).angle()
lastseenpos = target.global_transform.origin
return true
return false
func lerp_toward(angle: float):
$CharacterArmature.global_rotation.y = lerp_angle($CharacterArmature.global_rotation.y, angle, 0.15)
func _on_state_change_timer_timeout() -> void:
$StateChangeTimer.stop()
$AlertEscalationTimer.stop()
if state == "suspicion_start":
state = "suspicion"
$AlertEscalationTimer.start(alert_escalation_time)
return
if state == "suspicion":
state = "patrol"
overheadstatus.set_3dots()
overheadstatus.set_timer(-1)
return
if state == "pursue_start":
setpath(lastseenpos)
state = "pursue_walkto"
return
func _on_alert_escalation_timer_timeout() -> void:
$AlertEscalationTimer.stop()
if state == "suspicion":
state = "pursue_start"
$StateChangeTimer.start(state_change_cooldown)
overheadstatus.set_timer(-1)
overheadstatus.set_exclamationmark()
func _on_waypoint_pause_timer_timeout() -> void:
$WaypointPauseTimer.stop()
if paused:
paused = false

1
entities/guard.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://d0exmjrldmro1

11146
entities/guard.tscn Normal file

File diff suppressed because it is too large Load Diff

28
entities/hud.gd Normal file
View File

@@ -0,0 +1,28 @@
extends CanvasLayer
#dynamic sizes for elements as proportion of screen height
@export var margin_spacing : float = (1.0/25.0)
@export var size_text_heading : float = (1.0/8.0)
@export var size_text_prompt_selected : float = (1.0/12.0)
@export var interact_icon_size : float = (128.0/720.0)
func _ready() -> void:
set_proportions()
get_viewport().size_changed.connect(set_proportions)
$icon_eye.self_modulate.a = 0.3
$icon_hand.self_modulate.a = 0.3
pass
func _process(delta: float) -> void:
pass
# adjust UI element sizes to be proportionate to window height
func set_proportions():
var screenwidth : float = get_viewport().size.x
var screenheight : float = get_viewport().size.y
$hud_top.add_theme_constant_override("margin_top", int(screenheight * margin_spacing))
$hud_top/center/testtext.label_settings.set_font_size(int(screenheight * size_text_heading))
$hud_bottom.add_theme_constant_override("margin_bottom", int(screenheight * margin_spacing))
$icon_eye.set_size(Vector2(int(screenheight * interact_icon_size), int(screenheight * interact_icon_size)))
$icon_hand.set_size(Vector2(int(screenheight * interact_icon_size), int(screenheight * interact_icon_size)))
$hud_bottom/promptbox/prompt_primary.label_settings.set_font_size(int(screenheight * size_text_prompt_selected))

1
entities/hud.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://d1a87nfi5lnhd

108
entities/hud.tscn Normal file
View File

@@ -0,0 +1,108 @@
[gd_scene load_steps=10 format=3 uid="uid://d2nji886vjn5x"]
[ext_resource type="Script" uid="uid://d1a87nfi5lnhd" path="res://entities/hud.gd" id="1_37p78"]
[ext_resource type="FontFile" uid="uid://ch80yhbam0jo2" path="res://fonts/Tangerine-Bold.ttf" id="2_64ctp"]
[ext_resource type="FontFile" uid="uid://bhpgvdh6eyojj" path="res://fonts/CrimsonText-Italic.ttf" id="3_mcea6"]
[ext_resource type="Texture2D" uid="uid://b06wrpqbpqxla" path="res://images/eyecon.png" id="4_npr4g"]
[ext_resource type="Texture2D" uid="uid://dynnluyu4a2w4" path="res://images/handicon.png" id="5_jqn4v"]
[sub_resource type="LabelSettings" id="LabelSettings_8sq4i"]
font = ExtResource("2_64ctp")
font_size = 96
[sub_resource type="LabelSettings" id="LabelSettings_jqn4v"]
font = ExtResource("3_mcea6")
font_size = 68
font_color = Color(1, 1, 1, 0.501961)
outline_size = 16
outline_color = Color(0, 0, 0, 0.501961)
[sub_resource type="LabelSettings" id="LabelSettings_fpuge"]
font = ExtResource("3_mcea6")
font_size = 80
font_color = Color(1, 1, 1, 0.627451)
outline_size = 16
outline_color = Color(0, 0, 0, 0.627451)
[sub_resource type="LabelSettings" id="LabelSettings_npr4g"]
font = ExtResource("3_mcea6")
font_size = 96
outline_size = 16
outline_color = Color(0, 0, 0, 1)
[node name="hud" type="CanvasLayer"]
script = ExtResource("1_37p78")
[node name="hud_top" type="MarginContainer" parent="."]
anchors_preset = 10
anchor_right = 1.0
offset_bottom = 96.0
grow_horizontal = 2
size_flags_horizontal = 3
size_flags_vertical = 2
[node name="center" type="CenterContainer" parent="hud_top"]
layout_mode = 2
[node name="testtext" type="Label" parent="hud_top/center"]
visible = false
layout_mode = 2
text = "Nerd Spotted!"
label_settings = SubResource("LabelSettings_8sq4i")
[node name="hud_bottom" type="MarginContainer" parent="."]
anchors_preset = 12
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 0
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/margin_bottom = 24
[node name="promptbox" type="VBoxContainer" parent="hud_bottom"]
layout_mode = 2
theme_override_constants/separation = -8
[node name="prompt_tertiary" type="Label" parent="hud_bottom/promptbox"]
visible = false
layout_mode = 2
text = "Do thing"
label_settings = SubResource("LabelSettings_jqn4v")
horizontal_alignment = 1
vertical_alignment = 1
[node name="prompt_secondary" type="Label" parent="hud_bottom/promptbox"]
visible = false
layout_mode = 2
text = "Do thing"
label_settings = SubResource("LabelSettings_fpuge")
horizontal_alignment = 1
vertical_alignment = 1
[node name="prompt_primary" type="Label" parent="hud_bottom/promptbox"]
visible = false
layout_mode = 2
text = "Do thing"
label_settings = SubResource("LabelSettings_npr4g")
horizontal_alignment = 1
vertical_alignment = 1
[node name="icon_eye" type="TextureRect" parent="."]
visible = false
offset_right = 192.0
offset_bottom = 192.0
pivot_offset = Vector2(64, 64)
texture = ExtResource("4_npr4g")
expand_mode = 1
stretch_mode = 4
[node name="icon_hand" type="TextureRect" parent="."]
visible = false
offset_right = 192.0
offset_bottom = 192.0
pivot_offset = Vector2(64, 64)
texture = ExtResource("5_jqn4v")
expand_mode = 1
stretch_mode = 4

40
entities/note.gd Normal file
View File

@@ -0,0 +1,40 @@
extends Control
var handwritten_text_size : float = (1.0/25.0)
var handwritten_margins : float = (1.0/15.0)
var handwritten_page_width : float = (3.0/4.0)
var handwritten_linespacing : float = -(1.1)
func setup(viewportsize, style, thetext):
set_size(viewportsize)
if style == "handwritten":
$handwritten/page.custom_minimum_size.x = int(viewportsize.x * handwritten_page_width)
$handwritten/page/margins/thetext.add_theme_font_size_override("normal_font_size", int(viewportsize.y * handwritten_text_size))
$handwritten/page/margins/thetext.add_theme_constant_override("line_separation", int((viewportsize.y * handwritten_text_size) * handwritten_linespacing))
$handwritten/page/margins.add_theme_constant_override("margin_top", int(viewportsize.y * handwritten_margins))
$handwritten/page/margins.add_theme_constant_override("margin_left", int(viewportsize.y * handwritten_margins))
$handwritten/page/margins.add_theme_constant_override("margin_right", int(viewportsize.y * handwritten_margins))
$handwritten.visible = true
else:
print(style + " is an invalid note style!")
pass
populate_text(style,thetext)
func _process(delta: float) -> void:
if visible and Input.is_action_just_pressed("ui_cancel"):
visible = false
get_tree().paused = false
get_parent().get_node("hud").visible = true
func populate_text(style,thetext):
var thepage : RichTextLabel
if style == "handwritten":
thepage = $handwritten/page/margins/thetext
else:
print(style + " is an invalid note style!")
pass
thepage.clear()
thepage.append_text(thetext)

1
entities/note.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://q4cj4ds7h7yu

65
entities/note.tscn Normal file
View File

@@ -0,0 +1,65 @@
[gd_scene load_steps=4 format=3 uid="uid://mmfinssr21yy"]
[ext_resource type="Script" uid="uid://q4cj4ds7h7yu" path="res://entities/note.gd" id="1_g4cjv"]
[ext_resource type="FontVariation" uid="uid://cq2ossjetoslp" path="res://fonts/handwriting.tres" id="2_gb8vh"]
[sub_resource type="Theme" id="Theme_4dkrx"]
default_font = ExtResource("2_gb8vh")
default_font_size = 40
[node name="note" type="Control"]
process_mode = 3
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_right = -640.0
offset_bottom = -360.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_g4cjv")
[node name="handwritten" type="HBoxContainer" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 0
[node name="ColorRect" type="ColorRect" parent="handwritten"]
layout_mode = 2
size_flags_horizontal = 3
color = Color(0, 0, 0, 1)
[node name="page" type="ColorRect" parent="handwritten"]
custom_minimum_size = Vector2(960, 0)
layout_mode = 2
color = Color(0.85, 0.833, 0.748, 1)
[node name="margins" type="MarginContainer" parent="handwritten/page"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 48
theme_override_constants/margin_top = 48
theme_override_constants/margin_right = 48
[node name="thetext" type="RichTextLabel" parent="handwritten/page/margins"]
layout_mode = 2
theme = SubResource("Theme_4dkrx")
theme_override_colors/default_color = Color(0.101961, 0.101961, 0.101961, 1)
theme_override_constants/line_separation = -36
bbcode_enabled = true
text = "sammed ple"
scroll_active = false
[node name="ColorRect3" type="ColorRect" parent="handwritten"]
layout_mode = 2
size_flags_horizontal = 3
color = Color(0, 0, 0, 1)

384
entities/npc.gd Normal file
View File

@@ -0,0 +1,384 @@
extends CharacterBody3D
var npc : bool = true
@export var waypoint_route : Node3D = null
var waypoints : Array
var walk_speed : float = 2.0
var run_speed : float = 5.0
var time_suspicionbuild : float = 3.0
var time_suspiciondecay : float = 2.0
var time_cooldown : float = 2.0
# var ragdolling : bool = false
var seeing_player : bool = false
var move_this_frame : bool = false
var unpause_this_frame : bool = false
var on_route : bool = false
@export var behavior_type : String = "guard"
var state : String = "default"
var current_waypoint : int = -1
var paused : bool = false
var pauseanim : String
var pauseturn : bool
var pauseangle : float
var lastseenpos : Vector3
var pathupdateinterval : float = 0.25
var player : Node
@export var appearance : String = "guard"
var current_path : PackedVector3Array
@onready var default_3d_map_rid : RID = get_world_3d().get_navigation_map()
var current_path_index : int = 0
var current_path_point : Vector3
var path_end_point : Vector3
@onready var overheadstatus : Control = $StatusSprite/SubViewport/OverheadStatus
func _ready() -> void:
overheadstatus.set_nothing()
overheadstatus.set_timer(-1)
call_deferred("init_route")
$Timers/WaypointPause.timeout.connect(timeout_waypointpause)
$Timers/Suspicion.timeout.connect(timeout_suspicion)
$Timers/Sight.timeout.connect(timeout_sight)
if appearance == "guard":
$CharacterArmature/Skeleton3D/head_guard.visible = true
$CharacterArmature/Skeleton3D/body_guard.visible = true
$CharacterArmature/Skeleton3D/feet_guard.visible = true
$CharacterArmature/Skeleton3D/legs_guard.visible = true
elif appearance == "barista":
$CharacterArmature/Skeleton3D/head_barista.visible = true
$CharacterArmature/Skeleton3D/body_barista.visible = true
$CharacterArmature/Skeleton3D/feet_barista.visible = true
$CharacterArmature/Skeleton3D/legs_barista.visible = true
func _physics_process(delta: float) -> void:
seeing_player = checksight()
ai_process()
if move_this_frame:
movement_process(delta)
move_and_slide()
animate()
func impact():
# ragdolling = true
state = "unconscious"
set_collision_layer_value(1,0)
# $CharacterArmature/Skeleton3D/ragdoll.active = true
# $CharacterArmature/Skeleton3D/ragdoll.physical_bones_start_simulation()
$AnimationPlayer.play("Death")
stand_still()
clearpath()
func ai_process():
if unpause_this_frame:
paused = false
unpause_this_frame = false
if state == "to_default":
state = "default"
elif state == "to_cooldown":
clearpath()
state = "cooldown"
$Timers/Suspicion.stop()
$Timers/Suspicion.start(time_cooldown)
elif state == "unconscious":
on_route = false
$Timers/Suspicion.stop()
$Timers/Sight.stop()
overheadstatus.set_nothing()
overheadstatus.set_timer(-1)
if behavior_type == "guard":
if state == "suspicion_escalatecheck":
on_route = false
$Timers/Suspicion.stop()
$Timers/Sight.stop()
if seeing_player:
setpath(lastseenpos)
overheadstatus.set_exclamationpoint()
overheadstatus.set_timer(-1)
$Timers/Sight.start(pathupdateinterval)
state = "pursuit"
else:
state = "default"
elif state == "pursuit_updatepath":
$Timers/Sight.stop()
$Timers/Sight.start(pathupdateinterval)
setpath(lastseenpos)
state = "pursuit"
elif state == "cooldown_end":
$Timers/Suspicion.stop()
$Timers/Sight.stop()
on_route = true
if len(waypoints) > 1:
current_waypoint = nearest_waypoint()
state = "default"
if state == "default":
overheadstatus.set_nothing()
overheadstatus.set_timer(-1)
if paused:
$AnimationPlayer.play(pauseanim)
if pauseturn == true:
lerp_toward(pauseangle)
if seeing_player:
$Timers/Suspicion.stop()
$Timers/Suspicion.start(time_suspicionbuild)
state = "suspicion"
if paused:
unpause_this_frame = true
$Timers/WaypointPause.stop()
else:
on_route = true
move_this_frame = true
elif state == "suspicion":
clearpath()
on_route = false
overheadstatus.set_questionmark()
var timerpercent : float = ((time_suspicionbuild - $Timers/Suspicion.time_left) / time_suspicionbuild) * 100
overheadstatus.set_timer(timerpercent)
lerp_toward(angle_toward(lastseenpos))
if seeing_player:
if $Timers/Suspicion.paused:
$Timers/Suspicion.paused = false
if !$Timers/Sight.is_stopped():
$Timers/Sight.stop()
$Timers/Sight.start(time_suspiciondecay)
elif !seeing_player:
if !$Timers/Suspicion.paused:
$Timers/Suspicion.paused = true
if $Timers/Sight.is_stopped():
$Timers/Sight.start(time_suspiciondecay)
elif state == "pursuit":
if global_transform.origin.distance_to(player.global_transform.origin) <= 0.8:
$Timers/Sight.stop()
state = "to_cooldown"
elif global_transform.origin.distance_to(path_end_point) <= 0.5:
$Timers/Sight.stop()
pauseangle = $CharacterArmature.global_rotation.y - deg_to_rad(90)
clearpath()
state = "pursuit_lookleft"
else:
on_route = false
if !current_path.is_empty():
move_this_frame = true
elif state == "pursuit_lookleft":
on_route = false
if seeing_player:
state = "suspicion_escalatecheck"
else:
lerp_toward(pauseangle, 0.05)
var snappedangle = snapped(fposmod($CharacterArmature.global_rotation.y, TAU), 0.01)
if snappedangle == snapped(fposmod(pauseangle, TAU), 0.01):
pauseangle = $CharacterArmature.global_rotation.y + deg_to_rad(180)
state = "pursuit_lookright"
elif state == "pursuit_lookright":
on_route = false
if seeing_player:
state = "suspicion_escalatecheck"
else:
lerp_toward(pauseangle, 0.05)
var snappedangle = snapped(fposmod($CharacterArmature.global_rotation.y, TAU), 0.01)
if snappedangle == snapped(fposmod(pauseangle, TAU), 0.01):
pauseangle = $CharacterArmature.global_rotation.y + deg_to_rad(90)
state = "pursuit_lookback"
elif state == "pursuit_lookback":
on_route = false
if seeing_player:
state = "suspicion_escalatecheck"
else:
lerp_toward(pauseangle, 0.05)
var snappedangle = snapped(fposmod($CharacterArmature.global_rotation.y, TAU), 0.01)
if snappedangle == snapped(fposmod(pauseangle, TAU), 0.01):
state = "to_cooldown"
elif state == "cooldown":
overheadstatus.set_3dots()
overheadstatus.subtractive = true
var percent : float = ($Timers/Suspicion.time_left / time_suspiciondecay) * 100
overheadstatus.set_timer(percent)
func movement_process(delta):
if not is_on_floor():
velocity += get_gravity() * delta
if on_route and len(waypoints) == 1 and (global_transform.origin.distance_to(waypoints[0].global_transform.origin) < 0.6):
if $CharacterArmature.global_rotation.y != waypoints[0].global_rotation.y:
lerp_toward(waypoints[0].global_rotation.y)
stand_still()
elif !current_path.is_empty():
current_path_point = current_path[current_path_index]
if !paused:
walk_toward(current_path_point)
if global_transform.origin.distance_to(current_path_point) <= 0.5:
current_path_index += 1
if current_path_index >= current_path.size():
if on_route:
var wayedpoint = waypoints[current_waypoint]
if wayedpoint.pausetime > 0:
paused = true
$Timers/WaypointPause.start(wayedpoint.pausetime)
pauseanim = wayedpoint.animation
if wayedpoint.turntoward == true:
pauseturn = true
pauseangle = wayedpoint.global_rotation.y
else:
pauseturn = false
current_waypoint += 1
if current_waypoint > len(waypoints)-1:
current_waypoint = 0
nextwaypoint()
else:
clearpath()
elif NavigationServer3D.map_get_iteration_id(default_3d_map_rid) != 0 and current_path.is_empty() and on_route:
nextwaypoint()
else:
stand_still()
move_this_frame = false
func animate():
if state == "unconscious":
pass
elif velocity.length() > 0:
$AnimationPlayer.play("Walk")
elif !paused or state != "default":
$AnimationPlayer.play("Idle_Neutral")
func angle_toward(target : Vector3):
return (Vector2(target.z, target.x) - Vector2($CharacterArmature.global_transform.origin.z, $CharacterArmature.global_transform.origin.x)).angle()
func walk_toward(point: Vector3):
var direction = global_transform.origin.direction_to(point)
velocity.x = direction.x * walk_speed
velocity.z = direction.z * walk_speed
lerp_toward(atan2(velocity.x, velocity.z))
func stand_still():
velocity.x = 0
velocity.z = 0
func nextwaypoint():
var waypoint = waypoints[current_waypoint]
var target_position: Vector3 = waypoint.global_transform.origin
setpath(target_position)
func setpath(target_position):
clearpath()
var start_position: Vector3 = global_transform.origin
current_path = NavigationServer3D.map_get_path(
default_3d_map_rid,
start_position,
target_position,
true
)
path_end_point = current_path[len(current_path)-1]
func clearpath():
current_path = []
current_path_index = 0
current_path_point = global_transform.origin
velocity.x = 0
velocity.z = 0
func checksight():
var seenthings = $CharacterArmature/SightCollider.get_overlapping_bodies()
if !seenthings.is_empty():
for item in seenthings:
if item.get_name() == "PlayerVisibilityShape":
player = item.get_parent().get_parent()
if sightraycheck(item) == true:
return true
return false
func sightraycheck(target):
# var radius = target.shape_owner_get_shape(0,0).radius
var height : float
var tramsorm : Transform3D
if target.get_parent().get_parent().get_name() == "Player" and player.crouched:
height = target.shape_owner_get_shape(1,0).height
tramsorm = target.shape_owner_get_transform(1).rotated(Vector3(0,1,0),target.global_rotation.y)
else:
height = target.shape_owner_get_shape(0,0).height
tramsorm = target.shape_owner_get_transform(0).rotated(Vector3(0,1,0),target.global_rotation.y)
var top = to_local(target.global_transform.origin - $CharacterArmature/SightCollider/SightRay.transform.origin + tramsorm.origin + Vector3(0, (height/2)-0.1, 0))
$CharacterArmature/SightCollider/SightRay.target_position = top
$CharacterArmature/SightCollider/SightRay.global_rotation = global_rotation
$CharacterArmature/SightCollider/SightRay.force_raycast_update()
if $CharacterArmature/SightCollider/SightRay.is_colliding():
if $CharacterArmature/SightCollider/SightRay.get_collider().get_name() == "PlayerVisibilityShape":
lastseenpos = target.global_transform.origin
return true
return false
func lerp_toward(angle: float, speed = 0.15):
$CharacterArmature.global_rotation.y = lerp_angle($CharacterArmature.global_rotation.y, angle, speed)
func get_waypoints(path: Node3D):
for point in path.get_children():
waypoints.append(point)
func nearest_waypoint():
var nearest : Vector3 = waypoints[0].global_transform.origin
var nearest_index : int = 0
for point in len(waypoints):
if global_transform.origin.distance_to(waypoints[point].global_transform.origin) < global_transform.origin.distance_to(nearest):
nearest = waypoints[point].global_transform.origin
nearest_index = point
return nearest_index
func init_route() -> void:
if waypoint_route == null:
var startpos = Marker3D.new()
get_tree().current_scene.add_child(startpos)
startpos.set_global_transform(global_transform)
startpos.set_script(preload("res://scripts/waypoint.gd"))
waypoints.append(startpos)
else:
get_waypoints(waypoint_route)
func timeout_waypointpause() -> void:
if paused:
unpause_this_frame = true
func timeout_suspicion() -> void:
if behavior_type == "guard":
if state == "suspicion":
state = "suspicion_escalatecheck"
if state == "pursuit_lookaround":
state = "to_cooldown"
elif state == "cooldown":
state = "cooldown_end"
func timeout_sight() -> void:
if behavior_type == "guard":
if state == "suspicion":
$Timers/Sight.stop()
state = "to_default"
elif state == "pursuit":
$Timers/Sight.stop()
$Timers/Sight.start(pathupdateinterval)
if path_end_point.distance_to(lastseenpos) >= 2:
state = "pursuit_updatepath"

1
entities/npc.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://dafn06mxlctnr

11177
entities/npc.tscn Normal file

File diff suppressed because it is too large Load Diff

242
entities/npc_backup.gd Normal file
View File

@@ -0,0 +1,242 @@
extends CharacterBody3D
var walk_speed : float = 2.0
var run_speed : float = 5.0
@export var waypoint_route : Node3D
var state_change_cooldown : float = 0.1
var alert_escalation_time : float = 3.0
var suspicion_decay_time : float = 1.0
@export var behavior_type : String = "frozen"
var state : String = "patrol"
var current_waypoint : int = 0
var paused : bool = false
var turntoward : float = 0.0
var lastseenpos : Vector3
var pathupdateinterval : float = 0.75
@export var appearance : String = "guard"
var current_path: PackedVector3Array
@onready var default_3d_map_rid: RID = get_world_3d().get_navigation_map()
var current_path_index: int = 0
var current_path_point: Vector3
@onready var overheadstatus : Control = $StatusSprite/SubViewport/OverheadStatus
func _ready() -> void:
overheadstatus.set_nothing()
overheadstatus.set_timer(-1)
if appearance == "guard":
$CharacterArmature/Skeleton3D/head_guard.visible = true
$CharacterArmature/Skeleton3D/body_guard.visible = true
$CharacterArmature/Skeleton3D/feet_guard.visible = true
$CharacterArmature/Skeleton3D/legs_guard.visible = true
elif appearance == "barista":
$CharacterArmature/Skeleton3D/head_barista.visible = true
$CharacterArmature/Skeleton3D/body_barista.visible = true
$CharacterArmature/Skeleton3D/feet_barista.visible = true
$CharacterArmature/Skeleton3D/legs_barista.visible = true
func _physics_process(delta: float) -> void:
if behavior_type == "frozen":
sight_test()
elif behavior_type == "guard":
process_alerts()
if not is_on_floor():
velocity += get_gravity() * delta
if !current_path.is_empty() and behavior_type == "guard" and (state == "patrol" or state == "pursue_walkto"):
current_path_point = current_path[current_path_index]
walk_toward(current_path_point)
if global_transform.origin.distance_to(current_path_point) <= 0.6:
current_path_index += 1
if current_path_index >= current_path.size():
clearpath()
if state == "patrol":
var wayedpoint = waypoint_route.get_children()[current_waypoint]
if wayedpoint.pausetime > 0:
paused = true
$WaypointPauseTimer.start(wayedpoint.pausetime)
$AnimationPlayer.play(wayedpoint.animation)
if wayedpoint.turntoward == true:
turntoward = wayedpoint.global_rotation.y
else:
turntoward = $CharacterArmature.global_rotation.y
current_waypoint += 1
if current_waypoint > waypoint_route.get_child_count()-1:
current_waypoint = 0
if state == "pursue_walkto":
print("done!")
state = "suspicion_start"
$StateChangeTimer.start(state_change_cooldown)
print("player sighted! state changed to suspicion_start")
overheadstatus.set_3dots()
overheadstatus.set_timer(-1)
else:
stand_still()
if paused and state == "patrol":
# overheadstatus.set_timer(100-(($WaypointPauseTimer.time_left / $WaypointPauseTimer.wait_time)*100))
if $CharacterArmature.global_rotation.y != turntoward:
lerp_toward(turntoward)
move_and_slide()
animate()
func animate():
if velocity.length() > 0:
$AnimationPlayer.play("Walk")
elif !paused:
$AnimationPlayer.play("Idle_Neutral")
func walk_toward(point: Vector3):
var direction = global_transform.origin.direction_to(point)
velocity.x = direction.x * walk_speed
velocity.z = direction.z * walk_speed
lerp_toward(atan2(velocity.x, velocity.z))
func stand_still():
velocity.x = 0
velocity.z = 0
func sight_test():
var seeingplayer : bool
seeingplayer = checksight()
if seeingplayer:
overheadstatus.set_exclamationmark()
else:
overheadstatus.set_nothing()
func process_alerts():
var seeingplayer : bool
if state == "patrol":
seeingplayer = checksight()
if seeingplayer:
state = "suspicion_start"
$StateChangeTimer.start(state_change_cooldown)
print("player sighted! state changed to suspicion_start")
return
if state == "suspicion":
seeingplayer = checksight()
if !seeingplayer and $StateChangeTimer.is_stopped():
$StateChangeTimer.start(suspicion_decay_time)
elif seeingplayer:
if !$StateChangeTimer.is_stopped(): $StateChangeTimer.stop()
overheadstatus.set_questionmark()
var percent : float = 100 - (($AlertEscalationTimer.time_left / alert_escalation_time) * 100)
overheadstatus.set_timer(percent)
if velocity.length() == 0: lerp_toward(turntoward)
if state == "pursue_walkto":
seeingplayer = checksight()
if seeingplayer:
print("update path?")
if !current_path.is_empty() and (current_path[current_path.size()-1].distance_to(lastseenpos) > 1):
setpath(lastseenpos)
print("updated path!")
func nextwaypoint():
var waypoint = waypoint_route.get_children()[current_waypoint]
var target_position: Vector3 = waypoint.global_transform.origin
setpath(target_position)
func setpath(target_position):
clearpath()
var start_position: Vector3 = global_transform.origin
current_path = NavigationServer3D.map_get_path(
default_3d_map_rid,
start_position,
target_position,
true
)
func clearpath():
current_path = []
current_path_index = 0
current_path_point = global_transform.origin
velocity.x = 0
velocity.z = 0
func checksight():
var seenthings = $CharacterArmature/SightCollider.get_overlapping_bodies()
if !seenthings.is_empty():
for item in seenthings:
if item.get_name() == "PlayerVisibilityShape":
if sightraycheck(item) == true:
return true
return false
func sightraycheck(target):
var radius = target.shape_owner_get_shape(0,0).radius
var height : float
var tramsorm : Transform3D
if target.get_parent().get_parent().crouched:
height = target.shape_owner_get_shape(1,0).height
tramsorm = target.shape_owner_get_transform(1).rotated(Vector3(0,1,0),target.global_rotation.y)
else:
height = target.shape_owner_get_shape(0,0).height
tramsorm = target.shape_owner_get_transform(0).rotated(Vector3(0,1,0),target.global_rotation.y)
var top = to_local(target.global_transform.origin - $CharacterArmature/SightCollider/SightRay.transform.origin + tramsorm.origin + Vector3(0, (height/2)-0.1, 0))
$CharacterArmature/SightCollider/SightRay.target_position = top
# $CharacterArmature/SightCollider/SightRay.global_rotation = Vector3(0,0,0)
$CharacterArmature/SightCollider/SightRay.force_raycast_update()
if $CharacterArmature/SightCollider/SightRay.is_colliding():
if $CharacterArmature/SightCollider/SightRay.get_collider().get_name() == "PlayerVisibilityShape":
turntoward = (Vector2(target.global_transform.origin.z, target.global_transform.origin.x) - Vector2($CharacterArmature.global_transform.origin.z, $CharacterArmature.global_transform.origin.x)).angle()
lastseenpos = target.global_transform.origin
return true
return false
func lerp_toward(angle: float):
$CharacterArmature.global_rotation.y = lerp_angle($CharacterArmature.global_rotation.y, angle, 0.15)
func _on_state_change_timer_timeout() -> void:
$StateChangeTimer.stop()
$AlertEscalationTimer.stop()
if state == "suspicion_start":
state = "suspicion"
$AlertEscalationTimer.start(alert_escalation_time)
return
if state == "suspicion":
state = "patrol"
overheadstatus.set_3dots()
overheadstatus.set_timer(-1)
return
if state == "pursue_start":
setpath(lastseenpos)
state = "pursue_walkto"
return
func _on_alert_escalation_timer_timeout() -> void:
$AlertEscalationTimer.stop()
if state == "suspicion":
state = "pursue_start"
$StateChangeTimer.start(state_change_cooldown)
overheadstatus.set_timer(-1)
overheadstatus.set_exclamationmark()
func _on_waypoint_pause_timer_timeout() -> void:
$WaypointPauseTimer.stop()
if paused:
paused = false

View File

@@ -0,0 +1 @@
uid://drkv453di207j

819
entities/player.tscn Normal file
View File

@@ -0,0 +1,819 @@
[gd_scene load_steps=46 format=3 uid="uid://cr2ersq7g6q6f"]
[ext_resource type="Script" uid="uid://cf54mpemercku" path="res://scripts/player.gd" id="1_hn6di"]
[ext_resource type="Script" uid="uid://dlqj8j4c0bk6x" path="res://scripts/springarmpivot.gd" id="2_f8ihf"]
[ext_resource type="ArrayMesh" uid="uid://domxqcvtjd4w5" path="res://models/maskmaker_head_teethtest.res" id="3_ajlxp"]
[ext_resource type="ArrayMesh" uid="uid://b2tqfkx5xws01" path="res://models/f_casual_torso.res" id="4_7a734"]
[ext_resource type="ArrayMesh" uid="uid://dulh2u05niok6" path="res://models/f_casual_feet.res" id="5_6syjw"]
[ext_resource type="ArrayMesh" uid="uid://fidd5byr6t8k" path="res://models/f_casual_legs.res" id="6_7eie4"]
[ext_resource type="Animation" uid="uid://jbp27ebqqosr" path="res://models/animations/maskmaker_trueform/Death.res" id="7_f4uup"]
[ext_resource type="Script" uid="uid://bt61fg1c4tsqc" path="res://scripts/itemhold_boneattachpoint.gd" id="7_sn2x3"]
[ext_resource type="Animation" uid="uid://vusgjwf3d0yd" path="res://models/animations/maskmaker_trueform/Gun_Shoot.res" id="8_tfo1v"]
[ext_resource type="ArrayMesh" uid="uid://w0jl7jy3oufh" path="res://models/props/mug.res" id="8_y10x8"]
[ext_resource type="Animation" uid="uid://bnudv35afdjgd" path="res://models/animations/maskmaker_trueform/HitRecieve.res" id="9_m4wbt"]
[ext_resource type="Animation" uid="uid://f62jxev0nrm8" path="res://models/animations/maskmaker_trueform/HitRecieve_2.res" id="10_b7cli"]
[ext_resource type="Animation" uid="uid://bi36j4ou7kqnl" path="res://models/animations/maskmaker_trueform/Idle.res" id="11_iaw83"]
[ext_resource type="Animation" uid="uid://dijis6d0emvch" path="res://models/animations/maskmaker_trueform/Idle_Gun.res" id="12_1pw34"]
[ext_resource type="Animation" uid="uid://dwmu82kji6tef" path="res://models/animations/maskmaker_trueform/Idle_Gun_Pointing.res" id="13_sok22"]
[ext_resource type="Animation" uid="uid://dybkfslpyyobw" path="res://models/animations/maskmaker_trueform/Idle_Gun_Shoot.res" id="14_yl87s"]
[ext_resource type="Animation" uid="uid://blhu58fyhcgyp" path="res://models/animations/maskmaker_trueform/Idle_Neutral.res" id="15_yp6jd"]
[ext_resource type="Animation" uid="uid://7u7bmue6r57k" path="res://models/animations/maskmaker_trueform/Idle_Sword.res" id="16_vx2rq"]
[ext_resource type="Animation" uid="uid://c5fbhuxvegbe4" path="res://models/animations/maskmaker_trueform/Interact.res" id="17_ok2yj"]
[ext_resource type="Animation" uid="uid://dxrdux26vwnqx" path="res://models/animations/maskmaker_trueform/Kick_Left.res" id="18_pgq6x"]
[ext_resource type="Animation" uid="uid://djasroa8v31cw" path="res://models/animations/maskmaker_trueform/Kick_Right.res" id="19_a0x8u"]
[ext_resource type="Animation" uid="uid://ba3le0rakjef4" path="res://models/animations/maskmaker_trueform/Punch_Left.res" id="20_tbysw"]
[ext_resource type="Animation" uid="uid://vy5oud37qved" path="res://models/animations/maskmaker_trueform/Punch_Right.res" id="21_o8mob"]
[ext_resource type="Animation" uid="uid://dn7smrqyyh87m" path="res://models/animations/maskmaker_trueform/Roll.res" id="22_wddmx"]
[ext_resource type="Animation" uid="uid://b0klplxkilipl" path="res://models/animations/maskmaker_trueform/Run.res" id="23_mn80a"]
[ext_resource type="Animation" uid="uid://ct327pdmg7bok" path="res://models/animations/maskmaker_trueform/Run_Back.res" id="24_6v4wt"]
[ext_resource type="Animation" uid="uid://du5xqj5vsrp4j" path="res://models/animations/maskmaker_trueform/Run_Left.res" id="25_htvtb"]
[ext_resource type="Animation" uid="uid://obhs8ck5losv" path="res://models/animations/maskmaker_trueform/Run_Right.res" id="26_bay54"]
[ext_resource type="Animation" uid="uid://dvlc55uhudiy4" path="res://models/animations/maskmaker_trueform/Run_Shoot.res" id="27_d38uh"]
[ext_resource type="Animation" uid="uid://dyjilyqxsubny" path="res://models/animations/maskmaker_trueform/Sword_Slash.res" id="28_uypnh"]
[ext_resource type="Animation" uid="uid://bhl18hdb88aee" path="res://models/animations/maskmaker_trueform/Walk.res" id="29_8imsx"]
[ext_resource type="Animation" uid="uid://cmessh42b7k3e" path="res://models/animations/maskmaker_trueform/Wave.res" id="30_xqtbc"]
[ext_resource type="Animation" uid="uid://bwn4wjtgstxjn" path="res://models/animations/maskmaker_trueform/crouch/Idle_Neutral.res" id="31_t1krq"]
[ext_resource type="Animation" uid="uid://o87efrly0cww" path="res://models/animations/maskmaker_trueform/crouch/Walk.res" id="32_06nbx"]
[ext_resource type="Animation" uid="uid://1rygf1noof4t" path="res://models/animations/idleneutral_grab.res" id="33_7kmwv"]
[ext_resource type="Animation" uid="uid://bc83kd3ixiumv" path="res://models/animations/idleneutral_grablow.res" id="34_pt6f3"]
[ext_resource type="PackedScene" uid="uid://mmfinssr21yy" path="res://entities/note.tscn" id="37_1sc42"]
[ext_resource type="PackedScene" uid="uid://d2nji886vjn5x" path="res://entities/hud.tscn" id="38_0t50q"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_k6p7c"]
radius = 0.283343
height = 1.84319
[sub_resource type="Skin" id="Skin_ko28d"]
resource_name = "Skin"
bind_count = 62
bind/0/name = &"Root"
bind/0/bone = -1
bind/0/pose = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.0722887)
bind/1/name = &"Body"
bind/1/bone = -1
bind/1/pose = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.000453209, -0.973595, -0.0682938)
bind/2/name = &"Hips"
bind/2/bone = -1
bind/2/pose = Transform3D(1, 0, 0, 0, 0.990359, -0.138524, 0, 0.138524, 0.990359, 0.000343775, -0.981851, -0.21588)
bind/3/name = &"Abdomen"
bind/3/bone = -1
bind/3/pose = Transform3D(1, 0, 0, 0, 0.984263, -0.176709, 0, 0.176709, 0.984263, 0.000343775, -1.0788, -0.257781)
bind/4/name = &"Torso"
bind/4/bone = -1
bind/4/pose = Transform3D(1, 2.27619e-10, -2.23185e-10, -2.23257e-10, 0.999812, 0.0193551, 2.27548e-10, -0.0193551, 0.999813, 0.000343775, -1.24743, -0.0138942)
bind/5/name = &"Chest"
bind/5/bone = -1
bind/5/pose = Transform3D(1, 4.10855e-10, -4.37478e-10, -4.02495e-10, 0.999821, 0.0189413, 4.45182e-10, -0.0189413, 0.999821, 0.000343775, -1.37783, -0.0144646)
bind/6/name = &"Neck"
bind/6/bone = -1
bind/6/pose = Transform3D(1, 3.40105e-12, -8.3216e-17, -3.40109e-12, 1, 1.49012e-08, 8.32604e-17, 1.86264e-09, 1, 0.000343775, -1.51053, -0.0430837)
bind/7/name = &"Head"
bind/7/bone = -1
bind/7/pose = Transform3D(1, 1.7953e-11, 3.34387e-19, -1.7953e-11, 1, 1.86264e-08, -6.33738e-21, -1.86265e-09, 1, 0.000343775, -1.58726, -0.0430837)
bind/8/name = &"Shoulder.L"
bind/8/bone = -1
bind/8/pose = Transform3D(0.315386, -0.417634, 0.852123, 0.852123, 0.519819, -0.0606171, -0.417634, 0.745232, 0.519819, 0.514713, -0.783112, -1.05758)
bind/9/name = &"UpperArm.L"
bind/9/bone = -1
bind/9/pose = Transform3D(0.0173546, 5.90784e-08, 0.999849, 0.999849, -3.08322e-08, -0.0173545, -5.95957e-08, 1, 1.03441e-09, -0.0618606, -0.116381, -1.44321)
bind/10/name = &"LowerArm.L"
bind/10/bone = -1
bind/10/pose = Transform3D(-0.150446, -0.00470564, 0.988607, 0.988607, 0.00404359, 0.150465, -0.00470565, 0.999981, 0.00404374, 0.0016755, -0.344874, -1.44184)
bind/11/name = &"Wrist.L"
bind/11/bone = -1
bind/11/pose = Transform3D(-0.0466739, -0.0230136, 0.998645, 0.998645, 0.0219575, 0.04718, -0.0230136, 0.999494, 0.0219576, -0.031683, -0.602654, -1.43239)
bind/12/name = &"Index1.L"
bind/12/bone = -1
bind/12/pose = Transform3D(-0.22222, 0.0991753, 0.969939, 0.969939, -0.0787045, 0.230267, 0.0991753, 0.991953, -0.0787043, -0.101181, -0.484345, -1.4848)
bind/13/name = &"Index2.L"
bind/13/bone = -1
bind/13/pose = Transform3D(-0.0637885, -0.175647, 0.982384, 0.982384, 0.162206, 0.0927905, -0.175647, 0.970998, 0.162206, 0.17896, -0.943403, -1.28814)
bind/14/name = &"Index3.L"
bind/14/bone = -1
bind/14/pose = Transform3D(-0.0402602, -0.138586, 0.989532, 0.989532, 0.131828, 0.058723, -0.138586, 0.981537, 0.131828, 0.107208, -0.932521, -1.32711)
bind/15/name = &"Index4.L"
bind/15/bone = -1
bind/15/pose = Transform3D(-0.0336518, -0.149045, 0.988257, 0.988258, 0.1425, 0.0551431, -0.149045, 0.978509, 0.1425, 0.117374, -0.97515, -1.316)
bind/16/name = &"Middle1.L"
bind/16/bone = -1
bind/16/pose = Transform3D(-0.0139441, 0.000922917, 0.999902, 0.999902, -0.000910214, 0.0139449, 0.000922909, 0.999999, -0.000910068, -0.085842, -0.594478, -1.44523)
bind/17/name = &"Middle2.L"
bind/17/bone = -1
bind/17/pose = Transform3D(0.0118899, -0.0934291, 0.995555, 0.995555, 0.0941329, -0.00305578, -0.0934291, 0.991166, 0.0941331, 0.0324193, -0.846918, -1.37404)
bind/18/name = &"Middle3.L"
bind/18/bone = -1
bind/18/pose = Transform3D(0.00156214, -0.0608787, 0.998144, 0.998144, 0.0608608, 0.00214992, -0.0608788, 0.996288, 0.0608609, -0.00718818, -0.840356, -1.40284)
bind/19/name = &"Middle4.L"
bind/19/bone = -1
bind/19/pose = Transform3D(0.00466139, -0.120823, 0.992663, 0.992663, 0.120498, 0.0100053, -0.120823, 0.985334, 0.120499, 0.0778364, -0.962437, -1.34508)
bind/20/name = &"Ring1.L"
bind/20/bone = -1
bind/20/pose = Transform3D(0.209526, 0.0329601, 0.977247, 0.977247, -0.040748, -0.208152, 0.0329601, 0.998626, -0.0407478, -0.262891, -0.50284, -1.45859)
bind/21/name = &"Ring2.L"
bind/21/bone = -1
bind/21/pose = Transform3D(0.162865, -0.0851959, 0.982963, 0.982963, 0.100037, -0.154194, -0.085196, 0.99133, 0.100037, -0.0599658, -0.832546, -1.37364)
bind/22/name = &"Ring3.L"
bind/22/bone = -1
bind/22/pose = Transform3D(0.138285, -0.106623, 0.984636, 0.984636, 0.121833, -0.125092, -0.106623, 0.986807, 0.121833, -0.0108729, -0.900001, -1.35255)
bind/23/name = &"Ring4.L"
bind/23/bone = -1
bind/23/pose = Transform3D(0.15623, -0.10652, 0.98196, 0.98196, 0.123966, -0.142783, -0.10652, 0.986552, 0.123966, -0.0247743, -0.932157, -1.35239)
bind/24/name = &"Pinky1.L"
bind/24/bone = -1
bind/24/pose = Transform3D(0.400302, 0.0282232, 0.915949, 0.915949, -0.0431067, -0.398973, 0.0282232, 0.998672, -0.0431066, -0.363786, -0.445277, -1.45562)
bind/25/name = &"Pinky2.L"
bind/25/bone = -1
bind/25/pose = Transform3D(0.279773, -0.0774391, 0.956938, 0.956938, 0.10289, -0.271447, -0.0774391, 0.991674, 0.10289, -0.129102, -0.806098, -1.3783)
bind/26/name = &"Pinky3.L"
bind/26/bone = -1
bind/26/pose = Transform3D(0.30814, -0.0885746, 0.947209, 0.947209, 0.121265, -0.296801, -0.0885746, 0.98866, 0.121265, -0.133233, -0.850312, -1.3666)
bind/27/name = &"Pinky4.L"
bind/27/bone = -1
bind/27/pose = Transform3D(0.309437, -0.10739, 0.944837, 0.944837, 0.146932, -0.292736, -0.10739, 0.9833, 0.146932, -0.106931, -0.912524, -1.34554)
bind/28/name = &"Thumb1.L"
bind/28/bone = -1
bind/28/pose = Transform3D(-0.207698, 0.764833, 0.609829, 0.609829, -0.386204, 0.692065, 0.764833, 0.515632, -0.386204, -1.03811, 0.131166, -1.16386)
bind/29/name = &"Thumb2.L"
bind/29/bone = -1
bind/29/pose = Transform3D(-0.547028, 0.358026, 0.756688, 0.756689, -0.175119, 0.629885, 0.358026, 0.917143, -0.175119, -0.266545, -0.33533, -1.50036)
bind/30/name = &"Thumb3.L"
bind/30/bone = -1
bind/30/pose = Transform3D(-0.497269, 0.208158, 0.842255, 0.842255, -0.117095, 0.526209, 0.208158, 0.971061, -0.117094, -0.103433, -0.487722, -1.48588)
bind/31/name = &"Shoulder.R"
bind/31/bone = -1
bind/31/pose = Transform3D(0.315386, 0.417634, -0.852123, -0.852123, 0.519819, -0.0606171, 0.417634, 0.745232, 0.519819, -0.514713, -0.783112, -1.05758)
bind/32/name = &"UpperArm.R"
bind/32/bone = -1
bind/32/pose = Transform3D(0.0173546, -5.90784e-08, -0.999849, -0.999849, -3.08322e-08, -0.0173545, 5.95957e-08, 1, 1.03441e-09, 0.0618606, -0.116381, -1.44321)
bind/33/name = &"LowerArm.R"
bind/33/bone = -1
bind/33/pose = Transform3D(-0.150446, 0.00470564, -0.988607, -0.988607, 0.00404359, 0.150465, 0.00470565, 0.999981, 0.00404374, -0.0016755, -0.344874, -1.44184)
bind/34/name = &"Wrist.R"
bind/34/bone = -1
bind/34/pose = Transform3D(-0.0466739, 0.0230136, -0.998645, -0.998645, 0.0219575, 0.04718, 0.0230136, 0.999494, 0.0219576, 0.031683, -0.602654, -1.43239)
bind/35/name = &"Index1.R"
bind/35/bone = -1
bind/35/pose = Transform3D(-0.22222, -0.0991753, -0.969939, -0.969939, -0.0787045, 0.230267, -0.0991753, 0.991953, -0.0787043, 0.101181, -0.484345, -1.4848)
bind/36/name = &"Index2.R"
bind/36/bone = -1
bind/36/pose = Transform3D(-0.0637885, 0.175647, -0.982384, -0.982384, 0.162206, 0.0927905, 0.175647, 0.970998, 0.162206, -0.17896, -0.943403, -1.28814)
bind/37/name = &"Index3.R"
bind/37/bone = -1
bind/37/pose = Transform3D(-0.0402602, 0.138586, -0.989532, -0.989532, 0.131828, 0.058723, 0.138586, 0.981537, 0.131828, -0.107208, -0.932521, -1.32711)
bind/38/name = &"Index4.R"
bind/38/bone = -1
bind/38/pose = Transform3D(-0.0336518, 0.149045, -0.988257, -0.988258, 0.1425, 0.0551431, 0.149045, 0.978509, 0.1425, -0.117374, -0.97515, -1.316)
bind/39/name = &"Middle1.R"
bind/39/bone = -1
bind/39/pose = Transform3D(-0.0139441, -0.000922917, -0.999902, -0.999902, -0.000910214, 0.0139449, -0.000922909, 0.999999, -0.000910068, 0.085842, -0.594478, -1.44523)
bind/40/name = &"Middle2.R"
bind/40/bone = -1
bind/40/pose = Transform3D(0.0118899, 0.0934291, -0.995555, -0.995555, 0.0941329, -0.00305578, 0.0934291, 0.991166, 0.0941331, -0.0324193, -0.846918, -1.37404)
bind/41/name = &"Middle3.R"
bind/41/bone = -1
bind/41/pose = Transform3D(0.00156214, 0.0608787, -0.998144, -0.998144, 0.0608608, 0.00214992, 0.0608788, 0.996288, 0.0608609, 0.00718818, -0.840356, -1.40284)
bind/42/name = &"Middle4.R"
bind/42/bone = -1
bind/42/pose = Transform3D(0.00466139, 0.120823, -0.992663, -0.992663, 0.120498, 0.0100053, 0.120823, 0.985334, 0.120499, -0.0778364, -0.962437, -1.34508)
bind/43/name = &"Ring1.R"
bind/43/bone = -1
bind/43/pose = Transform3D(0.209526, -0.0329601, -0.977247, -0.977247, -0.040748, -0.208152, -0.0329601, 0.998626, -0.0407478, 0.262891, -0.50284, -1.45859)
bind/44/name = &"Ring2.R"
bind/44/bone = -1
bind/44/pose = Transform3D(0.162865, 0.0851959, -0.982963, -0.982963, 0.100037, -0.154194, 0.085196, 0.99133, 0.100037, 0.0599658, -0.832546, -1.37364)
bind/45/name = &"Ring3.R"
bind/45/bone = -1
bind/45/pose = Transform3D(0.138285, 0.106623, -0.984636, -0.984636, 0.121833, -0.125092, 0.106623, 0.986807, 0.121833, 0.0108729, -0.900001, -1.35255)
bind/46/name = &"Ring4.R"
bind/46/bone = -1
bind/46/pose = Transform3D(0.15623, 0.10652, -0.98196, -0.98196, 0.123966, -0.142783, 0.10652, 0.986552, 0.123966, 0.0247743, -0.932157, -1.35239)
bind/47/name = &"Pinky1.R"
bind/47/bone = -1
bind/47/pose = Transform3D(0.400302, -0.0282232, -0.915949, -0.915949, -0.0431067, -0.398973, -0.0282232, 0.998672, -0.0431066, 0.363786, -0.445277, -1.45562)
bind/48/name = &"Pinky2.R"
bind/48/bone = -1
bind/48/pose = Transform3D(0.279773, 0.0774391, -0.956938, -0.956938, 0.10289, -0.271447, 0.0774391, 0.991674, 0.10289, 0.129102, -0.806098, -1.3783)
bind/49/name = &"Pinky3.R"
bind/49/bone = -1
bind/49/pose = Transform3D(0.30814, 0.0885746, -0.947209, -0.947209, 0.121265, -0.296801, 0.0885746, 0.98866, 0.121265, 0.133233, -0.850312, -1.3666)
bind/50/name = &"Pinky4.R"
bind/50/bone = -1
bind/50/pose = Transform3D(0.309437, 0.10739, -0.944837, -0.944837, 0.146932, -0.292736, 0.10739, 0.9833, 0.146932, 0.106931, -0.912524, -1.34554)
bind/51/name = &"Thumb1.R"
bind/51/bone = -1
bind/51/pose = Transform3D(-0.207698, -0.764833, -0.609829, -0.609829, -0.386204, 0.692065, -0.764833, 0.515632, -0.386204, 1.03811, 0.131166, -1.16386)
bind/52/name = &"Thumb2.R"
bind/52/bone = -1
bind/52/pose = Transform3D(-0.547028, -0.358026, -0.756688, -0.756689, -0.175119, 0.629885, -0.358026, 0.917143, -0.175119, 0.266545, -0.33533, -1.50036)
bind/53/name = &"Thumb3.R"
bind/53/bone = -1
bind/53/pose = Transform3D(-0.497269, -0.208158, -0.842255, -0.842255, -0.117095, 0.526209, -0.208158, 0.971061, -0.117094, 0.103433, -0.487722, -1.48588)
bind/54/name = &"UpperLeg.L"
bind/54/bone = -1
bind/54/pose = Transform3D(1, 0, 0, 0, -0.996133, 0.0878603, 0, -0.0878603, -0.99613, -0.096859, 1.02896, 0.135994)
bind/55/name = &"LowerLeg.L"
bind/55/bone = -1
bind/55/pose = Transform3D(1, 0, 0, 0, -0.99888, -0.0473063, 0, 0.0473067, -0.998877, -0.096859, 0.560489, 0.0609495)
bind/56/name = &"UpperLeg.R"
bind/56/bone = -1
bind/56/pose = Transform3D(1, 0, 0, 0, -0.996133, 0.0878603, 0, -0.0878603, -0.99613, 0.096859, 1.02896, 0.135994)
bind/57/name = &"LowerLeg.R"
bind/57/bone = -1
bind/57/pose = Transform3D(1, 0, 0, 0, -0.99888, -0.0473063, 0, 0.0473067, -0.998877, 0.096859, 0.560489, 0.0609495)
bind/58/name = &"Foot.L"
bind/58/bone = -1
bind/58/pose = Transform3D(1, 0, 0, 0, 0.00534761, 0.999986, 0, -0.999986, 0.00534756, -0.096859, -0.0622163, 0.0224193)
bind/59/name = &"PT.L"
bind/59/bone = -1
bind/59/pose = Transform3D(1, 0, 0, 0, 0.999986, -0.00534752, 0, 0.00534752, 0.999986, -0.096859, -0.486532, -0.760344)
bind/60/name = &"Foot.R"
bind/60/bone = -1
bind/60/pose = Transform3D(1, 0, 0, 0, 0.00534761, 0.999986, 0, -0.999986, 0.00534756, 0.096859, -0.0622163, 0.0224193)
bind/61/name = &"PT.R"
bind/61/bone = -1
bind/61/pose = Transform3D(1, 0, 0, 0, 0.999986, -0.00534752, 0, 0.00534752, 0.999986, 0.096859, -0.486532, -0.760344)
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_q8qsp"]
radius = 0.25
height = 1.6
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_62lcb"]
radius = 0.25
height = 1.0
[sub_resource type="CylinderShape3D" id="CylinderShape3D_y10x8"]
height = 1.0
radius = 1.1
[sub_resource type="CylinderShape3D" id="CylinderShape3D_1sc42"]
height = 0.7
radius = 1.1
[sub_resource type="AnimationLibrary" id="AnimationLibrary_11wwj"]
_data = {
&"Death": ExtResource("7_f4uup"),
&"Grab": ExtResource("33_7kmwv"),
&"GrabLow": ExtResource("34_pt6f3"),
&"Gun_Shoot": ExtResource("8_tfo1v"),
&"HitRecieve": ExtResource("9_m4wbt"),
&"HitRecieve_2": ExtResource("10_b7cli"),
&"Idle": ExtResource("11_iaw83"),
&"Idle_Crouch": ExtResource("31_t1krq"),
&"Idle_Gun": ExtResource("12_1pw34"),
&"Idle_Gun_Pointing": ExtResource("13_sok22"),
&"Idle_Gun_Shoot": ExtResource("14_yl87s"),
&"Idle_Neutral": ExtResource("15_yp6jd"),
&"Idle_Sword": ExtResource("16_vx2rq"),
&"Interact": ExtResource("17_ok2yj"),
&"Kick_Left": ExtResource("18_pgq6x"),
&"Kick_Right": ExtResource("19_a0x8u"),
&"Punch_Left": ExtResource("20_tbysw"),
&"Punch_Right": ExtResource("21_o8mob"),
&"Roll": ExtResource("22_wddmx"),
&"Run": ExtResource("23_mn80a"),
&"Run_Back": ExtResource("24_6v4wt"),
&"Run_Left": ExtResource("25_htvtb"),
&"Run_Right": ExtResource("26_bay54"),
&"Run_Shoot": ExtResource("27_d38uh"),
&"Sword_Slash": ExtResource("28_uypnh"),
&"Walk": ExtResource("29_8imsx"),
&"Walk_Crouch": ExtResource("32_06nbx"),
&"Wave": ExtResource("30_xqtbc")
}
[node name="Player" type="CharacterBody3D"]
script = ExtResource("1_hn6di")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.908729, 0)
shape = SubResource("CapsuleShape3D_k6p7c")
debug_fill = false
[node name="SpringArmPivot" type="Node3D" parent="."]
script = ExtResource("2_f8ihf")
[node name="SpringArm3D" type="SpringArm3D" parent="SpringArmPivot"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.35, 0)
spring_length = 2.0
margin = 0.2
[node name="Camera3D" type="Camera3D" parent="SpringArmPivot/SpringArm3D"]
[node name="CharacterArmature" type="Node3D" parent="."]
[node name="Skeleton3D" type="Skeleton3D" parent="CharacterArmature"]
bones/0/name = "Root"
bones/0/parent = -1
bones/0/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.0722887)
bones/0/enabled = true
bones/0/position = Vector3(0, 0, 0.0722887)
bones/0/rotation = Quaternion(0, 0, 0, 1)
bones/0/scale = Vector3(1, 1, 1)
bones/1/name = "Body"
bones/1/parent = 0
bones/1/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.000453209, 0.973595, -0.00399487)
bones/1/enabled = true
bones/1/position = Vector3(0.000585492, 0.965633, -0.0046314)
bones/1/rotation = Quaternion(0.00543523, 0.000132287, 0.000132291, 0.999985)
bones/1/scale = Vector3(1, 1, 1)
bones/2/name = "Hips"
bones/2/parent = 1
bones/2/rest = Transform3D(1, 0, 0, 0, 0.990359, 0.138524, 0, -0.138524, 0.990359, -0.000796984, 0.0286949, 0.00949547)
bones/2/enabled = true
bones/2/position = Vector3(-0.000796984, 0.0286949, 0.00949547)
bones/2/rotation = Quaternion(-0.0694294, 0, 0, 0.997587)
bones/2/scale = Vector3(1, 1, 1)
bones/3/name = "Abdomen"
bones/3/parent = 2
bones/3/rest = Transform3D(1, 0, 0, 0, 0.999252, 0.0386618, 0, -0.0386618, 0.999252, 2.91038e-11, 0.106105, 1.11759e-08)
bones/3/enabled = true
bones/3/position = Vector3(2.91038e-11, 0.106105, 1.11759e-08)
bones/3/rotation = Quaternion(-0.0193345, -3.53179e-12, 5.52629e-12, 0.999813)
bones/3/scale = Vector3(1, 1, 1)
bones/4/name = "Torso"
bones/4/parent = 3
bones/4/rest = Transform3D(1, -2.23257e-10, 2.27549e-10, 2.63476e-10, 0.980658, -0.195727, -1.7945e-10, 0.195727, 0.980658, 0, 0.141789, -3.72529e-09)
bones/4/enabled = true
bones/4/position = Vector3(0, 0.141789, -3.72529e-09)
bones/4/rotation = Quaternion(0.0983401, 9.99208e-11, 1.27301e-10, 0.995153)
bones/4/scale = Vector3(1, 1, 1)
bones/5/name = "Chest"
bones/5/parent = 4
bones/5/rest = Transform3D(1, -1.79144e-10, 2.17726e-10, 1.79054e-10, 1, 0.000413938, -2.178e-10, -0.000413938, 1, -4.47973e-11, 0.130401, -7.82222e-14)
bones/5/enabled = true
bones/5/position = Vector3(-4.47973e-11, 0.130401, -7.82222e-14)
bones/5/rotation = Quaternion(-0.00020697, 1.13659e-10, 1.00917e-10, 1)
bones/5/scale = Vector3(1, 1, 1)
bones/6/name = "Neck"
bones/6/parent = 5
bones/6/rest = Transform3D(1, 4.07454e-10, -4.37478e-10, -3.99094e-10, 0.999821, 0.0189413, 4.45117e-10, -0.0189413, 0.999821, 1.96848e-11, 0.133251, -1.8628e-09)
bones/6/enabled = true
bones/6/position = Vector3(1.96848e-11, 0.133251, -1.8628e-09)
bones/6/rotation = Quaternion(-0.00947105, -2.23828e-10, -2.12132e-10, 0.999955)
bones/6/scale = Vector3(1, 1, 1)
bones/7/name = "Head"
bones/7/parent = 6
bones/7/rest = Transform3D(1, -1.45519e-11, -8.32794e-17, 1.45519e-11, 1, -3.72529e-09, 8.33336e-17, 3.72529e-09, 1, 5.39835e-12, 0.0767286, -7.68786e-10)
bones/7/enabled = true
bones/7/position = Vector3(5.39835e-12, 0.0767286, -7.68786e-10)
bones/7/rotation = Quaternion(-0.0245108, -1.63076e-10, 0.000127055, 0.9997)
bones/7/scale = Vector3(1, 1, 1)
bones/8/name = "Shoulder.L"
bones/8/parent = 5
bones/8/rest = Transform3D(0.315385, 0.852123, -0.417634, -0.401419, 0.518577, 0.754944, 0.859881, -0.0704522, 0.50561, 0.0636353, 0.0333092, 0.0224966)
bones/8/enabled = true
bones/8/position = Vector3(0.0659633, 0.0343806, 0.0205)
bones/8/rotation = Quaternion(-0.254066, -0.409493, -0.395682, 0.781794)
bones/8/scale = Vector3(1, 1, 1)
bones/9/name = "UpperArm.L"
bones/9/parent = 8
bones/9/rest = Transform3D(0.857468, 0.30055, -0.417634, -0.0458198, 0.853047, 0.519819, 0.512493, -0.426592, 0.745232, -4.84288e-08, 0.063542, 7.45058e-08)
bones/9/enabled = true
bones/9/position = Vector3(-4.84288e-08, 0.063542, 7.45058e-08)
bones/9/rotation = Quaternion(-0.756, -0.244534, 0.0183559, 0.606902)
bones/9/scale = Vector3(1, 1, 1)
bones/10/name = "LowerArm.L"
bones/10/parent = 9
bones/10/rest = Transform3D(0.985847, 0.167599, 0.00396147, -0.16758, 0.985847, -0.00477506, -0.0047057, 0.00404361, 0.999981, -3.67848e-09, 0.217008, -1.98715e-08)
bones/10/enabled = true
bones/10/position = Vector3(-3.67848e-09, 0.217008, -1.98715e-08)
bones/10/rotation = Quaternion(-0.214968, 0.247513, -0.150591, 0.932657)
bones/10/scale = Vector3(1, 1, 1)
bones/11/name = "Wrist.L"
bones/11/parent = 10
bones/11/rest = Transform3D(0.994398, -0.103703, 0.0204664, 0.104026, 0.994455, -0.0154059, -0.0187553, 0.0174486, 0.999672, -8.26549e-09, 0.235667, 5.16011e-08)
bones/11/enabled = true
bones/11/position = Vector3(-8.26549e-09, 0.235667, 5.16011e-08)
bones/11/rotation = Quaternion(0.00930065, 0.00630404, 0.0231916, 0.999668)
bones/11/scale = Vector3(1, 1, 1)
bones/12/name = "Index1.L"
bones/12/parent = 11
bones/12/rest = Transform3D(0.976715, 0.186496, -0.106055, -0.173979, 0.977761, 0.117108, 0.125537, -0.0959302, 0.98744, 9.31323e-09, 0.0271997, 4.49363e-08)
bones/12/enabled = true
bones/12/position = Vector3(9.31323e-09, 0.0271997, 4.49363e-08)
bones/12/rotation = Quaternion(-0.0536506, -0.0583229, -0.0907802, 0.992713)
bones/12/scale = Vector3(1, 1, 1)
bones/13/name = "Index2.L"
bones/13/parent = 12
bones/13/rest = Transform3D(0.949609, -0.112217, 0.292661, 0.178164, 0.961453, -0.209438, -0.257878, 0.251026, 0.932998, -1.49012e-08, 0.121023, -1.88127e-07)
bones/13/enabled = true
bones/13/position = Vector3(-1.49012e-08, 0.121023, -1.88127e-07)
bones/13/rotation = Quaternion(-0.00440123, 0.145898, 0.0930834, 0.984901)
bones/13/scale = Vector3(1, 1, 1)
bones/14/name = "Index3.L"
bones/14/parent = 13
bones/14/rest = Transform3D(0.999011, -0.0285874, -0.0340588, 0.0297886, 0.998933, 0.0352993, 0.0330133, -0.0362789, 0.998796, -1.11759e-08, 0.0317744, 5.58794e-09)
bones/14/enabled = true
bones/14/position = Vector3(-1.11759e-08, 0.0317744, 5.58794e-09)
bones/14/rotation = Quaternion(-0.0822602, -0.00279773, 0.0209049, 0.996388)
bones/14/scale = Vector3(1, 1, 1)
bones/15/name = "Index4.L"
bones/15/parent = 14
bones/15/rest = Transform3D(0.999923, -0.00497013, 0.0114012, 0.00508561, 0.999936, -0.0101225, -0.0113502, 0.0101797, 0.999884, 1.86265e-09, 0.0286486, 1.43424e-07)
bones/15/enabled = true
bones/15/position = Vector3(1.86265e-09, 0.0286486, 1.43424e-07)
bones/15/rotation = Quaternion(-0.0302401, 0.0127248, 0.00602093, 0.999444)
bones/15/scale = Vector3(1, 1, 1)
bones/16/name = "Middle1.L"
bones/16/parent = 11
bones/16/rest = Transform3D(0.999177, -0.0327224, -0.0239655, 0.0332704, 0.999185, 0.0228362, 0.0231987, -0.0236148, 0.999452, 9.31323e-09, 0.0271997, 4.49363e-08)
bones/16/enabled = true
bones/16/position = Vector3(9.31323e-09, 0.0271997, 4.49363e-08)
bones/16/rotation = Quaternion(-0.0116159, -0.0117943, 0.0165027, 0.999727)
bones/16/scale = Vector3(1, 1, 1)
bones/17/name = "Middle2.L"
bones/17/parent = 16
bones/17/rest = Transform3D(0.995206, -0.0168507, 0.0963414, 0.0258566, 0.995329, -0.0930094, -0.0943241, 0.0950545, 0.990993, -4.5402e-09, 0.119848, -5.96046e-08)
bones/17/enabled = true
bones/17/position = Vector3(-4.5402e-09, 0.119848, -5.96046e-08)
bones/17/rotation = Quaternion(-0.0535813, 0.0588508, -0.000211704, 0.996828)
bones/17/scale = Vector3(1, 1, 1)
bones/18/name = "Middle3.L"
bones/18/parent = 17
bones/18/rest = Transform3D(0.999414, 0.00832194, -0.0332158, -0.00722566, 0.99943, 0.0329894, 0.0334714, -0.0327301, 0.998903, -7.45058e-09, 0.039186, 1.79745e-07)
bones/18/enabled = true
bones/18/position = Vector3(-7.45058e-09, 0.039186, 1.79745e-07)
bones/18/rotation = Quaternion(-0.120008, -0.00437157, -0.0210206, 0.992541)
bones/18/scale = Vector3(1, 1, 1)
bones/19/name = "Middle4.L"
bones/19/parent = 18
bones/19/rest = Transform3D(0.998183, 0.00420155, 0.0601002, -0.000566565, 0.998176, -0.0603717, -0.0602442, 0.060228, 0.996365, -6.40284e-09, 0.0391646, 2.10945e-07)
bones/19/enabled = true
bones/19/position = Vector3(-6.40284e-09, 0.0391646, 2.10945e-07)
bones/19/rotation = Quaternion(-0.0190482, 0.0352492, -0.00743691, 0.999169)
bones/19/scale = Vector3(1, 1, 1)
bones/20/name = "Ring1.L"
bones/20/parent = 11
bones/20/rest = Transform3D(0.965385, -0.252544, -0.065213, 0.256072, 0.965208, 0.0529203, 0.0495794, -0.0677877, 0.996467, 9.31323e-09, 0.0271997, 4.49363e-08)
bones/20/enabled = true
bones/20/position = Vector3(9.31323e-09, 0.0271997, 4.49363e-08)
bones/20/rotation = Quaternion(-0.030456, -0.0289634, 0.128329, 0.990841)
bones/20/scale = Vector3(1, 1, 1)
bones/21/name = "Ring2.L"
bones/21/parent = 20
bones/21/rest = Transform3D(0.991915, 0.0585674, 0.112584, -0.0419745, 0.988618, -0.144475, -0.119764, 0.138581, 0.983083, 1.11759e-08, 0.119257, -3.0268e-09)
bones/21/enabled = true
bones/21/position = Vector3(1.11759e-08, 0.119257, -3.0268e-09)
bones/21/rotation = Quaternion(-0.0439309, 0.106429, -0.0408442, 0.992509)
bones/21/scale = Vector3(1, 1, 1)
bones/22/name = "Ring3.L"
bones/22/parent = 21
bones/22/rest = Transform3D(0.999467, 0.0270218, 0.0183202, -0.0265623, 0.999338, -0.0248756, -0.0189802, 0.0243757, 0.999523, -7.45058e-09, 0.0329241, 8.3819e-08)
bones/22/enabled = true
bones/22/position = Vector3(-7.45058e-09, 0.0329241, 8.3819e-08)
bones/22/rotation = Quaternion(-0.119294, 0.0572575, -0.0398883, 0.990404)
bones/22/scale = Vector3(1, 1, 1)
bones/23/name = "Ring4.L"
bones/23/parent = 22
bones/23/rest = Transform3D(0.999835, -0.018016, 0.00214171, 0.0180165, 0.999838, -0.000196494, -0.00213782, 0.000235048, 0.999998, 1.86265e-08, 0.0321856, -1.45752e-07)
bones/23/enabled = true
bones/23/position = Vector3(1.86265e-08, 0.0321856, -1.45752e-07)
bones/23/rotation = Quaternion(-0.0748089, 0.0279541, -0.00762858, 0.996777)
bones/23/scale = Vector3(1, 1, 1)
bones/24/name = "Pinky1.L"
bones/24/parent = 11
bones/24/rest = Transform3D(0.895374, -0.440192, -0.0673485, 0.443593, 0.894937, 0.0480795, 0.0391085, -0.0729245, 0.99657, 9.31323e-09, 0.0271997, 4.49363e-08)
bones/24/enabled = true
bones/24/position = Vector3(9.31323e-09, 0.0271997, 4.49363e-08)
bones/24/rotation = Quaternion(-0.0310906, -0.0273529, 0.227078, 0.972996)
bones/24/scale = Vector3(1, 1, 1)
bones/25/name = "Pinky2.L"
bones/25/parent = 24
bones/25/rest = Transform3D(0.986314, 0.137336, 0.0912315, -0.122196, 0.980371, -0.154728, -0.11069, 0.141463, 0.983736, -7.45058e-09, 0.115961, 1.91852e-07)
bones/25/enabled = true
bones/25/position = Vector3(-7.45058e-09, 0.115961, 1.91852e-07)
bones/25/rotation = Quaternion(-0.0766032, 0.0608134, -0.182085, 0.978406)
bones/25/scale = Vector3(1, 1, 1)
bones/26/name = "Pinky3.L"
bones/26/parent = 25
bones/26/rest = Transform3D(0.999488, -0.0284066, 0.0147017, 0.0286406, 0.999462, -0.0159539, -0.0142406, 0.0163668, 0.999765, -3.35276e-08, 0.0257697, 5.44824e-08)
bones/26/enabled = true
bones/26/position = Vector3(-3.35276e-08, 0.0257697, 5.44824e-08)
bones/26/rotation = Quaternion(-0.0894857, -0.0379283, -0.022308, 0.995016)
bones/26/scale = Vector3(1, 1, 1)
bones/27/name = "Pinky4.L"
bones/27/parent = 26
bones/27/rest = Transform3D(0.999819, 0.000845239, 0.0189891, -0.000349583, 0.99966, -0.0260903, -0.0190047, 0.026079, 0.999479, 1.67638e-08, 0.0267585, -7.93952e-08)
bones/27/enabled = true
bones/27/position = Vector3(1.67638e-08, 0.0267585, -7.93952e-08)
bones/27/rotation = Quaternion(-0.116958, -0.00965458, -0.00323037, 0.993085)
bones/27/scale = Vector3(1, 1, 1)
bones/28/name = "Thumb1.L"
bones/28/parent = 11
bones/28/rest = Transform3D(0.601096, 0.671552, -0.433245, -0.161851, 0.633174, 0.756898, 0.782616, -0.384847, 0.48929, 9.31323e-09, 0.0271997, 4.49363e-08)
bones/28/enabled = true
bones/28/position = Vector3(9.31323e-09, 0.0271997, 4.49363e-08)
bones/28/rotation = Quaternion(-0.317099, -0.317893, -0.180712, 0.875063)
bones/28/scale = Vector3(1, 1, 1)
bones/29/name = "Thumb2.L"
bones/29/parent = 28
bones/29/rest = Transform3D(0.848897, 0.0930235, 0.520307, 0.0518132, 0.965005, -0.257064, -0.526012, 0.245179, 0.81437, -9.68575e-08, 0.0828836, -5.21541e-08)
bones/29/enabled = true
bones/29/position = Vector3(-9.68575e-08, 0.0828836, -5.21541e-08)
bones/29/rotation = Quaternion(0.131836, 0.274653, -0.0108175, 0.952401)
bones/29/scale = Vector3(1, 1, 1)
bones/30/name = "Thumb3.L"
bones/30/parent = 29
bones/30/rest = Transform3D(0.983871, -0.104484, 0.145192, 0.117794, 0.989281, -0.0862965, -0.13462, 0.102007, 0.985633, 2.98023e-08, 0.0311211, -2.23517e-08)
bones/30/enabled = true
bones/30/position = Vector3(2.98023e-08, 0.0311211, -2.23517e-08)
bones/30/rotation = Quaternion(-0.0596973, 0.0318687, 0.117547, 0.990759)
bones/30/scale = Vector3(1, 1, 1)
bones/31/name = "Shoulder.R"
bones/31/parent = 5
bones/31/rest = Transform3D(0.315385, -0.852123, 0.417634, 0.401419, 0.518577, 0.754944, -0.859881, -0.0704522, 0.50561, -0.0629478, 0.0333092, 0.0224966)
bones/31/enabled = true
bones/31/position = Vector3(-0.0652757, 0.0343808, 0.0205)
bones/31/rotation = Quaternion(-0.254066, 0.409492, 0.395682, 0.781794)
bones/31/scale = Vector3(1, 1, 1)
bones/32/name = "UpperArm.R"
bones/32/parent = 31
bones/32/rest = Transform3D(0.857468, -0.30055, 0.417634, 0.0458198, 0.853047, 0.519819, -0.512493, -0.426592, 0.745232, 4.84288e-08, 0.063542, 7.45058e-08)
bones/32/enabled = true
bones/32/position = Vector3(4.84288e-08, 0.063542, 7.45058e-08)
bones/32/rotation = Quaternion(-0.749909, 0.249228, -0.0188961, 0.612506)
bones/32/scale = Vector3(1, 1, 1)
bones/33/name = "LowerArm.R"
bones/33/parent = 32
bones/33/rest = Transform3D(0.985847, -0.167599, -0.00396147, 0.16758, 0.985847, -0.00477506, 0.0047057, 0.00404361, 0.999981, 3.67848e-09, 0.217008, -1.98715e-08)
bones/33/enabled = true
bones/33/position = Vector3(3.67848e-09, 0.217008, -1.98715e-08)
bones/33/rotation = Quaternion(-0.214967, -0.247513, 0.150591, 0.932657)
bones/33/scale = Vector3(1, 1, 1)
bones/34/name = "Wrist.R"
bones/34/parent = 33
bones/34/rest = Transform3D(0.994398, 0.103703, -0.0204664, -0.104026, 0.994455, -0.0154059, 0.0187553, 0.0174486, 0.999672, 8.26549e-09, 0.235667, 5.16011e-08)
bones/34/enabled = true
bones/34/position = Vector3(8.26549e-09, 0.235667, 5.16011e-08)
bones/34/rotation = Quaternion(0.00822544, -0.00981952, -0.0520068, 0.998565)
bones/34/scale = Vector3(1, 1, 1)
bones/35/name = "Index1.R"
bones/35/parent = 34
bones/35/rest = Transform3D(0.976715, -0.186496, 0.106055, 0.173979, 0.977761, 0.117108, -0.125537, -0.0959302, 0.98744, -9.31323e-09, 0.0271997, 4.49363e-08)
bones/35/enabled = true
bones/35/position = Vector3(-9.31323e-09, 0.0271997, 4.49363e-08)
bones/35/rotation = Quaternion(-0.0536506, 0.0583229, 0.0907802, 0.992713)
bones/35/scale = Vector3(1, 1, 1)
bones/36/name = "Index2.R"
bones/36/parent = 35
bones/36/rest = Transform3D(0.949609, 0.112217, -0.292661, -0.178164, 0.961453, -0.209438, 0.257878, 0.251026, 0.932998, 1.49012e-08, 0.121023, -1.88127e-07)
bones/36/enabled = true
bones/36/position = Vector3(1.49012e-08, 0.121023, -1.88127e-07)
bones/36/rotation = Quaternion(-0.0162477, -0.144091, -0.094652, 0.984893)
bones/36/scale = Vector3(1, 1, 1)
bones/37/name = "Index3.R"
bones/37/parent = 36
bones/37/rest = Transform3D(0.999011, 0.0285874, 0.0340588, -0.0297886, 0.998933, 0.0352993, -0.0330133, -0.0362789, 0.998796, 1.11759e-08, 0.0317744, 5.58794e-09)
bones/37/enabled = true
bones/37/position = Vector3(1.11759e-08, 0.0317744, 5.58794e-09)
bones/37/rotation = Quaternion(-0.0919627, 0.00305185, -0.0204528, 0.995548)
bones/37/scale = Vector3(1, 1, 1)
bones/38/name = "Index4.R"
bones/38/parent = 37
bones/38/rest = Transform3D(0.999923, 0.00497013, -0.0114012, -0.00508561, 0.999936, -0.0101225, 0.0113502, 0.0101797, 0.999884, -1.86265e-09, 0.0286486, 1.43424e-07)
bones/38/enabled = true
bones/38/position = Vector3(-1.86265e-09, 0.0286486, 1.43424e-07)
bones/38/rotation = Quaternion(-0.0302401, -0.0127248, -0.00602093, 0.999444)
bones/38/scale = Vector3(1, 1, 1)
bones/39/name = "Middle1.R"
bones/39/parent = 34
bones/39/rest = Transform3D(0.999177, 0.0327224, 0.0239655, -0.0332704, 0.999185, 0.0228362, -0.0231987, -0.0236148, 0.999452, -9.31323e-09, 0.0271997, 4.49363e-08)
bones/39/enabled = true
bones/39/position = Vector3(-9.31323e-09, 0.0271997, 4.49363e-08)
bones/39/rotation = Quaternion(-0.0116159, 0.0117943, -0.0165027, 0.999727)
bones/39/scale = Vector3(1, 1, 1)
bones/40/name = "Middle2.R"
bones/40/parent = 39
bones/40/rest = Transform3D(0.995206, 0.0168507, -0.0963414, -0.0258566, 0.995329, -0.0930094, 0.0943241, 0.0950545, 0.990993, 4.5402e-09, 0.119848, -5.96046e-08)
bones/40/enabled = true
bones/40/position = Vector3(4.5402e-09, 0.119848, -5.96046e-08)
bones/40/rotation = Quaternion(-0.0656035, -0.0574026, -0.0753899, 0.993337)
bones/40/scale = Vector3(1, 1, 1)
bones/41/name = "Middle3.R"
bones/41/parent = 40
bones/41/rest = Transform3D(0.999414, -0.00832194, 0.0332158, 0.00722566, 0.99943, 0.0329894, -0.0334714, -0.0327301, 0.998903, 7.45058e-09, 0.039186, 1.79745e-07)
bones/41/enabled = true
bones/41/position = Vector3(7.45058e-09, 0.039186, 1.79745e-07)
bones/41/rotation = Quaternion(-0.120008, 0.00437156, 0.0210206, 0.992541)
bones/41/scale = Vector3(1, 1, 1)
bones/42/name = "Middle4.R"
bones/42/parent = 41
bones/42/rest = Transform3D(0.998183, -0.00420155, -0.0601002, 0.000566565, 0.998176, -0.0603717, 0.0602442, 0.060228, 0.996365, 6.40284e-09, 0.0391646, 2.10945e-07)
bones/42/enabled = true
bones/42/position = Vector3(6.40284e-09, 0.0391646, 2.10945e-07)
bones/42/rotation = Quaternion(-0.0190482, -0.0352493, 0.00743692, 0.999169)
bones/42/scale = Vector3(1, 1, 1)
bones/43/name = "Ring1.R"
bones/43/parent = 34
bones/43/rest = Transform3D(0.965385, 0.252544, 0.065213, -0.256072, 0.965208, 0.0529203, -0.0495794, -0.0677877, 0.996467, -9.31323e-09, 0.0271997, 4.49363e-08)
bones/43/enabled = true
bones/43/position = Vector3(-9.31323e-09, 0.0271997, 4.49363e-08)
bones/43/rotation = Quaternion(-0.030456, 0.0289634, -0.128329, 0.990841)
bones/43/scale = Vector3(1, 1, 1)
bones/44/name = "Ring2.R"
bones/44/parent = 43
bones/44/rest = Transform3D(0.991915, -0.0585674, -0.112584, 0.0419745, 0.988618, -0.144475, 0.119764, 0.138581, 0.983083, -1.11759e-08, 0.119257, -3.0268e-09)
bones/44/enabled = true
bones/44/position = Vector3(-1.11759e-08, 0.119257, -3.0268e-09)
bones/44/rotation = Quaternion(-0.0439309, -0.106429, 0.0408442, 0.992509)
bones/44/scale = Vector3(1, 1, 1)
bones/45/name = "Ring3.R"
bones/45/parent = 44
bones/45/rest = Transform3D(0.999467, -0.0270218, -0.0183202, 0.0265623, 0.999338, -0.0248756, 0.0189802, 0.0243757, 0.999523, 7.45058e-09, 0.0329241, 8.3819e-08)
bones/45/enabled = true
bones/45/position = Vector3(7.45058e-09, 0.0329241, 8.3819e-08)
bones/45/rotation = Quaternion(-0.119294, -0.0572576, 0.0398883, 0.990404)
bones/45/scale = Vector3(1, 1, 1)
bones/46/name = "Ring4.R"
bones/46/parent = 45
bones/46/rest = Transform3D(0.999835, 0.018016, -0.00214171, -0.0180165, 0.999838, -0.000196494, 0.00213782, 0.000235048, 0.999998, -1.86265e-08, 0.0321856, -1.45752e-07)
bones/46/enabled = true
bones/46/position = Vector3(-1.86265e-08, 0.0321856, -1.45752e-07)
bones/46/rotation = Quaternion(-0.0748089, -0.0279542, 0.00762859, 0.996777)
bones/46/scale = Vector3(1, 1, 1)
bones/47/name = "Pinky1.R"
bones/47/parent = 34
bones/47/rest = Transform3D(0.895374, 0.440192, 0.0673485, -0.443593, 0.894937, 0.0480795, -0.0391085, -0.0729245, 0.99657, -9.31323e-09, 0.0271997, 4.49363e-08)
bones/47/enabled = true
bones/47/position = Vector3(-9.31323e-09, 0.0271997, 4.49363e-08)
bones/47/rotation = Quaternion(-0.0310906, 0.0273529, -0.227078, 0.972996)
bones/47/scale = Vector3(1, 1, 1)
bones/48/name = "Pinky2.R"
bones/48/parent = 47
bones/48/rest = Transform3D(0.986314, -0.137336, -0.0912315, 0.122196, 0.980371, -0.154728, 0.11069, 0.141463, 0.983736, 7.45058e-09, 0.115961, 1.91852e-07)
bones/48/enabled = true
bones/48/position = Vector3(7.45058e-09, 0.115961, 1.91852e-07)
bones/48/rotation = Quaternion(-0.0766032, -0.0608134, 0.182085, 0.978406)
bones/48/scale = Vector3(1, 1, 1)
bones/49/name = "Pinky3.R"
bones/49/parent = 48
bones/49/rest = Transform3D(0.999488, 0.0284066, -0.0147017, -0.0286406, 0.999462, -0.0159539, 0.0142406, 0.0163668, 0.999765, 3.35276e-08, 0.0257697, 5.44824e-08)
bones/49/enabled = true
bones/49/position = Vector3(3.35276e-08, 0.0257697, 5.44824e-08)
bones/49/rotation = Quaternion(-0.0894857, 0.0379283, 0.022308, 0.995016)
bones/49/scale = Vector3(1, 1, 1)
bones/50/name = "Pinky4.R"
bones/50/parent = 49
bones/50/rest = Transform3D(0.999819, -0.000845239, -0.0189891, 0.000349583, 0.99966, -0.0260903, 0.0190047, 0.026079, 0.999479, -1.67638e-08, 0.0267585, -7.93952e-08)
bones/50/enabled = true
bones/50/position = Vector3(-1.67638e-08, 0.0267585, -7.93952e-08)
bones/50/rotation = Quaternion(-0.116958, 0.00965458, 0.00323036, 0.993085)
bones/50/scale = Vector3(1, 1, 1)
bones/51/name = "Thumb1.R"
bones/51/parent = 34
bones/51/rest = Transform3D(0.601096, -0.671552, 0.433245, 0.161851, 0.633174, 0.756898, -0.782616, -0.384847, 0.48929, -9.31323e-09, 0.0271997, 4.49363e-08)
bones/51/enabled = true
bones/51/position = Vector3(-9.31323e-09, 0.0271997, 4.49363e-08)
bones/51/rotation = Quaternion(-0.254289, 0.351549, 0.248254, 0.866095)
bones/51/scale = Vector3(1, 1, 1)
bones/52/name = "Thumb2.R"
bones/52/parent = 51
bones/52/rest = Transform3D(0.848897, -0.0930235, -0.520307, -0.0518132, 0.965005, -0.257064, 0.526012, 0.245179, 0.81437, 9.68575e-08, 0.0828836, -5.21541e-08)
bones/52/enabled = true
bones/52/position = Vector3(9.68575e-08, 0.0828836, -5.21541e-08)
bones/52/rotation = Quaternion(0.131836, -0.274653, 0.0108175, 0.952401)
bones/52/scale = Vector3(1, 1, 1)
bones/53/name = "Thumb3.R"
bones/53/parent = 52
bones/53/rest = Transform3D(0.983871, 0.104484, -0.145192, -0.117794, 0.989281, -0.0862965, 0.13462, 0.102007, 0.985633, -2.98023e-08, 0.0311211, -2.23517e-08)
bones/53/enabled = true
bones/53/position = Vector3(-2.98023e-08, 0.0311211, -2.23517e-08)
bones/53/rotation = Quaternion(-0.0596973, -0.0318686, -0.117547, 0.990759)
bones/53/scale = Vector3(1, 1, 1)
bones/54/name = "UpperLeg.L"
bones/54/parent = 1
bones/54/rest = Transform3D(1, 0, 0, 0, -0.996133, -0.0878607, 0, 0.0878604, -0.996136, 0.0964058, 0.0633354, -0.02323)
bones/54/enabled = true
bones/54/position = Vector3(0.0964058, 0.0633354, -0.02323)
bones/54/rotation = Quaternion(0.995635, 0.00172645, -0.0318396, 0.0877113)
bones/54/scale = Vector3(1, 1, 1)
bones/55/name = "LowerLeg.L"
bones/55/parent = 54
bones/55/rest = Transform3D(1, 0, 0, 0, 0.990861, -0.134886, 0, 0.134886, 0.990861, 0, 0.481815, 1.49012e-08)
bones/55/enabled = true
bones/55/position = Vector3(0, 0.481815, 1.49012e-08)
bones/55/rotation = Quaternion(0.140144, 7.47203e-09, 2.43013e-10, 0.990131)
bones/55/scale = Vector3(1, 1, 1)
bones/56/name = "UpperLeg.R"
bones/56/parent = 1
bones/56/rest = Transform3D(1, 0, 0, 0, -0.996133, -0.0878607, 0, 0.0878604, -0.996136, -0.0973122, 0.0633354, -0.02323)
bones/56/enabled = true
bones/56/position = Vector3(-0.0973122, 0.0633354, -0.02323)
bones/56/rotation = Quaternion(0.995576, -0.00219287, 0.0331604, 0.0878887)
bones/56/scale = Vector3(1, 1, 1)
bones/57/name = "LowerLeg.R"
bones/57/parent = 56
bones/57/rest = Transform3D(1, 0, 0, 0, 0.990861, -0.134886, 0, 0.134886, 0.990861, 0, 0.481815, 1.49012e-08)
bones/57/enabled = true
bones/57/position = Vector3(0, 0.481815, 1.49012e-08)
bones/57/rotation = Quaternion(0.14051, 1.0966e-09, 2.05919e-10, 0.990079)
bones/57/scale = Vector3(1, 1, 1)
bones/58/name = "Foot.L"
bones/58/parent = 0
bones/58/rest = Transform3D(1, 0, 0, 0, 0.00534737, -0.999986, 0, 0.999986, 0.00534737, 0.096859, 0.0227517, -0.0101932)
bones/58/enabled = true
bones/58/position = Vector3(0.096859, 0.0227517, -0.0101932)
bones/58/rotation = Quaternion(0.705214, 0, 0, 0.708995)
bones/58/scale = Vector3(1, 1, 1)
bones/59/name = "PT.L"
bones/59/parent = 0
bones/59/rest = Transform3D(1, 0, 0, 0, 0.999986, 0.00534752, 0, -0.00534752, 0.999986, 0.096859, 0.490591, 0.685443)
bones/59/enabled = true
bones/59/position = Vector3(0.142741, 0.476902, 0.696958)
bones/59/rotation = Quaternion(-0.00267377, 0, 0, 0.999996)
bones/59/scale = Vector3(1, 1, 1)
bones/60/name = "Foot.R"
bones/60/parent = 0
bones/60/rest = Transform3D(1, 0, 0, 0, 0.00534737, -0.999986, 0, 0.999986, 0.00534737, -0.096859, 0.0227517, -0.0101932)
bones/60/enabled = true
bones/60/position = Vector3(-0.096859, 0.0227517, -0.0101932)
bones/60/rotation = Quaternion(0.705214, 0, 0, 0.708995)
bones/60/scale = Vector3(1, 1, 1)
bones/61/name = "PT.R"
bones/61/parent = 0
bones/61/rest = Transform3D(1, 0, 0, 0, 0.999986, 0.00534752, 0, -0.00534752, 0.999986, -0.096859, 0.490591, 0.685443)
bones/61/enabled = true
bones/61/position = Vector3(-0.142612, 0.507017, 0.672455)
bones/61/rotation = Quaternion(-0.00267377, 0, 0, 0.999996)
bones/61/scale = Vector3(1, 1, 1)
[node name="SciFi_Head" type="MeshInstance3D" parent="CharacterArmature/Skeleton3D"]
mesh = ExtResource("3_ajlxp")
skin = SubResource("Skin_ko28d")
[node name="Suit_Body" type="MeshInstance3D" parent="CharacterArmature/Skeleton3D"]
mesh = ExtResource("4_7a734")
skin = SubResource("Skin_ko28d")
[node name="Suit_Feet" type="MeshInstance3D" parent="CharacterArmature/Skeleton3D"]
mesh = ExtResource("5_6syjw")
skin = SubResource("Skin_ko28d")
[node name="Suit_Legs" type="MeshInstance3D" parent="CharacterArmature/Skeleton3D"]
mesh = ExtResource("6_7eie4")
skin = SubResource("Skin_ko28d")
[node name="ItemHold_BoneAttach" type="BoneAttachment3D" parent="CharacterArmature/Skeleton3D"]
transform = Transform3D(-0.0135656, -0.102041, -0.994688, -0.045245, -0.993698, 0.102557, -0.998884, 0.0463959, 0.00886312, -0.238703, 0.991208, 0.0599381)
bone_name = "Middle1.R"
bone_idx = 39
script = ExtResource("7_sn2x3")
[node name="ItemHoldPoint" type="Marker3D" parent="CharacterArmature/Skeleton3D/ItemHold_BoneAttach"]
transform = Transform3D(1, 3.72529e-09, 1.86265e-09, -1.11759e-08, 1, 2.15659e-08, -1.86265e-09, -2.99769e-09, 1, 0.003, 0.12, -0.032)
[node name="mug" type="MeshInstance3D" parent="CharacterArmature/Skeleton3D/ItemHold_BoneAttach/ItemHoldPoint"]
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, -0.01, 0, -0.08)
visible = false
mesh = ExtResource("8_y10x8")
[node name="PlayerVisibilityShape" type="StaticBody3D" parent="CharacterArmature"]
collision_layer = 2
collision_mask = 2
[node name="Standing" type="CollisionShape3D" parent="CharacterArmature/PlayerVisibilityShape"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.8, 0.1)
shape = SubResource("CapsuleShape3D_q8qsp")
debug_fill = false
[node name="Crouching" type="CollisionShape3D" parent="CharacterArmature/PlayerVisibilityShape"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0.2)
shape = SubResource("CapsuleShape3D_62lcb")
disabled = true
debug_fill = false
[node name="GrabArea_Upper" type="Area3D" parent="CharacterArmature"]
collision_layer = 0
collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="CharacterArmature/GrabArea_Upper"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2, 0)
shape = SubResource("CylinderShape3D_y10x8")
debug_color = Color(0.899311, 0.000178854, 0.76619, 0.42)
[node name="GrabArea_Lower" type="Area3D" parent="CharacterArmature"]
collision_layer = 0
collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="CharacterArmature/GrabArea_Lower"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.35, 0)
shape = SubResource("CylinderShape3D_1sc42")
debug_color = Color(0.899311, 0.000178854, 0.76619, 0.42)
[node name="AnimationPlayer_new" type="AnimationPlayer" parent="."]
libraries = {
&"": SubResource("AnimationLibrary_11wwj")
}
autoplay = "Idle_Neutral"
playback_default_blend_time = 0.6
[node name="note" parent="." instance=ExtResource("37_1sc42")]
visible = false
[node name="hud" parent="." instance=ExtResource("38_0t50q")]
[node name="LockTimer" type="Timer" parent="."]
process_callback = 0
one_shot = true
[connection signal="timeout" from="LockTimer" to="." method="unlock"]

View File

@@ -0,0 +1,3 @@
extends StaticBody3D
var parent : Node

View File

@@ -0,0 +1 @@
uid://cbjga11vpedlf