Compare commits
10 Commits
48e335f56a
...
9a216d3285
| Author | SHA1 | Date | |
|---|---|---|---|
| 9a216d3285 | |||
| 7563e99059 | |||
| aa9b0720d8 | |||
| 9af5558668 | |||
| 00ef506689 | |||
| 023e88b84e | |||
| 82c630d668 | |||
| d64859cf35 | |||
| ef9e5c2664 | |||
| e525110b9d |
@@ -17,3 +17,16 @@ res://sounds/Door Hinge Creaking Door.wav
|
|||||||
****************************************************************************************************
|
****************************************************************************************************
|
||||||
3maze - res://sounds/owl_notification_005.wav
|
3maze - res://sounds/owl_notification_005.wav
|
||||||
SmartSoundFX - res://sounds/ORGANIC Paper Book Page Turn Short 02.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
|
||||||
|
|||||||
@@ -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 |
@@ -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
|
||||||
20
addons/ReorderableContainer/Icon/reorderable_hbox_icon.svg
Normal 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 |
@@ -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
|
||||||
20
addons/ReorderableContainer/Icon/reorderable_vbox_icon.svg
Normal 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 |
@@ -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
|
||||||
7
addons/ReorderableContainer/plugin.cfg
Normal 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"
|
||||||
14
addons/ReorderableContainer/plugin.gd
Normal 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")
|
||||||
1
addons/ReorderableContainer/plugin.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://0uea0ywilkmu
|
||||||
357
addons/ReorderableContainer/reorderable_container.gd
Normal 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)
|
||||||
1
addons/ReorderableContainer/reorderable_container.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://jwjxetmu7o2o
|
||||||
13
addons/ReorderableContainer/reorderable_hbox.gd
Normal 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()
|
||||||
1
addons/ReorderableContainer/reorderable_hbox.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://gp5cpsm0gdkx
|
||||||
13
addons/ReorderableContainer/reorderable_vbox.gd
Normal 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()
|
||||||
1
addons/ReorderableContainer/reorderable_vbox.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://d3mey1366662n
|
||||||
|
Before Width: | Height: | Size: 643 B After Width: | Height: | Size: 643 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bgw38ld52wu05"
|
||||||
|
path="res://.godot/imported/profile-popup.png-4f1104831ee3a5fc9edd8fb7c7f9b122.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_Glossary/profile-popup.png"
|
||||||
|
dest_files=["res://.godot/imported/profile-popup.png-4f1104831ee3a5fc9edd8fb7c7f9b122.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
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
class_name Quest extends Resource
|
class_name Quest extends Resource
|
||||||
|
|
||||||
|
#The list of available quests
|
||||||
|
static var list : Array[Quest]
|
||||||
|
|
||||||
|
|
||||||
enum Status{
|
enum Status{
|
||||||
@@ -31,10 +32,13 @@ class Event:
|
|||||||
VICTORY,
|
VICTORY,
|
||||||
DEFEAT
|
DEFEAT
|
||||||
}
|
}
|
||||||
|
var hidden : bool = false
|
||||||
var type : Type = Type.WAIT
|
var type : Type = Type.WAIT
|
||||||
var enemies : Array[String] = []
|
var enemies : Array[String] = []
|
||||||
|
var progress_point : float = 0
|
||||||
var time : float = 1
|
var time : float = 1
|
||||||
var time_elapsed
|
var time_elapsed
|
||||||
|
var complete : bool = false
|
||||||
signal completed()
|
signal completed()
|
||||||
signal failed()
|
signal failed()
|
||||||
|
|
||||||
@@ -43,6 +47,21 @@ class Event:
|
|||||||
var busy_list : Array = []
|
var busy_list : Array = []
|
||||||
var combat_state
|
var combat_state
|
||||||
var dex_speed : int
|
var dex_speed : int
|
||||||
|
|
||||||
|
func setup() -> void:
|
||||||
|
pass
|
||||||
|
|
||||||
|
func save_dict() -> 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:
|
func start(quest : Quest) -> void:
|
||||||
match(type):
|
match(type):
|
||||||
Type.WAIT:
|
Type.WAIT:
|
||||||
@@ -54,8 +73,9 @@ class Event:
|
|||||||
enemy_list.append(enemy_types[enemy_name].instantiate())
|
enemy_list.append(enemy_types[enemy_name].instantiate())
|
||||||
quest.questview.set_questor_animation("idle")
|
quest.questview.set_questor_animation("idle")
|
||||||
for enemy in enemy_list:
|
for enemy in enemy_list:
|
||||||
|
enemy.flip_h()
|
||||||
quest.questview.pause_setting()
|
quest.questview.pause_setting()
|
||||||
quest.questview.place_enemy(enemy)
|
quest.questview.place_enemy(enemy, true)
|
||||||
quest.questview.set_enemy_animation(enemy, "idle")
|
quest.questview.set_enemy_animation(enemy, "idle")
|
||||||
start_combat([quest.questor.quest_sprite], enemy_list)
|
start_combat([quest.questor.quest_sprite], enemy_list)
|
||||||
|
|
||||||
@@ -63,10 +83,12 @@ class Event:
|
|||||||
participants = []
|
participants = []
|
||||||
participants.append_array(adventurers)
|
participants.append_array(adventurers)
|
||||||
participants.append_array(enemies)
|
participants.append_array(enemies)
|
||||||
|
time = 1.25
|
||||||
|
time_elapsed = 0
|
||||||
var c_order : Array = []
|
var c_order : Array = []
|
||||||
var dex_speed = 0
|
var dex_speed = 0
|
||||||
for p in participants:
|
for p in participants:
|
||||||
|
p.show_lifebar(true)
|
||||||
c_order.append([p, p.stats.DEX])
|
c_order.append([p, p.stats.DEX])
|
||||||
if p.stats.DEX > dex_speed:
|
if p.stats.DEX > dex_speed:
|
||||||
dex_speed = p.stats.DEX
|
dex_speed = p.stats.DEX
|
||||||
@@ -91,7 +113,7 @@ class Event:
|
|||||||
|
|
||||||
func add_to_turn_queue(combatant) -> void:
|
func add_to_turn_queue(combatant) -> void:
|
||||||
#Calculate time
|
#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
|
#Walk through list to find insertion point
|
||||||
var idx = -1
|
var idx = -1
|
||||||
for i in range(len(turn_queue)):
|
for i in range(len(turn_queue)):
|
||||||
@@ -131,7 +153,8 @@ class Event:
|
|||||||
for p : QuestorSprite in participants:
|
for p : QuestorSprite in participants:
|
||||||
p.check_levelup()
|
p.check_levelup()
|
||||||
#TODO: Notify player if level up occurs
|
#TODO: Notify player if level up occurs
|
||||||
time = 5
|
time = 3
|
||||||
|
time_elapsed = 0
|
||||||
|
|
||||||
func defeat():
|
func defeat():
|
||||||
print("Questor lost!")
|
print("Questor lost!")
|
||||||
@@ -150,6 +173,11 @@ class Event:
|
|||||||
printerr("Tried to remove someone not in the turn queue")
|
printerr("Tried to remove someone not in the turn queue")
|
||||||
|
|
||||||
func _on_combat_action_complete(requeue : bool, combatant : QuestSprite) -> void:
|
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)
|
busy_list.erase(combatant)
|
||||||
if requeue:
|
if requeue:
|
||||||
add_to_turn_queue(combatant)
|
add_to_turn_queue(combatant)
|
||||||
@@ -159,7 +187,8 @@ class Event:
|
|||||||
#TODO: Come up with other options than just swinging at each other
|
#TODO: Come up with other options than just swinging at each other
|
||||||
var enemies : Array = get_enemy_list(combatant)
|
var enemies : Array = get_enemy_list(combatant)
|
||||||
var target = enemies.pick_random()
|
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:
|
func get_enemy_list(combatant) -> Array:
|
||||||
var lst = []
|
var lst = []
|
||||||
@@ -169,12 +198,21 @@ class Event:
|
|||||||
return lst
|
return lst
|
||||||
|
|
||||||
func resolve_combat() -> void:
|
func resolve_combat() -> void:
|
||||||
|
for p in participants:
|
||||||
|
p.show_lifebar(false)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
func process(delta : float) -> void:
|
func process(delta : float) -> void:
|
||||||
#TODO: Make quest combat work
|
#TODO: Make quest combat work
|
||||||
match(type):
|
match(type):
|
||||||
Type.COMBAT:
|
Type.COMBAT:
|
||||||
|
if time != 0:
|
||||||
|
time_elapsed += delta
|
||||||
|
if time_elapsed >= time:
|
||||||
|
time = 0
|
||||||
|
time_elapsed = 0
|
||||||
|
else:
|
||||||
|
return
|
||||||
match(combat_state):
|
match(combat_state):
|
||||||
CombatState.FIGHTING:
|
CombatState.FIGHTING:
|
||||||
if len(busy_list) < 1:
|
if len(busy_list) < 1:
|
||||||
@@ -189,14 +227,16 @@ class Event:
|
|||||||
else:
|
else:
|
||||||
resolve_combat()
|
resolve_combat()
|
||||||
CombatState.VICTORY:
|
CombatState.VICTORY:
|
||||||
time_elapsed += delta
|
resolve_combat()
|
||||||
if time_elapsed >= time:
|
complete = true
|
||||||
completed.emit()
|
completed.emit()
|
||||||
Type.WAIT:
|
Type.WAIT:
|
||||||
time_elapsed += delta
|
time_elapsed += delta
|
||||||
if time_elapsed >= time:
|
if time_elapsed >= time:
|
||||||
|
complete = true
|
||||||
completed.emit()
|
completed.emit()
|
||||||
|
|
||||||
|
var base_name : String = ""
|
||||||
var name : String = "A Basic Quest"
|
var name : String = "A Basic Quest"
|
||||||
var desc : String = "The default quest, with no special anything."
|
var desc : String = "The default quest, with no special anything."
|
||||||
var difficulty : int = 1
|
var difficulty : int = 1
|
||||||
@@ -233,6 +273,7 @@ func fail() -> void:
|
|||||||
func complete() -> void:
|
func complete() -> void:
|
||||||
status = Status.COMPLETED
|
status = Status.COMPLETED
|
||||||
status_changed.emit(Status.COMPLETED)
|
status_changed.emit(Status.COMPLETED)
|
||||||
|
questview.show_quest_complete()
|
||||||
for reward in rewards.keys():
|
for reward in rewards.keys():
|
||||||
if reward == "gold":
|
if reward == "gold":
|
||||||
questor.gain_gold(rewards[reward])
|
questor.gain_gold(rewards[reward])
|
||||||
@@ -268,3 +309,46 @@ func difficulty_name() -> String:
|
|||||||
4: return "Extreme"
|
4: return "Extreme"
|
||||||
5: return "Legendary"
|
5: return "Legendary"
|
||||||
_: return "Unknown"
|
_: 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:
|
||||||
|
return null
|
||||||
|
|
||||||
|
func save_dict() -> Dictionary:
|
||||||
|
var d : Dictionary = {}
|
||||||
|
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_dict())
|
||||||
|
d.events = lst
|
||||||
|
return d
|
||||||
|
|||||||
@@ -1,17 +1,37 @@
|
|||||||
extends Quest
|
extends Quest
|
||||||
|
|
||||||
func _init() -> void:
|
func setup() -> void:
|
||||||
name = "A Sticky Situation"
|
name = "A Sticky Situation"
|
||||||
var event_weights = [1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,4,4,5]
|
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):
|
for i in range(num_events):
|
||||||
var evt : Quest.Event = Quest.Event.new()
|
var evt : Quest.Event = Quest.Event.new()
|
||||||
evt.type = Quest.Event.Type.COMBAT
|
evt.type = Quest.Event.Type.COMBAT
|
||||||
evt.enemies = ["goo"]
|
evt.enemies = ["goo"]
|
||||||
evt.time = 5
|
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.append(evt)
|
||||||
|
events.sort_custom(func(a,b): return a.progress_point < b.progress_point)
|
||||||
desc = "Nestor’s Woods is facing a slime invasion and the farmers are getting nervous, send an adventurer to help squash that sticky situation!"
|
desc = "Nestor’s 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}
|
rewards = {"exp":10, "gold":5}
|
||||||
guild_rewards = {"glory":10, "gold":5}
|
guild_rewards = {"glory":10, "gold":5}
|
||||||
covenant_cost = 5
|
covenant_cost = 5
|
||||||
|
|||||||
3
dialogic/custom_layered_portrait.gd
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
@tool
|
||||||
|
extends "res://addons/dialogic/Modules/LayeredPortrait/layered_portrait.gd"
|
||||||
|
|
||||||
1
dialogic/custom_layered_portrait.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://0ah5wvuoqupd
|
||||||
14
dialogic/layered_portrait_player.tscn
Normal 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
@@ -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 = "13"
|
||||||
364
dialogic/test_textbox_layer.tscn
Normal 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")
|
||||||
16
dialogic/timelines/game_start.dtl
Normal 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
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
|
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...)
|
player: (Wow this is a mess... nobody's been here for a while. I should...)
|
||||||
- set up some lights.
|
- set up some lights.
|
||||||
Hey, no touching! This isn't your home! Get out!
|
Hey, no touching! This isn't your home! Get out!
|
||||||
@@ -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.
|
|
||||||
@@ -8,12 +8,22 @@
|
|||||||
"sound_moods": {},
|
"sound_moods": {},
|
||||||
"style": ""
|
"style": ""
|
||||||
},
|
},
|
||||||
&"default_portrait": "",
|
&"default_portrait": "New portrait",
|
||||||
&"description": "",
|
&"description": "",
|
||||||
&"display_name": "Player",
|
&"display_name": "Player",
|
||||||
&"mirror": false,
|
&"mirror": false,
|
||||||
&"nicknames": ["Guildmaster"],
|
&"nicknames": ["Guildmaster"],
|
||||||
&"offset": Vector2(0, 0),
|
&"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
|
&"scale": 1.0
|
||||||
}
|
}
|
||||||
BIN
external/Test Portrait/Penny.png
vendored
Normal file
|
After Width: | Height: | Size: 102 KiB |
@@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://bgw38ld52wu05"
|
uid="uid://dy01kbn6oq774"
|
||||||
path="res://.godot/imported/profile-popup.png-ac2c647ffb9a3ddb191e025f4c871f30.ctex"
|
path="res://.godot/imported/Penny.png-eed612fd907e6c9792369a6b6c727880.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://graphics/profile-popup.png"
|
source_file="res://external/test portrait/Penny.png"
|
||||||
dest_files=["res://.godot/imported/profile-popup.png-ac2c647ffb9a3ddb191e025f4c871f30.ctex"]
|
dest_files=["res://.godot/imported/Penny.png-eed612fd907e6c9792369a6b6c727880.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
8
external/Test Portrait/gradients/hair/(c)blue.tres
vendored
Normal 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")
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://cd4jsivokd6sk"]
|
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://cd4jsivokd6sk"]
|
||||||
|
|
||||||
[sub_resource type="Gradient" id="Gradient_u7u0c"]
|
[sub_resource type="Gradient" id="Gradient_u7u0c"]
|
||||||
offsets = PackedFloat32Array(0, 0.49604222, 0.89973617, 1)
|
offsets = PackedFloat32Array(0, 0.5252918, 0.8774319, 1)
|
||||||
colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0.68, 1, 0.86, 0.86, 1, 1, 0, 0, 1, 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]
|
[resource]
|
||||||
gradient = SubResource("Gradient_u7u0c")
|
gradient = SubResource("Gradient_u7u0c")
|
||||||
|
|||||||
8
external/Test Portrait/gradients/hair/(l)mid.tres
vendored
Normal 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")
|
||||||
8
external/Test Portrait/gradients/skin/(c)blue.tres
vendored
Normal 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")
|
||||||
8
external/Test Portrait/gradients/skin/(c)brown.tres
vendored
Normal 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")
|
||||||
8
external/Test Portrait/gradients/skin/(c)dark.tres
vendored
Normal 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")
|
||||||
8
external/Test Portrait/gradients/skin/(c)medium.tres
vendored
Normal 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")
|
||||||
8
external/Test Portrait/gradients/skin/(c)olive.tres
vendored
Normal 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")
|
||||||
8
external/Test Portrait/gradients/skin/(c)pale.tres
vendored
Normal 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")
|
||||||
8
external/Test Portrait/gradients/skin/(c)red.tres
vendored
Normal 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")
|
||||||
8
external/Test Portrait/gradients/skin/(c)white.tres
vendored
Normal 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")
|
||||||
8
external/Test Portrait/gradients/skin/(l)dark.tres
vendored
Normal 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
|
After Width: | Height: | Size: 12 KiB |
40
external/Test Portrait/player/eye-a.png.import
vendored
Normal 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
|
After Width: | Height: | Size: 12 KiB |
40
external/Test Portrait/player/eye-b.png.import
vendored
Normal 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
|
After Width: | Height: | Size: 12 KiB |
40
external/Test Portrait/player/eye-c.png.import
vendored
Normal 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
|
||||||
BIN
external/Test Portrait/portrait concepts.clip
vendored
Normal file
BIN
external/Test Portrait/priestess.clip
vendored
Normal file
7
external/Test Portrait/tri-hair.tres
vendored
@@ -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="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]
|
||||||
|
resource_local_to_scene = true
|
||||||
shader = ExtResource("1_sifog")
|
shader = ExtResource("1_sifog")
|
||||||
shader_parameter/Color_Gradient = ExtResource("2_2qy1r")
|
|
||||||
shader_parameter/Luminosity_Gradient = ExtResource("3_5udns")
|
|
||||||
|
|||||||
4
external/Test Portrait/tri-skin.tres
vendored
@@ -3,4 +3,8 @@
|
|||||||
[ext_resource type="Shader" uid="uid://cru1otvka0qn5" path="res://external/test portrait/variant_color.gdshader" id="1_n3xwv"]
|
[ext_resource type="Shader" uid="uid://cru1otvka0qn5" path="res://external/test portrait/variant_color.gdshader" id="1_n3xwv"]
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
|
resource_local_to_scene = true
|
||||||
shader = ExtResource("1_n3xwv")
|
shader = ExtResource("1_n3xwv")
|
||||||
|
shader_parameter/flash = false
|
||||||
|
shader_parameter/flash_strength = 0.0
|
||||||
|
shader_parameter/highlight = Color(0, 0, 0, 0)
|
||||||
|
|||||||
11
external/Test Portrait/variant_color.gdshader
vendored
@@ -3,7 +3,9 @@ render_mode blend_mix;
|
|||||||
|
|
||||||
uniform sampler2D color_gradient;
|
uniform sampler2D color_gradient;
|
||||||
uniform sampler2D luminosity_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() {
|
void vertex() {
|
||||||
@@ -30,8 +32,11 @@ void fragment() {
|
|||||||
K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
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 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);
|
vec3 fin_rgb = c.z * mix(K.xxx, clamp(p2 - K.xxx, 0.0, 1.0), c.y);
|
||||||
|
vec4 h = highlight;
|
||||||
COLOR.rgb = fin_rgb;
|
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;
|
COLOR.a = col.a;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
BIN
external/dialogue-box.png
vendored
Normal file
|
After Width: | Height: | Size: 13 KiB |
40
external/dialogue-box.png.import
vendored
Normal 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
BIN
external/goo.ase
vendored
Normal file
BIN
external/guildcard-portrait-placeholder.png
vendored
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
40
external/guildcard-portrait-placeholder.png.import
vendored
Normal 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
|
After Width: | Height: | Size: 375 B |
40
external/lock-icon1.png.import
vendored
Normal 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
|
After Width: | Height: | Size: 371 B |
40
external/lock-icon2.png.import
vendored
Normal 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
|
After Width: | Height: | Size: 148 KiB |
40
external/mage.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://c25xtpn3k8s8d"
|
||||||
|
path="res://.godot/imported/mage.png-2f7cf9836d55d440949a539929eb6c3b.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://external/mage.png"
|
||||||
|
dest_files=["res://.godot/imported/mage.png-2f7cf9836d55d440949a539929eb6c3b.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-banner.png
vendored
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
40
external/map-banner.png.import
vendored
Normal 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
|
After Width: | Height: | Size: 5.6 KiB |
40
external/map-gem.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dj64ue73nrtbh"
|
||||||
|
path="res://.godot/imported/map-gem.png-00a9f5b9bcaa4ff470ebe15f690f936f.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://external/map-gem.png"
|
||||||
|
dest_files=["res://.godot/imported/map-gem.png-00a9f5b9bcaa4ff470ebe15f690f936f.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-lock.png
vendored
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
40
external/map-lock.png.import
vendored
Normal 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
|
After Width: | Height: | Size: 12 KiB |
40
external/map-point.png.import
vendored
Normal 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-unknown.png
vendored
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
40
external/map-unknown.png.import
vendored
Normal 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
|
After Width: | Height: | Size: 543 B |
40
external/merchant-placeholder.png.import
vendored
Normal 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
BIN
external/name-banner.png
vendored
Normal file
|
After Width: | Height: | Size: 16 KiB |
40
external/name-banner.png.import
vendored
Normal 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
|
||||||
BIN
external/outline-np.png
vendored
Normal file
|
After Width: | Height: | Size: 100 B |
40
external/outline-np.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cnwcvebl0c1it"
|
||||||
|
path="res://.godot/imported/outline-np.png-0697bc1c71c69083200c70b4a3720757.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://external/outline-np.png"
|
||||||
|
dest_files=["res://.godot/imported/outline-np.png-0697bc1c71c69083200c70b4a3720757.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/pitchfork.ase
vendored
Normal file
BIN
external/pom-intro.clip
vendored
Normal file
BIN
external/pom-intro.png
vendored
Normal file
|
After Width: | Height: | Size: 26 KiB |
40
external/pom-intro.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bdmixnd1mhgfu"
|
||||||
|
path="res://.godot/imported/pom-intro.png-7ef40172310857171d345738a7ffed65.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://external/pom-intro.png"
|
||||||
|
dest_files=["res://.godot/imported/pom-intro.png-7ef40172310857171d345738a7ffed65.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/portrait.clip
vendored
BIN
external/questor-shadow.png
vendored
Normal file
|
After Width: | Height: | Size: 345 B |
40
external/questor-shadow.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://67wavev1pifc"
|
||||||
|
path="res://.godot/imported/questor-shadow.png-fc6ac833a5cd35215e2d6ed257e929bc.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://external/questor-shadow.png"
|
||||||
|
dest_files=["res://.godot/imported/questor-shadow.png-fc6ac833a5cd35215e2d6ed257e929bc.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/signature.png
vendored
Normal file
|
After Width: | Height: | Size: 12 KiB |
40
external/signature.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://hdjte1ipyyio"
|
||||||
|
path="res://.godot/imported/signature.png-5527eb152408fafee8a4b656ff1507f9.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://external/signature.png"
|
||||||
|
dest_files=["res://.godot/imported/signature.png-5527eb152408fafee8a4b656ff1507f9.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-map.png
vendored
Normal file
|
After Width: | Height: | Size: 238 KiB |
40
external/test-map.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://jhaiu4lbwswl"
|
||||||
|
path="res://.godot/imported/test-map.png-d85a8ebcae62f1d0eb90a60ff0af0fb2.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://external/test-map.png"
|
||||||
|
dest_files=["res://.godot/imported/test-map.png-d85a8ebcae62f1d0eb90a60ff0af0fb2.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-qsvchar.png
vendored
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 13 KiB |
BIN
external/test-qsvchar2.gif
vendored
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
external/testchar.ase
vendored
Normal file
BIN
external/unknown-map-point.png
vendored
Normal file
|
After Width: | Height: | Size: 12 KiB |