Update
This commit is contained in:
@@ -1,16 +1,5 @@
|
|||||||
extends Characters_
|
extends Characters_
|
||||||
|
|
||||||
|
|
||||||
# Declare member variables here. Examples:
|
|
||||||
# var a = 2
|
|
||||||
# var b = "text"
|
|
||||||
|
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
||||||
#func _process(delta):
|
|
||||||
|
|
||||||
onready var female = preload("res://characters/vroid1-female.tscn")
|
onready var female = preload("res://characters/vroid1-female.tscn")
|
||||||
onready var male = preload("res://characters/vroid1-man.tscn")
|
onready var male = preload("res://characters/vroid1-man.tscn")
|
||||||
onready var face_ctrl = preload("res://scenes/face/head_comtrol.tscn")
|
onready var face_ctrl = preload("res://scenes/face/head_comtrol.tscn")
|
||||||
@@ -20,10 +9,12 @@ onready var modules = {
|
|||||||
"marker": preload("res://scripts/modules/npc_marker.gd"),
|
"marker": preload("res://scripts/modules/npc_marker.gd"),
|
||||||
"sacrifice": preload("res://scripts/modules/npc_sacrifice.gd"),
|
"sacrifice": preload("res://scripts/modules/npc_sacrifice.gd"),
|
||||||
"nun": preload("res://scripts/modules/npc_nun.gd"),
|
"nun": preload("res://scripts/modules/npc_nun.gd"),
|
||||||
|
"mystress": preload("res://scripts/modules/npc_mystress.gd"),
|
||||||
"player": preload("res://scripts/modules/player_controls.gd"),
|
"player": preload("res://scripts/modules/player_controls.gd"),
|
||||||
"player_clothes": preload("res://scripts/modules/player_clothes.gd"),
|
"player_clothes": preload("res://scripts/modules/player_clothes.gd"),
|
||||||
"hurtboxes": preload("res://scripts/modules/character_hurtboxes.gd"),
|
"hurtboxes": preload("res://scripts/modules/character_hurtboxes.gd"),
|
||||||
"student": preload("res://scripts/modules/npc_student.gd")
|
"student": preload("res://scripts/modules/npc_student.gd"),
|
||||||
|
"bandit": preload("res://scripts/modules/npc_bandit.gd")
|
||||||
}
|
}
|
||||||
|
|
||||||
var face_data_path = "res://scenes/face/"
|
var face_data_path = "res://scenes/face/"
|
||||||
@@ -47,6 +38,21 @@ var roommates = {}
|
|||||||
#var _crowd: DetourCrowdManager
|
#var _crowd: DetourCrowdManager
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
var capsule_male = CapsuleShape.new()
|
||||||
|
capsule_male.radius = 0.3
|
||||||
|
capsule_male.height = 1.2
|
||||||
|
capsule_male.margin = 0.05
|
||||||
|
var capsule_female = CapsuleShape.new()
|
||||||
|
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.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())
|
set_root_motion_mod(Transform())
|
||||||
var fd = File.new()
|
var fd = File.new()
|
||||||
fd.open("res://data/names.json", File.READ)
|
fd.open("res://data/names.json", File.READ)
|
||||||
@@ -62,10 +68,12 @@ func _ready():
|
|||||||
"female":
|
"female":
|
||||||
female_faces.push_back(fp)
|
female_faces.push_back(fp)
|
||||||
mesh_female_faces[fp] = load(fp)
|
mesh_female_faces[fp] = load(fp)
|
||||||
|
CharacterSystemWorld.add_face_scene(mesh_female_faces[fp], "female")
|
||||||
|
|
||||||
"male":
|
"male":
|
||||||
male_faces.push_back(fp)
|
male_faces.push_back(fp)
|
||||||
mesh_male_faces[fp] = load(fp)
|
mesh_male_faces[fp] = load(fp)
|
||||||
|
CharacterSystemWorld.add_face_scene(mesh_male_faces[fp], "male")
|
||||||
for id in range(10000):
|
for id in range(10000):
|
||||||
var fp_m = face_data_path + "male-face" + str(id) + ".tscn"
|
var fp_m = face_data_path + "male-face" + str(id) + ".tscn"
|
||||||
var fp_f = face_data_path + "female-face" + str(id) + ".tscn"
|
var fp_f = face_data_path + "female-face" + str(id) + ".tscn"
|
||||||
@@ -75,18 +83,24 @@ func _ready():
|
|||||||
if data_fd.file_exists(fp_m):
|
if data_fd.file_exists(fp_m):
|
||||||
male_faces.push_back(fp_m)
|
male_faces.push_back(fp_m)
|
||||||
mesh_male_faces[fp_m] = load(fp_m)
|
mesh_male_faces[fp_m] = load(fp_m)
|
||||||
|
CharacterSystemWorld.add_face_scene(mesh_male_faces[fp_m], "male")
|
||||||
if data_fd.file_exists(fp_f):
|
if data_fd.file_exists(fp_f):
|
||||||
female_faces.push_back(fp_f)
|
female_faces.push_back(fp_f)
|
||||||
mesh_female_faces[fp_f] = load(fp_f)
|
mesh_female_faces[fp_f] = load(fp_f)
|
||||||
|
CharacterSystemWorld.add_face_scene(mesh_female_faces[fp_f], "female")
|
||||||
if data_fd.file_exists(hp_m):
|
if data_fd.file_exists(hp_m):
|
||||||
male_hairs.push_back(hp_m)
|
male_hairs.push_back(hp_m)
|
||||||
mesh_male_hairs[hp_m] = load(hp_m)
|
mesh_male_hairs[hp_m] = load(hp_m)
|
||||||
|
CharacterSystemWorld.add_hair_scene(mesh_male_hairs[hp_m], "male")
|
||||||
if data_fd.file_exists(hp_f):
|
if data_fd.file_exists(hp_f):
|
||||||
female_hairs.push_back(hp_f)
|
female_hairs.push_back(hp_f)
|
||||||
mesh_female_hairs[hp_f] = load(hp_f)
|
mesh_female_hairs[hp_f] = load(hp_f)
|
||||||
|
CharacterSystemWorld.add_hair_scene(mesh_female_hairs[hp_f], "female")
|
||||||
if data_fd.file_exists(mat):
|
if data_fd.file_exists(mat):
|
||||||
hair_materials.push_back(mat)
|
hair_materials.push_back(mat)
|
||||||
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], "female")
|
||||||
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)
|
||||||
@@ -146,6 +160,7 @@ func get_hair_node(sc: Node) -> Node:
|
|||||||
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 body = KinematicBody.new()
|
var body = KinematicBody.new()
|
||||||
var cshape = CollisionShape.new()
|
var cshape = CollisionShape.new()
|
||||||
body.add_child(cshape)
|
body.add_child(cshape)
|
||||||
@@ -245,7 +260,8 @@ func replace_character(obj, g, enable_modules = [], face = -1, hair = -1, hair_m
|
|||||||
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()
|
||||||
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)
|
||||||
p.add_child(body)
|
p.add_child(body)
|
||||||
body.global_transform = xform
|
body.global_transform = xform
|
||||||
var orientation = Transform()
|
var orientation = Transform()
|
||||||
@@ -253,15 +269,15 @@ func replace_character(obj, g, enable_modules = [], face = -1, hair = -1, hair_m
|
|||||||
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):
|
||||||
var queue = [obj]
|
# var queue = [obj]
|
||||||
while queue.size() > 0:
|
# while queue.size() > 0:
|
||||||
var item = queue.pop_front()
|
# var item = queue.pop_front()
|
||||||
if item is Skeleton:
|
# if item is Skeleton:
|
||||||
item.add_to_group(g)
|
# item.add_to_group(g)
|
||||||
break
|
# break
|
||||||
for g in item.get_children():
|
# for g in item.get_children():
|
||||||
queue.push_back(g)
|
# queue.push_back(g)
|
||||||
func set_hair_material(hair, mat: Material):
|
func set_hair_material(hair, mat: Material):
|
||||||
assert(mat)
|
assert(mat)
|
||||||
var queue = [hair]
|
var queue = [hair]
|
||||||
@@ -274,7 +290,9 @@ func set_hair_material(hair, mat: Material):
|
|||||||
queue.push_back(g)
|
queue.push_back(g)
|
||||||
func setup_garments(obj, garments, garments_head, material):
|
func setup_garments(obj, garments, garments_head, material):
|
||||||
var skel = obj.get_meta("skeleton")
|
var skel = obj.get_meta("skeleton")
|
||||||
|
assert(skel)
|
||||||
var hair_skel = obj.get_meta("hair_skeleton")
|
var hair_skel = obj.get_meta("hair_skeleton")
|
||||||
|
assert(hair_skel)
|
||||||
|
|
||||||
if obj.has_meta("garments"):
|
if obj.has_meta("garments"):
|
||||||
print("Can remove garments")
|
print("Can remove garments")
|
||||||
@@ -611,7 +629,5 @@ func _physics_process(delta):
|
|||||||
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:
|
||||||
character_physics(player)
|
character_physics(player)
|
||||||
# for e in get_tree().get_nodes_in_group("character") + [player]:
|
|
||||||
# if e && e.has_meta("animation_tree"):
|
|
||||||
# character_physics(e)
|
|
||||||
|
|||||||
@@ -20,9 +20,9 @@ func _ready():
|
|||||||
focus_cam = Camera.new()
|
focus_cam = Camera.new()
|
||||||
add_child(focus_cam)
|
add_child(focus_cam)
|
||||||
focus_cam.set_as_toplevel(true)
|
focus_cam.set_as_toplevel(true)
|
||||||
# var escape_menu = preload("res://ui/save_game.tscn")
|
var escape_menu = preload("res://ui/save_game.tscn")
|
||||||
# menu = escape_menu.instance()
|
menu = escape_menu.instance()
|
||||||
# add_child(menu)
|
add_child(menu)
|
||||||
|
|
||||||
func is_fps_mode():
|
func is_fps_mode():
|
||||||
return fps_mode || tmp_fps_mode
|
return fps_mode || tmp_fps_mode
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ func freeze_all() -> bool:
|
|||||||
assert(ok)
|
assert(ok)
|
||||||
return ok
|
return ok
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
|
return
|
||||||
var cam = get_viewport().get_camera()
|
var cam = get_viewport().get_camera()
|
||||||
var player = get_player()
|
var player = get_player()
|
||||||
if !player:
|
if !player:
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ func equip(obj, item_name):
|
|||||||
return
|
return
|
||||||
print("EQUIP ", item_name)
|
print("EQUIP ", item_name)
|
||||||
assert(obj)
|
assert(obj)
|
||||||
|
assert(obj.has_meta("owner"))
|
||||||
assert(item_scenes.has(item_name))
|
assert(item_scenes.has(item_name))
|
||||||
var r = item_scenes[item_name].instance()
|
var r = item_scenes[item_name].instance()
|
||||||
var c = item_collision_scenes[item_name].instance()
|
var c = item_collision_scenes[item_name].instance()
|
||||||
@@ -38,6 +39,7 @@ func equip(obj, item_name):
|
|||||||
c.transform = Transform()
|
c.transform = Transform()
|
||||||
print("EQUIP ", item_name, " OK", obj, r)
|
print("EQUIP ", item_name, " OK", obj, r)
|
||||||
obj.set_meta("equipped", item_name)
|
obj.set_meta("equipped", item_name)
|
||||||
|
c.set_meta("owner", obj.get_meta("owner"))
|
||||||
func register_pick_up(m, obj, item_name):
|
func register_pick_up(m, obj, item_name):
|
||||||
var mdata = {
|
var mdata = {
|
||||||
"method": "pick_up",
|
"method": "pick_up",
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
tool
|
|
||||||
extends Node
|
|
||||||
export var noise: OpenSimplexNoise
|
|
||||||
export var curve: Curve
|
|
||||||
#
|
|
||||||
#var points = []
|
|
||||||
##var rg: RoadGrid
|
|
||||||
#var setup = false
|
|
||||||
#
|
|
||||||
#func _ready():
|
|
||||||
# if curve:
|
|
||||||
# curve.bake()
|
|
||||||
# else:
|
|
||||||
# curve = Curve.new()
|
|
||||||
# curve.min_value = -300
|
|
||||||
# curve.max_value = 300
|
|
||||||
# curve.add_point(Vector2(0, -300))
|
|
||||||
# curve.add_point(Vector2(1, 300))
|
|
||||||
# curve.bake()
|
|
||||||
# rg.build(curve, noise)
|
|
||||||
# setup = true
|
|
||||||
#
|
|
||||||
#func _init():
|
|
||||||
# rg = Roads.get_road_grid()
|
|
||||||
|
|
||||||
# var center = Vector2(0, 0)
|
|
||||||
# points.push_back(center)
|
|
||||||
# randomize()
|
|
||||||
# var npatches = 8
|
|
||||||
# var sa = randf() * 2.0 * PI
|
|
||||||
# var center_count = 15 + randi() % 5
|
|
||||||
# var center_step = 500
|
|
||||||
# var centers = []
|
|
||||||
# while centers.size() < center_count:
|
|
||||||
# var center_x = clamp(center_step * ((randi() % 100) - 50), -10000, 10000)
|
|
||||||
# var center_y = clamp(center_step * ((randi() % 100) - 50), -10000, 10000)
|
|
||||||
# var c = Vector2(center_x, center_y)
|
|
||||||
# if !c in centers:
|
|
||||||
# centers.push_back(c)
|
|
||||||
# for cx in centers:
|
|
||||||
# for e in range(npatches * 8):
|
|
||||||
# var a = sa + sqrt(e) * 8.0
|
|
||||||
# var r = 0 if e == 0 else 100 + e * 100.0 + 50 * randf()
|
|
||||||
# var x = cos(a) * r + cx.x
|
|
||||||
# var y = sin(a) * r + cx.y
|
|
||||||
# var d = Vector2(x, y)
|
|
||||||
# points.push_back(d)
|
|
||||||
# print("voronoi start")
|
|
||||||
# var diagram = Voronoi.generate_diagram(points, 11)
|
|
||||||
# print("voronoi end, processing")
|
|
||||||
# rg.process_diagram(diagram)
|
|
||||||
# print("processing done")
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
[gd_scene load_steps=4 format=2]
|
|
||||||
|
|
||||||
[ext_resource path="res://autoload/map.gd" type="Script" id=1]
|
|
||||||
|
|
||||||
[sub_resource type="OpenSimplexNoise" id=2]
|
|
||||||
|
|
||||||
[sub_resource type="Curve" id=1]
|
|
||||||
min_value = -300.0
|
|
||||||
max_value = 300.0
|
|
||||||
bake_resolution = 200
|
|
||||||
_data = [ Vector2( 0, -259.615 ), 0.0, 0.0, 0, 0, Vector2( 0.975, 300 ), 0.0, 0.0, 0, 0 ]
|
|
||||||
|
|
||||||
[node name="Map" type="Node"]
|
|
||||||
script = ExtResource( 1 )
|
|
||||||
noise = SubResource( 2 )
|
|
||||||
curve = SubResource( 1 )
|
|
||||||
196
autoload/orchestration.gd
Normal file
196
autoload/orchestration.gd
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
extends Node
|
||||||
|
export var grab_ik_curve: Curve
|
||||||
|
export var grab_ik_curve_multiplier: float = 0.14
|
||||||
|
export var cinematic_cam: PackedScene
|
||||||
|
|
||||||
|
# Declare member variables here. Examples:
|
||||||
|
# var a = 2
|
||||||
|
# var b = "text"
|
||||||
|
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
var cinematic_camera
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
var active_states = []
|
||||||
|
var locked_actors = {}
|
||||||
|
|
||||||
|
class Grabbing:
|
||||||
|
signal enable_cinematic_camera(where, look)
|
||||||
|
signal update_cinematic_camera(where, look)
|
||||||
|
signal disable_cinematic_camera
|
||||||
|
signal end_stage
|
||||||
|
var actor_master: KinematicBody
|
||||||
|
var actor_slave: KinematicBody
|
||||||
|
var slave_space: RID
|
||||||
|
var master_space: RID
|
||||||
|
var finished = false
|
||||||
|
var follow_node
|
||||||
|
var follow_node_full
|
||||||
|
var state = 0
|
||||||
|
var ik: SkeletonIK
|
||||||
|
var ik_curve_pos = 0.0
|
||||||
|
var grab_ik_curve: Curve
|
||||||
|
var curve_delta_mul: float = 0.16
|
||||||
|
func start(act_master: KinematicBody, act_slave: KinematicBody, curve: Curve, delta_mul: float):
|
||||||
|
actor_master = act_master
|
||||||
|
actor_slave = act_slave
|
||||||
|
grab_ik_curve = curve
|
||||||
|
curve_delta_mul = delta_mul
|
||||||
|
var skel_master = actor_master.get_meta("skeleton")
|
||||||
|
assert(skel_master is Skeleton)
|
||||||
|
ik = SkeletonIK.new()
|
||||||
|
ik.root_bone = "J_Bip_R_UpperArm"
|
||||||
|
ik.tip_bone = "J_Bip_R_Hand"
|
||||||
|
skel_master.add_child(ik)
|
||||||
|
|
||||||
|
# actor_master.set_meta("orchestrated", true)
|
||||||
|
# actor_slave.set_meta("orchestrated", true)
|
||||||
|
# characters.animation_node_travel(actor_master, "grab")
|
||||||
|
# characters.animation_node_travel(actor_slave, "grabbed")
|
||||||
|
reset_character(actor_master)
|
||||||
|
reset_character(actor_slave)
|
||||||
|
var mx = actor_master.global_transform
|
||||||
|
var sx = actor_slave.global_transform
|
||||||
|
var m = mx.interpolate_with(sx, 0.5)
|
||||||
|
var cam_where = m.origin + actor_master.global_transform.basis[0] * 1.1
|
||||||
|
cam_where += Vector3.UP * 2.0
|
||||||
|
var cam_to = m.origin + Vector3.UP * 1.4
|
||||||
|
emit_signal("enable_cinematic_camera", cam_where, cam_to)
|
||||||
|
func reset_character(b):
|
||||||
|
b.remove_meta("cmdqueue")
|
||||||
|
b.remove_meta("cmdq_walk")
|
||||||
|
b.remove_meta("climb")
|
||||||
|
characters.animation_node_travel(b, "locomotion")
|
||||||
|
characters.set_walk_speed(b, 0.0, 0)
|
||||||
|
|
||||||
|
func update(delta):
|
||||||
|
var mx = actor_master.global_transform
|
||||||
|
var sx = actor_slave.global_transform
|
||||||
|
var m = mx.interpolate_with(sx, 0.5)
|
||||||
|
var cam_where = m.origin + actor_master.global_transform.basis[0] * 1.1
|
||||||
|
cam_where += Vector3.UP * 2.0
|
||||||
|
var cam_to = m.origin + Vector3.UP * 1.4
|
||||||
|
emit_signal("update_cinematic_camera", cam_where, cam_to)
|
||||||
|
func physics_update(delta):
|
||||||
|
var offt = actor_slave.global_transform.origin - actor_slave.global_transform.basis[2] * 0.45
|
||||||
|
match state:
|
||||||
|
0:
|
||||||
|
reset_character(actor_master)
|
||||||
|
reset_character(actor_slave)
|
||||||
|
actor_master.set_meta("orchestrated", true)
|
||||||
|
actor_slave.set_meta("orchestrated", true)
|
||||||
|
actor_master.add_collision_exception_with(actor_slave)
|
||||||
|
actor_slave.add_collision_exception_with(actor_master)
|
||||||
|
slave_space = PhysicsServer.body_get_space(actor_slave.get_rid())
|
||||||
|
PhysicsServer.body_set_space(actor_slave.get_rid(), RID())
|
||||||
|
master_space = PhysicsServer.body_get_space(actor_master.get_rid())
|
||||||
|
PhysicsServer.body_set_space(actor_master.get_rid(), RID())
|
||||||
|
state = 1
|
||||||
|
1:
|
||||||
|
# actor_slave.get_parent().remove_child(actor_slave)
|
||||||
|
# actor_master.add_child(actor_slave)
|
||||||
|
var skel_master = actor_master.get_meta("skeleton")
|
||||||
|
assert(skel_master is Skeleton)
|
||||||
|
var skel_slave = actor_slave.get_meta("skeleton")
|
||||||
|
assert(skel_slave is Skeleton)
|
||||||
|
follow_node_full = skel_slave.get_node("neck/marker_neck_grab")
|
||||||
|
follow_node = Position3D.new()
|
||||||
|
skel_master.add_child(follow_node)
|
||||||
|
follow_node.global_transform = follow_node_full.global_transform
|
||||||
|
ik.target_node = ik.get_path_to(follow_node)
|
||||||
|
ik.override_tip_basis = true
|
||||||
|
ik.interpolation = 0.0
|
||||||
|
ik_curve_pos = 0.0
|
||||||
|
|
||||||
|
actor_master.global_transform = Transform(actor_slave.global_transform.basis.rotated(Vector3.UP, PI), offt)
|
||||||
|
var master_xform = actor_master.global_transform.looking_at(actor_slave.global_transform.origin, Vector3.UP)
|
||||||
|
var slave_xform = actor_slave.global_transform.looking_at(actor_master.global_transform.origin, Vector3.UP)
|
||||||
|
var orientation = Transform(actor_slave.global_transform.basis, Vector3())
|
||||||
|
actor_slave.set_meta("orientation", orientation)
|
||||||
|
var master_orientation = Transform(actor_master.global_transform.basis, Vector3())
|
||||||
|
actor_master.set_meta("orientation", master_orientation)
|
||||||
|
characters.animation_node_travel(actor_master, "grab")
|
||||||
|
characters.animation_node_travel(actor_slave, "grabbed")
|
||||||
|
ik.start(true)
|
||||||
|
state = 3
|
||||||
|
3:
|
||||||
|
ik.interpolation = grab_ik_curve.interpolate_baked(ik_curve_pos)
|
||||||
|
ik_curve_pos += delta * curve_delta_mul
|
||||||
|
follow_node.global_transform = follow_node_full.global_transform
|
||||||
|
ik.start(true)
|
||||||
|
if ik.interpolation >= 1.0:
|
||||||
|
state = 4
|
||||||
|
4:
|
||||||
|
var m_anim: AnimationTree = actor_master.get_meta("animation_tree")
|
||||||
|
var m_state: AnimationNodeStateMachinePlayback = m_anim["parameters/state/playback"]
|
||||||
|
var m_l = m_state.get_current_length()
|
||||||
|
var m_p = m_state.get_current_play_position()
|
||||||
|
var s_anim: AnimationTree = actor_slave.get_meta("animation_tree")
|
||||||
|
var s_state: AnimationNodeStateMachinePlayback = s_anim["parameters/state/playback"]
|
||||||
|
var s_l = m_state.get_current_length()
|
||||||
|
var s_p = m_state.get_current_play_position()
|
||||||
|
if m_p >= m_l && s_p >= s_l:
|
||||||
|
state = 5
|
||||||
|
|
||||||
|
# 2:
|
||||||
|
# actor_slave.global_transform = Transform(actor_master.global_transform.basis.rotated(Vector3.UP, PI), offt)
|
||||||
|
# var orientation = Transform(actor_slave.global_transform.basis, Vector3())
|
||||||
|
# actor_slave.set_meta("orientation", orientation)
|
||||||
|
# state = 3
|
||||||
|
# 3:
|
||||||
|
# actor_slave.global_transform = Transform(actor_master.global_transform.basis.rotated(Vector3.UP, PI), offt)
|
||||||
|
# var orientation = Transform(actor_slave.global_transform.basis, Vector3())
|
||||||
|
# actor_slave.set_meta("orientation", orientation)
|
||||||
|
# state = 4
|
||||||
|
func finish():
|
||||||
|
pass
|
||||||
|
|
||||||
|
func enable_camera(where, to):
|
||||||
|
var current_cam = get_viewport().get_camera()
|
||||||
|
var player = current_cam.get_meta("player")
|
||||||
|
if !cinematic_camera:
|
||||||
|
cinematic_camera = cinematic_cam.instance()
|
||||||
|
var cam: Camera = cinematic_camera.get_node("rot_y/rot_x/SpringArm/camera_offset/Camera")
|
||||||
|
var cam_offset = cinematic_camera.get_node("rot_y/rot_x/SpringArm/camera_offset")
|
||||||
|
cam.set_meta("player", player)
|
||||||
|
cam.set_meta("current_cam", current_cam)
|
||||||
|
cinematic_camera.set_meta("cam", cam)
|
||||||
|
cinematic_camera.set_meta("offset", cam_offset)
|
||||||
|
get_viewport().add_child(cinematic_camera)
|
||||||
|
cinematic_camera.global_transform.origin = where
|
||||||
|
# cam_offset.global_transform.origin = where
|
||||||
|
cam.current = true
|
||||||
|
cam.look_at(to, Vector3.UP)
|
||||||
|
func update_camera(where, to):
|
||||||
|
var cam = cinematic_camera.get_meta("cam")
|
||||||
|
var cam_offset = cinematic_camera.get_meta("offset")
|
||||||
|
cam_offset.global_transform.origin = where
|
||||||
|
cam.look_at(to, Vector3.UP)
|
||||||
|
|
||||||
|
|
||||||
|
func grab(actor_master, actor_slave):
|
||||||
|
var gr = Grabbing.new()
|
||||||
|
gr.connect("enable_cinematic_camera", self, "enable_camera")
|
||||||
|
gr.connect("update_cinematic_camera", self, "update_camera")
|
||||||
|
gr.start(actor_master, actor_slave, grab_ik_curve, grab_ik_curve_multiplier)
|
||||||
|
active_states.push_back(gr)
|
||||||
|
|
||||||
|
func _physics_process(delta):
|
||||||
|
var completed = []
|
||||||
|
for e in active_states:
|
||||||
|
e.physics_update(delta)
|
||||||
|
if e.finished:
|
||||||
|
completed.push_back(e)
|
||||||
|
for d in completed:
|
||||||
|
active_states.erase(d)
|
||||||
|
func _process(delta):
|
||||||
|
var completed = []
|
||||||
|
for e in active_states:
|
||||||
|
e.update(delta)
|
||||||
|
if e.finished:
|
||||||
|
completed.push_back(e)
|
||||||
|
for d in completed:
|
||||||
|
active_states.erase(d)
|
||||||
13
autoload/orchestration.tscn
Normal file
13
autoload/orchestration.tscn
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[gd_scene load_steps=4 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://autoload/orchestration.gd" type="Script" id=1]
|
||||||
|
[ext_resource path="res://camera/cinematic_cam.tscn" type="PackedScene" id=2]
|
||||||
|
|
||||||
|
[sub_resource type="Curve" id=1]
|
||||||
|
_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.675, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.89079, 0.881818 ), 4.07459, 4.07459, 0, 0, Vector2( 0.988158, 1 ), 6.47137e-07, 0.0, 0, 0 ]
|
||||||
|
|
||||||
|
[node name="orchestration" type="Node"]
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
grab_ik_curve = SubResource( 1 )
|
||||||
|
grab_ik_curve_multiplier = 0.25
|
||||||
|
cinematic_cam = ExtResource( 2 )
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
signal spawn_player(xform)
|
||||||
|
|
||||||
|
|
||||||
# Declare member variables here. Examples:
|
# Declare member variables here. Examples:
|
||||||
@@ -11,7 +12,61 @@ func _ready():
|
|||||||
pass # Replace with function body.
|
pass # Replace with function body.
|
||||||
|
|
||||||
var save_data = {}
|
var save_data = {}
|
||||||
|
var camp: Node
|
||||||
|
var camp_site: int = -1
|
||||||
|
var camp_level: int = 0
|
||||||
|
var bandits_count: int = 0
|
||||||
|
var camp_dwellings = {}
|
||||||
|
func prepare_save_data():
|
||||||
|
var cam = get_tree().root.get_camera()
|
||||||
|
var player = cam.get_meta("player")
|
||||||
|
if player:
|
||||||
|
save_data.player_xform = var2str(player.global_transform)
|
||||||
|
save_data.player_stats = player.get_meta("stats")
|
||||||
|
save_data.world = RoadsData.save_data()
|
||||||
|
# save_data.dialogue = Dialogic.export()
|
||||||
|
# save_data.scenery = scenery
|
||||||
|
# state_list.save()
|
||||||
|
# if save_data.dormitory.has("quests"):
|
||||||
|
# print(save_data.dormitory.quests.running)
|
||||||
|
# save_data.prologue = prologue_state.save()
|
||||||
|
save_data.inventory = inventory.items
|
||||||
|
# save_data.dormitory = dormitory_state.save()
|
||||||
|
# save_data.roommates = characters.roommates
|
||||||
|
# save_data.player_room_id = player.get_meta("room_id")
|
||||||
|
# save_data.quests = questman.save()
|
||||||
|
save_data.traffic_state = streaming.traffic_rnd.state
|
||||||
|
var b = freezer.prepare_save_data()
|
||||||
|
while b == false:
|
||||||
|
yield(get_tree(), "idle_frame")
|
||||||
|
b = freezer.prepare_save_data()
|
||||||
|
save_data.camp_level = camp_level
|
||||||
|
save_data.bandits_count = bandits_count
|
||||||
|
save_data.camp_dwellings = var2str(camp_dwellings)
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
#func _process(delta):
|
#func _process(delta):
|
||||||
# pass
|
# pass
|
||||||
|
|
||||||
|
func restart_scene():
|
||||||
|
var cam = get_viewport().get_camera()
|
||||||
|
if cam && cam.has_meta("player"):
|
||||||
|
var player = cam.get_meta("player")
|
||||||
|
if player:
|
||||||
|
player.remove_meta("cam")
|
||||||
|
player.remove_meta("fps_cam")
|
||||||
|
player = null
|
||||||
|
get_viewport().get_camera().remove_meta("player")
|
||||||
|
if save_data.has("inventory"):
|
||||||
|
inventory.items = save_data.inventory
|
||||||
|
var new_scene = load("res://world.tscn")
|
||||||
|
streaming.done = false
|
||||||
|
if save_data.has("camp_level"):
|
||||||
|
camp_level = save_data.camp_level
|
||||||
|
if save_data.has("bandits_count"):
|
||||||
|
bandits_count = save_data.bandits_count
|
||||||
|
if save_data.has("camp_dwellings"):
|
||||||
|
camp_dwellings = str2var(save_data.camp_dwellings)
|
||||||
|
get_tree().change_scene_to(new_scene)
|
||||||
|
var player_spawned = false
|
||||||
|
var castle1_captured = false
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
signal character_ready
|
||||||
|
|
||||||
export var trailer_house: PackedScene
|
export var trailer_house: PackedScene
|
||||||
export var palace: PackedScene
|
export var palace: PackedScene
|
||||||
export var car: PackedScene
|
export var car: PackedScene
|
||||||
|
|
||||||
onready var obj_names = {
|
onready var obj_names = {
|
||||||
"palace": palace,
|
"palace": palace,
|
||||||
"trailer_house": trailer_house
|
"trailer_house": trailer_house,
|
||||||
}
|
}
|
||||||
|
|
||||||
var done = false
|
var done = false
|
||||||
@@ -34,6 +36,9 @@ var gate_top_tile: PackedScene = preload("res://objects/gate-top.scn")
|
|||||||
var entry_tile: PackedScene = preload("res://objects/block-room-entry.scn")
|
var entry_tile: PackedScene = preload("res://objects/block-room-entry.scn")
|
||||||
var roof_tile: PackedScene = preload("res://objects/roof.scn")
|
var roof_tile: PackedScene = preload("res://objects/roof.scn")
|
||||||
var tower_roof_tile: PackedScene = preload("res://objects/tower-roof.scn")
|
var tower_roof_tile: PackedScene = preload("res://objects/tower-roof.scn")
|
||||||
|
var courtroom: PackedScene = preload("res://objects/courtroom.tscn")
|
||||||
|
var bandit_camp: PackedScene = preload("res://bandit_camp.tscn")
|
||||||
|
var hostile_dwelling: PackedScene = preload("res://hostile_dwelling.tscn")
|
||||||
|
|
||||||
onready var palace_map_data = {
|
onready var palace_map_data = {
|
||||||
"courtyard_tile": courtyard_tile,
|
"courtyard_tile": courtyard_tile,
|
||||||
@@ -46,11 +51,12 @@ onready var palace_map_data = {
|
|||||||
"gate_top_tile": gate_top_tile,
|
"gate_top_tile": gate_top_tile,
|
||||||
"entry_tile": entry_tile,
|
"entry_tile": entry_tile,
|
||||||
"roof_tile": roof_tile,
|
"roof_tile": roof_tile,
|
||||||
"tower_roof_tile": tower_roof_tile
|
"tower_roof_tile": tower_roof_tile,
|
||||||
|
"courtroom": courtroom,
|
||||||
}
|
}
|
||||||
|
|
||||||
onready var buildings = {
|
onready var buildings = {
|
||||||
"trailer_house": preload("res://buildings/trailer-house.gd").new()
|
"trailer_house": preload("res://buildings/trailer-house.gd").new(),
|
||||||
}
|
}
|
||||||
|
|
||||||
func spawn_building(bname: String, xform: Transform) -> void:
|
func spawn_building(bname: String, xform: Transform) -> void:
|
||||||
@@ -126,13 +132,13 @@ func setup_town(site):
|
|||||||
dst -= step
|
dst -= step
|
||||||
towns += 1
|
towns += 1
|
||||||
|
|
||||||
func setup_first_town():
|
func setup_first_town(site):
|
||||||
assert(!done)
|
assert(!done)
|
||||||
var poly = RoadsData.get_site_polygon_3d(0)
|
var poly = RoadsData.get_site_polygon_3d(site)
|
||||||
var height = RoadsData.get_site_avg_height(0)
|
var height = RoadsData.get_site_avg_height(site)
|
||||||
var border = RoadsData.get_site_border(0, 32)
|
var border = RoadsData.get_site_border(site, 32)
|
||||||
var border1a = RoadsData.get_site_border(0, 42)
|
var border1a = RoadsData.get_site_border(site, 42)
|
||||||
var border2 = RoadsData.get_site_border(0, 60)
|
var border2 = RoadsData.get_site_border(site, 60)
|
||||||
|
|
||||||
var poly2 = []
|
var poly2 = []
|
||||||
poly2.resize(border2.size())
|
poly2.resize(border2.size())
|
||||||
@@ -146,7 +152,7 @@ func setup_first_town():
|
|||||||
var infl = RoadsData.get_influence_cached(center.x, center.z, 256)
|
var infl = RoadsData.get_influence_cached(center.x, center.z, 256)
|
||||||
center.y = infl.y
|
center.y = infl.y
|
||||||
print("first town center: ", center)
|
print("first town center: ", center)
|
||||||
var radial_points = RoadsData.get_site_radial_points(0, 32.0, 64.0)
|
var radial_points = RoadsData.get_site_radial_points(site, 32.0, 64.0)
|
||||||
var max_r = 0.0
|
var max_r = 0.0
|
||||||
for p in range(radial_points.size()):
|
for p in range(radial_points.size()):
|
||||||
var ep = radial_points[p]
|
var ep = radial_points[p]
|
||||||
@@ -219,7 +225,8 @@ func setup_traffic(site):
|
|||||||
var n = (p2 - p1).cross(Vector3.UP).normalized()
|
var n = (p2 - p1).cross(Vector3.UP).normalized()
|
||||||
var t = (p2 - p1).normalized()
|
var t = (p2 - p1).normalized()
|
||||||
var l = p1.distance_to(p2)
|
var l = p1.distance_to(p2)
|
||||||
assert(l > 0 && t.length_squared() > 0)
|
assert(l > 0)
|
||||||
|
assert(t.length_squared() > 0)
|
||||||
var xpos = p1 + t * 8.0
|
var xpos = p1 + t * 8.0
|
||||||
var xe = 128.0
|
var xe = 128.0
|
||||||
if l < xe + 16.0:
|
if l < xe + 16.0:
|
||||||
@@ -244,7 +251,6 @@ func setup_traffic(site):
|
|||||||
c.add_to_group("traffic_spawn")
|
c.add_to_group("traffic_spawn")
|
||||||
xpos += t * xe
|
xpos += t * xe
|
||||||
l -= xe
|
l -= xe
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
traffic_rnd = RandomNumberGenerator.new()
|
traffic_rnd = RandomNumberGenerator.new()
|
||||||
traffic_rnd.randomize()
|
traffic_rnd.randomize()
|
||||||
@@ -277,6 +283,7 @@ func _ready():
|
|||||||
Traffic.add_traffic_vehicle(car)
|
Traffic.add_traffic_vehicle(car)
|
||||||
var water_mat = load("res://water/Water.material")
|
var water_mat = load("res://water/Water.material")
|
||||||
Water.set_material(water_mat)
|
Water.set_material(water_mat)
|
||||||
|
connect("character_ready", self, "char_ready")
|
||||||
|
|
||||||
var delay = 3.0
|
var delay = 3.0
|
||||||
var state = 0
|
var state = 0
|
||||||
@@ -301,6 +308,9 @@ func _process(delta):
|
|||||||
|
|
||||||
func stream_obj(obj: String, xform: Transform):
|
func stream_obj(obj: String, xform: Transform):
|
||||||
Spawner.place_scene(obj, xform)
|
Spawner.place_scene(obj, xform)
|
||||||
|
var can_spawn = false
|
||||||
|
func char_ready():
|
||||||
|
can_spawn = true
|
||||||
func _physics_process(delta):
|
func _physics_process(delta):
|
||||||
var cam = get_viewport().get_camera()
|
var cam = get_viewport().get_camera()
|
||||||
if !cam:
|
if !cam:
|
||||||
@@ -309,25 +319,38 @@ func _physics_process(delta):
|
|||||||
1:
|
1:
|
||||||
var space_state = get_viewport().get_world().direct_space_state
|
var space_state = get_viewport().get_world().direct_space_state
|
||||||
# probaly should not be here
|
# probaly should not be here
|
||||||
|
if can_spawn:
|
||||||
for n in get_tree().get_nodes_in_group("spawn"):
|
for n in get_tree().get_nodes_in_group("spawn"):
|
||||||
var ok = false
|
var ok = false
|
||||||
if !n.is_in_group("keep"):
|
# if !n.is_in_group("keep"):
|
||||||
var where = n.get_global_transform().origin
|
# var where = n.get_global_transform().origin
|
||||||
var from = where
|
# var from = where
|
||||||
var to = where
|
# var to = where
|
||||||
from.y -= 8.0
|
# from.y -= 8.0
|
||||||
to.y += 8.0
|
# to.y += 8.0
|
||||||
var result = space_state.intersect_ray(from, to)
|
# var result = space_state.intersect_ray(from, to)
|
||||||
if result.empty() || !result.has("collider"):
|
# if result.empty() || !result.has("collider"):
|
||||||
continue
|
# continue
|
||||||
if result.collider:
|
# if result.collider:
|
||||||
n.global_transform.origin = result.position
|
# n.global_transform.origin = result.position
|
||||||
|
# ok = true
|
||||||
ok = true
|
ok = true
|
||||||
if ok || n.is_in_group("keep"):
|
if ok || n.is_in_group("keep"):
|
||||||
|
var base = ["cmdq", "marker", "hurtboxes"]
|
||||||
|
var g = ""
|
||||||
if n.is_in_group("male"):
|
if n.is_in_group("male"):
|
||||||
characters.replace_character(n, "male", ["cmdq", "marker", "hurtboxes", "student"])
|
g = "male"
|
||||||
elif n.is_in_group("female"):
|
elif n.is_in_group("female"):
|
||||||
characters.replace_character(n, "female", ["cmdq", "marker", "hurtboxes", "student"])
|
g = "female"
|
||||||
|
if n.is_in_group("mystress"):
|
||||||
|
base.push_back("mystress")
|
||||||
|
if n.is_in_group("student"):
|
||||||
|
base.push_back("student")
|
||||||
|
elif n.is_in_group("bandit"):
|
||||||
|
base.push_back("bandit")
|
||||||
|
if g.length() > 0:
|
||||||
|
print(g, " ", base)
|
||||||
|
characters.replace_character(n, g, base)
|
||||||
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
|
||||||
@@ -379,3 +402,29 @@ static func get_place_rnd(xform: Transform):
|
|||||||
rnd.seed = s
|
rnd.seed = s
|
||||||
return rnd
|
return rnd
|
||||||
|
|
||||||
|
func setup_bandit_camp(site):
|
||||||
|
var poly = RoadsData.get_site_polygon_3d(site)
|
||||||
|
var height = RoadsData.get_site_avg_height(site)
|
||||||
|
var center = Vector3()
|
||||||
|
for p in poly:
|
||||||
|
center += p
|
||||||
|
center /= poly.size()
|
||||||
|
center.y = height
|
||||||
|
var xform = Transform(Basis(), center)
|
||||||
|
var camp = bandit_camp.instance()
|
||||||
|
get_tree().root.add_child(camp)
|
||||||
|
camp.global_transform = xform
|
||||||
|
return camp
|
||||||
|
func setup_bandit_camp_outskirts(site):
|
||||||
|
var b = RoadsData.get_site_border(site, 96.0)
|
||||||
|
for e in range(min(4, b.size())):
|
||||||
|
if scenario.camp_dwellings.has(e):
|
||||||
|
if scenario.camp_dwellings[e].health <= 0:
|
||||||
|
continue
|
||||||
|
var h_xform = Transform(Basis(), b[e])
|
||||||
|
var dwg = hostile_dwelling.instance()
|
||||||
|
get_tree().root.add_child(dwg)
|
||||||
|
dwg.global_transform = h_xform
|
||||||
|
if !scenario.camp_dwellings.has(e):
|
||||||
|
scenario.camp_dwellings[e] = {}
|
||||||
|
scenario.camp_dwellings[e].health = 100.0
|
||||||
|
|||||||
102
bandit_camp.gd
Normal file
102
bandit_camp.gd
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
extends Spatial
|
||||||
|
export var bonfire: PackedScene
|
||||||
|
export var fence: PackedScene
|
||||||
|
export var gate: PackedScene
|
||||||
|
export var bed: PackedScene
|
||||||
|
export var pillory: PackedScene
|
||||||
|
export var gibbet: PackedScene
|
||||||
|
export var tent: PackedScene
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
call_deferred("update_camp")
|
||||||
|
|
||||||
|
func update_camp():
|
||||||
|
for c in get_children():
|
||||||
|
c.queue_free()
|
||||||
|
var camp_level = scenario.camp_level
|
||||||
|
var prisoners = []
|
||||||
|
var beds = 1
|
||||||
|
var tents = 0
|
||||||
|
if scenario.camp_level < 50:
|
||||||
|
beds = max(1, scenario.camp_level)
|
||||||
|
else:
|
||||||
|
beds = 50
|
||||||
|
var bandits = scenario.bandits_count
|
||||||
|
var circ = 32.0 + 2.0 * scenario.camp_level
|
||||||
|
var r = circ / (2.0 * PI)
|
||||||
|
var angle = 2.0 * PI / (circ / 2.0)
|
||||||
|
var angle_bed = 2.0 * PI / (circ / 4.0)
|
||||||
|
var a = 0.0
|
||||||
|
var bf = bonfire.instance()
|
||||||
|
add_child(bf)
|
||||||
|
bf.transform = Transform(Basis(), Vector3(0, 0.08, 0))
|
||||||
|
var beds_r = 2.5
|
||||||
|
var tents_r = 0.0
|
||||||
|
if camp_level > 25:
|
||||||
|
beds_r = max(min(12.0, r), r / 2.0)
|
||||||
|
tents_r = 5.5
|
||||||
|
tents = camp_level - 25
|
||||||
|
beds = max(0, beds - 2 * tents)
|
||||||
|
r = max(max(r, beds_r + 6.5), tents_r + 6.5)
|
||||||
|
circ = r * 2.0 * PI
|
||||||
|
var beds_to_place = beds
|
||||||
|
var k = 0
|
||||||
|
var tents_to_place = tents
|
||||||
|
while tents_to_place > 0:
|
||||||
|
a = 0.0
|
||||||
|
while a < 2.0 * PI:
|
||||||
|
if tents_to_place > 0:
|
||||||
|
var tent_pt = Vector3(tents_r * cos(a), 0.08 , tents_r * sin(a))
|
||||||
|
var tent_xform = Transform(Basis().rotated(Vector3.UP, -a + PI / 2.0), tent_pt)
|
||||||
|
var b = tent.instance()
|
||||||
|
add_child(b)
|
||||||
|
b.transform = tent_xform
|
||||||
|
tents_to_place -= 1
|
||||||
|
var n = int((tents_r * 2.0 * PI) / 8.0)
|
||||||
|
a += 2.0 * PI / float(n)
|
||||||
|
tents_r += 5.5
|
||||||
|
k += 1
|
||||||
|
k = 0
|
||||||
|
if beds_r <= tents_r + 1.5:
|
||||||
|
beds_r = tents_r + 1.5
|
||||||
|
|
||||||
|
while beds_to_place > 0:
|
||||||
|
a = 0.0
|
||||||
|
while a < 2.0 * PI:
|
||||||
|
if beds_to_place > 0:
|
||||||
|
var bed_pt = Vector3(beds_r * cos(a), 0.08 , beds_r * sin(a))
|
||||||
|
var bed_xform = Transform(Basis().rotated(Vector3.UP, -a + PI / 2.0), bed_pt)
|
||||||
|
var b = bed.instance()
|
||||||
|
add_child(b)
|
||||||
|
b.transform = bed_xform
|
||||||
|
beds_to_place -= 1
|
||||||
|
var n = (beds_r * 2.0 * PI) / 2.0
|
||||||
|
a += 2.0 * PI / n
|
||||||
|
beds_r += 2.5
|
||||||
|
k += 1
|
||||||
|
a = 0.0
|
||||||
|
if r - max(beds_r, tents_r) < 3.0:
|
||||||
|
r = max(beds_r, tents_r) + 3.0
|
||||||
|
circ = r * 2.0 * PI
|
||||||
|
circ = floor(circ / 4.0) * 4.0
|
||||||
|
r = circ / 2.0 / PI
|
||||||
|
while a < 2.0 * PI - 0.05:
|
||||||
|
var obj = fence
|
||||||
|
if a == 0.0:
|
||||||
|
obj = gate
|
||||||
|
var pt = Vector3(r * cos(a), 0 , r * sin(a))
|
||||||
|
var xform = Transform(Basis().rotated(Vector3.UP, -a + PI / 2.0), pt)
|
||||||
|
var f = obj.instance()
|
||||||
|
add_child(f)
|
||||||
|
f.transform = xform
|
||||||
|
a += 2.0 / circ * 2.0 * PI
|
||||||
|
func _physics_process(delta):
|
||||||
|
var space: PhysicsDirectSpaceState = get_world().get_direct_space_state()
|
||||||
|
var from = global_transform.origin - Vector3.UP * 200.0
|
||||||
|
var to = global_transform.origin + Vector3.UP * 200.0
|
||||||
|
var result = space.intersect_ray(from, to)
|
||||||
|
if result.has("collider"):
|
||||||
|
global_transform.origin = result.position
|
||||||
|
set_physics_process(false)
|
||||||
|
scenario.emit_signal("spawn_player", global_transform)
|
||||||
|
|
||||||
21
bandit_camp.tscn
Normal file
21
bandit_camp.tscn
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
[gd_scene load_steps=9 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://bandit_camp.gd" type="Script" id=1]
|
||||||
|
[ext_resource path="res://objects/bandit-camp-fence.scn" type="PackedScene" id=2]
|
||||||
|
[ext_resource path="res://objects/bandit-camp-fence-gate.scn" type="PackedScene" id=3]
|
||||||
|
[ext_resource path="res://objects/bandit-camp-bed-floor.scn" type="PackedScene" id=4]
|
||||||
|
[ext_resource path="res://objects/campfire.scn" type="PackedScene" id=5]
|
||||||
|
[ext_resource path="res://objects/tent.scn" type="PackedScene" id=6]
|
||||||
|
[ext_resource path="res://objects/pillory.scn" type="PackedScene" id=7]
|
||||||
|
[ext_resource path="res://objects/gibbet.scn" type="PackedScene" id=8]
|
||||||
|
|
||||||
|
[node name="bandit_camp" type="Spatial"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 149.477, 51.3701, 234.495 )
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
bonfire = ExtResource( 5 )
|
||||||
|
fence = ExtResource( 2 )
|
||||||
|
gate = ExtResource( 3 )
|
||||||
|
bed = ExtResource( 4 )
|
||||||
|
pillory = ExtResource( 7 )
|
||||||
|
gibbet = ExtResource( 8 )
|
||||||
|
tent = ExtResource( 6 )
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=138 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/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]
|
||||||
@@ -29,6 +29,19 @@ filters = [ "skeleton/Skeleton:hand_l", "skeleton/Skeleton:index_1_l", "skeleton
|
|||||||
filter_enabled = true
|
filter_enabled = true
|
||||||
filters = [ "skeleton/Skeleton:hand_r", "skeleton/Skeleton:index_1_r", "skeleton/Skeleton:index_2_r", "skeleton/Skeleton:index_3_end_r", "skeleton/Skeleton:index_3_r", "skeleton/Skeleton:little_1_r", "skeleton/Skeleton:little_2_r", "skeleton/Skeleton:little_3_end_r", "skeleton/Skeleton:little_3_r", "skeleton/Skeleton:middle_1_r", "skeleton/Skeleton:middle_2_r", "skeleton/Skeleton:middle_3_end_r", "skeleton/Skeleton:middle_3_r", "skeleton/Skeleton:ring_1_r", "skeleton/Skeleton:ring_2_r", "skeleton/Skeleton:ring_3_end_r", "skeleton/Skeleton:ring_3_r", "skeleton/Skeleton:thumb_1_r", "skeleton/Skeleton:thumb_2_r", "skeleton/Skeleton:thumb_3_end_r", "skeleton/Skeleton:thumb_3_r" ]
|
filters = [ "skeleton/Skeleton:hand_r", "skeleton/Skeleton:index_1_r", "skeleton/Skeleton:index_2_r", "skeleton/Skeleton:index_3_end_r", "skeleton/Skeleton:index_3_r", "skeleton/Skeleton:little_1_r", "skeleton/Skeleton:little_2_r", "skeleton/Skeleton:little_3_end_r", "skeleton/Skeleton:little_3_r", "skeleton/Skeleton:middle_1_r", "skeleton/Skeleton:middle_2_r", "skeleton/Skeleton:middle_3_end_r", "skeleton/Skeleton:middle_3_r", "skeleton/Skeleton:ring_1_r", "skeleton/Skeleton:ring_2_r", "skeleton/Skeleton:ring_3_end_r", "skeleton/Skeleton:ring_3_r", "skeleton/Skeleton:thumb_1_r", "skeleton/Skeleton:thumb_2_r", "skeleton/Skeleton:thumb_3_end_r", "skeleton/Skeleton:thumb_3_r" ]
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeAnimation" id=138]
|
||||||
|
animation = "attack-melee-weapon1"
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeTimeScale" id=139]
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeBlendTree" id=135]
|
||||||
|
nodes/Animation/node = SubResource( 138 )
|
||||||
|
nodes/Animation/position = Vector2( 280, 140 )
|
||||||
|
nodes/attack1_speed/node = SubResource( 139 )
|
||||||
|
nodes/attack1_speed/position = Vector2( 600, 160 )
|
||||||
|
nodes/output/position = Vector2( 900, 120 )
|
||||||
|
node_connections = [ "output", 0, "attack1_speed", "attack1_speed", 0, "Animation" ]
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeAnimation" id=9]
|
[sub_resource type="AnimationNodeAnimation" id=9]
|
||||||
animation = "climb1"
|
animation = "climb1"
|
||||||
|
|
||||||
@@ -58,7 +71,7 @@ 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=16]
|
[sub_resource type="AnimationNodeAnimation" id=16]
|
||||||
animation = "start-grabbed"
|
animation = "start-grabbed2"
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeTimeScale" id=17]
|
[sub_resource type="AnimationNodeTimeScale" id=17]
|
||||||
|
|
||||||
@@ -113,7 +126,7 @@ nodes/TimeScale/position = Vector2( 580, 100 )
|
|||||||
nodes/output/position = Vector2( 1120, 120 )
|
nodes/output/position = Vector2( 1120, 120 )
|
||||||
nodes/t1/node = SubResource( 26 )
|
nodes/t1/node = SubResource( 26 )
|
||||||
nodes/t1/position = Vector2( 880, 100 )
|
nodes/t1/position = Vector2( 880, 100 )
|
||||||
node_connections = [ "output", 0, "t1", "TimeScale", 0, "Animation", "TimeScale 2", 0, "Animation 2", "t1", 0, "TimeScale", "t1", 1, "TimeScale 2" ]
|
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]
|
[sub_resource type="AnimationNodeAnimation" id=28]
|
||||||
animation = "walk1p2"
|
animation = "walk1p2"
|
||||||
@@ -355,7 +368,7 @@ nodes/attack2/position = Vector2( 1140, 300 )
|
|||||||
nodes/output/position = Vector2( 1580, 180 )
|
nodes/output/position = Vector2( 1580, 180 )
|
||||||
nodes/speed/node = SubResource( 74 )
|
nodes/speed/node = SubResource( 74 )
|
||||||
nodes/speed/position = Vector2( 540, 60 )
|
nodes/speed/position = Vector2( 540, 60 )
|
||||||
node_connections = [ "speed", 0, "Animation", "output", 0, "attack2", "TimeScale", 0, "Animation 2", "attack1", 0, "speed", "attack1", 1, "TimeScale", "attack2", 0, "attack1", "attack2", 1, "TimeScale 2", "TimeScale 2", 0, "Animation 3" ]
|
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]
|
[sub_resource type="AnimationNodeAnimation" id=76]
|
||||||
animation = "dagger-sacrifice-counter-p"
|
animation = "dagger-sacrifice-counter-p"
|
||||||
@@ -547,7 +560,15 @@ switch_mode = 2
|
|||||||
[sub_resource type="AnimationNodeStateMachineTransition" id=130]
|
[sub_resource type="AnimationNodeStateMachineTransition" id=130]
|
||||||
switch_mode = 2
|
switch_mode = 2
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id=136]
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id=137]
|
||||||
|
switch_mode = 2
|
||||||
|
auto_advance = true
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeStateMachine" id=110]
|
[sub_resource type="AnimationNodeStateMachine" id=110]
|
||||||
|
states/attack-melee1/node = SubResource( 135 )
|
||||||
|
states/attack-melee1/position = Vector2( 1277, 411.193 )
|
||||||
states/climb1/node = SubResource( 11 )
|
states/climb1/node = SubResource( 11 )
|
||||||
states/climb1/position = Vector2( 804, 503.193 )
|
states/climb1/position = Vector2( 804, 503.193 )
|
||||||
states/climb1a/node = SubResource( 14 )
|
states/climb1a/node = SubResource( 14 )
|
||||||
@@ -586,12 +607,12 @@ 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 ) ]
|
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"
|
start_node = "locomotion"
|
||||||
graph_offset = Vector2( -232, 15.1925 )
|
graph_offset = Vector2( 176.598, 15.1925 )
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeBlendTree" id=111]
|
[sub_resource type="AnimationNodeBlendTree" id=111]
|
||||||
graph_offset = Vector2( 0, -221 )
|
graph_offset = Vector2( 445.846, -157.796 )
|
||||||
nodes/Animation/node = SubResource( 5 )
|
nodes/Animation/node = SubResource( 5 )
|
||||||
nodes/Animation/position = Vector2( 540, 280 )
|
nodes/Animation/position = Vector2( 540, 280 )
|
||||||
"nodes/Animation 2/node" = SubResource( 4 )
|
"nodes/Animation 2/node" = SubResource( 4 )
|
||||||
@@ -605,24 +626,17 @@ nodes/blade_right/position = Vector2( 1400, 100 )
|
|||||||
nodes/output/position = Vector2( 1820, -20 )
|
nodes/output/position = Vector2( 1820, -20 )
|
||||||
nodes/state/node = SubResource( 110 )
|
nodes/state/node = SubResource( 110 )
|
||||||
nodes/state/position = Vector2( 480, 120 )
|
nodes/state/position = Vector2( 480, 120 )
|
||||||
node_connections = [ "output", 0, "blade_right", "blade_right", 0, "blade_left", "blade_right", 1, "Animation 2", "blade_left", 0, "all_scale", "blade_left", 1, "Animation", "all_scale", 0, "state" ]
|
node_connections = [ "output", 0, "blade_right", "all_scale", 0, "state", "blade_left", 0, "all_scale", "blade_left", 1, "Animation", "blade_right", 0, "blade_left", "blade_right", 1, "Animation 2" ]
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeStateMachinePlayback" id=112]
|
[sub_resource type="AnimationNodeStateMachinePlayback" id=112]
|
||||||
|
|
||||||
[node name="vroid1-female" instance=ExtResource( 1 )]
|
[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/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"]
|
[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 )
|
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.695045, 0.34614, -0.630227, -0.0867818, 0.910422, 0.404298, 0.713771, -0.226324, 0.66284, -0.0445963, 1.35245, -0.0152731 )
|
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"
|
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"]
|
||||||
@@ -633,6 +647,9 @@ transform = Transform( 0.845972, -0.248965, 0.471515, 0.270435, 0.962465, 0.0230
|
|||||||
|
|
||||||
[node name="head_hurt" type="Area" parent="skeleton/Skeleton/head" index="2"]
|
[node name="head_hurt" type="Area" parent="skeleton/Skeleton/head" index="2"]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0.02 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0.02 )
|
||||||
|
collision_layer = 8
|
||||||
|
collision_mask = 4
|
||||||
|
monitorable = false
|
||||||
|
|
||||||
[node name="CollisionShape" type="CollisionShape" parent="skeleton/Skeleton/head/head_hurt" index="0"]
|
[node name="CollisionShape" type="CollisionShape" parent="skeleton/Skeleton/head/head_hurt" index="0"]
|
||||||
shape = SubResource( 1 )
|
shape = SubResource( 1 )
|
||||||
@@ -649,43 +666,57 @@ 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.932837, 0.0669982, 0.354143, 0.0474986, -0.99678, 0.0635026, 0.357293, -0.0424105, -0.933064, 0.000203875, 0.898321, -0.00645695 )
|
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"
|
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"]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.2, 0.2 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.2, 0.2 )
|
||||||
|
|
||||||
[node name="hips_hurt" type="Area" parent="skeleton/Skeleton/hips" index="1"]
|
[node name="hips_hurt" type="Area" parent="skeleton/Skeleton/hips" index="1"]
|
||||||
|
collision_layer = 8
|
||||||
|
collision_mask = 4
|
||||||
|
monitorable = false
|
||||||
|
|
||||||
[node name="CollisionShape" type="CollisionShape" parent="skeleton/Skeleton/hips/hips_hurt" index="0"]
|
[node name="CollisionShape" type="CollisionShape" parent="skeleton/Skeleton/hips/hips_hurt" index="0"]
|
||||||
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.287977, 0.919611, -0.267176, 0.942778, 0.321208, 0.0894101, 0.168042, -0.22614, -0.95949, 0.217922, 0.840792, 0.0647382 )
|
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"
|
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.0744099, -0.85538, 0.512627, -0.989629, 0.126679, 0.0677309, -0.122875, -0.50227, -0.855936, -0.175723, 0.838131, -0.0414757 )
|
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"
|
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.941419, -0.0483243, -0.333891, 0.0575738, 0.998111, 0.0178291, 0.332436, -0.0360186, 0.942465, -0.00328054, 1.05887, -0.018731 )
|
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"
|
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"]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.05, 0 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.05, 0 )
|
||||||
|
collision_layer = 8
|
||||||
|
collision_mask = 4
|
||||||
|
monitorable = false
|
||||||
|
|
||||||
[node name="CollisionShape" type="CollisionShape" parent="skeleton/Skeleton/chest/chest_hurt" index="0"]
|
[node name="CollisionShape" type="CollisionShape" parent="skeleton/Skeleton/chest/chest_hurt" index="0"]
|
||||||
shape = SubResource( 3 )
|
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"]
|
||||||
|
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"]
|
||||||
|
transform = Transform( 0.138457, -0.626832, -0.766778, -0.568055, 0.583953, -0.579924, 0.811199, 0.515912, -0.275226, 0, 0.023, -0.085 )
|
||||||
|
visible = false
|
||||||
|
|
||||||
[node name="AnimationTree" type="AnimationTree" parent="." index="2"]
|
[node name="AnimationTree" type="AnimationTree" parent="." index="2"]
|
||||||
tree_root = SubResource( 111 )
|
tree_root = SubResource( 111 )
|
||||||
anim_player = NodePath("../AnimationPlayer")
|
anim_player = NodePath("../AnimationPlayer")
|
||||||
@@ -695,6 +726,7 @@ parameters/all_scale/scale = 1.0
|
|||||||
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
|
||||||
parameters/state/playback = SubResource( 112 )
|
parameters/state/playback = SubResource( 112 )
|
||||||
|
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/grabbed/TimeScale/scale = 1.0
|
parameters/state/grabbed/TimeScale/scale = 1.0
|
||||||
@@ -702,7 +734,7 @@ parameters/state/kneel/TimeScale/scale = 1.0
|
|||||||
parameters/state/locomotion/loc/blend_position = Vector2( -0.00127554, 0.00220752 )
|
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/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 = 1
|
parameters/state/locomotion/loc/0/t1/current = 0
|
||||||
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 = 0
|
parameters/state/locomotion/loc/1/Transition/current = 0
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,18 @@
|
|||||||
[gd_scene load_steps=95 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/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]
|
||||||
[ext_resource path="res://scenes/face/male-face.tscn" type="PackedScene" id=3]
|
[ext_resource path="res://scenes/face/male-face.tscn" type="PackedScene" id=3]
|
||||||
|
|
||||||
|
[sub_resource type="SphereShape" id=149]
|
||||||
|
radius = 0.15
|
||||||
|
|
||||||
|
[sub_resource type="SphereShape" id=148]
|
||||||
|
radius = 0.18
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape" id=147]
|
||||||
|
extents = Vector3( 0.2, 0.22, 0.12 )
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeAnimation" id=1]
|
[sub_resource type="AnimationNodeAnimation" id=1]
|
||||||
animation = "blend-blade-right"
|
animation = "blend-blade-right"
|
||||||
|
|
||||||
@@ -18,6 +27,19 @@ filters = [ "Skeleton:j_bip_l_hand", "Skeleton:j_bip_l_index_1", "Skeleton:j_bip
|
|||||||
filter_enabled = true
|
filter_enabled = true
|
||||||
filters = [ "Skeleton:j_bip_r_hand", "Skeleton:j_bip_r_index_1", "Skeleton:j_bip_r_index_2", "Skeleton:j_bip_r_index_3", "Skeleton:j_bip_r_little_1", "Skeleton:j_bip_r_little_2", "Skeleton:j_bip_r_little_3", "Skeleton:j_bip_r_middle_1", "Skeleton:j_bip_r_middle_2", "Skeleton:j_bip_r_middle_3", "Skeleton:j_bip_r_ring_1", "Skeleton:j_bip_r_ring_2", "Skeleton:j_bip_r_ring_3", "Skeleton:j_bip_r_thumb_1", "Skeleton:j_bip_r_thumb_2", "Skeleton:j_bip_r_thumb_3" ]
|
filters = [ "Skeleton:j_bip_r_hand", "Skeleton:j_bip_r_index_1", "Skeleton:j_bip_r_index_2", "Skeleton:j_bip_r_index_3", "Skeleton:j_bip_r_little_1", "Skeleton:j_bip_r_little_2", "Skeleton:j_bip_r_little_3", "Skeleton:j_bip_r_middle_1", "Skeleton:j_bip_r_middle_2", "Skeleton:j_bip_r_middle_3", "Skeleton:j_bip_r_ring_1", "Skeleton:j_bip_r_ring_2", "Skeleton:j_bip_r_ring_3", "Skeleton:j_bip_r_thumb_1", "Skeleton:j_bip_r_thumb_2", "Skeleton:j_bip_r_thumb_3" ]
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeAnimation" id=145]
|
||||||
|
animation = "attack-melee-weapon1"
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeTimeScale" id=146]
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeBlendTree" id=142]
|
||||||
|
graph_offset = Vector2( -534, 8 )
|
||||||
|
nodes/Animation/node = SubResource( 145 )
|
||||||
|
nodes/Animation/position = Vector2( -240, 158 )
|
||||||
|
nodes/TimeScale/node = SubResource( 146 )
|
||||||
|
nodes/TimeScale/position = Vector2( 60, 160 )
|
||||||
|
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeAnimation" id=5]
|
[sub_resource type="AnimationNodeAnimation" id=5]
|
||||||
animation = "cliimb1"
|
animation = "cliimb1"
|
||||||
|
|
||||||
@@ -58,11 +80,12 @@ 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=14]
|
[sub_resource type="AnimationNodeAnimation" id=14]
|
||||||
animation = "start-grab"
|
animation = "start-grab2"
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeTimeScale" id=15]
|
[sub_resource type="AnimationNodeTimeScale" id=15]
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeBlendTree" id=16]
|
[sub_resource type="AnimationNodeBlendTree" id=16]
|
||||||
|
graph_offset = Vector2( 119.058, 0 )
|
||||||
nodes/Animation/node = SubResource( 14 )
|
nodes/Animation/node = SubResource( 14 )
|
||||||
nodes/Animation/position = Vector2( 573, 137 )
|
nodes/Animation/position = Vector2( 573, 137 )
|
||||||
nodes/TimeScale/node = SubResource( 15 )
|
nodes/TimeScale/node = SubResource( 15 )
|
||||||
@@ -375,7 +398,15 @@ xfade_time = 0.5
|
|||||||
switch_mode = 2
|
switch_mode = 2
|
||||||
xfade_time = 0.5
|
xfade_time = 0.5
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id=143]
|
||||||
|
|
||||||
|
[sub_resource type="AnimationNodeStateMachineTransition" id=144]
|
||||||
|
switch_mode = 2
|
||||||
|
auto_advance = true
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeStateMachine" id=70]
|
[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/node = SubResource( 7 )
|
||||||
states/climb1/position = Vector2( 359.444, 656 )
|
states/climb1/position = Vector2( 359.444, 656 )
|
||||||
states/climb1a/node = SubResource( 10 )
|
states/climb1a/node = SubResource( 10 )
|
||||||
@@ -402,12 +433,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 ) ]
|
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"
|
start_node = "locomotion"
|
||||||
graph_offset = Vector2( -470.556, -68 )
|
graph_offset = Vector2( -103.683, 58 )
|
||||||
|
|
||||||
[sub_resource type="AnimationNodeBlendTree" id=71]
|
[sub_resource type="AnimationNodeBlendTree" id=71]
|
||||||
graph_offset = Vector2( -499.98, 0 )
|
graph_offset = Vector2( -610.686, 0 )
|
||||||
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 )
|
||||||
@@ -427,6 +458,7 @@ node_connections = [ "output", 0, "blade_right", "blade_left", 0, "state", "blad
|
|||||||
|
|
||||||
[node name="Skeleton" parent="." index="0"]
|
[node name="Skeleton" parent="." index="0"]
|
||||||
bones/1/bound_children = [ NodePath("hips") ]
|
bones/1/bound_children = [ NodePath("hips") ]
|
||||||
|
bones/23/bound_children = [ NodePath("chest") ]
|
||||||
bones/75/bound_children = [ NodePath("neck") ]
|
bones/75/bound_children = [ NodePath("neck") ]
|
||||||
bones/76/bound_children = [ NodePath("head") ]
|
bones/76/bound_children = [ NodePath("head") ]
|
||||||
bones/80/bound_children = [ NodePath("penis_2") ]
|
bones/80/bound_children = [ NodePath("penis_2") ]
|
||||||
@@ -434,7 +466,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.998729, 0.041974, 0.083992, -0.0441852, 0.995486, 0.996075, -0.0242614, -0.0851186, 0.24008, 1.0159, -0.0583036 )
|
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"
|
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"]
|
||||||
@@ -445,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 )
|
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.0271, -0.0530299 )
|
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"
|
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"]
|
||||||
@@ -456,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 )
|
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.998061, -0.0095934, -0.0614997, 0.0314598, 0.930306, 0.365432, 0.0537078, -0.366659, 0.928804, -0.0330975, 1.69764, -0.00609486 )
|
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"
|
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"]
|
||||||
@@ -473,16 +505,33 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.011 )
|
|||||||
|
|
||||||
[node name="male-face" parent="Skeleton/head/face" index="0" instance=ExtResource( 3 )]
|
[node name="male-face" parent="Skeleton/head/face" index="0" instance=ExtResource( 3 )]
|
||||||
|
|
||||||
|
[node name="head_hurt" type="Area" parent="Skeleton/head" index="3"]
|
||||||
|
collision_layer = 8
|
||||||
|
collision_mask = 4
|
||||||
|
monitorable = false
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="Skeleton/head/head_hurt" index="0"]
|
||||||
|
transform = Transform( 0.967007, -0.0921614, 0.237496, 0.0940632, 0.995561, 0.00333673, -0.236749, 0.019113, 0.971383, 0.00128094, 0.0854003, 0.000879645 )
|
||||||
|
shape = SubResource( 149 )
|
||||||
|
|
||||||
[node name="hips" type="BoneAttachment" parent="Skeleton" index="5"]
|
[node name="hips" type="BoneAttachment" parent="Skeleton" index="5"]
|
||||||
transform = Transform( 0.988538, -0.146769, 0.0353867, 0.150102, 0.98061, -0.125986, -0.0162097, 0.129854, 0.991401, 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"
|
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"]
|
||||||
transform = Transform( 0.999999, 0.000161137, 0.00126248, -0.000160797, 1, -0.000193566, -0.00126263, 0.000193223, 0.999999, 0.0136906, -0.0795597, 0.214268 )
|
transform = Transform( 0.999999, 0.000161137, 0.00126248, -0.000160797, 1, -0.000193566, -0.00126263, 0.000193223, 0.999999, 0.0136906, -0.0795597, 0.214268 )
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
|
[node name="hips_hurt" type="Area" parent="Skeleton/hips" index="1"]
|
||||||
|
collision_layer = 8
|
||||||
|
collision_mask = 4
|
||||||
|
monitorable = false
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="Skeleton/hips/hips_hurt" index="0"]
|
||||||
|
shape = SubResource( 148 )
|
||||||
|
|
||||||
[node name="neck" type="BoneAttachment" parent="Skeleton" index="6"]
|
[node name="neck" type="BoneAttachment" parent="Skeleton" index="6"]
|
||||||
transform = Transform( 0.999522, -0.0284599, 0.0120657, 0.0262095, 0.987195, 0.157347, -0.0163893, -0.156956, 0.987469, -0.0303023, 1.60068, 0.00932036 )
|
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"
|
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"]
|
||||||
@@ -490,13 +539,25 @@ 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.988538, 0.119852, -0.0918097, 0.150102, -0.845508, 0.51243, -0.0162103, -0.520337, -0.853807, 0.0156493, 0.991264, -0.105296 )
|
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"
|
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"]
|
||||||
transform = Transform( 0.998824, -0.0252848, -0.0413812, 0.0249792, 0.999657, -0.00788352, 0.0415664, 0.00684074, 0.999113, -0.0100176, 0.0641036, 0.0307807 )
|
transform = Transform( 0.998824, -0.0252848, -0.0413812, 0.0249792, 0.999657, -0.00788352, 0.0415664, 0.00684074, 0.999113, -0.0100176, 0.0641036, 0.0307807 )
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
|
[node name="chest" type="BoneAttachment" parent="Skeleton" index="8"]
|
||||||
|
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"]
|
||||||
|
collision_layer = 8
|
||||||
|
collision_mask = 4
|
||||||
|
monitorable = false
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="Skeleton/chest/chest_hurt" index="0"]
|
||||||
|
shape = SubResource( 147 )
|
||||||
|
|
||||||
[node name="AnimationTree" type="AnimationTree" parent="." index="2"]
|
[node name="AnimationTree" type="AnimationTree" parent="." index="2"]
|
||||||
tree_root = SubResource( 71 )
|
tree_root = SubResource( 71 )
|
||||||
anim_player = NodePath("../AnimationPlayer")
|
anim_player = NodePath("../AnimationPlayer")
|
||||||
@@ -506,6 +567,7 @@ 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
|
||||||
parameters/state/playback = SubResource( 72 )
|
parameters/state/playback = SubResource( 72 )
|
||||||
|
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
|
||||||
|
|||||||
7
fonts/DefaultFont.tres
Normal file
7
fonts/DefaultFont.tres
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[gd_resource type="DynamicFont" load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://fonts/Overlock-Regular.ttf" type="DynamicFontData" id=1]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
size = 30
|
||||||
|
font_data = ExtResource( 1 )
|
||||||
94
fonts/OFL.txt
Normal file
94
fonts/OFL.txt
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
Copyright (c) 2011, Dario Manuel Muhafara (http://www.tipo.net.ar),
|
||||||
|
with Reserved Font Names "Overlock" "Overlock SC"
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
http://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
BIN
fonts/Overlock-Regular.ttf
Normal file
BIN
fonts/Overlock-Regular.ttf
Normal file
Binary file not shown.
12
hostile_dwelling.gd
Normal file
12
hostile_dwelling.gd
Normal file
@@ -0,0 +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"])
|
||||||
22
hostile_dwelling.tscn
Normal file
22
hostile_dwelling.tscn
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
[gd_scene load_steps=4 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://objects/campfire.scn" type="PackedScene" id=1]
|
||||||
|
[ext_resource path="res://objects/tent.scn" type="PackedScene" id=2]
|
||||||
|
[ext_resource path="res://hostile_dwelling.gd" type="Script" id=3]
|
||||||
|
|
||||||
|
[node name="hostile_dwelling" type="Spatial"]
|
||||||
|
script = ExtResource( 3 )
|
||||||
|
|
||||||
|
[node name="campfire" parent="." instance=ExtResource( 1 )]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
material/0 = null
|
||||||
|
material/1 = null
|
||||||
|
|
||||||
|
[node name="tent" parent="." instance=ExtResource( 2 )]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 3 )
|
||||||
|
|
||||||
|
[node name="npc1" type="Spatial" parent="." groups=["bandit", "male", "spawn"]]
|
||||||
|
transform = Transform( 0.930494, 0, 0.366306, 0, 1, 0, -0.366306, 0, 0.930494, 2.86465, 0.178202, 0 )
|
||||||
|
|
||||||
|
[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 )
|
||||||
BIN
objects/DarkMetal.material
Normal file
BIN
objects/DarkMetal.material
Normal file
Binary file not shown.
BIN
objects/DarkRed.material
Normal file
BIN
objects/DarkRed.material
Normal file
Binary file not shown.
BIN
objects/DarkRed_001.material
Normal file
BIN
objects/DarkRed_001.material
Normal file
Binary file not shown.
BIN
objects/Grey.material
Normal file
BIN
objects/Grey.material
Normal file
Binary file not shown.
BIN
objects/Grey_001.material
Normal file
BIN
objects/Grey_001.material
Normal file
Binary file not shown.
Binary file not shown.
BIN
objects/Metal.material
Normal file
BIN
objects/Metal.material
Normal file
Binary file not shown.
BIN
objects/Red.material
Normal file
BIN
objects/Red.material
Normal file
Binary file not shown.
BIN
objects/Red_001.material
Normal file
BIN
objects/Red_001.material
Normal file
Binary file not shown.
BIN
objects/White.material
Normal file
BIN
objects/White.material
Normal file
Binary file not shown.
BIN
objects/White_001.material
Normal file
BIN
objects/White_001.material
Normal file
Binary file not shown.
BIN
objects/Wood.material
Normal file
BIN
objects/Wood.material
Normal file
Binary file not shown.
BIN
objects/WoodLight.material
Normal file
BIN
objects/WoodLight.material
Normal file
Binary file not shown.
BIN
objects/Wood_001.material
Normal file
BIN
objects/Wood_001.material
Normal file
Binary file not shown.
BIN
objects/Wood_003.material
Normal file
BIN
objects/Wood_003.material
Normal file
Binary file not shown.
BIN
objects/_defaultMat.material
Normal file
BIN
objects/_defaultMat.material
Normal file
Binary file not shown.
BIN
objects/bandit-camp.bin
Normal file
BIN
objects/bandit-camp.bin
Normal file
Binary file not shown.
1606
objects/bandit-camp.gltf
Normal file
1606
objects/bandit-camp.gltf
Normal file
File diff suppressed because it is too large
Load Diff
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
importer="scene"
|
importer="scene"
|
||||||
type="PackedScene"
|
type="PackedScene"
|
||||||
path="res://.import/vroid1-man-animate.gltf-b58dd05f3dd46f7cb8ff28f705603ee5.scn"
|
path="res://.import/bandit-camp.gltf-d3ef9366a694d4783ebaa390be1668fb.scn"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://characters/vroid1-man-animate.gltf"
|
source_file="res://objects/bandit-camp.gltf"
|
||||||
dest_files=[ "res://.import/vroid1-man-animate.gltf-b58dd05f3dd46f7cb8ff28f705603ee5.scn" ]
|
dest_files=[ "res://.import/bandit-camp.gltf-d3ef9366a694d4783ebaa390be1668fb.scn" ]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
@@ -15,12 +15,13 @@ nodes/root_type="Spatial"
|
|||||||
nodes/root_name="Scene Root"
|
nodes/root_name="Scene Root"
|
||||||
nodes/root_scale=1.0
|
nodes/root_scale=1.0
|
||||||
nodes/custom_script=""
|
nodes/custom_script=""
|
||||||
nodes/storage=0
|
nodes/storage=1
|
||||||
nodes/use_legacy_names=false
|
nodes/use_legacy_names=false
|
||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
meshes/compress=true
|
meshes/octahedral_compression=true
|
||||||
|
meshes/compress=4286
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
meshes/light_baking=0
|
meshes/light_baking=0
|
||||||
BIN
objects/colorRed.material
Normal file
BIN
objects/colorRed.material
Normal file
Binary file not shown.
32
objects/courtroom.gd
Normal file
32
objects/courtroom.gd
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
extends MeshInstance
|
||||||
|
|
||||||
|
|
||||||
|
# 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():
|
||||||
|
call("spawn_everything")
|
||||||
|
func spawn_everything():
|
||||||
|
for k in get_children():
|
||||||
|
if k.name.begins_with("spawn_"):
|
||||||
|
if k.name.begins_with("spawn_player"):
|
||||||
|
if scenario.castle1_captured:
|
||||||
|
scenario.emit_signal("spawn_player", k.global_transform)
|
||||||
|
else:
|
||||||
|
k.add_to_group("spawn")
|
||||||
|
if k.name.begins_with("spawn_courtmaid"):
|
||||||
|
k.add_to_group("female")
|
||||||
|
k.add_to_group("courtmaid")
|
||||||
|
k.set_meta("roster", ["castle1", "courtroom"])
|
||||||
|
if k.name.begins_with("spawn_mystress"):
|
||||||
|
k.add_to_group("female")
|
||||||
|
k.add_to_group("mystress")
|
||||||
|
k.set_meta("roster", ["castle1", "courtroom"])
|
||||||
|
if k.name.begins_with("spawn_tied_male"):
|
||||||
|
k.add_to_group("male")
|
||||||
|
k.add_to_group("captured")
|
||||||
|
k.set_meta("roster", ["castle1", "courtroom"])
|
||||||
|
print("SPAWN!! ", k.name)
|
||||||
7
objects/courtroom.tscn
Normal file
7
objects/courtroom.tscn
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://objects/courtroom.scn" type="PackedScene" id=1]
|
||||||
|
[ext_resource path="res://objects/courtroom.gd" type="Script" id=2]
|
||||||
|
|
||||||
|
[node name="courtroom" instance=ExtResource( 1 )]
|
||||||
|
script = ExtResource( 2 )
|
||||||
BIN
objects/leafsDark_001.material
Normal file
BIN
objects/leafsDark_001.material
Normal file
Binary file not shown.
Binary file not shown.
@@ -1,7 +1,7 @@
|
|||||||
extends Spatial
|
extends Spatial
|
||||||
|
|
||||||
const tile_size = 8
|
const tile_size = 8
|
||||||
const palace_size = 8
|
const palace_size = 12
|
||||||
const layers = 4
|
const layers = 4
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
@@ -25,10 +25,10 @@ func _ready():
|
|||||||
var xform = Transform(Basis(), Vector3(x, voffset, z))
|
var xform = Transform(Basis(), Vector3(x, voffset, z))
|
||||||
if i > 0 && i < palace_size - 1:
|
if i > 0 && i < palace_size - 1:
|
||||||
if j > 0 && j < palace_size - 1:
|
if j > 0 && j < palace_size - 1:
|
||||||
call_deferred("place", ct, xform)
|
call("place", ct, xform)
|
||||||
if i in [0, palace_size - 1] || j in [0, palace_size - 1]:
|
if i in [0, palace_size - 1] || j in [0, palace_size - 1]:
|
||||||
if (j == palace_size / 2.0 || i != palace_size / 2.0):
|
if (j == palace_size / 2.0 || i != palace_size / 2.0):
|
||||||
call_deferred("place", "foundation_tile", xform)
|
call("place", "foundation_tile", xform)
|
||||||
else:
|
else:
|
||||||
var ct = "room_tile"
|
var ct = "room_tile"
|
||||||
var tower_angles = {
|
var tower_angles = {
|
||||||
@@ -60,31 +60,32 @@ func _ready():
|
|||||||
xform.basis = Basis().rotated(Vector3.UP, tower_angles[i][j])
|
xform.basis = Basis().rotated(Vector3.UP, tower_angles[i][j])
|
||||||
if layer == layers - 1:
|
if layer == layers - 1:
|
||||||
var twr = "tower_roof_tile"
|
var twr = "tower_roof_tile"
|
||||||
call_deferred("place", twr, xform)
|
call("place", twr, xform)
|
||||||
else:
|
else:
|
||||||
var tw = "tower_walls_tile"
|
var tw = "tower_walls_tile"
|
||||||
call_deferred("place", tw, xform)
|
call("place", tw, xform)
|
||||||
var st = "stairs_tile"
|
var st = "stairs_tile"
|
||||||
call_deferred("place", st, xform)
|
call("place", st, xform)
|
||||||
if layer == 1:
|
if layer == 1:
|
||||||
var tfl = "tower_floor_tile"
|
var tfl = "tower_floor_tile"
|
||||||
call_deferred("place", tfl, xform)
|
call("place", tfl, xform)
|
||||||
|
call("place", "courtroom", Transform(Basis(), Vector3(-2, 0, 0)))
|
||||||
var car = Spatial.new()
|
var car = Spatial.new()
|
||||||
car.add_to_group("spawn")
|
car.add_to_group("spawn")
|
||||||
car.add_to_group("keep")
|
car.add_to_group("keep")
|
||||||
car.add_to_group("car")
|
car.add_to_group("car")
|
||||||
add_child(car)
|
add_child(car)
|
||||||
car.global_transform.origin = Vector3(-3, 0, -3)
|
car.global_transform.origin = Vector3(-5, 0, -5)
|
||||||
for e in range(5):
|
# for e in range(5):
|
||||||
var major_f = Spatial.new()
|
# var major_f = Spatial.new()
|
||||||
major_f.add_to_group("spawn")
|
# major_f.add_to_group("spawn")
|
||||||
if e == 0:
|
# if e == 0:
|
||||||
major_f.add_to_group("male")
|
# major_f.add_to_group("male")
|
||||||
else:
|
# else:
|
||||||
major_f.add_to_group("female")
|
# major_f.add_to_group("female")
|
||||||
major_f.add_to_group("keep")
|
# major_f.add_to_group("keep")
|
||||||
add_child(major_f)
|
# add_child(major_f)
|
||||||
major_f.global_transform = Transform(Basis(), Vector3(cos(PI / 3 * e) * 2.0, 0, sin(PI / 3 * e) * 2.0) + Vector3(10.0, 0, 0))
|
# major_f.global_transform = Transform(Basis(), Vector3(cos(PI / 3 * e) * 2.0, 0, sin(PI / 3 * e) * 2.0) + Vector3(10.0, 0, 0))
|
||||||
print("PALACE done")
|
print("PALACE done")
|
||||||
|
|
||||||
func place(obj: String, where: Transform):
|
func place(obj: String, where: Transform):
|
||||||
@@ -93,19 +94,19 @@ func place(obj: String, where: Transform):
|
|||||||
func spawn_wall(layer:int, i: int, j: int, xform: Transform):
|
func spawn_wall(layer:int, i: int, j: int, xform: Transform):
|
||||||
if layer == layers - 1:
|
if layer == layers - 1:
|
||||||
var rt = "roof_tile"
|
var rt = "roof_tile"
|
||||||
call_deferred("place", rt, xform)
|
call("place", rt, xform)
|
||||||
elif (j != palace_size / 2.0 && i != palace_size / 2.0)|| layer > 2:
|
elif (j != palace_size / 2.0 && i != palace_size / 2.0)|| layer > 2:
|
||||||
var ct = "room_tile"
|
var ct = "room_tile"
|
||||||
call_deferred("place", ct, xform)
|
call("place", ct, xform)
|
||||||
elif (j == palace_size / 2.0 && i != palace_size / 2.0) && layer == 1:
|
elif (j == palace_size / 2.0 && i != palace_size / 2.0) && layer == 1:
|
||||||
var ent = "entry_tile"
|
var ent = "entry_tile"
|
||||||
call_deferred("place", ent, xform)
|
call("place", ent, xform)
|
||||||
elif (j != palace_size / 2.0 && i == palace_size / 2.0) && layer == 1:
|
elif (j != palace_size / 2.0 && i == palace_size / 2.0) && layer == 1:
|
||||||
var gw = "gate_bottom_tile"
|
var gw = "gate_bottom_tile"
|
||||||
call_deferred("place", gw, xform)
|
call("place", gw, xform)
|
||||||
elif (j != palace_size / 2.0 && i == palace_size / 2.0) && layer == 2:
|
elif (j != palace_size / 2.0 && i == palace_size / 2.0) && layer == 2:
|
||||||
var gw = "gate_top_tile"
|
var gw = "gate_top_tile"
|
||||||
call_deferred("place", gw, xform)
|
call("place", gw, xform)
|
||||||
elif (j == palace_size / 2.0 && i != palace_size / 2.0) && layer == 2:
|
elif (j == palace_size / 2.0 && i != palace_size / 2.0) && layer == 2:
|
||||||
var ct = "room_tile"
|
var ct = "room_tile"
|
||||||
call_deferred("place", ct, xform)
|
call("place", ct, xform)
|
||||||
|
|||||||
1082
objects/palace.gltf
1082
objects/palace.gltf
File diff suppressed because it is too large
Load Diff
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
|
|||||||
Binary file not shown.
BIN
objects/stone_001.material
Normal file
BIN
objects/stone_001.material
Normal file
Binary file not shown.
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
|
|||||||
BIN
objects/wood.material
Normal file
BIN
objects/wood.material
Normal file
Binary file not shown.
BIN
objects/woodBark.material
Normal file
BIN
objects/woodBark.material
Normal file
Binary file not shown.
BIN
objects/woodBirch_001.material
Normal file
BIN
objects/woodBirch_001.material
Normal file
Binary file not shown.
BIN
objects/wood_006.material
Normal file
BIN
objects/wood_006.material
Normal file
Binary file not shown.
@@ -20,11 +20,14 @@ _global_script_class_icons={
|
|||||||
|
|
||||||
[application]
|
[application]
|
||||||
|
|
||||||
run/main_scene="res://world.tscn"
|
config/name="academy2"
|
||||||
|
run/main_scene="res://ui/main_menu.tscn"
|
||||||
|
config/use_custom_user_dir=true
|
||||||
|
config/custom_user_dir_name="academy2"
|
||||||
|
run/flush_stdout_on_print=true
|
||||||
|
|
||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
Map="res://autoload/map.tscn"
|
|
||||||
characters="*res://autoload/characters.gd"
|
characters="*res://autoload/characters.gd"
|
||||||
controls="*res://autoload/controls.gd"
|
controls="*res://autoload/controls.gd"
|
||||||
doors="*res://autoload/doors.gd"
|
doors="*res://autoload/doors.gd"
|
||||||
@@ -33,6 +36,7 @@ inventory="*res://autoload/inventory.gd"
|
|||||||
streaming="*res://autoload/streaming.tscn"
|
streaming="*res://autoload/streaming.tscn"
|
||||||
freezer="*res://autoload/freezer.gd"
|
freezer="*res://autoload/freezer.gd"
|
||||||
scenario="*res://autoload/scenario.gd"
|
scenario="*res://autoload/scenario.gd"
|
||||||
|
orchestration="*res://autoload/orchestration.tscn"
|
||||||
|
|
||||||
[debug]
|
[debug]
|
||||||
|
|
||||||
@@ -80,6 +84,16 @@ fps_mode={
|
|||||||
"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":86,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
"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":86,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
action2={
|
||||||
|
"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":70,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
attack={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"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)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
[physics]
|
[physics]
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
@@ -28,11 +29,11 @@ meshes/lightmap_texel_size=0.1
|
|||||||
skins/use_named_skins=true
|
skins/use_named_skins=true
|
||||||
external_files/store_in_subdir=false
|
external_files/store_in_subdir=false
|
||||||
animation/import=true
|
animation/import=true
|
||||||
animation/fps=15
|
animation/fps=24.0
|
||||||
animation/filter_script=""
|
animation/filter_script=""
|
||||||
animation/storage=false
|
animation/storage=false
|
||||||
animation/keep_custom_tracks=false
|
animation/keep_custom_tracks=false
|
||||||
animation/optimizer/enabled=true
|
animation/optimizer/enabled=false
|
||||||
animation/optimizer/max_linear_error=0.05
|
animation/optimizer/max_linear_error=0.05
|
||||||
animation/optimizer/max_angular_error=0.01
|
animation/optimizer/max_angular_error=0.01
|
||||||
animation/optimizer/max_angle=22
|
animation/optimizer/max_angle=22
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
@@ -28,11 +29,11 @@ meshes/lightmap_texel_size=0.1
|
|||||||
skins/use_named_skins=true
|
skins/use_named_skins=true
|
||||||
external_files/store_in_subdir=false
|
external_files/store_in_subdir=false
|
||||||
animation/import=true
|
animation/import=true
|
||||||
animation/fps=15
|
animation/fps=24.0
|
||||||
animation/filter_script=""
|
animation/filter_script=""
|
||||||
animation/storage=false
|
animation/storage=false
|
||||||
animation/keep_custom_tracks=false
|
animation/keep_custom_tracks=false
|
||||||
animation/optimizer/enabled=true
|
animation/optimizer/enabled=false
|
||||||
animation/optimizer/max_linear_error=0.05
|
animation/optimizer/max_linear_error=0.05
|
||||||
animation/optimizer/max_angular_error=0.01
|
animation/optimizer/max_angular_error=0.01
|
||||||
animation/optimizer/max_angle=22
|
animation/optimizer/max_angle=22
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=1
|
meshes/storage=1
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
scenes/clothes/mystress-dress.mesh
Normal file
BIN
scenes/clothes/mystress-dress.mesh
Normal file
Binary file not shown.
BIN
scenes/clothes/mystress-necklace.mesh
Normal file
BIN
scenes/clothes/mystress-necklace.mesh
Normal file
Binary file not shown.
BIN
scenes/clothes/mystress_clothes.material
Normal file
BIN
scenes/clothes/mystress_clothes.material
Normal file
Binary file not shown.
BIN
scenes/clothes/mystress_clothes_Base_color.png
Normal file
BIN
scenes/clothes/mystress_clothes_Base_color.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 146 KiB |
37
scenes/clothes/mystress_clothes_Base_color.png.import
Normal file
37
scenes/clothes/mystress_clothes_Base_color.png.import
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path.s3tc="res://.import/mystress_clothes_Base_color.png-05bc7913628fc71aa57eb46689def024.s3tc.stex"
|
||||||
|
path.etc2="res://.import/mystress_clothes_Base_color.png-05bc7913628fc71aa57eb46689def024.etc2.stex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": [ "s3tc", "etc2" ],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://scenes/clothes/mystress_clothes_Base_color.png"
|
||||||
|
dest_files=[ "res://.import/mystress_clothes_Base_color.png-05bc7913628fc71aa57eb46689def024.s3tc.stex", "res://.import/mystress_clothes_Base_color.png-05bc7913628fc71aa57eb46689def024.etc2.stex" ]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_mode=0
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
flags/repeat=true
|
||||||
|
flags/filter=true
|
||||||
|
flags/mipmaps=true
|
||||||
|
flags/anisotropic=false
|
||||||
|
flags/srgb=1
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/HDR_as_SRGB=false
|
||||||
|
process/invert_color=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
stream=false
|
||||||
|
size_limit=0
|
||||||
|
detect_3d=false
|
||||||
|
svg/scale=1.0
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
@@ -0,0 +1,37 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path.s3tc="res://.import/mystress_clothes_Metallic-mystress_clothes_Roughness.png-4f6eace375ef874de1f81e5d5e0055e8.s3tc.stex"
|
||||||
|
path.etc2="res://.import/mystress_clothes_Metallic-mystress_clothes_Roughness.png-4f6eace375ef874de1f81e5d5e0055e8.etc2.stex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": [ "s3tc", "etc2" ],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://scenes/clothes/mystress_clothes_Metallic-mystress_clothes_Roughness.png"
|
||||||
|
dest_files=[ "res://.import/mystress_clothes_Metallic-mystress_clothes_Roughness.png-4f6eace375ef874de1f81e5d5e0055e8.s3tc.stex", "res://.import/mystress_clothes_Metallic-mystress_clothes_Roughness.png-4f6eace375ef874de1f81e5d5e0055e8.etc2.stex" ]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_mode=0
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
flags/repeat=true
|
||||||
|
flags/filter=true
|
||||||
|
flags/mipmaps=true
|
||||||
|
flags/anisotropic=false
|
||||||
|
flags/srgb=2
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/HDR_as_SRGB=false
|
||||||
|
process/invert_color=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
stream=false
|
||||||
|
size_limit=0
|
||||||
|
detect_3d=false
|
||||||
|
svg/scale=1.0
|
||||||
@@ -20,6 +20,7 @@ nodes/use_legacy_names=true
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=1
|
meshes/storage=1
|
||||||
|
|||||||
Binary file not shown.
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ nodes/use_legacy_names=true
|
|||||||
materials/location=1
|
materials/location=1
|
||||||
materials/storage=1
|
materials/storage=1
|
||||||
materials/keep_on_reimport=true
|
materials/keep_on_reimport=true
|
||||||
|
meshes/octahedral_compression=true
|
||||||
meshes/compress=true
|
meshes/compress=true
|
||||||
meshes/ensure_tangents=true
|
meshes/ensure_tangents=true
|
||||||
meshes/storage=0
|
meshes/storage=0
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
[gd_scene load_steps=3 format=2]
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
[sub_resource type="BoxShape" id=1]
|
[sub_resource type="BoxShape" id=1]
|
||||||
extents = Vector3( 0.0287175, 0.0259563, 0.0102432 )
|
extents = Vector3( 0.1, 0.05, 0.05 )
|
||||||
|
|
||||||
[sub_resource type="BoxShape" id=2]
|
[sub_resource type="BoxShape" id=2]
|
||||||
extents = Vector3( 0.0197592, 0.0623342, 0.0109773 )
|
extents = Vector3( 0.07, 0.1, 0.05 )
|
||||||
|
|
||||||
[node name="dagger_collision" type="Area" groups=[
|
[node name="dagger_collision" type="Area" groups=["weapon_hit"]]
|
||||||
"weapon_hit",
|
collision_layer = 4
|
||||||
]]
|
collision_mask = 8
|
||||||
monitoring = false
|
monitoring = false
|
||||||
|
|
||||||
[node name="CollisionShape" type="CollisionShape" parent="."]
|
[node name="CollisionShape" type="CollisionShape" parent="."]
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user