Compare commits

..

16 Commits

50 changed files with 481 additions and 830 deletions

23
README.md Normal file
View File

@ -0,0 +1,23 @@
# Ely and the Crab
A game by [kwarel](https://kwarel.itch.io/) and [ashpie](https://ashpie.com) (was Arisu).
It was made during the itch.io weekly game jam 162 (theme: Crabs).
[itch.io page](https://kwarel.itch.io/ely-and-the-crab)
## Licenses
- All 2D images are made by [kwarel](https://kwarel.itch.io/) © 2020 and are licensed under [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/)
- The following sound assets are made by [ashpie](https://ashpie.com) © 2020 and are licensed under [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/):
- Main title music (sounds/main_title.ogg)
- Dialog letter by letter sound effets (sounds/gibberish.wav, sounds/gibberish2.wav)
- Herbert sound effects and theme music (sounds/herbert*.ogg)
- All dialogs are made by [kwarel](https://kwarel.itch.io/) and [ashpie](https://ashpie.com) © 2020 and are licensed under [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/)
- All code (including scripts), godot scenes and godot project files are licensed under [GPL-3.0](https://www.gnu.org/licenses/gpl-3.0.txt)
- Fonts used in this project are public domains (we did not make any of those)
- We also use [two songs by Chris Zabriskie](https://www.chriszabriskie.com/dtv/) and a sound effect that we picked on splice for the campfire
## Play the game
[itch.io page](https://kwarel.itch.io/ely-and-the-crab)

View File

@ -5,9 +5,9 @@
{"name": "Herbert", "text": "This coast is really nice, is it yours?"}, {"name": "Herbert", "text": "This coast is really nice, is it yours?"},
{"name": "Herbert", "text": "..."}, {"name": "Herbert", "text": "..."},
{"name": "Herbert", "text": "Hey-oh, hooman, 're you okay?"}, {"name": "Herbert", "text": "Hey-oh, hooman, 're you okay?"},
{"name": "Ely", "text": "W-wait... Did you just say it was a recent oil tanker sinking?"}, {"name": "Ely", "text": "W-wait... Did you just say it was a recent oil tanker sinking?", "expression": "listening"},
{"name": "Herbert", "text": "Hum... Yeah! It must have sank about a few days ago..."}, {"name": "Herbert", "text": "Hum... Yeah! It must have sank about a few days ago..."},
{"name": "Ely", "text": "..."}, {"name": "Ely", "text": "...", "expression": "listening"},
{"name": "Herbert", "text": "Are you okay?"}, {"name": "Herbert", "text": "Are you okay?"},
{"name": "Ely", "text": "So... Yeah... Here's the thing:"} {"name": "Ely", "text": "So... Yeah... Here's the thing:"}
] ]

View File

@ -1,23 +1,23 @@
[ [
{"name": "Ely", "text": "I am a part of a non-profit organization."}, {"name": "Ely", "text": "I am a part of a non-profit organization.", "expression": "smile"},
{"name": "Herbert", "text": "A what?"}, {"name": "Herbert", "text": "A what?"},
{"name": "Ely", "text": "A bunch of people doing things more or less selflessly."}, {"name": "Ely", "text": "A bunch of people doing things more or less selflessly.", "expression": "smile"},
{"name": "Herbert", "text": "Oh, that's nice!"}, {"name": "Herbert", "text": "Oh, that's nice!"},
{"name": "Ely", "text": "We scan the ocean to find the garbage left by other hu-... uh... other [wave amp=20 freq=2]hoomans[/wave]."}, {"name": "Ely", "text": "We scan the ocean to find the garbage left by other hu-... uh... other [wave amp=20 freq=2]hoomans[/wave].", "expression": "smile"},
{"name": "Herbert", "text": "How neat!"}, {"name": "Herbert", "text": "How neat!"},
{"name": "Ely", "text": "We're mostly pals enjoying scuba diving together and collecting small funds for bigger organizations."}, {"name": "Ely", "text": "We're mostly pals enjoying scuba diving together and collecting small funds for bigger organizations."},
{"name": "Ely", "text": "And... you see, the oil tanker you found..."}, {"name": "Ely", "text": "And... you see, the oil tanker you found..."},
{"name": "Ely", "text": "We were supposed to go through it and gather pieces of information for later dismantlement."}, {"name": "Ely", "text": "We were supposed to go through it and gather pieces of information for later dismantlement."},
{"name": "Ely", "text": "But... as you can tell, it didn't go well."}, {"name": "Ely", "text": "But... as you can tell, it didn't go well.", "expression": "gasp"},
{"name": "Ely", "text": "The sea was angry, thunderous even..."}, {"name": "Ely", "text": "The sea was angry, thunderous even...", "expression": "gasp"},
{"name": "Ely", "text": "And we lost our ship."}, {"name": "Ely", "text": "And we lost our ship.", "expression": "gasp"},
{"name": "Ely", "text": "I don't even know were my friends are..."}, {"name": "Ely", "text": "I don't even know were my friends are...", "expression": "sad"},
{"name": "Ely", "text": "..."}, {"name": "Ely", "text": "...", "expression": "sad"},
{"name": "Herbert", "text": "..."}, {"name": "Herbert", "text": "..."},
{"name": "Ely", "text": "Crap..."}, {"name": "Ely", "text": "Crap...", "expression": "listening"},
{"name": "Ely", "text": "... I don't know why I'm telling you all of that, it's not even what really happened..."}, {"name": "Ely", "text": "... I don't know why I'm telling you all of that, it's not even what really happened...", "expression": "listening"},
{"name": "Ely", "text": "..."}, {"name": "Ely", "text": "..."},
{"name": "Ely", "text": "I-I don't want you to know the truth..."}, {"name": "Ely", "text": "I-I don't want you to know the truth...", "expression": "sad"},
{"name": "Herbert", "text": "..."}, {"name": "Herbert", "text": "..."},
{"name": "Herbert", "text": "That was a beautiful tale."}, {"name": "Herbert", "text": "That was a beautiful tale."},
{"name": "Herbert", "text": "In a sense, it brings me hope to know you're aware that oil tankers are bad."}, {"name": "Herbert", "text": "In a sense, it brings me hope to know you're aware that oil tankers are bad."},

View File

@ -1,54 +1,54 @@
[ [
{"name": "Ely", "text": "... You see, the oil tanker?"}, {"name": "Ely", "text": "... You see, the oil tanker?", "expression": "listening"},
{"name": "Herbert", "text": "Yes."}, {"name": "Herbert", "text": "Yes."},
{"name": "Ely", "text": "I worked there."}, {"name": "Ely", "text": "I worked there.", "expression": "listening"},
{"name": "Ely", "text": "I was the deck officer."}, {"name": "Ely", "text": "I was the deck officer.", "expression": "listening"},
{"name": "Ely", "text": "We were on our way back home after 72 days at sea."}, {"name": "Ely", "text": "We were on our way back home after 72 days at sea.", "expression": "listening"},
{"name": "Ely", "text": "The captain decided it was a good idea to take a shortcut."}, {"name": "Ely", "text": "The captain decided it was a good idea to take a shortcut.", "expression": "listening"},
{"name": "Ely", "text": "They... didn't follow the planned route."}, {"name": "Ely", "text": "They... didn't follow the planned route.", "expression": "listening"},
{"name": "Ely", "text": "We hit something... and we sank."}, {"name": "Ely", "text": "We hit something... and we sank.", "expression": "sad"},
{"name": "Ely", "text": "I lost consciousness and woke up here, alone."}, {"name": "Ely", "text": "I lost consciousness and woke up here, alone.", "expression": "listening"},
{"name": "Ely", "text": "To be clear, I wasn't responsible for that accident."}, {"name": "Ely", "text": "To be clear, I wasn't responsible for that accident.", "expression": "listening"},
{"name": "Ely", "text": "I was just trying to do my job and pay my rent..."}, {"name": "Ely", "text": "I was just trying to do my job and pay my rent...", "expression": "sad"},
{"name": "Herbert", "text": "..."}, {"name": "Herbert", "text": "..."},
{"name": "Ely", "text": "Gosh! Your damn cute face didn't make it easy."}, {"name": "Ely", "text": "Gosh! Your damn cute face didn't make it easy.", "expression": "gasp"},
{"name": "Herbert", "text": "Sorry, I only have one animation, the artist is lazy..."}, {"name": "Herbert", "text": "Sorry, I only have one animation, the artist is lazy..."},
{"name": "Herbert", "text": "So... is that it?"}, {"name": "Herbert", "text": "So... is that it?"},
{"name": "Ely", "text": "Yeah! Pretty much."}, {"name": "Ely", "text": "Yeah! Pretty much.", "expression": "listening"},
{"name": "Herbert", "text": "..."}, {"name": "Herbert", "text": "..."},
{"name": "Herbert", "text": "Why did you tell me the truth?"}, {"name": "Herbert", "text": "Why did you tell me the truth?"},
{"name": "Ely", "text": "wha-", "auto": true}, {"name": "Ely", "text": "wha-", "timer": 0.4, "auto": true, "expression": "listening"},
{"name": "Herbert", "text": "I thought we were telling tales."}, {"name": "Herbert", "text": "I thought we were telling tales."},
{"name": "Ely", "text": "Y-yeah. True."}, {"name": "Ely", "text": "Y-yeah. True.", "expression": "sad"},
{"name": "Ely", "text": "I don't know. I find it really hard to lie."}, {"name": "Ely", "text": "I don't know. I find it really hard to lie.", "expression": "sad"},
{"name": "Ely", "text": "Furthermore, I think it's better to tell the truth."}, {"name": "Ely", "text": "Furthermore, I think it's better to tell the truth.", "expression": "listening"},
{"name": "Herbert", "text": "..."}, {"name": "Herbert", "text": "..."},
{"name": "Herbert", "text": "Is it really?"}, {"name": "Herbert", "text": "Is it really?"},
{"name": "Ely", "text": "What do you mean?"}, {"name": "Ely", "text": "What do you mean?", "expression": "listening"},
{"name": "Herbert", "text": "What does it change? Is the world a better place now?"}, {"name": "Herbert", "text": "What does it change? Is the world a better place now?"},
{"name": "Herbert", "text": "What does it accomplish?"}, {"name": "Herbert", "text": "What does it accomplish?"},
{"name": "Ely", "text": "I mean... Now you know it was hum-... hum... hoomans' fault."}, {"name": "Ely", "text": "I mean... Now you know it was hum-... hum... hoomans' fault.", "expression": "sad"},
{"name": "Herbert", "text": "I already knew that. And besides, what could I [wave amp=20 freq=2]do[/wave] with this knowledge?"}, {"name": "Herbert", "text": "I already knew that. And besides, what could I [wave amp=20 freq=2]do[/wave] with this knowledge?"},
{"name": "Ely", "text": "..."}, {"name": "Ely", "text": "...", "expression": "sad"},
{"name": "Ely", "text": "Nothing..."}, {"name": "Ely", "text": "Nothing...", "expression": "sad"},
{"name": "Ely", "text": "You're just..."}, {"name": "Ely", "text": "You're just...", "expression": "sad"},
{"name": "Herbert", "text": "A cute talking crab?"}, {"name": "Herbert", "text": "A cute talking crab?"},
{"name": "Ely", "text": "Yeah... A cute talking crab."}, {"name": "Ely", "text": "Yeah... A cute talking crab."},
{"name": "Ely", "text": "..."}, {"name": "Ely", "text": "...", "expression": "listening"},
{"name": "Ely", "text": "I'm sorry."}, {"name": "Ely", "text": "I'm sorry.", "expression": "sad"},
{"name": "Ely", "text": "I'm so sorry..."}, {"name": "Ely", "text": "I'm so sorry...", "expression": "sad"},
{"name": "Herbert", "text": "..."}, {"name": "Herbert", "text": "..."},
{"name": "Herbert", "text": "You said you were just trying to do your job and pay your rent."}, {"name": "Herbert", "text": "You said you were just trying to do your job and pay your rent."},
{"name": "Ely", "text": "Yes true."}, {"name": "Ely", "text": "Yes true.", "expression": "listening"},
{"name": "Ely", "text": "But I'm still responsible."}, {"name": "Ely", "text": "But I'm still responsible.", "expression": "listening"},
{"name": "Ely", "text": "I-I shouldn't have picked this job. I know it's bad for the environment."}, {"name": "Ely", "text": "I-I shouldn't have picked this job. I know it's bad for the environment.", "expression": "sad"},
{"name": "Ely", "text": "And participating in this system... ain't a pleasure at all."}, {"name": "Ely", "text": "And participating in this system... ain't a pleasure at all.", "expression": "sad"},
{"name": "Ely", "text": "Uh. Crap."}, {"name": "Ely", "text": "Uh. Crap.", "expression": "sad"},
{"name": "Ely", "text": "I'm so sorry."}, {"name": "Ely", "text": "I'm so sorry.", "expression": "sad"},
{"name": "Herbert", "text": "..."}, {"name": "Herbert", "text": "..."},
{"name": "Herbert", "text": "You had no choice but to pick this job."}, {"name": "Herbert", "text": "You had no choice but to pick this job."},
{"name": "Ely", "text": "... I suppose..."}, {"name": "Ely", "text": "... I suppose...", "expression": "listening"},
{"name": "Ely", "text": "Yes... That was the only way to pay my bills."}, {"name": "Ely", "text": "Yes... That was the only way to pay my bills.", "expression": "listening"},
{"name": "Herbert", "text": "..."}, {"name": "Herbert", "text": "..."},
{"name": "Herbert", "text": "To be honest... It's okay."}, {"name": "Herbert", "text": "To be honest... It's okay."},
{"name": "Herbert", "text": "You are in a system that requires you to take that job."}, {"name": "Herbert", "text": "You are in a system that requires you to take that job."},
@ -56,14 +56,15 @@
{"name": "Herbert", "text": "If I needed someone or something to blame it could be you."}, {"name": "Herbert", "text": "If I needed someone or something to blame it could be you."},
{"name": "Herbert", "text": "But it feels like the system you're talking about is what's to blame."}, {"name": "Herbert", "text": "But it feels like the system you're talking about is what's to blame."},
{"name": "Herbert", "text": "What forced you to take the job really is eviler than you."}, {"name": "Herbert", "text": "What forced you to take the job really is eviler than you."},
{"name": "Ely", "text": "[code]Actually it's \"more evil than\".[/code]"}, {"name": "Ely", "text": "[code]Actually it's \"more evil than\".[/code]", "expression": "smile"},
{"name": "Herbert", "text": "Welp imma take that back."}, {"name": "Herbert", "text": "Welp imma take that back."},
{"name": "Ely", "text": "Haha"}, {"name": "Ely", "text": "Haha", "expression": "smile"},
{"name": "Herbert", "text": "I'll say one last thing."}, {"name": "Herbert", "text": "I'll say one last thing."},
{"name": "Ely", "text": "..."}, {"name": "Ely", "text": "...", "expression": "listening"},
{"name": "Herbert", "text": "Maybe some of us won't blame the system."}, {"name": "Herbert", "text": "Maybe some of us won't blame the system."},
{"name": "Herbert", "text": "Maybe some of us will blame you."}, {"name": "Herbert", "text": "Maybe some of us will blame you."},
{"name": "Herbert", "text": "And I cannot do anything about that."}, {"name": "Herbert", "text": "And I cannot do anything about that."},
{"name": "Ely", "text": "..."}, {"name": "Ely", "text": "...", "expression": "listening"},
{"name": "Ely", "text": "Fair."} {"name": "Ely", "text": "Fair.", "expression": "listening"},
{"animation": "fadeout", "timer": 2, "auto": true}
] ]

View File

@ -1,4 +1,4 @@
[ [
{"name": "Herbert", "text": "There was some sort of weird goo floating around.", "upside_down": true, "timer": 6, "auto": true}, {"name": "", "text": "There was some sort of weird goo floating around.", "upside_down": true},
{"name": "Herbert", "text": "So I decided to look for the source.", "upside_down": true, "timer": 6, "auto": true} {"name": "", "text": "So I decided to look for the source.", "upside_down": true}
] ]

View File

@ -1,10 +1,10 @@
[ [
{"timer": 2, "auto": true}, {"animation": "fadein", "timer": 2, "auto": true},
{"name": "Ely", "text": "What a shame..."}, {"name": "Ely", "text": "What a shame...", "expression": "sad"},
{"name": "Ely", "text": "I don't like being alone."}, {"name": "Ely", "text": "I don't like being alone.", "expression": "sad"},
{"name": "Ely", "text": "I just want to go home!"}, {"name": "Ely", "text": "I just want to go home!", "expression": "sad"},
{"name": "Ely", "text": "Hopefully someone will come by and rescue me..."}, {"name": "Ely", "text": "Hopefully someone will come by and rescue me...", "expression": "sad"},
{"timer": 2, "auto": true}, {"timer": 2, "auto": true},
@ -18,16 +18,16 @@
{"name": "Crab", "text": "Hey you!", "audio": "herbert_is_happy"}, {"name": "Crab", "text": "Hey you!", "audio": "herbert_is_happy"},
{"name": "Crab", "text": "You ok buddy?"}, {"name": "Crab", "text": "You ok buddy?"},
{"name": "Ely", "text": "I must be going crazy."}, {"name": "Ely", "text": "I must be going crazy.", "expression": "gasp"},
{"name": "Crab", "text": "You don't look [i]that[/i] crazy to me."}, {"name": "Crab", "text": "You don't look [i]that[/i] crazy to me."},
{"name": "Ely", "text": "You're a crab."}, {"name": "Ely", "text": "You're a crab."},
{"name": "Crab", "text": "Yes."}, {"name": "Crab", "text": "Yes."},
{"name": "Ely", "text": "You speak."}, {"name": "Ely", "text": "You speak."},
{"name": "Crab", "text": "Of course I do you muffinhead."}, {"name": "Crab", "text": "Of course I do you muffinhead."},
{"name": "Ely", "text": "Cuuuuute!", "expression": "blush"}, {"name": "Ely", "text": "Cuuuuute!", "expression": "cute"},
{"name": "Ely", "text": "..."}, {"name": "Ely", "text": "...", "expression": "smile"},
{"name": "Ely", "text": "So... You're a cute talking crab."}, {"name": "Ely", "text": "So... You're a cute talking crab.", "expression": "smile"},
{"name": "Crab", "text": "", "expression": "blush"}, {"name": "Crab", "text": "", "expression": "cute"},
{"name": "Ely", "text": "Do you have a name? [code](by any chance...)[/code]"}, {"name": "Ely", "text": "Do you have a name? [code](by any chance...)[/code]"},
{"name": "Crab", "text": "The name's Herbert."}, {"name": "Crab", "text": "The name's Herbert."},
{"name": "Herbert", "text": "I am a [wave amp=20 freq=2]Pachygrapsus Marmoratus[/wave] as you [i]hoomans[/i] like to call us."}, {"name": "Herbert", "text": "I am a [wave amp=20 freq=2]Pachygrapsus Marmoratus[/wave] as you [i]hoomans[/i] like to call us."},

View File

@ -1,6 +1,6 @@
[ [
{"animation": "fadein", "timer": 2, "auto": true}, {"animation": "fadein", "timer": 2, "auto": true},
{"name": "Herbert", "text": "Finally I found the source.", "timer": 4, "auto": true, "upside_down": true}, {"name": "", "text": "Finally I found the source.", "upside_down": true},
{"name": "Herbert", "text": "It was a recently sunk oil tanker.", "timer": 4, "auto": true, "upside_down": true}, {"name": "", "text": "It was a recently sunk oil tanker.", "upside_down": true},
{"name": "Herbert", "text": "I had to investigate further.", "timer": 4, "auto": true, "upside_down": true} {"name": "", "text": "I had to investigate further.", "upside_down": true}
] ]

View File

@ -1,3 +1,3 @@
[ [
{"name": "Herbert", "text": "The closer I got, the more oil there was.", "timer": 6, "auto": true, "upside_down": true} {"name": "", "text": "The closer I got, the more oil there was.", "upside_down": true}
] ]

View File

@ -1,3 +1,3 @@
[ [
{"name": "Herbert", "text": "The inside was full of oil, I was really close.", "upside_down": true, "timer": 6, "auto": true} {"name": "", "text": "The inside was full of oil, I was really close.", "upside_down": true}
] ]

View File

@ -1,4 +1,4 @@
[ [
{"name": "Herbert", "text": "And there it was, one of the tank was damaged.", "upside_down": true}, {"name": "", "text": "And there it was, one of the tank was damaged.", "upside_down": true},
{"name": "Herbert", "text": "I'm just a crab, I couldn't do anything about it.", "upside_down": true, "animation": "fadeout", "timer": 2} {"name": "", "text": "I'm just a crab, I couldn't do anything about it.", "upside_down": true, "animation": "fadeout", "timer": 2}
] ]

View File

@ -1,5 +1,5 @@
[ [
{"name": "Herbert", "text": "Back at my home, there was goo everywhere.", "expression": "black"}, {"name": "", "text": "Back at my home, there was goo everywhere.", "expression": "black"},
{"animation": "fadein", "timer": 2, "auto": true}, {"animation": "fadein", "timer": 2, "auto": true},
{"name": "Herbert", "text": "My friends and I were forced to move..."} {"name": "", "text": "My friends and I were forced to move..."}
] ]

View File

@ -0,0 +1,9 @@
[gd_resource type="DynamicFont" load_steps=2 format=2]
[ext_resource path="res://fonts/EnterCommand-Bold.ttf" type="DynamicFontData" id=1]
[resource]
size = 32
outline_color = Color( 0, 0, 0, 1 )
extra_spacing_bottom = -6
font_data = ExtResource( 1 )

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/ParralaxPoutre3.png-b5d3bc235ed07e42bde584c21cebcf92.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://images/game1/ParralaxPoutre3.png"
dest_files=[ "res://.import/ParralaxPoutre3.png-b5d3bc235ed07e42bde584c21cebcf92.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=true
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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
images/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 894 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 164 B

View File

@ -8,7 +8,7 @@
[node name="root" type="Node2D"] [node name="root" type="Node2D"]
[node name="CampfireBackground" parent="." instance=ExtResource( 2 )] [node name="CampfireBackground" parent="." instance=ExtResource( 2 )]
frame = 14 frame = 2
[node name="Herbert" parent="." instance=ExtResource( 1 )] [node name="Herbert" parent="." instance=ExtResource( 1 )]
visible = false visible = false

View File

@ -12,11 +12,12 @@ centered = false
[node name="FireCrackles" type="AudioStreamPlayer" parent="."] [node name="FireCrackles" type="AudioStreamPlayer" parent="."]
stream = ExtResource( 3 ) stream = ExtResource( 3 )
volume_db = -6.0
autoplay = true autoplay = true
[node name="Ely" type="AnimatedSprite" parent="."] [node name="Ely" type="AnimatedSprite" parent="."]
frames = ExtResource( 2 ) frames = ExtResource( 2 )
animation = "idle" animation = "idle"
frame = 74 frame = 53
playing = true playing = true
centered = false centered = false

View File

@ -1,10 +1,11 @@
[gd_scene load_steps=6 format=2] [gd_scene load_steps=7 format=2]
[ext_resource path="res://scripts/campfire2.gd" type="Script" id=1] [ext_resource path="res://scripts/campfire2.gd" type="Script" id=1]
[ext_resource path="res://scenes/campfire/Herbert.tscn" type="PackedScene" id=2] [ext_resource path="res://scenes/campfire/Herbert.tscn" type="PackedScene" id=2]
[ext_resource path="res://scenes/campfire/CampfireBackground.tscn" type="PackedScene" id=3] [ext_resource path="res://scenes/campfire/CampfireBackground.tscn" type="PackedScene" id=3]
[ext_resource path="res://scenes/dialogue.tscn" type="PackedScene" id=4] [ext_resource path="res://scenes/dialogue.tscn" type="PackedScene" id=4]
[ext_resource path="res://images/campfire/thechoice.tres" type="SpriteFrames" id=5] [ext_resource path="res://images/campfire/thechoice.tres" type="SpriteFrames" id=5]
[ext_resource path="res://fonts/dialog_default_font_bold.tres" type="DynamicFont" id=6]
[node name="Node2D" type="Node2D"] [node name="Node2D" type="Node2D"]
script = ExtResource( 1 ) script = ExtResource( 1 )
@ -32,3 +33,26 @@ visible = false
frames = ExtResource( 5 ) frames = ExtResource( 5 )
animation = "lie" animation = "lie"
centered = false centered = false
[node name="Lie" type="Label" parent="TheChoice"]
margin_left = 127.633
margin_top = 75.0
margin_right = 167.633
margin_bottom = 97.0
custom_fonts/font = ExtResource( 6 )
text = "Lie"
align = 1
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Tell the truth" type="Label" parent="TheChoice"]
margin_top = 3.71011
margin_right = 84.0
margin_bottom = 25.7101
custom_fonts/font = ExtResource( 6 )
text = "Truth"
align = 1
__meta__ = {
"_edit_use_anchors_": false
}

View File

@ -1,8 +1,10 @@
[gd_scene load_steps=2 format=2] [gd_scene load_steps=3 format=2]
[ext_resource path="res://images/Credits.png" type="Texture" id=1] [ext_resource path="res://images/Credits.png" type="Texture" id=1]
[ext_resource path="res://scripts/credits.gd" type="Script" id=2]
[node name="Node2D" type="Node2D"] [node name="Node2D" type="Node2D"]
script = ExtResource( 2 )
[node name="Sprite" type="Sprite" parent="."] [node name="Sprite" type="Sprite" parent="."]
texture = ExtResource( 1 ) texture = ExtResource( 1 )

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=14 format=2] [gd_scene load_steps=16 format=2]
[ext_resource path="res://images/ui/dialogue_bg.png" type="Texture" id=1] [ext_resource path="res://images/ui/dialogue_bg.png" type="Texture" id=1]
[ext_resource path="res://fonts/dialog_default_font.tres" type="DynamicFont" id=2] [ext_resource path="res://fonts/dialog_default_font.tres" type="DynamicFont" id=2]
@ -8,6 +8,8 @@
[ext_resource path="res://BlackScreen.tscn" type="PackedScene" id=6] [ext_resource path="res://BlackScreen.tscn" type="PackedScene" id=6]
[ext_resource path="res://scripts/BlackScreen.gd" type="Script" id=7] [ext_resource path="res://scripts/BlackScreen.gd" type="Script" id=7]
[ext_resource path="res://scripts/ControlIndicator.gd" type="Script" id=8] [ext_resource path="res://scripts/ControlIndicator.gd" type="Script" id=8]
[ext_resource path="res://sounds/gibberish.wav" type="AudioStream" id=9]
[ext_resource path="res://sounds/gibberish2.wav" type="AudioStream" id=10]
[sub_resource type="VisualShaderNodeColorConstant" id=1] [sub_resource type="VisualShaderNodeColorConstant" id=1]
constant = Color( 0, 0, 0, 0.803922 ) constant = Color( 0, 0, 0, 0.803922 )
@ -212,3 +214,9 @@ fit_content_height = true
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="GibberishPlayer1" type="AudioStreamPlayer" parent="."]
stream = ExtResource( 9 )
[node name="GibberishPlayer2" type="AudioStreamPlayer" parent="."]
stream = ExtResource( 10 )

View File

@ -34,7 +34,7 @@ extents = Vector2( 13.4499, 41.9587 )
[sub_resource type="RectangleShape2D" id=4] [sub_resource type="RectangleShape2D" id=4]
extents = Vector2( 6.44203, 23.0973 ) extents = Vector2( 6.44203, 23.0973 )
[sub_resource type="Shader" id=14] [sub_resource type="Shader" id=5]
code = "shader_type canvas_item; code = "shader_type canvas_item;
uniform sampler2D tex_frg_3; uniform sampler2D tex_frg_3;
uniform sampler2D tex_frg_7; uniform sampler2D tex_frg_7;
@ -100,8 +100,8 @@ void light() {
" "
custom_defines = "" custom_defines = ""
[sub_resource type="ShaderMaterial" id=13] [sub_resource type="ShaderMaterial" id=6]
shader = SubResource( 14 ) shader = SubResource( 5 )
[node name="Node2D" type="Node2D"] [node name="Node2D" type="Node2D"]
script = ExtResource( 3 ) script = ExtResource( 3 )
@ -109,6 +109,10 @@ dialogue = "res://dialogues/game1.json"
[node name="Game" type="Node2D" parent="."] [node name="Game" type="Node2D" parent="."]
[node name="GameControlIndicator" type="AnimatedSprite" parent="."]
position = Vector2( 96, 70 )
script = ExtResource( 8 )
[node name="Opening2" type="Node2D" parent="."] [node name="Opening2" type="Node2D" parent="."]
[node name="Opening2Bg" type="AnimatedSprite" parent="Opening2"] [node name="Opening2Bg" type="AnimatedSprite" parent="Opening2"]
@ -203,7 +207,7 @@ frames = ExtResource( 12 )
centered = false centered = false
[node name="OpeningOver" type="AnimatedSprite" parent="Opening1"] [node name="OpeningOver" type="AnimatedSprite" parent="Opening1"]
material = SubResource( 13 ) material = SubResource( 6 )
frames = ExtResource( 1 ) frames = ExtResource( 1 )
centered = false centered = false

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=10 format=2] [gd_scene load_steps=11 format=2]
[ext_resource path="res://scripts/menu/title_background.gd" type="Script" id=1] [ext_resource path="res://scripts/menu/title_background.gd" type="Script" id=1]
[ext_resource path="res://fonts/dialog_default_font.tres" type="DynamicFont" id=2] [ext_resource path="res://fonts/dialog_default_font.tres" type="DynamicFont" id=2]
@ -7,12 +7,14 @@
[ext_resource path="res://scripts/menu/MainMenu.gd" type="Script" id=5] [ext_resource path="res://scripts/menu/MainMenu.gd" type="Script" id=5]
[ext_resource path="res://images/main_menu/title_background_campfire.tres" type="SpriteFrames" id=6] [ext_resource path="res://images/main_menu/title_background_campfire.tres" type="SpriteFrames" id=6]
[ext_resource path="res://images/main_menu/titleWithoutEly_loop.tres" type="SpriteFrames" id=7] [ext_resource path="res://images/main_menu/titleWithoutEly_loop.tres" type="SpriteFrames" id=7]
[ext_resource path="res://scripts/main_menu.gd" type="Script" id=9]
[sub_resource type="StyleBoxEmpty" id=1] [sub_resource type="StyleBoxEmpty" id=1]
[sub_resource type="StyleBoxEmpty" id=2] [sub_resource type="StyleBoxEmpty" id=2]
[node name="Node2D" type="Node2D"] [node name="Node2D" type="Node2D"]
script = ExtResource( 9 )
[node name="background" type="AnimatedSprite" parent="."] [node name="background" type="AnimatedSprite" parent="."]
frames = ExtResource( 7 ) frames = ExtResource( 7 )
@ -36,29 +38,27 @@ script = ExtResource( 1 )
start_delay = 4.0 start_delay = 4.0
[node name="UI" type="Control" parent="."] [node name="UI" type="Control" parent="."]
margin_right = 40.0 margin_right = 192.0
margin_bottom = 40.0 margin_bottom = 108.0
script = ExtResource( 5 ) script = ExtResource( 5 )
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="Buttons" type="Control" parent="UI"] [node name="Buttons" type="VBoxContainer" parent="UI"]
margin_right = 40.0 margin_left = 74.0
margin_bottom = 40.0 margin_top = 19.0
margin_right = 192.0
margin_bottom = 74.0
alignment = 2
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="PlayButton" type="Button" parent="UI/Buttons"] [node name="PlayButton" type="Button" parent="UI/Buttons"]
anchor_left = 3.875 margin_top = 23.0
anchor_top = 1.35 margin_right = 118.0
anchor_right = 3.875 margin_bottom = 37.0
anchor_bottom = 1.35
margin_left = -13.3871
margin_top = -17.551
margin_right = 30.6129
margin_bottom = 2.449
custom_styles/focus = SubResource( 1 ) custom_styles/focus = SubResource( 1 )
custom_fonts/font = ExtResource( 2 ) custom_fonts/font = ExtResource( 2 )
custom_colors/font_color = Color( 0.282353, 0.282353, 0.282353, 1 ) custom_colors/font_color = Color( 0.282353, 0.282353, 0.282353, 1 )
@ -72,14 +72,9 @@ __meta__ = {
scene_to_load = "res://scenes/campfire.tscn" scene_to_load = "res://scenes/campfire.tscn"
[node name="QuitButton" type="Button" parent="UI/Buttons"] [node name="QuitButton" type="Button" parent="UI/Buttons"]
anchor_left = 3.875 margin_top = 41.0
anchor_top = 1.35 margin_right = 118.0
anchor_right = 3.875 margin_bottom = 55.0
anchor_bottom = 1.35
margin_left = -13.3871
margin_top = 2.449
margin_right = 30.6129
margin_bottom = 22.449
custom_styles/focus = SubResource( 2 ) custom_styles/focus = SubResource( 2 )
custom_fonts/font = ExtResource( 2 ) custom_fonts/font = ExtResource( 2 )
custom_colors/font_color = Color( 0.282353, 0.282353, 0.282353, 1 ) custom_colors/font_color = Color( 0.282353, 0.282353, 0.282353, 1 )
@ -90,5 +85,22 @@ script = ExtResource( 3 )
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="AnotherChoiceButton" type="Button" parent="UI/Buttons"]
visible = false
margin_top = 41.0
margin_right = 118.0
margin_bottom = 55.0
custom_styles/focus = SubResource( 2 )
custom_fonts/font = ExtResource( 2 )
custom_colors/font_color = Color( 0.282353, 0.282353, 0.282353, 1 )
custom_colors/font_color_hover = Color( 1, 1, 1, 1 )
text = "Make another choice"
flat = true
script = ExtResource( 3 )
__meta__ = {
"_editor_description_": ""
}
scene_to_load = "res://scenes/campfire2.tscn"
[connection signal="animation_finished" from="ely" to="ely" method="_on_background_animation_finished"] [connection signal="animation_finished" from="ely" to="ely" method="_on_background_animation_finished"]
[connection signal="animation_finished" from="fire" to="fire" method="_on_background_animation_finished"] [connection signal="animation_finished" from="fire" to="fire" method="_on_background_animation_finished"]

View File

@ -25,52 +25,52 @@
[ext_resource path="res://images/oil_tanker/OilTankerLeak_Midground_GooMask.png" type="Texture" id=23] [ext_resource path="res://images/oil_tanker/OilTankerLeak_Midground_GooMask.png" type="Texture" id=23]
[ext_resource path="res://images/oil_tanker/OilTankerCrabnimation.tres" type="SpriteFrames" id=24] [ext_resource path="res://images/oil_tanker/OilTankerCrabnimation.tres" type="SpriteFrames" id=24]
[sub_resource type="RectangleShape2D" id=6] [sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 10, 34.563 ) extents = Vector2( 10, 34.563 )
[sub_resource type="RectangleShape2D" id=7] [sub_resource type="RectangleShape2D" id=2]
extents = Vector2( 10, 34.563 ) extents = Vector2( 10, 34.563 )
[sub_resource type="RectangleShape2D" id=8] [sub_resource type="RectangleShape2D" id=3]
extents = Vector2( 276.861, 9.9101 ) extents = Vector2( 276.861, 9.9101 )
[sub_resource type="RectangleShape2D" id=9] [sub_resource type="RectangleShape2D" id=4]
extents = Vector2( 276.861, 9.9101 ) extents = Vector2( 276.861, 9.9101 )
[sub_resource type="RectangleShape2D" id=10] [sub_resource type="RectangleShape2D" id=5]
extents = Vector2( 175.74, 9.07445 ) extents = Vector2( 175.74, 9.07445 )
[sub_resource type="CircleShape2D" id=11] [sub_resource type="CircleShape2D" id=6]
radius = 31.4057 radius = 31.4057
[sub_resource type="RectangleShape2D" id=20] [sub_resource type="RectangleShape2D" id=7]
extents = Vector2( 10, 22.4756 ) extents = Vector2( 10, 22.4756 )
[sub_resource type="RectangleShape2D" id=12] [sub_resource type="RectangleShape2D" id=8]
extents = Vector2( 10, 27.9493 ) extents = Vector2( 10, 27.9493 )
[sub_resource type="RectangleShape2D" id=13] [sub_resource type="RectangleShape2D" id=9]
extents = Vector2( 10, 27.9493 ) extents = Vector2( 10, 27.9493 )
[sub_resource type="RectangleShape2D" id=14] [sub_resource type="RectangleShape2D" id=10]
extents = Vector2( 20.5315, 7.16187 ) extents = Vector2( 20.5315, 7.16187 )
[sub_resource type="RectangleShape2D" id=15] [sub_resource type="RectangleShape2D" id=11]
extents = Vector2( 85.2849, 7.16187 ) extents = Vector2( 85.2849, 7.16187 )
[sub_resource type="SegmentShape2D" id=16] [sub_resource type="SegmentShape2D" id=12]
b = Vector2( 70.2283, 33.9024 ) b = Vector2( 70.2283, 33.9024 )
[sub_resource type="SegmentShape2D" id=17] [sub_resource type="SegmentShape2D" id=13]
b = Vector2( 122.205, -7.65517 ) b = Vector2( 122.205, -7.65517 )
[sub_resource type="SegmentShape2D" id=18] [sub_resource type="SegmentShape2D" id=14]
b = Vector2( 107.673, 44.0238 ) b = Vector2( 107.673, 44.0238 )
[sub_resource type="RectangleShape2D" id=19] [sub_resource type="RectangleShape2D" id=15]
extents = Vector2( 4.85875, 16.0913 ) extents = Vector2( 4.85875, 16.0913 )
[sub_resource type="RectangleShape2D" id=21] [sub_resource type="RectangleShape2D" id=16]
extents = Vector2( 4.85875, 16.0913 ) extents = Vector2( 4.85875, 16.0913 )
[node name="Node2D" type="Node2D"] [node name="Node2D" type="Node2D"]
@ -127,7 +127,7 @@ collision_mask = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/walls/Wall"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/walls/Wall"]
position = Vector2( -23.7448, 88.1799 ) position = Vector2( -23.7448, 88.1799 )
shape = SubResource( 6 ) shape = SubResource( 1 )
[node name="Wall4" type="StaticBody2D" parent="InsideOilTanker2/walls"] [node name="Wall4" type="StaticBody2D" parent="InsideOilTanker2/walls"]
collision_layer = 2147483652 collision_layer = 2147483652
@ -138,7 +138,7 @@ __meta__ = {
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/walls/Wall4"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/walls/Wall4"]
position = Vector2( 520.202, 91.1098 ) position = Vector2( 520.202, 91.1098 )
shape = SubResource( 7 ) shape = SubResource( 2 )
[node name="Wall2" type="StaticBody2D" parent="InsideOilTanker2/walls"] [node name="Wall2" type="StaticBody2D" parent="InsideOilTanker2/walls"]
collision_layer = 2147483652 collision_layer = 2147483652
@ -149,7 +149,7 @@ __meta__ = {
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/walls/Wall2"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/walls/Wall2"]
position = Vector2( 249.14, 122.296 ) position = Vector2( 249.14, 122.296 )
shape = SubResource( 8 ) shape = SubResource( 3 )
[node name="Wall3" type="StaticBody2D" parent="InsideOilTanker2/walls"] [node name="Wall3" type="StaticBody2D" parent="InsideOilTanker2/walls"]
collision_layer = 2147483652 collision_layer = 2147483652
@ -160,7 +160,7 @@ __meta__ = {
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/walls/Wall3"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/walls/Wall3"]
position = Vector2( 244.468, 58.9552 ) position = Vector2( 244.468, 58.9552 )
shape = SubResource( 9 ) shape = SubResource( 4 )
[node name="Wall5" type="StaticBody2D" parent="InsideOilTanker2/walls"] [node name="Wall5" type="StaticBody2D" parent="InsideOilTanker2/walls"]
collision_layer = 2147483652 collision_layer = 2147483652
@ -172,7 +172,7 @@ __meta__ = {
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/walls/Wall5"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/walls/Wall5"]
position = Vector2( 342.076, 75.064 ) position = Vector2( 342.076, 75.064 )
rotation = 0.0123712 rotation = 0.0123712
shape = SubResource( 10 ) shape = SubResource( 5 )
[node name="Wall6" type="StaticBody2D" parent="InsideOilTanker2/walls"] [node name="Wall6" type="StaticBody2D" parent="InsideOilTanker2/walls"]
collision_layer = 2147483652 collision_layer = 2147483652
@ -184,7 +184,7 @@ __meta__ = {
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/walls/Wall6"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/walls/Wall6"]
position = Vector2( 168.01, 51.7275 ) position = Vector2( 168.01, 51.7275 )
rotation = 0.0123712 rotation = 0.0123712
shape = SubResource( 11 ) shape = SubResource( 6 )
[node name="NextTrigger" type="Area2D" parent="InsideOilTanker2"] [node name="NextTrigger" type="Area2D" parent="InsideOilTanker2"]
collision_layer = 4 collision_layer = 4
@ -192,7 +192,7 @@ collision_mask = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/NextTrigger"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker2/NextTrigger"]
position = Vector2( 330.844, 100.227 ) position = Vector2( 330.844, 100.227 )
shape = SubResource( 20 ) shape = SubResource( 7 )
[node name="InsideOilTanker" type="AnimatedSprite" parent="."] [node name="InsideOilTanker" type="AnimatedSprite" parent="."]
frames = ExtResource( 3 ) frames = ExtResource( 3 )
@ -219,55 +219,55 @@ centered = false
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall"]
position = Vector2( 208.261, 91.1098 ) position = Vector2( 208.261, 91.1098 )
shape = SubResource( 12 ) shape = SubResource( 8 )
[node name="Wall2" type="StaticBody2D" parent="InsideOilTanker/walls"] [node name="Wall2" type="StaticBody2D" parent="InsideOilTanker/walls"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall2"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall2"]
position = Vector2( -23.7448, 81.6604 ) position = Vector2( -23.7448, 81.6604 )
shape = SubResource( 13 ) shape = SubResource( 9 )
[node name="Wall5" type="StaticBody2D" parent="InsideOilTanker/walls"] [node name="Wall5" type="StaticBody2D" parent="InsideOilTanker/walls"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall5"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall5"]
position = Vector2( 6.44882, 51.7275 ) position = Vector2( 6.44882, 51.7275 )
shape = SubResource( 14 ) shape = SubResource( 10 )
[node name="Wall6" type="StaticBody2D" parent="InsideOilTanker/walls"] [node name="Wall6" type="StaticBody2D" parent="InsideOilTanker/walls"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall6"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall6"]
position = Vector2( 127.185, 119.399 ) position = Vector2( 127.185, 119.399 )
shape = SubResource( 15 ) shape = SubResource( 11 )
[node name="Wall7" type="StaticBody2D" parent="InsideOilTanker/walls"] [node name="Wall7" type="StaticBody2D" parent="InsideOilTanker/walls"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall7"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall7"]
position = Vector2( 10.2871, 55.1923 ) position = Vector2( 10.2871, 55.1923 )
shape = SubResource( 16 ) shape = SubResource( 12 )
[node name="Wall9" type="StaticBody2D" parent="InsideOilTanker/walls"] [node name="Wall9" type="StaticBody2D" parent="InsideOilTanker/walls"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall9"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall9"]
position = Vector2( 79.5423, 88.1799 ) position = Vector2( 79.5423, 88.1799 )
shape = SubResource( 17 ) shape = SubResource( 13 )
[node name="Wall10" type="StaticBody2D" parent="InsideOilTanker/walls"] [node name="Wall10" type="StaticBody2D" parent="InsideOilTanker/walls"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall10"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/walls/Wall10"]
position = Vector2( -15.3507, 75.064 ) position = Vector2( -15.3507, 75.064 )
shape = SubResource( 18 ) shape = SubResource( 14 )
[node name="NextTrigger" type="Area2D" parent="InsideOilTanker"] [node name="NextTrigger" type="Area2D" parent="InsideOilTanker"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/NextTrigger"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/NextTrigger"]
position = Vector2( 197.689, 97.7763 ) position = Vector2( 197.689, 97.7763 )
shape = SubResource( 19 ) shape = SubResource( 15 )
[node name="DialogueTrigger" type="Area2D" parent="InsideOilTanker"] [node name="DialogueTrigger" type="Area2D" parent="InsideOilTanker"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/DialogueTrigger"] [node name="CollisionShape2D" type="CollisionShape2D" parent="InsideOilTanker/DialogueTrigger"]
position = Vector2( 84.0628, 97.7763 ) position = Vector2( 84.0628, 97.7763 )
shape = SubResource( 21 ) shape = SubResource( 16 )
[node name="OilTanker" type="AnimatedSprite" parent="."] [node name="OilTanker" type="AnimatedSprite" parent="."]
frames = ExtResource( 2 ) frames = ExtResource( 2 )

View File

@ -11,7 +11,7 @@ const press_right = preload("res://images/Controls/PressRight.tres")
var last_is_joy = false var last_is_joy = false
func show_press(action : String): func show_press(action : String):
if action == 'ui_accept': if action == 'ui_accept' || action == 'interact':
frames = press_a if last_is_joy else press_space frames = press_a if last_is_joy else press_space
if action == 'right': if action == 'right':
frames = press_right frames = press_right
@ -24,7 +24,7 @@ func show_press(action : String):
play('default') play('default')
show() show()
func _input(event): func _input(_event):
last_is_joy = false last_is_joy = false
for b in [ for b in [
JOY_XBOX_A, JOY_XBOX_A,

View File

@ -16,7 +16,7 @@ func start() -> void:
func load_dialogue(file_path) -> Array: func load_dialogue(file_path) -> Array:
var file = File.new() var file = File.new()
assert (file.file_exists(file_path)) # assert (file.file_exists(file_path))
file.open(file_path, file.READ) file.open(file_path, file.READ)
var dialogue = parse_json(file.get_as_text()) var dialogue = parse_json(file.get_as_text())

View File

@ -10,8 +10,8 @@ onready var name_label = get_node(name_label_path) as RichTextLabel
export (NodePath) var text_label_path export (NodePath) var text_label_path
onready var text_label = get_node(text_label_path) as RichTextLabel onready var text_label = get_node(text_label_path) as RichTextLabel
export (NodePath) var expression_node_path #export (NodePath) var expression_node_path
onready var expression_node = get_node(expression_node_path) as RichTextLabel #onready var expression_node = get_node(expression_node_path) as RichTextLabel
onready var music_player = get_node('/root/MusicPlayer') as MusicPlayer onready var music_player = get_node('/root/MusicPlayer') as MusicPlayer
@ -36,11 +36,11 @@ func _ready():
$MarginContainer.hide() $MarginContainer.hide()
func start_dialogue(dialog_path : String) -> DialogueAction: func start_dialogue(dialog_path : String) -> DialogueAction:
var dialogue = DialogueAction.new() var action = DialogueAction.new()
dialogue.dialogue_file_path = dialog_path action.dialogue_file_path = dialog_path
dialogue.dialogue_box = self action.dialogue_box = self
dialogue.start() action.start()
return dialogue return action
func start(_dialogue : Array): func start(_dialogue : Array):
dialogue = _dialogue dialogue = _dialogue
@ -96,11 +96,14 @@ func update() -> void:
$MarginContainer/VBoxContainer.alignment = BoxContainer.ALIGN_END $MarginContainer/VBoxContainer.alignment = BoxContainer.ALIGN_END
$MarginContainer/VBoxContainer.add_child_below_node($MarginContainer/VBoxContainer/NameContainer, $MarginContainer/VBoxContainer/TextContainer) $MarginContainer/VBoxContainer.add_child_below_node($MarginContainer/VBoxContainer/NameContainer, $MarginContainer/VBoxContainer/TextContainer)
if text != '' and character_name != '': if text != '':
name_label.bbcode_text = character_name name_label.bbcode_text = character_name
name_label.rect_min_size.x = name_label.get_font('normal_font').get_string_size(name_label.text).x name_label.rect_min_size.x = name_label.get_font('normal_font').get_string_size(name_label.text).x
text_label.bbcode_text = text text_label.bbcode_text = text
if character_name == '': $MarginContainer/VBoxContainer/NameContainer.hide()
else: $MarginContainer/VBoxContainer/NameContainer.show()
if text == "": $MarginContainer.hide() if text == "": $MarginContainer.hide()
else: $MarginContainer.show() else: $MarginContainer.show()
@ -110,8 +113,11 @@ func update() -> void:
var animation = line.get('animation', null) var animation = line.get('animation', null)
if animation != null: if animation != null:
print('animate!' + animation) print('animate!' + animation)
if animation == 'fadein':
black_screen.modulate.a = 1
black_screen.animate(animation, timer) black_screen.animate(animation, timer)
elif expression == 'black': elif expression == 'black':
black_screen.modulate.a = 1
black_screen.animate('black', 0) black_screen.animate('black', 0)
else: else:
black_screen.animate(null, timer) black_screen.animate(null, timer)
@ -130,7 +136,15 @@ func animate_text():
if text_label.text[text_label.visible_characters] == ' ': if text_label.text[text_label.visible_characters] == ' ':
text_label.visible_characters += 1 text_label.visible_characters += 1
text_label.visible_characters += 1 text_label.visible_characters += 1
yield(get_tree().create_timer(0.4 if text_label.text[text_label.visible_characters - 1] == '.' else 0.05), 'timeout')
var c = text_label.text[text_label.visible_characters - 1]
if $MarginContainer.visible:
if "abcdefghijklmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZÀàéÉçÇÈèùÙ.".rfind(c) >= 0:
if character_name == 'Ely': $GibberishPlayer2.play()
else: $GibberishPlayer1.play()
yield(get_tree().create_timer(0.4 if c == '.' else 0.05), 'timeout')
if !Globals.ui_accept_tip: if !Globals.ui_accept_tip:
control_indicator.show_press('ui_accept') control_indicator.show_press('ui_accept')
Globals.ui_accept_tip = true Globals.ui_accept_tip = true

View File

@ -1,3 +1,22 @@
extends Node extends Node
var ui_accept_tip = false var ui_accept_tip = false
var ui_interact_flatfish_tip = false
var did_already_play_once = false
func save_game():
var file = File.new()
file.open('user://globals.save', File.WRITE)
file.store_line('1' if did_already_play_once else '0')
file.close()
print('saved')
func load_game():
var file = File.new()
if not file.file_exists("user://savegame.save"):
return
file.open('user://globals.save', File.READ)
var d = file.get_line()
did_already_play_once = true if d == '1' else false
print('loaded')

View File

@ -9,9 +9,9 @@ var previous_tracks : Array
func play(music, offset=0, duration=1): func play(music, offset=0, duration=1):
print('Play music: ' + music) print('Play music: ' + music)
var path = "res://sounds/" + music + ".ogg" var path = "res://sounds/" + music + ".ogg"
if !File.new().file_exists(path): # if !File.new().file_exists(path):
path = "res://sounds/" + music # path = "res://sounds/" + music
assert(File.new().file_exists(path)) # assert(File.new().file_exists(path))
var stream = load(path) var stream = load(path)
target_track = get_free_track() target_track = get_free_track()
@ -46,7 +46,7 @@ func get_free_track() -> AudioStreamPlayer:
free_track = track free_track = track
if free_track == null: if free_track == null:
free_track = AudioStreamPlayer.new() free_track = AudioStreamPlayer.new()
print('yo') free_track.volume_db = -8
add_child(free_track) add_child(free_track)
print(free_track) print(free_track)
return free_track return free_track

View File

@ -1,6 +1,6 @@
extends Node2D extends Node2D
onready var ely = $CampfireBackground onready var ely = $CampfireBackground/Ely
onready var herbert = $Herbert onready var herbert = $Herbert
onready var dialogue_box = $UI/Dialogue onready var dialogue_box = $UI/Dialogue
onready var the_choice = $TheChoice onready var the_choice = $TheChoice
@ -9,6 +9,8 @@ export (String, FILE, '*.json') var end_1_dialogue
export (String, FILE, '*.json') var end_truth_dialogue export (String, FILE, '*.json') var end_truth_dialogue
export (String, FILE, '*.json') var end_lie_dialogue export (String, FILE, '*.json') var end_lie_dialogue
onready var music_player = get_node('/root/MusicPlayer') as MusicPlayer
func _ready(): func _ready():
assert(end_1_dialogue != null) assert(end_1_dialogue != null)
assert(end_truth_dialogue != null) assert(end_truth_dialogue != null)
@ -24,6 +26,7 @@ var choice = -1
func make_choice(choice : int): func make_choice(choice : int):
the_choice.hide() the_choice.hide()
music_player.play("Chris Zabriskie - Direct to Video - 07 It's Always Too Late to Start Over")
yield(dialogue_box.start_dialogue(end_truth_dialogue if choice == 0 else end_lie_dialogue), 'end') yield(dialogue_box.start_dialogue(end_truth_dialogue if choice == 0 else end_lie_dialogue), 'end')
get_tree().change_scene("res://scenes/credits.tscn") get_tree().change_scene("res://scenes/credits.tscn")

10
scripts/credits.gd Normal file
View File

@ -0,0 +1,10 @@
extends Node2D
func _ready():
Globals.did_already_play_once = true
Globals.save_game()
func _input(event):
if event.is_action_pressed("ui_accept"):
get_tree().change_scene("res://scenes/main_menu.tscn")

View File

@ -1,5 +1,7 @@
extends Node extends Node
signal can_leave
var playing = false var playing = false
onready var player_fab = preload('res://scenes/game1/Player.tscn') onready var player_fab = preload('res://scenes/game1/Player.tscn')
@ -9,6 +11,8 @@ var player_camera : Camera2D
onready var dialogue_box = $UI/Dialog onready var dialogue_box = $UI/Dialog
export (String, FILE, '*.json') var dialogue export (String, FILE, '*.json') var dialogue
onready var music_player = get_node('/root/MusicPlayer') as MusicPlayer
onready var levels = [ onready var levels = [
#'TestLogEntity', #'TestLogEntity',
'Level1', 'Level1',
@ -23,11 +27,13 @@ export var skipToLevel = ''
var current_level = -1 var current_level = -1
var spawn_pos = Vector2() var spawn_pos = Vector2()
var exit_points = [] var exit_points = []
var can_leave = false
func _ready(): func _ready():
assert(dialogue != null) assert(dialogue != null)
if skipToLevel != '': if skipToLevel != '':
can_leave = true
$Opening1.queue_free() $Opening1.queue_free()
start_game() start_game()
while levels[current_level] != skipToLevel: while levels[current_level] != skipToLevel:
@ -35,6 +41,7 @@ func _ready():
return return
yield(get_tree().create_timer(6), "timeout") yield(get_tree().create_timer(6), "timeout")
music_player.play("Chris Zabriskie - Direct to Video - 03 I Don't See the Branches, I See the Leaves")
$Opening1.play('default') $Opening1.play('default')
$Opening1/Mask.play('default') $Opening1/Mask.play('default')
$Opening1/OpeningOver.play('default') $Opening1/OpeningOver.play('default')
@ -43,8 +50,13 @@ func _ready():
$Opening2/Player.sleep = false $Opening2/Player.sleep = false
yield(dialogue_box.start_dialogue(dialogue), 'end') yield(dialogue_box.start_dialogue(dialogue), 'end')
can_leave = true
emit_signal("can_leave")
func start_game(): func start_game():
$Opening2/Player.sleep = true
if !can_leave:
yield(self, 'can_leave')
# Hide opening # Hide opening
$Opening2.queue_free() $Opening2.queue_free()
next_level() next_level()
@ -110,6 +122,7 @@ func spawn_entities(level : Node):
# Spawn point # Spawn point
for cell in tm.get_used_cells_by_id(tileset.find_tile_by_name('start')): for cell in tm.get_used_cells_by_id(tileset.find_tile_by_name('start')):
spawn_pos = cell spawn_pos = cell
tm.set_cell(cell.x, cell.y, -1)
# Exit points # Exit points
for cell in tm.get_used_cells_by_id(tileset.find_tile_by_name('finish')): for cell in tm.get_used_cells_by_id(tileset.find_tile_by_name('finish')):
@ -157,7 +170,7 @@ func move():
move_left() move_left()
trying_to_move = false trying_to_move = false
func _process(delta): func _process(_delta):
interact() interact()
move() move()
@ -217,6 +230,19 @@ func move_left():
func check_exit() -> bool: func check_exit() -> bool:
var player_pos = (player.position - Vector2(8, 8)) / 16 var player_pos = (player.position - Vector2(8, 8)) / 16
if !Globals.ui_interact_flatfish_tip:
var level = $Game.get_node(levels[current_level])
var shown = false
for e in level.get_node('Entities').get_children():
if e is Flatfish && e.position == player.position:
$GameControlIndicator.show_press('interact')
$GameControlIndicator.position = player.position + Vector2(0, 8 + 16)
shown = true
break
if !shown:
$GameControlIndicator.hide()
print(player_pos) print(player_pos)
for exit in exit_points: for exit in exit_points:
if player_pos == exit: if player_pos == exit:
@ -255,6 +281,9 @@ func interact():
break break
if fish != null: if fish != null:
Globals.ui_interact_flatfish_tip = true
$GameControlIndicator.hide()
fish.appear() fish.appear()
yield(get_tree().create_timer(0.2), "timeout") yield(get_tree().create_timer(0.2), "timeout")
@ -268,5 +297,7 @@ func interact():
fish.disappear() fish.disappear()
player.rotation_degrees = fmod(player.rotation_degrees, 360.0)
is_interacting = false is_interacting = false
if fish != null: interact() if fish != null: interact()

View File

@ -41,7 +41,7 @@ func _input(event):
dir = Vector2(x, y) dir = Vector2(x, y)
func _process(delta): func _process(_delta):
if linear_velocity.length_squared() < 1: if linear_velocity.length_squared() < 1:
$Sprite.play('default') $Sprite.play('default')
elif linear_velocity.x > 0: elif linear_velocity.x > 0:

9
scripts/main_menu.gd Normal file
View File

@ -0,0 +1,9 @@
extends Node2D
onready var music_player = get_node('/root/MusicPlayer') as MusicPlayer
func _ready():
music_player.play('main_title')
Globals.load_game()
if Globals.did_already_play_once:
$UI/Buttons/AnotherChoiceButton.show()

View File

@ -1,5 +1,7 @@
extends Node extends Node
onready var music_player = get_node('/root/MusicPlayer') as MusicPlayer
func _ready(): func _ready():
$Buttons/PlayButton.grab_focus() $Buttons/PlayButton.grab_focus()
for button in $Buttons.get_children(): for button in $Buttons.get_children():
@ -7,6 +9,8 @@ func _ready():
func _on_Button_pressed(scene_to_load : String): func _on_Button_pressed(scene_to_load : String):
if scene_to_load != "": if scene_to_load != "":
music_player.fade_out()
get_tree().change_scene(scene_to_load) get_tree().change_scene(scene_to_load)
else: else:
music_player.fade_out()
get_tree().quit() get_tree().quit()

View File

@ -1,11 +1,16 @@
extends Node2D extends Node2D
signal can_leave
var can_leave = false
onready var dialogue_box = $UI/Dialog onready var dialogue_box = $UI/Dialog
onready var music_player = get_node('/root/MusicPlayer') as MusicPlayer
#0 #0
onready var oil_tanker = $OilTanker onready var oil_tanker = $OilTanker
onready var crab_0 = $OilTanker/Crab onready var crab_0 = $OilTanker/Crab
export (String, FILE, "*.json") var dialogue_1 export (String, FILE, "*.json") var dialogue_1
var leaving_0 = false
#1 #1
onready var oil_tanker_inside_1 = $InsideOilTanker onready var oil_tanker_inside_1 = $InsideOilTanker
@ -41,6 +46,8 @@ func _ready():
next_trigger_2.connect("body_entered", self, 'end_step_2') next_trigger_2.connect("body_entered", self, 'end_step_2')
yield(dialogue_box.start_dialogue(dialogue_1), 'end') yield(dialogue_box.start_dialogue(dialogue_1), 'end')
can_leave = true
emit_signal('can_leave')
# oil_tanker.frame = 12 # oil_tanker.frame = 12
# end_step_0() # end_step_0()
@ -51,26 +58,47 @@ func dialogue_2(body : Node):
print('end_step_1') print('end_step_1')
if body.name == "Player": if body.name == "Player":
yield(dialogue_box.start_dialogue(dialogue_2), 'end') yield(dialogue_box.start_dialogue(dialogue_2), 'end')
can_leave = true
emit_signal('can_leave')
func end_step_0(): func end_step_0():
print('end_step_0') print('end_step_0')
if crab_0.frame > 1: if crab_0.frame > 1:
leaving_0 = true
if !can_leave:
yield(self, 'can_leave')
can_leave = false
oil_tanker.queue_free() oil_tanker.queue_free()
player_1.sleep = false player_1.sleep = false
func end_step_1(body : Node): func end_step_1(body : Node):
print('end_step_1') print('end_step_1')
if body.name == "Player": if body.name == "Player":
player_1.sleep = true
if !can_leave:
yield(self, 'can_leave')
can_leave = false
oil_tanker_inside_1.queue_free() oil_tanker_inside_1.queue_free()
player_2.sleep = false player_2.sleep = false
camera_2.current = true camera_2.current = true
yield(dialogue_box.start_dialogue(dialogue_3), 'end') yield(dialogue_box.start_dialogue(dialogue_3), 'end')
can_leave = true
emit_signal('can_leave')
func end_step_2(body : Node): func end_step_2(body : Node):
print('end_step_2') print('end_step_2')
if body.name == "Player": if body.name == "Player":
player_2.sleep = true player_2.sleep = true
if !can_leave:
yield(self, 'can_leave')
can_leave = false
yield(dialogue_box.start_dialogue(dialogue_4), 'end') yield(dialogue_box.start_dialogue(dialogue_4), 'end')
oil_tanker_inside_2.queue_free() oil_tanker_inside_2.queue_free()
herbert_must_go_3.play('default') herbert_must_go_3.play('default')
@ -78,10 +106,11 @@ func end_step_2(body : Node):
yield(get_tree().create_timer(1), "timeout") yield(get_tree().create_timer(1), "timeout")
yield(dialogue_box.start_dialogue(dialogue_5), 'end') yield(dialogue_box.start_dialogue(dialogue_5), 'end')
yield(get_tree().create_timer(0.2), "timeout") yield(get_tree().create_timer(0.2), "timeout")
music_player.fade_out()
get_tree().change_scene("res://scenes/campfire2.tscn") get_tree().change_scene("res://scenes/campfire2.tscn")
func _input(event): func _input(event):
if oil_tanker != null: if oil_tanker != null && !leaving_0:
if event.is_action_pressed('right'): if event.is_action_pressed('right'):
if !crab_0.is_playing(): if !crab_0.is_playing():
crab_0.play('default') crab_0.play('default')

View File

@ -18,7 +18,6 @@ func _ready():
dialogue_box.connect('update', self, 'update_camera') dialogue_box.connect('update', self, 'update_camera')
yield(get_tree().create_timer(2.0), 'timeout')
yield(dialogue_box.start_dialogue(intro_dialogue), 'end') yield(dialogue_box.start_dialogue(intro_dialogue), 'end')
get_tree().change_scene("res://scenes/game1.tscn") get_tree().change_scene("res://scenes/game1.tscn")

View File

@ -17,5 +17,5 @@ force/max_rate=false
force/max_rate_hz=44100 force/max_rate_hz=44100
edit/trim=false edit/trim=false
edit/normalize=false edit/normalize=false
edit/loop=false edit/loop=true
compress/mode=0 compress/mode=0

View File

@ -0,0 +1,15 @@
[remap]
importer="ogg_vorbis"
type="AudioStreamOGGVorbis"
path="res://.import/Chris Zabriskie - Direct to Video - 03 I Don't See the Branches, I See the Leaves.ogg-7a0547bf1d516755a7b69367e9f6573a.oggstr"
[deps]
source_file="res://sounds/Chris Zabriskie - Direct to Video - 03 I Don't See the Branches, I See the Leaves.ogg"
dest_files=[ "res://.import/Chris Zabriskie - Direct to Video - 03 I Don't See the Branches, I See the Leaves.ogg-7a0547bf1d516755a7b69367e9f6573a.oggstr" ]
[params]
loop=true
loop_offset=0

View File

@ -0,0 +1,15 @@
[remap]
importer="ogg_vorbis"
type="AudioStreamOGGVorbis"
path="res://.import/Chris Zabriskie - Direct to Video - 07 It's Always Too Late to Start Over.ogg-0c87f633d9f4f7ca0cb0ddc35e26b788.oggstr"
[deps]
source_file="res://sounds/Chris Zabriskie - Direct to Video - 07 It's Always Too Late to Start Over.ogg"
dest_files=[ "res://.import/Chris Zabriskie - Direct to Video - 07 It's Always Too Late to Start Over.ogg-0c87f633d9f4f7ca0cb0ddc35e26b788.oggstr" ]
[params]
loop=true
loop_offset=0

BIN
sounds/gibberish.wav Normal file

Binary file not shown.

View File

@ -0,0 +1,21 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/gibberish.wav-d9ccae3969716aecb07896cc5967f4f1.sample"
[deps]
source_file="res://sounds/gibberish.wav"
dest_files=[ "res://.import/gibberish.wav-d9ccae3969716aecb07896cc5967f4f1.sample" ]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop=false
compress/mode=0

BIN
sounds/gibberish2.wav Normal file

Binary file not shown.

View File

@ -0,0 +1,21 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/gibberish2.wav-6ec18f6f246c055727b749c364482200.sample"
[deps]
source_file="res://sounds/gibberish2.wav"
dest_files=[ "res://.import/gibberish2.wav-6ec18f6f246c055727b749c364482200.sample" ]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop=false
compress/mode=0

BIN
sounds/main_title.ogg Normal file

Binary file not shown.

View File

@ -0,0 +1,15 @@
[remap]
importer="ogg_vorbis"
type="AudioStreamOGGVorbis"
path="res://.import/main_title.ogg-ccd8b7af008d3af3848694e6df920f8a.oggstr"
[deps]
source_file="res://sounds/main_title.ogg"
dest_files=[ "res://.import/main_title.ogg-ccd8b7af008d3af3848694e6df920f8a.oggstr" ]
[params]
loop=true
loop_offset=0