AI can 'die' now; blackboard work
This commit is contained in:
@@ -101,6 +101,7 @@ func _ready():
|
||||
data_hair_materials[mat] = load(mat)
|
||||
CharacterSystemWorld.add_hair_material(data_hair_materials[mat], "male")
|
||||
CharacterSystemWorld.add_hair_material(data_hair_materials[mat], "female")
|
||||
CharacterSystemWorld.create_character_pool(1024)
|
||||
assert(male_faces.size() > 0)
|
||||
assert(female_faces.size() > 0)
|
||||
assert(male_hairs.size() > 0)
|
||||
@@ -159,114 +160,25 @@ func get_hair_node(sc: Node) -> Node:
|
||||
return sc.get_node(e)
|
||||
assert(0)
|
||||
return null
|
||||
func compose_kinematic_character(g, enable_modules = [], face = -1, hair = -1, hair_mat = -1):
|
||||
return CharacterSystemWorld.create_character(g, enable_modules, face, hair, hair_mat)
|
||||
var body = KinematicBody.new()
|
||||
var cshape = CollisionShape.new()
|
||||
body.add_child(cshape)
|
||||
var capsule = CapsuleShape.new()
|
||||
var character_data = {
|
||||
"sex": g,
|
||||
"modules": enable_modules
|
||||
}
|
||||
var face_scene: PackedScene
|
||||
var hair_scene: PackedScene
|
||||
var face_i: Node
|
||||
var hair_i: Node
|
||||
var face_node: Node
|
||||
var hair_node: Node
|
||||
match g:
|
||||
"female":
|
||||
if face == -1:
|
||||
face = rnd.randi() % female_faces.size()
|
||||
if hair == -1:
|
||||
hair = rnd.randi() % female_hairs.size()
|
||||
face_scene = mesh_female_faces[female_faces[face]]
|
||||
hair_scene = mesh_female_hairs[female_hairs[hair]]
|
||||
capsule.radius = 0.2
|
||||
capsule.height = 1.1
|
||||
capsule.margin = 0.05
|
||||
cshape.translation.x = 0
|
||||
cshape.translation.y = 0.751
|
||||
cshape.translation.z = 0
|
||||
cshape.rotation = Vector3(-PI/2.0, 0, 0)
|
||||
var i = female.instance()
|
||||
body.add_child(i)
|
||||
i.transform = Transform()
|
||||
face_node = get_face_node(i)
|
||||
hair_node = get_hair_node(i)
|
||||
"male":
|
||||
if face == -1:
|
||||
face = rnd.randi() % male_faces.size()
|
||||
if hair == -1:
|
||||
hair = rnd.randi() % male_hairs.size()
|
||||
face_scene = mesh_male_faces[male_faces[face]]
|
||||
hair_scene = mesh_male_hairs[male_hairs[hair]]
|
||||
capsule.radius = 0.3
|
||||
capsule.height = 1.2
|
||||
capsule.margin = 0.05
|
||||
cshape.translation.x = 0
|
||||
cshape.translation.y = 0.899
|
||||
cshape.translation.z = 0
|
||||
cshape.rotation = Vector3(-PI/2.0, 0, 0)
|
||||
var i = male.instance()
|
||||
body.add_child(i)
|
||||
i.transform = Transform()
|
||||
face_node = get_face_node(i)
|
||||
hair_node = get_hair_node(i)
|
||||
assert(face_node)
|
||||
face_i = face_scene.instance()
|
||||
face_i.add_to_group("face")
|
||||
prepare_extra_skeleton(face_i, "face")
|
||||
hair_i = hair_scene.instance()
|
||||
hair_i.add_to_group("hair")
|
||||
prepare_extra_skeleton(hair_i, "hair")
|
||||
if hair_mat == -1:
|
||||
hair_mat = rnd.randi() % hair_materials.size()
|
||||
var hmat = data_hair_materials[hair_materials[hair_mat]]
|
||||
assert(hmat)
|
||||
set_hair_material(hair_i, hmat)
|
||||
for e in face_node.get_children():
|
||||
e.queue_free()
|
||||
for e in hair_node.get_children():
|
||||
e.queue_free()
|
||||
face_node.add_child(face_i)
|
||||
hair_node.add_child(hair_i)
|
||||
var face_ctrl_i = face_ctrl.instance()
|
||||
face_ctrl_i.active = true
|
||||
face_i.add_child(face_ctrl_i)
|
||||
face_i.set_meta("body", body)
|
||||
body.set_meta("face_control", face_ctrl_i)
|
||||
body.set_meta("face_playback", "parameters/state/playback")
|
||||
face_ctrl_i.add_to_group("face")
|
||||
face_i.transform = Transform()
|
||||
character_data.face = face
|
||||
character_data.hair = hair
|
||||
character_data.hair_mat = hair_mat
|
||||
cshape.shape = capsule
|
||||
body.set_meta("character_data", character_data)
|
||||
for e in enable_modules:
|
||||
assert(modules.has(e))
|
||||
if modules.has(e):
|
||||
assert(modules[e])
|
||||
var obj = modules[e].new()
|
||||
body.add_child(obj)
|
||||
setup_character_physics(body)
|
||||
body.add_to_group("character")
|
||||
return body
|
||||
#func compose_kinematic_character(g, enable_modules = [], face = -1, hair = -1, hair_mat = -1):
|
||||
# var id = create_character_in_pool(
|
||||
# return CharacterSystemWorld.create_character(g, enable_modules, face, hair, hair_mat)
|
||||
|
||||
func replace_character(obj, g, enable_modules = [], face = -1, hair = -1, hair_mat = -1):
|
||||
func replace_player_character(obj, g, enable_modules = [], face = -1, hair = -1, hair_mat = -1):
|
||||
assert(obj)
|
||||
var xform = obj.global_transform
|
||||
var p = obj.get_parent()
|
||||
obj.queue_free()
|
||||
CharacterSystemWorld.create_player_character_in_pool(enable_modules, xform)
|
||||
var body = CharacterSystemWorld.create_character_visual(0)
|
||||
|
||||
# var body = compose_kinematic_character(g, enable_modules, face, hair, hair_mat)
|
||||
var body = CharacterSystemWorld.create_character(g, enable_modules, face, hair, hair_mat)
|
||||
p.add_child(body)
|
||||
body.global_transform = xform
|
||||
var orientation = Transform()
|
||||
orientation.basis = xform.basis
|
||||
body.set_meta("orientation", orientation)
|
||||
# var body = CharacterSystemWorld.create_character(g, enable_modules, face, hair, hair_mat)
|
||||
# p.add_child(body)
|
||||
# body.global_transform = xform
|
||||
# var orientation = Transform()
|
||||
# orientation.basis = xform.basis
|
||||
# body.set_meta("orientation", orientation)
|
||||
return body
|
||||
const basedir = "res://scenes/clothes/"
|
||||
#func prepare_extra_skeleton(obj, g):
|
||||
|
||||
@@ -350,7 +350,8 @@ func _physics_process(delta):
|
||||
base.push_back("bandit")
|
||||
if g.length() > 0:
|
||||
print(g, " ", base)
|
||||
characters.replace_character(n, g, base)
|
||||
CharacterSystemWorld.create_character_in_pool(g, base, n.global_transform)
|
||||
n.queue_free()
|
||||
elif n.is_in_group("car"):
|
||||
var p1 = cam.global_transform.origin
|
||||
var p2 = n.global_transform.origin
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=145 format=2]
|
||||
[gd_scene load_steps=153 format=2]
|
||||
|
||||
[ext_resource path="res://scenes/characters/vroid1-female.gltf" type="PackedScene" id=1]
|
||||
[ext_resource path="res://scenes/hair/female-hair1.tscn" type="PackedScene" id=2]
|
||||
@@ -70,6 +70,32 @@ node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=15]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=156]
|
||||
animation = "fall-back"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=157]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=154]
|
||||
nodes/Animation/node = SubResource( 156 )
|
||||
nodes/Animation/position = Vector2( 201, 341 )
|
||||
nodes/TimeScale/node = SubResource( 157 )
|
||||
nodes/TimeScale/position = Vector2( 440, 320 )
|
||||
nodes/output/position = Vector2( 680, 320 )
|
||||
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=158]
|
||||
animation = "fall-front"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=159]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=155]
|
||||
nodes/Animation/node = SubResource( 158 )
|
||||
nodes/Animation/position = Vector2( 161, 293 )
|
||||
nodes/TimeScale/node = SubResource( 159 )
|
||||
nodes/TimeScale/position = Vector2( 400, 280 )
|
||||
nodes/output/position = Vector2( 720, 220 )
|
||||
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=16]
|
||||
animation = "start-grabbed2"
|
||||
|
||||
@@ -153,7 +179,7 @@ nodes/TimeScale/position = Vector2( 580, 100 )
|
||||
nodes/output/position = Vector2( 1120, 120 )
|
||||
nodes/t1/node = SubResource( 26 )
|
||||
nodes/t1/position = Vector2( 880, 100 )
|
||||
node_connections = [ "output", 0, "t1", "t1", 0, "TimeScale", "t1", 1, "TimeScale 2", "TimeScale 2", 0, "Animation 2", "TimeScale", 0, "Animation" ]
|
||||
node_connections = [ "output", 0, "t1", "TimeScale", 0, "Animation", "t1", 0, "TimeScale", "t1", 1, "TimeScale 2", "TimeScale 2", 0, "Animation 2" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=28]
|
||||
animation = "walk1p2"
|
||||
@@ -185,7 +211,7 @@ nodes/TimeScale/position = Vector2( 620, 40 )
|
||||
nodes/Transition/node = SubResource( 32 )
|
||||
nodes/Transition/position = Vector2( 905, 264 )
|
||||
nodes/output/position = Vector2( 1280, 120 )
|
||||
node_connections = [ "output", 0, "Transition", "Transition", 0, "TimeScale", "Transition", 1, "TimeScale 2", "TimeScale 2", 0, "Animation 2", "TimeScale", 0, "Animation" ]
|
||||
node_connections = [ "output", 0, "Transition", "TimeScale", 0, "Animation", "TimeScale 2", 0, "Animation 2", "Transition", 0, "TimeScale", "Transition", 1, "TimeScale 2" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=34]
|
||||
animation = "07_01-walk"
|
||||
@@ -262,7 +288,7 @@ nodes/TimeScale/position = Vector2( 640, 200 )
|
||||
nodes/Transition/node = SubResource( 59 )
|
||||
nodes/Transition/position = Vector2( 860, 220 )
|
||||
nodes/output/position = Vector2( 1080, 200 )
|
||||
node_connections = [ "output", 0, "Transition", "Transition", 1, "TimeScale 2", "TimeScale 2", 0, "Animation 2", "TimeScale", 0, "Animation" ]
|
||||
node_connections = [ "output", 0, "Transition", "TimeScale", 0, "Animation", "TimeScale 2", 0, "Animation 2", "Transition", 1, "TimeScale 2" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=61]
|
||||
animation = "female-pray-startled1"
|
||||
@@ -328,7 +354,7 @@ nodes/attack2/position = Vector2( 1140, 300 )
|
||||
nodes/output/position = Vector2( 1580, 180 )
|
||||
nodes/speed/node = SubResource( 74 )
|
||||
nodes/speed/position = Vector2( 540, 60 )
|
||||
node_connections = [ "speed", 0, "Animation", "output", 0, "attack2", "TimeScale 2", 0, "Animation 3", "attack2", 0, "attack1", "attack2", 1, "TimeScale 2", "attack1", 0, "speed", "attack1", 1, "TimeScale", "TimeScale", 0, "Animation 2" ]
|
||||
node_connections = [ "speed", 0, "Animation", "output", 0, "attack2", "TimeScale", 0, "Animation 2", "attack2", 0, "attack1", "attack2", 1, "TimeScale 2", "attack1", 0, "speed", "attack1", 1, "TimeScale", "TimeScale 2", 0, "Animation 3" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=76]
|
||||
animation = "dagger-sacrifice-counter-p"
|
||||
@@ -550,6 +576,10 @@ switch_mode = 2
|
||||
switch_mode = 2
|
||||
auto_advance = true
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=160]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=161]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachine" id=110]
|
||||
states/attack-melee1/node = SubResource( 135 )
|
||||
states/attack-melee1/position = Vector2( 1277, 411.193 )
|
||||
@@ -559,6 +589,10 @@ states/climb1a/node = SubResource( 14 )
|
||||
states/climb1a/position = Vector2( 947, 503.193 )
|
||||
states/drive/node = SubResource( 15 )
|
||||
states/drive/position = Vector2( 868, 316.193 )
|
||||
states/fall-back/node = SubResource( 154 )
|
||||
states/fall-back/position = Vector2( 1301.67, 633.193 )
|
||||
states/fall-front/node = SubResource( 155 )
|
||||
states/fall-front/position = Vector2( 1357.67, 576.193 )
|
||||
states/grabbed/node = SubResource( 18 )
|
||||
states/grabbed/position = Vector2( 1290, 90.193 )
|
||||
states/guard-front-melee1/node = SubResource( 147 )
|
||||
@@ -595,9 +629,9 @@ states/turn_right/node = SubResource( 126 )
|
||||
states/turn_right/position = Vector2( 1059, 620.193 )
|
||||
states/use_tap/node = SubResource( 85 )
|
||||
states/use_tap/position = Vector2( 283, 143.193 )
|
||||
transitions = [ "locomotion", "passenger", SubResource( 86 ), "passenger", "locomotion", SubResource( 87 ), "passenger", "drive", SubResource( 88 ), "drive", "passenger", SubResource( 89 ), "drive", "locomotion", SubResource( 90 ), "locomotion", "drive", SubResource( 91 ), "sacrifice", "sacrificed", SubResource( 92 ), "sacrificed", "sacrifice", SubResource( 93 ), "locomotion", "kneel", SubResource( 94 ), "kneel", "pray", SubResource( 95 ), "pray", "locomotion", SubResource( 96 ), "pray", "pray-startled", SubResource( 97 ), "pray-startled", "pray-startled-walk", SubResource( 98 ), "sleeping", "locomotion", SubResource( 99 ), "pray-startled-walk", "stand-startled", SubResource( 100 ), "stand-startled", "locomotion", SubResource( 101 ), "locomotion", "grabbed", SubResource( 102 ), "grabbed", "locomotion", SubResource( 103 ), "locomotion", "climb1", SubResource( 104 ), "climb1", "locomotion", SubResource( 105 ), "locomotion", "climb1a", SubResource( 106 ), "climb1a", "locomotion", SubResource( 107 ), "use_tap", "locomotion", SubResource( 108 ), "locomotion", "use_tap", SubResource( 109 ), "locomotion", "start_walking", SubResource( 117 ), "start_walking", "locomotion", SubResource( 118 ), "locomotion", "stop_walking", SubResource( 119 ), "stop_walking", "locomotion", SubResource( 120 ), "locomotion", "tun_left", SubResource( 127 ), "tun_left", "locomotion", SubResource( 128 ), "locomotion", "turn_right", SubResource( 129 ), "turn_right", "locomotion", SubResource( 130 ), "locomotion", "attack-melee1", SubResource( 136 ), "attack-melee1", "locomotion", SubResource( 137 ), "attack-melee1", "guard-melee1", SubResource( 141 ), "guard-melee1", "attack-melee1", SubResource( 142 ), "locomotion", "guard-melee1", SubResource( 143 ), "guard-melee1", "locomotion", SubResource( 144 ), "attack-melee1", "guard-front-melee1", SubResource( 148 ), "guard-front-melee1", "attack-melee1", SubResource( 149 ), "locomotion", "guard-front-melee1", SubResource( 150 ), "guard-front-melee1", "locomotion", SubResource( 151 ) ]
|
||||
transitions = [ "locomotion", "passenger", SubResource( 86 ), "passenger", "locomotion", SubResource( 87 ), "passenger", "drive", SubResource( 88 ), "drive", "passenger", SubResource( 89 ), "drive", "locomotion", SubResource( 90 ), "locomotion", "drive", SubResource( 91 ), "sacrifice", "sacrificed", SubResource( 92 ), "sacrificed", "sacrifice", SubResource( 93 ), "locomotion", "kneel", SubResource( 94 ), "kneel", "pray", SubResource( 95 ), "pray", "locomotion", SubResource( 96 ), "pray", "pray-startled", SubResource( 97 ), "pray-startled", "pray-startled-walk", SubResource( 98 ), "sleeping", "locomotion", SubResource( 99 ), "pray-startled-walk", "stand-startled", SubResource( 100 ), "stand-startled", "locomotion", SubResource( 101 ), "locomotion", "grabbed", SubResource( 102 ), "grabbed", "locomotion", SubResource( 103 ), "locomotion", "climb1", SubResource( 104 ), "climb1", "locomotion", SubResource( 105 ), "locomotion", "climb1a", SubResource( 106 ), "climb1a", "locomotion", SubResource( 107 ), "use_tap", "locomotion", SubResource( 108 ), "locomotion", "use_tap", SubResource( 109 ), "locomotion", "start_walking", SubResource( 117 ), "start_walking", "locomotion", SubResource( 118 ), "locomotion", "stop_walking", SubResource( 119 ), "stop_walking", "locomotion", SubResource( 120 ), "locomotion", "tun_left", SubResource( 127 ), "tun_left", "locomotion", SubResource( 128 ), "locomotion", "turn_right", SubResource( 129 ), "turn_right", "locomotion", SubResource( 130 ), "locomotion", "attack-melee1", SubResource( 136 ), "attack-melee1", "locomotion", SubResource( 137 ), "attack-melee1", "guard-melee1", SubResource( 141 ), "guard-melee1", "attack-melee1", SubResource( 142 ), "locomotion", "guard-melee1", SubResource( 143 ), "guard-melee1", "locomotion", SubResource( 144 ), "attack-melee1", "guard-front-melee1", SubResource( 148 ), "guard-front-melee1", "attack-melee1", SubResource( 149 ), "locomotion", "guard-front-melee1", SubResource( 150 ), "guard-front-melee1", "locomotion", SubResource( 151 ), "locomotion", "fall-front", SubResource( 160 ), "locomotion", "fall-back", SubResource( 161 ) ]
|
||||
start_node = "locomotion"
|
||||
graph_offset = Vector2( 489.672, 57.1925 )
|
||||
graph_offset = Vector2( 496.672, 7.1925 )
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=111]
|
||||
graph_offset = Vector2( 445.846, -157.796 )
|
||||
@@ -614,7 +648,7 @@ nodes/blade_right/position = Vector2( 1400, 100 )
|
||||
nodes/output/position = Vector2( 1820, -20 )
|
||||
nodes/state/node = SubResource( 110 )
|
||||
nodes/state/position = Vector2( 480, 120 )
|
||||
node_connections = [ "output", 0, "blade_right", "all_scale", 0, "state", "blade_left", 0, "all_scale", "blade_left", 1, "Animation", "blade_right", 0, "blade_left", "blade_right", 1, "Animation 2" ]
|
||||
node_connections = [ "output", 0, "blade_right", "blade_right", 0, "blade_left", "blade_right", 1, "Animation 2", "blade_left", 0, "all_scale", "blade_left", 1, "Animation", "all_scale", 0, "state" ]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachinePlayback" id=112]
|
||||
|
||||
@@ -632,7 +666,7 @@ bones/101/bound_children = [ NodePath("wrist_r") ]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00418961, 0.00654769, 0.00506566 )
|
||||
|
||||
[node name="head" type="BoneAttachment" parent="skeleton/Skeleton" index="2"]
|
||||
transform = Transform( 0.83427, 0.331644, -0.440515, -0.191809, 0.923568, 0.332049, 0.516932, -0.192513, 0.834056, -0.0308392, 1.3151, 0.0139266 )
|
||||
transform = Transform( 0.932316, 0.218868, -0.288047, -0.122982, 0.940534, 0.316554, 0.340181, -0.259705, 0.903776, -0.0353679, 1.31372, 0.0207836 )
|
||||
bone_name = "Head"
|
||||
|
||||
[node name="marker_talk" type="Spatial" parent="skeleton/Skeleton/head" index="0"]
|
||||
@@ -662,7 +696,7 @@ transform = Transform( 1, -1.24197e-11, 0, 1.06852e-11, 1, -5.82077e-11, 0, 0, 1
|
||||
[node name="female-face1" parent="skeleton/Skeleton/head/face" index="0" instance=ExtResource( 3 )]
|
||||
|
||||
[node name="hips" type="BoneAttachment" parent="skeleton/Skeleton" index="3"]
|
||||
transform = Transform( 0.999052, 0.0440607, -0.00179843, 0.0440316, -0.998945, -0.014082, -0.00241711, 0.0139897, -0.999873, 0.000203862, 0.862223, -0.00645695 )
|
||||
transform = Transform( 0.988843, 0.0743826, -0.129405, 0.0739601, -0.997197, -0.00811786, -0.129657, -0.0015435, -0.991557, 0.000203862, 0.862472, -0.00645695 )
|
||||
bone_name = "Hips"
|
||||
|
||||
[node name="marker_dagger_sacrifice" type="Spatial" parent="skeleton/Skeleton/hips" index="0"]
|
||||
@@ -677,21 +711,21 @@ monitorable = false
|
||||
shape = SubResource( 2 )
|
||||
|
||||
[node name="wrist_r" type="BoneAttachment" parent="skeleton/Skeleton" index="4"]
|
||||
transform = Transform( -0.523493, 0.831405, 0.186331, 0.799005, 0.403087, 0.446219, 0.295882, 0.382472, -0.875311, 0.246516, 0.816854, 0.0530603 )
|
||||
transform = Transform( -0.155847, 0.968072, -0.196331, 0.907188, 0.218911, 0.359287, 0.390795, -0.122115, -0.912342, 0.21806, 0.798826, -0.0352511 )
|
||||
bone_name = "wrist_ik_R"
|
||||
|
||||
[node name="weapon_right" type="Spatial" parent="skeleton/Skeleton/wrist_r" index="0"]
|
||||
transform = Transform( 1, 0, 0, 0, -1.62921e-07, 1, 0, -1, -1.62921e-07, -0.08, 0, -0.01 )
|
||||
|
||||
[node name="wrist_l" type="BoneAttachment" parent="skeleton/Skeleton" index="5"]
|
||||
transform = Transform( -0.108058, -0.685164, 0.720328, -0.790371, 0.498715, 0.355805, -0.603024, -0.530878, -0.595424, -0.214561, 0.852356, -0.138021 )
|
||||
transform = Transform( -0.119609, -0.729474, 0.673469, -0.929594, 0.320491, 0.182047, -0.34864, -0.604278, -0.716448, -0.256349, 0.818886, 0.0048945 )
|
||||
bone_name = "wrist_ik_L"
|
||||
|
||||
[node name="weapon_left" type="Spatial" parent="skeleton/Skeleton/wrist_l" index="0"]
|
||||
transform = Transform( 1, 0, 0, 0, -1.62921e-07, -1, 0, 1, -1.62921e-07, 0.08, 0, -0.01 )
|
||||
|
||||
[node name="chest" type="BoneAttachment" parent="skeleton/Skeleton" index="6"]
|
||||
transform = Transform( 0.993031, -0.0677989, -0.096651, 0.0571863, 0.992449, -0.10864, 0.103279, 0.102345, 0.989339, -0.00688225, 1.02154, -0.0291024 )
|
||||
transform = Transform( 0.991647, -0.0337554, 0.124843, 0.0471192, 0.993257, -0.105626, -0.120448, 0.110622, 0.986529, -0.0143315, 1.02163, -0.0264497 )
|
||||
bone_name = "Chest"
|
||||
|
||||
[node name="chest_hurt" type="Area" parent="skeleton/Skeleton/chest" index="0"]
|
||||
@@ -706,7 +740,7 @@ shape = SubResource( 3 )
|
||||
[node name="MeshInstance" type="MeshInstance" parent="skeleton/Skeleton" index="7"]
|
||||
|
||||
[node name="neck" type="BoneAttachment" parent="skeleton/Skeleton" index="8"]
|
||||
transform = Transform( 0.930267, -0.237234, -0.27995, 0.246019, 0.96927, -0.00386425, 0.272244, -0.0652763, 0.959976, -0.0132515, 1.24324, 0.0187659 )
|
||||
transform = Transform( 0.942651, -0.3302, -0.0496428, 0.329635, 0.94388, -0.0191404, 0.053161, 0.00168132, 0.998576, -0.0108881, 1.24374, 0.020659 )
|
||||
bone_name = "Neck"
|
||||
|
||||
[node name="marker_neck_grab" type="Position3D" parent="skeleton/Skeleton/neck" index="0"]
|
||||
@@ -725,6 +759,8 @@ parameters/state/playback = SubResource( 112 )
|
||||
parameters/state/attack-melee1/attack1_speed/scale = 1.0
|
||||
parameters/state/climb1/TimeScale/scale = 2.0
|
||||
parameters/state/climb1a/TimeScale/scale = 2.0
|
||||
parameters/state/fall-back/TimeScale/scale = 1.0
|
||||
parameters/state/fall-front/TimeScale/scale = 1.0
|
||||
parameters/state/grabbed/TimeScale/scale = 1.0
|
||||
parameters/state/guard-front-melee1/TimeScale/scale = 1.0
|
||||
parameters/state/guard-melee1/TimeScale/scale = 1.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=116 format=2]
|
||||
[gd_scene load_steps=123 format=2]
|
||||
|
||||
[ext_resource path="res://scenes/characters/vroid1-man.gltf" type="PackedScene" id=1]
|
||||
[ext_resource path="res://scenes/hair/male-hair1.tscn" type="PackedScene" id=2]
|
||||
@@ -79,6 +79,32 @@ nodes/TimeScale/position = Vector2( 520, 120 )
|
||||
nodes/output/position = Vector2( 740, 140 )
|
||||
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=166]
|
||||
animation = "fall-back"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=167]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=162]
|
||||
graph_offset = Vector2( -555.162, -192.155 )
|
||||
nodes/Animation/node = SubResource( 166 )
|
||||
nodes/Animation/position = Vector2( -180, 160 )
|
||||
nodes/TimeScale/node = SubResource( 167 )
|
||||
nodes/TimeScale/position = Vector2( 40, 160 )
|
||||
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=163]
|
||||
animation = "fall-front"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=164]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=165]
|
||||
nodes/Animation/node = SubResource( 163 )
|
||||
nodes/Animation/position = Vector2( 239, 374 )
|
||||
nodes/TimeScale/node = SubResource( 164 )
|
||||
nodes/TimeScale/position = Vector2( 451, 367 )
|
||||
nodes/output/position = Vector2( 800, 360 )
|
||||
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=14]
|
||||
animation = "start-grab2"
|
||||
|
||||
@@ -290,7 +316,7 @@ nodes/TimeScale/position = Vector2( 780, 260 )
|
||||
nodes/Transition/node = SubResource( 118 )
|
||||
nodes/Transition/position = Vector2( 500, 280 )
|
||||
nodes/output/position = Vector2( 1000, 260 )
|
||||
node_connections = [ "output", 0, "TimeScale", "Transition", 0, "Animation", "Transition", 1, "Animation 2", "TimeScale", 0, "Transition" ]
|
||||
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Transition", "Transition", 0, "Animation", "Transition", 1, "Animation 2" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=119]
|
||||
animation = "turn-right"
|
||||
@@ -318,7 +344,7 @@ nodes/TimeScale/position = Vector2( 840, 260 )
|
||||
nodes/Transition/node = SubResource( 120 )
|
||||
nodes/Transition/position = Vector2( 560, 260 )
|
||||
nodes/output/position = Vector2( 1060, 260 )
|
||||
node_connections = [ "output", 0, "TimeScale", "Transition", 0, "Animation", "Transition", 1, "Animation 2", "TimeScale", 0, "Transition" ]
|
||||
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Transition", "Transition", 0, "Animation", "Transition", 1, "Animation 2" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=123]
|
||||
animation = "dagger-sacrifice-counter-a"
|
||||
@@ -350,7 +376,7 @@ nodes/TimeScale/position = Vector2( 700, 140 )
|
||||
nodes/Transition/node = SubResource( 125 )
|
||||
nodes/Transition/position = Vector2( 940, 140 )
|
||||
nodes/output/position = Vector2( 1240, 140 )
|
||||
node_connections = [ "output", 0, "Transition", "Transition", 0, "TimeScale", "Transition", 1, "TimeScale 2", "TimeScale 2", 0, "Animation 2", "TimeScale", 0, "Animation" ]
|
||||
node_connections = [ "output", 0, "Transition", "TimeScale", 0, "Animation", "TimeScale 2", 0, "Animation 2", "Transition", 0, "TimeScale", "Transition", 1, "TimeScale 2" ]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=55]
|
||||
|
||||
@@ -443,6 +469,10 @@ switch_mode = 2
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=161]
|
||||
switch_mode = 2
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=168]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=169]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachine" id=70]
|
||||
states/attack-melee1/node = SubResource( 142 )
|
||||
states/attack-melee1/position = Vector2( 804.317, 380 )
|
||||
@@ -452,6 +482,10 @@ states/climb1a/node = SubResource( 10 )
|
||||
states/climb1a/position = Vector2( 713.444, 92 )
|
||||
states/drive/node = SubResource( 13 )
|
||||
states/drive/position = Vector2( 424, 557 )
|
||||
states/fall-back/node = SubResource( 162 )
|
||||
states/fall-back/position = Vector2( 568.317, 615 )
|
||||
states/fall-front/node = SubResource( 165 )
|
||||
states/fall-front/position = Vector2( 604.317, 536 )
|
||||
states/grab/node = SubResource( 16 )
|
||||
states/grab/position = Vector2( 713.444, 145 )
|
||||
states/guard-front-melee1/node = SubResource( 157 )
|
||||
@@ -476,12 +510,12 @@ states/turn_right/node = SubResource( 110 )
|
||||
states/turn_right/position = Vector2( 177.444, 671 )
|
||||
states/use_tap/node = SubResource( 54 )
|
||||
states/use_tap/position = Vector2( -138.556, 174 )
|
||||
transitions = [ "locomotion", "drive", SubResource( 55 ), "drive", "locomotion", SubResource( 56 ), "locomotion", "passenger", SubResource( 57 ), "passenger", "locomotion", SubResource( 58 ), "drive", "passenger", SubResource( 59 ), "passenger", "drive", SubResource( 60 ), "sleeping", "locomotion", SubResource( 61 ), "locomotion", "grab", SubResource( 62 ), "grab", "locomotion", SubResource( 63 ), "locomotion", "climb1", SubResource( 64 ), "climb1", "locomotion", SubResource( 65 ), "locomotion", "climb1a", SubResource( 66 ), "climb1a", "locomotion", SubResource( 67 ), "locomotion", "use_tap", SubResource( 68 ), "use_tap", "locomotion", SubResource( 69 ), "locomotion", "stop_walking", SubResource( 100 ), "stop_walking", "locomotion", SubResource( 101 ), "locomotion", "start_walking", SubResource( 103 ), "start_walking", "locomotion", SubResource( 104 ), "locomotion", "turn_left", SubResource( 111 ), "turn_left", "locomotion", SubResource( 112 ), "locomotion", "turn_right", SubResource( 113 ), "turn_right", "locomotion", SubResource( 114 ), "locomotion", "attack-melee1", SubResource( 143 ), "attack-melee1", "locomotion", SubResource( 144 ), "attack-melee1", "guard-melee1", SubResource( 153 ), "guard-melee1", "attack-melee1", SubResource( 154 ), "locomotion", "guard-melee1", SubResource( 155 ), "guard-melee1", "locomotion", SubResource( 156 ), "locomotion", "guard-front-melee1", SubResource( 158 ), "guard-front-melee1", "locomotion", SubResource( 159 ), "guard-front-melee1", "attack-melee1", SubResource( 160 ), "attack-melee1", "guard-front-melee1", SubResource( 161 ) ]
|
||||
transitions = [ "locomotion", "drive", SubResource( 55 ), "drive", "locomotion", SubResource( 56 ), "locomotion", "passenger", SubResource( 57 ), "passenger", "locomotion", SubResource( 58 ), "drive", "passenger", SubResource( 59 ), "passenger", "drive", SubResource( 60 ), "sleeping", "locomotion", SubResource( 61 ), "locomotion", "grab", SubResource( 62 ), "grab", "locomotion", SubResource( 63 ), "locomotion", "climb1", SubResource( 64 ), "climb1", "locomotion", SubResource( 65 ), "locomotion", "climb1a", SubResource( 66 ), "climb1a", "locomotion", SubResource( 67 ), "locomotion", "use_tap", SubResource( 68 ), "use_tap", "locomotion", SubResource( 69 ), "locomotion", "stop_walking", SubResource( 100 ), "stop_walking", "locomotion", SubResource( 101 ), "locomotion", "start_walking", SubResource( 103 ), "start_walking", "locomotion", SubResource( 104 ), "locomotion", "turn_left", SubResource( 111 ), "turn_left", "locomotion", SubResource( 112 ), "locomotion", "turn_right", SubResource( 113 ), "turn_right", "locomotion", SubResource( 114 ), "locomotion", "attack-melee1", SubResource( 143 ), "attack-melee1", "locomotion", SubResource( 144 ), "attack-melee1", "guard-melee1", SubResource( 153 ), "guard-melee1", "attack-melee1", SubResource( 154 ), "locomotion", "guard-melee1", SubResource( 155 ), "guard-melee1", "locomotion", SubResource( 156 ), "locomotion", "guard-front-melee1", SubResource( 158 ), "guard-front-melee1", "locomotion", SubResource( 159 ), "guard-front-melee1", "attack-melee1", SubResource( 160 ), "attack-melee1", "guard-front-melee1", SubResource( 161 ), "locomotion", "fall-front", SubResource( 168 ), "locomotion", "fall-back", SubResource( 169 ) ]
|
||||
start_node = "locomotion"
|
||||
graph_offset = Vector2( -103.683, 58 )
|
||||
graph_offset = Vector2( -230.683, 15 )
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=71]
|
||||
graph_offset = Vector2( -610.686, 0 )
|
||||
graph_offset = Vector2( -534, -71 )
|
||||
nodes/Animation/node = SubResource( 2 )
|
||||
nodes/Animation/position = Vector2( -200, 260 )
|
||||
"nodes/Animation 2/node" = SubResource( 1 )
|
||||
@@ -493,15 +527,10 @@ nodes/blade_right/position = Vector2( 680, 320 )
|
||||
nodes/output/position = Vector2( 1040, 120 )
|
||||
nodes/state/node = SubResource( 70 )
|
||||
nodes/state/position = Vector2( -179, 86 )
|
||||
node_connections = [ "output", 0, "blade_right", "blade_left", 0, "state", "blade_left", 1, "Animation", "blade_right", 0, "blade_left", "blade_right", 1, "Animation 2" ]
|
||||
node_connections = [ "output", 0, "blade_right", "blade_right", 0, "blade_left", "blade_right", 1, "Animation 2", "blade_left", 0, "state", "blade_left", 1, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachinePlayback" id=72]
|
||||
|
||||
[sub_resource type="CapsuleShape" id=162]
|
||||
margin = 0.08
|
||||
radius = 0.4
|
||||
height = 1.12
|
||||
|
||||
[node name="vroid1-man" instance=ExtResource( 1 )]
|
||||
|
||||
[node name="Skeleton" parent="." index="0"]
|
||||
@@ -514,7 +543,7 @@ bones/94/bound_children = [ NodePath("wrist_r") ]
|
||||
bones/96/bound_children = [ NodePath("wrist_l") ]
|
||||
|
||||
[node name="wrist_r" type="BoneAttachment" parent="Skeleton" index="2"]
|
||||
transform = Transform( 0.0279129, 0.998728, 0.041974, 0.0839921, -0.0441852, 0.995486, 0.996075, -0.0242614, -0.0851186, 0.24008, 1.0159, -0.0908556 )
|
||||
transform = Transform( 0.0279129, 0.998728, 0.041974, 0.0839921, -0.0441852, 0.995486, 0.996075, -0.0242614, -0.0851187, 0.24008, 1.0159, -0.113418 )
|
||||
bone_name = "wrist_ik_r"
|
||||
|
||||
[node name="marker_wrist_r_grab" type="Position3D" parent="Skeleton/wrist_r" index="0"]
|
||||
@@ -525,7 +554,7 @@ visible = false
|
||||
transform = Transform( -1.62921e-07, -1, 0, -1.62921e-07, 2.65431e-14, 1, -1, 1.62921e-07, -1.62921e-07, -0.0452205, -0.00161505, -0.0947611 )
|
||||
|
||||
[node name="wrist_l" type="BoneAttachment" parent="Skeleton" index="3"]
|
||||
transform = Transform( 0.531637, -0.84656, 0.0264325, -0.0845947, -0.0220212, 0.996172, -0.842737, -0.531838, -0.0833217, -0.202819, 1.03278, -0.0249881 )
|
||||
transform = Transform( 0.531637, -0.84656, 0.0264325, -0.0845947, -0.0220212, 0.996172, -0.842737, -0.531838, -0.0833217, -0.202819, 1.03678, -0.00230364 )
|
||||
bone_name = "wrist_ik_l"
|
||||
|
||||
[node name="marker_wrist_l_grab" type="Position3D" parent="Skeleton/wrist_l" index="0"]
|
||||
@@ -536,7 +565,7 @@ visible = false
|
||||
transform = Transform( -1.62921e-07, 1, 0, 1.62921e-07, 2.65431e-14, -1, -1, -1.62921e-07, -1.62921e-07, 0.04, -0.01, -0.089 )
|
||||
|
||||
[node name="head" type="BoneAttachment" parent="Skeleton" index="4"]
|
||||
transform = Transform( 0.994828, 0.00617403, -0.101387, 0.0314632, 0.930328, 0.365376, 0.0965788, -0.366676, 0.925322, -0.0326583, 1.69764, -0.00392299 )
|
||||
transform = Transform( 0.985928, 0.0311576, -0.16424, 0.0314512, 0.93036, 0.365296, 0.164184, -0.365322, 0.916287, -0.0322545, 1.69764, -0.00238798 )
|
||||
bone_name = "J_Bip_C_Head"
|
||||
|
||||
[node name="marker_talk" type="Position3D" parent="Skeleton/head" index="0"]
|
||||
@@ -563,7 +592,7 @@ transform = Transform( 0.967007, -0.0921614, 0.237496, 0.0940632, 0.995561, 0.00
|
||||
shape = SubResource( 149 )
|
||||
|
||||
[node name="hips" type="BoneAttachment" parent="Skeleton" index="5"]
|
||||
transform = Transform( 0.985395, -0.138022, 0.0997276, 0.150103, 0.98061, -0.125986, -0.0804051, 0.139115, 0.987006, 0.000514592, 1.10104, -0.0117666 )
|
||||
transform = Transform( 0.980587, -0.131394, 0.145552, 0.150098, 0.980611, -0.125986, -0.126176, 0.145387, 0.981296, 0.000514592, 1.10104, -0.0117666 )
|
||||
bone_name = "J_Bip_C_Hips"
|
||||
|
||||
[node name="marker_hips_action" type="Position3D" parent="Skeleton/hips" index="0"]
|
||||
@@ -579,7 +608,7 @@ monitorable = false
|
||||
shape = SubResource( 148 )
|
||||
|
||||
[node name="neck" type="BoneAttachment" parent="Skeleton" index="6"]
|
||||
transform = Transform( 0.996345, -0.0385984, 0.0762004, 0.02621, 0.987196, 0.157347, -0.0812981, -0.154775, 0.984599, -0.0288674, 1.60068, 0.0112781 )
|
||||
transform = Transform( 0.991482, -0.0457548, 0.121939, 0.0262054, 0.987196, 0.157347, -0.127577, -0.152812, 0.979986, -0.0277608, 1.60068, 0.0126202 )
|
||||
bone_name = "J_Bip_C_Neck"
|
||||
|
||||
[node name="marker_neck_grab" type="Position3D" parent="Skeleton/neck" index="0"]
|
||||
@@ -587,7 +616,7 @@ transform = Transform( 0.998758, -0.00781338, 0.0492147, 0.00787775, 0.999969, -
|
||||
visible = false
|
||||
|
||||
[node name="penis_2" type="BoneAttachment" parent="Skeleton" index="7"]
|
||||
transform = Transform( 0.985395, 0.0857902, -0.147092, 0.150103, -0.845508, 0.51243, -0.0804058, -0.527025, -0.846038, 0.00954038, 0.991264, -0.106081 )
|
||||
transform = Transform( 0.980587, 0.061167, -0.186302, 0.150098, -0.845509, 0.512431, -0.126176, -0.530446, -0.838276, 0.00514091, 0.991264, -0.106399 )
|
||||
bone_name = "penis2"
|
||||
|
||||
[node name="marker_penis_action" type="Position3D" parent="Skeleton/penis_2" index="0"]
|
||||
@@ -595,7 +624,7 @@ transform = Transform( 0.998824, -0.0252848, -0.0413812, 0.0249792, 0.999657, -0
|
||||
visible = false
|
||||
|
||||
[node name="chest" type="BoneAttachment" parent="Skeleton" index="8"]
|
||||
transform = Transform( 0.996345, -0.0216645, 0.0826291, 0.0262187, 0.998173, -0.0544353, -0.0812988, 0.0564028, 0.995092, -0.0233174, 1.33823, -0.00534375 )
|
||||
transform = Transform( 0.991482, -0.0190115, 0.128848, 0.026214, 0.998173, -0.0544356, -0.127578, 0.0573495, 0.990169, -0.0229915, 1.33823, -0.00424174 )
|
||||
bone_name = "J_Bip_C_Chest"
|
||||
|
||||
[node name="chest_hurt" type="Area" parent="Skeleton/chest" index="0"]
|
||||
@@ -618,6 +647,8 @@ parameters/state/attack-melee1/TimeScale/scale = 1.0
|
||||
parameters/state/climb1/TimeScale/scale = 2.0
|
||||
parameters/state/climb1a/TimeScale/scale = 2.0
|
||||
parameters/state/drive/TimeScale/scale = 1.0
|
||||
parameters/state/fall-back/TimeScale/scale = 1.0
|
||||
parameters/state/fall-front/TimeScale/scale = 1.0
|
||||
parameters/state/grab/TimeScale/scale = 1.0
|
||||
parameters/state/guard-melee1/TimeScale/scale = 1.0
|
||||
parameters/state/locomotion/loc/blend_position = Vector2( -0.00293946, -0.0151844 )
|
||||
@@ -639,7 +670,3 @@ parameters/state/turn_right/Transition/current = 0
|
||||
parameters/state/use_tap/TimeScale/scale = 1.0
|
||||
"parameters/state/use_tap/TimeScale 2/scale" = 1.0
|
||||
parameters/state/use_tap/Transition/current = 1
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="." index="4"]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0.96478, 0 )
|
||||
shape = SubResource( 162 )
|
||||
|
||||
@@ -1,12 +1,2 @@
|
||||
extends Spatial
|
||||
|
||||
|
||||
# Declare member variables here. Examples:
|
||||
# var a = 2
|
||||
# var b = "text"
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
#func _ready():
|
||||
# characters.replace_character($npc1, "male", ["cmdq", "marker", "hurtboxes", "bandit"])
|
||||
# characters.replace_character($npc2, "female", ["cmdq", "marker", "hurtboxes", "bandit"])
|
||||
|
||||
@@ -9,14 +9,15 @@ script = ExtResource( 3 )
|
||||
|
||||
[node name="campfire" parent="." instance=ExtResource( 1 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||
material/0 = null
|
||||
material/1 = null
|
||||
|
||||
[node name="tent" parent="." instance=ExtResource( 2 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 3 )
|
||||
|
||||
[node name="npc1" type="Spatial" parent="." groups=["bandit", "male", "spawn"]]
|
||||
transform = Transform( 0.930494, 0, 0.366306, 0, 1, 0, -0.366306, 0, 0.930494, 2.86465, 0.178202, 0 )
|
||||
transform = Transform( 0.930494, 0, 0.366306, 0, 1, 0, -0.366306, 0, 0.930494, 4.71933, 0.178202, 0 )
|
||||
|
||||
[node name="npc3" type="Spatial" parent="." groups=["bandit", "male", "spawn"]]
|
||||
transform = Transform( 0.930494, 0, 0.366306, 0, 1, 0, -0.366306, 0, 0.930494, 2.49152, 0.178202, 0 )
|
||||
|
||||
[node name="npc2" type="Spatial" parent="." groups=["bandit", "female", "spawn"]]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -2.38509, 0.249482, 2.91225 )
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -2.38509, 0.249482, 0.0150008 )
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@ var blood = preload("res://scenes/decals/blood.tscn")
|
||||
var blood_decal = preload("res://scenes/decals/blood1-decal.gltf")
|
||||
var rnd
|
||||
var initialized = false
|
||||
func init():
|
||||
func init(tick):
|
||||
assert(!initialized)
|
||||
if initialized:
|
||||
return
|
||||
@@ -61,7 +61,7 @@ func area_hit(area, e):
|
||||
# TODO: add delay
|
||||
bi.queue_free()
|
||||
|
||||
func update_physics(delta):
|
||||
func update_physics(tick, delta):
|
||||
assert(initialized)
|
||||
var root = get_character()
|
||||
if !root:
|
||||
@@ -98,6 +98,6 @@ func update_physics(delta):
|
||||
# decal.global_transform.basis = Basis(normal).scaled(Vector3(scale, 1.0, scale)).rotated(normal, rot)
|
||||
return ERR_BUSY
|
||||
|
||||
func update(delta):
|
||||
func update(tick, delta):
|
||||
return ERR_BUSY
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ extends AIScriptModule
|
||||
|
||||
var animtree: AnimationTree
|
||||
var root_motion_track
|
||||
func init():
|
||||
func init(tick):
|
||||
# process_priority = 0
|
||||
pass
|
||||
|
||||
@@ -23,7 +23,7 @@ func can_walk_there(dest: Vector3) -> bool:
|
||||
else:
|
||||
return true
|
||||
|
||||
func update_physics(delta):
|
||||
func update_physics(tick, delta):
|
||||
var root = get_character()
|
||||
var orientation: Transform
|
||||
assert(root.has_meta("skeleton"))
|
||||
@@ -258,5 +258,5 @@ func update_physics(delta):
|
||||
root.remove_meta("cmdqueue")
|
||||
return ERR_BUSY
|
||||
|
||||
func update(delta):
|
||||
func update(tick, delta):
|
||||
return ERR_BUSY
|
||||
|
||||
@@ -29,7 +29,7 @@ const guard_distance = 2.0
|
||||
const engage_distance = 10.0
|
||||
const flee_distance = 5.0
|
||||
|
||||
var blackboard = {
|
||||
var init_blackboard = {
|
||||
"stamina": 100.0,
|
||||
"health": 100.0,
|
||||
"melee_weapon_equipped": false,
|
||||
@@ -62,7 +62,7 @@ func combat_event(ev, data):
|
||||
var dst = where.distance_squared_to(curpos)
|
||||
if dst < guard_distance * guard_distance:
|
||||
if who == player:
|
||||
blackboard.guard = true
|
||||
blackboard_set("guard", true)
|
||||
"damage":
|
||||
var who = data[0]
|
||||
var weapon = data[1]
|
||||
@@ -72,13 +72,15 @@ func combat_event(ev, data):
|
||||
var dst = where.distance_squared_to(curpos)
|
||||
if dst < attack_distance * attack_distance:
|
||||
if who == player:
|
||||
blackboard.melee_damage = true
|
||||
blackboard_set("melee_damage", true)
|
||||
|
||||
var initialized = false
|
||||
func init():
|
||||
func init(tick):
|
||||
assert(!initialized)
|
||||
name = "bandit_ai"
|
||||
root = get_character()
|
||||
for e in init_blackboard.keys():
|
||||
blackboard_set(e, init_blackboard[e])
|
||||
assert(root.has_meta("skeleton"))
|
||||
rnd = RandomNumberGenerator.new()
|
||||
rnd.randomize()
|
||||
@@ -377,6 +379,39 @@ class rest extends base_bhv:
|
||||
assert(root)
|
||||
active = false
|
||||
finished = false
|
||||
class unconcious extends base_bhv:
|
||||
var root
|
||||
var anim1
|
||||
var anim2
|
||||
var state = 0
|
||||
func start(root: Node, anim1: String, anim2: String):
|
||||
self.root = root
|
||||
self.anim1 = anim1
|
||||
self.anim2 = anim2
|
||||
active = true
|
||||
state = 0
|
||||
|
||||
func run(delta: float, bb: Dictionary):
|
||||
assert(active)
|
||||
assert(root)
|
||||
assert(anim1)
|
||||
assert(anim2)
|
||||
match state:
|
||||
0:
|
||||
characters.animation_node_travel(root, anim1)
|
||||
state = 1
|
||||
# if finished:
|
||||
# return
|
||||
# if bb.stamina < 100.0:
|
||||
# print("rest: stamina: ", bb.stamina)
|
||||
# bb.stamina += 15500.0 * delta
|
||||
# else:
|
||||
# finished = true
|
||||
func stop():
|
||||
assert(active)
|
||||
assert(root)
|
||||
active = false
|
||||
finished = false
|
||||
|
||||
#var walk_to: walkto
|
||||
#var flee_to: walkto
|
||||
@@ -392,76 +427,78 @@ var conf_behaviors: = {
|
||||
"melee_attack": attack,
|
||||
"guard": guard,
|
||||
"rest": rest,
|
||||
"get_melee_damage": get_damage
|
||||
"get_melee_damage": get_damage,
|
||||
"unconcious": unconcious
|
||||
}
|
||||
|
||||
var pdst = INF
|
||||
static func calc_utility(utility: String, bb: Dictionary):
|
||||
func calc_utility(utility: String):
|
||||
match utility:
|
||||
"take_melee_weapon":
|
||||
if bb.health <= 0.0:
|
||||
if blackboard_get("health") <= 0.0:
|
||||
return 0.0
|
||||
if bb.melee_weapon_equipped:
|
||||
if blackboard_get("melee_weapon_equipped"):
|
||||
return 0.0
|
||||
else:
|
||||
if bb.enemy_distance < engage_distance * engage_distance:
|
||||
if blackboard_get("enemy_distance") < engage_distance * engage_distance:
|
||||
return 110.0
|
||||
"approach":
|
||||
if bb.health <= 0.0:
|
||||
if blackboard_get("health") <= 0.0:
|
||||
return 0.0
|
||||
if bb.enemy_distance < 1.6 * 1.6:
|
||||
if blackboard_get("enemy_distance") < 1.6 * 1.6:
|
||||
return 0.0
|
||||
if bb.stamina > 50.0 && bb.enemy_distance < engage_distance * engage_distance:
|
||||
return 10.0 + (bb.enemy_distance - 10.0) / 6.0
|
||||
if blackboard_get("stamina") > 50.0 && blackboard_get("enemy_distance") < engage_distance * engage_distance:
|
||||
return 10.0 + (blackboard_get("enemy_distance") - 10.0) / 6.0
|
||||
"melee_attack":
|
||||
if bb.health <= 0.0:
|
||||
if blackboard_get("health") <= 0.0:
|
||||
return 0.0
|
||||
if bb.melee_weapon_equipped:
|
||||
if bb.attack_cooldown <= 0.0:
|
||||
if blackboard_get("melee_weapon_equipped"):
|
||||
if blackboard_get("attack_cooldown") <= 0.0:
|
||||
var d = attack_distance * attack_distance
|
||||
if bb.stamina > 20.0 && bb.enemy_distance <= d:
|
||||
if blackboard_get("stamina") > 20.0 && blackboard_get("enemy_distance") <= d:
|
||||
return 50.0
|
||||
"flee":
|
||||
if bb.health <= 0.0:
|
||||
if blackboard_get("health") <= 0.0:
|
||||
return 0.0
|
||||
if bb.flee_cooldown > 0.0:
|
||||
if blackboard_get("flee_cooldown") > 0.0:
|
||||
return 0.0
|
||||
if bb.stamina <= 50.0 && bb.stamina > 10.0 && bb.enemy_distance < flee_distance * flee_distance:
|
||||
return 100.0 + clamp((100.0 - bb.stamina), 0, 90.0) * 2.0
|
||||
if bb.stamina <= 10.0 && bb.enemy_distance <= flee_distance * flee_distance * 0.5:
|
||||
if blackboard_get("stamina") <= 50.0 && blackboard_get("stamina") > 10.0 && blackboard_get("enemy_distance") < flee_distance * flee_distance:
|
||||
return 100.0 + clamp((100.0 - blackboard_get("stamina")), 0, 90.0) * 2.0
|
||||
if blackboard_get("stamina") <= 10.0 && blackboard_get("enemy_distance") <= flee_distance * flee_distance * 0.5:
|
||||
return 250.0
|
||||
if bb.stamina <= 50.0 && bb.enemy_distance < engage_distance * engage_distance:
|
||||
if bb.randf < 0.3:
|
||||
if blackboard_get("stamina") <= 50.0 && blackboard_get("enemy_distance") < engage_distance * engage_distance:
|
||||
if blackboard_get("randf") < 0.3:
|
||||
return 100.0
|
||||
if bb.enemy_distance < 1.4 * 1.4:
|
||||
if blackboard_get("enemy_distance") < 1.4 * 1.4:
|
||||
return 150.0
|
||||
if bb.health < 50 && bb.health > 15:
|
||||
if blackboard_get("health") < 50 && blackboard_get("health") > 15:
|
||||
return 160
|
||||
"guard":
|
||||
if bb.health <= 0.0:
|
||||
if blackboard_get("health") <= 0.0:
|
||||
return 0.0
|
||||
if bb.guard_cooldown > 0.0:
|
||||
if blackboard_get("guard_cooldown") > 0.0:
|
||||
return 0.0
|
||||
elif bb.guard:
|
||||
bb.guard = false
|
||||
elif blackboard_get("guard"):
|
||||
blackboard_set("guard", false)
|
||||
return 300.0
|
||||
# elif bb.enemy_distance < guard_distance * guard_distance * 0.3 && bb.stamina > 10.0:
|
||||
# elif blackboard_get("enemy_distance") < guard_distance * guard_distance * 0.3 && blackboard_get("stamina") > 10.0:
|
||||
# return 80
|
||||
# elif bb.enemy_distance < attack_distance * attack_distance * 0.3:
|
||||
# elif blackboard_get("enemy_distance") < attack_distance * attack_distance * 0.3:
|
||||
# return 10.0
|
||||
"rest":
|
||||
if bb.stamina >= 100.0:
|
||||
return 0.0
|
||||
if bb.stamina <= 10.0 && bb.enemy_distance >= flee_distance * flee_distance:
|
||||
return 100.0 + bb.enemy_distance / 10.0
|
||||
if bb.health < 10:
|
||||
"unconcious":
|
||||
if blackboard_get("health") < 10:
|
||||
return 2000
|
||||
"get_melee_damage":
|
||||
if bb.health <= 0.0:
|
||||
"rest":
|
||||
if blackboard_get("stamina") >= 100.0:
|
||||
return 0.0
|
||||
if bb.melee_damage:
|
||||
bb.melee_damage = false
|
||||
print("DAMAGE2 ", bb.health)
|
||||
if blackboard_get("stamina") <= 10.0 && blackboard_get("enemy_distance") >= flee_distance * flee_distance:
|
||||
return 100.0 + blackboard_get("enemy_distance") / 10.0
|
||||
"get_melee_damage":
|
||||
if blackboard_get("health") <= 0.0:
|
||||
return 0.0
|
||||
if blackboard_get("melee_damage"):
|
||||
blackboard_set("melee_damage", false)
|
||||
print("DAMAGE2 ", blackboard_get("health"))
|
||||
return 1000
|
||||
_:
|
||||
assert(false)
|
||||
@@ -473,7 +510,7 @@ func select_behavior():
|
||||
best_behavior = "rest"
|
||||
best_utility = 0.0
|
||||
for e in conf_behaviors.keys():
|
||||
var utility = calc_utility(e, blackboard)
|
||||
var utility = calc_utility(e)
|
||||
if e == last_behavior:
|
||||
utility *= 2.0
|
||||
if best_utility < utility:
|
||||
@@ -486,7 +523,7 @@ var last_bhv
|
||||
var last_running = []
|
||||
var current_running = []
|
||||
var run_behaviors = {}
|
||||
func update_physics(delta):
|
||||
func update_physics(tick, delta):
|
||||
assert(initialized)
|
||||
assert(root)
|
||||
var cam = root.get_viewport().get_camera()
|
||||
@@ -498,10 +535,10 @@ func update_physics(delta):
|
||||
var o = root.global_transform.origin
|
||||
var p = cam.get_meta("player").global_transform
|
||||
pdst = o.distance_squared_to(p.origin)
|
||||
blackboard.enemy_distance = pdst
|
||||
blackboard.randf = rnd.randf()
|
||||
blackboard.enemy_pos = p.origin
|
||||
blackboard.space = space
|
||||
blackboard_set("enemy_distance", pdst)
|
||||
blackboard_set("randf", rnd.randf())
|
||||
blackboard_set("enemy_pos", p.origin)
|
||||
blackboard_set("space", space)
|
||||
# var adest = o + (p.origin - o).normalized() * min(2.0, sqrt(pdst))
|
||||
var adest = p.origin
|
||||
var away = (o - p.origin).normalized()
|
||||
@@ -511,7 +548,7 @@ func update_physics(delta):
|
||||
var enemy_dir: Vector3 = Transform(p.basis, Vector3()).xform(Vector3(0, 0, -1))
|
||||
var root_dir: Vector3 = Transform(root.global_transform.basis, Vector3()).xform(Vector3(0, 0, -1))
|
||||
var dot = root_dir.dot(enemy_dir)
|
||||
blackboard.dot = dot
|
||||
blackboard_set("dot", dot)
|
||||
|
||||
var prev_state = state
|
||||
match state:
|
||||
@@ -544,6 +581,8 @@ func update_physics(delta):
|
||||
run_behaviors[bhv].start(root, "guard-melee1", "guard-front-melee1")
|
||||
"get_melee_damage":
|
||||
run_behaviors[bhv].start(root, "guard-melee1", "guard-front-melee1", 10.0)
|
||||
"unconcious":
|
||||
run_behaviors[bhv].start(root, "fall-front", "fall-back")
|
||||
_:
|
||||
assert(false)
|
||||
# print("adding behavior: ", bhv)
|
||||
@@ -552,10 +591,10 @@ func update_physics(delta):
|
||||
if !e in last_running:
|
||||
if !e.active:
|
||||
e.activate()
|
||||
e.run(delta, blackboard)
|
||||
e.run(delta, blackboard_get_dict())
|
||||
#FIXME: mess :(
|
||||
if e == run_behaviors["flee"]:
|
||||
blackboard.flee_cooldown = 2.0 + rnd.randf() * 3.0
|
||||
blackboard_set("flee_cooldown", 2.0 + rnd.randf() * 3.0)
|
||||
if e.finished && e.active:
|
||||
# print("in current run but finished")
|
||||
e.stop()
|
||||
@@ -570,18 +609,18 @@ func update_physics(delta):
|
||||
state = 3
|
||||
3:
|
||||
state = 0
|
||||
if blackboard.stamina < 100.0:
|
||||
blackboard.stamina += delta
|
||||
if blackboard.attack_cooldown > 0.0:
|
||||
blackboard.attack_cooldown -= delta
|
||||
if blackboard.guard_cooldown > 0.0:
|
||||
blackboard.guard_cooldown -= delta
|
||||
if blackboard.flee_cooldown > 0.0:
|
||||
blackboard.flee_cooldown -= delta
|
||||
blackboard.stamina = clamp(blackboard.stamina, 0, 100.0)
|
||||
blackboard.health = clamp(blackboard.health, 0, 100.0)
|
||||
if blackboard_get("stamina") < 100.0:
|
||||
blackboard_set("stamina", blackboard_get("stamina") + delta)
|
||||
if blackboard_get("attack_cooldown") > 0.0:
|
||||
blackboard_set("attack_cooldown", blackboard_get("attack_cooldown") - delta)
|
||||
if blackboard_get("guard_cooldown") > 0.0:
|
||||
blackboard_set("guard_cooldown", blackboard_get("guard_cooldown") - delta)
|
||||
if blackboard_get("flee_cooldown") > 0.0:
|
||||
blackboard_set("flee_cooldown", blackboard_get("flee_cooldown") - delta)
|
||||
blackboard_set("stamina", clamp(blackboard_get("stamina"), 0, 100.0))
|
||||
blackboard_set("health", clamp(blackboard_get("health"), 0, 100.0))
|
||||
return ERR_BUSY
|
||||
func update(delta):
|
||||
func update(tick, delta):
|
||||
return ERR_BUSY
|
||||
|
||||
##
|
||||
|
||||
@@ -6,7 +6,7 @@ extends AIScriptModule
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func init():
|
||||
func init(tick):
|
||||
var root = get_character()
|
||||
assert(root.has_meta("skeleton"))
|
||||
var cmdq = []
|
||||
@@ -38,7 +38,7 @@ func action(data):
|
||||
# print(data)
|
||||
# marker_hips_action(data)
|
||||
|
||||
func update(delta):
|
||||
func update(tick, delta):
|
||||
return ERR_BUSY
|
||||
func update_physics(delta):
|
||||
func update_physics(tick, delta):
|
||||
return ERR_BUSY
|
||||
|
||||
@@ -24,7 +24,7 @@ var material = preload("res://scenes/clothes/mystress_clothes.material")
|
||||
# ACTION
|
||||
#}
|
||||
#var state = PRAYING
|
||||
func init():
|
||||
func init(tick):
|
||||
root = get_character()
|
||||
assert(root.has_meta("skeleton"))
|
||||
root.add_to_group("mystress")
|
||||
@@ -74,7 +74,7 @@ func get_dest(pt: Vector3, exclusions: Array) -> Vector3:
|
||||
if !r.empty():
|
||||
ret = r.position - offt
|
||||
return ret
|
||||
func update_physics(delta):
|
||||
func update_physics(tick, delta):
|
||||
var cmdq = []
|
||||
if !skel:
|
||||
skel = root.get_meta("skeleton")
|
||||
@@ -226,5 +226,5 @@ func update_physics(delta):
|
||||
## cmdq.push_back(["equip", "wrist_r/weapon_right", "s_dagger"])
|
||||
## other.set_meta("cmdqueue", cmdq)
|
||||
## group_manager.submit_player_npc_event_arot(root, "sacrificed-a", root, "sacrificed", root)
|
||||
func update(delta):
|
||||
func update(tick, delta):
|
||||
return ERR_BUSY
|
||||
|
||||
@@ -22,7 +22,7 @@ var basedir = "res://scenes/clothes/"
|
||||
var material_female = preload("res://scenes/clothes/nun-clothes.material")
|
||||
var material_male = preload("res://scenes/clothes/clothes-male.material")
|
||||
|
||||
func init():
|
||||
func init(tick):
|
||||
name = "student_ai"
|
||||
root = get_character()
|
||||
assert(root.has_meta("skeleton"))
|
||||
@@ -42,8 +42,8 @@ func init():
|
||||
g += garments_male_main
|
||||
h += garments_head_male
|
||||
characters.call_deferred("setup_garments", root, g, h, material_male)
|
||||
func update(delta):
|
||||
func update(tick, delta):
|
||||
return ERR_BUSY
|
||||
func update_physics(delta):
|
||||
func update_physics(tick, delta):
|
||||
return ERR_BUSY
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ var garments = ["male-panties1", "male-shirt1"]
|
||||
var garments_head = []
|
||||
var basedir = "res://scenes/clothes/"
|
||||
var material = preload("res://scenes/clothes/clothes-male.material")
|
||||
func init():
|
||||
func init(tick):
|
||||
root = get_character()
|
||||
assert(root.has_meta("skeleton"))
|
||||
|
||||
@@ -81,8 +81,8 @@ func setup_garments():
|
||||
# cmdq.push_back(["equip", "wrist_r/weapon_right", "s_dagger"])
|
||||
# other.set_meta("cmdqueue", cmdq)
|
||||
# group_manager.submit_player_npc_event_arot(root, "sacrificed-a", root, "sacrificed", root)
|
||||
func update_physics(delta):
|
||||
func update_physics(tick, delta):
|
||||
return ERR_BUSY
|
||||
func update(delta):
|
||||
func update(tick, delta):
|
||||
return ERR_BUSY
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ extends AIScriptModule
|
||||
var cam
|
||||
var fps_cam
|
||||
var motion = Vector2()
|
||||
func init():
|
||||
func init(tick):
|
||||
var root = get_character()
|
||||
assert(root.has_meta("skeleton"))
|
||||
|
||||
@@ -19,7 +19,7 @@ var jump = false
|
||||
var equipped = false
|
||||
var vjump = Vector3()
|
||||
|
||||
func update(delta):
|
||||
func update(tick, delta):
|
||||
if !controls.is_gui:
|
||||
if !attack:
|
||||
if Input.is_action_just_pressed("attack"):
|
||||
@@ -31,7 +31,7 @@ func update(delta):
|
||||
return ERR_BUSY
|
||||
|
||||
|
||||
func update_physics(delta):
|
||||
func update_physics(tick, delta):
|
||||
var orientation: Transform
|
||||
var root = get_character()
|
||||
if !root.has_meta("cam"):
|
||||
|
||||
2
world.gd
2
world.gd
@@ -124,7 +124,7 @@ func _process(delta):
|
||||
var fps_cam_rot_y
|
||||
var fps_cam_rot_x
|
||||
var default_offset
|
||||
player = characters.replace_character($player, "male", ["player", "cmdq", "player_clothes", "hurtboxes"])
|
||||
player = characters.replace_player_character($player, "male", ["player", "cmdq", "player_clothes", "hurtboxes"])
|
||||
$player.remove_child(viewer)
|
||||
player.add_child(viewer)
|
||||
# player.add_child(VoxelViewer.new())
|
||||
|
||||
Reference in New Issue
Block a user