Compare commits

..

2 Commits

Author SHA1 Message Date
Segey Lapin
d9e55d7dcf Added combat event transmission 2021-12-29 01:40:52 +03:00
Segey Lapin
f22cc56075 Fixed FPS drops by disabling palace for now 2021-12-29 01:39:55 +03:00
29 changed files with 126891 additions and 190536 deletions

View File

@@ -39,20 +39,20 @@ var roommates = {}
func _ready():
var capsule_male = CapsuleShape.new()
capsule_male.radius = 0.4
capsule_male.height = 1.12
capsule_male.margin = 0.08
capsule_male.radius = 0.3
capsule_male.height = 1.2
capsule_male.margin = 0.05
var capsule_female = CapsuleShape.new()
capsule_female.radius = 0.35
capsule_female.height = 0.9
capsule_female.margin = 0.08
capsule_female.radius = 0.2
capsule_female.height = 1.1
capsule_female.margin = 0.05
CharacterSystemWorld.add_character_scene(female, {}, "female")
CharacterSystemWorld.add_character_scene(male, {}, "male")
for k in modules.keys():
CharacterSystemWorld.add_module(k, modules[k])
CharacterSystemWorld.set_face_ctrl_scene(face_ctrl)
CharacterSystemWorld.add_character_shape(capsule_female, Transform(Basis().rotated(Vector3(1, 0, 0), -PI/2.0), Vector3(0, 0.805, 0)), "female")
CharacterSystemWorld.add_character_shape(capsule_male, Transform(Basis().rotated(Vector3(1, 0, 0), -PI/2.0), Vector3(0, 0.965, 0)), "male")
CharacterSystemWorld.add_character_shape(capsule_female, Transform(Basis().rotated(Vector3(1, 0, 0), -PI/2.0), Vector3(0, 0.751, 0)), "female")
CharacterSystemWorld.add_character_shape(capsule_male, Transform(Basis().rotated(Vector3(1, 0, 0), -PI/2.0), Vector3(0, 0.899, 0)), "male")
set_root_motion_mod(Transform())
var fd = File.new()
fd.open("res://data/names.json", File.READ)
@@ -101,7 +101,6 @@ 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)
@@ -160,25 +159,114 @@ 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):
# var id = create_character_in_pool(
# return CharacterSystemWorld.create_character(g, enable_modules, face, hair, hair_mat)
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 replace_player_character(obj, g, enable_modules = [], face = -1, hair = -1, hair_mat = -1):
func replace_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):
@@ -540,6 +628,6 @@ func _physics_process(delta):
var player = get_player()
if !player:
return
# if player.has_meta("animation_tree") && !player.has_meta("vehicle"):
# if streaming.can_spawn:
# character_physics(player)
if player.has_meta("animation_tree") && !player.has_meta("vehicle"):
if streaming.can_spawn:
character_physics(player)

View File

