Compare commits
3 Commits
2573492f59
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
30ac134af9 | ||
|
|
dfbd2f34a5 | ||
|
|
fedb6a38e1 |
@@ -101,6 +101,7 @@ func _ready():
|
|||||||
data_hair_materials[mat] = load(mat)
|
data_hair_materials[mat] = load(mat)
|
||||||
CharacterSystemWorld.add_hair_material(data_hair_materials[mat], "male")
|
CharacterSystemWorld.add_hair_material(data_hair_materials[mat], "male")
|
||||||
CharacterSystemWorld.add_hair_material(data_hair_materials[mat], "female")
|
CharacterSystemWorld.add_hair_material(data_hair_materials[mat], "female")
|
||||||
|
CharacterSystemWorld.create_character_pool(1024)
|
||||||
assert(male_faces.size() > 0)
|
assert(male_faces.size() > 0)
|
||||||
assert(female_faces.size() > 0)
|
assert(female_faces.size() > 0)
|
||||||
assert(male_hairs.size() > 0)
|
assert(male_hairs.size() > 0)
|
||||||
@@ -159,114 +160,25 @@ func get_hair_node(sc: Node) -> Node:
|
|||||||
return sc.get_node(e)
|
return sc.get_node(e)
|
||||||
assert(0)
|
assert(0)
|
||||||
return null
|
return null
|
||||||
func compose_kinematic_character(g, enable_modules = [], face = -1, hair = -1, hair_mat = -1):
|
#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 id = create_character_in_pool(
|
||||||
var body = KinematicBody.new()
|
# return CharacterSystemWorld.create_character(g, enable_modules, face, hair, hair_mat)
|
||||||
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 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)
|
assert(obj)
|
||||||
var xform = obj.global_transform
|
var xform = obj.global_transform
|
||||||
var p = obj.get_parent()
|
var p = obj.get_parent()
|
||||||
obj.queue_free()
|
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 = compose_kinematic_character(g, enable_modules, face, hair, hair_mat)
|
||||||
var body = CharacterSystemWorld.create_character(g, enable_modules, face, hair, hair_mat)
|
# var body = CharacterSystemWorld.create_character(g, enable_modules, face, hair, hair_mat)
|
||||||
p.add_child(body)
|
# p.add_child(body)
|
||||||
body.global_transform = xform
|
# body.global_transform = xform
|
||||||
var orientation = Transform()
|
# var orientation = Transform()
|
||||||
orientation.basis = xform.basis
|
# orientation.basis = xform.basis
|
||||||
body.set_meta("orientation", orientation)
|
# body.set_meta("orientation", orientation)
|
||||||
return body
|
return body
|
||||||
const basedir = "res://scenes/clothes/"
|
const basedir = "res://scenes/clothes/"
|
||||||
#func prepare_extra_skeleton(obj, g):
|
#func prepare_extra_skeleton(obj, g):
|
||||||
@@ -628,6 +540,6 @@ func _physics_process(delta):
|
|||||||
var player = get_player()
|
var player = get_player()
|
||||||
if !player:
|
if !player:
|
||||||
return
|
return
|
||||||
if player.has_meta("animation_tree") && !player.has_meta("vehicle"):
|
# if player.has_meta("animation_tree") && !player.has_meta("vehicle"):
|
||||||
if streaming.can_spawn:
|
# if streaming.can_spawn:
|
||||||
character_physics(player)
|
# character_physics(player)
|
||||||
|
|||||||
@@ -350,7 +350,8 @@ func _physics_process(delta):
|
|||||||
base.push_back("bandit")
|
base.push_back("bandit")
|
||||||
if g.length() > 0:
|
if g.length() > 0:
|
||||||
print(g, " ", base)
|
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"):
|
elif n.is_in_group("car"):
|
||||||
var p1 = cam.global_transform.origin
|
var p1 = cam.global_transform.origin
|
||||||
var p2 = n.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/characters/vroid1-female.gltf" type="PackedScene" id=1]
|
||||||
[ext_resource path="res://scenes/hair/female-hair1.tscn" type="PackedScene" id=2]
|
[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="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]
|
[sub_resource type="AnimationNodeAnimation" id=16]
|
||||||
animation = "start-grabbed2"
|
animation = "start-grabbed2"
|
||||||
|
|
||||||
@@ -550,6 +576,10 @@ switch_mode = 2
|
|||||||
switch_mode = 2
|
switch_mode = 2
|
||||||
auto_advance = true
|
auto_advance = true
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id=160]
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id=161]
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeStateMachine" id=110]
|
[sub_resource type="AnimationNodeStateMachine" id=110]
|
||||||
states/attack-melee1/node = SubResource( 135 )
|
states/attack-melee1/node = SubResource( 135 )
|
||||||
states/attack-melee1/position = Vector2( 1277, 411.193 )
|
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/climb1a/position = Vector2( 947, 503.193 )
|
||||||
states/drive/node = SubResource( 15 )
|
states/drive/node = SubResource( 15 )
|
||||||
states/drive/position = Vector2( 868, 316.193 )
|
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/node = SubResource( 18 )
|
||||||
states/grabbed/position = Vector2( 1290, 90.193 )
|
states/grabbed/position = Vector2( 1290, 90.193 )
|
||||||
states/guard-front-melee1/node = SubResource( 147 )
|
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/turn_right/position = Vector2( 1059, 620.193 )
|
||||||
states/use_tap/node = SubResource( 85 )
|
states/use_tap/node = SubResource( 85 )
|
||||||
states/use_tap/position = Vector2( 283, 143.193 )
|
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"
|
start_node = "locomotion"
|
||||||
graph_offset = Vector2( 489.672, 57.1925 )
|
graph_offset = Vector2( 496.672, 7.1925 )
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeBlendTree" id=111]
|
[sub_resource type="AnimationNodeBlendTree" id=111]
|
||||||
graph_offset = Vector2( 445.846, -157.796 )
|
graph_offset = Vector2( 445.846, -157.796 )
|
||||||
@@ -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 )
|
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"]
|
[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.713409, 0.342413, -0.611461, -0.0945617, 0.911515, 0.400091, 0.694399, -0.227615, 0.682673, -0.0411225, 1.35382, -0.0195896 )
|
||||||
bone_name = "Head"
|
bone_name = "Head"
|
||||||
|
|
||||||
[node name="marker_talk" type="Spatial" parent="skeleton/Skeleton/head" index="0"]
|
[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="female-face1" parent="skeleton/Skeleton/head/face" index="0" instance=ExtResource( 3 )]
|
||||||
|
|
||||||
[node name="hips" type="BoneAttachment" parent="skeleton/Skeleton" index="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.94223, 0.0611767, 0.329466, 0.0446752, -0.997287, 0.0574523, 0.332118, -0.0394095, -0.942444, 0.000203859, 0.89952, -0.00645694 )
|
||||||
bone_name = "Hips"
|
bone_name = "Hips"
|
||||||
|
|
||||||
[node name="marker_dagger_sacrifice" type="Spatial" parent="skeleton/Skeleton/hips" index="0"]
|
[node name="marker_dagger_sacrifice" type="Spatial" parent="skeleton/Skeleton/hips" index="0"]
|
||||||
@@ -677,21 +711,21 @@ monitorable = false
|
|||||||
shape = SubResource( 2 )
|
shape = SubResource( 2 )
|
||||||
|
|
||||||
[node name="wrist_r" type="BoneAttachment" parent="skeleton/Skeleton" index="4"]
|
[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.245569, 0.908447, -0.338258, 0.959945, 0.276457, 0.0455697, 0.134912, -0.313518, -0.939949, 0.210898, 0.839866, 0.0647882 )
|
||||||
bone_name = "wrist_ik_R"
|
bone_name = "wrist_ik_R"
|
||||||
|
|
||||||
[node name="weapon_right" type="Spatial" parent="skeleton/Skeleton/wrist_r" index="0"]
|
[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 )
|
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"]
|
[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.0838252, -0.864731, 0.495188, -0.980276, 0.160814, 0.114885, -0.178979, -0.47579, -0.861156, -0.181656, 0.840334, -0.0498495 )
|
||||||
bone_name = "wrist_ik_L"
|
bone_name = "wrist_ik_L"
|
||||||
|
|
||||||
[node name="weapon_left" type="Spatial" parent="skeleton/Skeleton/wrist_l" index="0"]
|
[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 )
|
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"]
|
[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.958586, -0.0332876, -0.283002, 0.0462008, 0.998108, 0.0390467, 0.281199, -0.0505137, 0.958342, -0.00285422, 1.06003, -0.0194018 )
|
||||||
bone_name = "Chest"
|
bone_name = "Chest"
|
||||||
|
|
||||||
[node name="chest_hurt" type="Area" parent="skeleton/Skeleton/chest" index="0"]
|
[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="MeshInstance" type="MeshInstance" parent="skeleton/Skeleton" index="7"]
|
||||||
|
|
||||||
[node name="neck" type="BoneAttachment" parent="skeleton/Skeleton" index="8"]
|
[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.839515, -0.327886, -0.433348, 0.389612, 0.918993, 0.0594129, 0.378795, -0.218737, 0.899283, -0.0168142, 1.28569, -0.00337323 )
|
||||||
bone_name = "Neck"
|
bone_name = "Neck"
|
||||||
|
|
||||||
[node name="marker_neck_grab" type="Position3D" parent="skeleton/Skeleton/neck" index="0"]
|
[node name="marker_neck_grab" type="Position3D" parent="skeleton/Skeleton/neck" index="0"]
|
||||||
@@ -717,6 +751,7 @@ visible = false
|
|||||||
tree_root = SubResource( 111 )
|
tree_root = SubResource( 111 )
|
||||||
anim_player = NodePath("../AnimationPlayer")
|
anim_player = NodePath("../AnimationPlayer")
|
||||||
active = true
|
active = true
|
||||||
|
process_mode = 0
|
||||||
root_motion_track = NodePath("skeleton/Skeleton:root")
|
root_motion_track = NodePath("skeleton/Skeleton:root")
|
||||||
parameters/all_scale/scale = 1.0
|
parameters/all_scale/scale = 1.0
|
||||||
parameters/blade_left/blend_amount = 0.0
|
parameters/blade_left/blend_amount = 0.0
|
||||||
@@ -725,6 +760,8 @@ parameters/state/playback = SubResource( 112 )
|
|||||||
parameters/state/attack-melee1/attack1_speed/scale = 1.0
|
parameters/state/attack-melee1/attack1_speed/scale = 1.0
|
||||||
parameters/state/climb1/TimeScale/scale = 2.0
|
parameters/state/climb1/TimeScale/scale = 2.0
|
||||||
parameters/state/climb1a/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/grabbed/TimeScale/scale = 1.0
|
||||||
parameters/state/guard-front-melee1/TimeScale/scale = 1.0
|
parameters/state/guard-front-melee1/TimeScale/scale = 1.0
|
||||||
parameters/state/guard-melee1/TimeScale/scale = 1.0
|
parameters/state/guard-melee1/TimeScale/scale = 1.0
|
||||||
@@ -732,7 +769,7 @@ parameters/state/kneel/TimeScale/scale = 1.0
|
|||||||
parameters/state/locomotion/loc/blend_position = Vector2( 0.00252736, 0.00604224 )
|
parameters/state/locomotion/loc/blend_position = Vector2( 0.00252736, 0.00604224 )
|
||||||
parameters/state/locomotion/loc/0/TimeScale/scale = 2.0
|
parameters/state/locomotion/loc/0/TimeScale/scale = 2.0
|
||||||
"parameters/state/locomotion/loc/0/TimeScale 2/scale" = 1.5
|
"parameters/state/locomotion/loc/0/TimeScale 2/scale" = 1.5
|
||||||
parameters/state/locomotion/loc/0/t1/current = 0
|
parameters/state/locomotion/loc/0/t1/current = 1
|
||||||
parameters/state/locomotion/loc/1/TimeScale/scale = 1.0
|
parameters/state/locomotion/loc/1/TimeScale/scale = 1.0
|
||||||
"parameters/state/locomotion/loc/1/TimeScale 2/scale" = 1.0
|
"parameters/state/locomotion/loc/1/TimeScale 2/scale" = 1.0
|
||||||
parameters/state/locomotion/loc/1/Transition/current = 1
|
parameters/state/locomotion/loc/1/Transition/current = 1
|
||||||
|
|||||||
@@ -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/characters/vroid1-man.gltf" type="PackedScene" id=1]
|
||||||
[ext_resource path="res://scenes/hair/male-hair1.tscn" type="PackedScene" id=2]
|
[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 )
|
nodes/output/position = Vector2( 740, 140 )
|
||||||
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
|
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]
|
[sub_resource type="AnimationNodeAnimation" id=14]
|
||||||
animation = "start-grab2"
|
animation = "start-grab2"
|
||||||
|
|
||||||
@@ -443,6 +469,10 @@ switch_mode = 2
|
|||||||
[sub_resource type="AnimationNodeStateMachineTransition" id=161]
|
[sub_resource type="AnimationNodeStateMachineTransition" id=161]
|
||||||
switch_mode = 2
|
switch_mode = 2
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id=168]
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id=169]
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeStateMachine" id=70]
|
[sub_resource type="AnimationNodeStateMachine" id=70]
|
||||||
states/attack-melee1/node = SubResource( 142 )
|
states/attack-melee1/node = SubResource( 142 )
|
||||||
states/attack-melee1/position = Vector2( 804.317, 380 )
|
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/climb1a/position = Vector2( 713.444, 92 )
|
||||||
states/drive/node = SubResource( 13 )
|
states/drive/node = SubResource( 13 )
|
||||||
states/drive/position = Vector2( 424, 557 )
|
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/node = SubResource( 16 )
|
||||||
states/grab/position = Vector2( 713.444, 145 )
|
states/grab/position = Vector2( 713.444, 145 )
|
||||||
states/guard-front-melee1/node = SubResource( 157 )
|
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/turn_right/position = Vector2( 177.444, 671 )
|
||||||
states/use_tap/node = SubResource( 54 )
|
states/use_tap/node = SubResource( 54 )
|
||||||
states/use_tap/position = Vector2( -138.556, 174 )
|
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"
|
start_node = "locomotion"
|
||||||
graph_offset = Vector2( -103.683, 58 )
|
graph_offset = Vector2( -230.683, 15 )
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeBlendTree" id=71]
|
[sub_resource type="AnimationNodeBlendTree" id=71]
|
||||||
graph_offset = Vector2( -610.686, 0 )
|
graph_offset = Vector2( -534, -71 )
|
||||||
nodes/Animation/node = SubResource( 2 )
|
nodes/Animation/node = SubResource( 2 )
|
||||||
nodes/Animation/position = Vector2( -200, 260 )
|
nodes/Animation/position = Vector2( -200, 260 )
|
||||||
"nodes/Animation 2/node" = SubResource( 1 )
|
"nodes/Animation 2/node" = SubResource( 1 )
|
||||||
@@ -497,11 +531,6 @@ node_connections = [ "output", 0, "blade_right", "blade_left", 0, "state", "blad
|
|||||||
|
|
||||||
[sub_resource type="AnimationNodeStateMachinePlayback" id=72]
|
[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="vroid1-man" instance=ExtResource( 1 )]
|
||||||
|
|
||||||
[node name="Skeleton" parent="." index="0"]
|
[node name="Skeleton" parent="." index="0"]
|
||||||
@@ -514,7 +543,7 @@ bones/94/bound_children = [ NodePath("wrist_r") ]
|
|||||||
bones/96/bound_children = [ NodePath("wrist_l") ]
|
bones/96/bound_children = [ NodePath("wrist_l") ]
|
||||||
|
|
||||||
[node name="wrist_r" type="BoneAttachment" parent="Skeleton" index="2"]
|
[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.083992, -0.0441852, 0.995486, 0.996075, -0.0242614, -0.0851186, 0.24008, 1.0159, -0.0689935 )
|
||||||
bone_name = "wrist_ik_r"
|
bone_name = "wrist_ik_r"
|
||||||
|
|
||||||
[node name="marker_wrist_r_grab" type="Position3D" parent="Skeleton/wrist_r" index="0"]
|
[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 )
|
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"]
|
[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.02836, -0.0471478 )
|
||||||
bone_name = "wrist_ik_l"
|
bone_name = "wrist_ik_l"
|
||||||
|
|
||||||
[node name="marker_wrist_l_grab" type="Position3D" parent="Skeleton/wrist_l" index="0"]
|
[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 )
|
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"]
|
[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.998981, -0.0174369, -0.0416214, 0.0314635, 0.930306, 0.365432, 0.0323486, -0.366369, 0.929906, -0.0329707, 1.69764, -0.0053772 )
|
||||||
bone_name = "J_Bip_C_Head"
|
bone_name = "J_Bip_C_Head"
|
||||||
|
|
||||||
[node name="marker_talk" type="Position3D" parent="Skeleton/head" index="0"]
|
[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 )
|
shape = SubResource( 149 )
|
||||||
|
|
||||||
[node name="hips" type="BoneAttachment" parent="Skeleton" index="5"]
|
[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.987964, -0.143962, 0.0565838, 0.150106, 0.98061, -0.125986, -0.0373495, 0.132963, 0.990417, 0.000514592, 1.10104, -0.0117666 )
|
||||||
bone_name = "J_Bip_C_Hips"
|
bone_name = "J_Bip_C_Hips"
|
||||||
|
|
||||||
[node name="marker_hips_action" type="Position3D" parent="Skeleton/hips" index="0"]
|
[node name="marker_hips_action" type="Position3D" parent="Skeleton/hips" index="0"]
|
||||||
@@ -579,7 +608,7 @@ monitorable = false
|
|||||||
shape = SubResource( 148 )
|
shape = SubResource( 148 )
|
||||||
|
|
||||||
[node name="neck" type="BoneAttachment" parent="Skeleton" index="6"]
|
[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.998943, -0.0318141, 0.033183, 0.0262132, 0.987195, 0.157347, -0.037764, -0.156311, 0.986985, -0.0298461, 1.60068, 0.00997471 )
|
||||||
bone_name = "J_Bip_C_Neck"
|
bone_name = "J_Bip_C_Neck"
|
||||||
|
|
||||||
[node name="marker_neck_grab" type="Position3D" parent="Skeleton/neck" index="0"]
|
[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
|
visible = false
|
||||||
|
|
||||||
[node name="penis_2" type="BoneAttachment" parent="Skeleton" index="7"]
|
[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.987964, 0.108698, -0.110052, 0.150106, -0.845508, 0.51243, -0.0373501, -0.522782, -0.851648, 0.0136458, 0.991264, -0.105598 )
|
||||||
bone_name = "penis2"
|
bone_name = "penis2"
|
||||||
|
|
||||||
[node name="marker_penis_action" type="Position3D" parent="Skeleton/penis_2" index="0"]
|
[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
|
visible = false
|
||||||
|
|
||||||
[node name="chest" type="BoneAttachment" parent="Skeleton" index="8"]
|
[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.998943, -0.0241071, 0.0391486, 0.0262218, 0.998173, -0.0544354, -0.0377648, 0.0554043, 0.997749, -0.0235756, 1.33823, -0.00638926 )
|
||||||
bone_name = "J_Bip_C_Chest"
|
bone_name = "J_Bip_C_Chest"
|
||||||
|
|
||||||
[node name="chest_hurt" type="Area" parent="Skeleton/chest" index="0"]
|
[node name="chest_hurt" type="Area" parent="Skeleton/chest" index="0"]
|
||||||
@@ -610,6 +639,7 @@ shape = SubResource( 147 )
|
|||||||
tree_root = SubResource( 71 )
|
tree_root = SubResource( 71 )
|
||||||
anim_player = NodePath("../AnimationPlayer")
|
anim_player = NodePath("../AnimationPlayer")
|
||||||
active = true
|
active = true
|
||||||
|
process_mode = 0
|
||||||
root_motion_track = NodePath("Skeleton:Root")
|
root_motion_track = NodePath("Skeleton:Root")
|
||||||
parameters/blade_left/blend_amount = 0.0
|
parameters/blade_left/blend_amount = 0.0
|
||||||
parameters/blade_right/blend_amount = 0.0
|
parameters/blade_right/blend_amount = 0.0
|
||||||
@@ -618,6 +648,8 @@ parameters/state/attack-melee1/TimeScale/scale = 1.0
|
|||||||
parameters/state/climb1/TimeScale/scale = 2.0
|
parameters/state/climb1/TimeScale/scale = 2.0
|
||||||
parameters/state/climb1a/TimeScale/scale = 2.0
|
parameters/state/climb1a/TimeScale/scale = 2.0
|
||||||
parameters/state/drive/TimeScale/scale = 1.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/grab/TimeScale/scale = 1.0
|
||||||
parameters/state/guard-melee1/TimeScale/scale = 1.0
|
parameters/state/guard-melee1/TimeScale/scale = 1.0
|
||||||
parameters/state/locomotion/loc/blend_position = Vector2( -0.00293946, -0.0151844 )
|
parameters/state/locomotion/loc/blend_position = Vector2( -0.00293946, -0.0151844 )
|
||||||
@@ -639,7 +671,3 @@ parameters/state/turn_right/Transition/current = 0
|
|||||||
parameters/state/use_tap/TimeScale/scale = 1.0
|
parameters/state/use_tap/TimeScale/scale = 1.0
|
||||||
"parameters/state/use_tap/TimeScale 2/scale" = 1.0
|
"parameters/state/use_tap/TimeScale 2/scale" = 1.0
|
||||||
parameters/state/use_tap/Transition/current = 1
|
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
|
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 )]
|
[node name="campfire" parent="." instance=ExtResource( 1 )]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
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 )]
|
[node name="tent" parent="." instance=ExtResource( 2 )]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 3 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 3 )
|
||||||
|
|
||||||
[node name="npc1" type="Spatial" parent="." groups=["bandit", "male", "spawn"]]
|
[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"]]
|
[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 )
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ limits/command_queue/multithreading_queue_size_kb=512
|
|||||||
|
|
||||||
[physics]
|
[physics]
|
||||||
|
|
||||||
common/physics_jitter_fix=1.2
|
common/physics_fps=150
|
||||||
3d/physics_engine="Bullet"
|
3d/physics_engine="Bullet"
|
||||||
|
|
||||||
[rendering]
|
[rendering]
|
||||||
|
|||||||
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,15 +5,19 @@ var blood = preload("res://scenes/decals/blood.tscn")
|
|||||||
var blood_decal = preload("res://scenes/decals/blood1-decal.gltf")
|
var blood_decal = preload("res://scenes/decals/blood1-decal.gltf")
|
||||||
var rnd
|
var rnd
|
||||||
var initialized = false
|
var initialized = false
|
||||||
func init():
|
var root
|
||||||
|
func init(tick):
|
||||||
assert(!initialized)
|
assert(!initialized)
|
||||||
if initialized:
|
if initialized:
|
||||||
|
printerr("already initialized")
|
||||||
return
|
return
|
||||||
var root = get_character()
|
root = get_character(tick)
|
||||||
if !root:
|
if !root:
|
||||||
|
printerr("no character?")
|
||||||
return
|
return
|
||||||
var cam = root.get_viewport().get_camera()
|
var cam = root.get_viewport().get_camera()
|
||||||
if !cam.has_meta("player"):
|
if !cam.has_meta("player"):
|
||||||
|
printerr("no player?")
|
||||||
return
|
return
|
||||||
var queue = [root]
|
var queue = [root]
|
||||||
var hurtboxes = []
|
var hurtboxes = []
|
||||||
@@ -29,9 +33,9 @@ func init():
|
|||||||
e.connect("area_entered", self, "area_hit", [e])
|
e.connect("area_entered", self, "area_hit", [e])
|
||||||
rnd = RandomNumberGenerator.new()
|
rnd = RandomNumberGenerator.new()
|
||||||
rnd.randomize()
|
rnd.randomize()
|
||||||
|
print("initialized ok")
|
||||||
initialized = true
|
initialized = true
|
||||||
func area_hit(area, e):
|
func area_hit(area, e):
|
||||||
var root = get_character()
|
|
||||||
if area.is_in_group("weapon_hit"):
|
if area.is_in_group("weapon_hit"):
|
||||||
var mo = area.get_meta("owner")
|
var mo = area.get_meta("owner")
|
||||||
if mo == root:
|
if mo == root:
|
||||||
@@ -61,16 +65,18 @@ func area_hit(area, e):
|
|||||||
# TODO: add delay
|
# TODO: add delay
|
||||||
bi.queue_free()
|
bi.queue_free()
|
||||||
|
|
||||||
func update_physics(delta):
|
func update_physics(tick, delta):
|
||||||
assert(initialized)
|
assert(initialized)
|
||||||
var root = get_character()
|
root = get_character(tick)
|
||||||
if !root:
|
if !root:
|
||||||
|
printerr("no character?")
|
||||||
assert(!initialized)
|
assert(!initialized)
|
||||||
return FAILED
|
return FAILED
|
||||||
var space_state: PhysicsDirectSpaceState = root.get_world().direct_space_state
|
var space_state: PhysicsDirectSpaceState = root.get_world().direct_space_state
|
||||||
var offsets = [Vector3(0, -2, 0)]
|
var offsets = [Vector3(0, -2, 0)]
|
||||||
var cam = root.get_viewport().get_camera()
|
var cam = root.get_viewport().get_camera()
|
||||||
if !cam.has_meta("player"):
|
if !cam.has_meta("player"):
|
||||||
|
printerr("no player?")
|
||||||
assert(!initialized)
|
assert(!initialized)
|
||||||
return FAILED
|
return FAILED
|
||||||
var player = cam.get_meta("player")
|
var player = cam.get_meta("player")
|
||||||
@@ -97,7 +103,11 @@ func update_physics(delta):
|
|||||||
# var rot = PI * 2.0 * rnd.randf()
|
# var rot = PI * 2.0 * rnd.randf()
|
||||||
# decal.global_transform.basis = Basis(normal).scaled(Vector3(scale, 1.0, scale)).rotated(normal, rot)
|
# decal.global_transform.basis = Basis(normal).scaled(Vector3(scale, 1.0, scale)).rotated(normal, rot)
|
||||||
return ERR_BUSY
|
return ERR_BUSY
|
||||||
|
func stop(tick):
|
||||||
|
pass
|
||||||
|
# printerr("Why stopped?")
|
||||||
|
# assert(false)
|
||||||
|
|
||||||
func update(delta):
|
func update(tick, delta):
|
||||||
return ERR_BUSY
|
return ERR_BUSY
|
||||||
|
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ extends AIScriptModule
|
|||||||
|
|
||||||
var animtree: AnimationTree
|
var animtree: AnimationTree
|
||||||
var root_motion_track
|
var root_motion_track
|
||||||
func init():
|
func init(tick):
|
||||||
# process_priority = 0
|
# process_priority = 0
|
||||||
pass
|
pass
|
||||||
|
|
||||||
func can_walk_there(dest: Vector3) -> bool:
|
func can_walk_there(tick: AITick, dest: Vector3) -> bool:
|
||||||
var root = get_character()
|
var root = get_character(tick)
|
||||||
var space: PhysicsDirectSpaceState = root.get_world().get_direct_space_state()
|
var space: PhysicsDirectSpaceState = root.get_world().get_direct_space_state()
|
||||||
var result = space.intersect_ray(root.global_transform.origin, dest, [root])
|
var result = space.intersect_ray(root.global_transform.origin, dest, [root])
|
||||||
if result.has("collider"):
|
if result.has("collider"):
|
||||||
@@ -23,8 +23,8 @@ func can_walk_there(dest: Vector3) -> bool:
|
|||||||
else:
|
else:
|
||||||
return true
|
return true
|
||||||
|
|
||||||
func update_physics(delta):
|
func update_physics(tick, delta):
|
||||||
var root = get_character()
|
var root = get_character(tick)
|
||||||
var orientation: Transform
|
var orientation: Transform
|
||||||
assert(root.has_meta("skeleton"))
|
assert(root.has_meta("skeleton"))
|
||||||
|
|
||||||
@@ -258,5 +258,5 @@ func update_physics(delta):
|
|||||||
root.remove_meta("cmdqueue")
|
root.remove_meta("cmdqueue")
|
||||||
return ERR_BUSY
|
return ERR_BUSY
|
||||||
|
|
||||||
func update(delta):
|
func update(tick, delta):
|
||||||
return ERR_BUSY
|
return ERR_BUSY
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -6,8 +6,8 @@ extends AIScriptModule
|
|||||||
|
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
func init():
|
func init(tick):
|
||||||
var root = get_character()
|
var root = get_character(tick)
|
||||||
assert(root.has_meta("skeleton"))
|
assert(root.has_meta("skeleton"))
|
||||||
var cmdq = []
|
var cmdq = []
|
||||||
if root.has_meta("cmdqueue"):
|
if root.has_meta("cmdqueue"):
|
||||||
@@ -38,7 +38,7 @@ func action(data):
|
|||||||
# print(data)
|
# print(data)
|
||||||
# marker_hips_action(data)
|
# marker_hips_action(data)
|
||||||
|
|
||||||
func update(delta):
|
func update(tick, delta):
|
||||||
return ERR_BUSY
|
return ERR_BUSY
|
||||||
func update_physics(delta):
|
func update_physics(tick, delta):
|
||||||
return ERR_BUSY
|
return ERR_BUSY
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ var material = preload("res://scenes/clothes/mystress_clothes.material")
|
|||||||
# ACTION
|
# ACTION
|
||||||
#}
|
#}
|
||||||
#var state = PRAYING
|
#var state = PRAYING
|
||||||
func init():
|
func init(tick):
|
||||||
root = get_character()
|
root = get_character(tick)
|
||||||
assert(root.has_meta("skeleton"))
|
assert(root.has_meta("skeleton"))
|
||||||
root.add_to_group("mystress")
|
root.add_to_group("mystress")
|
||||||
# tween = Tween.new()
|
# tween = Tween.new()
|
||||||
@@ -74,7 +74,7 @@ func get_dest(pt: Vector3, exclusions: Array) -> Vector3:
|
|||||||
if !r.empty():
|
if !r.empty():
|
||||||
ret = r.position - offt
|
ret = r.position - offt
|
||||||
return ret
|
return ret
|
||||||
func update_physics(delta):
|
func update_physics(tick, delta):
|
||||||
var cmdq = []
|
var cmdq = []
|
||||||
if !skel:
|
if !skel:
|
||||||
skel = root.get_meta("skeleton")
|
skel = root.get_meta("skeleton")
|
||||||
@@ -226,5 +226,5 @@ func update_physics(delta):
|
|||||||
## cmdq.push_back(["equip", "wrist_r/weapon_right", "s_dagger"])
|
## cmdq.push_back(["equip", "wrist_r/weapon_right", "s_dagger"])
|
||||||
## other.set_meta("cmdqueue", cmdq)
|
## other.set_meta("cmdqueue", cmdq)
|
||||||
## group_manager.submit_player_npc_event_arot(root, "sacrificed-a", root, "sacrificed", root)
|
## group_manager.submit_player_npc_event_arot(root, "sacrificed-a", root, "sacrificed", root)
|
||||||
func update(delta):
|
func update(tick, delta):
|
||||||
return ERR_BUSY
|
return ERR_BUSY
|
||||||
|
|||||||
@@ -22,9 +22,9 @@ var basedir = "res://scenes/clothes/"
|
|||||||
var material_female = preload("res://scenes/clothes/nun-clothes.material")
|
var material_female = preload("res://scenes/clothes/nun-clothes.material")
|
||||||
var material_male = preload("res://scenes/clothes/clothes-male.material")
|
var material_male = preload("res://scenes/clothes/clothes-male.material")
|
||||||
|
|
||||||
func init():
|
func init(tick):
|
||||||
name = "student_ai"
|
name = "student_ai"
|
||||||
root = get_character()
|
root = get_character(tick)
|
||||||
assert(root.has_meta("skeleton"))
|
assert(root.has_meta("skeleton"))
|
||||||
root.add_to_group("students")
|
root.add_to_group("students")
|
||||||
root.add_to_group("student")
|
root.add_to_group("student")
|
||||||
@@ -42,8 +42,8 @@ func init():
|
|||||||
g += garments_male_main
|
g += garments_male_main
|
||||||
h += garments_head_male
|
h += garments_head_male
|
||||||
characters.call_deferred("setup_garments", root, g, h, material_male)
|
characters.call_deferred("setup_garments", root, g, h, material_male)
|
||||||
func update(delta):
|
func update(tick, delta):
|
||||||
return ERR_BUSY
|
return ERR_BUSY
|
||||||
func update_physics(delta):
|
func update_physics(tick, delta):
|
||||||
return ERR_BUSY
|
return ERR_BUSY
|
||||||
|
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ var garments = ["male-panties1", "male-shirt1"]
|
|||||||
var garments_head = []
|
var garments_head = []
|
||||||
var basedir = "res://scenes/clothes/"
|
var basedir = "res://scenes/clothes/"
|
||||||
var material = preload("res://scenes/clothes/clothes-male.material")
|
var material = preload("res://scenes/clothes/clothes-male.material")
|
||||||
func init():
|
func init(tick):
|
||||||
root = get_character()
|
root = get_character(tick)
|
||||||
assert(root.has_meta("skeleton"))
|
assert(root.has_meta("skeleton"))
|
||||||
|
|
||||||
call_deferred("setup_markers")
|
call_deferred("setup_markers")
|
||||||
@@ -81,8 +81,8 @@ func setup_garments():
|
|||||||
# cmdq.push_back(["equip", "wrist_r/weapon_right", "s_dagger"])
|
# cmdq.push_back(["equip", "wrist_r/weapon_right", "s_dagger"])
|
||||||
# other.set_meta("cmdqueue", cmdq)
|
# other.set_meta("cmdqueue", cmdq)
|
||||||
# group_manager.submit_player_npc_event_arot(root, "sacrificed-a", root, "sacrificed", root)
|
# 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
|
return ERR_BUSY
|
||||||
func update(delta):
|
func update(tick, delta):
|
||||||
return ERR_BUSY
|
return ERR_BUSY
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ extends AIScriptModule
|
|||||||
var cam
|
var cam
|
||||||
var fps_cam
|
var fps_cam
|
||||||
var motion = Vector2()
|
var motion = Vector2()
|
||||||
func init():
|
func init(tick):
|
||||||
var root = get_character()
|
var root = get_character(tick)
|
||||||
assert(root.has_meta("skeleton"))
|
assert(root.has_meta("skeleton"))
|
||||||
|
|
||||||
var attack = false
|
var attack = false
|
||||||
@@ -19,7 +19,11 @@ var jump = false
|
|||||||
var equipped = false
|
var equipped = false
|
||||||
var vjump = Vector3()
|
var vjump = Vector3()
|
||||||
|
|
||||||
func update(delta):
|
func update(tick, delta):
|
||||||
|
return ERR_BUSY
|
||||||
|
|
||||||
|
|
||||||
|
func update_physics(tick, delta):
|
||||||
if !controls.is_gui:
|
if !controls.is_gui:
|
||||||
if !attack:
|
if !attack:
|
||||||
if Input.is_action_just_pressed("attack"):
|
if Input.is_action_just_pressed("attack"):
|
||||||
@@ -28,12 +32,8 @@ func update(delta):
|
|||||||
if Input.is_action_just_pressed("jump"):
|
if Input.is_action_just_pressed("jump"):
|
||||||
jump = true
|
jump = true
|
||||||
vjump = Vector3.UP * 10.0
|
vjump = Vector3.UP * 10.0
|
||||||
return ERR_BUSY
|
|
||||||
|
|
||||||
|
|
||||||
func update_physics(delta):
|
|
||||||
var orientation: Transform
|
var orientation: Transform
|
||||||
var root = get_character()
|
var root = get_character(tick)
|
||||||
if !root.has_meta("cam"):
|
if !root.has_meta("cam"):
|
||||||
return
|
return
|
||||||
cam = root.get_meta("cam")
|
cam = root.get_meta("cam")
|
||||||
|
|||||||
32
ui/main_menu.gd
Normal file
32
ui/main_menu.gd
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
extends Control
|
||||||
|
|
||||||
|
|
||||||
|
# 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():
|
||||||
|
controls.is_gui = true
|
||||||
|
$v/quit.connect("pressed", self, "quit_pressed")
|
||||||
|
$v/load_game.connect("pressed", self, "load_game_pressed")
|
||||||
|
$v/new_game.connect("pressed", self, "new_game_pressed")
|
||||||
|
$v/edit_ai.connect("pressed", self, "edit_ai_pressed")
|
||||||
|
|
||||||
|
func quit_pressed():
|
||||||
|
get_tree().quit()
|
||||||
|
func load_game_pressed():
|
||||||
|
controls.is_gui = true
|
||||||
|
hide()
|
||||||
|
# var main = preload("res://world.tscn")
|
||||||
|
# get_tree().change_scene_to(main)
|
||||||
|
controls.menu.nosave = true
|
||||||
|
controls.menu.popup()
|
||||||
|
func new_game_pressed():
|
||||||
|
controls.is_gui = false
|
||||||
|
var main = preload("res://world.tscn")
|
||||||
|
get_tree().change_scene_to(main)
|
||||||
|
func edit_ai_pressed():
|
||||||
|
var ai_graph = preload("res://ui/ai_graph.tscn")
|
||||||
|
get_tree().change_scene_to(ai_graph)
|
||||||
60
ui/main_menu.tscn
Normal file
60
ui/main_menu.tscn
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
|
||||||
|
[ext_resource path="res://ui/main_menu.gd" type="Script" id=2]
|
||||||
|
|
||||||
|
[node name="main_menu" type="Control"]
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
script = ExtResource( 2 )
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="ColorRect" type="ColorRect" parent="."]
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
color = Color( 0.137255, 0.235294, 0.34902, 1 )
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="v" type="VBoxContainer" parent="."]
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
margin_left = -72.0
|
||||||
|
margin_top = -92.0
|
||||||
|
margin_right = 72.0
|
||||||
|
margin_bottom = 92.0
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="load_game" type="Button" parent="v"]
|
||||||
|
margin_right = 144.0
|
||||||
|
margin_bottom = 43.0
|
||||||
|
theme = ExtResource( 1 )
|
||||||
|
text = "Load game"
|
||||||
|
|
||||||
|
[node name="new_game" type="Button" parent="v"]
|
||||||
|
margin_top = 47.0
|
||||||
|
margin_right = 144.0
|
||||||
|
margin_bottom = 90.0
|
||||||
|
theme = ExtResource( 1 )
|
||||||
|
text = "New Game"
|
||||||
|
|
||||||
|
[node name="edit_ai" type="Button" parent="v"]
|
||||||
|
margin_top = 94.0
|
||||||
|
margin_right = 144.0
|
||||||
|
margin_bottom = 137.0
|
||||||
|
theme = ExtResource( 1 )
|
||||||
|
text = "Edit AI"
|
||||||
|
|
||||||
|
[node name="quit" type="Button" parent="v"]
|
||||||
|
margin_top = 141.0
|
||||||
|
margin_right = 144.0
|
||||||
|
margin_bottom = 184.0
|
||||||
|
theme = ExtResource( 1 )
|
||||||
|
text = "Quit"
|
||||||
97
ui/save_game.gd
Normal file
97
ui/save_game.gd
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
extends WindowDialog
|
||||||
|
|
||||||
|
var save_path = "user://saves"
|
||||||
|
|
||||||
|
var next_save_id = 0
|
||||||
|
var nosave = false
|
||||||
|
func _ready():
|
||||||
|
print("save/load ready")
|
||||||
|
$v/quit.connect("pressed", self, "exit_game")
|
||||||
|
$v/return.connect("pressed", self, "close")
|
||||||
|
$v/save/new_save.connect("pressed", self, "save_game")
|
||||||
|
connect("about_to_show", self, "about_to_show")
|
||||||
|
connect("popup_hide", self, "popup_hide")
|
||||||
|
func exit_game():
|
||||||
|
controls.is_gui = false
|
||||||
|
get_tree().quit()
|
||||||
|
func close():
|
||||||
|
controls.is_gui = false
|
||||||
|
hide()
|
||||||
|
func save_game():
|
||||||
|
scenario.prepare_save_data()
|
||||||
|
print("next_save_id: ", next_save_id)
|
||||||
|
var filename = save_path + "/" + str(next_save_id) + ".sav"
|
||||||
|
var f = File.new()
|
||||||
|
if f.open(filename, File.WRITE) == OK:
|
||||||
|
print("saving to ", filename)
|
||||||
|
f.store_string(JSON.print(scenario.save_data, "\t", false))
|
||||||
|
f.close()
|
||||||
|
print("userdata = ", OS.get_user_data_dir())
|
||||||
|
controls.is_gui = false
|
||||||
|
hide()
|
||||||
|
|
||||||
|
func load_game(file_name):
|
||||||
|
controls.is_gui = false
|
||||||
|
nosave = false
|
||||||
|
var f = File.new()
|
||||||
|
if f.open(save_path + "/" + file_name, File.READ) == OK:
|
||||||
|
var s = f.get_as_text()
|
||||||
|
var result = JSON.parse(s)
|
||||||
|
scenario.save_data = result.result
|
||||||
|
scenario.restart_scene()
|
||||||
|
else:
|
||||||
|
print("Can't open ", file_name)
|
||||||
|
hide()
|
||||||
|
func popup_hide():
|
||||||
|
yield(get_tree().create_timer(0.5), "timeout")
|
||||||
|
controls.is_gui = false
|
||||||
|
hide()
|
||||||
|
|
||||||
|
func about_to_show():
|
||||||
|
print("save/load about to show")
|
||||||
|
if nosave:
|
||||||
|
if $v/save/new_save.visible:
|
||||||
|
$v/save/new_save.hide()
|
||||||
|
else:
|
||||||
|
if !$v/save/new_save.visible:
|
||||||
|
$v/save/new_save.show()
|
||||||
|
var d: = Directory.new()
|
||||||
|
var f: = File.new()
|
||||||
|
var theme = Theme.new()
|
||||||
|
var font: DynamicFont = preload("res://fonts/DefaultFont.tres")
|
||||||
|
theme.default_font = font
|
||||||
|
for e in $v/save/s/v.get_children():
|
||||||
|
e.queue_free()
|
||||||
|
if d.dir_exists(save_path):
|
||||||
|
if d.open(save_path) == OK:
|
||||||
|
d.list_dir_begin()
|
||||||
|
var file_name = d.get_next()
|
||||||
|
while file_name != "":
|
||||||
|
if file_name in [".", ".."]:
|
||||||
|
file_name = d.get_next()
|
||||||
|
continue
|
||||||
|
var fid = file_name.replace(".sav", "")
|
||||||
|
if fid.is_valid_integer():
|
||||||
|
next_save_id = max(next_save_id, int(fid) + 1)
|
||||||
|
print(file_name)
|
||||||
|
var t = f.get_modified_time(save_path + "/" + file_name)
|
||||||
|
var ts = OS.get_datetime_from_unix_time(t)
|
||||||
|
var b = Button.new()
|
||||||
|
b.theme = theme
|
||||||
|
b.text = "Load " + str(ts.year) + "." + str(ts.month) + "." + str(ts.day)
|
||||||
|
b.text += " " + str(ts.hour) + ":" + str(ts.minute) + ":" + str(ts.second)
|
||||||
|
print(b.text)
|
||||||
|
$v/save/s/v.add_child(b)
|
||||||
|
b.connect("pressed", self, "load_game", [file_name])
|
||||||
|
$v/save/s/v.update()
|
||||||
|
$v/save/s.update()
|
||||||
|
$v/save.update()
|
||||||
|
$v.update()
|
||||||
|
update()
|
||||||
|
$v/quit.update()
|
||||||
|
file_name = d.get_next()
|
||||||
|
d.list_dir_end()
|
||||||
|
else:
|
||||||
|
d.make_dir_recursive(save_path)
|
||||||
|
print("next_save_id: ", next_save_id)
|
||||||
|
update()
|
||||||
66
ui/save_game.tscn
Normal file
66
ui/save_game.tscn
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://fonts/DefaultFont.tres" type="DynamicFont" id=1]
|
||||||
|
[ext_resource path="res://ui/save_game.gd" type="Script" id=2]
|
||||||
|
|
||||||
|
[node name="save_game" type="WindowDialog"]
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
margin_left = 10.0
|
||||||
|
margin_top = 30.0
|
||||||
|
margin_right = -10.0
|
||||||
|
margin_bottom = -30.0
|
||||||
|
script = ExtResource( 2 )
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="v" type="VBoxContainer" parent="."]
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
size_flags_vertical = 3
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="return" type="Button" parent="v"]
|
||||||
|
margin_right = 1004.0
|
||||||
|
margin_bottom = 43.0
|
||||||
|
custom_fonts/font = ExtResource( 1 )
|
||||||
|
text = "Return to game"
|
||||||
|
|
||||||
|
[node name="save" type="VBoxContainer" parent="v"]
|
||||||
|
margin_top = 47.0
|
||||||
|
margin_right = 1004.0
|
||||||
|
margin_bottom = 493.0
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
size_flags_vertical = 3
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="new_save" type="Button" parent="v/save"]
|
||||||
|
margin_right = 1004.0
|
||||||
|
margin_bottom = 43.0
|
||||||
|
custom_fonts/font = ExtResource( 1 )
|
||||||
|
text = "New save"
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="s" type="ScrollContainer" parent="v/save"]
|
||||||
|
margin_top = 47.0
|
||||||
|
margin_right = 1004.0
|
||||||
|
margin_bottom = 446.0
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
size_flags_vertical = 3
|
||||||
|
|
||||||
|
[node name="v" type="VBoxContainer" parent="v/save/s"]
|
||||||
|
|
||||||
|
[node name="quit" type="Button" parent="v"]
|
||||||
|
margin_top = 497.0
|
||||||
|
margin_right = 1004.0
|
||||||
|
margin_bottom = 540.0
|
||||||
|
custom_fonts/font = ExtResource( 1 )
|
||||||
|
text = "Quit game"
|
||||||
6
ui/theme.tres
Normal file
6
ui/theme.tres
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[gd_resource type="Theme" load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://fonts/DefaultFont.tres" type="DynamicFont" id=1]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
default_font = ExtResource( 1 )
|
||||||
25
ui/town_menu.gd
Normal file
25
ui/town_menu.gd
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
extends Control
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
$buttons/return.connect("pressed", self, "finish")
|
||||||
|
$buttons/upgrade.connect("pressed", self, "upgrade")
|
||||||
|
$buttons/teleport_to_town.connect("pressed", self, "teleport")
|
||||||
|
set_physics_process(false)
|
||||||
|
func finish():
|
||||||
|
controls.is_gui = false
|
||||||
|
hide()
|
||||||
|
func upgrade():
|
||||||
|
controls.is_gui = false
|
||||||
|
hide()
|
||||||
|
scenario.camp_level += 1
|
||||||
|
scenario.camp.queue_free()
|
||||||
|
scenario.camp = streaming.setup_bandit_camp(scenario.camp_site)
|
||||||
|
func teleport():
|
||||||
|
set_physics_process(true)
|
||||||
|
|
||||||
|
func _physics_process(delta):
|
||||||
|
var cam = get_viewport().get_camera()
|
||||||
|
if cam:
|
||||||
|
var player = cam.get_meta("player")
|
||||||
|
player.global_transform.origin = scenario.camp.global_transform.origin + Vector3(0, 10, 0)
|
||||||
|
set_physics_process(false)
|
||||||
45
ui/town_menu.tscn
Normal file
45
ui/town_menu.tscn
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://ui/theme.tres" type="Theme" id=1]
|
||||||
|
[ext_resource path="res://ui/town_menu.gd" type="Script" id=2]
|
||||||
|
|
||||||
|
[node name="town_menu" type="Control"]
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
script = ExtResource( 2 )
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="buttons" type="VBoxContainer" parent="."]
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
margin_left = -20.0
|
||||||
|
margin_top = -20.0
|
||||||
|
margin_right = 20.0
|
||||||
|
margin_bottom = 20.0
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="upgrade" type="Button" parent="buttons"]
|
||||||
|
margin_right = 217.0
|
||||||
|
margin_bottom = 43.0
|
||||||
|
theme = ExtResource( 1 )
|
||||||
|
text = "Upgrade town"
|
||||||
|
|
||||||
|
[node name="teleport_to_town" type="Button" parent="buttons"]
|
||||||
|
margin_top = 47.0
|
||||||
|
margin_right = 217.0
|
||||||
|
margin_bottom = 90.0
|
||||||
|
theme = ExtResource( 1 )
|
||||||
|
text = "Teleport to town"
|
||||||
|
|
||||||
|
[node name="return" type="Button" parent="buttons"]
|
||||||
|
margin_top = 94.0
|
||||||
|
margin_right = 217.0
|
||||||
|
margin_bottom = 137.0
|
||||||
|
theme = ExtResource( 1 )
|
||||||
|
text = "Return"
|
||||||
2
world.gd
2
world.gd
@@ -124,7 +124,7 @@ func _process(delta):
|
|||||||
var fps_cam_rot_y
|
var fps_cam_rot_y
|
||||||
var fps_cam_rot_x
|
var fps_cam_rot_x
|
||||||
var default_offset
|
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.remove_child(viewer)
|
||||||
player.add_child(viewer)
|
player.add_child(viewer)
|
||||||
# player.add_child(VoxelViewer.new())
|
# player.add_child(VoxelViewer.new())
|
||||||
|
|||||||
Reference in New Issue
Block a user