Initial commit

This commit is contained in:
Bad Manners 2024-03-14 00:53:46 -03:00
commit 7becdd23b6
989 changed files with 28526 additions and 0 deletions

View file

@ -0,0 +1,120 @@
extends CanvasLayer
const MAX_LOG_SIZE = 100
const CLEAN_BUCKET = 10
var message_count = 0
@onready var scroll_container: ScrollContainer = $ScrollContainer
@onready var chat_log_lines_container: VBoxContainer = $ScrollContainer/ChatLogLinesContainer
@onready var chat_log_line = preload("res://scenes/ui_elements/chat_log_line.tscn")
var scroll_bar = null
var scroll_value = 0
var current_max_scroll = 0
var mouse_dragging = false
var mouse_scrolling = false
var mouse_dragging_initial_scroll_value = 0
var mouse_dragging_initial_pos = 0
var mouse_dragging_last_pos = Vector2.ZERO
func _ready():
scroll_bar = scroll_container.get_v_scroll_bar()
scroll_bar.changed.connect(_on_scroll_bar_changed)
scroll_bar.gui_input.connect(_on_scroll_bar_gui_input)
scroll_bar.set_deferred("custom_minimum_size", Vector2(20, scroll_bar.custom_minimum_size.y))
scroll_bar.set_deferred("position", Vector2(scroll_container.size.x - 20, 0))
#scroll_value = scroll_bar.max_value
#scroll_container.scroll_vertical = scroll_value
func _process(delta):
if visible:
set_scroll_vertical(scroll_value + Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down").y * delta * 1000)
func add_line(speaker_text: String, speaker_name: String = ""):
clean_log()
var line = chat_log_line.instantiate()
if speaker_name:
line.get_node("NameLabel").text = speaker_name
else:
line.get_node("NameLabel").visible = false
line.get_node("TextLabel").text = " %s" % speaker_text
chat_log_lines_container.add_child(line)
message_count += 1
func add_selected_option_text(selected_option_text: String):
clean_log()
var line = chat_log_line.instantiate()
line.get_node("NameLabel").text = "◆ Option ◆"
line.get_node("TextLabel").text = " %s" % selected_option_text
chat_log_lines_container.add_child(line)
message_count += 1
func clean_log():
if message_count >= MAX_LOG_SIZE:
var children = chat_log_lines_container.get_children()
for i in CLEAN_BUCKET:
var child = children[i]
chat_log_lines_container.remove_child(child)
child.visible = false
child.queue_free()
message_count -= CLEAN_BUCKET
func set_scroll_vertical(value):
scroll_value = clamp(value, 0, current_max_scroll - scroll_container.size.y)
scroll_container.scroll_vertical = scroll_value
func _on_scroll_bar_changed():
if scroll_bar.max_value != current_max_scroll:
current_max_scroll = scroll_bar.max_value
scroll_value = max(0, current_max_scroll - scroll_container.size.y)
scroll_container.scroll_vertical = scroll_value
func _on_scroll_container_gui_input(event: InputEvent):
if event is InputEventMouseButton:
match event.button_index:
MOUSE_BUTTON_LEFT:
if event.pressed and not mouse_dragging:
mouse_dragging = true
mouse_scrolling = false
mouse_dragging_initial_pos = event.global_position.y
mouse_dragging_last_pos = event.global_position
mouse_dragging_initial_scroll_value = scroll_value
#scroll_value = mouse_dragging_initial_scroll_value
elif not event.pressed and mouse_dragging:
mouse_dragging = false
mouse_scrolling = false
MOUSE_BUTTON_WHEEL_UP:
set_scroll_vertical(scroll_value - 40)
MOUSE_BUTTON_WHEEL_DOWN:
set_scroll_vertical(scroll_value + 40)
elif event is InputEventMouseMotion and mouse_dragging:
# Fix for mobile touch and release not being detected; assume any instant jump in cursor distance of ~350px or more is a reset
if event.global_position.distance_squared_to(mouse_dragging_last_pos) >= 120_000:
mouse_dragging_initial_pos = event.global_position.y
mouse_dragging_initial_scroll_value = scroll_value
else:
set_scroll_vertical(mouse_dragging_initial_scroll_value - (event.global_position.y - mouse_dragging_initial_pos))
mouse_dragging_last_pos = event.global_position
func _on_scroll_bar_gui_input(event: InputEvent):
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_LEFT:
if event.pressed and not mouse_scrolling:
mouse_dragging = false
mouse_scrolling = true
mouse_dragging_initial_pos = event.global_position.y
mouse_dragging_last_pos = event.global_position
mouse_dragging_initial_scroll_value = scroll_value
#scroll_value = mouse_dragging_initial_scroll_value
elif not event.pressed and mouse_scrolling:
mouse_dragging = false
mouse_scrolling = false
elif event is InputEventMouseMotion and mouse_scrolling:
# Fix for mobile touch and release not being detected; assume any instant jump in cursor distance of ~350px or more is a reset
if event.global_position.distance_squared_to(mouse_dragging_last_pos) >= 120_000:
mouse_dragging_initial_pos = event.global_position.y
mouse_dragging_initial_scroll_value = scroll_value
else:
set_scroll_vertical(mouse_dragging_initial_scroll_value + (current_max_scroll / scroll_bar.page) * (event.global_position.y - mouse_dragging_initial_pos))
mouse_dragging_last_pos = event.global_position

View file

@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://x4yl51efxs5s"]
[ext_resource type="Script" path="res://scenes/ui_elements/chat_log.gd" id="1_gtkh7"]
[node name="ChatLog" type="CanvasLayer"]
script = ExtResource("1_gtkh7")

View file

@ -0,0 +1,41 @@
[gd_scene load_steps=2 format=3 uid="uid://b7un1h6gdp8bq"]
[ext_resource type="Theme" uid="uid://ckrbqku1sx5ge" path="res://scenes/ui_elements/textbox_theme.tres" id="1_erynh"]
[node name="ChatLogLine" type="HBoxContainer"]
anchors_preset = 14
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_top = -13.0
offset_bottom = 13.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
mouse_filter = 2
[node name="NameLabel" type="Label" parent="."]
modulate = Color(0.882353, 0.894118, 0.960784, 1)
layout_mode = 2
size_flags_vertical = 0
theme = ExtResource("1_erynh")
theme_override_colors/font_color = Color(0.698039, 0.717647, 0.823529, 1)
text = "Name "
horizontal_alignment = 1
visible_characters_behavior = 1
[node name="TextLabel" type="RichTextLabel" parent="."]
modulate = Color(0.882353, 0.894118, 0.960784, 1)
layout_mode = 2
size_flags_horizontal = 3
mouse_filter = 2
theme = ExtResource("1_erynh")
bbcode_enabled = true
text = "What the [color=#f00]fuck[/color]?!"
fit_content = true
scroll_active = false
shortcut_keys_enabled = false
meta_underlined = false
hint_underlined = false
drag_and_drop_selection_enabled = false
visible_characters_behavior = 1

View file

@ -0,0 +1,29 @@
extends CanvasLayer
signal prompt_option_selected(option_label, option_text)
var prompt_option_scene: PackedScene = preload("res://scenes/ui_elements/prompt_option.tscn")
func clear_options():
for child in $VBoxContainer.get_children():
child.queue_free()
func show_prompt():
visible = true
$AnimationPlayer.play("show_prompt")
await $AnimationPlayer.animation_finished
var first_option = $VBoxContainer.get_child(0)
if first_option:
first_option.get_child(0).grab_focus()
func hide_prompt():
visible = false
$AnimationPlayer.play_backwards("show_prompt")
func create_option(option_label: String, option_text: String):
var option = prompt_option_scene.instantiate()
option.init_option(self, option_label, option_text)
$VBoxContainer.add_child(option)
func on_option_selected(label: String, text: String):
prompt_option_selected.emit(label, text)

View file

@ -0,0 +1,102 @@
[gd_scene load_steps=6 format=3 uid="uid://db604d7kgvdrt"]
[ext_resource type="Script" path="res://scenes/ui_elements/prompt.gd" id="1_hyk7g"]
[sub_resource type="Animation" id="Animation_rdapi"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("PanelContainer:modulate")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("VBoxContainer:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_tuv2n"]
resource_name = "show_prompt"
length = 0.5
step = 0.25
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("PanelContainer:modulate")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("VBoxContainer:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.5),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ek38c"]
_data = {
"RESET": SubResource("Animation_rdapi"),
"show_prompt": SubResource("Animation_tuv2n")
}
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_w4jq4"]
bg_color = Color(0.0470588, 0.0666667, 0.160784, 0.501961)
[node name="Prompt" type="CanvasLayer"]
script = ExtResource("1_hyk7g")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
"": SubResource("AnimationLibrary_ek38c")
}
[node name="PanelContainer" type="PanelContainer" parent="."]
modulate = Color(1, 1, 1, 0)
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_w4jq4")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
visible = false
custom_minimum_size = Vector2(532, 0)
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -266.0
offset_right = 266.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_constants/separation = 52
alignment = 1

View file

@ -0,0 +1,12 @@
extends Control
var prompt = null
func _on_option_button_pressed():
prompt.prompt_option_selected.emit(get_meta("option_label"), get_meta("option_text"))
func init_option(parent_prompt: Node, new_label: String, new_text: String):
prompt = parent_prompt
set_meta("option_label", new_label)
set_meta("option_text", new_text)
$OptionButton/NameFrame/Option/OptionLabel.text = new_text

View file

@ -0,0 +1,113 @@
[gd_scene load_steps=7 format=3 uid="uid://ce1bk8d2kdx2d"]
[ext_resource type="Texture2D" uid="uid://ykb3qmxlb1ph" path="res://images/ui/panel-border-014.png" id="1_j6xkn"]
[ext_resource type="Script" path="res://scenes/ui_elements/prompt_option.gd" id="1_ybyts"]
[ext_resource type="Theme" uid="uid://ckrbqku1sx5ge" path="res://scenes/ui_elements/textbox_theme.tres" id="2_xbmem"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_440le"]
bg_color = Color(0.74902, 0.74902, 0.74902, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_05h6u"]
bg_color = Color(0.517647, 0.517647, 0.517647, 1)
border_width_left = 3
border_width_top = 3
border_width_right = 3
border_width_bottom = 3
border_color = Color(0.203922, 0.482353, 0.85098, 1)
corner_radius_top_left = 6
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
expand_margin_left = 3.0
expand_margin_top = 3.0
expand_margin_right = 3.0
expand_margin_bottom = 3.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ujclv"]
bg_color = Color(0.0470588, 0.0666667, 0.160784, 0.752941)
corner_radius_top_left = 14
corner_radius_top_right = 14
corner_radius_bottom_right = 14
corner_radius_bottom_left = 14
[node name="PromptOption" type="Control"]
layout_mode = 3
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
grow_horizontal = 2
size_flags_horizontal = 0
size_flags_vertical = 8
script = ExtResource("1_ybyts")
metadata/option_label = ""
metadata/option_text = ""
[node name="OptionButton" type="Button" parent="."]
custom_minimum_size = Vector2(0, 26)
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_top = -21.0
offset_right = 512.0
offset_bottom = 21.0
grow_vertical = 2
theme_override_styles/hover = SubResource("StyleBoxFlat_440le")
theme_override_styles/focus = SubResource("StyleBoxFlat_05h6u")
keep_pressed_outside = true
[node name="Panel" type="Panel" parent="OptionButton"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_ujclv")
[node name="NameFrame" type="NinePatchRect" parent="OptionButton"]
modulate = Color(0.882353, 0.894118, 0.960784, 1)
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("1_j6xkn")
draw_center = false
patch_margin_left = 14
patch_margin_top = 14
patch_margin_right = 14
patch_margin_bottom = 14
axis_stretch_horizontal = 1
axis_stretch_vertical = 1
[node name="Option" type="MarginContainer" parent="OptionButton/NameFrame"]
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_top = -21.0
offset_right = 532.0
offset_bottom = 21.0
grow_vertical = 2
theme_override_constants/margin_left = 16
theme_override_constants/margin_top = 8
theme_override_constants/margin_right = 16
theme_override_constants/margin_bottom = 8
[node name="OptionLabel" type="RichTextLabel" parent="OptionButton/NameFrame/Option"]
modulate = Color(0.882353, 0.894118, 0.960784, 1)
layout_mode = 2
size_flags_horizontal = 4
mouse_filter = 2
theme = ExtResource("2_xbmem")
bbcode_enabled = true
text = "Button text"
fit_content = true
scroll_active = false
autowrap_mode = 0
shortcut_keys_enabled = false
visible_characters_behavior = 1
[connection signal="pressed" from="OptionButton" to="." method="_on_option_button_pressed"]

View file

@ -0,0 +1,11 @@
extends CanvasLayer
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass

View file

@ -0,0 +1,64 @@
extends CanvasLayer
var is_textbox_visible: bool = false
var is_textbox_expanded: bool = false
func is_ready() -> bool:
return $AnimationPlayer.current_animation == "" or $AnimationPlayer.current_animation == "textbox_idle"
func is_idle() -> bool:
return $AnimationPlayer.current_animation == "textbox_idle"
func skip():
if $AnimationPlayer.current_animation == "write_text" or $AnimationPlayer.current_animation == "collapse_textbox" or $AnimationPlayer.current_animation == "expand_textbox":
$AnimationPlayer.seek(0.9999, true)
func await_pending_animations():
if not is_ready():
await $AnimationPlayer.animation_finished
func show_textbox():
# await await_pending_animations()
$AnimationPlayer.play("show_textbox")
await $AnimationPlayer.animation_finished
func hide_textbox():
# await await_pending_animations()
$AnimationPlayer.play_backwards("show_textbox")
await $AnimationPlayer.animation_finished
func expand_textbox():
# await await_pending_animations()
$AnimationPlayer.play("expand_textbox")
await $AnimationPlayer.animation_finished
func collapse_textbox():
# await await_pending_animations()
$AnimationPlayer.play("collapse_textbox")
await $AnimationPlayer.animation_finished
func ready_textbox():
$AnimationPlayer.play("textbox_idle")
func disable_textbox():
$AnimationPlayer.play("disable_textbox")
func enable_textbox():
if $AnimationPlayer.current_animation == "disable_textbox":
$AnimationPlayer.stop()
func write_text(speaker_text: String, speaker_name: String = ""):
var text_label: RichTextLabel = $MarginContainer/VBoxContainer/TextContainer/Text/TextLabel
text_label.visible_characters = 0
text_label.text = speaker_text
if speaker_name:
$MarginContainer/VBoxContainer/NameContainer/Name/NameLabel.text = speaker_name
$MarginContainer/VBoxContainer/NameContainer.visible = true
else:
$MarginContainer/VBoxContainer/NameContainer.visible = false
$MarginContainer/VBoxContainer/NameContainer/Name/NameLabel.text = ""
# Characters per second
var animation_speed = 48.0 / text_label.get_total_character_count()
$AnimationPlayer.play("write_text", -1, animation_speed)
await $AnimationPlayer.animation_finished

View file

@ -0,0 +1,802 @@
[gd_scene load_steps=16 format=3 uid="uid://b3hnb4vtqq6p3"]
[ext_resource type="Script" path="res://scenes/ui_elements/textbox.gd" id="1_op1eo"]
[ext_resource type="Texture2D" uid="uid://djlgpmcjf3djp" path="res://images/ui/panel-border-005.png" id="2_7k7l5"]
[ext_resource type="Theme" uid="uid://ckrbqku1sx5ge" path="res://scenes/ui_elements/textbox_theme.tres" id="2_guxsf"]
[ext_resource type="Texture2D" uid="uid://6lomvlry6h2t" path="res://images/ui/panel-border-012.png" id="4_q4tn7"]
[ext_resource type="Texture2D" uid="uid://rusdm825x727" path="res://images/ui/tile_finger_pointing_right.png" id="5_cu26b"]
[ext_resource type="Texture2D" uid="uid://b1sfw7ruq8l0a" path="res://images/ui/chat-bubble.svg" id="6_27cyh"]
[sub_resource type="Animation" id="Animation_a34jj"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_left")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_top")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_right")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_bottom")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("MarginContainer/VBoxContainer/NameContainer:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible_characters")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("MarginContainer/VBoxContainer:modulate")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:custom_minimum_size")
tracks/8/interp = 2
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 0)]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("OutsideMarginContainer:visible")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
tracks/10/interp = 2
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
}
[sub_resource type="Animation" id="Animation_rto2s"]
resource_name = "collapse_textbox"
step = 0.25
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MarginContainer/VBoxContainer/NameContainer:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:custom_minimum_size")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.25, 0.75),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(596, 128), Vector2(0, 0)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_left")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.25, 0.75),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [18, 0]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_top")
tracks/4/interp = 2
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.25, 0.75),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [12, 0]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_right")
tracks/5/interp = 2
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0.25, 0.75),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [18, 0]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_bottom")
tracks/6/interp = 2
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.25, 0.75),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [12, 0]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("OutsideMarginContainer:visible")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("MarginContainer/VBoxContainer:modulate")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
tracks/9/interp = 2
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
}
[sub_resource type="Animation" id="Animation_lv0k3"]
resource_name = "disable_textbox"
length = 0.001
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("OutsideMarginContainer:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
}
[sub_resource type="Animation" id="Animation_1wdjj"]
resource_name = "expand_textbox"
step = 0.25
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MarginContainer/VBoxContainer/NameContainer:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:custom_minimum_size")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.25, 0.75),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(0, 0), Vector2(596, 128)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_left")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.25, 0.75),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 18]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_top")
tracks/4/interp = 2
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.25, 0.75),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 12]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_right")
tracks/5/interp = 2
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0.25, 0.75),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 18]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_bottom")
tracks/6/interp = 2
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.25, 0.75),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 12]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible_characters")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("OutsideMarginContainer:visible")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("MarginContainer/VBoxContainer:modulate")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
}
[sub_resource type="Animation" id="Animation_kvu86"]
resource_name = "show_textbox"
length = 0.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MarginContainer/VBoxContainer:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("OutsideMarginContainer:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.5),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, false]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
}
[sub_resource type="Animation" id="Animation_u2um3"]
resource_name = "textbox_idle"
length = 4.5
loop_mode = 2
step = 0.3
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("OutsideMarginContainer:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("OutsideMarginContainer:theme_override_constants/margin_left")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.3, 0.6, 0.9, 1.2, 1.5, 1.8, 2.1, 2.4, 2.7, 3, 3.3, 3.6, 3.9, 4.2, 4.5),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [560, 552, 560, 552, 560, 552, 560, 552, 560, 552, 560, 552, 560, 552, 560, 552]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 3.6, 4.2, 4.5),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [Color(0.882353, 0.894118, 0.960784, 0), Color(0.882353, 0.894118, 0.960784, 0), Color(0.882353, 0.894118, 0.960784, 0.501961), Color(0.882353, 0.894118, 0.960784, 0.501961)]
}
[sub_resource type="Animation" id="Animation_8t3xa"]
resource_name = "write_text"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_left")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [18]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_top")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [12]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_right")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [18]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_bottom")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [12]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("MarginContainer/VBoxContainer:modulate")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible_ratio")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 1.0]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:custom_minimum_size")
tracks/7/interp = 2
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(596, 128)]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("OutsideMarginContainer:visible")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_tk3r4"]
_data = {
"RESET": SubResource("Animation_a34jj"),
"collapse_textbox": SubResource("Animation_rto2s"),
"disable_textbox": SubResource("Animation_lv0k3"),
"expand_textbox": SubResource("Animation_1wdjj"),
"show_textbox": SubResource("Animation_kvu86"),
"textbox_idle": SubResource("Animation_u2um3"),
"write_text": SubResource("Animation_8t3xa")
}
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6ruof"]
bg_color = Color(0.0470588, 0.0666667, 0.160784, 0.878431)
[node name="Textbox" type="CanvasLayer"]
script = ExtResource("1_op1eo")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
"": SubResource("AnimationLibrary_tk3r4")
}
[node name="MarginContainer" type="MarginContainer" parent="."]
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -12.0
offset_top = -56.0
offset_right = 12.0
grow_horizontal = 2
grow_vertical = 0
size_flags_horizontal = 4
size_flags_vertical = 8
theme_override_constants/margin_bottom = 32
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
modulate = Color(1, 1, 1, 0)
layout_mode = 2
theme_override_constants/separation = 0
[node name="NameContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer"]
visible = false
layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 8
theme_override_constants/margin_left = 32
theme_override_constants/margin_bottom = -2
[node name="Panel" type="Panel" parent="MarginContainer/VBoxContainer/NameContainer"]
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_6ruof")
[node name="NameFrame" type="NinePatchRect" parent="MarginContainer/VBoxContainer/NameContainer"]
modulate = Color(0.882353, 0.894118, 0.960784, 1)
layout_mode = 2
texture = ExtResource("2_7k7l5")
draw_center = false
patch_margin_left = 14
patch_margin_top = 14
patch_margin_right = 14
patch_margin_bottom = 14
axis_stretch_horizontal = 1
axis_stretch_vertical = 1
[node name="Name" type="MarginContainer" parent="MarginContainer/VBoxContainer/NameContainer"]
layout_mode = 2
theme_override_constants/margin_left = 16
theme_override_constants/margin_top = 8
theme_override_constants/margin_right = 16
theme_override_constants/margin_bottom = 8
[node name="NameLabel" type="Label" parent="MarginContainer/VBoxContainer/NameContainer/Name"]
modulate = Color(0.882353, 0.894118, 0.960784, 1)
custom_minimum_size = Vector2(112, 26)
layout_mode = 2
theme = ExtResource("2_guxsf")
text = "Marco"
horizontal_alignment = 1
visible_characters_behavior = 1
[node name="TextContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 8
[node name="Panel" type="Panel" parent="MarginContainer/VBoxContainer/TextContainer"]
clip_contents = true
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_6ruof")
[node name="TextFrame" type="NinePatchRect" parent="MarginContainer/VBoxContainer/TextContainer"]
modulate = Color(0.882353, 0.894118, 0.960784, 1)
layout_mode = 2
texture = ExtResource("4_q4tn7")
draw_center = false
patch_margin_left = 12
patch_margin_top = 12
patch_margin_right = 12
patch_margin_bottom = 12
axis_stretch_horizontal = 1
axis_stretch_vertical = 1
[node name="Text" type="MarginContainer" parent="MarginContainer/VBoxContainer/TextContainer"]
layout_mode = 2
theme_override_constants/margin_left = 0
theme_override_constants/margin_top = 0
theme_override_constants/margin_right = 0
theme_override_constants/margin_bottom = 0
[node name="TextLabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer/TextContainer/Text"]
visible = false
modulate = Color(0.882353, 0.894118, 0.960784, 1)
layout_mode = 2
mouse_filter = 2
theme = ExtResource("2_guxsf")
bbcode_enabled = true
text = "What the [color=#f00]fuck[/color]?!"
scroll_active = false
scroll_following = true
shortcut_keys_enabled = false
meta_underlined = false
hint_underlined = false
drag_and_drop_selection_enabled = false
visible_characters = 0
visible_characters_behavior = 1
visible_ratio = 0.0
[node name="OutsideMarginContainer" type="MarginContainer" parent="."]
visible = false
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -12.0
offset_top = -56.0
offset_right = 12.0
grow_horizontal = 2
grow_vertical = 0
size_flags_horizontal = 4
size_flags_vertical = 8
theme_override_constants/margin_left = 560
theme_override_constants/margin_bottom = 42
[node name="TextureNext" type="TextureRect" parent="OutsideMarginContainer"]
layout_mode = 2
size_flags_horizontal = 8
size_flags_vertical = 8
texture = ExtResource("5_cu26b")
[node name="ChatLogIndicatorMarginContainer" type="MarginContainer" parent="."]
offset_right = 40.0
offset_bottom = 40.0
theme_override_constants/margin_left = 12
theme_override_constants/margin_top = 12
theme_override_constants/margin_right = 12
theme_override_constants/margin_bottom = 12
[node name="TextureChatLogIndicator" type="TextureRect" parent="ChatLogIndicatorMarginContainer"]
self_modulate = Color(0.882353, 0.894118, 0.960784, 0)
custom_minimum_size = Vector2(36, 36)
layout_mode = 2
texture = ExtResource("6_27cyh")

View file

@ -0,0 +1,7 @@
[gd_resource type="Theme" load_steps=2 format=3 uid="uid://ckrbqku1sx5ge"]
[ext_resource type="FontFile" uid="uid://vr3gwqu6tvh6" path="res://fonts/EpilepsySans.ttf" id="1_ic16e"]
[resource]
default_font = ExtResource("1_ic16e")
default_font_size = 26

View file

@ -0,0 +1,190 @@
[gd_scene load_steps=8 format=3 uid="uid://d1rjb8to843h4"]
[ext_resource type="Texture2D" uid="uid://b2r3y8ou4x24q" path="res://images/sprites/bard/normal.png" id="1_rldh6"]
[sub_resource type="Animation" id="Animation_xnq4c"]
resource_name = "RESET"
length = 0.01
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite:scale")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Sprite:position")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(400, 300)]
}
[sub_resource type="Animation" id="Animation_cer7j"]
resource_name = "sprite_1_bounce"
length = 0.4
step = 0.05
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite:scale")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.2, 0.4),
"transitions": PackedFloat32Array(2, 1, 2),
"update": 0,
"values": [Vector2(0.97, 0.9), Vector2(1.05, 1.1), Vector2(1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Sprite:position")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.2, 0.4),
"transitions": PackedFloat32Array(2, 1, 2),
"update": 0,
"values": [Vector2(400, 360), Vector2(400, 300), Vector2(400, 300)]
}
[sub_resource type="Animation" id="Animation_624s1"]
resource_name = "fade_out"
length = 0.4
step = 0.025
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.3, 0.325),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, true, false]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite:self_modulate")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.3, 0.375, 0.4),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0), Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_yrtof"]
resource_name = "fall_down"
length = 0.5
step = 0.05
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.4, 0.45),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, true, false]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite:position")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.2, 0.4, 0.45, 0.5),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 0,
"values": [Vector2(400, 300), Vector2(400, 600), Vector2(400, 1300), Vector2(400, 1300), Vector2(400, 300)]
}
[sub_resource type="Animation" id="Animation_1wxb1"]
resource_name = "reveal_fishing_item"
length = 1.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite:self_modulate")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1, 1.5),
"transitions": PackedFloat32Array(1, 1, 0.965936),
"update": 0,
"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 1), Color(1, 1, 1, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_2gw37"]
_data = {
"RESET": SubResource("Animation_xnq4c"),
"bounce": SubResource("Animation_cer7j"),
"fade_out": SubResource("Animation_624s1"),
"fall_down": SubResource("Animation_yrtof"),
"reveal_fishing_item": SubResource("Animation_1wxb1")
}
[node name="VNSprite" type="Node2D"]
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
"": SubResource("AnimationLibrary_2gw37")
}
[node name="Sprite" type="Sprite2D" parent="."]
position = Vector2(400, 300)
texture = ExtResource("1_rldh6")