@@ -40,7 +40,6 @@ func equip(obj, item_name):
print("EQUIP ", item_name, " OK", obj, r)
obj.set_meta("equipped", item_name)
c.set_meta("owner", obj.get_meta("owner"))
c.set_meta("item_name", item_name)
func register_pick_up(m, obj, item_name):
var mdata = {
"method": "pick_up",

View File

@@ -60,7 +60,6 @@ class Grabbing:
var cam_to = m.origin + Vector3.UP * 1.4
emit_signal("enable_cinematic_camera", cam_where, cam_to)
func reset_character(b):
assert(b)
b.remove_meta("cmdqueue")
b.remove_meta("cmdq_walk")
b.remove_meta("climb")

View File

@@ -175,7 +175,7 @@ func setup_first_town(site):
palace_aabb = palace_aabb.grow(48)
print(palace_aabb)
aabbs.push_back(palace_aabb)
# stream_obj("palace", Transform(Basis(), center))
stream_obj("palace", Transform(Basis(), center))
for p in range(radial_points.size()):
var ep = radial_points[p]
@@ -278,7 +278,7 @@ func _ready():
# Traffic.set_deny_physics()
# Traffic.set_physics_distance(Vector3(30, -10, 40))
# Traffic.set_debug(true)
Traffic.set_spawn_cooldown(10, 15)
Traffic.set_spawn_cooldown(2, 5)
Traffic.set_default_speed(8.5)
Traffic.add_traffic_vehicle(car)
var water_mat = load("res://water/Water.material")
@@ -350,8 +350,7 @@ func _physics_process(delta):
base.push_back("bandit")
if g.length() > 0:
print(g, " ", base)
CharacterSystemWorld.create_character_in_pool(g, base, n.global_transform)
n.queue_free()
characters.replace_character(n, g, base)
elif n.is_in_group("car"):
var p1 = cam.global_transform.origin
var p2 = n.global_transform.origin

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=153 format=2]
[gd_scene load_steps=143 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,32 +70,6 @@ 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"
@@ -109,33 +83,6 @@ nodes/TimeScale/position = Vector2( 592, 184 )
nodes/output/position = Vector2( 860, 120 )
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
[sub_resource type="AnimationNodeAnimation" id=152]
animation = "guard-melee-forward1"
[sub_resource type="AnimationNodeTimeScale" id=153]
[sub_resource type="AnimationNodeBlendTree" id=147]
nodes/Animation/node = SubResource( 152 )
nodes/Animation/position = Vector2( 194, 149 )
nodes/TimeScale/node = SubResource( 153 )
nodes/TimeScale/position = Vector2( 525, 150 )
nodes/output/position = Vector2( 780, 140 )
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
[sub_resource type="AnimationNodeAnimation" id=145]
animation = "guard-melee-backwards1"
[sub_resource type="AnimationNodeTimeScale" id=146]
[sub_resource type="AnimationNodeBlendTree" id=140]
graph_offset = Vector2( 0, -262 )
nodes/Animation/node = SubResource( 145 )
nodes/Animation/position = Vector2( 119, 108 )
nodes/TimeScale/node = SubResource( 146 )
nodes/TimeScale/position = Vector2( 520, 120 )
nodes/output/position = Vector2( 820, 160 )
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
[sub_resource type="AnimationNodeAnimation" id=19]
animation = "female-idle-to-kneel1"
@@ -179,7 +126,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"
@@ -199,7 +146,6 @@ input_1/name = "state 1"
input_1/auto_advance = true
[sub_resource type="AnimationNodeBlendTree" id=33]
graph_offset = Vector2( -264.489, -30 )
nodes/Animation/node = SubResource( 29 )
nodes/Animation/position = Vector2( 140, 100 )
"nodes/Animation 2/node" = SubResource( 28 )
@@ -211,7 +157,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", "Transition", 0, "TimeScale", "Transition", 1, "TimeScale 2", "TimeScale 2", 0, "Animation 2" ]
[sub_resource type="AnimationNodeAnimation" id=34]
animation = "07_01-walk"
@@ -239,16 +185,84 @@ nodes/TimeScale/position = Vector2( 580, 120 )
nodes/output/position = Vector2( 840, 140 )
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
[sub_resource type="AnimationNodeAnimation" id=40]
animation = "walk1p2"
[sub_resource type="AnimationNodeAnimation" id=41]
animation = "walk1p1"
[sub_resource type="AnimationNodeTimeScale" id=42]
[sub_resource type="AnimationNodeTimeScale" id=43]
[sub_resource type="AnimationNodeTransition" id=44]
input_count = 2
input_0/name = "state 0"
input_0/auto_advance = true
input_1/name = "state 1"
input_1/auto_advance = true
[sub_resource type="AnimationNodeBlendTree" id=45]
graph_offset = Vector2( 0, -259 )
nodes/Animation/node = SubResource( 41 )
nodes/Animation/position = Vector2( 200, 80 )
"nodes/Animation 2/node" = SubResource( 40 )
"nodes/Animation 2/position" = Vector2( 200, 280 )
nodes/TimeScale/node = SubResource( 43 )
nodes/TimeScale/position = Vector2( 660, 60 )
"nodes/TimeScale 2/node" = SubResource( 42 )
"nodes/TimeScale 2/position" = Vector2( 580, 260 )
nodes/Transition/node = SubResource( 44 )
nodes/Transition/position = Vector2( 920, 120 )
nodes/output/position = Vector2( 1260, 160 )
node_connections = [ "output", 0, "Transition", "TimeScale", 0, "Animation", "Transition", 0, "TimeScale", "Transition", 1, "TimeScale 2", "TimeScale 2", 0, "Animation 2" ]
[sub_resource type="AnimationNodeAnimation" id=46]
animation = "walk1p2"
[sub_resource type="AnimationNodeAnimation" id=47]
animation = "walk1p1"
[sub_resource type="AnimationNodeTimeScale" id=48]
[sub_resource type="AnimationNodeTimeScale" id=49]
[sub_resource type="AnimationNodeTransition" id=50]
input_count = 2
xfade_time = 0.2
input_0/name = "state 0"
input_0/auto_advance = true
input_1/name = "state 1"
input_1/auto_advance = true
[sub_resource type="AnimationNodeBlendTree" id=51]
graph_offset = Vector2( 0, -294.25 )
nodes/Animation/node = SubResource( 47 )
nodes/Animation/position = Vector2( 208, 136 )
"nodes/Animation 2/node" = SubResource( 46 )
"nodes/Animation 2/position" = Vector2( 230, 287 )
nodes/TimeScale/node = SubResource( 49 )
nodes/TimeScale/position = Vector2( 660, 80 )
"nodes/TimeScale 2/node" = SubResource( 48 )
"nodes/TimeScale 2/position" = Vector2( 680, 260 )
nodes/Transition/node = SubResource( 50 )
nodes/Transition/position = Vector2( 1000, 140 )
nodes/output/position = Vector2( 1260, 140 )
node_connections = [ "output", 0, "Transition", "TimeScale", 0, "Animation", "Transition", 0, "TimeScale", "Transition", 1, "TimeScale 2", "TimeScale 2", 0, "Animation 2" ]
[sub_resource type="AnimationNodeBlendSpace2D" id=52]
blend_point_0/node = SubResource( 27 )
blend_point_0/pos = Vector2( 0, 0 )
blend_point_1/node = SubResource( 33 )
blend_point_1/pos = Vector2( 0.1, 0 )
blend_point_1/pos = Vector2( 0.2, 0 )
blend_point_2/node = SubResource( 36 )
blend_point_2/pos = Vector2( 0.2, -1 )
blend_point_3/node = SubResource( 39 )
blend_point_3/pos = Vector2( 0.2, 1 )
blend_mode = 1
blend_point_4/node = SubResource( 45 )
blend_point_4/pos = Vector2( 0.6, 0 )
blend_point_5/node = SubResource( 51 )
blend_point_5/pos = Vector2( 0.4, 0 )
[sub_resource type="AnimationNodeBlendTree" id=53]
graph_offset = Vector2( 0, -95 )
@@ -288,7 +302,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", "Transition", 1, "TimeScale 2", "TimeScale 2", 0, "Animation 2" ]
[sub_resource type="AnimationNodeAnimation" id=61]
animation = "female-pray-startled1"
@@ -354,7 +368,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", "attack2", 0, "attack1", "attack2", 1, "TimeScale 2", "attack1", 0, "speed", "attack1", 1, "TimeScale", "TimeScale", 0, "Animation 2", "TimeScale 2", 0, "Animation 3" ]
[sub_resource type="AnimationNodeAnimation" id=76]
animation = "dagger-sacrifice-counter-p"
@@ -552,34 +566,6 @@ switch_mode = 2
switch_mode = 2
auto_advance = true
[sub_resource type="AnimationNodeStateMachineTransition" id=141]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id=142]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id=143]
[sub_resource type="AnimationNodeStateMachineTransition" id=144]
switch_mode = 2
auto_advance = true
[sub_resource type="AnimationNodeStateMachineTransition" id=148]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id=149]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id=150]
[sub_resource type="AnimationNodeStateMachineTransition" id=151]
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 )
@@ -589,16 +575,8 @@ 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 )
states/guard-front-melee1/position = Vector2( 1477.6, 336.193 )
states/guard-melee1/node = SubResource( 140 )
states/guard-melee1/position = Vector2( 1200.6, 496.193 )
states/grabbed/position = Vector2( 1277, 182.193 )
states/kneel/node = SubResource( 21 )
states/kneel/position = Vector2( 522, 84 )
states/locomotion/node = SubResource( 53 )
@@ -612,11 +590,11 @@ states/pray-startled/position = Vector2( 294, 316.193 )
states/pray-startled-walk/node = SubResource( 60 )
states/pray-startled-walk/position = Vector2( 294, 514.193 )
states/sacrifice/node = SubResource( 75 )
states/sacrifice/position = Vector2( 1547, 101 )
states/sacrifice/position = Vector2( 1023, 135 )
states/sacrificed/node = SubResource( 78 )
states/sacrificed/position = Vector2( 1547, 180 )
states/sacrificed/position = Vector2( 1125, 283 )
states/sleeping/node = SubResource( 81 )
states/sleeping/position = Vector2( 1045, 348.193 )
states/sleeping/position = Vector2( 1078, 411.193 )
states/stand-startled/node = SubResource( 84 )
states/stand-startled/position = Vector2( 717, 411.193 )
states/start_walking/node = SubResource( 115 )
@@ -629,9 +607,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 ), "locomotion", "fall-front", SubResource( 160 ), "locomotion", "fall-back", SubResource( 161 ) ]
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 ) ]
start_node = "locomotion"
graph_offset = Vector2( 496.672, 7.1925 )
graph_offset = Vector2( 176.598, 15.1925 )
[sub_resource type="AnimationNodeBlendTree" id=111]
graph_offset = Vector2( 445.846, -157.796 )
@@ -654,19 +632,11 @@ node_connections = [ "output", 0, "blade_right", "all_scale", 0, "state", "blade
[node name="vroid1-female" instance=ExtResource( 1 )]
[node name="Skeleton" parent="skeleton" index="0"]
bones/1/bound_children = [ NodePath("hips") ]
bones/25/bound_children = [ NodePath("chest") ]
bones/79/bound_children = [ NodePath("neck") ]
bones/80/bound_children = [ NodePath("head") ]
bones/99/bound_children = [ NodePath("wrist_l") ]
bones/101/bound_children = [ NodePath("wrist_r") ]
[node name="body" parent="skeleton/Skeleton" index="0"]
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.713409, 0.342413, -0.611461, -0.0945617, 0.911515, 0.400091, 0.694399, -0.227615, 0.682673, -0.0411225, 1.35382, -0.0195896 )
transform = Transform( 0.988223, 0.148734, 0.0362569, -0.141467, 0.79667, 0.587692, 0.0585027, -0.585856, 0.808242, -0.0111943, 1.32085, -0.0280195 )
bone_name = "Head"
[node name="marker_talk" type="Spatial" parent="skeleton/Skeleton/head" index="0"]
@@ -696,7 +666,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.94223, 0.0611767, 0.329466, 0.0446752, -0.997287, 0.0574523, 0.332118, -0.0394095, -0.942444, 0.000203859, 0.89952, -0.00645694 )
transform = Transform( 0.989795, 0.0136796, -0.14192, 0.00710856, -0.998924, -0.046698, -0.142409, 0.0452161, -0.988735, 0.000203863, 0.86329, -0.00645694 )
bone_name = "Hips"
[node name="marker_dagger_sacrifice" type="Spatial" parent="skeleton/Skeleton/hips" index="0"]
@@ -711,21 +681,21 @@ monitorable = false
shape = SubResource( 2 )
[node name="wrist_r" type="BoneAttachment" parent="skeleton/Skeleton" index="4"]
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 )
transform = Transform( -0.184609, 0.953624, -0.23774, 0.867928, 0.271679, 0.415801, 0.461107, -0.12958, -0.877832, 0.257193, 0.805181, -0.0805364 )
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.0838252, -0.864731, 0.495188, -0.980276, 0.160814, 0.114885, -0.178979, -0.47579, -0.861156, -0.181656, 0.840334, -0.0498495 )
transform = Transform( -0.252208, -0.871285, 0.421014, -0.924053, 0.346005, 0.162504, -0.287261, -0.348054, -0.892379, -0.275192, 0.827823, -0.00582178 )
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.958586, -0.0332876, -0.283002, 0.0462008, 0.998108, 0.0390467, 0.281199, -0.0505137, 0.958342, -0.00285422, 1.06003, -0.0194018 )
transform = Transform( 0.982621, -0.0259787, 0.183851, 0.0189799, 0.999071, 0.0397199, -0.184712, -0.0355462, 0.982102, -0.00488846, 1.02193, -0.0338627 )
bone_name = "Chest"
[node name="chest_hurt" type="Area" parent="skeleton/Skeleton/chest" index="0"]
@@ -740,7 +710,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.839515, -0.327886, -0.433348, 0.389612, 0.918993, 0.0594129, 0.378795, -0.218737, 0.899283, -0.0168142, 1.28569, -0.00337323 )
transform = Transform( 0.973501, -0.192912, 0.12289, 0.178008, 0.976401, 0.122607, -0.143648, -0.0974797, 0.984768, 0.0031075, 1.24847, -0.0207927 )
bone_name = "Neck"
[node name="marker_neck_grab" type="Position3D" parent="skeleton/Skeleton/neck" index="0"]
@@ -751,7 +721,6 @@ visible = false
tree_root = SubResource( 111 )
anim_player = NodePath("../AnimationPlayer")
active = true
process_mode = 0
root_motion_track = NodePath("skeleton/Skeleton:root")
parameters/all_scale/scale = 1.0
parameters/blade_left/blend_amount = 0.0
@@ -760,21 +729,23 @@ 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
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.00127554, 0.00220752 )
parameters/state/locomotion/loc/0/TimeScale/scale = 2.0
"parameters/state/locomotion/loc/0/TimeScale 2/scale" = 1.5
parameters/state/locomotion/loc/0/t1/current = 1
parameters/state/locomotion/loc/0/t1/current = 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/Transition/current = 1
parameters/state/locomotion/loc/1/Transition/current = 0
parameters/state/locomotion/loc/2/TimeScale/scale = 1.0
parameters/state/locomotion/loc/3/TimeScale/scale = 1.0
parameters/state/locomotion/loc/4/TimeScale/scale = 3.5
"parameters/state/locomotion/loc/4/TimeScale 2/scale" = 3.5
parameters/state/locomotion/loc/4/Transition/current = 0
parameters/state/locomotion/loc/5/TimeScale/scale = 1.5
"parameters/state/locomotion/loc/5/TimeScale 2/scale" = 1.5
parameters/state/locomotion/loc/5/Transition/current = 0
parameters/state/pray/TimeScale/scale = 1.0
parameters/state/pray-startled/TimeScale/scale = 1.8
parameters/state/pray-startled-walk/TimeScale/scale = 1.3

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=123 format=2]
[gd_scene load_steps=103 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,32 +79,6 @@ 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"
@@ -119,21 +93,6 @@ nodes/TimeScale/position = Vector2( 820, 100 )
nodes/output/position = Vector2( 1160, 140 )
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
[sub_resource type="AnimationNodeBlendTree" id=157]
[sub_resource type="AnimationNodeAnimation" id=150]
animation = "giard-melee-backwards1"
[sub_resource type="AnimationNodeTimeScale" id=151]
[sub_resource type="AnimationNodeBlendTree" id=152]
nodes/Animation/node = SubResource( 150 )
nodes/Animation/position = Vector2( 242, 180 )
nodes/TimeScale/node = SubResource( 151 )
nodes/TimeScale/position = Vector2( 520, 180 )
nodes/output/position = Vector2( 800, 180 )
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
[sub_resource type="AnimationNodeAnimation" id=17]
animation = "stand1-loop"
@@ -316,7 +275,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"
@@ -344,7 +303,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"
@@ -376,7 +335,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", "Transition", 0, "TimeScale", "Transition", 1, "TimeScale 2", "TimeScale 2", 0, "Animation 2" ]
[sub_resource type="AnimationNodeStateMachineTransition" id=55]
@@ -445,59 +404,23 @@ xfade_time = 0.5
switch_mode = 2
auto_advance = true
[sub_resource type="AnimationNodeStateMachineTransition" id=153]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id=154]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id=155]
[sub_resource type="AnimationNodeStateMachineTransition" id=156]
switch_mode = 2
auto_advance = true
[sub_resource type="AnimationNodeStateMachineTransition" id=158]
[sub_resource type="AnimationNodeStateMachineTransition" id=159]
switch_mode = 2
auto_advance = true
[sub_resource type="AnimationNodeStateMachineTransition" id=160]
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 )
states/climb1/node = SubResource( 7 )
states/climb1/position = Vector2( 359.444, 656 )
states/climb1a/node = SubResource( 10 )
states/climb1a/position = Vector2( 713.444, 92 )
states/climb1a/position = Vector2( 659.444, 154 )
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/drive/position = Vector2( 289, 430 )
states/grab/node = SubResource( 16 )
states/grab/position = Vector2( 713.444, 145 )
states/guard-front-melee1/node = SubResource( 157 )
states/guard-front-melee1/position = Vector2( 835.317, 274 )
states/guard-melee1/node = SubResource( 152 )
states/guard-melee1/position = Vector2( 671.317, 463 )
states/grab/position = Vector2( 739.444, 243 )
states/locomotion/node = SubResource( 41 )
states/locomotion/position = Vector2( 231, 174 )
states/passenger/node = SubResource( 44 )
states/passenger/position = Vector2( 458.444, 421 )
states/passenger/position = Vector2( 555.444, 339 )
states/sacrificed-a/node = SubResource( 48 )
states/sacrificed-a/position = Vector2( 625.444, 779 )
states/sacrificed-a/position = Vector2( 628.444, 464 )
states/sleeping/node = SubResource( 51 )
states/sleeping/position = Vector2( -112.556, 339 )
states/start_walking/node = SubResource( 102 )
@@ -510,12 +433,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 ), "locomotion", "fall-front", SubResource( 168 ), "locomotion", "fall-back", SubResource( 169 ) ]
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 ) ]
start_node = "locomotion"
graph_offset = Vector2( -230.683, 15 )
graph_offset = Vector2( -103.683, 58 )
[sub_resource type="AnimationNodeBlendTree" id=71]
graph_offset = Vector2( -534, -71 )
graph_offset = Vector2( -610.686, 0 )
nodes/Animation/node = SubResource( 2 )
nodes/Animation/position = Vector2( -200, 260 )
"nodes/Animation 2/node" = SubResource( 1 )
@@ -543,7 +466,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.083992, -0.0441852, 0.995486, 0.996075, -0.0242614, -0.0851186, 0.24008, 1.0159, -0.0689935 )
transform = Transform( 0.0279129, 0.998728, 0.0419739, 0.0839921, -0.0441851, 0.995486, 0.996075, -0.0242615, -0.0851187, 0.24008, 1.0159, -0.0177416 )
bone_name = "wrist_ik_r"
[node name="marker_wrist_r_grab" type="Position3D" parent="Skeleton/wrist_r" index="0"]
@@ -554,7 +477,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.02836, -0.0471478 )
transform = Transform( 0.531637, -0.84656, 0.0264325, -0.0845947, -0.0220212, 0.996172, -0.842737, -0.531838, -0.0833217, -0.202819, 1.01771, -0.0990905 )
bone_name = "wrist_ik_l"
[node name="marker_wrist_l_grab" type="Position3D" parent="Skeleton/wrist_l" index="0"]
@@ -565,7 +488,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.998981, -0.0174369, -0.0416214, 0.0314635, 0.930306, 0.365432, 0.0323486, -0.366369, 0.929906, -0.0329707, 1.69764, -0.0053772 )
transform = Transform( 0.992423, -0.0725141, 0.0991927, 0.0314417, 0.93028, 0.3655, -0.118781, -0.359611, 0.92551, -0.0334505, 1.69764, -0.0088316 )
bone_name = "J_Bip_C_Head"
[node name="marker_talk" type="Position3D" parent="Skeleton/head" index="0"]
@@ -592,7 +515,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.987964, -0.143962, 0.0565838, 0.150106, 0.98061, -0.125986, -0.0373495, 0.132963, 0.990417, 0.000514592, 1.10104, -0.0117666 )
transform = Transform( 0.98661, -0.156797, -0.0449004, 0.150109, 0.980609, -0.125986, 0.063784, 0.117559, 0.991015, 0.000514592, 1.10104, -0.0117666 )
bone_name = "J_Bip_C_Hips"
[node name="marker_hips_action" type="Position3D" parent="Skeleton/hips" index="0"]
@@ -608,7 +531,7 @@ monitorable = false
shape = SubResource( 148 )
[node name="neck" type="BoneAttachment" parent="Skeleton" index="6"]
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 )
transform = Transform( 0.997574, -0.0156814, -0.0678291, 0.0262169, 0.987195, 0.157347, 0.0644932, -0.158743, 0.985211, -0.0319104, 1.60068, 0.0067592 )
bone_name = "J_Bip_C_Neck"
[node name="marker_neck_grab" type="Position3D" parent="Skeleton/neck" index="0"]
@@ -616,7 +539,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.987964, 0.108698, -0.110052, 0.150106, -0.845508, 0.51243, -0.0373501, -0.522782, -0.851648, 0.0136458, 0.991264, -0.105598 )
transform = Transform( 0.986609, 0.161544, -0.0224677, 0.15011, -0.845507, 0.51243, 0.0637833, -0.508941, -0.858435, 0.023164, 0.991264, -0.103765 )
bone_name = "penis2"
[node name="marker_penis_action" type="Position3D" parent="Skeleton/penis_2" index="0"]
@@ -624,7 +547,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.998943, -0.0241071, 0.0391486, 0.0262218, 0.998173, -0.0544354, -0.0377648, 0.0554043, 0.997749, -0.0235756, 1.33823, -0.00638926 )
transform = Transform( 0.997574, -0.0296453, -0.0629938, 0.0262256, 0.998173, -0.0544359, 0.0644925, 0.0526517, 0.996528, -0.0239998, 1.33823, -0.00887859 )
bone_name = "J_Bip_C_Chest"
[node name="chest_hurt" type="Area" parent="Skeleton/chest" index="0"]
@@ -648,10 +571,7 @@ 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 )
parameters/state/locomotion/loc/0/TimeScale/scale = 1.0
parameters/state/locomotion/loc/1/TimeScale/scale = 2.0

