Large update with mostly rewritten character subsystem
This commit is contained in:
Vendored
+8
-1
@@ -23,7 +23,8 @@ node('docker && ubuntu-16.04') {
|
||||
if (params.DOWNLOAD_TEMPLATES) {
|
||||
sh '''#!/bin/sh
|
||||
rm -f godot-templates.tar.gz
|
||||
wget -c https://github.com/slapin/godot-templates-build/releases/download/2019_31_0802_1959/godot-templates.tar.gz
|
||||
curl -s https://api.github.com/repos/slapin/godot-templates-build/releases/latest|grep browser_download_url|cut -d : -f2-|cut -d '"' -f 2|wget -i -
|
||||
# wget -c https://github.com/slapin/godot-templates-build/releases/download/2019_31_0802_1959/godot-templates.tar.gz
|
||||
'''
|
||||
}
|
||||
sh '''#!/bin/sh
|
||||
@@ -97,10 +98,16 @@ node('docker && ubuntu-16.04') {
|
||||
ls -l
|
||||
'''
|
||||
}
|
||||
stage("artifacts") {
|
||||
archiveArtifacts artifacts: "proto2-html5.zip", onlyIfSuccessful: true
|
||||
archiveArtifacts artifacts: "BallKickers-windows.zip", onlyIfSuccessful: true
|
||||
archiveArtifacts artifacts: "BallKickers-linux.zip", onlyIfSuccessful: true
|
||||
}
|
||||
stage("itch.io") {
|
||||
withCredentials([string(credentialsId: 'itchio_token', variable: 'itchio_token')]) {
|
||||
withEnv(["BUTLER_API_KEY=$itchio_token"]) {
|
||||
sh '''#!/bin/sh
|
||||
exit 0
|
||||
export PATH=$PATH:$(pwd)/butler
|
||||
butler push proto2-html5.zip slapin/ball-kickers:html
|
||||
H=$?
|
||||
|
||||
@@ -27,14 +27,14 @@ func add_player(team: int, pl: Dictionary):
|
||||
_teams[team] = [pl]
|
||||
else:
|
||||
_teams[team].push_back(pl)
|
||||
assert pl != null
|
||||
assert(pl != null)
|
||||
ch2team[pl.scene] = team
|
||||
func add_cheer(team: int, ch: Dictionary):
|
||||
if !_cheers.has(team):
|
||||
_cheers[team] = [ch]
|
||||
else:
|
||||
_cheers[team].push_back(ch)
|
||||
assert ch != null
|
||||
assert(ch != null)
|
||||
ch2team[ch.scene] = team
|
||||
func add_cheer_game_location(team: int, loc: Vector2):
|
||||
if !_cheer_locations.has(team):
|
||||
@@ -130,7 +130,7 @@ func catch_ball(pl):
|
||||
_ball_carrier = pl
|
||||
var max_imp = 500.0
|
||||
func drop_ball(pl):
|
||||
assert _main != null
|
||||
assert(_main != null)
|
||||
_ball_instance.kinematic = false
|
||||
_ball_instance.new_parent = _main
|
||||
_ball_instance.update = true
|
||||
@@ -226,7 +226,7 @@ func _process(delta):
|
||||
STATE_RUNNING:
|
||||
for c in _teams.keys():
|
||||
for pl in _teams[c]:
|
||||
assert pl.scene != null
|
||||
assert(pl.scene != null)
|
||||
if !_ball_carrier || (pl != _ball_carrier && _ball_team != c):
|
||||
var velocity = striker(pl, delta)
|
||||
velocity = pl.scene.velocity.linear_interpolate(velocity, 0.3 * delta)
|
||||
|
||||
@@ -35,14 +35,14 @@ func add_player(team: int, pl: Dictionary):
|
||||
_teams[team] = [pl]
|
||||
else:
|
||||
_teams[team].push_back(pl)
|
||||
assert pl != null
|
||||
assert(pl != null)
|
||||
ch2team[pl.scene] = team
|
||||
func add_cheer(team: int, ch: Dictionary):
|
||||
if !_cheers.has(team):
|
||||
_cheers[team] = [ch]
|
||||
else:
|
||||
_cheers[team].push_back(ch)
|
||||
assert ch != null
|
||||
assert(ch != null)
|
||||
ch2team[ch.scene] = team
|
||||
func add_cheer_game_location(team: int, loc: Vector3):
|
||||
if !_cheer_locations.has(team):
|
||||
@@ -95,18 +95,18 @@ func start_game():
|
||||
_state = STATE_START
|
||||
for t in _teams.keys():
|
||||
for ch in _teams[t]:
|
||||
assert ch != null
|
||||
assert(ch != null)
|
||||
print(ch)
|
||||
assert ch.scene != null
|
||||
assert(ch.scene != null)
|
||||
print("start: ", _team_start[t])
|
||||
ch.scene.walkto(_team_start[t] + Vector3(randf() * 2.0 - 1.0, 0.0, randf() * 2.0 - 1.0), 1.0 + ch.speed + randf() * ch.speed * 0.5)
|
||||
start_timeout = 10.0
|
||||
var loc = 0
|
||||
for t in _cheers.keys():
|
||||
for ch in _cheers[t]:
|
||||
assert ch != null
|
||||
assert(ch != null)
|
||||
print(ch)
|
||||
assert ch.scene != null
|
||||
assert(ch.scene != null)
|
||||
ch.scene.walkto(_cheer_locations[t][loc % _cheer_locations[t].size()], 1.0 + ch.speed + randf() * ch.speed * 0.5)
|
||||
loc += 1
|
||||
for t in _teams.keys():
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 747 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"outpath": "characters/hair",
|
||||
"generate_external_material": true
|
||||
}
|
||||
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: 1.9 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.0 MiB |
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"outpath": "characters/hair",
|
||||
"generate_external_material": true
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 206 KiB |
+193
-12
@@ -1,17 +1,198 @@
|
||||
extends Node
|
||||
|
||||
# Declare member variables here. Examples:
|
||||
# var a = 2
|
||||
# var b = "text"
|
||||
#var accessory_data = {}
|
||||
|
||||
#var slots = ["body", "top", "panties", "shirt", "pants"]
|
||||
#var slots_female = ["body", "top", "panties"]
|
||||
#var slots_male = ["body"]
|
||||
#var helpers = {
|
||||
# "body": "base",
|
||||
# "top": "base",
|
||||
# "panties": "base",
|
||||
# "shirt": "tights",
|
||||
# "pants": "tights"
|
||||
# }
|
||||
|
||||
#var data_male = {}
|
||||
#var data_female = {}
|
||||
|
||||
#var characters = [load("res://characters/male_2018.tscn"), load("res://characters/female_2018.tscn")]
|
||||
#var character_data = []
|
||||
|
||||
#func load_accessory_data():
|
||||
# var fd = File.new()
|
||||
# fd.open("res://characters/accessory.json", File.READ)
|
||||
# var confs = fd.get_as_text()
|
||||
# var json = JSON.parse(confs)
|
||||
# accessory_data = json.result
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
var characters = [load("res://characters/male_2018.tscn"), load("res://characters/female_2018.tscn")]
|
||||
func _ready():
|
||||
pass # Replace with function body.
|
||||
# var cha_male: CharacterModifierSet
|
||||
# var cha_female: CharacterModifierSet
|
||||
# var base_male = characters[0].instance()
|
||||
# var base_female = characters[1].instance()
|
||||
# var fd = File.new()
|
||||
## fd.open("characters/blendmaps.bin", File.READ);
|
||||
# cha_male = CharacterModifierSet.new()
|
||||
# character_data.push_back(cha_male)
|
||||
# cha_female = CharacterModifierSet.new()
|
||||
# character_data.push_back(cha_female)
|
||||
# cha_female.set_base_name("body")
|
||||
# cha_male.set_base_name("body")
|
||||
# for e in slots:
|
||||
# print(e)
|
||||
# cha_female.add_slot(e, helpers[e], 1)
|
||||
# cha_male.add_slot(e, helpers[e], 1)
|
||||
# cha_female.add_mesh_scene(characters[1])
|
||||
# cha_male.add_mesh_scene(characters[0])
|
||||
# cha_female.process()
|
||||
# cha_male.process()
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
#func _process(delta):
|
||||
# pass
|
||||
#func _physics_process(delta):
|
||||
# for obj in get_tree().get_nodes_in_group("characters"):
|
||||
# pass
|
||||
### cha_male.add_bone_modifier("head_scale", base_male, "head", Transform().scaled(Vector3(1.3, 1.3, 1.3)))
|
||||
### cha_female.add_bone_modifier("head_scale", base_female, "head", Transform().scaled(Vector3(1.3, 1.3, 1.3)))
|
||||
### cha_male.add_bone_modifier("head_up", base_male, "head", Transform().translated(Vector3(0.0, 0.1, 0.0)))
|
||||
### cha_female.add_bone_modifier("head_up", base_female, "head", Transform().translated(Vector3(0.0, 0.1, 0.0)))
|
||||
### # cha_male.add_bone_modifier("shoulder_l_rot", base_male, "shoulder01_L", Transform().rotated(Vector3(1, 0, 0), 95 * PI / 360.0))
|
||||
### # cha_female.add_bone_modifier("shoulder_l_rot", base_female, "shoulder01_L", Transform().rotated(Vector3(1, 0, 0), 95 * PI / 360.0))
|
||||
### cha_male.add_bone_modifier("height", base_male, "pelvis", Transform().scaled(Vector3(1.2, 1.2, 1.2)))
|
||||
### cha_female.add_bone_modifier("height", base_female, "pelvis", Transform().scaled(Vector3(1.2, 1.2, 1.2)))
|
||||
### # cha_male.add_bone_modifier_pair("shoulder", base_male,
|
||||
### # ["shoulder01_L", Transform().rotated(Vector3(1, 0, 0), 95 * PI / 360.0)],
|
||||
### # ["shoulder01_R", Transform().rotated(Vector3(1, 0, 0), 95 * PI / 360.0)])
|
||||
### # cha_female.add_bone_modifier_pair("shoulder", base_female,
|
||||
### # ["shoulder01_L", Transform().rotated(Vector3(1, 0, 0), 95 * PI / 360.0)],
|
||||
### # ["shoulder01_R", Transform().rotated(Vector3(1, 0, 0), 95 * PI / 360.0)])
|
||||
### cha_male.add_bone_modifier_group("mouth_up", base_male,
|
||||
### PoolStringArray(["special01", "special04", "levator04_L", "levator04_R"]),
|
||||
### [Transform().translated(Vector3(0.0, -0.004, 0.0)),
|
||||
### Transform().translated(Vector3(0.0, 0.008, 0.0)),
|
||||
### Transform().translated(Vector3(0.016, -0.019, 0.0)),
|
||||
### Transform().translated(Vector3(-0.016, -0.019, 0.0))
|
||||
### ])
|
||||
### cha_female.add_bone_modifier_group("mouth_up", base_female,
|
||||
### PoolStringArray(["special01", "special04", "levator04_L", "levator04_R"]),
|
||||
### [Transform().translated(Vector3(0.0, -0.004, 0.0)),
|
||||
### Transform().translated(Vector3(0.0, 0.008, 0.0)),
|
||||
### Transform().translated(Vector3(0.016, -0.019, 0.0)),
|
||||
### Transform().translated(Vector3(-0.016, -0.019, 0.0))
|
||||
### ])
|
||||
### cha_male.add_bone_modifier_group("eyes_up", base_male,
|
||||
### PoolStringArray(["orbicularis03_L", "orbicularis04_L", "eye_L", "eye_tracker.L",
|
||||
### "orbicularis03_R", "orbicularis04_R", "eye_R", "eye_tracker.R"]),
|
||||
### [Transform().translated(Vector3(0.0, 0.002, 0.004)),
|
||||
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
|
||||
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
|
||||
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
|
||||
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
|
||||
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
|
||||
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
|
||||
### Transform().translated(Vector3(0.0, 0.002, 0.004))])
|
||||
### cha_female.add_bone_modifier_group("eyes_up", base_female,
|
||||
### PoolStringArray(["orbicularis03_L", "orbicularis04_L", "eye_L",
|
||||
### "orbicularis03_R", "orbicularis04_R", "eye_R"]),
|
||||
### [Transform().translated(Vector3(0.0, 0.002, 0.004)),
|
||||
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
|
||||
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
|
||||
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
|
||||
### Transform().translated(Vector3(0.0, 0.002, 0.004)),
|
||||
### Transform().translated(Vector3(0.0, 0.002, 0.004))])
|
||||
### cha_male.add_bone_modifier_group("eyebrows_up", base_male,
|
||||
### PoolStringArray(["temporalis01_L", "temporalis01_R"]),
|
||||
### [Transform().translated(Vector3(0.0, 0.015, 0.0)),
|
||||
### Transform().translated(Vector3(0.0, 0.015, 0.0))])
|
||||
### cha_female.add_bone_modifier_group("eyebrows_up", base_female,
|
||||
### PoolStringArray(["temporalis01_L", "temporalis01_R"]),
|
||||
### [Transform().translated(Vector3(0.0, 0.015, 0.0)),
|
||||
### Transform().translated(Vector3(0.0, 0.015, 0.0))])
|
||||
### cha_male.add_bone_modifier_group("eyebrows_rotate1", base_male,
|
||||
### PoolStringArray(["oculi02_L", "oculi02_R"]),
|
||||
### [Transform().rotated(Vector3(0, 1, 0), -PI/14.0),
|
||||
### Transform().rotated(Vector3(0, 1, 0), PI/14.0)])
|
||||
### cha_female.add_bone_modifier_group("eyebrows_rotate1", base_female,
|
||||
### PoolStringArray(["oculi02_L", "oculi02_R"]),
|
||||
### [Transform().rotated(Vector3(0, 1, 0), -PI/14.0),
|
||||
### Transform().rotated(Vector3(0, 1, 0), PI/14.0)])
|
||||
### cha_male.add_bone_modifier_group("eyebrows_rotate2", base_male,
|
||||
### PoolStringArray(["oculi01_L", "oculi01_R"]),
|
||||
### [Transform().rotated(Vector3(0, 1, 0), -PI/4.0),
|
||||
### Transform().rotated(Vector3(0, 1, 0), PI/4.0)])
|
||||
### cha_female.add_bone_modifier_group("eyebrows_rotate2", base_female,
|
||||
### PoolStringArray(["oculi01_L", "oculi01_R"]),
|
||||
### [Transform().rotated(Vector3(0, 1, 0), -PI/4.0),
|
||||
### Transform().rotated(Vector3(0, 1, 0), PI/4.0)])
|
||||
# base_male.queue_free()
|
||||
# base_female.queue_free()
|
||||
# load_accessory_data()
|
||||
CharacterGenderList.config()
|
||||
#var root_scene: Node
|
||||
|
||||
#func set_root_scene(sc: Node):
|
||||
# root_scene = sc
|
||||
|
||||
var genders = ["male", "female"]
|
||||
|
||||
#func select_front_hair(ch: Node, value: float):
|
||||
# var cha = ch.get_meta("mod")
|
||||
# var id = ch.get_meta("data_id")
|
||||
# var front_list = cha.get_accessory_list(genders[id], "hair", "front_hair")
|
||||
# var num = int(front_list.size() * value)
|
||||
# num = clamp(num, 0, front_list.size() - 1)
|
||||
# character_data[id].set_accessory(ch, "front_hair", genders[id], "hair", front_list[num])
|
||||
# ch.set_meta("front_hair", front_list[num])
|
||||
#
|
||||
#func select_back_hair(ch: Node, value: float):
|
||||
# var cha = ch.get_meta("mod")
|
||||
# var id = ch.get_meta("data_id")
|
||||
# var back_list = cha.get_accessory_list(genders[id], "hair", "back_hair")
|
||||
# var num = int(front_list.size() * value)
|
||||
# num = clamp(num, 0, front_list.size() - 1)
|
||||
# character_data[id].set_accessory(ch, "front_hair", genders[id], "hair", front_list[num])
|
||||
# ch.set_meta("back_hair", "back_hair1")
|
||||
|
||||
func spawn_character(id, xform):
|
||||
# var ch = character_data[id].spawn()
|
||||
var ch = CharacterInstanceList.create(genders[id], xform, {})
|
||||
# root_scene.add_child(ch)
|
||||
# ch.transform = xform
|
||||
ch.set_meta("data_id", id)
|
||||
# character_data[id].hide_slot(ch, "hair")
|
||||
# character_data[id].set_accessory(ch, "front_hair", genders[id], "hair", "front_hair1")
|
||||
# character_data[id].set_accessory(ch, "back_hair", genders[id], "hair", "back_hair1")
|
||||
# ch.set_meta("front_hair", "front_hair1")
|
||||
# ch.set_meta("back_hair", "back_hair1")
|
||||
return ch
|
||||
|
||||
func get_modifier_list(ch: Node):
|
||||
# var cha = ch.get_meta("mod")
|
||||
# return cha.get_modifier_list()
|
||||
return CharacterInstanceList.get_base_modifier_list()
|
||||
|
||||
func get_modifier_value(ch: Node, mod_id):
|
||||
# var cha = ch.get_meta("mod")
|
||||
# var mesh_id = ch.get_meta("mesh_id")
|
||||
# return cha.get_modifier_value(mesh_id, mod_id)
|
||||
return CharacterInstanceList.get_mod_value(ch, mod_id)
|
||||
|
||||
func set_modifier_value(ch: Node, mod_id, value):
|
||||
# var cha = ch.get_meta("mod")
|
||||
# var mesh_id = ch.get_meta("mesh_id")
|
||||
# cha.set_modifier_value(mesh_id, mod_id, value)
|
||||
CharacterInstanceList.set_mod_value(ch, mod_id, value)
|
||||
|
||||
#func modify(ch: Node):
|
||||
# var cha = ch.get_meta("mod")
|
||||
# cha.modify(ch)
|
||||
func update():
|
||||
CharacterInstanceList.update()
|
||||
|
||||
func remove(ch):
|
||||
# var cha = ch.get_meta("mod")
|
||||
# cha.remove(ch)
|
||||
CharacterInstanceList.remove(ch)
|
||||
|
||||
#func spawn_accessory(slot: MeshInstance, gender: String, atype: String, aname: String):
|
||||
# var mesh: ArrayMesh = load(accessory_data[gender][atype][aname].path)
|
||||
# for c in range(mesh.get_surface_count()):
|
||||
# var mat: SpatialMaterial = load(accessory_data[gender][atype][aname].materials[c].path)
|
||||
# mesh.surface_set_material(c, mat)
|
||||
# slot.mesh = mesh
|
||||
|
||||
@@ -101,10 +101,10 @@ func _unhandled_input(event):
|
||||
if event.button_mask & BUTTON_MASK_LEFT:
|
||||
click2d = event.position
|
||||
click2d_update = true
|
||||
print("click!")
|
||||
# print("click!")
|
||||
func _physics_process(delta):
|
||||
if click2d_update:
|
||||
print("click! 2")
|
||||
# print("click! 2")
|
||||
if camera:
|
||||
var world : = camera.get_world()
|
||||
var space := world.direct_space_state
|
||||
@@ -115,7 +115,7 @@ func _physics_process(delta):
|
||||
if result.has("position"):
|
||||
click3d = result.position
|
||||
click3d_update = true
|
||||
print("click! 3")
|
||||
# print("click! 3")
|
||||
emit_signal("user_click", click3d)
|
||||
click2d_update = false
|
||||
|
||||
|
||||
@@ -511,7 +511,7 @@ func convert_vertices():
|
||||
for e in range(vertices.size()):
|
||||
vertices[e]._neighbors = []
|
||||
for h in vertices[e].neighbors:
|
||||
assert h
|
||||
assert(h)
|
||||
# print(pos2vertex[h.pos])
|
||||
vertices[e]._neighbors.push_back(pos2vertex[h.pos]._index)
|
||||
func has_neighbor(v, n):
|
||||
@@ -581,7 +581,7 @@ func remove_neighbor(v, n):
|
||||
# var triangle = [e1, e2, e3]
|
||||
# triangles.push_back(triangle)
|
||||
func sort_edges(edge_data: PoolIntArray) -> PoolIntArray:
|
||||
assert edge_data.size() > 0
|
||||
assert(edge_data.size() > 0)
|
||||
var inb = Array(edge_data)
|
||||
var cur = -1
|
||||
var cur_p = -1
|
||||
@@ -613,7 +613,7 @@ func sort_edges(edge_data: PoolIntArray) -> PoolIntArray:
|
||||
# for p in edge_data:
|
||||
# print(p, ": ", edges[p].p1, " - ", edges[p].p2)
|
||||
# print(ret.size(), " ", edge_data.size(), " ", edge_data, " -> ", ret)
|
||||
assert ret.size() > 0 && ret.size() == edge_data.size()
|
||||
assert(ret.size() > 0 && ret.size() == edge_data.size())
|
||||
return ret
|
||||
func edges2points(edge_data):
|
||||
var ret = {}
|
||||
@@ -631,7 +631,7 @@ func edges2points(edge_data):
|
||||
"road": edges[e].road
|
||||
})
|
||||
idx += 1
|
||||
assert ret.points.size() > 0 && ret.points.size() == edge_data.size()
|
||||
assert(ret.points.size() > 0 && ret.points.size() == edge_data.size())
|
||||
return ret
|
||||
#func build_polygons():
|
||||
# print("triangulation: ", triangulation.size())
|
||||
@@ -1060,8 +1060,8 @@ class VertexData:
|
||||
data = v
|
||||
_road_width = road_width
|
||||
_sidewalk_width = sidewalk_width
|
||||
assert v.has("_index")
|
||||
assert v.has("_neighbors")
|
||||
assert(v.has("_index"))
|
||||
assert(v.has("_neighbors"))
|
||||
func angle_sort_helper(a, b):
|
||||
var v1: Vector2 = a[1] - a[0]
|
||||
var v2: Vector2 = b[1] - b[0]
|
||||
@@ -1069,7 +1069,7 @@ class VertexData:
|
||||
return true
|
||||
return false
|
||||
func get_wedges(vertices: Array) -> Array:
|
||||
assert data
|
||||
assert(data)
|
||||
var edges = []
|
||||
for id in data._neighbors:
|
||||
edges.push_back([data.pos, vertices[id].pos, data._index, id])
|
||||
|
||||
@@ -20,6 +20,11 @@ var quests : = []
|
||||
var team_train_count : = 0
|
||||
# warning-ignore:unused_class_variable
|
||||
var arrow: Spatial
|
||||
# warning-ignore:unused_class_variable
|
||||
var next_scene: String
|
||||
var player_visual = {
|
||||
"gender": "male"
|
||||
}
|
||||
|
||||
func room_event(ev: String):
|
||||
if current_room:
|
||||
|
||||
@@ -0,0 +1,332 @@
|
||||
{
|
||||
"female": {
|
||||
"body": {
|
||||
"body_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/female/body/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/body/body_default.mesh"
|
||||
}
|
||||
},
|
||||
"eyebrows": {
|
||||
"eyebrows_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/female/eyebrows/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/eyebrows/eyebrows_default.mesh"
|
||||
}
|
||||
},
|
||||
"eyelashes": {
|
||||
"eyelashes_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/female/eyelashes/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/eyelashes/eyelashes_default.mesh"
|
||||
}
|
||||
},
|
||||
"eyes": {
|
||||
"eyes_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/female/eyes/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/eyes/eyes_default.mesh"
|
||||
}
|
||||
},
|
||||
"fingernails": {
|
||||
"fingernails_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/female/fingernails/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/fingernails/fingernails_default.mesh"
|
||||
}
|
||||
},
|
||||
"hair": {
|
||||
"back_hair1": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/female/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/hair/back_hair1.mesh"
|
||||
},
|
||||
"back_hair2": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/female/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/hair/back_hair2.mesh"
|
||||
},
|
||||
"back_hair3": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/female/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/hair/back_hair3.mesh"
|
||||
},
|
||||
"front_hair1": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/female/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/hair/front_hair1.mesh"
|
||||
},
|
||||
"front_hair2": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/female/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/hair/front_hair2.mesh"
|
||||
},
|
||||
"front_hair3": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/female/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/hair/front_hair3.mesh"
|
||||
},
|
||||
"front_hair4": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/female/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/hair/front_hair4.mesh"
|
||||
},
|
||||
"hair_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/female/hair/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/hair/hair_default.mesh"
|
||||
}
|
||||
},
|
||||
"panties": {
|
||||
"panties_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/female/panties/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/panties/panties_default.mesh"
|
||||
}
|
||||
},
|
||||
"tears": {
|
||||
"tears_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/female/tears/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/tears/tears_default.mesh"
|
||||
}
|
||||
},
|
||||
"teeth": {
|
||||
"teeth_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/female/teeth/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/teeth/teeth_default.mesh"
|
||||
}
|
||||
},
|
||||
"toenail": {
|
||||
"toenail_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/female/toenail/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/toenail/toenail_default.mesh"
|
||||
}
|
||||
},
|
||||
"tongue": {
|
||||
"tongue_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/female/tongue/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/tongue/tongue_default.mesh"
|
||||
}
|
||||
},
|
||||
"top": {
|
||||
"top_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/female/top/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/female/top/top_default.mesh"
|
||||
}
|
||||
}
|
||||
},
|
||||
"male": {
|
||||
"body": {
|
||||
"body_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/male/body/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/body/body_default.mesh"
|
||||
}
|
||||
},
|
||||
"eyebrows": {
|
||||
"eyebrows_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/male/eyebrows/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/eyebrows/eyebrows_default.mesh"
|
||||
}
|
||||
},
|
||||
"eyelashes": {
|
||||
"eyelashes_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/male/eyelashes/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/eyelashes/eyelashes_default.mesh"
|
||||
}
|
||||
},
|
||||
"eyes": {
|
||||
"eyes_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/male/eyes/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/eyes/eyes_default.mesh"
|
||||
}
|
||||
},
|
||||
"hair": {
|
||||
"back_hair1": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/male/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/hair/back_hair1.mesh"
|
||||
},
|
||||
"back_hair2": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/male/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/hair/back_hair2.mesh"
|
||||
},
|
||||
"back_hair3": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/male/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/hair/back_hair3.mesh"
|
||||
},
|
||||
"front_hair1": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/male/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/hair/front_hair1.mesh"
|
||||
},
|
||||
"front_hair2": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/male/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/hair/front_hair2.mesh"
|
||||
},
|
||||
"front_hair3": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "haircard1",
|
||||
"path": "res://characters/accessory/male/hair/haircard1.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/hair/front_hair3.mesh"
|
||||
},
|
||||
"hair_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/male/hair/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/hair/hair_default.mesh"
|
||||
}
|
||||
},
|
||||
"teeth": {
|
||||
"teeth_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/male/teeth/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/teeth/teeth_default.mesh"
|
||||
}
|
||||
},
|
||||
"tongue": {
|
||||
"tongue_default": {
|
||||
"materials": [
|
||||
{
|
||||
"name": "Material",
|
||||
"path": "res://characters/accessory/male/tongue/Material.tres"
|
||||
}
|
||||
],
|
||||
"path": "res://characters/accessory/male/tongue/tongue_default.mesh"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.996869, 0.877956, 0.794742, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
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.
@@ -0,0 +1,10 @@
|
||||
[gd_resource type="SpatialMaterial" load_steps=2 format=2]
|
||||
|
||||
[ext_resource path="res://characters/hair/haircard2.png" type="Texture" id=1]
|
||||
|
||||
[resource]
|
||||
resource_name = "haircard1"
|
||||
params_use_alpha_scissor = true
|
||||
params_alpha_scissor_threshold = 0.5
|
||||
albedo_color = Color( 0.0599718, 0.903545, 0.0758442, 1 )
|
||||
albedo_texture = ExtResource( 1 )
|
||||
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.807385, 0.807385, 0.807385, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.97209, 0.855219, 0.77166, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
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.
@@ -0,0 +1,10 @@
|
||||
[gd_resource type="SpatialMaterial" load_steps=2 format=2]
|
||||
|
||||
[ext_resource path="res://characters/hair/haircard2.png" type="Texture" id=1]
|
||||
|
||||
[resource]
|
||||
resource_name = "haircard1"
|
||||
params_use_alpha_scissor = true
|
||||
params_alpha_scissor_threshold = 0.5
|
||||
albedo_color = Color( 0.0599718, 0.903545, 0.0758442, 1 )
|
||||
albedo_texture = ExtResource( 1 )
|
||||
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.996869, 0.877956, 0.794742, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.807385, 0.807385, 0.807385, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="SpatialMaterial" format=2]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color( 0.903545, 0.903545, 0.903545, 1 )
|
||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user