aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/game.tscn9
-rw-r--r--client/map/map.gd4
-rw-r--r--client/map/tiles/chair.gd2
-rw-r--r--client/map/tiles/counter_base.gd6
-rw-r--r--client/map/tiles/cutting_board.gd2
-rw-r--r--client/map/tiles/door.gd2
-rw-r--r--client/map/tiles/floor.gd2
-rw-r--r--client/map/tiles/oven.gd2
-rw-r--r--client/map/tiles/raw_steak_crate.gd2
-rw-r--r--client/map/tiles/sink.gd6
-rw-r--r--client/map/tiles/stove.gd2
-rw-r--r--client/map/tiles/table.gd2
-rw-r--r--client/map/tiles/tomato_crate.gd2
-rw-r--r--client/map/tiles/trash.gd2
-rw-r--r--client/map/tiles/wall.gd8
-rw-r--r--client/map/tiles/wall_corner.tscn2
-rw-r--r--client/map/tiles/wall_straight.tscn2
-rw-r--r--client/map/tiles/wall_t.tscn2
-rw-r--r--client/map/tiles/window.gd4
-rw-r--r--client/map/tiles/window.tscn2
-rw-r--r--client/menu/main_menu.gd3
-rw-r--r--client/multiplayer.gd1
-rw-r--r--client/player/character/character.gd (renamed from client/player/character.gd)0
-rw-r--r--client/player/character/character.tscn603
-rw-r--r--client/player/character/circle.pngbin0 -> 1987 bytes
-rw-r--r--client/player/character/circle.png.import35
-rw-r--r--client/player/character/faces.webpbin0 -> 47928 bytes
-rw-r--r--client/player/character/faces.webp.import35
-rw-r--r--client/player/character/hair.resbin0 -> 16938 bytes
-rw-r--r--client/player/character/hand_left.resbin0 -> 11848 bytes
-rw-r--r--client/player/character/hand_right.resbin0 -> 11784 bytes
-rw-r--r--client/player/character/head.resbin0 -> 32308 bytes
-rw-r--r--client/player/character/main.resbin0 -> 30046 bytes
-rw-r--r--client/player/character/tie.resbin0 -> 6126 bytes
-rw-r--r--client/player/player.gd6
-rw-r--r--client/player/player.tscn15
-rw-r--r--client/project.godot2
37 files changed, 715 insertions, 50 deletions
diff --git a/client/game.tscn b/client/game.tscn
index 1f37d170..34c2fe40 100644
--- a/client/game.tscn
+++ b/client/game.tscn
@@ -1,7 +1,9 @@
-[gd_scene load_steps=6 format=3 uid="uid://c6krh36hoqfg8"]
+[gd_scene load_steps=8 format=3 uid="uid://c6krh36hoqfg8"]
[ext_resource type="PackedScene" uid="uid://cs8gxa22c6joh" path="res://map/map.tscn" id="1_ex12v"]
+[ext_resource type="Script" path="res://game.gd" id="1_sftfn"]
[ext_resource type="PackedScene" uid="uid://b31mlnao6ybt8" path="res://player/follow_camera.tscn" id="2_s8y6o"]
+[ext_resource type="PackedScene" uid="uid://c0euiv7duqfp4" path="res://player/marker.tscn" id="4_igl0o"]
[sub_resource type="PhysicalSkyMaterial" id="PhysicalSkyMaterial_mvn2w"]
@@ -13,13 +15,18 @@ background_mode = 2
sky = SubResource("Sky_ultpf")
[node name="Game" type="Node3D"]
+script = ExtResource("1_sftfn")
[node name="Map" parent="." instance=ExtResource("1_ex12v")]
[node name="FollowCamera" parent="." instance=ExtResource("2_s8y6o")]
+transform = Transform3D(0.728777, 0.294253, -0.618303, 0, 0.902961, 0.429723, 0.684751, -0.313173, 0.658057, -2.36537, 1.99403, 3.29507)
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_m4dli")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.258819, 0.965926, 0, -0.965926, 0.258819, 0, 0, 0)
+
+[node name="Marker" parent="." instance=ExtResource("4_igl0o")]
+visible = false
diff --git a/client/map/map.gd b/client/map/map.gd
index c027fd4a..1155a70c 100644
--- a/client/map/map.gd
+++ b/client/map/map.gd
@@ -15,15 +15,13 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
-@tool
class_name Map
extends Node3D
var tile_by_pos: Dictionary = {}
func _ready():
- if !Engine.is_editor_hint():
- Multiplayer.connect("update_map", update)
+ Multiplayer.connect("update_map", update)
func update(pos, tile_name, neighbors):
var instance: Floor
diff --git a/client/map/tiles/chair.gd b/client/map/tiles/chair.gd
index 34735fda..a821ac80 100644
--- a/client/map/tiles/chair.gd
+++ b/client/map/tiles/chair.gd
@@ -18,7 +18,7 @@ extends Floor
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- var chair = load("res://models/prefabs/map/chair_A.tscn").instantiate()
+ var chair = load("res://map/tiles/chair.tscn").instantiate()
var facing = 0;
for i in range(4):
if tile_name(neighbors[i]) == "table":
diff --git a/client/map/tiles/counter_base.gd b/client/map/tiles/counter_base.gd
index a4eb6864..13c78799 100644
--- a/client/map/tiles/counter_base.gd
+++ b/client/map/tiles/counter_base.gd
@@ -20,8 +20,8 @@ func _init(rename: String, neighbors: Array):
super(rename, neighbors)
match kind:
CounterKind.OUTER_CORNER:
- base.add_child(load("res://map/tiles/counter_outer_corner.res").instantiate())
+ base.add_child(load("res://map/tiles/counter_outer_corner.tscn").instantiate())
CounterKind.STRAIGHT:
- base.add_child(load("res://map/tiles/counter_straight.res").instantiate())
+ base.add_child(load("res://map/tiles/counter_straight.tscn").instantiate())
CounterKind.STRAIGHT_BACKSPLASH:
- base.add_child(load("res://tiles/counter_straight_backsplash.tscn").instantiate())
+ base.add_child(load("res://map/tiles/counter_straight_backsplash.tscn").instantiate())
diff --git a/client/map/tiles/cutting_board.gd b/client/map/tiles/cutting_board.gd
index 098cc06c..cadfccfa 100644
--- a/client/map/tiles/cutting_board.gd
+++ b/client/map/tiles/cutting_board.gd
@@ -18,4 +18,4 @@ extends CounterBase
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://map/cutting_board.tscn").instantiate())
+ base.add_child(load("res://map/tiles/cutting_board.tscn").instantiate())
diff --git a/client/map/tiles/door.gd b/client/map/tiles/door.gd
index d3f977ad..79f6ee85 100644
--- a/client/map/tiles/door.gd
+++ b/client/map/tiles/door.gd
@@ -23,5 +23,5 @@ func _init(rename: String, neighbors: Array):
for i in range(4):
if tile_name(neighbors[i]) == "door":
facing = i % 4
- base.add_child(load("res://map/door.tscn").instantiate())
+ base.add_child(load("res://map/tiles/door.tscn").instantiate())
turn_facing(facing)
diff --git a/client/map/tiles/floor.gd b/client/map/tiles/floor.gd
index 69a347db..2433849d 100644
--- a/client/map/tiles/floor.gd
+++ b/client/map/tiles/floor.gd
@@ -28,7 +28,7 @@ enum Facing {
}
func _init(rename: String, _neighbors: Array):
- var floor_tile = load("res://map/floor.tscn").instantiate()
+ var floor_tile = load("res://map/tiles/floor.tscn").instantiate()
floor_tile.position += Vector3(0.5, 0, 0.5)
add_child(floor_tile)
base.name = "Base"
diff --git a/client/map/tiles/oven.gd b/client/map/tiles/oven.gd
index e68e809c..59d734e1 100644
--- a/client/map/tiles/oven.gd
+++ b/client/map/tiles/oven.gd
@@ -18,4 +18,4 @@ extends Counter
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://map/oven.tscn").instantiate())
+ base.add_child(load("res://map/tiles/oven.tscn").instantiate())
diff --git a/client/map/tiles/raw_steak_crate.gd b/client/map/tiles/raw_steak_crate.gd
index 6287271b..b7057cc3 100644
--- a/client/map/tiles/raw_steak_crate.gd
+++ b/client/map/tiles/raw_steak_crate.gd
@@ -18,4 +18,4 @@ extends Crate
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://map/raw_steak_crate.tscn").instantiate())
+ base.add_child(load("res://map/tiles/raw_steak_crate.tscn").instantiate())
diff --git a/client/map/tiles/sink.gd b/client/map/tiles/sink.gd
index 145c97c9..d1f4b5f2 100644
--- a/client/map/tiles/sink.gd
+++ b/client/map/tiles/sink.gd
@@ -20,8 +20,8 @@ func _init(rename: String, neighbors: Array):
super(rename, neighbors)
match kind:
CounterKind.STRAIGHT:
- base.add_child(load("res://map/sink.tscn").instantiate())
+ base.add_child(load("res://map/tiles/sink.tscn").instantiate())
CounterKind.STRAIGHT_BACKSPLASH:
- base.add_child(load("res://map/sink_backsplash.tscn").instantiate())
+ base.add_child(load("res://map/tiles/sink_backsplash.tscn").instantiate())
_:
- base.add_child(load("res://map/sink.tscn").instantiate())
+ base.add_child(load("res://map/tiles/sink.tscn").instantiate())
diff --git a/client/map/tiles/stove.gd b/client/map/tiles/stove.gd
index 45204964..216129fb 100644
--- a/client/map/tiles/stove.gd
+++ b/client/map/tiles/stove.gd
@@ -18,4 +18,4 @@ extends Counter
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://map/stove.tscn").instantiate())
+ base.add_child(load("res://map/tiles/stove.tscn").instantiate())
diff --git a/client/map/tiles/table.gd b/client/map/tiles/table.gd
index 3446991d..e62e88fc 100644
--- a/client/map/tiles/table.gd
+++ b/client/map/tiles/table.gd
@@ -18,4 +18,4 @@ extends FullTile
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://map/table.tscn").instantiate())
+ base.add_child(load("res://map/tiles/table.tscn").instantiate())
diff --git a/client/map/tiles/tomato_crate.gd b/client/map/tiles/tomato_crate.gd
index 876588da..9d5cfbe9 100644
--- a/client/map/tiles/tomato_crate.gd
+++ b/client/map/tiles/tomato_crate.gd
@@ -18,4 +18,4 @@ extends Crate
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://map/tomato_crate.tscn").instantiate())
+ base.add_child(load("res://map/tiles/tomato_crate.tscn").instantiate())
diff --git a/client/map/tiles/trash.gd b/client/map/tiles/trash.gd
index b156c366..99947742 100644
--- a/client/map/tiles/trash.gd
+++ b/client/map/tiles/trash.gd
@@ -18,4 +18,4 @@ extends Crate
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
- base.add_child(load("res://models/prefabs/map/trash.tscn").instantiate())
+ base.add_child(load("res://map/tiles/trash.tscn").instantiate())
diff --git a/client/map/tiles/wall.gd b/client/map/tiles/wall.gd
index 21e28843..8be8df20 100644
--- a/client/map/tiles/wall.gd
+++ b/client/map/tiles/wall.gd
@@ -20,10 +20,10 @@ func _init(rename: String, neighbors: Array):
super(rename, neighbors)
match kind:
WallKind.STRAIGHT:
- base.add_child(load("res://map/wall_straight.tscn").instantiate())
+ base.add_child(load("res://map/tiles/wall_straight.tscn").instantiate())
WallKind.OUTER_CORNER:
- base.add_child(load("res://map/wall_corner.tscn").instantiate())
+ base.add_child(load("res://map/tiles/wall_corner.tscn").instantiate())
WallKind.T:
- base.add_child(load("res://map/wall_t.tscn").instantiate())
+ base.add_child(load("res://map/tiles/wall_t.tscn").instantiate())
WallKind.CROSS:
- base.add_child(load("res://map/wall_cross.tscn").instantiate())
+ base.add_child(load("res://map/tiles/wall_cross.tscn").instantiate())
diff --git a/client/map/tiles/wall_corner.tscn b/client/map/tiles/wall_corner.tscn
index 2229c952..a158a119 100644
--- a/client/map/tiles/wall_corner.tscn
+++ b/client/map/tiles/wall_corner.tscn
@@ -5,6 +5,6 @@
[node name="Wall" type="Node3D"]
[node name="Mesh" type="MeshInstance3D" parent="."]
-transform = Transform3D(5.96244e-09, 0, -0.5, 0, 0.5, 0, 0.5, 0, 5.96244e-09, 0, 0, 0)
+transform = Transform3D(-2.18557e-08, 0, 0.5, 0, 0.5, 0, -0.5, 0, -2.18557e-08, 0, 0, 0)
mesh = ExtResource("1_8v0wt")
skeleton = NodePath("")
diff --git a/client/map/tiles/wall_straight.tscn b/client/map/tiles/wall_straight.tscn
index cb0de6be..0de536b8 100644
--- a/client/map/tiles/wall_straight.tscn
+++ b/client/map/tiles/wall_straight.tscn
@@ -5,6 +5,6 @@
[node name="Wall" type="Node3D"]
[node name="Mesh" type="MeshInstance3D" parent="."]
-transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
+transform = Transform3D(-2.18557e-08, 0, 0.5, 0, 0.5, 0, -0.5, 0, -2.18557e-08, 0, 0, 0)
mesh = ExtResource("1_stsuc")
skeleton = NodePath("")
diff --git a/client/map/tiles/wall_t.tscn b/client/map/tiles/wall_t.tscn
index a6dae2c1..9d390517 100644
--- a/client/map/tiles/wall_t.tscn
+++ b/client/map/tiles/wall_t.tscn
@@ -5,6 +5,6 @@
[node name="Wall" type="Node3D"]
[node name="Mesh" type="MeshInstance3D" parent="."]
-transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
+transform = Transform3D(5.96244e-09, 0, -0.5, 0, 0.5, 0, 0.5, 0, 5.96244e-09, 0, 0, 0)
mesh = ExtResource("1_sb5lc")
skeleton = NodePath("")
diff --git a/client/map/tiles/window.gd b/client/map/tiles/window.gd
index 7747bbcd..b3e7c478 100644
--- a/client/map/tiles/window.gd
+++ b/client/map/tiles/window.gd
@@ -23,7 +23,7 @@ func _init(rename: String, neighbors: Array):
super(rename, neighbors)
match kind:
WallKind.STRAIGHT:
- base.add_child(load("res://map/window.tscn").instantiate())
+ base.add_child(load("res://map/tiles/window.tscn").instantiate())
WallKind.OUTER_CORNER:
push_warning("There is no corner window!")
- base.add_child(load("res://map/window.tscn").instantiate())
+ base.add_child(load("res://map/tiles/window.tscn").instantiate())
diff --git a/client/map/tiles/window.tscn b/client/map/tiles/window.tscn
index 15d0204b..b2db9c74 100644
--- a/client/map/tiles/window.tscn
+++ b/client/map/tiles/window.tscn
@@ -5,6 +5,6 @@
[node name="Window" type="Node3D"]
[node name="Mesh" type="MeshInstance3D" parent="."]
-transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
+transform = Transform3D(-2.18557e-08, 0, 0.5, 0, 0.5, 0, -0.5, 0, -2.18557e-08, 0, 0, 0)
mesh = ExtResource("1_ek3mj")
skeleton = NodePath("")
diff --git a/client/menu/main_menu.gd b/client/menu/main_menu.gd
index cb32f175..ef03b024 100644
--- a/client/menu/main_menu.gd
+++ b/client/menu/main_menu.gd
@@ -16,6 +16,9 @@
#
extends Control
+@onready var quick_connect = $side/options/quick_connect
+@onready var quit_button = $side/options/quit
+
func _ready():
quick_connect.grab_focus()
if OS.has_feature("web"):
diff --git a/client/multiplayer.gd b/client/multiplayer.gd
index 7ccfd377..99f8046c 100644
--- a/client/multiplayer.gd
+++ b/client/multiplayer.gd
@@ -48,6 +48,7 @@ var tileid_by_pos: Dictionary = {}
var url = ""
func connect_client():
+ print("uwu")
socket.connect_to_url(url)
connected = true
diff --git a/client/player/character.gd b/client/player/character/character.gd
index 847bd7b6..847bd7b6 100644
--- a/client/player/character.gd
+++ b/client/player/character/character.gd
diff --git a/client/player/character/character.tscn b/client/player/character/character.tscn
new file mode 100644
index 00000000..fc06f448
--- /dev/null
+++ b/client/player/character/character.tscn
@@ -0,0 +1,603 @@
+[gd_scene load_steps=13 format=3 uid="uid://b3hhir2fvnunu"]
+
+[ext_resource type="Script" path="res://player/character/character.gd" id="1_12lbh"]
+[ext_resource type="ArrayMesh" uid="uid://bnmm01yjwultj" path="res://player/character/main.res" id="2_lxdbd"]
+[ext_resource type="ArrayMesh" uid="uid://46sp3fu3n6ls" path="res://player/character/hand_right.res" id="3_26h3l"]
+[ext_resource type="ArrayMesh" uid="uid://r52cylox4imf" path="res://player/character/hand_left.res" id="4_ellbc"]
+[ext_resource type="ArrayMesh" uid="uid://csryncouqhwp1" path="res://player/character/head.res" id="5_tyg2e"]
+[ext_resource type="ArrayMesh" uid="uid://bsxmxq4dfv2vy" path="res://player/character/hair.res" id="6_rfl5m"]
+[ext_resource type="ArrayMesh" uid="uid://c2qnwt44x8ujl" path="res://player/character/tie.res" id="7_knv6q"]
+
+[sub_resource type="Animation" id="Animation_tdhvg"]
+length = 0.001
+tracks/0/type = "bezier"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("Main/HandLeft:position:x")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(1.302, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/1/type = "bezier"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("Main/HandLeft:position:y")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(-0.17, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/2/type = "bezier"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("Main/HandLeft:position:z")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/3/type = "bezier"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("Main/HandLeft:rotation:x")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(4.14408e-16, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/4/type = "bezier"
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/path = NodePath("Main/HandLeft:rotation:y")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(3.14159, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/5/type = "bezier"
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/path = NodePath("Main/HandLeft:rotation:z")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(-2.0944, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/6/type = "bezier"
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/path = NodePath("Main/HandRight:position:x")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(-1.302, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/7/type = "bezier"
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/path = NodePath("Main/HandRight:position:y")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(-0.17, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/8/type = "bezier"
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/path = NodePath("Main/HandRight:position:z")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/9/type = "bezier"
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/path = NodePath("Main/HandRight:rotation:x")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(-0.628319, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/10/type = "bezier"
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/path = NodePath("Main/HandRight:rotation:y")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(-3.14159, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/11/type = "bezier"
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/path = NodePath("Main/HandRight:rotation:z")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(2.0944, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+
+[sub_resource type="Animation" id="Animation_cvcpd"]
+resource_name = "hold"
+loop_mode = 1
+tracks/0/type = "bezier"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("Main/HandLeft:position:x")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(0.807577, -0.25, 0, 0.25, 0, 0.808, -0.25, 0, 0.25, 0, 0.808, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.5, 1)
+}
+tracks/1/type = "bezier"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("Main/HandLeft:position:y")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(0.233, -0.25, 0, 0.25, 0, 0.25, -0.25, 0, 0.25, 0, 0.233, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.5, 1)
+}
+tracks/2/type = "bezier"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("Main/HandLeft:position:z")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.5, 1)
+}
+tracks/3/type = "bezier"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("Main/HandLeft:rotation:x")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(1.39626, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/4/type = "bezier"
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/path = NodePath("Main/HandLeft:rotation:y")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(-3.14159, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/5/type = "bezier"
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/path = NodePath("Main/HandLeft:rotation:z")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(-2.0944, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/6/type = "bezier"
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/path = NodePath("Main/HandRight:position:x")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(-0.807577, -0.25, 0, 0.25, 0, -0.808, -0.25, 0, 0.25, 0, -0.808, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.5, 1)
+}
+tracks/7/type = "bezier"
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/path = NodePath("Main/HandRight:position:y")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(0.233, -0.25, 0, 0.25, 0, 0.25, -0.25, 0, 0.25, 0, 0.233, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.5, 1)
+}
+tracks/8/type = "bezier"
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/path = NodePath("Main/HandRight:position:z")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.5, 1)
+}
+tracks/9/type = "bezier"
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/path = NodePath("Main/HandRight:rotation:x")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(0.767945, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/10/type = "bezier"
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/path = NodePath("Main/HandRight:rotation:y")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(3.14159, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/11/type = "bezier"
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/path = NodePath("Main/HandRight:rotation:z")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(2.0944, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+
+[sub_resource type="Animation" id="Animation_r1hej"]
+resource_name = "idle"
+length = 1.5
+loop_mode = 1
+step = 0.05
+tracks/0/type = "bezier"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("Main/HandLeft:position:x")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(1.302, -0.25, 0, 0.25, 0, 1.302, -0.25, 0, 0.25, 0, 1.302, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.75, 1.5)
+}
+tracks/1/type = "bezier"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("Main/HandLeft:position:y")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(-0.17, -0.25, 0, 0.25, 0, -0.25, -0.25, 0, 0.25, 0, -0.17, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.75, 1.5)
+}
+tracks/2/type = "bezier"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("Main/HandLeft:position:z")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.75, 1.5)
+}
+tracks/3/type = "bezier"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("Main/HandLeft:rotation:x")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(4.14408e-16, -0.25, 0, 0.25, 0, 1.58489e-08, -0.25, 0, 0.25, 0, 4.14408e-16, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.75, 1.5)
+}
+tracks/4/type = "bezier"
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/path = NodePath("Main/HandLeft:rotation:y")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(3.14159, -0.25, 0, 0.25, 0, 3.14159, -0.25, 0, 0.25, 0, 3.14159, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.75, 1.5)
+}
+tracks/5/type = "bezier"
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/path = NodePath("Main/HandLeft:rotation:z")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(-2.0944, -0.25, 0, 0.25, 0, -1.98924, -0.25, 0, 0.25, 0, -2.0944, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.75, 1.5)
+}
+tracks/6/type = "bezier"
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/path = NodePath("Main/HandRight:position:x")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(-1.302, -0.25, 0, 0.25, 0, -1.302, -0.25, 0, 0.25, 0, -1.302, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.75, 1.5)
+}
+tracks/7/type = "bezier"
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/path = NodePath("Main/HandRight:position:y")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(-0.17, -0.25, 0, 0.25, 0, -0.25, -0.25, 0, 0.25, 0, -0.17, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.75, 1.5)
+}
+tracks/8/type = "bezier"
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/path = NodePath("Main/HandRight:position:z")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.75, 1.5)
+}
+tracks/9/type = "bezier"
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/path = NodePath("Main/HandRight:rotation:x")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(-0.628319, -0.25, 0, 0.25, 0, -0.628319, -0.25, 0, 0.25, 0, -0.628319, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.75, 1.5)
+}
+tracks/10/type = "bezier"
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/path = NodePath("Main/HandRight:rotation:y")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(-3.14159, -0.25, 0, 0.25, 0, -3.14159, -0.25, 0, 0.25, 0, -3.14159, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.75, 1.5)
+}
+tracks/11/type = "bezier"
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/path = NodePath("Main/HandRight:rotation:z")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(2.0944, -0.25, 0, 0.25, 0, 1.98924, -0.25, 0, 0.25, 0, 2.0944, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.75, 1.5)
+}
+
+[sub_resource type="Animation" id="Animation_7kiho"]
+resource_name = "walk"
+loop_mode = 1
+step = 0.05
+tracks/0/type = "bezier"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("Main/HandLeft:position:x")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
+"points": PackedFloat32Array(1.302, 0, 0, 0, 0, 1.302, -0.25, 0, 0.25, 0, 1.302, 0, 0, 0, 0, 1.302, -0.25, 0, 0.25, 0, 1.302, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+}
+tracks/1/type = "bezier"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("Main/HandLeft:position:y")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
+"points": PackedFloat32Array(-0.17, 0, 0, 0, 0, -0.17, -0.25, 0, 0.25, 0, -0.17, 0, 0, 0, 0, -0.17, -0.25, 0, 0.25, 0, -0.17, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+}
+tracks/2/type = "bezier"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("Main/HandLeft:position:z")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
+"points": PackedFloat32Array(0, 0, 0, 0, 0, 0.25, -0.25, 0, 0.25, 0, 0, 0, 0, 0, 0, -0.25, -0.25, 0, 0.25, 0, 0, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+}
+tracks/3/type = "bezier"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("Main/HandLeft:rotation:x")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
+"points": PackedFloat32Array(4.14408e-16, 0, 0, 0, 0, 0.436332, -0.25, 0, 0.25, 0, 4.14408e-16, 0, 0, 0, 0, -0.436332, -0.25, 0, 0.25, 0, 4.14408e-16, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+}
+tracks/4/type = "bezier"
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/path = NodePath("Main/HandLeft:rotation:y")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/keys = {
+"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
+"points": PackedFloat32Array(3.14159, 0, 0, 0, 0, 3.14159, -0.25, 0, 0.25, 0, 3.14159, 0, 0, 0, 0, 3.14159, -0.25, 0, 0.25, 0, 3.14159, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+}
+tracks/5/type = "bezier"
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/path = NodePath("Main/HandLeft:rotation:z")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/keys = {
+"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
+"points": PackedFloat32Array(-2.0944, 0, 0, 0, 0, -2.0944, -0.25, 0, 0.25, 0, -2.0944, 0, 0, 0, 0, -2.0944, -0.25, 0, 0.25, 0, -2.0944, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+}
+tracks/6/type = "bezier"
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/path = NodePath("Main/HandRight:position:x")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/keys = {
+"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
+"points": PackedFloat32Array(-1.302, 0, 0, 0, 0, -1.302, -0.25, 0, 0.25, 0, -1.302, 0, 0, 0, 0, -1.302, -0.25, 0, 0.25, 0, -1.302, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+}
+tracks/7/type = "bezier"
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/path = NodePath("Main/HandRight:position:y")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/keys = {
+"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
+"points": PackedFloat32Array(-0.17, 0, 0, 0, 0, -0.17, -0.25, 0, 0.25, 0, -0.17, 0, 0, 0, 0, -0.17, -0.25, 0, 0.25, 0, -0.17, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+}
+tracks/8/type = "bezier"
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/path = NodePath("Main/HandRight:position:z")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/keys = {
+"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
+"points": PackedFloat32Array(0, 0, 0, 0, 0, -0.25, -0.25, 0, 0.25, 0, -7.09899e-06, 0, 0, 0, 0, 0.25, -0.25, 0, 0.25, 0, 0, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+}
+tracks/9/type = "bezier"
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/path = NodePath("Main/HandRight:rotation:x")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/keys = {
+"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
+"points": PackedFloat32Array(-0.628319, 0, 0, 0, 0, -1.06465, -0.25, 0, 0.25, 0, -0.628331, 0, 0, 0, 0, -0.191986, -0.25, 0, 0.25, 0, -0.628319, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+}
+tracks/10/type = "bezier"
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/path = NodePath("Main/HandRight:rotation:y")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/keys = {
+"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
+"points": PackedFloat32Array(-3.14159, 0, 0, 0, 0, -3.14159, -0.25, 0, 0.25, 0, -3.14159, 0, 0, 0, 0, -3.14159, -0.25, 0, 0.25, 0, -3.14159, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+}
+tracks/11/type = "bezier"
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/path = NodePath("Main/HandRight:rotation:z")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/keys = {
+"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
+"points": PackedFloat32Array(2.0944, 0, 0, 0, 0, 2.0944, -0.25, 0, 0.25, 0, 2.0944, 0, 0, 0, 0, 2.0944, -0.25, 0, 0.25, 0, 2.0944, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_xtrfe"]
+_data = {
+"RESET": SubResource("Animation_tdhvg"),
+"hold": SubResource("Animation_cvcpd"),
+"idle": SubResource("Animation_r1hej"),
+"walk": SubResource("Animation_7kiho")
+}
+
+[node name="guy" type="Node3D"]
+script = ExtResource("1_12lbh")
+
+[node name="Main" type="MeshInstance3D" parent="."]
+transform = Transform3D(0.33, 0, 0, 0, 0.33, 0, 0, 0, 0.33, 0, 0.33, 0)
+mesh = ExtResource("2_lxdbd")
+skeleton = NodePath("")
+
+[node name="HandRight" type="MeshInstance3D" parent="Main"]
+transform = Transform3D(0.287144, 0.2864, -1.17785e-06, 0.402357, -0.133775, 0.337554, 0.292329, -0.0971941, -0.464603, -1.302, -0.17, 0)
+mesh = ExtResource("3_26h3l")
+skeleton = NodePath("")
+
+[node name="HandLeft" type="MeshInstance3D" parent="Main"]
+transform = Transform3D(0.287143, -0.2864, 1.45591e-06, -0.497341, -0.165355, -2.37987e-16, 7.2796e-07, -7.26076e-07, -0.574281, 1.302, -0.17, 0)
+mesh = ExtResource("4_ellbc")
+skeleton = NodePath("")
+
+[node name="Head" type="MeshInstance3D" parent="Main"]
+transform = Transform3D(0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 1.25, 0)
+mesh = ExtResource("5_tyg2e")
+skeleton = NodePath("")
+
+[node name="Hair" type="MeshInstance3D" parent="Main/Head"]
+transform = Transform3D(1.06667, 0, 0, 0, 1.06667, 0, 0, 0, 1.06667, 0, 0.4, 0)
+mesh = ExtResource("6_rfl5m")
+skeleton = NodePath("")
+
+[node name="Tie" type="MeshInstance3D" parent="Main"]
+transform = Transform3D(0.125, 0, 0, 0, 0.125, 0, 0, 0, 0.125, 0, 0.47772, 0.445265)
+mesh = ExtResource("7_knv6q")
+skeleton = NodePath("")
+
+[node name="HandAnimations" type="AnimationPlayer" parent="."]
+libraries = {
+"": SubResource("AnimationLibrary_xtrfe")
+}
+
+[connection signal="animation_finished" from="HandAnimations" to="." method="_on_hand_animations_animation_finished"]
diff --git a/client/player/character/circle.png b/client/player/character/circle.png
new file mode 100644
index 00000000..ba1422dd
--- /dev/null
+++ b/client/player/character/circle.png
Binary files differ
diff --git a/client/player/character/circle.png.import b/client/player/character/circle.png.import
new file mode 100644
index 00000000..96e2dcd2
--- /dev/null
+++ b/client/player/character/circle.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cs7fnnb38byq4"
+path.s3tc="res://.godot/imported/circle.png-861d62bd7a6981460f3f22a0cea3c33a.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://player/character/circle.png"
+dest_files=["res://.godot/imported/circle.png-861d62bd7a6981460f3f22a0cea3c33a.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
diff --git a/client/player/character/faces.webp b/client/player/character/faces.webp
new file mode 100644
index 00000000..23e2eb92
--- /dev/null
+++ b/client/player/character/faces.webp
Binary files differ
diff --git a/client/player/character/faces.webp.import b/client/player/character/faces.webp.import
new file mode 100644
index 00000000..b3fe4e7f
--- /dev/null
+++ b/client/player/character/faces.webp.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://btja0lcsrgeeb"
+path.s3tc="res://.godot/imported/faces.webp-32648314b849ceed0e72c2c9927fdb2f.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://player/character/faces.webp"
+dest_files=["res://.godot/imported/faces.webp-32648314b849ceed0e72c2c9927fdb2f.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
diff --git a/client/player/character/hair.res b/client/player/character/hair.res
new file mode 100644
index 00000000..bea01119
--- /dev/null
+++ b/client/player/character/hair.res
Binary files differ
diff --git a/client/player/character/hand_left.res b/client/player/character/hand_left.res
new file mode 100644
index 00000000..8736dad6
--- /dev/null
+++ b/client/player/character/hand_left.res
Binary files differ
diff --git a/client/player/character/hand_right.res b/client/player/character/hand_right.res
new file mode 100644
index 00000000..44e3683d
--- /dev/null
+++ b/client/player/character/hand_right.res
Binary files differ
diff --git a/client/player/character/head.res b/client/player/character/head.res
new file mode 100644
index 00000000..69be33e7
--- /dev/null
+++ b/client/player/character/head.res
Binary files differ
diff --git a/client/player/character/main.res b/client/player/character/main.res
new file mode 100644
index 00000000..3ad69367
--- /dev/null
+++ b/client/player/character/main.res
Binary files differ
diff --git a/client/player/character/tie.res b/client/player/character/tie.res
new file mode 100644
index 00000000..406a4779
--- /dev/null
+++ b/client/player/character/tie.res
Binary files differ
diff --git a/client/player/player.gd b/client/player/player.gd
index b8982aa7..a6122a97 100644
--- a/client/player/player.gd
+++ b/client/player/player.gd
@@ -27,7 +27,7 @@ var rotation_anim = 0.
var position_ = Vector2(0, 0)
var position_anim = Vector2(0, 0)
-var mesh = preload("res://player/player.tscn").instantiate()
+var character: Character = preload("res://player/character/character.tscn").instantiate()
var hand: Item = null
var hand_base: Node3D = Node3D.new()
@@ -36,10 +36,8 @@ var _anim_angle: float = 0.0
const HAND_BASE_POSITION: Vector3 = Vector3(0, .25, .4)
-@onready var character: Character = $Player/Character
-
func _init(_id: int, new_name: String, pos: Vector2, _character: int, new_game: Game):
- add_child(mesh)
+ add_child(character)
position_ = pos
name = new_name
game = new_game
diff --git a/client/player/player.tscn b/client/player/player.tscn
deleted file mode 100644
index 9c633575..00000000
--- a/client/player/player.tscn
+++ /dev/null
@@ -1,15 +0,0 @@
-[gd_scene load_steps=3 format=3 uid="uid://d30bj2cp1m7gd"]
-
-[ext_resource type="PackedScene" uid="uid://b3hhir2fvnunu" path="res://models/prefabs/characters/guy.tscn" id="1_g5ma4"]
-
-[sub_resource type="CapsuleMesh" id="CapsuleMesh_4w71x"]
-
-[node name="Player" type="Node3D"]
-
-[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
-transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.5, 0)
-visible = false
-mesh = SubResource("CapsuleMesh_4w71x")
-
-[node name="Character" parent="." instance=ExtResource("1_g5ma4")]
-transform = Transform3D(0.33, 0, 0, 0, 0.33, 0, 0, 0, 0.33, 0, 0, 0)
diff --git a/client/project.godot b/client/project.godot
index 6c0f62d3..8da3185a 100644
--- a/client/project.godot
+++ b/client/project.godot
@@ -11,7 +11,7 @@ config_version=5
[application]
config/name="undercooked"
-run/main_scene="res://game.tscn"
+run/main_scene="res://menu/main_menu.tscn"
config/features=PackedStringArray("4.2", "Forward Plus")
config/icon="res://icon.svg"