View File

@@ -1,2 +1,12 @@
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"])

View File

@@ -9,15 +9,14 @@ 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, 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 )
transform = Transform( 0.930494, 0, 0.366306, 0, 1, 0, -0.366306, 0, 0.930494, 2.86465, 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, 0.0150008 )
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -2.38509, 0.249482, 2.91225 )

View File

@@ -37,7 +37,6 @@ streaming="*res://autoload/streaming.tscn"
freezer="*res://autoload/freezer.gd"
scenario="*res://autoload/scenario.gd"
orchestration="*res://autoload/orchestration.tscn"
combat="*res://autoload/combat.gd"
[debug]
@@ -95,21 +94,9 @@ attack={
"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null)
]
}
jump={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
]
}
[memory]
limits/multithreaded_server/rid_pool_prealloc=256
limits/message_queue/max_size_kb=6144
limits/command_queue/multithreading_queue_size_kb=512
[physics]
common/physics_fps=150
3d/physics_engine="Bullet"
[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

View File

@@ -4,21 +4,8 @@ var raycast_queue = []
var blood = preload("res://scenes/decals/blood.tscn")
var blood_decal = preload("res://scenes/decals/blood1-decal.gltf")
var rnd
var initialized = false
var root
func init(tick):
assert(!initialized)
if initialized:
printerr("already initialized")
return
root = get_character(tick)
if !root:
printerr("no character?")
return
var cam = root.get_viewport().get_camera()
if !cam.has_meta("player"):
printerr("no player?")
return
func init():
var root = get_character()
var queue = [root]
var hurtboxes = []
assert(root.has_meta("skeleton"))
@@ -33,12 +20,15 @@ func init(tick):
e.connect("area_entered", self, "area_hit", [e])
rnd = RandomNumberGenerator.new()
rnd.randomize()
print("initialized ok")
initialized = true
func area_hit(area, e):
var root = get_character()
if area.is_in_group("weapon_hit"):
var mo = area.get_meta("owner")
if mo == root:
# var cam = get_character().get_viewport().get_camera()
# var pl = cam.get_meta("player")
# print(mo.name, " ", root.name, " ", e.name)
# print(mo, " ", root, " ", " ", pl)
return
print("HIT")
var bi = blood.instance()
@@ -59,55 +49,36 @@ func area_hit(area, e):
offt.y = 0
org += xoff + offt
raycast_queue.push_back(org)
assert(area.has_meta("item_name"))
combat.emit_signal("event", "damage", [mo, area.get_meta("item_name")])
yield(root.get_tree().create_timer(8), "timeout")
# TODO: add delay
bi.queue_free()
func update_physics(tick, delta):
assert(initialized)
root = get_character(tick)
if !root:
printerr("no character?")
assert(!initialized)
return FAILED
func update_physics(delta):
var root = get_character()
var space_state: PhysicsDirectSpaceState = root.get_world().direct_space_state
var offsets = [Vector3(0, -2, 0)]
var cam = root.get_viewport().get_camera()
if !cam.has_meta("player"):
printerr("no player?")
assert(!initialized)
return FAILED
return
var player = cam.get_meta("player")
raycast_queue.clear()
# while raycast_queue.size() > 0:
# var item = raycast_queue.pop_front()
# var a = item
# for boff in offsets:
# var b = a + boff
# var result = {}
# if root is PhysicsBody:
# result = space_state.intersect_ray(a, b, [root, player])
# else:
# result = space_state.intersect_ray(a, b)
# if result.has("collider"):
# var body = result.collider
# var normal = result.normal
# var position = result.position
# var decal = blood_decal.instance()
# decal.add_to_group("blood")
# body.add_child(decal)
# decal.global_transform.origin = position
# var scale = 0.5 + rnd.randf() * 2.0
# var rot = PI * 2.0 * rnd.randf()
# decal.global_transform.basis = Basis(normal).scaled(Vector3(scale, 1.0, scale)).rotated(normal, rot)
return ERR_BUSY
func stop(tick):
pass
# printerr("Why stopped?")
# assert(false)
func update(tick, delta):
return ERR_BUSY
while raycast_queue.size() > 0:
var item = raycast_queue.pop_front()
var a = item
for boff in offsets:
var b = a + boff
var result = {}
if root is PhysicsBody:
result = space_state.intersect_ray(a, b, [root, player])
else:
result = space_state.intersect_ray(a, b)
if result.has("collider"):
var body = result.collider
var normal = result.normal
var position = result.position
var decal = blood_decal.instance()
decal.add_to_group("blood")
body.add_child(decal)
decal.global_transform.origin = position
var scale = 0.5 + rnd.randf() * 2.0
var rot = PI * 2.0 * rnd.randf()
decal.global_transform.basis = Basis(normal).scaled(Vector3(scale, 1.0, scale)).rotated(normal, rot)

View File

@@ -10,12 +10,12 @@ extends AIScriptModule
var animtree: AnimationTree
var root_motion_track
func init(tick):
func init():
# process_priority = 0
pass
func can_walk_there(tick: AITick, dest: Vector3) -> bool:
var root = get_character(tick)
func can_walk_there(dest: Vector3) -> bool:
var root = get_character()
var space: PhysicsDirectSpaceState = root.get_world().get_direct_space_state()
var result = space.intersect_ray(root.global_transform.origin, dest, [root])
if result.has("collider"):
@@ -23,8 +23,8 @@ func can_walk_there(tick: AITick, dest: Vector3) -> bool:
else:
return true
func update_physics(tick, delta):
var root = get_character(tick)
func update_physics(delta):
var root = get_character()
var orientation: Transform
assert(root.has_meta("skeleton"))
@@ -35,12 +35,12 @@ func update_physics(tick, delta):
if animtree:
root_motion_track = animtree.root_motion_track
else:
return FAILED
return
if characters.handle_cmdq(root):
return
var skel = root.get_meta("skeleton")
if !skel:
return FAILED
if characters.handle_cmdq(root):
return ERR_BUSY
return
if root.has_meta("cmdqueue"):
var cmds = root.get_meta("cmdqueue")
var cmd = cmds.pop_front()
@@ -256,7 +256,3 @@ func update_physics(tick, delta):
root.set_meta("cmdqueue", cmds)
else:
root.remove_meta("cmdqueue")
return ERR_BUSY
func update(tick, delta):
return ERR_BUSY

View File

@@ -1,446 +1,38 @@
extends AIScriptModule
const garments_female_lingerie = ["female-panties1", "female-bra1"]
const garments_head_female = []
const garments_male_lingerie = ["male-panties1"]
const garments_head_male = []
const garments_female_main = ["female-shirt_skirt1"]
const garments_male_main = ["male-pants1", "male-shoes1"]
const basedir = "res://scenes/clothes/"
const material_female = preload("res://scenes/clothes/nun-clothes.material")
const material_male = preload("res://scenes/clothes/clothes-male.material")
const attack_distance = 2.0
const guard_distance = 2.0
const engage_distance = 10.0
const flee_distance = 5.0
const init_blackboard = {
"stamina": 100.0,
"health": 100.0,
"melee_weapon_equipped": false,
"attack_cooldown": 0.0,
"guard_cooldown": 0.0,
"flee_cooldown": 0.0,
"guard": false,
"melee_damage": false,
"dot": 0.0
}
class AITreeBuilder:
var parent
func seq(a: Array):
var e = AITreeBuilder.new()
e.parent = self
return e
func look_at(tick, ch):
var root = get_character(tick)
var current = root.global_transform
var at = ch.global_transform.origin
at.y = current.origin.y
root.global_transform = current.looking_at(at, Vector3.UP)
func combat_event(ev, data, blackboard):
var root = blackboard.self
var cam = root.get_viewport().get_camera()
var player
if cam:
player = cam.get_meta("player")
assert(player)
match ev:
"about_to_attack":
var who = data[0]
if who != root:
var where = who.global_transform.origin
var curpos = root.global_transform.origin
var dst = where.distance_squared_to(curpos)
if dst < guard_distance * guard_distance:
if who == player:
blackboard["guard"] = true
# blackboard_set(tick, "melee_damage", true)
"damage":
var who = data[0]
var weapon = data[1]
if who != root:
var where = who.global_transform.origin
var curpos = root.global_transform.origin
var dst = where.distance_squared_to(curpos)
if dst < attack_distance * attack_distance:
if who == player:
blackboard["melee_damage"] = true
# blackboard_set(tick, "melee_damage", true)
class take_weapon extends AIScriptModule:
func init(tick):
get_memory(tick).root = get_character(tick)
get_memory(tick).skel = get_memory(tick).root.get_meta("skeleton")
func update_physics(tick, delta):
var root = get_memory(tick).root
assert(root)
if blackboard_get(tick, "melee_weapon_equipped"):
return FAILED
var wslot = get_memory(tick).skel.get_node("wrist_r/weapon_right")
wslot.set_meta("owner", root)
inventory.equip(wslot, get_memory(tick).weapon)
blackboard_set(tick, "melee_weapon_equipped", true)
assert(blackboard_get(tick, "melee_weapon_equipped"))
return OK
func stop(tick):
# can't re-run this one
var root = get_memory(tick).root
assert(root)
class guard extends AIScriptModule:
func init(tick):
get_memory(tick).root = get_character(tick)
get_memory(tick).state = 0
func update_physics(tick, delta):
var root = get_memory(tick).root
assert(root)
if blackboard_get(tick, "guard_cooldown") > 0:
return FAILED
if blackboard_get(tick, "guard"):
blackboard_set(tick, "guard", false)
match get_memory(tick).state:
0:
# guard
var anim
if blackboard_get(tick, "dot") < 0:
anim = get_memory(tick).anim1
else:
anim = get_memory(tick).anim2
characters.animation_node_travel(root, anim)
get_memory(tick).state = 1
return ERR_BUSY
1:
get_memory(tick).state = 2
return ERR_BUSY
2:
blackboard_set(tick, "guard_cooldown", 1.5)
return OK
return OK
func stop(tick):
get_memory(tick).state = 0
class rest extends AIScriptModule:
func init(tick):
get_memory(tick).root = get_character(tick)
func update_physics(tick, delta):
var root = get_memory(tick).root
assert(root)
if blackboard_get(tick, "stamina") < 100.0:
blackboard_set(tick, "stamina", blackboard_get(tick, "stamina") + 15500.0 * delta)
return ERR_BUSY
else:
return OK
func stop(tock):
pass
class idle extends AIScriptModule:
func init(tick):
get_memory(tick).root = get_character(tick)
func update_physics(tick, delta):
var root = get_memory(tick).root
assert(root)
if blackboard_get(tick, "stamina") < 100.0:
blackboard_set(tick, "stamina", blackboard_get(tick, "stamina") + 0.5 * delta)
return ERR_BUSY
else:
return OK
func stop(tock):
pass
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
class unconcious extends AIScriptModule:
func init(tick):
get_memory(tick).root = get_character(tick)
get_memory(tick).state = 0
# Called when the node enters the scene tree for the first time.
var root
var skel
var hair_skel
var name
func update_physics(tick, delta):
var root = get_memory(tick).root
var anim1 = get_memory(tick).anim1
var anim2 = get_memory(tick).anim2
assert(root)
assert(anim1)
assert(anim2)
match get_memory(tick).state:
0:
characters.animation_node_travel(root, anim1)
get_memory(tick).state = 1
return ERR_BUSY
return ERR_BUSY
func stop(tick):
pass
var garments_female_lingerie = ["female-panties1", "female-bra1"]
var garments_head_female = []
var garments_male_lingerie = ["male-panties1"]
var garments_head_male = []
var garments_female_main = ["female-shirt_skirt1"]
var garments_male_main = ["male-pants1", "male-shoes1"]
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")
class get_damage extends AIScriptModule:
func init(tick):
get_memory(tick).root = get_character(tick)
get_memory(tick).state = 0
var state = 0
var health = 100.0
var stamina = 100.0
func update_physics(tick, delta):
var root = get_memory(tick).root
var anim1 = get_memory(tick).anim1
var anim2 = get_memory(tick).anim2
var cost = get_memory(tick).cost
assert(root)
if blackboard_get(tick, "guard_cooldown") > 0:
return FAILED
if blackboard_get(tick, "melee_damage"):
blackboard_set(tick, "melee_damage", false)
match get_memory(tick).state:
0:
# guard
var anim
if blackboard_get(tick, "dot") < 0:
anim = get_memory(tick).anim1
else:
anim = get_memory(tick).anim2
characters.animation_node_travel(root, anim)
if blackboard_get(tick, "stamina") > 50.0:
blackboard_set(tick, "health", blackboard_get(tick, "health") - cost)
else:
blackboard_set(tick, "health", blackboard_get(tick, "health") - 5.0 * cost)
blackboard_set(tick, "stamina", 5.0)
get_memory(tick).state = 1
return ERR_BUSY
1:
get_memory(tick).state = 2
return ERR_BUSY
2:
blackboard_set(tick, "guard_cooldown", 1.5)
return OK
func stop(tick):
get_memory(tick).state = 0
class walkto extends AIScriptModule:
func init(tick):
get_memory(tick).state = 0
get_memory(tick).pdist = INF
get_memory(tick).root = get_character(tick)
get_memory(tick).timeout = get_memory(tick).config_timeout
func look_at(root, where):
var current = root.global_transform
var at = where
at.y = current.origin.y
root.global_transform = current.looking_at(at, Vector3.UP)
root.set_meta("orientation", Transform(root.global_transform.basis, Vector3()))
func update_physics(tick, delta):
var root = get_memory(tick).root
assert(root)
var flee = get_memory(tick).flee
var where: Vector3
var adest = blackboard_get(tick, "enemy_pos")
var away = (root.global_transform.origin - adest).normalized()
var fdest = root.global_transform.origin + away * 4.0
if !flee:
where = adest
else:
where = fdest
var gpos = root.global_transform.origin
var dst = gpos.distance_squared_to(where)
var finished = false
var pdist = get_memory(tick).pdist
var speed = get_memory(tick).speed
var cost = get_memory(tick).cost
var gap = get_memory(tick).gap
# get_memory(tick).timeout -= delta
match get_memory(tick).state:
0:
look_at(root, where)
characters.animation_node_travel(root, "locomotion")
characters.set_walk_speed(root, speed, 0)
get_memory(tick).state = 1
1:
blackboard_set(tick, "stamina", blackboard_get(tick, "stamina") - cost * delta)
get_memory(tick).state = 2
2:
if dst < gap * gap:
get_memory(tick).state = 10
elif get_memory(tick).timeout < 0.0:
root.global_transform.origin = where
get_memory(tick).state = 20
# elif dst > pdist && dst > gap * gap:
# root.global_transform.origin = where
# get_memory(tick).state = 30
# printerr("missed the target: ", sqrt(dst), gap)
# elif dst < 3.0 * gap * gap && get_memory(tick).timeout > 0.0:
# characters.set_walk_speed(root, speed, 0)
# get_memory(tick).state = 3
else:
get_memory(tick).state = 0
10:
finished = true
20:
finished = true
30:
finished = true
# 200:
# get_memory(tick).timeout -= delta
# if get_memory(tick).timeout < 0.0:
# root.global_transform.origin = where
# characters.set_walk_speed(root, 0, 0)
# finished = true
# state = 300
# 300:
# printerr("should not be here: ", sqrt(dst), gap)
# breakpoint
get_memory(tick).pdist = dst
if !finished:
return ERR_BUSY
else:
return OK
func stop(tick):
var root = get_memory(tick).root
characters.set_walk_speed(root, 0, 0)
get_memory(tick).state = 0
get_memory(tick).timeout = get_memory(tick).config_timeout
class attack extends AIScriptModule:
func init(tick):
get_memory(tick).root = get_character(tick)
get_memory(tick).state = 0
func look_at(tick, root):
var current = root.global_transform
var at = blackboard_get(tick, "enemy_pos")
at.y = current.origin.y
root.global_transform = current.looking_at(at, Vector3.UP)
root.set_meta("orientation", Transform(root.global_transform.basis, Vector3()))
func update_physics(tick, delta):
var root = get_memory(tick).root
var event = get_memory(tick).event
var anim = get_memory(tick).anim
var finished = false
assert(root)
if blackboard_get(tick, "attack_cooldown") > 0.0:
blackboard_set(tick, "attack_cooldown", blackboard_get(tick, "attack_cooldown") - delta)
return FAILED
match get_memory(tick).state:
0:
combat.emit_signal("event", get_memory(tick).event, [root])
look_at(tick, root)
get_memory(tick).state = 1
1:
blackboard_set(tick, "stamina", blackboard_get(tick, "stamina") - 0.5 * delta)
blackboard_set(tick, "stamina", blackboard_get(tick, "stamina") - 3500 * delta)
characters.animation_node_travel(root, anim)
get_memory(tick).state = 2
2:
blackboard_set(tick, "stamina", blackboard_get(tick, "stamina") - 5 * delta)
blackboard_set(tick, "attack_cooldown", 1.8)
finished = true
if finished:
return OK
else:
return ERR_BUSY
func stop(tick):
get_memory(tick).state = 0
func init(tick):
assert(tick)
assert(!get_memory(tick).has("initialized"))
get_memory(tick).name = "bandit_ai"
var considerations_data = {
"take_melee_weapon": {
"considerations": [
{"c": health_consideration.new(), "score": 1.0},
{"c": no_melee_weapon_equipped_consideration.new(), "score": 1.0},
{"c": threat_consideration.new(), "score": 1.0}
],
"score": 180.0,
"conf": {"weapon": "s_dagger"},
},
"approach_far": {
"considerations": [
{"c": health_consideration.new(), "score": 1.0},
{"c": enemy_very_far_consideration.new(), "score": 1.0},
{"c": has_melee_weapon_equipped_consideration.new(), "score": 1.0},
{"c": half_or_more_stamina_consideration.new(), "score": 1.0},
{"c": threat_consideration.new(), "score": 1.0}
],
"score": 120.0,
"conf": {"gap": 0.6, "config_timeout": 3.0, "speed": 4.0, "cost": 6.0, "flee": false},
},
"approach_near": {
"considerations": [
{"c": health_consideration.new(), "score": 1.0},
{"c": enemy_far_consideration.new(), "score": 1.0},
{"c": has_melee_weapon_equipped_consideration.new(), "score": 1.0},
{"c": half_or_more_stamina_consideration.new(), "score": 1.0},
{"c": threat_consideration.new(), "score": 1.0}
],
"score": 150.0,
"conf": {"gap": 0.6, "config_timeout": 1.5, "speed": 2.0, "cost": 6.0, "flee": false},
},
"melee_attack": {
"considerations": [
{"c": health_consideration.new(), "score": 1.0},
{"c": has_melee_weapon_equipped_consideration.new(), "score": 1.0},
{"c": melee_attack_ready_consideration.new(), "score": 1.0},
{"c": twenty_or_more_stamina_consideration.new(), "score": 1.0},
{"c": melee_attack_distance_consideration.new(), "score": 1.0}
],
"score": 50.0,
"conf": {"anim": "attack-melee1", "event": "about_to_attack"},
},
"flee": {
"considerations": [
{"c": health_consideration.new(), "score": 1.0},
{"c": ready_to_flee_consideration.new(), "score": 1.0},
{"c": has_energy_consideration.new(), "score": 1.0},
{"c": dangerous_distance_consideration.new(), "score": 1.0},
],
"score": 300.0,
"conf": {"gap": 0.6, "config_timeout": 1.5, "speed": 20.0, "cost": 6.0, "flee": true},
},
"guard": {
"considerations": [
{"c": health_consideration.new(), "score": 1.0},
{"c": ready_to_guard_consideration.new(), "score": 1.0},
{"c": guarding_consideration.new(), "score": 1.0},
],
"score": 900.0,
"conf": {"anim1": "guard-melee1", "anim2": "guard-front-melee1"},
},
"unconcious": {
"considerations": [
{"c": critical_health_consideration.new(), "score": 1.0}
],
"score": 2000.0,
"conf": {"anim1": "fall-front", "anim2": "fall-back"},
},
"rest": {
"considerations": [
{"c": critical_stamina_consideration.new(), "score": 1.0},
{"c": flee_or_more_distance_consideration.new(), "score": 1.0}
],
"score": 150.0,
"conf": {},
},
"get_melee_damage": {
"considerations": [
{"c": health_consideration.new(), "score": 1.0},
{"c": melee_damage_consideration.new(), "score": 1.0},
],
"score": 3000.0,
"conf": {"anim1": "guard-melee1", "anim2": "guard-front-melee1", "cost": 10.0},
},
"idle": {
"considerations": [
],
"score": 1.0,
"conf": {},
}
}
var root = get_character(tick)
for e in init_blackboard.keys():
if !blackboard_is_set(tick, e):
blackboard_set(tick, e, init_blackboard[e])
blackboard_set(tick, "self", root)
func init():
name = "bandit_ai"
root = get_character()
assert(root.has_meta("skeleton"))
get_memory(tick).rnd = RandomNumberGenerator.new()
get_memory(tick).rnd.randomize()
root.add_to_group("bandits")
root.add_to_group("bandit")
root.add_to_group("students")
root.add_to_group("student")
var character_data = root.get_meta("character_data")
if character_data.sex == "female":
var g = garments_female_lingerie
@@ -454,206 +46,93 @@ func init(tick):
g += garments_male_main
h += garments_head_male
characters.call_deferred("setup_garments", root, g, h, material_male)
var ai_runner: AIUtilityRunner = AIUtilityRunner.new()
get_memory(tick).runner = ai_runner
_register_module(tick, get_memory(tick).runner)
combat.connect("event", self, "combat_event", [blackboard_get_dict(tick)])
if !get_memory(tick).has("run_behaviors"):
get_memory(tick).run_behaviors = {}
for e in conf_behaviors.keys():
if !get_memory(tick).run_behaviors.has(e):
get_memory(tick).run_behaviors[e] = conf_behaviors[e].new()
_register_module(tick, get_memory(tick).run_behaviors[e])
var conf = considerations_data[e].conf
get_memory(tick).run_behaviors[e].setup(tick, conf)
ai_runner.add_choice(tick, e, considerations_data[e].score, get_memory(tick).run_behaviors[e])
for c in considerations_data[e].considerations:
ai_runner.add_consideration(tick, e, c.c, c.score)
get_memory(tick).initialized = true
state = 0
var cooldown = 0.0
var conf_behaviors: = {
"take_melee_weapon": take_weapon,
"approach_far": walkto,
"approach_near": walkto,
"flee": walkto,
"melee_attack": attack,
"guard": guard,
"rest": rest,
"idle": idle,
"get_melee_damage": get_damage,
"unconcious": unconcious
}
class health_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "health") <= 0.0:
return 0.0
var ret = blackboard_get(tick, "health") / 100.0
ret = clamp(ret, 0.0, 1.0)
return ret * ret
class no_melee_weapon_equipped_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if !blackboard_get(tick, "melee_weapon_equipped"):
return 1.0
return 0.0
class threat_consideration extends AIUtilityScriptedConsideration:
const engage_distance = 20.0
func evalute(tick, delta):
if blackboard_get(tick, "enemy_distance") < engage_distance * engage_distance:
return 1.0
return 0.0
class safe_consideration extends AIUtilityScriptedConsideration:
const engage_distance = 20.0
func evalute(tick, delta):
if blackboard_get(tick, "enemy_distance") >= engage_distance * engage_distance:
return 1.0
return 0.0
class enemy_far_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "enemy_distance") < 1.6 * 1.6:
return 0.0
return 1.0
class enemy_very_far_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "enemy_distance") > 5.0 * 5.0:
return 1.0
return 0.0
class half_or_more_stamina_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "stamina") > 50.0:
return 1.0
return 0.0
class has_melee_weapon_equipped_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "melee_weapon_equipped"):
return 1.0
return 0.0
class melee_attack_ready_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "attack_cooldown") <= 0.0:
return 1.0
return 0.0
class twenty_or_more_stamina_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "stamina") > 20.0:
return 1.0
return 0.0
class melee_attack_distance_consideration extends AIUtilityScriptedConsideration:
const attack_distance = 2.0
func evalute(tick, delta):
if blackboard_get(tick, "enemy_distance") < attack_distance * attack_distance:
return 1.0
return 0.0
class need_healing_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "health") >= 100.0:
return 0.0
var ret = 1.0 - blackboard_get(tick, "health") / 100.0
return clamp(ret, 0.0, 1.0)
class need_rest_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "stamina") >= 80.0:
return 0.0
var e = blackboard_get(tick, "stamina") / 100.0
e = clamp(e, 0.0, 1.0)
var d = (1.0 / (e + 1.0) - 0.5) * 0.5
return clamp(d, 0.0, 1.0)
class critical_health_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "health") < 10.0:
return 1.0
return 0.0
class critical_stamina_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "stamina") < 10.0:
return 1.0
return 0.0
class flee_or_more_distance_consideration extends AIUtilityScriptedConsideration:
const flee_distance = 5.0
func evalute(tick, delta):
if blackboard_get(tick, "enemy_distance") >= flee_distance * flee_distance:
return 1.0
return 0.0
class dangerous_distance_consideration extends AIUtilityScriptedConsideration:
const flee_distance = 5.0
func evalute(tick, delta):
if blackboard_get(tick, "enemy_distance") < flee_distance * flee_distance:
return 1.0
return 0.0
class ready_to_flee_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "flee_cooldown") < 0.0:
return 1.0
return 0.0
class has_energy_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "stamina") >= 10.0:
return 1.0
return 0.0
class ready_to_guard_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "guard_cooldown") < 0.0:
return 1.0
return 0.0
class guarding_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "guard"):
return 1.0
return 0.0
class melee_damage_consideration extends AIUtilityScriptedConsideration:
func evalute(tick, delta):
if blackboard_get(tick, "melee_damage"):
return 1.0
return 0.0
func update_physics(tick, delta):
assert(get_memory(tick).initialized)
var root = get_character(tick)
assert(root)
func update_physics(delta):
var cam = root.get_viewport().get_camera()
if !cam:
return FAILED
return
if !cam.has_meta("player"):
return FAILED
blackboard_set(tick, "self", get_character(tick))
return
var space: PhysicsDirectSpaceState = root.get_world().get_direct_space_state()
var o = root.global_transform.origin
var p = cam.get_meta("player").global_transform
var pdst = o.distance_squared_to(p.origin)
blackboard_set(tick, "enemy_distance", pdst)
blackboard_set(tick, "randf", get_memory(tick).rnd.randf())
blackboard_set(tick, "enemy_pos", p.origin)
blackboard_set(tick, "space", space)
var adest = p.origin
var away = (o - p.origin).normalized()
var attack_xform = Transform(root.global_transform.basis, o + away * 1.5)
var adest = o + (p.origin - o).normalized() * 3.0
var fdest = o + (o - p.origin).normalized() * 3.0
var cmdq = []
if root.has_meta("cmdqueue"):
cmdq = root.get_meta("cmdqueue")
match state:
0:
if stamina < 100.0:
stamina += delta
if stamina > 50.0 && pdst < 100.0 && pdst > 8.0:
var skel = root.get_meta("skeleton")
var wslot = skel.get_node("wrist_r/weapon_right")
wslot.set_meta("owner", root)
inventory.equip(wslot, "s_dagger")
# walk to enemy
state = 10
elif stamina > 50.0 && pdst <= 8.0:
# melee attack enemy
state = 20
elif stamina <= 50.0 && stamina > 10.0 && pdst < 50.0:
# flee away
state = 30
elif stamina <= 10.0 && pdst <= 16.0:
# still flee away
state = 30
elif stamina <= 10.0 && pdst > 16.0:
# rest
state = 40
10:
# walk to enemy (player)
stamina -= 4 * delta
var dest = adest
cmdq.push_back(["walkto", dest, 1.5, 2])
state = 11
11:
# wait for start walking
if root.has_meta("cmdq_walk"):
characters.set_walk_speed(root, 0.5, 0)
state = 12
12:
# finished walking
stamina -= 4 * delta
if !root.has_meta("cmdq_walk"):
state = 0
20:
# attack
stamina -= 3500 * delta
characters.animation_node_travel(root, "attack-melee1")
cooldown = 0.8
state = 21
21:
cooldown -= delta
stamina -= 5 * delta
if cooldown <= 0.0:
state = 0
30:
# walk away from enemy (player)
stamina -= 15 * delta
var dest = fdest
cmdq.push_back(["walkto", dest, 1.5, 2])
state = 31
31:
# wait for start fleeing
if root.has_meta("cmdq_walk"):
characters.set_walk_speed(root, 0.65, 0)
state = 32
32:
# finished fleeing
stamina -= 15 * delta
if !root.has_meta("cmdq_walk"):
state = 0
40:
stamina += 15500.0 * delta
if stamina > 90.0:
state = 0
stamina = clamp(stamina, 0, 100.0)
root.set_meta("cmdqueue", cmdq)
var fdest = o + away * 4.0
blackboard_set(tick, "away_pos", fdest)
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_set(tick, "dot", dot)
var result = get_memory(tick).runner._update_physics(tick, delta)
if blackboard_get(tick, "stamina") < 100.0:
blackboard_set(tick, "stamina", blackboard_get(tick, "stamina") + delta)
if blackboard_get(tick, "attack_cooldown") > 0.0:
blackboard_set(tick, "attack_cooldown", blackboard_get(tick, "attack_cooldown") - delta)
if blackboard_get(tick, "guard_cooldown") > 0.0:
blackboard_set(tick, "guard_cooldown", blackboard_get(tick, "guard_cooldown") - delta)
if blackboard_get(tick, "flee_cooldown") > 0.0:
blackboard_set(tick, "flee_cooldown", blackboard_get(tick, "flee_cooldown") - delta)
blackboard_set(tick, "stamina", clamp(blackboard_get(tick, "stamina"), 0, 100.0))
blackboard_set(tick, "health", clamp(blackboard_get(tick, "health"), 0, 100.0))
return ERR_BUSY
func update(tick, delta):
return ERR_BUSY
func stop(tick):
for e in conf_behaviors.keys():
if get_memory(tick).run_behaviors.has(e):
_unregister_module(tick, get_memory(tick).run_behaviors[e])
_unregister_module(tick, get_memory(tick).runner)

