This commit is contained in:
Segey Lapin
2021-12-24 23:56:10 +03:00
parent d401cf1090
commit f62e7fa720
113 changed files with 198252 additions and 412103 deletions

View File

@@ -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"):
character_physics(player) if streaming.can_spawn:
# for e in get_tree().get_nodes_in_group("character") + [player]: character_physics(player)
# if e && e.has_meta("animation_tree"):
# character_physics(e)

View File

@@ -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

View File

@@ -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:

View File

@@ -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",

View File

@@ -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")

View File

@@ -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
View 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)

View 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 )

View File

@@ -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

View File

@@ -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,35 +319,48 @@ 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
for n in get_tree().get_nodes_in_group("spawn"): if can_spawn:
var ok = false for n in get_tree().get_nodes_in_group("spawn"):
if !n.is_in_group("keep"): var ok = false
var where = n.get_global_transform().origin # if !n.is_in_group("keep"):
var from = where # var where = n.get_global_transform().origin
var to = where # var from = where
from.y -= 8.0 # var to = where
to.y += 8.0 # from.y -= 8.0
var result = space_state.intersect_ray(from, to) # to.y += 8.0
if result.empty() || !result.has("collider"): # var result = space_state.intersect_ray(from, to)
continue # if result.empty() || !result.has("collider"):
if result.collider: # continue
n.global_transform.origin = result.position # if result.collider:
ok = true # n.global_transform.origin = result.position
if ok || n.is_in_group("keep"): # ok = true
if n.is_in_group("male"): ok = true
characters.replace_character(n, "male", ["cmdq", "marker", "hurtboxes", "student"]) if ok || n.is_in_group("keep"):
elif n.is_in_group("female"): var base = ["cmdq", "marker", "hurtboxes"]
characters.replace_character(n, "female", ["cmdq", "marker", "hurtboxes", "student"]) var g = ""
elif n.is_in_group("car"): if n.is_in_group("male"):
var p1 = cam.global_transform.origin g = "male"
var p2 = n.global_transform.origin elif n.is_in_group("female"):
if p1.distance_squared_to(p2) < 5000.0: g = "female"
var c = car.instance() if n.is_in_group("mystress"):
c.add_to_group("saved_vehicle") base.push_back("mystress")
var p = get_tree().root if n.is_in_group("student"):
p.add_child(c) base.push_back("student")
c.global_transform = n.global_transform elif n.is_in_group("bandit"):
n.queue_free() base.push_back("bandit")
if g.length() > 0:
print(g, " ", base)
characters.replace_character(n, g, base)
elif n.is_in_group("car"):
var p1 = cam.global_transform.origin
var p2 = n.global_transform.origin
if p1.distance_squared_to(p2) < 5000.0:
var c = car.instance()
c.add_to_group("saved_vehicle")
var p = get_tree().root
p.add_child(c)
c.global_transform = n.global_transform
n.queue_free()
# buildings # buildings
@@ -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
View 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
View 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 )

View File

@@ -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

View File

@@ -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
View 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
View 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

Binary file not shown.

12
hostile_dwelling.gd Normal file
View 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
View 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

Binary file not shown.

BIN
objects/DarkRed.material Normal file

Binary file not shown.

Binary file not shown.

BIN
objects/Grey.material Normal file

Binary file not shown.

BIN
objects/Grey_001.material Normal file

Binary file not shown.

Binary file not shown.

BIN
objects/Metal.material Normal file

Binary file not shown.

BIN
objects/Red.material Normal file

Binary file not shown.

BIN
objects/Red_001.material Normal file

Binary file not shown.

BIN
objects/White.material Normal file

Binary file not shown.

BIN
objects/White_001.material Normal file

Binary file not shown.

BIN
objects/Wood.material Normal file

Binary file not shown.

BIN
objects/WoodLight.material Normal file

Binary file not shown.

BIN
objects/Wood_001.material Normal file

Binary file not shown.

BIN
objects/Wood_003.material Normal file

Binary file not shown.

Binary file not shown.

BIN
objects/bandit-camp.bin Normal file

Binary file not shown.

1606
objects/bandit-camp.gltf Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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

Binary file not shown.

32
objects/courtroom.gd Normal file
View 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
View 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 )

Binary file not shown.

Binary file not shown.

View File

@@ -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)

File diff suppressed because it is too large Load Diff

View File

@@ -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

Binary file not shown.

View File

@@ -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

Binary file not shown.

BIN
objects/woodBark.material Normal file

Binary file not shown.

Binary file not shown.

BIN
objects/wood_006.material Normal file

Binary file not shown.

View File

@@ -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]

View File

@@ -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.

File diff suppressed because it is too large Load Diff

View File

@@ -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

View File

@@ -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.

View File

@@ -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.

File diff suppressed because it is too large Load Diff

View File

@@ -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.

View File

@@ -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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

View 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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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