diff --git a/client/.import/platform.png-fa6c1000359a082b3ed63552d71e9023.md5 b/client/.import/platform.png-fa6c1000359a082b3ed63552d71e9023.md5
new file mode 100644
index 0000000..5d656fb
--- /dev/null
+++ b/client/.import/platform.png-fa6c1000359a082b3ed63552d71e9023.md5
@@ -0,0 +1,3 @@
+source_md5="02860f21d0b06f5acf9d6f81718d443a"
+dest_md5="29b11c828e308d1479c7681a6d77bbda"
+
diff --git a/client/.import/platform.png-fa6c1000359a082b3ed63552d71e9023.stex b/client/.import/platform.png-fa6c1000359a082b3ed63552d71e9023.stex
new file mode 100644
index 0000000..1a19a98
Binary files /dev/null and b/client/.import/platform.png-fa6c1000359a082b3ed63552d71e9023.stex differ
diff --git a/client/.import/player_parts.png-f69e345f37ad405be3288ca78a4b7531.md5 b/client/.import/player_parts.png-f69e345f37ad405be3288ca78a4b7531.md5
index 3c0e7c5..bad3a22 100644
--- a/client/.import/player_parts.png-f69e345f37ad405be3288ca78a4b7531.md5
+++ b/client/.import/player_parts.png-f69e345f37ad405be3288ca78a4b7531.md5
@@ -1,3 +1,3 @@
source_md5="4a4e86688ea9e233c2a97d2091f91210"
-dest_md5="f46730c502307e961aea5b1794b64187"
+dest_md5="0b5f4549065c5a8e08ef3984540c93ea"
diff --git a/client/.import/player_parts.png-f69e345f37ad405be3288ca78a4b7531.stex b/client/.import/player_parts.png-f69e345f37ad405be3288ca78a4b7531.stex
index f651a70..f2acb06 100644
Binary files a/client/.import/player_parts.png-f69e345f37ad405be3288ca78a4b7531.stex and b/client/.import/player_parts.png-f69e345f37ad405be3288ca78a4b7531.stex differ
diff --git a/client/Assets/Art/Characters/player_parts.png.import b/client/Assets/Art/Characters/player_parts.png.import
index 819f3fa..dd84893 100644
--- a/client/Assets/Art/Characters/player_parts.png.import
+++ b/client/Assets/Art/Characters/player_parts.png.import
@@ -20,7 +20,7 @@ compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
-flags/filter=true
+flags/filter=false
flags/mipmaps=false
flags/anisotropic=true
flags/srgb=2
diff --git a/client/Assets/Art/platform.aseprite b/client/Assets/Art/platform.aseprite
new file mode 100644
index 0000000..ac44e24
Binary files /dev/null and b/client/Assets/Art/platform.aseprite differ
diff --git a/client/Assets/Art/platform.png b/client/Assets/Art/platform.png
new file mode 100644
index 0000000..1bddf54
Binary files /dev/null and b/client/Assets/Art/platform.png differ
diff --git a/client/Assets/Art/platform.png.import b/client/Assets/Art/platform.png.import
new file mode 100644
index 0000000..b136b9b
--- /dev/null
+++ b/client/Assets/Art/platform.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/platform.png-fa6c1000359a082b3ed63552d71e9023.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/Art/platform.png"
+dest_files=[ "res://.import/platform.png-fa6c1000359a082b3ed63552d71e9023.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/client/Assets/Stories/english_story.tres b/client/Assets/Stories/english_story.tres
index 11679a2..36e61e3 100644
--- a/client/Assets/Stories/english_story.tres
+++ b/client/Assets/Stories/english_story.tres
@@ -6,6 +6,7 @@
script = ExtResource( 1 )
TYPE = "EXP_Story_editor"
names = {
+"intro_meet_ceo": 4,
"intro_science": 1,
"intro_science_followup": 3,
"intro_text": 2
@@ -180,7 +181,7 @@ Central Tower.",
},
"rect_size": Vector2( 324, 137 ),
"slot_amount": 1,
-"text": "Name: Veronica Dohwns",
+"text": "Name: Veronica SCENE Gilmore",
"type": "line"
},
2: {
@@ -220,7 +221,7 @@ Central Tower.",
},
"rect_size": Vector2( 324, 137 ),
"slot_amount": 1,
-"text": "Welcome Veroinica!",
+"text": "Welcome SCENE!",
"type": "line"
},
6: {
@@ -264,8 +265,9 @@ for our services.",
"name": "intro_science_followup",
"nodes": {
1: {
-"graph_offset": Vector2( -1300, -880 ),
+"graph_offset": Vector2( -1300, -860 ),
"links": {
+0: 3,
1: 2
},
"rect_size": Vector2( 441, 172 ),
@@ -276,7 +278,7 @@ for our services.",
"type": "line"
},
2: {
-"graph_offset": Vector2( -780, -840 ),
+"graph_offset": Vector2( -780, -820 ),
"links": {
},
@@ -285,6 +287,346 @@ for our services.",
"text": "Don't make such false accusations. Get back to your job
and find the real culpurit.",
"type": "line"
+},
+3: {
+"graph_offset": Vector2( -780, -1000 ),
+"links": {
+
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "Okay then.",
+"type": "line"
+}
+}
+},
+4: {
+"available_nid": [ ],
+"groups": [ "Introduction" ],
+"human_readable_description": "First interaction with CEO Grant Blevins",
+"name": "intro_meet_ceo",
+"nodes": {
+1: {
+"graph_offset": Vector2( 60, 0 ),
+"links": {
+0: 2
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "Hello Scene.",
+"type": "line"
+},
+2: {
+"graph_offset": Vector2( 540, 0 ),
+"links": {
+0: 3
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "It's good to see they have not eliminated you yet. Most my attempts
+to find the mole up until this point have ended in swift failure.",
+"type": "line"
+},
+3: {
+"graph_offset": Vector2( 1020, 0 ),
+"links": {
+0: 7,
+1: 4
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 2,
+"text": "You will not disappoint me, right Scene?
+Of course not!
+I will do my best",
+"type": "line"
+},
+4: {
+"graph_offset": Vector2( 1500, 100 ),
+"links": {
+0: 5
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "Ha! Such a 21st century phrase.",
+"type": "line"
+},
+5: {
+"graph_offset": Vector2( 1980, 100 ),
+"links": {
+0: 6
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "You will need more than just your wits to defeat this
+traitor.",
+"type": "line"
+},
+6: {
+"graph_offset": Vector2( 2460, 20 ),
+"links": {
+0: 8
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "So much lost...",
+"type": "line"
+},
+7: {
+"graph_offset": Vector2( 1760, -80 ),
+"links": {
+0: 6
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "We will see. You had a great track record in the 21st century,
+but we both remeber how your final job went.",
+"type": "line"
+},
+8: {
+"graph_offset": Vector2( 2940, 20 ),
+"links": {
+0: 9,
+1: 10
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 2,
+"text": "What do you think of our facility here so far?
+It's amazing!
+I haven't seen much yet.",
+"type": "line"
+},
+9: {
+"graph_offset": Vector2( 3760, 20 ),
+"links": {
+0: 11
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "It's always interesting hearing the perspectives of those from the past.",
+"type": "line"
+},
+10: {
+"graph_offset": Vector2( 3380, 240 ),
+"links": {
+0: 9
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "Unfortunate.",
+"type": "line"
+},
+11: {
+"graph_offset": Vector2( 4240, 20 ),
+"links": {
+0: 12
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "Now away with the pleasantries.",
+"type": "line"
+},
+12: {
+"graph_offset": Vector2( 4720, 20 ),
+"links": {
+0: 13
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "There has been a concerning amount of leaks of secret projects
+and internal data to our competitor Duke Enterprises.",
+"type": "line"
+},
+13: {
+"graph_offset": Vector2( 5200, 20 ),
+"links": {
+0: 14
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "Due the volume and nature of the data, the one conspiring with
+the Dukes must have extremely high security clearance.",
+"type": "line"
+},
+14: {
+"graph_offset": Vector2( 5680, 20 ),
+"links": {
+0: 16
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "That is why I have given you nearly full access to our facilities.
+This traitor could be anyone.",
+"type": "line"
+},
+15: {
+"graph_offset": Vector2( 6660, 20 ),
+"links": {
+0: 17,
+1: 19,
+2: 20
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 3,
+"text": "Do you have any questions before we get started?
+Why me?
+What year is it?
+Where do I start?",
+"type": "line"
+},
+16: {
+"graph_offset": Vector2( 6160, 20 ),
+"links": {
+0: 15
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "I'm trusting you Scene. It's not a common thing in our time, but I have
+little choice.",
+"type": "line"
+},
+17: {
+"graph_offset": Vector2( 7140, -100 ),
+"links": {
+0: 18
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "I have always been sympathatic to societies of the past. Things were done...
+different than they are now.",
+"type": "line"
+},
+18: {
+"graph_offset": Vector2( 7620, -100 ),
+"links": {
+0: 15
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "You were one of the best investigators of your time! It was sad
+you got caught up in the events of the old capital.",
+"type": "line"
+},
+19: {
+"graph_offset": Vector2( 7140, 80 ),
+"links": {
+0: 15
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "It 3024, making it around 1000 years since your death.",
+"type": "line"
+},
+20: {
+"graph_offset": Vector2( 7140, 260 ),
+"links": {
+0: 28,
+1: 21,
+2: 22
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 3,
+"text": "We have a shipment of biological materials coming in today. It seems
+like the sort of thing we have had troubles with recently.
+Okay, where?
+What sort of troubles?
+Biological materials?",
+"type": "line"
+},
+21: {
+"graph_offset": Vector2( 7620, 300 ),
+"links": {
+0: 24
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "Some of the data ending up in the Duke's hands is shipping information.",
+"type": "line"
+},
+22: {
+"graph_offset": Vector2( 7620, 500 ),
+"links": {
+0: 23
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "Yes, for our cloning facilities among other things.",
+"type": "line"
+},
+23: {
+"graph_offset": Vector2( 8100, 500 ),
+"links": {
+0: 27
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "Without such shipments, you wouldn't be standing here.",
+"type": "line"
+},
+24: {
+"graph_offset": Vector2( 8100, 300 ),
+"links": {
+0: 25,
+1: 26
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 2,
+"text": "We have had too many missing shipments stopped by the coporate police.
+Coporate police?
+Why would they stop the shipments?",
+"type": "line"
+},
+25: {
+"graph_offset": Vector2( 8580, 260 ),
+"links": {
+0: 27
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "Once democratic powers fell, enforcement was placed in the hand of the Corporate Collective,
+the closest thing to a centralized government.",
+"type": "line"
+},
+26: {
+"graph_offset": Vector2( 8580, 420 ),
+"links": {
+0: 27
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "In corporate politics, our opposition likes to put in place agreements that
+hinder our success. We are not alone in ignoring many of these agreements.",
+"type": "line"
+},
+27: {
+"graph_offset": Vector2( 9060, 260 ),
+"links": {
+0: 28
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "Anyway,",
+"type": "line"
+},
+28: {
+"graph_offset": Vector2( 9580, 100 ),
+"links": {
+0: 29
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "This building's shipping facility is located on mid levels. They should
+not be too far out of reach.",
+"type": "line"
+},
+29: {
+"graph_offset": Vector2( 10060, 100 ),
+"links": {
+
+},
+"rect_size": Vector2( 324, 137 ),
+"slot_amount": 1,
+"text": "Keep me up to date on your progress.",
+"type": "line"
}
}
}
diff --git a/client/Nodes/NPCs/CEO.tscn b/client/Nodes/NPCs/CEO.tscn
new file mode 100644
index 0000000..6c8f273
--- /dev/null
+++ b/client/Nodes/NPCs/CEO.tscn
@@ -0,0 +1,20 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://Scripts/Entities/NPCs/CEO.gd" type="Script" id=1]
+[ext_resource path="res://Scripts/Component/StorySpeaker.gd" type="Script" id=2]
+[ext_resource path="res://Assets/Art/Characters/business.png" type="Texture" id=3]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 5, 8 )
+
+[node name="Scientist" type="Area2D"]
+script = ExtResource( 1 )
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 3 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource( 1 )
+
+[node name="Speaker" type="Node" parent="."]
+script = ExtResource( 2 )
diff --git a/client/Nodes/NPCs/Scientist.tscn b/client/Nodes/NPCs/Scientist.tscn
new file mode 100644
index 0000000..17317be
--- /dev/null
+++ b/client/Nodes/NPCs/Scientist.tscn
@@ -0,0 +1,21 @@
+[gd_scene load_steps=5 format=2]
+
+[ext_resource path="res://Scripts/Entities/NPCs/IntroScientist.gd" type="Script" id=1]
+[ext_resource path="res://Scripts/Component/StorySpeaker.gd" type="Script" id=2]
+[ext_resource path="res://Assets/Art/Characters/scientist.png" type="Texture" id=3]
+
+[sub_resource type="RectangleShape2D" id=3]
+extents = Vector2( 5, 8 )
+
+[node name="Scientist" type="Area2D"]
+position = Vector2( 167.084, 231.933 )
+script = ExtResource( 1 )
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 3 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource( 3 )
+
+[node name="Speaker" type="Node" parent="."]
+script = ExtResource( 2 )
diff --git a/client/Nodes/Player.tscn b/client/Nodes/Player.tscn
index 28bbfe4..fc584cd 100644
--- a/client/Nodes/Player.tscn
+++ b/client/Nodes/Player.tscn
@@ -6,82 +6,82 @@
[ext_resource path="res://Scripts/Entities/Player.gd" type="Script" id=4]
[sub_resource type="AtlasTexture" id=1]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 1, 7, 3, 4 )
[sub_resource type="AtlasTexture" id=2]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 2, 6, 1, 1 )
[sub_resource type="AtlasTexture" id=3]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 1, 1, 3, 4 )
[sub_resource type="AtlasTexture" id=4]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 7, 8, 1, 2 )
[sub_resource type="AtlasTexture" id=5]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 6, 10, 1, 2 )
[sub_resource type="AtlasTexture" id=6]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 6, 12, 1, 1 )
[sub_resource type="AtlasTexture" id=7]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 9, 8, 1, 2 )
[sub_resource type="AtlasTexture" id=8]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 10, 10, 1, 2 )
[sub_resource type="AtlasTexture" id=9]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 1, 11, 3, 2 )
[sub_resource type="AtlasTexture" id=10]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 1, 13, 3, 1 )
[sub_resource type="AtlasTexture" id=11]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 1, 14, 3, 1 )
[sub_resource type="AtlasTexture" id=12]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 1, 15, 3, 1 )
[sub_resource type="AtlasTexture" id=13]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 1, 17, 1, 2 )
[sub_resource type="AtlasTexture" id=14]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 1, 19, 1, 2 )
[sub_resource type="AtlasTexture" id=15]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 3, 17, 1, 2 )
[sub_resource type="AtlasTexture" id=16]
-flags = 12
+flags = 8
atlas = ExtResource( 2 )
region = Rect2( 3, 19, 1, 2 )
diff --git a/client/Nodes/Tiles/tileset_science_lab.tres b/client/Nodes/Tiles/tileset_science_lab.tres
index 4682400..c535502 100644
--- a/client/Nodes/Tiles/tileset_science_lab.tres
+++ b/client/Nodes/Tiles/tileset_science_lab.tres
@@ -1,6 +1,7 @@
-[gd_resource type="TileSet" load_steps=96 format=2]
+[gd_resource type="TileSet" load_steps=98 format=2]
[ext_resource path="res://Nodes/Tiles/tileset_science_lab.png" type="Texture" id=1]
+[ext_resource path="res://Assets/Art/platform.png" type="Texture" id=2]
[sub_resource type="OccluderPolygon2D" id=1]
polygon = PoolVector2Array( 16, 16, 0, 16, 0, 0, 16, 0 )
@@ -284,6 +285,9 @@ points = PoolVector2Array( 16, 16, 0, 16, 0, 0, 16, 0 )
[sub_resource type="ConvexPolygonShape2D" id=94]
points = PoolVector2Array( 16, 16, 0, 16, 0, 0, 16, 0 )
+[sub_resource type="ConvexPolygonShape2D" id=95]
+points = PoolVector2Array( 16, 9, 0, 9, 0, 7, 16, 7 )
+
[resource]
47/name = "tileset_science_lab.png 47"
47/texture = ExtResource( 1 )
@@ -591,3 +595,33 @@ points = PoolVector2Array( 16, 16, 0, 16, 0, 0, 16, 0 )
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
47/z_index = 0
+48/name = "platform.png 48"
+48/texture = ExtResource( 2 )
+48/tex_offset = Vector2( 0, 0 )
+48/modulate = Color( 1, 1, 1, 1 )
+48/region = Rect2( 0, 0, 16, 16 )
+48/tile_mode = 1
+48/autotile/bitmask_mode = 0
+48/autotile/bitmask_flags = [ ]
+48/autotile/icon_coordinate = Vector2( 0, 0 )
+48/autotile/tile_size = Vector2( 16, 16 )
+48/autotile/spacing = 0
+48/autotile/occluder_map = [ ]
+48/autotile/navpoly_map = [ ]
+48/autotile/priority_map = [ ]
+48/autotile/z_index_map = [ ]
+48/occluder_offset = Vector2( 0, 0 )
+48/navigation_offset = Vector2( 0, 0 )
+48/shape_offset = Vector2( 0, 0 )
+48/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+48/shape = SubResource( 95 )
+48/shape_one_way = true
+48/shape_one_way_margin = 1.0
+48/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": true,
+"one_way_margin": 1.0,
+"shape": SubResource( 95 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+48/z_index = 0
diff --git a/client/Scenes/World.scn b/client/Scenes/World.scn
index a3872ab..2c8ec33 100644
Binary files a/client/Scenes/World.scn and b/client/Scenes/World.scn differ
diff --git a/client/Scripts/Component/Interactable.gd b/client/Scripts/Component/Interactable.gd
new file mode 100644
index 0000000..bfec2fa
--- /dev/null
+++ b/client/Scripts/Component/Interactable.gd
@@ -0,0 +1,18 @@
+extends Area2D
+
+signal interacted
+
+func _ready():
+ connect("body_entered", self, "_on_body_enter")
+ connect("body_exited", self, "_on_body_exit")
+
+func _on_body_enter(body):
+ if body.has_method("add_interactable"):
+ body.add_interactable(self)
+
+func _on_body_exit(body):
+ if body.has_method("remove_interactable"):
+ body.remove_interactable(self)
+
+func interact():
+ emit_signal("interacted")
diff --git a/client/Scripts/Component/StorySpeaker.gd b/client/Scripts/Component/StorySpeaker.gd
index 536ac4b..635d727 100644
--- a/client/Scripts/Component/StorySpeaker.gd
+++ b/client/Scripts/Component/StorySpeaker.gd
@@ -30,11 +30,11 @@ func start_dialog(record : String):
func start_dialog_did(dialog_id : int):
gui = get_node("/root/World/GUI")
-
- nid = 1
- did = dialog_id
-
- process_message(story_reader.get_text(did, nid))
+ if not gui.is_in_dialog():
+ nid = 1
+ did = dialog_id
+
+ process_message(story_reader.get_text(did, nid))
func has_next_node():
return story_reader.has_slot(did, nid, 0)
diff --git a/client/Scripts/Entities/MusicZone.gd b/client/Scripts/Entities/MusicZone.gd
new file mode 100644
index 0000000..b3d6d4d
--- /dev/null
+++ b/client/Scripts/Entities/MusicZone.gd
@@ -0,0 +1,11 @@
+extends Area2D
+
+export var music : AudioStream
+
+func _ready():
+ connect("body_entered", self, "_on_body_entered")
+
+func _on_body_entered(body):
+ if body.has_method("user_input"):
+ if $"/root/MusicManager".stream != music:
+ $"/root/MusicManager".play_stream(music)
diff --git a/client/Scripts/Entities/NPCs/CEO.gd b/client/Scripts/Entities/NPCs/CEO.gd
new file mode 100644
index 0000000..2b83acb
--- /dev/null
+++ b/client/Scripts/Entities/NPCs/CEO.gd
@@ -0,0 +1,9 @@
+extends "res://Scripts/Component/Interactable.gd"
+
+func _ready():
+ connect("interacted", self, "_on_interact")
+ $Speaker.speaker_name = "CEO Grant Blevins"
+ #$Speaker.start_dialog("intro_science")
+
+func _on_interact():
+ $Speaker.start_dialog("intro_meet_ceo")
diff --git a/client/Scripts/Entities/NPCs/IntroScientist.gd b/client/Scripts/Entities/NPCs/IntroScientist.gd
index 93052ea..1544d1d 100644
--- a/client/Scripts/Entities/NPCs/IntroScientist.gd
+++ b/client/Scripts/Entities/NPCs/IntroScientist.gd
@@ -1,7 +1,10 @@
-extends "res://Scripts/Component/StorySpeaker.gd"
+extends "res://Scripts/Component/Interactable.gd"
func _ready():
- start_dialog("intro_science")
+ connect("interacted", self, "_on_interact")
+ $Speaker.speaker_name = "Dr.Thadd"
+ $Speaker.start_dialog("intro_science")
func _on_interact():
- start_dialog("intro_science_followup")
+ $Speaker.start_dialog("intro_science_followup")
+
diff --git a/client/Scripts/Entities/Player.gd b/client/Scripts/Entities/Player.gd
index 74cdf19..fa5138d 100644
--- a/client/Scripts/Entities/Player.gd
+++ b/client/Scripts/Entities/Player.gd
@@ -12,6 +12,20 @@ export var jumpVelocity : float = -150
var moveMotion : float = 0 # Player Input ( <- & -> )
var motion : Vector2 = Vector2(0,0) # Player's current velocity
+var gui
+
+var interactables = []
+
+func add_interactable(interactable):
+ interactables.append(interactable)
+func remove_interactable(interactable):
+ var loc = interactables.find(interactable)
+ if loc >= 0:
+ interactables.remove(loc)
+
+func _process(delta):
+ if Input.is_action_just_pressed("ui_accept") and len(interactables) > 0:
+ interactables[0].interact()
func _physics_process(delta):
@@ -20,7 +34,10 @@ func _physics_process(delta):
if is_on_floor():
motion.y = 0
- user_input()
+ if not gui:
+ gui = get_node("/root/World/GUI")
+ elif not gui.is_in_dialog():
+ user_input()
# Apply velocity limits
moveMotion = clamp(moveMotion, -maxMoveVelocity, maxMoveVelocity)
@@ -32,6 +49,10 @@ func _physics_process(delta):
func user_input():
+ if is_on_floor() and Input.is_action_just_pressed("ui_up") and Input.is_action_pressed("ui_down"):
+ position.y = position.y + 2
+ return
+
if(Input.is_action_pressed("ui_left")):
moveMotion -= moveAcceleration
if(Input.is_action_pressed("ui_right")):
diff --git a/client/Scripts/Singletons/MusicManager.gd b/client/Scripts/Singletons/MusicManager.gd
index 167a6ef..f8a3570 100644
--- a/client/Scripts/Singletons/MusicManager.gd
+++ b/client/Scripts/Singletons/MusicManager.gd
@@ -14,5 +14,11 @@ func play_music(song, loop=true):
main_player.stream = track
main_player.play()
+func play_stream(track, loop = true):
+ looping = loop
+ main_player.stream = track
+ main_player.play()
+
func stop_music():
main_player.stop()
+
diff --git a/client/Scripts/Systems/GameGui.gd b/client/Scripts/Systems/GameGui.gd
index d72d9a1..bf759d6 100644
--- a/client/Scripts/Systems/GameGui.gd
+++ b/client/Scripts/Systems/GameGui.gd
@@ -1,21 +1,18 @@
extends CanvasLayer
+func is_in_dialog():
+ return in_dialog
-# 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():
- pass # Replace with function body.
+var in_dialog = false
func set_dialog(message, speaker=""):
$Dialog.show()
+ in_dialog = true
$Dialog/Textbox/Speaker.text = speaker
$Dialog/Textbox/Body.text = message
func finish_dialog():
+ in_dialog = false
$Dialog.hide()
func clear_choices():
diff --git a/client/project.godot b/client/project.godot
index f39137e..9f9b54a 100644
--- a/client/project.godot
+++ b/client/project.godot
@@ -27,6 +27,16 @@ MusicManager="*res://Scripts/Singletons/MusicManager.gd"
enabled=PoolStringArray( "EXP-System-Dialog" )
+[input]
+
+ui_up={
+"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":16777232,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"unicode":0,"echo":false,"script":null)
+ ]
+}
+
[rendering]
environment/default_environment="res://default_env.tres"