View File

@@ -6,8 +6,8 @@ extends AIScriptModule
# Called when the node enters the scene tree for the first time.
func init(tick):
var root = get_character(tick)
func init():
var root = get_character()
assert(root.has_meta("skeleton"))
var cmdq = []
if root.has_meta("cmdqueue"):
@@ -37,8 +37,3 @@ func action(data):
# if data.action == "hips_action":
# print(data)
# marker_hips_action(data)
func update(tick, delta):
return ERR_BUSY
func update_physics(tick, delta):
return ERR_BUSY

View File

@@ -24,8 +24,8 @@ var material = preload("res://scenes/clothes/mystress_clothes.material")
# ACTION
#}
#var state = PRAYING
func init(tick):
root = get_character(tick)
func init():
root = get_character()
assert(root.has_meta("skeleton"))
root.add_to_group("mystress")
# tween = Tween.new()
@@ -74,7 +74,7 @@ func get_dest(pt: Vector3, exclusions: Array) -> Vector3:
if !r.empty():
ret = r.position - offt
return ret
func update_physics(tick, delta):
func update_physics(delta):
var cmdq = []
if !skel:
skel = root.get_meta("skeleton")
@@ -151,7 +151,6 @@ func update_physics(tick, delta):
state = 0
root.set_meta("cmdqueue", cmdq)
oldx = p.origin
return ERR_BUSY
# print("state =", state)
# var px = p.origin
# px.y = root.global_transform.origin.y
@@ -226,5 +225,3 @@ func update_physics(tick, 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(tick, delta):
return ERR_BUSY

View File

@@ -22,9 +22,9 @@ 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(tick):
func init():
name = "student_ai"
root = get_character(tick)
root = get_character()
assert(root.has_meta("skeleton"))
root.add_to_group("students")
root.add_to_group("student")
@@ -42,8 +42,3 @@ func init(tick):
g += garments_male_main
h += garments_head_male
characters.call_deferred("setup_garments", root, g, h, material_male)
func update(tick, delta):
return ERR_BUSY
func update_physics(tick, delta):
return ERR_BUSY

View File

@@ -15,8 +15,8 @@ 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(tick):
root = get_character(tick)
func init():
root = get_character()
assert(root.has_meta("skeleton"))
call_deferred("setup_markers")
@@ -81,8 +81,3 @@ 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(tick, delta):
return ERR_BUSY
func update(tick, delta):
return ERR_BUSY

View File

@@ -10,30 +10,20 @@ extends AIScriptModule
var cam
var fps_cam
var motion = Vector2()
func init(tick):
var root = get_character(tick)
func init():
var root = get_character()
assert(root.has_meta("skeleton"))
var attack = false
var jump = false
var equipped = false
var vjump = Vector3()
func update(tick, delta):
return ERR_BUSY
func update_physics(tick, delta):
if !controls.is_gui:
if !attack:
if Input.is_action_just_pressed("attack"):
func update(delta):
if Input.is_action_pressed("attack"):
attack = true
if !jump:
if Input.is_action_just_pressed("jump"):
jump = true
vjump = Vector3.UP * 10.0
func update_physics(delta):
var orientation: Transform
var root = get_character(tick)
var root = get_character()
if !root.has_meta("cam"):
return
cam = root.get_meta("cam")
@@ -86,11 +76,6 @@ func update_physics(tick, delta):
cmdq = root.get_meta("cmdqueue")
cmdq.push_back(["climb", "1"])
root.set_meta("cmdqueue", cmdq)
if jump:
root.move_and_slide(vjump, Vector3(0.0, 1.0, 0.0), true, 4, 0.785, false)
vjump *= (1.0 - delta)
if vjump.length_squared() <= 0.0:
jump = false
if attack:
if !equipped:
@@ -99,7 +84,6 @@ func update_physics(tick, delta):
wslot.set_meta("owner", root)
inventory.equip(wslot, "s_dagger")
equipped = true
combat.emit_signal("event", "about_to_attack", [root])
animtree["parameters/state/playback"].travel("attack-melee1")
attack = false
else:
@@ -137,5 +121,4 @@ func update_physics(tick, delta):
vehicle.engine_force = 500 * xmotion.y
var accel = vehicle.angular_velocity * 350.0 * delta
vehicle.steering = -xmotion.x * 0.7
return ERR_BUSY

View File

@@ -1,32 +0,0 @@
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)

View File

@@ -1,60 +0,0 @@
[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"

View File

@@ -1,97 +0,0 @@
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()

View File

@@ -1,66 +0,0 @@
[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"

View File

@@ -1,6 +0,0 @@
[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 )

View File

@@ -1,25 +0,0 @@
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)

View File

@@ -1,45 +0,0 @@
[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"

View File

@@ -124,7 +124,7 @@ func _process(delta):
var fps_cam_rot_y
var fps_cam_rot_x
var default_offset
player = characters.replace_player_character($player, "male", ["player", "cmdq", "player_clothes", "hurtboxes"])
player = characters.replace_character($player, "male", ["player", "cmdq", "player_clothes", "hurtboxes"])
$player.remove_child(viewer)
player.add_child(viewer)
# player.add_child(VoxelViewer.new())