Compare commits

...

14 Commits

269 changed files with 11233 additions and 633 deletions

View File

@@ -17,3 +17,16 @@ res://sounds/Door Hinge Creaking Door.wav
****************************************************************************************************
3maze - res://sounds/owl_notification_005.wav
SmartSoundFX - res://sounds/ORGANIC Paper Book Page Turn Short 02.wav
****************************************************************************************************
** Miotto Sounds **
****************************************************************************************************
res://sounds/Paper_Scraping_1.wav
****************************************************************************************************
** Deed? Check back **
****************************************************************************************************
res://sounds/Writing in paper 19.wav
res://sounds/Various Sounds 06.wav
res://sounds/Turning Books Pages 52.wav

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
<style type="text/css">
.st0{fill:#8EEF97;}
</style>
<g id="Layer_1_00000170236641221328944140000001063999480100881822_">
<path class="st0" d="M11.3,2.6c-0.7-0.7-1.8-0.7-2.5,0L2.6,8.8c-0.7,0.7-0.7,1.8,0,2.5l2.1,2.1c0.7,0.7,1.8,0.7,2.5,0l6.3-6.3
c0.7-0.7,0.7-1.8,0-2.5L11.3,2.6z M10.1,3.8l2.1,2.1l-1.3,1.3L8.8,5.1L10.1,3.8z M7.6,6.3l2.1,2.1L8.4,9.7L6.3,7.6L7.6,6.3z
M5.1,8.8l2.1,2.1l-1.3,1.3l-2.1-2.1L5.1,8.8z"/>
</g>
<g id="Layer_2_00000172438228171227073010000011096948942075396741_">
<path class="st0" d="M14.4,11.3c-0.3-0.1-0.6-0.3-0.6-0.6v-0.3l-4.5,4.5c-0.3,0.3-0.6,0.3-0.8,0.1c-0.3-0.3-0.3-0.6,0-0.9L13,9.6
h-0.3c-0.3-0.1-0.6-0.3-0.6-0.6c0.1-0.3,0.3-0.6,0.6-0.6l1.5,0c0.1,0,0.3,0,0.4,0.1c0.1,0.1,0.1,0.1,0.1,0.1
c0.1,0.1,0.1,0.3,0.1,0.4l0.1,1.6C15,11,14.8,11.3,14.4,11.3z"/>
</g>
<path class="st0" d="M1.4,4.9C1.7,5,2,5.3,2,5.5l0,0.3l4.5-4.5C6.8,1,7.1,1,7.3,1.2c0.3,0.3,0.3,0.6,0,0.9L2.8,6.6h0.3
c0.3,0.1,0.6,0.3,0.6,0.6C3.6,7.4,3.3,7.7,3.1,7.7l-1.5,0c-0.3,0-0.3-0.1-0.5-0.1C1,7.5,1,7.5,0.9,7.4C0.9,7.4,0.8,7.2,0.8,7.1
L0.7,5.5C0.8,5.2,1.1,4.9,1.4,4.9z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b4kg0ekxkw2lb"
path="res://.godot/imported/reorderable_container_icon.svg-b137036dec781405c9f5977df10d510b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ReorderableContainer/Icon/reorderable_container_icon.svg"
dest_files=["res://.godot/imported/reorderable_container_icon.svg-b137036dec781405c9f5977df10d510b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
<style type="text/css">
.st0{fill:#8EEF97;}
</style>
<g id="Layer_1_00000170236641221328944140000001063999480100881822_">
<path class="st0" d="M15,6.3c0-1.1-0.9-2-2-2H3c-1.1,0-2,0.9-2,2v3.4c0,1.1,0.9,2,2,2h10c1.1,0,2-0.9,2-2V6.3z M13,6.3v3.4h-2V6.3
H13z M9,6.3v3.4H7V6.3H9z M5,6.3v3.4H3V6.3H5z"/>
</g>
<g id="Layer_2_00000172438228171227073010000011096948942075396741_">
<path class="st0" d="M10.5,15.7c-0.2-0.3-0.2-0.7,0-0.9l0.2-0.2H3.5c-0.4,0-0.7-0.3-0.7-0.6c0-0.4,0.3-0.7,0.7-0.7h7.2l-0.2-0.2
c-0.2-0.3-0.2-0.7,0-0.9c0.3-0.2,0.7-0.2,0.9,0l1.2,1.2c0.1,0.1,0.2,0.2,0.2,0.4c0,0.1,0,0.1,0,0.2c0,0.1-0.1,0.3-0.2,0.4l-1.2,1.3
C11.2,16,10.8,16,10.5,15.7z"/>
</g>
<path class="st0" d="M5.2,0.3c0.2,0.3,0.2,0.7,0,0.9L5,1.4h7.2c0.4,0,0.7,0.3,0.7,0.6c0,0.4-0.3,0.7-0.7,0.7H5l0.2,0.2
c0.2,0.3,0.2,0.7,0,0.9C4.9,4,4.5,4,4.3,3.8L3.1,2.6C2.9,2.4,2.9,2.3,2.8,2.1c0-0.1,0-0.1,0-0.2S2.9,1.6,3,1.5l1.2-1.3
C4.5,0,4.9,0,5.2,0.3z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bc35o8q35l74"
path="res://.godot/imported/reorderable_hbox_icon.svg-b8929c984930c1cf79a5dffb0a9bff85.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ReorderableContainer/Icon/reorderable_hbox_icon.svg"
dest_files=["res://.godot/imported/reorderable_hbox_icon.svg-b8929c984930c1cf79a5dffb0a9bff85.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
<style type="text/css">
.st0{fill:#8EEF97;}
</style>
<g id="Layer_1_00000170236641221328944140000001063999480100881822_">
<path class="st0" d="M6.3,1c-1.1,0-2,0.9-2,2v10c0,1.1,0.9,2,2,2h3.4c1.1,0,2-0.9,2-2V3c0-1.1-0.9-2-2-2H6.3z M6.3,3h3.4v2H6.3V3z
M6.3,7h3.4v2H6.3V7z M6.3,11h3.4v2H6.3V11z"/>
</g>
<g id="Layer_2_00000172438228171227073010000011096948942075396741_">
<path class="st0" d="M15.7,5.5c-0.3,0.2-0.7,0.2-0.9,0l-0.2-0.2v7.2c0,0.4-0.3,0.7-0.6,0.7c-0.4,0-0.7-0.3-0.7-0.7V5.3l-0.2,0.2
c-0.3,0.2-0.7,0.2-0.9,0c-0.2-0.3-0.2-0.7,0-0.9l1.2-1.2c0.1-0.1,0.2-0.2,0.4-0.2c0.1,0,0.1,0,0.2,0c0.1,0,0.3,0.1,0.4,0.2l1.3,1.2
C16,4.8,16,5.2,15.7,5.5z"/>
</g>
<path class="st0" d="M0.3,10.8c0.3-0.2,0.7-0.2,0.9,0L1.4,11V3.8c0-0.4,0.3-0.7,0.6-0.7c0.4,0,0.7,0.3,0.7,0.7V11l0.2-0.2
c0.3-0.2,0.7-0.2,0.9,0c0.2,0.3,0.2,0.7,0,0.9l-1.2,1.2c-0.2,0.2-0.3,0.2-0.5,0.3c-0.1,0-0.1,0-0.2,0S1.6,13.1,1.5,13l-1.3-1.2
C0,11.5,0,11.1,0.3,10.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c1rxcwal2patu"
path="res://.godot/imported/reorderable_vbox_icon.svg-6c0163d38628f550aff9f4fbed5c8a1d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ReorderableContainer/Icon/reorderable_vbox_icon.svg"
dest_files=["res://.godot/imported/reorderable_vbox_icon.svg-6c0163d38628f550aff9f4fbed5c8a1d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -0,0 +1,7 @@
[plugin]
name="ReorderableContainer"
description="A container similar to BoxContainer but extended with drag-and-drop style reordering functionality, and auto-scroll functionality when placed under ScrollContainer."
author="FoolLin"
version="1.2.4"
script="plugin.gd"

View File

@@ -0,0 +1,14 @@
@tool
extends EditorPlugin
func _enter_tree():
add_custom_type("ReorderableContainer", "Container", preload("reorderable_container.gd"), preload("Icon/reorderable_container_icon.svg"))
add_custom_type("ReorderableVBox", "ReorderableContainer", preload("reorderable_vbox.gd"), preload("Icon/reorderable_vbox_icon.svg"))
add_custom_type("ReorderableHBox", "ReorderableContainer", preload("reorderable_hbox.gd"), preload("Icon/reorderable_hbox_icon.svg"))
func _exit_tree():
remove_custom_type("ReorderableContainer")
remove_custom_type("ReorderableVBox")
remove_custom_type("ReorderableHBox")

View File

@@ -0,0 +1 @@
uid://0uea0ywilkmu

View File

@@ -0,0 +1,357 @@
@tool
@icon("Icon/reorderable_container_icon.svg")
class_name ReorderableContainer
extends Container
## A container that allows its child to be reorder and arranges horizontally or vertically.
##
## A container similar to [BoxContainer] but extended with drag-and-drop style reordering functionality,
## and auto-scroll functionality when placed under [ScrollContainer].[br][br]
## [b]Note:[/b] This addon also works with SmoothScroll by SpyrexDE.
##
## @tutorial(SmoothScroll): https://github.com/SpyrexDE/SmoothScroll
## @tutorial(Using Containers): https://docs.godotengine.org/en/4.1/tutorials/ui/gui_containers.html
## Emitted when children have been reordered.
signal reordered(from: int, to: int)
signal dragging(pos: Vector2)
signal drag_started(node)
signal drag_stopped(node)
## Extend the drop zone length at the start and end of the container.
## This will ensure that drop input is recognized even outside the container itself.
const DROP_ZONE_EXTEND = 2000
## The hold duration time in seconds before the holded child will start being drag.
@export
var hold_duration := 0.5
## The overall speed of how fast children will move and arrange.
@export_range(3, 30, 0.01, "or_greater", "or_less")
var speed := 10.0
## The space between the container's elements, in pixels.
@export
var separation := 10: set = set_separation
func set_separation(value):
if value == separation or value < 0:
return
separation = value
_on_sort_children()
## if [code]true[/code] the container will arrange its children vertically, rather than horizontally.
@export var is_vertical := false: set = set_vertical
func set_vertical(value):
if value == is_vertical:
return
is_vertical = value
if is_vertical:
custom_minimum_size.x = 0
else:
custom_minimum_size.y = 0
_on_sort_children()
## (Optional) [ScrollContainer] refference. Normally, the addon will automatically check
## its parent node for [ScrollContainer]. If this is not the case, you can manually specify it here.
@export
var scroll_container: ScrollContainer
## The maximum speed of auto scroll.
@export
var auto_scroll_speed := 10.0
## The pacentage of how much space auto scroll will take in [ScrollContainer][br][br]
## [b]Example:[/b] If [code]auto_scroll_range[/code] is 30% (0.3) and [ScrollContainer] height is 100 px,
## upper part will be 0 to 30 px and lower part will be 70 to 100 px.
@export_range(0, 0.5)
var auto_scroll_range := 0.3
## The scrolling threshold in pixel. In a nutshell, user will have hard time trying to drag a child if it too low
## and user will accidentally drag a child when scrolling if it too high.
@export
var scroll_threshold := 30
## Uses when debugging
@export
var is_debugging := false
var _scroll_starting_point := 0
var _is_smooth_scroll := false
var _drop_zones: Array[Rect2] = []
var _drop_zone_index := -1
var _expect_child_rect: Array[Rect2] = []
var _focus_child: Control
var _is_press := false
var _is_hold := false
var _current_duration := 0.0
var _is_using_process := false
func _ready():
if scroll_container == null and get_parent() is ScrollContainer:
scroll_container = get_parent()
if scroll_container != null and scroll_container.has_method("handle_overdrag"):
_is_smooth_scroll = true
process_mode = Node.PROCESS_MODE_PAUSABLE
_adjust_expected_child_rect()
if not sort_children.is_connected(_on_sort_children):
sort_children.connect(_on_sort_children, CONNECT_PERSIST)
if not get_tree().node_added.is_connected(_on_node_added):
get_tree().node_added.connect(_on_node_added, CONNECT_PERSIST)
func _gui_input(event):
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
for _child in get_children():
var child := _child as Control
if child.get_rect().has_point(get_local_mouse_position()) and event.is_pressed():
_focus_child = child
_is_press = true
elif not event.is_pressed():
_is_press = false
_is_hold = false
func _process(delta):
if Engine.is_editor_hint(): return
_handle_input(delta)
if _current_duration >= hold_duration != _is_hold:
_is_hold = _current_duration >= hold_duration
if _is_hold:
_on_start_dragging()
if _is_hold:
_handle_dragging_child_pos(delta)
if scroll_container != null:
_handle_auto_scroll(delta)
elif not _is_hold and _drop_zone_index != -1:
_on_stop_dragging()
if _is_using_process :
_on_sort_children(delta)
func _handle_input(delta):
if scroll_container != null and _is_press and not _is_hold:
var scroll_point = scroll_container.scroll_vertical if is_vertical else scroll_container.scroll_horizontal
if _current_duration == 0:
_scroll_starting_point = scroll_point
else:
# If user scroll more than scroll_threshold, press is abort.
_is_press = true if abs(scroll_point - _scroll_starting_point) <= scroll_threshold else false
_current_duration = _current_duration + delta if _is_press else 0.0
func _on_start_dragging():
# Force _on_sort_children to use process update for linear interpolation
_is_using_process = true
_focus_child.z_index = 1
# Workaround for SmoothScroll addon
if _is_smooth_scroll:
scroll_container.process_mode = Node.PROCESS_MODE_DISABLED
for child in _get_visible_children():
child.propagate_call("set_mouse_filter", [MOUSE_FILTER_IGNORE])
drag_started.emit(_focus_child)
func _on_stop_dragging():
_focus_child.z_index = 0
var focus_child_index := _focus_child.get_index()
move_child(_focus_child, _drop_zone_index)
reordered.emit(focus_child_index, _drop_zone_index)
drag_stopped.emit(_focus_child)
_focus_child = null
_drop_zone_index = -1
if _is_smooth_scroll:
scroll_container.pos = -Vector2(scroll_container.scroll_horizontal, scroll_container.scroll_vertical)
scroll_container.process_mode = Node.PROCESS_MODE_INHERIT
for child in _get_visible_children():
child.propagate_call("set_mouse_filter", [MOUSE_FILTER_PASS])
func _on_node_added(node):
if node is Control and not Engine.is_editor_hint():
node.mouse_filter = Control.MOUSE_FILTER_PASS
func _handle_dragging_child_pos(delta):
if is_vertical:
var target_pos = get_local_mouse_position().y - (_focus_child.size.y / 2.0)
_focus_child.position.y = lerp(_focus_child.position.y, target_pos, delta * speed)
else:
var target_pos = get_local_mouse_position().x - (_focus_child.size.x / 2.0)
_focus_child.position.x = lerp(_focus_child.position.x, target_pos, delta * speed)
# Update drop zone index
var child_center_pos: Vector2 = _focus_child.get_rect().get_center()
for i in range(_drop_zones.size()):
var drop_zone = _drop_zones[i]
if drop_zone.has_point(child_center_pos):
_drop_zone_index = i
break
elif i == _drop_zones.size() - 1:
_drop_zone_index = -1
dragging.emit(get_global_mouse_position())
func _handle_auto_scroll(delta):
var mouse_g_pos = get_global_mouse_position()
var scroll_g_rect = scroll_container.get_global_rect()
if is_vertical:
var upper = scroll_g_rect.position.y + (scroll_g_rect.size.y * auto_scroll_range)
var lower = scroll_g_rect.position.y + (scroll_g_rect.size.y * (1.0 - auto_scroll_range))
if upper > mouse_g_pos.y:
var factor = (upper - mouse_g_pos.y) / (upper - scroll_g_rect.position.y)
scroll_container.scroll_vertical -= delta * float(auto_scroll_speed) * 150.0 * factor
elif lower < mouse_g_pos.y:
var factor = (mouse_g_pos.y - lower) / (scroll_g_rect.end.y - lower)
scroll_container.scroll_vertical += delta * float(auto_scroll_speed) * 150.0 * factor
else:
scroll_container.scroll_vertical = scroll_container.scroll_vertical
else:
var left = scroll_g_rect.position.x + (scroll_g_rect.size.x * auto_scroll_range)
var right = scroll_g_rect.position.x + (scroll_g_rect.size.x * (1.0 - auto_scroll_range))
if left > mouse_g_pos.x:
var factor = (left - mouse_g_pos.x) / (left - scroll_g_rect.position.x)
scroll_container.scroll_horizontal -= delta * float(auto_scroll_speed) * 150.0 * factor
elif right < mouse_g_pos.x:
var factor = (mouse_g_pos.x - right) / (scroll_g_rect.end.x - right)
scroll_container.scroll_horizontal += delta * float(auto_scroll_speed) * 150.0 * factor
else:
scroll_container.scroll_horizontal = scroll_container.scroll_horizontal
func _on_sort_children(delta := -1.0):
if _is_using_process and delta == -1.0:
return
_adjust_expected_child_rect()
_adjust_child_rect(delta)
_adjust_drop_zone_rect()
func _adjust_expected_child_rect():
_expect_child_rect.clear()
var children := _get_visible_children()
var end_point = 0.0
for i in range(children.size()):
var child := children[i]
var min_size := child.get_combined_minimum_size()
if is_vertical:
if i == _drop_zone_index:
end_point += _focus_child.size.y + separation
_expect_child_rect.append(Rect2(Vector2(0, end_point), Vector2(size.x, min_size.y)))
end_point += min_size.y + separation
else:
if i == _drop_zone_index:
end_point += _focus_child.size.x + separation
_expect_child_rect.append(Rect2(Vector2(end_point, 0), Vector2(min_size.x, size.y)))
end_point += min_size.x + separation
func _adjust_child_rect(delta: float = -1.0):
var children := _get_visible_children()
if children.is_empty():
return
var is_animating := false
var end_point := 0.0
for i in range(children.size()):
var child := children[i]
if child.position == _expect_child_rect[i].position and child.size == _expect_child_rect[i].size:
continue
if _is_using_process:
is_animating = true
child.position = lerp(child.position, _expect_child_rect[i].position, delta * speed)
child.size = _expect_child_rect[i].size
if (child.position - _expect_child_rect[i].position).length() <= 1.0:
child.position = _expect_child_rect[i].position
else:
child.position = _expect_child_rect[i].position
child.size = _expect_child_rect[i].size
var last_child := children[-1]
if is_vertical:
if _is_using_process and _drop_zone_index == children.size():
custom_minimum_size.y = _expect_child_rect[-1].end.y + _focus_child.size.y + separation
elif not _is_using_process:
custom_minimum_size.y = last_child.get_rect().end.y
else:
if _is_using_process and _drop_zone_index == children.size():
custom_minimum_size.x = _expect_child_rect[-1].end.x + _focus_child.size.x + separation
elif not _is_using_process:
custom_minimum_size.x = last_child.get_rect().end.x
# Adjust rect every process frame until child is dropped and finished lerping
# ( return to adjust when sort_children signal is emitted)
if not is_animating and _focus_child == null:
_is_using_process = false
func _adjust_drop_zone_rect():
_drop_zones.clear()
var children = _get_visible_children()
for i in range(children.size()):
var drop_zone_rect: Rect2
var child := children[i] as Control
if is_vertical:
if i == 0:
# First child
drop_zone_rect.position = Vector2(child.position.x, child.position.y - DROP_ZONE_EXTEND)
drop_zone_rect.end = Vector2(child.size.x, child.get_rect().get_center().y)
_drop_zones.append(drop_zone_rect)
else:
# In between
var prev_child := children[i - 1] as Control
drop_zone_rect.position = Vector2(prev_child.position.x, prev_child.get_rect().get_center().y)
drop_zone_rect.end = Vector2(child.size.x, child.get_rect().get_center().y)
_drop_zones.append(drop_zone_rect)
if i == children.size() - 1:
# Is also last child
drop_zone_rect.position = Vector2(child.position.x, child.get_rect().get_center().y)
drop_zone_rect.end = Vector2(child.size.x, child.get_rect().end.y + DROP_ZONE_EXTEND)
_drop_zones.append(drop_zone_rect)
else:
if i == 0:
# First child
drop_zone_rect.position = Vector2(child.position.x - DROP_ZONE_EXTEND, child.position.y)
drop_zone_rect.end = Vector2(child.get_rect().get_center().x, child.size.y)
_drop_zones.append(drop_zone_rect)
else:
# In between
var prev_child := children[i - 1] as Control
drop_zone_rect.position = Vector2(prev_child.get_rect().get_center().x, prev_child.position.y)
drop_zone_rect.end = Vector2(child.get_rect().get_center().x, child.size.y)
_drop_zones.append(drop_zone_rect)
if i == children.size() - 1:
# Is also last child
drop_zone_rect.position = Vector2(child.get_rect().get_center().x, child.position.y)
drop_zone_rect.end = Vector2(child.get_rect().end.x + DROP_ZONE_EXTEND, child.size.y)
_drop_zones.append(drop_zone_rect)
func _get_visible_children() -> Array[Control]:
var visible_control: Array[Control]
for _child in get_children():
var child := _child as Control
if not child.visible:
continue
if child == _focus_child and _is_hold:
continue
visible_control.append(child)
return visible_control
func _print_debug(val):
if is_debugging:
print(val)

View File

@@ -0,0 +1 @@
uid://jwjxetmu7o2o

View File

@@ -0,0 +1,13 @@
@tool
@icon("Icon/reorderable_hbox_icon.svg")
class_name ReorderableHBox
extends ReorderableContainer
func set_vertical(value):
value = false
super.set_vertical(value)
func _ready():
is_vertical = false
super._ready()

View File

@@ -0,0 +1 @@
uid://gp5cpsm0gdkx

View File

@@ -0,0 +1,13 @@
@tool
@icon("Icon/reorderable_vbox_icon.svg")
class_name ReorderableVBox
extends ReorderableContainer
func set_vertical(value):
value = true
super.set_vertical(value)
func _ready():
is_vertical = true
super._ready()

View File

@@ -0,0 +1 @@
uid://d3mey1366662n

View File

Before

Width:  |  Height:  |  Size: 643 B

After

Width:  |  Height:  |  Size: 643 B

View File

@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bgw38ld52wu05"
path="res://.godot/imported/profile-popup.png-ac2c647ffb9a3ddb191e025f4c871f30.ctex"
path="res://.godot/imported/profile-popup.png-4f1104831ee3a5fc9edd8fb7c7f9b122.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://graphics/profile-popup.png"
dest_files=["res://.godot/imported/profile-popup.png-ac2c647ffb9a3ddb191e025f4c871f30.ctex"]
source_file="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_Glossary/profile-popup.png"
dest_files=["res://.godot/imported/profile-popup.png-4f1104831ee3a5fc9edd8fb7c7f9b122.ctex"]
[params]

View File

@@ -6,6 +6,9 @@ enum Slots{
ACCESSORY
}
var last_id : int = 1
var id : int
@export var image : Texture2D
@export var name : StringName
@export var brief : String
@@ -15,6 +18,9 @@ enum Slots{
@export var per : bool
@export var grade : String = "F"
func _init() -> void:
last_id += 1
id = last_id
func item_type_name() -> String:
return "Item"

View File

@@ -1,7 +1,8 @@
class_name Quest extends Resource
#The list of available quests
static var list : Array[Quest]
static var last_id : int = 1
enum Status{
OPEN,
@@ -13,13 +14,11 @@ enum Status{
}
enum Locations{
VOID,
NESTORS_WOODS
}
class Event:
var enemy_types: Dictionary[String, PackedScene] = {
"goo": preload("res://templates/enemies/goo.tscn")
}
enum Type{
WAIT,
COMBAT,
@@ -31,10 +30,14 @@ class Event:
VICTORY,
DEFEAT
}
var hidden : bool = false
var type : Type = Type.WAIT
var enemies : Array[String] = []
var progress_point : float = 0
var time : float = 1
var time_elapsed
var complete : bool = false
signal completed()
signal failed()
@@ -43,6 +46,21 @@ class Event:
var busy_list : Array = []
var combat_state
var dex_speed : int
func setup() -> void:
pass
func save() -> Dictionary:
var d : Dictionary = {}
d.hidden = hidden
d.type = type
d.enemies = enemies
d.progress_point = progress_point
d.time = time
d.time_elapsed = time_elapsed
d.complete = complete
return d
func start(quest : Quest) -> void:
match(type):
Type.WAIT:
@@ -51,11 +69,12 @@ class Event:
combat_state = CombatState.FIGHTING
var enemy_list = []
for enemy_name in enemies:
enemy_list.append(enemy_types[enemy_name].instantiate())
enemy_list.append(Enemy.list[enemy_name].instantiate())
quest.questview.set_questor_animation("idle")
for enemy in enemy_list:
enemy.flip_h()
quest.questview.pause_setting()
quest.questview.place_enemy(enemy)
quest.questview.place_enemy(enemy, true)
quest.questview.set_enemy_animation(enemy, "idle")
start_combat([quest.questor.quest_sprite], enemy_list)
@@ -63,10 +82,12 @@ class Event:
participants = []
participants.append_array(adventurers)
participants.append_array(enemies)
time = 1.25
time_elapsed = 0
var c_order : Array = []
var dex_speed = 0
for p in participants:
p.show_lifebar(true)
c_order.append([p, p.stats.DEX])
if p.stats.DEX > dex_speed:
dex_speed = p.stats.DEX
@@ -91,7 +112,7 @@ class Event:
func add_to_turn_queue(combatant) -> void:
#Calculate time
var time = dex_speed / combatant.stats.DEX
var time = dex_speed / max(1, combatant.stats.DEX)
#Walk through list to find insertion point
var idx = -1
for i in range(len(turn_queue)):
@@ -131,7 +152,8 @@ class Event:
for p : QuestorSprite in participants:
p.check_levelup()
#TODO: Notify player if level up occurs
time = 5
time = 3
time_elapsed = 0
func defeat():
print("Questor lost!")
@@ -150,6 +172,11 @@ class Event:
printerr("Tried to remove someone not in the turn queue")
func _on_combat_action_complete(requeue : bool, combatant : QuestSprite) -> void:
if combatant.position != combatant.reset_position:
combatant.position_reset()
combatant.arrived.connect(_on_combat_action_complete.bind(requeue, combatant), CONNECT_ONE_SHOT)
return
busy_list.erase(combatant)
if requeue:
add_to_turn_queue(combatant)
@@ -159,7 +186,8 @@ class Event:
#TODO: Come up with other options than just swinging at each other
var enemies : Array = get_enemy_list(combatant)
var target = enemies.pick_random()
execute_attack(combatant, target)
combatant.approach(target, combatant.melee_range)
combatant.arrived.connect(execute_attack.bind(combatant, target), CONNECT_ONE_SHOT)
func get_enemy_list(combatant) -> Array:
var lst = []
@@ -169,12 +197,21 @@ class Event:
return lst
func resolve_combat() -> void:
for p in participants:
p.show_lifebar(false)
pass
func process(delta : float) -> void:
#TODO: Make quest combat work
match(type):
Type.COMBAT:
if time != 0:
time_elapsed += delta
if time_elapsed >= time:
time = 0
time_elapsed = 0
else:
return
match(combat_state):
CombatState.FIGHTING:
if len(busy_list) < 1:
@@ -189,14 +226,17 @@ class Event:
else:
resolve_combat()
CombatState.VICTORY:
time_elapsed += delta
if time_elapsed >= time:
resolve_combat()
complete = true
completed.emit()
Type.WAIT:
time_elapsed += delta
if time_elapsed >= time:
complete = true
completed.emit()
var id : int
var base_name : String = ""
var name : String = "A Basic Quest"
var desc : String = "The default quest, with no special anything."
var difficulty : int = 1
@@ -219,6 +259,8 @@ var questor : Adventurer = null
signal status_changed(status : Status)
func _init() -> void:
last_id += 1
id = last_id
pass
func initiate(member : Adventurer) -> void:
@@ -233,6 +275,7 @@ func fail() -> void:
func complete() -> void:
status = Status.COMPLETED
status_changed.emit(Status.COMPLETED)
questview.show_quest_complete()
for reward in rewards.keys():
if reward == "gold":
questor.gain_gold(rewards[reward])
@@ -254,11 +297,15 @@ func is_eligible(member : Adventurer) -> bool:
func is_taken() -> bool:
return status == Status.TAKEN
func location_name() -> String:
static func location_name(location : Locations) -> String:
match(location):
Locations.VOID: return "The Endless Void"
Locations.NESTORS_WOODS: return "Nestor's Woods"
return "ERROR"
func get_location_name() -> String:
return Quest.location_name(location)
func difficulty_name() -> String:
match(difficulty):
0: return "None"
@@ -268,3 +315,56 @@ func difficulty_name() -> String:
4: return "Extreme"
5: return "Legendary"
_: return "Unknown"
static func load_quest_list() -> void:
var path = ProjectSettings.get_setting_with_override("data/quests/directory")
var dir = DirAccess.open(path)
var quest : Quest
if dir:
dir.list_dir_begin()
var filename = dir.get_next()
while filename != "":
if not dir.current_is_dir() and filename.get_extension() == "gd":
var file = load(path + "/" + filename).new()
if file is Quest:
list.append(file)
filename = dir.get_next()
dir.list_dir_end()
static func generate(parameters : Dictionary) -> Quest:
var candidates : Array[Quest] = []
var l = list
for q in list:
if parameters.location != -1 and q.location != parameters.location:
continue
if q.difficulty < parameters.min_difficulty or q.difficulty > parameters.max_difficulty:
continue
candidates.append(q)
var choice : Quest = candidates.pick_random()
return choice.duplicate()
func save() -> Dictionary:
var d : Dictionary = {}
d.id = id
d.name = name
d.base_name = base_name
d.desc = desc
d.difficulty = difficulty
d.location = location
d.steps = steps
#TODO: Convert these!
#d.rewards = rewards
#d.guild_rewards = guild_rewards
d.covenant_cost = covenant_cost
d.length = length
d.progress = progress
d.current_step = current_step
d.taken = taken
d.status = status
var lst : Array = []
for evt in events:
lst.append(evt.save())
d.events = lst
return d

View File

@@ -0,0 +1,42 @@
extends Quest
func _init() -> void:
name = "[1] A Quest for Nestor's Woods that Ann Marie Promised Me"
super._init()
func setup() -> void:
var event_weights = [1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,4,4,5]
var num_events = 3 # event_weights.pick_random()
#The first event is guaranteed to be at the 50% mark.
var first : bool = true
var pranges : Array = []
var margin : float = 0.1
for i in range(num_events):
var evt : Quest.Event = Quest.Event.new()
evt.type = Quest.Event.Type.COMBAT
evt.enemies = ["goo"]
evt.time = 5
if first:
#Make invisible
evt.progress_point = .5
pranges.append([margin, evt.progress_point-margin])
pranges.append([evt.progress_point+margin, 1 - margin])
first = false
else:
evt.hidden = true
pranges.shuffle()
var range = pranges.pop_back()
evt.progress_point = randf_range(range[0], range[1])
if evt.progress_point - range[0] >= 2 * margin:
pranges.append([range[0], evt.progress_point - margin])
if range[1] - evt.progress_point >= 2 * margin:
pranges.append([evt.progress_point + margin, range[1]])
events.append(evt)
events.sort_custom(func(a,b): return a.progress_point < b.progress_point)
desc = "One day Ann Marie will write me."
location = Quest.Locations.NESTORS_WOODS
rewards = {"exp":10, "gold":5}
guild_rewards = {"glory":10, "gold":5}
covenant_cost = 5

View File

@@ -0,0 +1 @@
uid://w6t0lkkxmbl2

49
data/quests/feral_pigs.gd Normal file
View File

@@ -0,0 +1,49 @@
extends Quest
func _init() -> void:
name = "Fight of the Feral Pigs"
location = Quest.Locations.NESTORS_WOODS
difficulty = 1
super._init()
func setup() -> void:
var event_weights = [1,1,1,1,1,1,1,1,2,2,2,2,3,3,3]
var num_events = event_weights.pick_random()
#The first event is guaranteed to be at the 50% mark.
var first : bool = true
var pranges : Array = []
var margin : float = 0.1
for i in range(num_events):
var evt : Quest.Event = Quest.Event.new()
evt.type = Quest.Event.Type.COMBAT
evt.enemies = []
for j in range(randi() %3 + 1):
evt.enemies.append("feral pig")
evt.time = 600
evt.completed.connect(_on_combat_complete.bind(evt))
if first:
#Make invisible
evt.progress_point = .5
pranges.append([margin, evt.progress_point-margin])
pranges.append([evt.progress_point+margin, 1 - margin])
first = false
else:
evt.hidden = true
pranges.shuffle()
var range = pranges.pop_back()
evt.progress_point = randf_range(range[0], range[1])
if evt.progress_point - range[0] >= 2 * margin:
pranges.append([range[0], evt.progress_point - margin])
if range[1] - evt.progress_point >= 2 * margin:
pranges.append([evt.progress_point + margin, range[1]])
events.append(evt)
events.sort_custom(func(a,b): return a.progress_point < b.progress_point)
desc = "Pigs got out of Old Johns farm again. Poor fella dont know up from down at his age, he cant help it. Trouble is, pigs are causing trouble in them there woods and John sure aint takin care of it. Handle 'em for us, would you?"
location = Quest.Locations.NESTORS_WOODS
rewards = {"exp":10, "gold":5}
guild_rewards = {"glory":5, "gold":5}
covenant_cost = 5
func _on_combat_complete(event : Quest.Event) -> void:
rewards.gold += 2 * len(event.enemies)

View File

@@ -0,0 +1 @@
uid://nnl5qvb3csr0

View File

@@ -2,16 +2,40 @@ extends Quest
func _init() -> void:
name = "A Sticky Situation"
location = Quest.Locations.VOID
super._init()
func setup() -> void:
var event_weights = [1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,4,4,5]
var num_events = event_weights.pick_random()
var num_events = 3 # event_weights.pick_random()
#The first event is guaranteed to be at the 50% mark.
var first : bool = true
var pranges : Array = []
var margin : float = 0.1
for i in range(num_events):
var evt : Quest.Event = Quest.Event.new()
evt.type = Quest.Event.Type.COMBAT
evt.enemies = ["goo"]
evt.time = 5
if first:
#Make invisible
evt.progress_point = .5
pranges.append([margin, evt.progress_point-margin])
pranges.append([evt.progress_point+margin, 1 - margin])
first = false
else:
evt.hidden = true
pranges.shuffle()
var range = pranges.pop_back()
evt.progress_point = randf_range(range[0], range[1])
if evt.progress_point - range[0] >= 2 * margin:
pranges.append([range[0], evt.progress_point - margin])
if range[1] - evt.progress_point >= 2 * margin:
pranges.append([evt.progress_point + margin, range[1]])
events.append(evt)
events.sort_custom(func(a,b): return a.progress_point < b.progress_point)
desc = "Nestors Woods is facing a slime invasion and the farmers are getting nervous, send an adventurer to help squash that sticky situation!"
location =
location = Quest.Locations.NESTORS_WOODS
rewards = {"exp":10, "gold":5}
guild_rewards = {"glory":10, "gold":5}
covenant_cost = 5

View File

@@ -0,0 +1,3 @@
@tool
extends "res://addons/dialogic/Modules/LayeredPortrait/layered_portrait.gd"

View File

@@ -0,0 +1 @@
uid://0ah5wvuoqupd

View File

@@ -0,0 +1,14 @@
[gd_scene load_steps=2 format=3 ]
[ext_resource type="Script" path="res://dialogic/custom_layered_portrait.gd" id="1_uubi5"]
[node name="LayeredPortrait" type="CanvasGroup"]
script = ExtResource("1_uubi5")
[node name="Layer1" type="Sprite2D" parent="."]
[node name="Group1" type="Node2D" parent="."]
[node name="Layer1" type="Sprite2D" parent="Group1"]
[node name="Layer2" type="Sprite2D" parent="Group1"]

64
dialogic/test-style.tres Normal file
View File

@@ -0,0 +1,64 @@
[gd_resource type="Resource" script_class="DialogicStyle" load_steps=20 format=3 uid="uid://ds2tuiay4rabe"]
[ext_resource type="Script" uid="uid://1qacwh2qaoiq" path="res://addons/dialogic/Resources/dialogic_style_layer.gd" id="1_5yaxe"]
[ext_resource type="PackedScene" uid="uid://c1k5m0w3r40xf" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_FullBackground/full_background_layer.tscn" id="2_sw2mm"]
[ext_resource type="PackedScene" uid="uid://cy1y14inwkplb" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Portraits/vn_portrait_layer.tscn" id="3_mfkbk"]
[ext_resource type="PackedScene" uid="uid://cn674foxwedqu" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_Input/full_advance_input_layer.tscn" id="4_muaod"]
[ext_resource type="PackedScene" uid="uid://bquja8jyk8kbr" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_layer.tscn" id="5_587fh"]
[ext_resource type="PackedScene" uid="uid://dsbwnp5hegnu3" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_Glossary/glossary_popup_layer.tscn" id="6_i5shp"]
[ext_resource type="PackedScene" uid="uid://dhk6j6eb6e3q" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/vn_choice_layer.tscn" id="7_yh6aj"]
[ext_resource type="PackedScene" uid="uid://cvgf4c6gg0tsy" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_TextInput/text_input_layer.tscn" id="8_dikk4"]
[ext_resource type="PackedScene" uid="uid://lx24i8fl6uo" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_History/history_layer.tscn" id="9_isvcv"]
[ext_resource type="Script" uid="uid://b5nqsdfdl0jjg" path="res://addons/dialogic/Resources/dialogic_style.gd" id="10_qi7p4"]
[sub_resource type="Resource" id="Resource_5nw0r"]
script = ExtResource("1_5yaxe")
[sub_resource type="Resource" id="Resource_bpwsm"]
script = ExtResource("1_5yaxe")
scene = ExtResource("2_sw2mm")
[sub_resource type="Resource" id="Resource_swupp"]
script = ExtResource("1_5yaxe")
scene = ExtResource("3_mfkbk")
[sub_resource type="Resource" id="Resource_w34dy"]
script = ExtResource("1_5yaxe")
scene = ExtResource("4_muaod")
[sub_resource type="Resource" id="Resource_7vels"]
script = ExtResource("1_5yaxe")
scene = ExtResource("5_587fh")
[sub_resource type="Resource" id="Resource_rtvk6"]
script = ExtResource("1_5yaxe")
scene = ExtResource("6_i5shp")
[sub_resource type="Resource" id="Resource_j7il2"]
script = ExtResource("1_5yaxe")
scene = ExtResource("7_yh6aj")
[sub_resource type="Resource" id="Resource_qx0md"]
script = ExtResource("1_5yaxe")
scene = ExtResource("8_dikk4")
[sub_resource type="Resource" id="Resource_dv5be"]
script = ExtResource("1_5yaxe")
scene = ExtResource("9_isvcv")
[resource]
script = ExtResource("10_qi7p4")
name = "test-style"
layer_list = Array[String](["10", "11", "12", "13", "14", "15", "16", "17"])
layer_info = {
"": SubResource("Resource_5nw0r"),
"10": SubResource("Resource_bpwsm"),
"11": SubResource("Resource_swupp"),
"12": SubResource("Resource_w34dy"),
"13": SubResource("Resource_7vels"),
"14": SubResource("Resource_rtvk6"),
"15": SubResource("Resource_j7il2"),
"16": SubResource("Resource_qx0md"),
"17": SubResource("Resource_dv5be")
}
metadata/_latest_layer = ""

View File

@@ -0,0 +1,364 @@
[gd_scene load_steps=18 format=3 uid="uid://co4lvbcvc4n4r"]
[ext_resource type="Script" uid="uid://dh7v16o6p2byd" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_layer.gd" id="1_8w2ny"]
[ext_resource type="Script" uid="uid://deyihsk5ygbhr" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/animations.gd" id="2_lm5q8"]
[ext_resource type="Texture2D" uid="uid://wjhyhe1jeli4" path="res://external/dialogue-box.png" id="3_8w2ny"]
[ext_resource type="Script" uid="uid://sv8obsrlo5h4" path="res://addons/dialogic/Modules/Text/node_dialog_text.gd" id="4_upo8v"]
[ext_resource type="Script" uid="uid://beqdjhq0e2wyc" path="res://addons/dialogic/Modules/Text/node_type_sound.gd" id="5_8i8x0"]
[ext_resource type="Script" uid="uid://ceitutnrgf6q4" path="res://addons/dialogic/Modules/Text/node_next_indicator.gd" id="6_wmx4e"]
[ext_resource type="Texture2D" uid="uid://b0rpqfg4fhebk" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/next.svg" id="7_otcnr"]
[ext_resource type="Script" uid="uid://c1vq61i7urva2" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/autoadvance_indicator.gd" id="8_oc1t2"]
[ext_resource type="StyleBox" uid="uid://m7gyepkysu83" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_name_label_panel.tres" id="9_3ecl4"]
[ext_resource type="Script" uid="uid://qkdtvkpiquha" path="res://addons/dialogic/Modules/Text/node_name_label.gd" id="10_0m0vw"]
[sub_resource type="Animation" id="Animation_au0a2"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Anchor/AnimationParent:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Anchor/AnimationParent:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Anchor/AnimationParent:scale")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Anchor/AnimationParent:modulate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/4/type = "bezier"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Anchor/AnimationParent/Sizer/DialogTextPanel:rotation")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
[sub_resource type="Animation" id="Animation_6kbwc"]
resource_name = "new_text"
length = 0.4
tracks/0/type = "bezier"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Anchor/AnimationParent/Sizer/DialogTextPanel:rotation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(3, 3, 3, 3, 3),
"points": PackedFloat32Array(0, -0.025, 0, 0.025, 0, 0.005, -0.025, 0, 0.025, 0, -0.005, -0.025, 0, 0.025, 0, 0.005, -0.025, 0, 0.025, 0, 0, -0.025, 0, 0.025, 0),
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
[sub_resource type="Animation" id="Animation_g6k55"]
resource_name = "textbox_fade_up"
length = 0.7
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Anchor/AnimationParent:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.3, 0.7),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector2(0, 50), Vector2(0, 19.6793), Vector2(0, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Anchor/AnimationParent:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.1, 0.6),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Anchor/AnimationParent:rotation")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Anchor/AnimationParent:scale")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
[sub_resource type="Animation" id="Animation_htbgc"]
resource_name = "textbox_pop"
length = 0.3
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Anchor/AnimationParent:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Anchor/AnimationParent:rotation")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.2, 0.3),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [-0.0899883, 0.0258223, 0.0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Anchor/AnimationParent:scale")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.2, 0.3),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector2(0.793957, 0.778082), Vector2(0.937299, 1.14248), Vector2(1, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Anchor/AnimationParent:modulate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.3),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_c14kh"]
_data = {
&"RESET": SubResource("Animation_au0a2"),
&"new_text": SubResource("Animation_6kbwc"),
&"textbox_fade_up": SubResource("Animation_g6k55"),
&"textbox_pop": SubResource("Animation_htbgc")
}
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_lm5q8"]
texture = ExtResource("3_8w2ny")
texture_margin_left = 40.0
texture_margin_top = 40.0
texture_margin_right = 40.0
texture_margin_bottom = 40.0
[sub_resource type="FontVariation" id="FontVariation_v8y64"]
[node name="VN_TextboxLayer" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("1_8w2ny")
box_panel = "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_default_panel.tres"
box_color_use_global = false
box_size = Vector2(550, 150)
name_label_box_panel = "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_name_label_panel.tres"
name_label_box_modulate = Color(0, 0, 0, 1)
[node name="Animations" type="AnimationPlayer" parent="."]
unique_name_in_owner = true
libraries = {
&"": SubResource("AnimationLibrary_c14kh")
}
autoplay = "RESET"
script = ExtResource("2_lm5q8")
[node name="Anchor" type="Control" parent="."]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 0
[node name="AnimationParent" type="Control" parent="Anchor"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 0
mouse_filter = 2
[node name="Sizer" type="Control" parent="Anchor/AnimationParent"]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -250.0
offset_top = -100.0
offset_right = 250.0
grow_horizontal = 2
grow_vertical = 0
mouse_filter = 2
[node name="DialogTextPanel" type="PanelContainer" parent="Anchor/AnimationParent/Sizer"]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
theme_override_styles/panel = SubResource("StyleBoxTexture_lm5q8")
metadata/_edit_layout_mode = 1
[node name="HBoxContainer" type="HBoxContainer" parent="Anchor/AnimationParent/Sizer/DialogTextPanel"]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="Anchor/AnimationParent/Sizer/DialogTextPanel/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="NameLabelHolder" type="Control" parent="Anchor/AnimationParent/Sizer/DialogTextPanel/HBoxContainer/VBoxContainer"]
layout_mode = 2
mouse_filter = 2
[node name="NameLabelPanel" type="PanelContainer" parent="Anchor/AnimationParent/Sizer/DialogTextPanel/HBoxContainer/VBoxContainer/NameLabelHolder"]
unique_name_in_owner = true
self_modulate = Color(0.00784314, 0.00784314, 0.00784314, 0.843137)
layout_mode = 1
offset_left = 26.0
offset_top = 17.0
offset_right = 55.0
offset_bottom = 49.0
mouse_filter = 2
theme_override_styles/panel = ExtResource("9_3ecl4")
metadata/_edit_layout_mode = 1
metadata/_edit_use_custom_anchors = true
metadata/_edit_group_ = true
[node name="DialogicNode_NameLabel" type="Label" parent="Anchor/AnimationParent/Sizer/DialogTextPanel/HBoxContainer/VBoxContainer/NameLabelHolder/NameLabelPanel" node_paths=PackedStringArray("name_label_root")]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_fonts/font = SubResource("FontVariation_v8y64")
theme_override_font_sizes/font_size = 15
text = "Person"
script = ExtResource("10_0m0vw")
name_label_root = NodePath("..")
[node name="MarginContainer" type="MarginContainer" parent="Anchor/AnimationParent/Sizer/DialogTextPanel/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="DialogicNode_DialogText" type="RichTextLabel" parent="Anchor/AnimationParent/Sizer/DialogTextPanel/HBoxContainer/MarginContainer" node_paths=PackedStringArray("textbox_root")]
unique_name_in_owner = true
layout_mode = 2
mouse_filter = 1
theme_override_colors/default_color = Color(1, 1, 1, 1)
theme_override_font_sizes/normal_font_size = 15
theme_override_font_sizes/bold_font_size = 15
theme_override_font_sizes/bold_italics_font_size = 15
theme_override_font_sizes/italics_font_size = 15
bbcode_enabled = true
text = "Some default text"
visible_characters_behavior = 1
script = ExtResource("4_upo8v")
textbox_root = NodePath("../../..")
[node name="DialogicNode_TypeSounds" type="AudioStreamPlayer" parent="Anchor/AnimationParent/Sizer/DialogTextPanel/HBoxContainer/MarginContainer/DialogicNode_DialogText"]
unique_name_in_owner = true
script = ExtResource("5_8i8x0")
play_every_character = 0
[node name="NextIndicator" type="Control" parent="Anchor/AnimationParent/Sizer/DialogTextPanel"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 8
size_flags_vertical = 8
mouse_filter = 2
script = ExtResource("6_wmx4e")
show_on_questions = true
texture = ExtResource("7_otcnr")
metadata/_edit_layout_mode = 1
[node name="AutoAdvanceProgressbar" type="ProgressBar" parent="Anchor/AnimationParent/Sizer/DialogTextPanel"]
unique_name_in_owner = true
modulate = Color(1, 1, 1, 0.188235)
custom_minimum_size = Vector2(0, 10)
layout_mode = 2
size_flags_vertical = 8
mouse_filter = 2
max_value = 1.0
step = 0.001
value = 0.5
show_percentage = false
script = ExtResource("8_oc1t2")

View File

@@ -0,0 +1,16 @@
label Prespeech
I never imagined that one day I'd be in charge of a guild. To be honest, I never really imagined what my future would look like. I've never been very good at anything.
[background arg="res://graphics/spritesheet_characters.png" fade="0.4"]
I just lived every day working the best I could and hoping that somehow, someway, the world would show me what to do. And then grandma died and left me this letter.
do Game.switch_scenes("letter")
[end_timeline]
label Start Guildcard
Suddenly I had a purpose. I didn't know it then and I never asked for it, but filling out that card was the first step in becoming a better version of myself.
do Game.switch_scenes("guild_card")
Ugh, I hated paperwork and there sure was a lot of it.
[end_timeline]
label Start Schedule
And MORE paperwork. I was starting to understand why grandma thought risking death was better.
do Game.switch_scenes("set_shifts")
[end_timeline]
label First Portrait Open

View File

@@ -1,4 +1,9 @@
And after that, all that was left was to... just open the guild gate, I guess?
It took me a little while to find the thing in the middle of Nestor's Woods despite growing up there. I knew Guildhalls were hidden in another dimension, but I'd always pictured the Guild Gates would be more... magical looking?
do Game.switch_scenes("first_guildhall")
player: (Wow this is a mess... nobody's been here for a while. I should...)
- Stuff
Stuff stuff.
- set up some lights.
Hey, no touching! This isn't your home! Get out!
- clean it out.

View File

@@ -1,2 +0,0 @@
[style]
I never imagined that one day I'd be in charge of a guild. To be honest, I never really imagined what my future would look like. I've never been very good at anything. I just lived every day working the best I could and hoping that somehow, someway, the world would show me what to do. And then my grandma died.

View File

@@ -8,12 +8,22 @@
"sound_moods": {},
"style": ""
},
&"default_portrait": "",
&"default_portrait": "New portrait",
&"description": "",
&"display_name": "Player",
&"mirror": false,
&"nicknames": ["Guildmaster"],
&"offset": Vector2(0, 0),
&"portraits": {},
&"portraits": {
"New portrait": {
"export_overrides": {
"image": ""
},
"mirror": false,
"offset": Vector2(0, 0),
"scale": 1,
"scene": "res://dialogic/layered_portrait_player.tscn"
}
},
&"scale": 1.0
}

BIN
external/Test Portrait/Penny.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

40
external/Test Portrait/Penny.png.import vendored Normal file
View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dy01kbn6oq774"
path="res://.godot/imported/Penny.png-eed612fd907e6c9792369a6b6c727880.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/test portrait/Penny.png"
dest_files=["res://.godot/imported/Penny.png-eed612fd907e6c9792369a6b6c727880.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -0,0 +1,8 @@
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://cxecub83q07gq"]
[sub_resource type="Gradient" id="Gradient_u7u0c"]
offsets = PackedFloat32Array(0, 0.49604222, 0.89973617, 1)
colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0.68, 1, 0.86, 0.86, 1, 1, 0, 0, 1, 1)
[resource]
gradient = SubResource("Gradient_u7u0c")

View File

@@ -1,8 +1,8 @@
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://cd4jsivokd6sk"]
[sub_resource type="Gradient" id="Gradient_u7u0c"]
offsets = PackedFloat32Array(0, 0.49604222, 0.89973617, 1)
colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0.68, 1, 0.86, 0.86, 1, 1, 0, 0, 1, 1)
offsets = PackedFloat32Array(0, 0.5252918, 0.8774319, 1)
colors = PackedColorArray(0, 0, 0, 1, 0.68, 0.13600004, 0, 1, 1, 0.6533333, 0.19999999, 1, 1, 0.6, 0, 1)
[resource]
gradient = SubResource("Gradient_u7u0c")

View File

@@ -0,0 +1,8 @@
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://bpiu6d7lbhyw"]
[sub_resource type="Gradient" id="Gradient_s3ye8"]
offsets = PackedFloat32Array(0, 0.8385214, 0.99416345)
colors = PackedColorArray(0, 0, 0, 1, 0.4313402, 0.43134028, 0.43134007, 1, 0.7, 0.7, 0.7, 1)
[resource]
gradient = SubResource("Gradient_s3ye8")

View File

@@ -0,0 +1,8 @@
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://khdd0qlqn4jy"]
[sub_resource type="Gradient" id="Gradient_qpr8j"]
offsets = PackedFloat32Array(0, 0.33333334, 0.7829978)
colors = PackedColorArray(0.36862746, 0, 1, 1, 0.66, 0.30359998, 0.30359998, 1, 0.6997569, 0.41199392, 0.19485885, 1)
[resource]
gradient = SubResource("Gradient_qpr8j")

View File

@@ -0,0 +1,8 @@
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://cjs6gcaqkblxv"]
[sub_resource type="Gradient" id="Gradient_qpr8j"]
offsets = PackedFloat32Array(0, 0.33333334, 0.7829978)
colors = PackedColorArray(0.36862746, 0, 1, 1, 0.66, 0.30359998, 0.30359998, 1, 0.6997569, 0.41199392, 0.19485885, 1)
[resource]
gradient = SubResource("Gradient_qpr8j")

View File

@@ -0,0 +1,8 @@
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://spgxsr4e3q7v"]
[sub_resource type="Gradient" id="Gradient_qpr8j"]
offsets = PackedFloat32Array(0, 0.33333334, 0.7829978)
colors = PackedColorArray(0.36862746, 0, 1, 1, 0.66, 0.30359998, 0.30359998, 1, 0.6997569, 0.41199392, 0.19485885, 1)
[resource]
gradient = SubResource("Gradient_qpr8j")

View File

@@ -0,0 +1,8 @@
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://cxe2e2cp44nke"]
[sub_resource type="Gradient" id="Gradient_qpr8j"]
offsets = PackedFloat32Array(0, 0.33333334, 0.7829978)
colors = PackedColorArray(0.36862746, 0, 1, 1, 0.66, 0.30359998, 0.30359998, 1, 0.6997569, 0.41199392, 0.19485885, 1)
[resource]
gradient = SubResource("Gradient_qpr8j")

View File

@@ -0,0 +1,8 @@
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://ulft7ngl80hw"]
[sub_resource type="Gradient" id="Gradient_qpr8j"]
offsets = PackedFloat32Array(0, 0.33333334, 0.7829978)
colors = PackedColorArray(0.36862746, 0, 1, 1, 0.66, 0.30359998, 0.30359998, 1, 0.6997569, 0.41199392, 0.19485885, 1)
[resource]
gradient = SubResource("Gradient_qpr8j")

View File

@@ -0,0 +1,8 @@
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://dan3oxihr3rfl"]
[sub_resource type="Gradient" id="Gradient_qpr8j"]
offsets = PackedFloat32Array(0, 0.33333334, 0.7829978)
colors = PackedColorArray(0.36862746, 0, 1, 1, 0.66, 0.30359998, 0.30359998, 1, 0.6997569, 0.41199392, 0.19485885, 1)
[resource]
gradient = SubResource("Gradient_qpr8j")

View File

@@ -0,0 +1,8 @@
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://cj6b262y57ouo"]
[sub_resource type="Gradient" id="Gradient_qpr8j"]
offsets = PackedFloat32Array(0, 0.33333334, 0.7829978)
colors = PackedColorArray(0.36862746, 0, 1, 1, 0.66, 0.30359998, 0.30359998, 1, 0.6997569, 0.41199392, 0.19485885, 1)
[resource]
gradient = SubResource("Gradient_qpr8j")

View File

@@ -0,0 +1,8 @@
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://c2q21glbldxao"]
[sub_resource type="Gradient" id="Gradient_qpr8j"]
offsets = PackedFloat32Array(0, 0.33333334, 0.7829978)
colors = PackedColorArray(0.36862746, 0, 1, 1, 0.66, 0.30359998, 0.30359998, 1, 0.6997569, 0.41199392, 0.19485885, 1)
[resource]
gradient = SubResource("Gradient_qpr8j")

View File

@@ -0,0 +1,8 @@
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://bq1mcdggw8ksg"]
[sub_resource type="Gradient" id="Gradient_bnujo"]
offsets = PackedFloat32Array(0, 0.21700224, 0.3914989, 0.57270694, 1)
colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0, 1, 0.29954743, 0.29954746, 0.2995473, 1, 0.26657522, 0.2665752, 0.2665752, 1, 1, 1, 1, 1)
[resource]
gradient = SubResource("Gradient_bnujo")

BIN
external/Test Portrait/player/eye-a.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cygn0xfsayykd"
path="res://.godot/imported/eye-a.png-4ae928c135fabbb6dbe591d1f658a054.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/test portrait/player/eye-a.png"
dest_files=["res://.godot/imported/eye-a.png-4ae928c135fabbb6dbe591d1f658a054.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/Test Portrait/player/eye-b.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bg6lac6nl5k84"
path="res://.godot/imported/eye-b.png-8a340a04655f91a439de6b55293f607d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/test portrait/player/eye-b.png"
dest_files=["res://.godot/imported/eye-b.png-8a340a04655f91a439de6b55293f607d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/Test Portrait/player/eye-c.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bxdclvopvj75q"
path="res://.godot/imported/eye-c.png-b34d6d5c940d727416bc135e5e88a9ca.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/test portrait/player/eye-c.png"
dest_files=["res://.godot/imported/eye-c.png-b34d6d5c940d727416bc135e5e88a9ca.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

BIN
external/Test Portrait/priestess.clip vendored Normal file

Binary file not shown.

View File

@@ -1,10 +1,7 @@
[gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://ca43sapn4p61w"]
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://ca43sapn4p61w"]
[ext_resource type="Shader" uid="uid://dbcokq5fn2les" path="res://shaders/trigradient.tres" id="1_sifog"]
[ext_resource type="Texture2D" uid="uid://0dwdi7m62trg" path="res://external/test portrait/gradients/hair/(c)red.tres" id="2_2qy1r"]
[ext_resource type="Texture2D" uid="uid://s2ok31sncevx" path="res://external/test portrait/gradients/dark-hair.tres" id="3_5udns"]
[resource]
resource_local_to_scene = true
shader = ExtResource("1_sifog")
shader_parameter/Color_Gradient = ExtResource("2_2qy1r")
shader_parameter/Luminosity_Gradient = ExtResource("3_5udns")

View File

@@ -3,4 +3,8 @@
[ext_resource type="Shader" uid="uid://cru1otvka0qn5" path="res://external/test portrait/variant_color.gdshader" id="1_n3xwv"]
[resource]
resource_local_to_scene = true
shader = ExtResource("1_n3xwv")
shader_parameter/flash = false
shader_parameter/flash_strength = 0.0
shader_parameter/highlight = Color(0, 0, 0, 0)

View File

@@ -3,7 +3,9 @@ render_mode blend_mix;
uniform sampler2D color_gradient;
uniform sampler2D luminosity_gradient;
uniform bool flash;
uniform float flash_strength = 0.4;
uniform vec4 highlight : source_color = vec4(1,1,1,0);
void vertex() {
@@ -30,8 +32,11 @@ void fragment() {
K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
vec3 p2 = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
vec3 fin_rgb = c.z * mix(K.xxx, clamp(p2 - K.xxx, 0.0, 1.0), c.y);
COLOR.rgb = fin_rgb;
vec4 h = highlight;
if(flash){
h.a = flash_strength * (sin(TIME * 10.0) + 1.0)/2.0;
}
COLOR.rgb = mix(fin_rgb, h.rgb, h.a);
COLOR.a = col.a;

BIN
external/animated-flower.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

40
external/animated-flower.png.import vendored Normal file
View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bl05n76gr2dae"
path="res://.godot/imported/animated-flower.png-97452da660b05abe194469bd94b63006.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/animated-flower.png"
dest_files=["res://.godot/imported/animated-flower.png-97452da660b05abe194469bd94b63006.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/banner.clip vendored Normal file

Binary file not shown.

BIN
external/boar.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dxvwm21nupadm"
path="res://.godot/imported/1.png-b132cb4bd58ce4915bfe3a2aad13b672.ctex"
uid="uid://op4td4qm3tx5"
path="res://.godot/imported/boar.png-0161cfc5f286f436bdc0954a6e815cd6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/tc/1.png"
dest_files=["res://.godot/imported/1.png-b132cb4bd58ce4915bfe3a2aad13b672.ctex"]
source_file="res://external/boar.png"
dest_files=["res://.godot/imported/boar.png-0161cfc5f286f436bdc0954a6e815cd6.ctex"]
[params]

BIN
external/dialogue-box.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

40
external/dialogue-box.png.import vendored Normal file
View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://wjhyhe1jeli4"
path="res://.godot/imported/dialogue-box.png-0ceee6d4dcb665e8f8b014ee6968168b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/dialogue-box.png"
dest_files=["res://.godot/imported/dialogue-box.png-0ceee6d4dcb665e8f8b014ee6968168b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/dialogue.clip vendored Normal file

Binary file not shown.

BIN
external/forest.clip vendored Normal file

Binary file not shown.

BIN
external/glowing-line.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 820 B

40
external/glowing-line.png.import vendored Normal file
View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dck0g2dl7vbcr"
path="res://.godot/imported/glowing-line.png-71ab75e25179832dabf598a26bfa404d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/glowing-line.png"
dest_files=["res://.godot/imported/glowing-line.png-71ab75e25179832dabf598a26bfa404d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/goo.ase vendored Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c5hcva1k5qee0"
path="res://.godot/imported/guildcard-portrait-placeholder.png-c0bfec06bc2e891650a1650e78889916.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/guildcard-portrait-placeholder.png"
dest_files=["res://.godot/imported/guildcard-portrait-placeholder.png-c0bfec06bc2e891650a1650e78889916.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/lock-icon1.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 B

40
external/lock-icon1.png.import vendored Normal file
View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://6qi7xvvrlng3"
path="res://.godot/imported/lock-icon1.png-a5ad14bd088bcb5d0798e4260e205cca.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/lock-icon1.png"
dest_files=["res://.godot/imported/lock-icon1.png-a5ad14bd088bcb5d0798e4260e205cca.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/lock-icon2.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

40
external/lock-icon2.png.import vendored Normal file
View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cl4ff2juk3qmm"
path="res://.godot/imported/lock-icon2.png-6bdf747dfc894aa3d8731285a75b1353.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/lock-icon2.png"
dest_files=["res://.godot/imported/lock-icon2.png-6bdf747dfc894aa3d8731285a75b1353.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/mage.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

View File

@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://80esel4mewm6"
path="res://.godot/imported/3.png-b550413aa080c1c70e88acfeb4d322e4.ctex"
uid="uid://c25xtpn3k8s8d"
path="res://.godot/imported/mage.png-2f7cf9836d55d440949a539929eb6c3b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/tc/3.png"
dest_files=["res://.godot/imported/3.png-b550413aa080c1c70e88acfeb4d322e4.ctex"]
source_file="res://external/mage.png"
dest_files=["res://.godot/imported/mage.png-2f7cf9836d55d440949a539929eb6c3b.ctex"]
[params]

BIN
external/map-banner.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

40
external/map-banner.png.import vendored Normal file
View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://rifoabo58l1u"
path="res://.godot/imported/map-banner.png-016f440124dd5ae3534b42b36607ea77.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/map-banner.png"
dest_files=["res://.godot/imported/map-banner.png-016f440124dd5ae3534b42b36607ea77.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/map-gem.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bngkacv3iag6e"
path="res://.godot/imported/10.png-d7bac63bd3ed15459cfc452ed238de0d.ctex"
uid="uid://dj64ue73nrtbh"
path="res://.godot/imported/map-gem.png-00a9f5b9bcaa4ff470ebe15f690f936f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/tc/10.png"
dest_files=["res://.godot/imported/10.png-d7bac63bd3ed15459cfc452ed238de0d.ctex"]
source_file="res://external/map-gem.png"
dest_files=["res://.godot/imported/map-gem.png-00a9f5b9bcaa4ff470ebe15f690f936f.ctex"]
[params]

BIN
external/map-lock.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

40
external/map-lock.png.import vendored Normal file
View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cdr07atycreik"
path="res://.godot/imported/map-lock.png-af2af5d737fbbc3a624750480bf72dea.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/map-lock.png"
dest_files=["res://.godot/imported/map-lock.png-af2af5d737fbbc3a624750480bf72dea.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/map-point.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

40
external/map-point.png.import vendored Normal file
View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://crhj72fvh8i5l"
path="res://.godot/imported/map-point.png-c2487ab3ab5821eb91b19fa9cb7a469a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/map-point.png"
dest_files=["res://.godot/imported/map-point.png-c2487ab3ab5821eb91b19fa9cb7a469a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/map-region-ninepatch.aseprite vendored Normal file

Binary file not shown.

BIN
external/map-region-ninepatch.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 B

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dy3o1xtqg03at"
path="res://.godot/imported/map-region-ninepatch.png-0bd1376157ab4c11204e39e912041887.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/map-region-ninepatch.png"
dest_files=["res://.godot/imported/map-region-ninepatch.png-0bd1376157ab4c11204e39e912041887.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/map-unknown.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

40
external/map-unknown.png.import vendored Normal file
View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://udg6wm101m5g"
path="res://.godot/imported/map-unknown.png-49d0383fec7380d38597ef70212ff98f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/map-unknown.png"
dest_files=["res://.godot/imported/map-unknown.png-49d0383fec7380d38597ef70212ff98f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/merchant-placeholder.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cdqu6oo8lo743"
path="res://.godot/imported/merchant-placeholder.png-13c0f9bee78f149eb3daefd00b88aa8d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/merchant-placeholder.png"
dest_files=["res://.godot/imported/merchant-placeholder.png-13c0f9bee78f149eb3daefd00b88aa8d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
external/move_marker.aseprite vendored Normal file

Binary file not shown.

BIN
external/name-banner.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

40
external/name-banner.png.import vendored Normal file
View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://en58nd1oju64"
path="res://.godot/imported/name-banner.png-469d81ea212fc04dcb4a650664d0eb10.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://external/name-banner.png"
dest_files=["res://.godot/imported/name-banner.png-469d81ea212fc04dcb4a650664d0eb10.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Some files were not shown because too many files have changed in this diff Show More