Add fadein and fadeout to dialogues and other improvements
This commit is contained in:
parent
29dcc1630c
commit
533f41fedf
6
BlackScreen.tscn
Normal file
6
BlackScreen.tscn
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[gd_scene format=2]
|
||||||
|
|
||||||
|
[node name="BlackScreen" type="Polygon2D"]
|
||||||
|
modulate = Color( 1, 1, 1, 0.905882 )
|
||||||
|
color = Color( 0, 0, 0, 1 )
|
||||||
|
polygon = PoolVector2Array( 0, 0, 192, 0, 192, 108, 0, 108 )
|
@ -1,29 +1,29 @@
|
|||||||
[
|
[
|
||||||
{"name": "Ely", "text": "I am a part of a non-profit organisation."},
|
{"name": "Ely", "text": "I am a part of a non-profit organization."},
|
||||||
{"name": "Crab", "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."},
|
||||||
{"name": "Crab", "text": "Oh, that's nice!"},
|
{"name": "Herbert", "text": "Oh, that's nice!"},
|
||||||
{"name": "Ely", "text": "Yeah, and our goal is to scan the ocean to find potential garbage and wrecks 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]."},
|
||||||
{"name": "Crab", "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 some 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."},
|
||||||
{"name": "Ely", "text": "The sea was angry, thunderous even..."},
|
{"name": "Ely", "text": "The sea was angry, thunderous even..."},
|
||||||
{"name": "Ely", "text": "And we lost our ship."},
|
{"name": "Ely", "text": "And we lost our ship."},
|
||||||
{"name": "Ely", "text": "I don't even know were my friends are..."},
|
{"name": "Ely", "text": "I don't even know were my friends are..."},
|
||||||
{"name": "Ely", "text": "..."},
|
{"name": "Ely", "text": "..."},
|
||||||
{"name": "Crab", "text": "..."},
|
{"name": "Herbert", "text": "..."},
|
||||||
{"name": "Ely", "text": "Crap..."},
|
{"name": "Ely", "text": "Crap..."},
|
||||||
{"name": "Ely", "text": "... I don't know why I'm telling you all of that, it's not even really what happened..."},
|
{"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": "..."},
|
{"name": "Ely", "text": "..."},
|
||||||
{"name": "Ely", "text": "I-I don't want to tell you the truth..."},
|
{"name": "Ely", "text": "I-I don't want you to know the truth..."},
|
||||||
{"name": "Crab", "text": "..."},
|
{"name": "Herbert", "text": "..."},
|
||||||
{"name": "Crab", "text": "That was a beautiful tale."},
|
{"name": "Herbert", "text": "That was a beautiful tale."},
|
||||||
{"name": "Crab", "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."},
|
||||||
{"name": "Crab", "text": "Lie or not, your story tells me something about hoomans and about you."},
|
{"name": "Herbert", "text": "Lie or not, your story tells me something about hoomans and about you."},
|
||||||
{"name": "Crab", "text": "Something good..."},
|
{"name": "Herbert", "text": "Something good..."},
|
||||||
{"animation": "fadeout", "timer": 4, "auto": true},
|
{"name": "Herbert", "animation": "fadeout", "timer": 4, "auto": true},
|
||||||
{"timer": 2, "auto": true},
|
{"timer": 2, "auto": true, "expression": "black"},
|
||||||
{"name": "Crab", "text": "Thank you.", "expression": "black"}
|
{"name": "Herbert", "text": "Thank you.", "expression": "black"}
|
||||||
]
|
]
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
[
|
[
|
||||||
|
{"animation": "fadein", "timer": 2, "auto": true},
|
||||||
{"name": "Herbert", "text": "Finally I found the source.", "timer": 4, "auto": true, "upside_down": true},
|
{"name": "Herbert", "text": "Finally I found the source.", "timer": 4, "auto": true, "upside_down": true},
|
||||||
{"name": "Herbert", "text": "It was a recently sunk oil tanker.", "timer": 5, "auto": true, "upside_down": true},
|
{"name": "Herbert", "text": "It was a recently sunk oil tanker.", "timer": 4, "auto": true, "upside_down": true},
|
||||||
{"name": "Herbert", "text": "I had to investigate further.", "timer": 3, "auto": true, "upside_down": true}
|
{"name": "Herbert", "text": "I had to investigate further.", "timer": 4, "auto": true, "upside_down": true}
|
||||||
]
|
]
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
[
|
[
|
||||||
{"name": "Herbert", "text": "The closer I got, the more oil there was.", "timer": 4, "auto": true, "upside_down": true}
|
{"name": "Herbert", "text": "The closer I got, the more oil there was.", "timer": 6, "auto": true, "upside_down": true}
|
||||||
]
|
]
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
[
|
[
|
||||||
{"name": "Herbert", "text": "The inside was full of oil, I was really close.", "upside_down": true},
|
{"name": "Herbert", "text": "The inside was full of oil, I was really close.", "upside_down": true, "timer": 6, "auto": true}
|
||||||
{"name": "Herbert", "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}
|
|
||||||
]
|
]
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
[
|
[
|
||||||
{"name": "Herbert", "text": "Back at my home, there was goo everywhere.", "expression": "black"},
|
{"name": "Herbert", "text": "And there it was, one of the tank was damaged.", "upside_down": true},
|
||||||
{"animation": "fadein", "timer": 2, "auto": true},
|
{"name": "Herbert", "text": "I'm just a crab, I couldn't do anything about it.", "upside_down": true, "animation": "fadeout", "timer": 2}
|
||||||
{"name": "Herbert", "text": "My friends and I were forced to move..."}
|
|
||||||
]
|
]
|
||||||
|
5
dialogues/oilTanker5.json
Normal file
5
dialogues/oilTanker5.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[
|
||||||
|
{"name": "Herbert", "text": "Back at my home, there was goo everywhere.", "expression": "black"},
|
||||||
|
{"animation": "fadein", "timer": 2, "auto": true},
|
||||||
|
{"name": "Herbert", "text": "My friends and I were forced to move..."}
|
||||||
|
]
|
@ -9,6 +9,11 @@
|
|||||||
config_version=4
|
config_version=4
|
||||||
|
|
||||||
_global_script_classes=[ {
|
_global_script_classes=[ {
|
||||||
|
"base": "CanvasItem",
|
||||||
|
"class": "BlackScreen",
|
||||||
|
"language": "GDScript",
|
||||||
|
"path": "res://scripts/BlackScreen.gd"
|
||||||
|
}, {
|
||||||
"base": "Node",
|
"base": "Node",
|
||||||
"class": "DialogueAction",
|
"class": "DialogueAction",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
@ -40,6 +45,7 @@ _global_script_classes=[ {
|
|||||||
"path": "res://scripts/game1/LogEntity.gd"
|
"path": "res://scripts/game1/LogEntity.gd"
|
||||||
} ]
|
} ]
|
||||||
_global_script_class_icons={
|
_global_script_class_icons={
|
||||||
|
"BlackScreen": "",
|
||||||
"DialogueAction": "",
|
"DialogueAction": "",
|
||||||
"DialogueBox": "",
|
"DialogueBox": "",
|
||||||
"Flatfish": "",
|
"Flatfish": "",
|
||||||
|
@ -21,7 +21,6 @@ __meta__ = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[node name="Dialog" parent="UI" instance=ExtResource( 3 )]
|
[node name="Dialog" parent="UI" instance=ExtResource( 3 )]
|
||||||
visible = false
|
|
||||||
|
|
||||||
[node name="IntroScript" type="Node" parent="."]
|
[node name="IntroScript" type="Node" parent="."]
|
||||||
script = ExtResource( 4 )
|
script = ExtResource( 4 )
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
[gd_scene load_steps=11 format=2]
|
[gd_scene load_steps=13 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]
|
||||||
[ext_resource path="res://scripts/DialogueBox.gd" type="Script" id=3]
|
[ext_resource path="res://scripts/DialogueBox.gd" type="Script" id=3]
|
||||||
[ext_resource path="res://fonts/dialogue_default_font_italic.tres" type="DynamicFont" id=4]
|
[ext_resource path="res://fonts/dialogue_default_font_italic.tres" type="DynamicFont" id=4]
|
||||||
[ext_resource path="res://fonts/dialogue_default_font_mono_aka_small.tres" type="DynamicFont" id=5]
|
[ext_resource path="res://fonts/dialogue_default_font_mono_aka_small.tres" type="DynamicFont" id=5]
|
||||||
|
[ext_resource path="res://BlackScreen.tscn" type="PackedScene" id=6]
|
||||||
|
[ext_resource path="res://scripts/BlackScreen.gd" type="Script" id=7]
|
||||||
|
|
||||||
[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 )
|
||||||
@ -80,6 +82,10 @@ __meta__ = {
|
|||||||
name_label_path = NodePath("MarginContainer/VBoxContainer/NameContainer/MarginContainer/CharacterName")
|
name_label_path = NodePath("MarginContainer/VBoxContainer/NameContainer/MarginContainer/CharacterName")
|
||||||
text_label_path = NodePath("MarginContainer/VBoxContainer/TextContainer/MarginContainer/DialogText")
|
text_label_path = NodePath("MarginContainer/VBoxContainer/TextContainer/MarginContainer/DialogText")
|
||||||
|
|
||||||
|
[node name="BlackScreen" parent="." instance=ExtResource( 6 )]
|
||||||
|
modulate = Color( 1, 1, 1, 0 )
|
||||||
|
script = ExtResource( 7 )
|
||||||
|
|
||||||
[node name="MarginContainer" type="MarginContainer" parent="."]
|
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
|
@ -78,6 +78,7 @@ dialogue_1 = "res://dialogues/oilTanker1.json"
|
|||||||
dialogue_2 = "res://dialogues/oilTanker2.json"
|
dialogue_2 = "res://dialogues/oilTanker2.json"
|
||||||
dialogue_3 = "res://dialogues/oilTanker3.json"
|
dialogue_3 = "res://dialogues/oilTanker3.json"
|
||||||
dialogue_4 = "res://dialogues/oilTanker4.json"
|
dialogue_4 = "res://dialogues/oilTanker4.json"
|
||||||
|
dialogue_5 = "res://dialogues/oilTanker5.json"
|
||||||
|
|
||||||
[node name="HerbertMustGo" type="AnimatedSprite" parent="."]
|
[node name="HerbertMustGo" type="AnimatedSprite" parent="."]
|
||||||
frames = ExtResource( 7 )
|
frames = ExtResource( 7 )
|
||||||
@ -279,4 +280,3 @@ __meta__ = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[node name="Dialog" parent="UI" instance=ExtResource( 9 )]
|
[node name="Dialog" parent="UI" instance=ExtResource( 9 )]
|
||||||
visible = false
|
|
||||||
|
25
scripts/BlackScreen.gd
Normal file
25
scripts/BlackScreen.gd
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
extends CanvasItem
|
||||||
|
|
||||||
|
class_name BlackScreen
|
||||||
|
|
||||||
|
var animation_counter = 0.0
|
||||||
|
var animation_duration : float
|
||||||
|
var animation = null
|
||||||
|
|
||||||
|
func animate(_animation, duration : float):
|
||||||
|
animation_counter = 0.0
|
||||||
|
animation_duration = duration
|
||||||
|
animation = _animation
|
||||||
|
print('animating!' + (animation if animation != null else 'null') + ' - ' + String(animation_duration))
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
if animation != null:
|
||||||
|
if animation == 'fadein':
|
||||||
|
modulate.a = lerp(1, 0, clamp(animation_counter / animation_duration, 0, 1))
|
||||||
|
elif animation == 'fadeout':
|
||||||
|
modulate.a = lerp(0, 1, clamp(animation_counter / animation_duration, 0, 1))
|
||||||
|
elif animation == 'black':
|
||||||
|
modulate.a = 1
|
||||||
|
else:
|
||||||
|
modulate.a = 0
|
||||||
|
animation_counter += delta
|
@ -15,6 +15,8 @@ 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
|
||||||
|
|
||||||
|
onready var black_screen = $BlackScreen
|
||||||
|
|
||||||
var dialogue : Array
|
var dialogue : Array
|
||||||
var index : int
|
var index : int
|
||||||
|
|
||||||
@ -28,6 +30,7 @@ func _ready():
|
|||||||
assert(name_label != null)
|
assert(name_label != null)
|
||||||
assert(text_label != null)
|
assert(text_label != null)
|
||||||
assert(music_player != null)
|
assert(music_player != null)
|
||||||
|
assert(black_screen != null)
|
||||||
|
|
||||||
func start_dialogue(dialog_path : String) -> DialogueAction:
|
func start_dialogue(dialog_path : String) -> DialogueAction:
|
||||||
var dialogue = DialogueAction.new()
|
var dialogue = DialogueAction.new()
|
||||||
@ -51,7 +54,7 @@ func _input(event):
|
|||||||
func next() -> void:
|
func next() -> void:
|
||||||
index += 1
|
index += 1
|
||||||
if index >= dialogue.size():
|
if index >= dialogue.size():
|
||||||
hide()
|
$MarginContainer.hide()
|
||||||
emit_signal('end')
|
emit_signal('end')
|
||||||
return
|
return
|
||||||
update()
|
update()
|
||||||
@ -95,11 +98,21 @@ func update() -> void:
|
|||||||
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 text == "": hide()
|
if text == "": $MarginContainer.hide()
|
||||||
else: show()
|
else: $MarginContainer.show()
|
||||||
|
|
||||||
emit_signal('update')
|
emit_signal('update')
|
||||||
|
|
||||||
|
# Animation
|
||||||
|
var animation = line.get('animation', null)
|
||||||
|
if animation != null:
|
||||||
|
print('animate!' + animation)
|
||||||
|
black_screen.animate(animation, timer)
|
||||||
|
elif expression == 'black':
|
||||||
|
black_screen.animate('black', 0)
|
||||||
|
else:
|
||||||
|
black_screen.animate(null, timer)
|
||||||
|
|
||||||
animate_text()
|
animate_text()
|
||||||
|
|
||||||
if timer > 0:
|
if timer > 0:
|
||||||
@ -113,9 +126,10 @@ 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.05), 'timeout')
|
yield(get_tree().create_timer(0.4 if text_label.text[text_label.visible_characters - 1] == '.' else 0.05), 'timeout')
|
||||||
|
|
||||||
func stop_waiting():
|
func stop_waiting():
|
||||||
waiting = false
|
waiting = false
|
||||||
if auto_advance:
|
if auto_advance:
|
||||||
next()
|
next()
|
||||||
|
|
||||||
|
@ -21,23 +21,24 @@ onready var prop1 = $InsideOilTanker2/Parallax/Prop1
|
|||||||
onready var prop2 = $InsideOilTanker2/Parallax/Prop2
|
onready var prop2 = $InsideOilTanker2/Parallax/Prop2
|
||||||
onready var next_trigger_2 = $InsideOilTanker2/NextTrigger
|
onready var next_trigger_2 = $InsideOilTanker2/NextTrigger
|
||||||
export (String, FILE, "*.json") var dialogue_3
|
export (String, FILE, "*.json") var dialogue_3
|
||||||
|
export (String, FILE, "*.json") var dialogue_4
|
||||||
|
|
||||||
#3
|
#3
|
||||||
onready var herbert_must_go_3 = $HerbertMustGo
|
onready var herbert_must_go_3 = $HerbertMustGo
|
||||||
export (String, FILE, "*.json") var dialogue_4
|
export (String, FILE, "*.json") var dialogue_5
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
assert(dialogue_1 != null)
|
assert(dialogue_1 != null)
|
||||||
assert(dialogue_2 != null)
|
assert(dialogue_2 != null)
|
||||||
assert(dialogue_3 != null)
|
assert(dialogue_3 != null)
|
||||||
assert(dialogue_4 != null)
|
assert(dialogue_4 != null)
|
||||||
|
assert(dialogue_5 != null)
|
||||||
|
|
||||||
oil_tanker.connect('animation_finished', self, 'end_step_0')
|
oil_tanker.connect('animation_finished', self, 'end_step_0')
|
||||||
next_trigger_1.connect("body_entered", self, 'end_step_1')
|
next_trigger_1.connect("body_entered", self, 'end_step_1')
|
||||||
dialogue_trigger_1.connect("body_entered", self, 'dialogue_2')
|
dialogue_trigger_1.connect("body_entered", self, 'dialogue_2')
|
||||||
next_trigger_2.connect("body_entered", self, 'end_step_2')
|
next_trigger_2.connect("body_entered", self, 'end_step_2')
|
||||||
|
|
||||||
yield(get_tree().create_timer(1), "timeout")
|
|
||||||
yield(dialogue_box.start_dialogue(dialogue_1), 'end')
|
yield(dialogue_box.start_dialogue(dialogue_1), 'end')
|
||||||
|
|
||||||
# oil_tanker.frame = 12
|
# oil_tanker.frame = 12
|
||||||
@ -63,17 +64,19 @@ func end_step_1(body : Node):
|
|||||||
|
|
||||||
player_2.sleep = false
|
player_2.sleep = false
|
||||||
camera_2.current = true
|
camera_2.current = true
|
||||||
|
yield(dialogue_box.start_dialogue(dialogue_3), 'end')
|
||||||
|
|
||||||
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
|
||||||
yield(dialogue_box.start_dialogue(dialogue_3), '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')
|
||||||
|
|
||||||
yield(get_tree().create_timer(1), "timeout")
|
yield(get_tree().create_timer(1), "timeout")
|
||||||
yield(dialogue_box.start_dialogue(dialogue_4), 'end')
|
yield(dialogue_box.start_dialogue(dialogue_5), 'end')
|
||||||
|
yield(get_tree().create_timer(0.2), "timeout")
|
||||||
get_tree().change_scene("res://scenes/campfire2.tscn")
|
get_tree().change_scene("res://scenes/campfire2.tscn")
|
||||||
|
|
||||||
func _input(event):
|
func _input(event):
|
||||||
|
Loading…
Reference in New Issue
Block a user